<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1684531418775159957</id><updated>2026-10-11T03:19:15.648-04:00</updated><category term="Hibernate"/><category term="COTS"/><category term="RTC"/><category term="GPGPU"/><category term="Gigaspaces"/><category term="Java"/><category term="OpenCL"/><category term="Replication"/><category term="Spring"/><category term="IMDG"/><category term="Oracle"/><category term="Data Structure"/><category term="Distributed Cache"/><category term="Gemfire"/><category term="IMDB"/><category term="JDBC"/><category term="Partition"/><category term="TimesTen"/><category term="Weblogic"/><category term="quartz scheduler"/><category term="Algorithm"/><category term="C++"/><category term="C99"/><category term="CPU"/><category term="Cache Listener"/><category term="Certificate"/><category term="Co-Processor"/><category term="Consistent Hash"/><category term="DP"/><category term="DST"/><category term="Data Source"/><category term="Float"/><category term="H2"/><category term="HPC"/><category term="ICD"/><category term="Interview"/><category term="JMS"/><category term="JMS Connection"/><category term="JMS Session"/><category term="JTA"/><category term="Locking"/><category term="Lucene"/><category term="MISO"/><category term="MQ"/><category term="MongoDB"/><category term="Network"/><category term="NoSQL"/><category term="OS"/><category term="Parallism"/><category term="RESTful"/><category term="SQL"/><category term="SSL"/><category term="Scale"/><category term="Sphinx"/><category term="TP"/><category term="Websphere MQ"/><category term="Windows 7"/><category term="XMLDB"/><category term="algorithmic trading"/><category term="antlr"/><category term="classloader"/><category term="cron trigger"/><category term="locale"/><category term="order by"/><title type='text'>Yong Jiao&#39;s Blog about Technology and Life</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-8452614063386070929</id><published>2014-06-27T14:00:00.001-04:00</published><updated>2014-06-27T14:17:54.199-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gemfire"/><category scheme="http://www.blogger.com/atom/ns#" term="Gigaspaces"/><category scheme="http://www.blogger.com/atom/ns#" term="IMDG"/><category scheme="http://www.blogger.com/atom/ns#" term="Partition"/><category scheme="http://www.blogger.com/atom/ns#" term="Replication"/><title type='text'>Simple Comparisons on some In-Memory Data Grids</title><content type='html'>&amp;nbsp;
 &lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;width: 725px;&quot;&gt;&lt;colgroup&gt;&lt;col style=&quot;mso-width-alt: 4124; mso-width-source: userset; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;/col&gt;
 &lt;col style=&quot;mso-width-alt: 6684; mso-width-source: userset; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;/col&gt;
 &lt;col style=&quot;mso-width-alt: 1962; mso-width-source: userset; width: 41pt;&quot; width=&quot;55&quot;&gt;&lt;/col&gt;
 &lt;col style=&quot;mso-width-alt: 2673; mso-width-source: userset; width: 56pt;&quot; width=&quot;75&quot;&gt;&lt;/col&gt;
 &lt;col style=&quot;mso-width-alt: 2161; mso-width-source: userset; width: 46pt;&quot; width=&quot;61&quot;&gt;&lt;/col&gt;
 &lt;col style=&quot;mso-width-alt: 2474; mso-width-source: userset; width: 52pt;&quot; width=&quot;70&quot;&gt;&lt;/col&gt;
 &lt;col style=&quot;mso-width-alt: 5688; mso-width-source: userset; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;/col&gt;
 &lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.2pt;&quot;&gt;
  &lt;td class=&quot;xl67&quot; height=&quot;18&quot; style=&quot;height: 13.2pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Fetures&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
  &lt;td class=&quot;xl67&quot; style=&quot;border-left: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Feature
  Description&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
  &lt;td class=&quot;xl67&quot; style=&quot;border-left: medium none; width: 41pt;&quot; width=&quot;55&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;GemFire7&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
  &lt;td class=&quot;xl67&quot; style=&quot;border-left: medium none; width: 56pt;&quot; width=&quot;75&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Coherence3.7&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
  &lt;td class=&quot;xl67&quot; style=&quot;border-left: medium none; width: 46pt;&quot; width=&quot;61&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Infinispan5&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
  &lt;td class=&quot;xl67&quot; style=&quot;border-left: medium none; width: 52pt;&quot; width=&quot;70&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Gigaspaces7&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
  &lt;td class=&quot;xl67&quot; style=&quot;border-left: medium none; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Notes&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.8pt;&quot;&gt;
  &lt;td class=&quot;xl68&quot; height=&quot;18&quot; style=&quot;border-top: medium none; height: 13.8pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;1. topologies&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl69&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;peer-peer;
  client-server&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl70&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl70&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl70&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl70&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl68&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;42&quot; style=&quot;height: 31.2pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;42&quot; style=&quot;border-top: medium none; height: 31.2pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;2. cross-site / &lt;br /&gt;
    &amp;nbsp; WAN replication&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;datacenter-datacenter;
  region-region&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Coherence
  support by incubator&lt;br /&gt;
    &quot;Push replication&quot;; &lt;br /&gt;
    Infinispan basic support in V5.2&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.2pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;18&quot; style=&quot;border-top: medium none; height: 13.2pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;3. read-most
  scalability&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;via replication&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;4. write-most
  scalability&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;via
  partitioning and replication&lt;br /&gt;
    between primary and backups&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;5. high
  availability / HA&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;via
  replication and persistence&lt;br /&gt;
    &amp;nbsp;into disk (DB)&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;6. asychronous&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp; replication&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;useful
  for slow changing data and&lt;br /&gt;
    WAN replication&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Coherence
  support by incubator &lt;br /&gt;
    &quot;Push replication&quot;;&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;7. partition
  rehashing&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;consistent
  hashing to reduce&lt;br /&gt;
    data relocation&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;all
  seem to use consistent &lt;br /&gt;
    hashing-like algorithms&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.2pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;18&quot; style=&quot;border-top: medium none; height: 13.2pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;8. dynamic
  clustering&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;adds or loses nodes&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;42&quot; style=&quot;height: 31.2pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;42&quot; style=&quot;border-top: medium none; height: 31.2pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;9. updating among &lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp; partition backups&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;master-backup:
  less deadlock prone&lt;br /&gt;
    and IO master-master/update &lt;br /&gt;
    anywhere: more dealock prone and IO&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Infinispan
  only has master-master &lt;br /&gt;
    that incurs deadlock for slow &lt;br /&gt;
    network and large caches&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;69&quot; style=&quot;height: 51.6pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;69&quot; style=&quot;border-top: medium none; height: 51.6pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;10. cache loader and&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;2
  application interfaces: loades data &lt;br /&gt;
    from DB and saves data into Cache. &lt;br /&gt;
    With cache loader and writer, &lt;br /&gt;
    applications only need to interace&lt;br /&gt;
    with Cache!&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Infinispan
  writers only support JPA, not JDBC or Hibernate!&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;11. read-through and&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read-ahead&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;populates
  cache with DB &lt;br /&gt;
    in batch mode&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 120pt;&quot; width=&quot;160&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;no
  prefetch/batch support from &lt;br /&gt;
    Gemfire and infinispan&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;42&quot; style=&quot;height: 31.2pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;42&quot; style=&quot;border-top: medium none; height: 31.2pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;12. write-through and &lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write-behind&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;persists
  cache into wherever they&lt;br /&gt;
    were loaded.write-behind persists &lt;br /&gt;
    data asynchronously&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;13. event
  notification&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Cache
  also works as a messaging and &lt;br /&gt;
    parallel processing bus like JMS/MDB&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;42&quot; style=&quot;height: 31.2pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;42&quot; style=&quot;border-top: medium none; height: 31.2pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;14. continous
  querying&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;register
  contents-based interests &lt;br /&gt;
    with Cache and receive updates &lt;br /&gt;
    continously.&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;15. cache
  querying&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;SQL
  like query: not only searches&lt;br /&gt;
    &amp;nbsp;based on key matching&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.2pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;18&quot; style=&quot;border-top: medium none; height: 13.2pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;16. locking
  and tx&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;JTA
  (global tx) and ACID properties&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;17. off-heap&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;puts
  cache data off Java heap &lt;br /&gt;
    so that GC pause time is reduce!&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;18. key affinity / &lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; colocation&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;colocates
  related cache objects on the &lt;br /&gt;
    same partition to reduce IO&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;19. customized &lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partitioning&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;puts
  cache into specific cluster node&lt;br /&gt;
    to bypass cache hashing algorithm&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;42&quot; style=&quot;height: 31.2pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;42&quot; style=&quot;border-top: medium none; height: 31.2pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;20. synchronous&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; requests like RFQ&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;synchronou
  requests should go &lt;br /&gt;
    through the same partition routing as &lt;br /&gt;
    asynchrous messages.&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.2pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;18&quot; style=&quot;border-top: medium none; height: 13.2pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;21. API&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Map,Restful
  and appropriate interfaces&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.2pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;18&quot; style=&quot;border-top: medium none; height: 13.2pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;22. language
  bindings&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Java,
  C++ etc&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;23. map-reduce / &lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scatter-gather&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;submits
  aggregation tasks to run &lt;br /&gt;
    across multiple or all cluster nodes&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;18&quot; style=&quot;height: 13.2pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;18&quot; style=&quot;border-top: medium none; height: 13.2pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;24. monitoring&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;monitor
  the health of clusters&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 192, 0); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Med&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21pt;&quot;&gt;
  &lt;td class=&quot;xl71&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt; width: 87pt;&quot; width=&quot;116&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;25. J2EE (JMS,Web,&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Remoting)&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;how
  much J2EE? to support?&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;28&quot; style=&quot;height: 21.0pt;&quot;&gt;
  &lt;td class=&quot;xl73&quot; height=&quot;28&quot; style=&quot;border-top: medium none; height: 21pt;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;26. migration
  effort&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl71&quot; style=&quot;border-left: medium none; border-top: medium none; width: 141pt;&quot; width=&quot;188&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;how
  to migrate to a different cache&lt;br /&gt;
    production in a J2EE app. server&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(0, 176, 80); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;High&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl72&quot; style=&quot;background: none repeat scroll 0% 0% rgb(255, 51, 153); border: 0.5pt solid windowtext; color: black; font-family: Arial; font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Low&lt;/span&gt;&lt;/td&gt;
  &lt;td class=&quot;xl73&quot; style=&quot;border-left: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;GigaSpaces is an app.
  server&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/8452614063386070929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2014/06/simple-comparisons-on-some-in-memory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8452614063386070929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8452614063386070929'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2014/06/simple-comparisons-on-some-in-memory.html' title='Simple Comparisons on some In-Memory Data Grids'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-7220792254511469309</id><published>2014-06-23T13:55:00.001-04:00</published><updated>2014-06-23T13:55:56.952-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JMS Connection"/><category scheme="http://www.blogger.com/atom/ns#" term="JMS Session"/><category scheme="http://www.blogger.com/atom/ns#" term="MQ"/><title type='text'>JMS Connection and Session on WebSphere MQ 7.1</title><content type='html'>The difference between JMS API&#39;s Connection and Session will probably confuse many naive developers. Their performance implications will only make things worse.&lt;br /&gt;
This is primarily because we are used to thinking connection and session are the same and can be used interchangeably to represent a unique single-threaded conversation between a server and a client. This is indeed the case for DB servers and clients.&lt;br /&gt;
&lt;br /&gt;
The basic idea of JMS API&#39;s connection and session is to first create a top level heavyweight physical connection, then several lightweight sessions / logical connections under the only physical connection.&lt;br /&gt;
Because of the connection&#39;s heavyweight nature, we usually pool them just like DB connection pooling.&amp;nbsp; We hope the connection can create lightweight sessions very fast and service its session operations (sending, receiving, tx etc) efficient by multiplexing them through its only physical connection. &lt;br /&gt;
Add to this, the following Spring configures supports caching a single JMS connection and multiple sessions:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;&quot;&gt;&amp;lt;bean id=&quot;cachedConnectionFactory&quot;&amp;nbsp; class=&quot;org.springframework.jms.connection.CachingConnectionFactory&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; p:targetConnectionFactory-ref=&quot;myConnFactory&quot; p:sessionCacheSize=&quot;10&quot;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
However the JMS specification doesn&#39;t say how the MOM vendors should implement connections and sessions. For earlier WebSphere MQ versions before 7, each JMS session actually also represents a brand new physical connection / channel instance just like a JMS connection.&lt;br /&gt;
MQ version 7 introduces the so called &quot;sharing conversations&quot; which allows a configurable number of JMS connections and sessions (both represent conversations in MQ terms) to share a single physical connection / channel instance.&lt;br /&gt;
The number of conversations that can be shared across a single physical connection / 
channel instance is determined by the WebSphere MQ channel property&lt;b&gt; SHARECNV&lt;/b&gt;. The default value of this property for Server Connection Channels is 10. A value of 0 or 1 basically disables the sharing.&lt;br /&gt;
In order to use this feature, your client side JMS connection factory also need to enable property&lt;br /&gt;
&lt;b&gt; SHARECONVALLOWED&lt;/b&gt;.&lt;br /&gt;
For example, assuming SHARECNV is 10, you created 5 connections and 15 sessions (it doesn&#39;t matter which connections created which sessions from sharing perspective), the total physical connections needed is (5+15)/10=2&lt;br /&gt;
For more information, you refer to &lt;a href=&quot;http://www-01.ibm.com/support/docview.wss?uid=swg21507483&quot; target=&quot;_blank&quot;&gt;this page&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
If you are developing a low latency and high performance application, you must know how to tune JMS connections and sessions on your MQM vendor.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;How to Create Sessions quickly?&lt;br /&gt;If you use the previous Spring config, you should estimate the maximum sessions you needs and then pre-populate some of them based on the SHARECNV value. Otherwise some session creations will be as slow as creating a new physical connection.&lt;/li&gt;
&lt;li&gt;How Many Connections to Create? &lt;br /&gt;Due to the multiplexing nature, if most of the multiplexed sessions under a connection are busy most of the time, you should move those busy sessions to new connections. Of course, you should manage connections using pooling such as retrieving them from an application servers.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/7220792254511469309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2014/06/jms-connection-and-session-on-websphere.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7220792254511469309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7220792254511469309'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2014/06/jms-connection-and-session-on-websphere.html' title='JMS Connection and Session on WebSphere MQ 7.1'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-3012943927876507557</id><published>2014-05-29T14:52:00.001-04:00</published><updated>2014-05-29T14:57:43.737-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="antlr"/><category scheme="http://www.blogger.com/atom/ns#" term="classloader"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemfire"/><category scheme="http://www.blogger.com/atom/ns#" term="Weblogic"/><title type='text'>Class Loading Issue when Running Gemfire 7.x OQL in Weblogic 10.3.x</title><content type='html'>I have a very simple OQL like &quot;SELECT * FROM /FxLimitsRegion&quot; that ran successfully in my unit/integration test. But I got the following exception when trying to run it inside my WebLogic EAR (our Gemfire cache and Weblogic application server run in the same JVM):&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif; font-size: small;&quot;&gt;com.gemstone.gemfire.cache.query.QueryInvalidException: Syntax error in query:&amp;nbsp; Invalid class or can&#39;t make instance, com.gemstone.gemfire.cache.query.internal.parse.ASTSelect&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.cache.query.internal.QCompiler.compileQuery(QCompiler.java:80)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.cache.query.internal.DefaultQuery.&lt;init&gt;(DefaultQuery.java:156)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.cache.query.internal.DefaultQueryService.newQuery(DefaultQueryService.java:107)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.internal.cache.LocalDataSet.query(LocalDataSet.java:129)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.jpmorgan.gcrm.sef.business.cache.impl.SEFCacheManagerGemfireImpl.queryPartitionedRegionLocally(SEFCacheManagerGemfireImpl.java:187)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.jpmorgan.gcrm.fno.business.datamanager.impl.FxDataManager.selectActiveFxLimits(FxDataManager.java:57)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 13 more&lt;br /&gt;Caused by: java.lang.IllegalArgumentException: Invalid class or can&#39;t make instance, com.gemstone.gemfire.cache.query.internal.parse.ASTSelect&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at antlr.ASTFactory.createUsingCtor(ASTFactory.java:251)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at antlr.ASTFactory.create(ASTFactory.java:210)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.cache.query.internal.parse.OQLParser.selectExpr(OQLParser.java:1090)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.cache.query.internal.parse.OQLParser.query(OQLParser.java:217)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.cache.query.internal.parse.OQLParser.queryProgram(OQLParser.java:115)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.gemstone.gemfire.cache.query.internal.QCompiler.compileQuery(QCompiler.java:76)&lt;/init&gt;&lt;/span&gt;&lt;/blockquote&gt;
The class &quot;com.gemstone.gemfire.cache.query.internal.parse.ASTSelect&quot; to load was included in the gemfire.jar in my EAR. So the exception seems to be confusing in the beginning.&lt;br /&gt;
From the above stack trace, you can see it relates to the ANTLR jar. Both my EAR and Weblogic itself have ANTLR. But my EAR uses version 2.7.7 while Weblogic 10.3.2 uses a pretty old version.&lt;br /&gt;
So we need to know which ANTLR version was used. Here is the call workflow:&lt;br /&gt;
1. my EAR thread issued a OQL -&amp;gt;&lt;br /&gt;
2. Gemfire found&amp;nbsp; ANTLR to parse the OQL to AST -&amp;gt;&lt;br /&gt;
3. ANTLR tried to load Gemfire class &quot;com.gemstone.gemfire.cache.query.internal.parse.ASTSelect&quot;&lt;br /&gt;
&lt;br /&gt;
By default, Step2 found the Weblogic ANTLR by the Weblogic system class loader. But the Gemfire class is in the child EAR classloader. So Step 3 threw the exception.&lt;br /&gt;
If we can tell Weblogic to use my EAR ANTLR, the exception should be gone. In order to do so, I just added the following excerpt to your weblogic-application.xml&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;prefer-application-packages&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;package-name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;antlr.*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/package-name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/prefer-application-packages&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
New version of ANTLR changed to load classes from the thread context class loader by default which was the EAR classloader in my case. So if the Weblogic had new version of ANTLR, the exception should have not been there. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/3012943927876507557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2014/05/class-loading-issue-when-running.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/3012943927876507557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/3012943927876507557'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2014/05/class-loading-issue-when-running.html' title='Class Loading Issue when Running Gemfire 7.x OQL in Weblogic 10.3.x'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-4802146870531763</id><published>2013-10-20T19:08:00.000-04:00</published><updated>2013-10-20T19:08:43.369-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cache Listener"/><category scheme="http://www.blogger.com/atom/ns#" term="Consistent Hash"/><category scheme="http://www.blogger.com/atom/ns#" term="IMDB"/><category scheme="http://www.blogger.com/atom/ns#" term="Partition"/><category scheme="http://www.blogger.com/atom/ns#" term="Replication"/><category scheme="http://www.blogger.com/atom/ns#" term="Scale"/><title type='text'>  Cache Replicatio and Partition -- How to Scale linearly using Cache Listeners?</title><content type='html'>&lt;h2&gt;
1. The System in Question&lt;/h2&gt;
I am working on a trade (credit default swap and interest rates swap) processing system that calculates the client&#39;s limit exposures in real time.&lt;br /&gt;
The system consists of a 4-node WebLogic cluster that retrieves trades from an IBM clustered queue using MDB and puts trade data into a distributed cache / IMDG.&lt;br /&gt;
Suppose each node in the cluster has the following capacity:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;data:image/png;base64,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&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;197&quot; src=&quot;data:image/png;base64,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&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the cluster that doesn&#39;t scale linearly:&lt;br /&gt;
&lt;img alt=&quot;&quot; height=&quot;561&quot; src=&quot;data:image/png;base64,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aLCwNNpkEFv0er1er4/0UiDmCcE6AQCajK0wApeYmGi32yO9FCrBXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotKsA6FImgyABAEtsIIHE1GQey1qATrUCiCJgMAQWArjMDRZBTEXotK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&quot; width=&quot;640&quot; /&gt;&lt;br /&gt;
&lt;h2&gt;
&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;
2. Pros and Cons of the System&lt;/h2&gt;
&lt;b&gt;Pros&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Even distribution of trade processing because any trade can be processed at any node and we use master-master/update-anywhere replication cache;&lt;/li&gt;
&lt;li&gt;Scales reads linearly (the metric in &lt;span style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;green&lt;/b&gt;&lt;/span&gt;) because reads take place locally;&lt;/li&gt;
&lt;li&gt;Easy application design because there is no customized trade routing algorithm;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Cons&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Writes can&#39;t be scaled linearly (the metric in &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;red&lt;/span&gt;&lt;/b&gt;) because of the cluster-wide replication and synchronization between nodes;&lt;/li&gt;
&lt;li&gt;The cluster wide total memory is limited to a single node (the metric in &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;red&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;/span&gt;&lt;/b&gt;);&lt;/li&gt;
&lt;li&gt;Be timeout and deadlock prone because a distributed locking / synchronization is needed across nodes if they process the same client&#39;s trades simultaneously;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
3. How to Scale linearly?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linear scalability can be achieved only when each node can process trades (nearly) independently. &lt;br /&gt;For reads, you can achieve linear scalability with replication; &lt;br /&gt;For writes, you must keep the data replication effort constant and eliminate distributed locking / synchronization. So partition is the only choice.&lt;/li&gt;
&lt;li&gt;An application usually has both reads (such as reference data) and writes (such as limit exposures in my case). &lt;br /&gt;So you should replicate reads unless they are huge (if so, you have to partition them and still use near / local cache for the frequent used subset).&lt;br /&gt;You should partition writes in order to keep the replicas of primaries constant and to avoid using any distributed locking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
4. Scales the System linearly using Cache Listener-based Routing&lt;/h2&gt;
So for my trading application, I just need to replace replication for partition for writes in order to scale linearly.&lt;br /&gt;
One naive implementation is to have a separate routing node between MQ and the WebLogic cluster and partition trades for the same client to the same nodes using a simple hash algorithm.&lt;br /&gt;
There are 2 big problems here. One is that the trade was routed to some node that may not have the partitioned cache because the distributed cache and the routing node may have different partition algorithms (most likely). If so, remote network calls are needed.&lt;br /&gt;
The other is that the simple hash algorithm can&#39;t deal with dynamic cluster. This is why most IMDG employ &lt;a href=&quot;http://en.wikipedia.org/wiki/Consistent_hashing&quot; target=&quot;_blank&quot;&gt;consistent hashing&lt;/a&gt;. If you want to use consistent hashing, the amount of work and complexity will overwhelm most application level developers.&lt;br /&gt;
&lt;br /&gt;
All distributed cached / IMDG (Infinispan, Gemfire and GigaSpaces etc) support distributed cache listeners. When you put data into a partitioned cache, IMDB will automatically route the data to some primary partition member based on whatever hashing algorithms it internally employs, and only the listeners registered on the primary will be invoked and the listener will gets trades only on its local primary (not from other remote primaries).&lt;br /&gt;
We can use the distributed cache listener to do our routing. Here is the partitioned version:&lt;br /&gt;
&lt;img alt=&quot;&quot; height=&quot;421&quot; src=&quot;data:image/png;base64,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&quot; width=&quot;640&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
4.1 Notes &lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;We only have one replica per one primary for space reason. You should decide the number of replicas based on the balance between HA and write performance.&amp;nbsp; In order to have reasonable HA and durability, at least 2 backups across different racks are common practice;&lt;/li&gt;
&lt;li&gt;For space reason, the diagram only generally says primary cache. Usually more than 1 different caches need partitioning. If so, they should col-locate on the same node in order to eliminate remote network calls. In my case, we col-locate data based on client ID;&lt;/li&gt;
&lt;li&gt;The “Cache Message Bus” not only works as a parallel routing bus (put and take), but also as a cache bus for replication. The figure doesn’t connect the replication to the bus for space reason;&lt;/li&gt;
&lt;li&gt;There is no deadlock or lock timeout issue across nodes because all updates for a client are coordinated / locally synchronized by the primary node;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
4.2 Workflow&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;Any trade listener (MDB hosted by the WebLogic cluster) can get any post trade. It barely parses trades to extract client ID, and calls the partition strategy to route trades to some partition member. Thanks to the WebLogic cluster, this solution possesses load balancing and HA;&lt;/li&gt;
&lt;li&gt;We use client ID as the partition strategy. As soon as the listener extracts out the client ID, it just calls the cache PUT operation to automatically route trades based on its internal partition algorithm (Consistent Hash is commonly used);&lt;/li&gt;
&lt;li&gt;Only the cache listener on the primary takes the trades that were routed there (no remote takes from other primaries).  Because the listener runs in the same thread of the PUT operation, it submits the retrieved trades to a thread pool for asynchronous execution in order not to delay invoking PUT;&lt;/li&gt;
&lt;li&gt;The executor processes trades that should only incur local cache operations (GET from the primary and PUT to backups).&amp;nbsp;  If it incurs remote operations (from other partition), it means you didn’t col-locate data properly or didn’t replicate needed reference data;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Most developers knows how to use IMDG for data caching, but are not familiar with IMDB&#39;s listener capability (or event processing at an even higher level). On one hand, IMDB listeners are powerful and easy to understand just like DB triggers. On the other handle, they are not as robust as JMS / MDB.&lt;br /&gt;
For example, MDB provides threading pool and different level of delivery guarantee such as once and only once delivery.&lt;br /&gt;
However in my case,&amp;nbsp; we only use the IMDG listener lightly: as soon as the listener gets the trades, it submit them to an executor pool. If something goes wrong between PUT and listener TAKEN, the PUT will fail and you can employ retry logic or there delivery logic there.&lt;br /&gt;
&lt;br /&gt;
Lastly, I must mention GigaSpaces XAP that provides the listener based routing naturally and natively. You can get many functions such as MDB-like threading pool out of the box. If you start a new project, you should seriously consider GigaSpaces XAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/4802146870531763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2013/10/cache-replicatio-and-partition-how-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/4802146870531763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/4802146870531763'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2013/10/cache-replicatio-and-partition-how-to.html' title='  Cache Replicatio and Partition -- How to Scale linearly using Cache Listeners?'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-7178710608403587326</id><published>2013-10-13T21:10:00.000-04:00</published><updated>2013-10-13T21:10:26.112-04:00</updated><title type='text'>Cache Replicatio and Partition -- Basic Concepts and Pros and Cons</title><content type='html'>If you are a lead in your development team and only few members have IMDG experience, it is absolutely necessary to educate your team with basic concepts. Otherwise you will probably waste too much time on endless clarification and explanation.&lt;br /&gt;For example, when I recommended partition, I was told I would lose replication. They didn&#39;t realize that the partition scheme allows a configurable number of replicas for the primaries.&lt;br /&gt;&lt;br /&gt;Here are slides I used for education purpose.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;h2&gt;
Assumptions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The cluster has 4 nodes each of which has the same read, write and memory metrics as follows:&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img alt=&quot;&quot; height=&quot;197&quot; src=&quot;data:image/png;base64,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&quot; width=&quot;200&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;How a metric changes as the cluster grows?&lt;br /&gt;The metric in red decreases at node level, either remains constant or increases less linearly at cluster level.&lt;br /&gt;The metric in green remains constant at node level, and increase linearly at cluster level.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Replication is synchronous.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;There is only one replica in partition.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;
Replication&lt;/h2&gt;
&amp;nbsp;&lt;img alt=&quot;&quot; height=&quot;464&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvIAAAIjCAIAAADum2iRAAAgAElEQVR4nOydZ1RTWdeAY3ecUcauNFFEUWkB29i7FEVUilJFEQQFpIpYQcXexV7oIE1FrCBdeq+BQEJ6742QQL4fmcnrZy9IKOdZe82aH3Kzc+/l3odz9tkHIgEAAAAAAADoE0DknQAAAAAAAABA1wC0BgD4Xjo6OgQCAZ/PZzAYNBoNh8MVFhYWFRW9fPkyLCwsLCws/FuEhYVFR0dnZWXl5+fDYDAajUaj0Xg8Hp/PFwqF8v5+AAAA0OsBWgMAfIxYLMbhcBUVFenp6fHx8ffu3QsODnZ1dbW0tFy0aNHcuXMnTJgwcuTIP//8c/DgwYMGDYL8IAMGDBg0aNDw4cNHjhypoKCgo6Mzb968lStXOjg42Nra+vn5nTlzJjw8/NWrVxUVFRgMBhgPAAAAfCdAawD9GrFYzGKxEAjEixcvbty44eXlZWFhsXLlytmzZ48dO/Z7HGXw4MFDhgwZOnTokCFDpP8jlZUvMXz48MGDBw8cOPB7Dj527FhNTc1ly5Zt3bp1//79ly9ffvr0aUVFBZVK5fF4YrFY3ucPAAAAehZAawD9i46ODhgM9vr160ePHvn5+ZmZmU2dOnXEiBFfGlaZMGGChobGvHnz1qxZY2Vl5ebmduTIkZMnT0qnnJ4/f15cXFxUVFT4H0VFRWQymf5lampqioqKsrKyIiMjo6Kizp07d/jwYV9f3+3bt1tZWRkaGi5dutTAwEBRUfFL40BDhw5VUFDQ09PbtGnT4cOH4+LiSkpKmEymvE8tAAAAyB+gNYA+jlgsZjKZpaWlt27dcnZ2XrVqlaqq6qeuMGjQoFGjRs2cOdPY2Njd3f3SpUvJycmZmZmVlZVIJJLBYHR2dnZPwgKBgEaj1dXVZWVlJSQkXLhwwc3NzdjYeNasWaNGjRoyZMinyY8ePXr+/Pm2trbnzp1LS0sjEoltbW3dky0AAAD0KIDWAPomGAzm9evXISEhmzZtUlZW/tQGFBUV586du3XrVm9v77CwsNzcXCKRyOVyRSKRvHP/DCKRiMvlEonE4uLi2NjYc+fOubi4bNiwYdasWUOHDv1ohGns2LHLly8PCAiIjY0tKCigUqnyTh8AAAC6CaA1gL4Dh8MpLS29cOHC5s2bNTU1P/KYESNGzJ49297e/tq1a69evaqtraXT6fJO+VfBYDA5OTmPHj3au3fvwoULFRQUBgwY8OG3/uuvv6BQqJ2d3aNHj9BodM+UNgAAAOgqgNYAej2tra3Jycmenp6zZs36aFRGVVV13bp17u7u0dHRjY2NXC5X3sn+RgQCARaLffv27alTp7Zu3WpgYDB69OgPz8aoUaOMjY0vXbqUl5fH4/HknS8AAAB0PUBrAL0SkUiEQCBCQ0PNzc01NDQ+fHmPHDly2bJlQUFBz58/b2xslHemcoNOp5eVlSUnJ/v7++vp6X04VzV8+PB//vnHw8MjJSUFTFEBAIC+BNAaQC+joqLi9u3bxsbGo0aN+tBm5s2b5+rqGh8fj0ajQcHsR/B4vNLS0lOnThkbGyspKX143pSUlOzt7R88eFBbWyvvNAEAAOBXAVoD6AV0dnai0ejQ0NANGzaMHz/+w1GHhQsXnjhxIiMjg8FgyDvN3kF9fX1CQoKzs/PUqVM/XEM+efJkKyurhIQEDocj7xwBvx2RSMT/MgKBoNuW/gEAXQvQGkCPhkqlJiYmWllZfVgm8ueff65du/bEiROVlZUCgUDeOfZWmExmVlZWQEDAqlWrFBQUZKd39uzZJ0+eLCoqkneCgJ+Bw+Gg0eiGhobc3Ny3b9/GxcXduHEjKCjoxIkThw8f3rFjh42NjYODg4mJydy5cxcsWDB//vx5n7Bo0SIrKyt7e3tbW1tra+udO3cGBQUFBQXdvn07Li4uKSkpMzOzsLAQBoMRCATwOwjoUQCtAfREOjo6amtrAwMD9fT0ZK/boUOH/vPPP2fPni0oKJB3gn0KsVhcUlJy7tw5KBQqO9sKCgomJibh4eE0Gk3eCQI+pr29nclk4nC4oqKi5OTkq1ev+vr6btu2bfXq1QsWLJg5c6aysvKwYcMgv5O//vpLRUVlzpw5ixcvNjExsbKy8vX1vXLlSkpKSl1dnXSzs46ODnmfKkC/A2gNoGfBZDKTkpLMzc0/7Pyrr68fEBCQn58PimZ+K3w+//nz5w4ODioqKrKTr6Ki4u/vn5ubK+/s+jVkMrmqqio1NfXOnTvu7u5GRkZqamp//vnn17ckGz58uKKiorq6up6e3vLly5csWbJixQoLCwurD7CxsQkICDh27NiRI0eOHDly7NixXbt2ffgPpNuJLF26FAqFqqurq6mp/fXXX1//3GHDho0dO1baF+rQoUMxMTF5eXkEAkHeZxHQLwBaA+gpEAiECxcuzJ07V/ZwHD16tLW19ZMnT8CAQTcDg8FCQ0OXLVsmWzA/fPjwNWvW3Lx5E9QwdQPS1tjl5eUPHz708vIyMjLS1dWdMGHCl9xl9OjRc+bMMTExcXZ2Pnbs2PXr1xMSEl6+fFlQUFBXV4dAICgUilAo5PP57e3tP5GPSCQSCAQUCgWBQMDh8KKiotzc3JSUlOjo6JCQEB8fHwcHh3Xr1s2aNUtBQeGzjbD/+OMPLS0tY2NjDw+PR48eVVZWMhiMn0sGAPg6QGsA8qe8vDwwMPDDEQJpIXBzc7O8U+vXCIXCnJwcV1fXGTNmyC7N7Nmzr1y5gsPh5J1dX0MkElVVVSUkJBw/ftzMzExNTe1TPxg4cKCamtqSJUusrKwCAgJu376dmppaXV0tnfGR79anIpGIx+ORyeT8/PzY2NjTp0/v2rVrw4YNWlpaH/VPgkAgQ4YMUVJSMjIyOnLkCBjLAXQtQGsA8iQ7O9ve3n7cuHGyh52pqWlKSgqbzZZ3aoD/gUKhwsLC1q5dK9t4fPbs2adOnQJy84sIhUIcDpecnOzu7r58+fJPx2NGjBgxY8YMMzOz48ePR0dHZ2VlweFwPp8v78R/AAKBUFZWlpSUFBwcbGVlNWPGjD///PPTASctLa0tW7ZcuXKlsrISrMUD/ApAawDyIT8/39raevDgwdLn2oQJE3bt2pWTkwNqDHss7e3tr1+/3rJli6yzn7Ky8pEjR5qamuSdWi8DiUS+fPkyODh47dq1f//990fDGNra2hs3bvTx8YmIiJC2xu4zvxSdnZ1cLrepqenJkydHjhyxsLD4559/PpK5oUOHamtr79+/Pz4+HvRSAvwEQGsA3U1RUZGDg8PIkSNlr8bAwMCqqip55wX4XrKysmxtbYcPHy69gmpqar6+vjAYTN559Wja2tpgMNj58+c3bNjwUV/sIUOGTJkyxcbG5u7du9nZ2f1qOobD4VRVVaWkpISEhKxYsUL2WJCiqKi4fv36wMDA7OxsUNQF+E6A1gC6j9LSUjc3N9kQtJqa2qFDh1pbW+WdF+BnKCwsdHR0HDNmjPRqjhkzxt3dvby8XN559TgKCgouX768bNmyP/7448N39qxZs7Zu3RoSElJQUABmXSUSiVAoRKPR4eHhjo6O8+fP/7C0aODAgaqqqnZ2dnfv3q2vr5d3poAeDdAaQHcAg8Hc3d0/fAX6+fmByYs+QFlZ2b59+8aOHSu9suPGjdu/fz8KhZJ3XnKGz+eXlZUdPXp09erVH45AjBw50tDQ8OLFi2/fvsVgMPJOs+fCYDBycnIuX768adMmWe2dFCUlpe3bt8fHx4PxG8BnAVoD+L2QSKQjR47IHkzjx4/fv38/EJo+RkNDg4+Pz5QpU6RXedq0aXfu3OmfTYYKCwtPnTr1zz//fLi36KRJk0xNTS9dugSHw0Uikbxz7E10dHQQicTExMT9+/cvW7ZMVo0HgUDU1dV9fX3T0tJAm2PAhwCtAfwuOjs7Y2JidHR0pM+gv/76a9++fZWVlfLOC/C7aGpqcnd3l73O16xZk5GRIe+kugkmkxkZGWlqavrhDqyjR482MzMLCwsDpa9dQltbW3Z29sGDB2fOnCk7yQMGDFi0aNHx48fr6+uBMgIkQGsAv4nq6morKyvZo8fS0rKsrEzeSQG6g3fv3q1du1Z63YcOHbp3796+3X+osLDw2LFjH7b2GTdu3ObNm2/cuIFCofrMIqYeBZvNTk5OdnBwmDZtmuy0jxgxYuPGjQ8fPuzb9xvgmwCtAXQxDAYjKCho0qRJ0meNgYFBUlKSvJMCdCttbW23b99WV1eX3gNTp04NDQ3tYzMFFArlwYMHGzdulA3PDBw4cP78+ZcvXwZDkt1GS0tLWFiYqanpX3/9JfObqVOnurm5lZWVgU3I+ydAawBdSWJi4rx582T1BCdOnKDT6fJOCiAf0Gi0h4eHbOHb6tWr3759K++kuoCamprDhw+rqanJ3qOKior29vavX7/un+VEcqejo6OhoSEoKGjJkiUDBgyQXpThw4dbW1u/efMGyE1/A2gNoGvAYDCOjo7SZ8qAAQNsbW1ramrknRRA/mRnZxsZGUnfNMOGDXN1dcVisfJO6icpKytzc3OTjUQOGTJkyZIl169fB0uOewh8Pj8zM9PV1VW2XcOAAQPWrl0bFRXF5XLlnR2gmwBaA+gCUlJStLW1pc8RfX395ORkeWcE6EGIxeK7d+/Kyjx1dXXfvHkj76R+jMzMTHt7e1njmTFjxuzcuTMzM1MoFMo7NcBnqK+v9/f3nz59umxEbe7cubdu3epXrQ77LUBrAL8Eg8Hw8fGRLn4ZPHiwr68vlUrtwuPz+fxr12+cP3+BxWJ14WEB3Q8KhfLw8JAtizt16lTP38BZIBA8efJkw4YNstZw48eP9/b2Bl0HewVIJPLq1ataWloyuZkzZ87x48dbWlrknRrgNwK0BvDz5OTkLFy4UPq8mD179osXL7r2+ElJyfoGc3W0NPV0Zuno6IaFhYMFnL2duLg4WVXKpk2bemwHI5FIFBcXt2TJEtkbcdq0aYcPHwarbHodbDb7wYMHK1askF3K8ePHe3h4gKnDvgrQGsDP0N7efurUKQUFBeljwsnJqWtbpublvTcyNlFSnOjual9f/hZek3HI301x8sQVK1Y+T03twg8CdD+NjY2mpqbSO0dNTS0+Pl7eGX1Menq6oaGh7C04ffr0s2fPgj/xezVtbW3Pnz/fuHGjrK+SiopKSEhI144uA3oCQGsAPwwCgdiwYYP00aCqqhoREdGFB29oaHB22TNp0kRzM8P3GQksYjUFU0ZGl7FINRUFqU47LJWVJ1taWhUXF3fhhwK6GaFQGBISIluU6+Xl1UMa4ZeWljo4OAwaNEiamI6OztWrV2k0mrzzAnQNHR0dOTk5dnZ2so1adXR0IiIi+lj3gX4O0BrAj5GWlibbf3jLli2NjY1ddWQGgxEcfGL6dPWVyxY+jb/HJNTQcVV4RDGupQjXUoRHFFOxlSxSbeabOIstxsrKSs4uexAIRFd9OqD7efPmzZw5c6T30rJly+SrqigUysfHR7ZtmbKy8unTp0GFaRfS3NwccDAwMbFHdLHKysoyNjaWDcitWrXq9evX8k4K0DUArQH8AKGhodLmYyNGjDh79mxXdVAViUQPHj7U0JihqzPr/s2zJFQZm1xHbC3FI0o+CgKylEWqo+OqE6NvLV8yX0lZ+fjxICKR2CVpALofNBptbW0tfbVMmDDh9u3b3Z8DhUI5e/asqqqqLA1fX1+wsXwXQqPRjwcFq6mpLVoAVZuibGa2OTc3T95JScRicWxs7Pz586XXfdCgQTt37qyoqJB3XoBfBWgN4Lvg8Xienp7S338lJaUubBz8PDV16dJlykqTg4/4IGEFXGojGVNJaC37SpDQFRwKjIypunfz7CzN6Vra2qGhN8FS215KR0fH1atXZY1G/Pz8unPDgeTkZCgUKv3oIUOG7Nq1q7q6uts+vc/T3i66c/eerq7eLE31W9dO4FsK894lWG41njhxws6duxob5V8wzmQyL1++LCtjHz9+fGBgIPhLqVcDtAbwbVpaWmQVlPPnzy8tLe2Sw5aVlVtb2ygrKe523F5Vksanw+mEOmJrBRH1HdFaQcVW82lwNLwoJOjALE2NhQv/efL0aZckBuh+8vLy9PX1pfeYvb09k8n83Z/Y2tq6c+dO2TSEiYlJ32iC3HNIS0tfsWKlxnS1QwfcWuqy2eQaYmsxHV9JxZQ/i7+7asVCZRXlgICDOBxe3plKMBhMQEDA2LFjZUXit2/fBj2jeylAawDfID09XdbVysbGhkQi/foxsVicu4enqorKlk1G2WlJAkYLk9hARleRUFUk9I8FHV8nYLTUV2R6e+yePHmikZFxTk7ur2cI6H6IRKJshZSxsXHXrq37kI6OjgcPHshKxLS0tGJjY8Vi8W/6uH5ITU3NVnOLsWPHuOyyrih4yaM2kFFluJZ/6+QIyBImoYaCqXh4+7yutuacOVpXrlzl8/nyzlpSWVnp4OAwePBgmemC7b16I0BrAF8jKipKOjswZMiQoKCgX3/0s9nsixcvqaiozp+nFx9zh0mGcenNZGwNCVP9K8GiNPKZiPzslG0WphMmjN+5a1dNTW2XnAFAd8Jmsx0dHaUvlQULFsBgsC7/iJqaGgsLC+lHDBs2zMPDA4+X/2hBnwGFQnl5eU+cONF4/Yp3r2JZpDoGvubTIjk8ooSEKudQ6jHwwnOnDs7W1NDTg8bHJ/SE/ZvS0tKWLVsmvUMmTZp07969npAV4PsBWgP4Infu3JEugxw/fnxUVNQvHk0sFsfExBgYGMzQmHb9SggRU81nIqn4ejK2tkuCgqvj0Fp4DMTr1DijdSunTZt24EAAWMnS6xAKhYGBgdKXirq6en5+flcdmc/nX758Wbaj0z///NPr9nDoyfD5/HPnzs+aNWveXJ24qJt0fC2LVE9EVXy1Tq6cgq3i0ZsaKjP9vPcoKk5au3ZdWlq6vL+KhMPhhISEjBw5UnqrWFlZdeGST8DvBmgN4POcO3du4MCB0s40mZmZv3i0rKwsQyOjaVOnBPjuQ8CK2zlYJrmJgqvv8qDiGwQsFJPUFBNxa95cvalTp129eo3D5nTFKQF0H1evXpUqtbKy8qtXr379gDU1NWvWrJG+pcaMGXPs2LEe0imnbxCfkKCvb6A9Z+als8eIqAoeHU7BVH9/nRyTWM+jwUvfv7S33jp50gR7B4eeMPuTl5e3aNEi6T2jpqYWHR0t74wA3wXQGsBnOHLkiLQj2Zw5c8rKyn7lUPX19fYODhMnTnB02FZR/K6di2PTWqgE2G8NBqmpjYMhYWuvXDyprj5tzdq1FAqlq04OoHt4/PixtIuMgoLCL7Z8DAsLmzx5svT9tGbNmqKioq5KEpCdk2NoaDR58kTf/S7Nde/5jGYarvZHK+RIqCoypppFauDTm9Nexm0wWq2mpubp6YXD4eT77Wg0WkBAgLQx8aBBg5ycnNBotHxTAnwToDWA/4dIJPL29pa+AObNm1db+/MVKiQSKfDQocmTJ69ZtTT9VWIbBytgY2jEpm6JRiqhUcAhSSSdb55HDx06GJTa9EbS09OVlZUhEMjgwYPPnz//E0egUChubm7S+3nUqFEXLlzo+ftr9hbq6+t3OTmNGzfWeptZSf4rPhPBJMN+sUiOjK3h0puZZFhc1K358/RUVKecv3CBTqfL95u+fv1aW1tbehdpamo+BSsuezZAawD/QyAQyN4BK1as+OmlKG1tbaGhN7W1tXV15kQ+uslloIQcPJPSQic1//6A04lwFg0t4NLppJamkriwy3vGjlWorQPb2vVKKioqDAwMpPfksWPHfuhnCwoKFixYIP1ZKBT663OpACl0Ov3Q4SPTpk1bt2b5y5RoHh3BpjZTcHVdVSdHxTfwmUgSuub65RBNzel6enphYeHy9VECgbBv374BAwZAIJDhw4fv378fTGL2WIDWAP6lvb1dtghl48aNP92QKjU1dcHChbNmapw7fZyCb+pso7BpKAYZ0R1BamFR0XwujUXHNpW/yEoKyozzvXfWcdy40XVAa3otCARi5cqV0jvz7Nmz3/lTN2/elLUhsbW1BcudugShUHj79h1NzVkGUJ1H964ySU1tLBQN3/A76uSYpCYhB4NuLj96yGfmjOnLli2X+/4GiYmJM2bMkN5UK1euhMPh8s0H8FmA1gD+RTb3ZG5uzmKxfuIIJSUlZmZmkyZN9PJ0hTeUSMQMLhPLpLZ2QzAoCBYVxefSOAwCCpZX8PJKetzB9LiDuUmH7p/fBbSmt0Mmk6VmM2TIkCtXrnz9H5NIJCcnJ+nNrKCgcOnSJdCTpkt4+vTZkiVLVJQVQ04cxKNqhFwsgwz/3XVyLGpLOw9XU569b6/zhImTjh8/Jt+T0Nra6uDgIOva9+7dO/nmA/gUoDUAiUQiOX78uPQXdfPmzRzOD68bgsPh7u7ukyZN2rp5Y0lBRoeQLuSRmTQ0q7uCz6EK+SwSprYi61H2k5OZiccyE4+/iz8MtKbPgEAgpDNKAwYM+MrWUTAYbPHixbKJp+zs7O5Msq9SUlJiYWGhqqrs5rKjsa5AxCdw6Mhuq5Ojk5vb+RRJJ9fHw2nevPnyPhmSzs7O06dPDxs2DAKBjB49OiwsTN4ZAf4fQGsAkps3b0oba65cufJHq/O4XO7Jkyc1NDSWLF74+kVSO58qEtA4DBybjv3tQcOwaBgum9zGZzNIiIaSZ/kvLuY9O5377HT2k5NAa/oeKBRKujHhiBEjIiMjP/0HGRkZss19du7c2SUdsfs5WCzW1dVNRVnZ0mJT0fs3Ij6Rx0QzyN1QJNdMI8LppGYukyDgMTBNBbWZNzx3rlu9Zp28T8m/xMTETJgwQTqCeOzYMdCyr+cAtKa/Ex0d/ccff0AgED09PQQC8f0/2NnZmZqaqq2tDdXTuX/3BpdJkIjZPBaRw8B3R9BxPDapvY3LpuMQdZml7+4WvLiU//JyfuqF3JQzQGv6KrW1tbNnz5Yua/qon018fPy4ceOkvYO/vwQH8CUYDMbZc+dUVFSXLln4LCmKz8K284hMCrKb6uTILWwGTsClUwmNlTnhaXEHcxP83R3Xrlm7Xt4n5n+8f/9eS0tLqtH29vZUKlXeGQEkEqA1/Zw3b94oKChIJ4l/dONiKpWqoaGx182VSkJLOrgCDoXLJHZDcBgEHoss5LMFPAYeWV6dH1OSdqs47WbxmxsFr64Arenz1NTUSIdkFBUVZU2Vrly5IrXzsWPHfnYgB/D9iMXiqKgoXV1dzZnTb9+8xKQiO4RUNh3dbXVybAaOz6UxyAhY2dPsJyfTYw6kxx3Mf3LY3XFdj9IaiUSCxWJNTExkq0ebmuS/JzkAaE3/paioSElJSbo3Ql5e3o/+OB6Pnz59+tsXsRKJhM+m8lgkHov8m4PEY5OFfJaQz6YS4I3lzyuyH5VnPijPvF+SfhtoTf/h3bt30q3K9PX1y8rKDh06JH2vTJs2DZRw/iIZGRnrDQ01NKYfDvTFo2GSdgaPhWdSu6dIDsWmY9v4TB6HhoLlFr2+lpV0PCvxWGbC0XePA3um1kgkEi6Xu3fvXukdOHv27JycHHln1N8BWtNPwWKx0gZTI0eOfP78+U8cgUAgaGpq3r/iQ8GUCdu4Ah6Dz6HwOdTfExQ+hyoUsIUCDpOKQtZn1RY8rn4fXZ0XVZEdBrSmHxIdHS0tCJNOPEEgkGXLloGNe36FhoaG7dutJ0yY4Ozk0FBTLBGzBBxSdxTJ0bEsGoZNx/G5NAGPQUBVVuVE5KWczX12JvdZSHZycA/XGikXLlyQFhGPGTMmNjZW3un0a4DW9EcEAsHWrVulzVvv37//cwchEAizZs26f9WvoSgG01QgEnKFfJaASxNw6V0aNAGXJuSzxO0CHoeGR5Q1lj2vK06qL0qoKYgDWtOfOXv2LOQ/LCwsfrrTEoDFYgUHn5g8eZKR4drszFcdQqa4jdFNRXIMPIeB57EpAh6DRoTDSp8Wvble8OJSwcvL75+f70VaI5FIUlJSpOPfw4cPv3PnjrzT6b8AremPHDt2TPoy8PX1/emDSLXmwTV/WPHjypxIDLyovY0nEvLaeMyuCgGXIeSzREKBkM+m4huRtZlNFS+ayp43lD6tL0oEWtPP6ejoCAgImDBhgo+PD5/Pl3c6vZjExMSxY8bGxUSKBAxJO5vHInVLnRyBwyDwOVRhG5dNx7XUpldkPSxJu1ny9mbR6+u9UWskEklZWZm0pH3IkCGhoaHyTqefArSm35GcnCzduc3IyOgnWtTIkGlNY0l89fuY6vdxiLpMLpPUIW4XtnHa+KxfDKGA3S7ktwu5LCoa11yMqM1oqUlrrnrTVJ4KtAYgQ+4bBvUBHjx4aADVErBwErGAxyJ1T50cn0Ntb+PyuTQ8oqyuML4i62F55sOyjHslabd6r9ZIJJLKykrp/P6AAQNCQkLknU5/BGhN/6KqqkpRUVG6YRsSifyVQ/1/rYmtLUyoK0xsqnxFI8BF7QKxqE3YxhG2sYVtnB8MtrCNI2oXiMVCLptMxtSim/JRsNzW+mxE7TugNQBAlxMeEamrNb0sK4xBbmkX8mXVbL8jeOx/6+Ta+CwKrgFe+bL6fUz1++iq3MiKrEd9QGskEgkSiZw7d67UbE6dOiXvdPodQGv6EWw2W9qA9e+///71bf8+1Jra/Li6oqSGkqewspTGipd4RLmAxxB3tItEgnYhr13IbRfyviO47UKeSCQQi9qFAjaDjCS0VuJaSrDNRejG90Br+g8sDgOBai6vKn3xKjU6LvL23VuPH8eLxR3yzqvPEh4Rqac9szjtTk1+HI3YLGoXtPHov6dOjt7exm1v4zLISBQsp6HkSX1RYl1hQk1+bF/SGolE0tTUBIVCpXP9YMymmwFa04+QrUK8cePGrx/tQ62pL4qHV6TAK543lqfCq940V6ehGvMZlFZhG6+jQywWtYvaBd8IoUAsEnaIRe1tPBaCmbEAACAASURBVC6DQMU3kjA1RFQVHlEGtKaP0S5uY3EZJCoBhWuphVWlZbyJjo6+dOHyAa9DO6ydLM1srEx2mC21N9S2XaFsvXK8ozJkro+PD+ji+vuQak3puweVuRE1+XFUAlwsEgoFHAGX0TVFcjxmG48pFHDF7W08NoXQWtlc/baxPLWx7HlDyZM+qTUSiQSBQEjHbAYNGtQlj1zAdwK0pr+QnJw8ZMgQCATi7OzcJQeUas3DaweayxPdnS293GxhJU9R9WnwqjcttZnI+mxUUz4BWcmiYdqF/M5OcUeHSCwWikVtnwmxsLNTLBYJuSwSjQin4mFUPIyMrQNa06vh8tlYPKq6rjI9I+1xYtzdB7cuXLpw7EiQm6PXNsOda6EWC9QM/5myca2G3fopu42V921S8rNUDrZVPeeofsV5Rqir5l1vnShXjftmCx3RGJS8v01fRqY11e+jq/Ji6goT8chyoYAtam/79SK5Nj6rvY0rEgraeEwaoQkFy2upSW+pfguvfNW3tUYikTQ1NUkriAcNGhQeHi7vdPoLQGv6BSQSSVNTEwKB6OrqdlWH73+15voBZNWTdSsXQCCQjYbLC9/FEFvykHVZrQ25GHghtrkEjyin4Bs4TIJIyO/oEHV2dnR2ijs6xB0doo6O9o4OcWdnR4dYxONQaaQWMq6egoNR8DAK0Joej7hTxBWwyTQimoCEtdTlvM9KSIy/cT30kP8xF8e9Vpttt23YsWWlg7Ge7cqp1ksmWC9WsF030XWTiq+l6jF79fMumje9tCN9dGO9daK9daN99KJ9oFE+0ChvaKS3XqSXXoSXXrivXuz6ya7f3LIb8It8qDXV+XF1hYl1RcnI+hw2Ay8WCduFPKHgJ4rkOMI2druQKxYJRe0CFg1DQJajG/NQDTnIusyWmrT+oDUSiaSqqkpdXR0Cgfz5559JSUnyTqdfALSmX7Bv3z4IBDJ06NAXL1501TFlk1CIyuS81/c3b1wFgUBma6pH3jtHQhYSEMXY5iJcSymhtYqEqaXgYXRyK4dJahOwRe1tHR1iiaRTIuns6BDxuXQ6qYWMqSNj6yi4elkArekhtIvbCGRcHawmKyfjydPkuw9vXb1++UTwKS9XPzszF8O5VovUjReqmazW2L5+6k4jFTdTJZ+tSkdtVM44Tru8W+PGHs07HlqPfPSiDxjE++s/9oPG+urH+ECjvKER+/XC9+uFfSl8oFG7pl/dtMKGxQFrnX4vH2pNbWF8fXFSQ2kKrCwVXv2WSmhqF/I7xO3tQv6P1Mnx2oU8sahNLBLyOTQqAYZHlmFbSjDwAhQst19pjUQiKSgokPazGT16dEZGhrzT6fsAren7vH37Vjr95OLi0oWH/aBvTXxjaRKs9OnRAy6DBw8eMGDAdguTF0n3cC2FFEwVobWKjK2jEproZASLimEzCFwmkcemCLgMsUjIomOJ6GoiupqEqf00gNZ0Ax0SMV/IozLIWCKqGdVYWPo+JfXZrZu3jxw87rrTw9LM2tLEznyNg7GB7Wp1m2WTrBcr2K4e52yq7GOuesRm6mnnmaGeWuE+Oh8Muuj9N+gCjfTSi/CCRnjphX/dYD4X4T56MauUdsTGRcv7DPV9ZFpTmx/TUJLYUpUKK3veVPEKXvW2pSYdjyjnsIgikbCjQywWCUXt/G+WyolFwg5RexufxaKiydg6ErqG0FqBQ5T2T62RSCTv3r0bO3YsBAJRV1evrwfPot8L0Jo+DpPJlBbkq6urYzCYLjzyRwu8mytTsI1p0Q/O6mjNVJuqfvhQ4MuUuKritxwqnEmB04hwOhnJomE5DAKHQWAz8Gw6ob2NSyPCCa0VJHT1ZwNoTddCoZNh8Pr8wryU1GdhkQ9u3Loacuq0r8fBnZZ7NyyyXqppOl/VcKWG1dppDobKezYqe29ROrxd5bTD1EtOGtf3zLztPuehl27kAYN4f/14P2isLzTGBxrtDY30+mFl+Xb4QKNsVM9Yb9rJE/x8ayXAdyLVmsqc8MznN63N19++fAhd/xZR87a5Og1Rl9Van4OGF5Cx9Tw2RSwSdnaKO8TtX6qT6xCLOjvFbXw2i4ah4RupeBgF10DG1PZzrZFIJBEREdLdFZYuXQqaLf1WgNb0LDo6Ong8HpvNZrPZJBKJSCSi0ej3799nZWVlf4vMzMzi4mIikUgkEikUivQgfn5+0tVPMTExXZuqTGvgZYmF76JeP7nbWvsK2/iutjStpaVR0sltbW06fSr4gO/e+qrcNjZW3EblsYhsOu6/wAvbuDQiHI8sI7RWfCEqgdZ8N51tIj6DTSOQsUhsc3F54cvXLx6FPToVdNrdxXv7VjuLjTYW6x1M5tmtnWmzXNF68Wjb5aN3blDyMlc9vH3KKacZ1/bNefi5QZeofwdd9CK89MJ/h8F8Nrx1olZOsX71psvmTAFfQao1NXmR756Fjv571MCBAw/67EbUvMXD8xB1WShYHqa5CIcoJaCqaMRmHocmFrd3doql8V+RXHtHp1gi6RS1C9gMPAXfSMbVS4vkgNbIOHHihPRpbGNjIxaL5Z1OnwVojdyg0WhNTU0FBQXPnz8PDw8/e/ash4eHubn5woULdXV1tbS0FBQUhg8fPmzYsAEDBkC+j4EDBw4fPnz48OHjxo3T0dHR1dWVbgdoaWnZ5fn/qzVX/Vsqkgqzk/d7uFw/f6C56gUNU94p4nDYeImEi8GidPWg48aNOeDj8fxpHIWAkIhYbVwyi4Zl0bDCNi6NAMe1lOKR5V8MoDWfwOIwEK3wkrKiF69eRMaE374feub0mYN+h51tPbastF+lvWW+6vrl083XTbdfr+q8QXn/ZqXAbcqn7KZc2DX9msvMW3tn39+vE+GnH3fAIMEPGvfLgy7hXv+FNzTCGxr5338jpUrkA43y1Y/21Y/2hkZ+5zH99GMtVY67OLiLO9vlfbL7Bf9OQmU8aCpNjHkQojljKgQCMduw+n16HBVdim8uxDQX4ZHlRHQNCVtLJTQxqWg+myps40kHbySSzk5Jp0gk5LBIVEIjGVNLxtb/vzo5oDUSiUQi6ejocHBwkD6rg4OD5Z1OnwVozW9HKBRSqdTy8vKoqKgLFy54e3tv3bp11apVurq6qqqqo0aN+qasDBgw4I9vMWLECOkI56eoqKj8jp2NZVoDK35MwZSfOHFMc4ZaoJ9zWW4ik1jPZRGFAo5E0vn4cczff//7HefP09/v4VpeksNnEVg0jFDAoeIbsfBiXEvpV6K/aY1QJGCwaUQKDoGBV9aWpb17Ex0dden8Za+9/raWjpamtlYmO0wX2a2bbbNC2XrJWJslCg7Gip5bVA5umxLsOP2S66y7Pjox3jox3jrRPh+vMJJWukR83WC89ML/85JIH2i0r36MNPygcdLw138cYJAQYJAYYJDooxfjqR3mqR3mqR2+R/O2k8aN3TNCnTSu2087bzf1nP2089tVQ7ZMOrJ9ysk92tf36z36ptN46UXsm/1wzcztRaUF8r4U/YUPS4YRVSkF6RFbTddAIJAJ48cG+LiU5j4lY8pJ6CoiuoaMq6cRmxmUfyeUuUwSn00VCjjtQj6NCCeiqkiYms/VyfX32hoZHA5n5cqVEAhk2LBhz549k3c6fROgNb+F1tbWrKys8PBwPz8/ExMTFRWVgQMHfslahg4dqqysrKuru3r16m3btjk5OQUHB588efLChQsxMTGPHz9+8eJFxbeoqqoqKChITEyMj4+PjIw8efJkSEhIYGCgk5PTu3fvfsd3/EBr4kiossz0Z8uXGMyYrrbdwiTi7jksvICGqyGiKmkEWG7GM499zvr6etLvq6qqXF9d2MYlCwVsCq4B01SAbS76evRJreEJOBg8qrKm/E3aq7j42DsPbl24eOFI4HHXHfvN1+xYo2c+T2XdYrVNazVs101xMlLeZ6YUYKV80m7K+Z3qV5xn3Nw7695+nQg/aFzA3ER//Xh//cd++nG++tKhF+nkUZQPNNpXP9oXGu0DjfbRi5KGt26Ul06kNPZrR3hqRezXivDUivCcE+45J9xzTqTbrHs7pl90nH7ZcfrlbWontigHblU5vEXlkImyh6GSm5HyvnWTXRYqWC5QsFj4t+XiCZbLp1gtU7VapmJlpGdr+o/dhvl2m5fZ221xsrfYbbd1947tzrt3uhiuN4SOW++tF+kF/caYkC80ZrPKQd/9B+R9ffoRMq2pyouqK3yMqn3ZXPnykJ/LhAljFy9ecjv0avqrx2h4MZeGYJCbaMRmBqWVTcdxGAQOA8+m4XhsahuPSUJXk1BVX6qTI7RWAq2RAoPBVFVVIRDI1KlTEQiEvNPpgwCt6QIEAgGRSMzNzb1y5cru3btXrlw5ffr0T8dORo4cOX78eF1d3Q0bNri4uAQHBz969OjFixeFhYWNjY0kEqm9vTcNuf9Pa4piW2G5NHLL25R7FmbrVFUU9XTm7HW2y3rzmIatYVPgHGqLWEBCI2pSn8XudXOystyChFdymdg2PouMrUM3vsfAC74evVFr2juEbB5T2ku3AV6bkZ0eFxd77cr1AO/DO21dLDfZbNuwY/MKB0Md25VTbJaOt1miYLd+4t4tqge3Tzm5c/oVt1n3/HUTDugl+eslHIAmBkCTAvSTAvQTDxokB85NDpybHGCQ6KUT6akd5qkTvnf2fSeNG7s1buyeEbpD/ZLt1LN2U8/ZTj1rPvnYlklHtkw6umnSQePJnsaTPUwmexoqu66dsnPdlJ3rpuxaN9N27Zxta+dYr5ljuUTTeNFMw8UzjVbqmm5ZbW+20tZspa2T9T4f9wAvtwM+7gcvXrh07fq1q1ev3rp9Mz45NuFJbPyT2BdvUrLzsrJzM7NyMuoaqpHo5mZkIwqL5PDYgjYel8+WSDokEsmZkHOblP18oTHfGqoJ3zf74arZ5o3NDd18vfozskmousK4N0/u5L4Jx8HSW+vSykuyqFScWMQqKMhz3+t8+8Y5HLKqQ0Bu51O4TMK/RXI0LI9NEfAYRFQVAVn+5Tq5CjzQmv9ISkqSlgeYmJiAzee7HKA1Pw8Wi01JSTl27NiqVatGjx796TDM2LFj582bt23btiNHjsTHx8NgMDabLRQK+0Yb+A9WQj2uyY/DtpTi0XW5abHe7js0Z6orTZ64YtnCo4FemW8T2dRmHhPdxsGLBWQOHc2itjIpSBqppY3PImNrUbAcdNP7b0QP1hphexuRRGiA1WVlZyUmJt5/eO/qtasnj5/2dDpgt9Ftw3zbJeqbFqluWqexw2jqHmMlD7PJAZaKJ22VLu5QveY07Zbr9PsemhHec2L9dRJ9teNdZtxymnHdacZ1B/ULW1UOb1EJ3KpyeJOKj6GSmzSWjLWer2C+QMFiwWjzpcqWy6dYLVWxXD1zu+kie9N/7E0X2m832bXDytnBwtnB0nm3o4vzrj3Ou/a4u3kEHT154vip44dP3Lh+Mz7h8eP4uLjHsdm5meVVpcVlhVW1FWQ6gcYi0VgkBofKa+NwBWyugN3eIZRIOjolHVI7+TmKywpXzdjmqfXtimM/aKzhpH0hJ8904QUCfJP/RmvuN5UlPY6+47rb5kXCDWxjBo+BEovYXA5eIulMTEwcMmSoPlTnysVT73PeCtikznYmn0VkUtFcFlnAZUgL/L9aJwe05n8cP35c+po4evSovHPpawCt+THYbHZNTc21a9c2b94s7dv7IX///beurq6tre25c+devXpVVVVFo9HknfLv4sMF3lV5MTX5cRh4Ph5VX5Dz/PrFI+vXLFWcPHHixPHLli702OeU+fYpurlKyMG384gsCpJGgNOIzdKB69b6LBQs95vR2iA3rREKhSwmi0QiYdCYkuKyl8/f3L354Ih/sKujp6Wp7cbVFob/bF2huXn+xI2zh62ZCVmrN9Rs3nDLBUNsl//hsl7B22S838ZJ/hsn+W2Y7G2k6mqo5mKo5mI4fdd6LZv1c2zWa9msmL150UyjRTONFs80Ml1mvXmV3aYVNtuMd+139ffZd2D/Hr+goyevX7929erVa9euRcWGxz+JjX8Sm5QSn5GVnp2XmZn9rqSsCIlubmmFt7Q2UelkgZDPa+MKhLwuvNw/TUdnh8uOvebKx3yh0d9Y/QSN3D091HjhNgwBbJXQrUi1puTd/brCOByq2szMdNEC3bvXg1rrs7g0BI9DEYv4HWLhTkeH/x50CmvXrDwTchyDrOMwsBwmScCl4xHl2OaSr9bJlWDghUBrpLS1tZmamkqLEF6/fi3vdPoUQGu+i6ampvj4eB8fHygUKm1tJ0NDQ8Pc3DwkJOTp06coFEooFMo72W7io741tYUJdUWJrfXZZHxTVXlebGSot4fT8qULJ0+eOHWqqoG+rvMuu8vnT2SmPaUR4XRiM4UAb+MxiKgqZF1Ga0P298Rv1Ro+n4/D4WpqarKzc+LjEm7dun3mzBlPT09LS8ulS5dOnaL+14hREAhk+KC/Rg6YMG6IqvKIWVNHGMz6c8WSmSardTev1bUwW+Kww9xt97b9u60899h7ujm5uzrtc3FyC/Q/fDLodNCRE2dOnY2KiopPeBwbF/viZWpZVUlpRXFJeRES0ywdJqGxyFwBWzpSIhDyOiViiaSjU9K7F4K+evtipaq1l863V1r5QmPXKTrfunVb3in3O2RaU5MfQyc2hl4LmT1zmp6O5v59Du9SI+i4KhKmioytJWPqHkff3Wa1RVlZUfr0MzM14TCwPBaJz6FLreXrRXJAaz4EiUROmzYNAoHo6Oh01Z42AAnQmq/Q0dHR1NR0/vx5IyOjKVOmfKgyCgoKixcvPn78+KtXr5BIpLwzlQ+faE1iQ8lTWGlKS/VbMrYeg4K9z32TFH8/5ESAidGaWZoa06aqas6cvmLZolPBgTRCE40IF3AZhNYKRE0asi7je+K3ak1cXNyePXvsrO03GJlus9i+ffv2zZs329raHjp0KCgoKDg4+GbozeTk5KSkpKTkxLS0tLy8vNzcnNy8HHhLUysa0YKEY/FonoDL/7egBCCRSCQCIc/B3MV6Soif/jeqanygUY7qVzavsmVxQaey7kamNdV5USRMLRZZcT80eNFCPWWlScuXLjh74kBDZQaHAmOR4Xwmqo2Dry7PC3sQar7FNPh4IJuO4jAJfC4N21KEbsr/Zp0c0JoPSUxMHDRoEAQC8fT0lHcufQegNZ8BjUZHRESYm5v/+eefMpUZMGDA3LlzHR0d792719zcLBKJ5J2mnPms1jSWpzZVvm6uTse3FDOprXhMc11NUda7p5Fh1w8ecN9mZaYxfeqmjYY4ZBWDBOdz6QRkeXP1W0Ttu++M36c1HA6HRqOzmCwOhwM6ZXUV0TFRa1QcfXS/4TT79cK9daJXKdklJD2Wd8r9kQ9XQjWUPCNi6hCNxY8jrphvNlRVUVSbomS+xfjm1ZCG6jwes5XHxLTziCI+iUFGcOgoGrGZRcPyOVQMvADVmPfNOjmgNR+xe/duCATyxx9/vHz5Ut659BGA1vwPJpOZmprq4OCgoaEhs5lRo0YZGhqGhobm5uaCccIP+ZLWwKvetNRmIutz0E35FGwdh46jU/EoRF1DTX5TfX74gysuu+2RjSV0YiOfQ8MjSuFVr1tq0r4zemDJMOBLkKnEravtd0y95POtRnw+0CgbtdO2W3YJ2sCqkM/TLm5ra+cLxQIOn02hkWh0Kp1BJxKJWBwWj8e3trZmZGSkpqampqZGRUWdPHny3Nlz165dP3zo6H5Pr9LS0q8f/MO+NVV5MfXFTwioqpamijfPIw8fcNXXnTN6tIKamorphvWXL5yoKM6i4Bo7BGQBC8sgtVDxTSwqhsehopvyWxtyvqNOrn/t4P1NsFistExTR0eHRCLJO52+ANAaiVgszsjICAwMnDVrlsxmBg4cuGLFilOnTjU2NnZ0/PwakD7M17WmtSEXAy/ENhcTWiuoBBiLhmYzSVwWqeB9+r69Ts31BTRCA59DxbWUNFW8bK568/0BtKa3cOv2zdUTdvlB477dgk8neoXatsycdHmn/NvplHRQaCQ6k0pjUJqaGyqqy6rrKssqS549f/o05UnK82dx8bF37t+6e//23ft3Lp2/dCroTMiJs0GHT+2199lt5eli7W21btcizfX6M5bMmqo7cbTisMF/QCCQv/4cqaSorKuru2LFClNTU3t7e0/3/adPnrl//8GzlGff3IHoQ62pzo+rLUxoKH2GQ5TiULD32S9vXjnhaGehpztnwoRxszRnrFi+OMDP4/6dK3VV75kUBAXfyKSieWwKCpaLrM/6niI5oDUfkZKSIl3v7ePjI+9c+gL9WmvQaPSZM2eWLFkydOhQmdCoq6v7+/vn5uYKBAJ5J9ij+R6twbWUElorCahKQmslEVXFoiDgDeVxUfcwzWVkbC2PQ8U2FzWWP4dXvvzueAW0pleAIaBMFm530bz1zT0TfKGx5ipH9zl5df7CGvLfSpuI3ybit4kETA6dRMWTaUQSFd+KbUZgmhCYJlhLbUZ22rvMtMyc9ISk+Nu37ty9c/fO7buB/kf3u/n6egS4OXlamllbbLK22GRtscHWfJ2DxXp7i/UOmxbuMNHdsRG6c4P2rrXKTutVXFYr7Vg82lp/iLn2wI2akPVaAzZoDTaZMXjFjD8Wa41ZoaO4RH28tqay/iqDjVYb7d1dvc6fuRQZHv3kyZN36RkV5ZUoFIrBYPzEn2EfaU1dUVJDaUpjWSoKlkMlwOGwqvQ3SZGPrvn5uC1aNG/2rJmqKspz9XUM16168SyWRUUwKCguiywt6v/OOjmgNR/h4uICgUD++uuv4uJieefS6+mnWlNZWXngwAFFRUWZzSgpKdna2iYkJLBYLHln1zv4bq35rxkXsgKPKMcjy6UtRwmtlTw2FQsvgJU9a6pI/YEoT4UBrenxnDoZYqzo6av3rf570AiPOWGrNCyLy3/7VglCkYBCJ9GZVAqNVNtQXVlTXl1XmV+Y9zTlydNnT1KePwuPfHj7Xujte6G37t04ffpM8PETp06eOnTgqIudh7Oth4udp+W6nesNrIzmb1tvYLlQzXi+iuE8lfX/TDFZrWGzZrrtag3r9dN2GqrsMVTZY6TiuknZf6vKoS3KgRYqx+1UL9qrXLRVvmCvennX1Bs7p1zfoXrNRuWchWLwhvF+6yfsXTvReeGobYvGWa2ZZrd14R6HDe57bLz2OHr4uB84G3wp/H7Um9dvKirK8UQci8PgCbiijq5s3flZrWmqeAWveoOozSRjqhlUDLKlvqI059XzmJvXT+9zczQxWjNu3Jirl05xqM0MMpLLIiHrs1pq0r+zSA5ozUdgsVhp62FTU1NQuPmL9C+tEYlEeXl5jo6OEyZMkNrM8OHD165de+/ePRgMJu/sehlf1xp8cyEJVYZrKcUhyj4MPLIMjyzHIcrwyHIei4Juyq8veQIrS/mxKH0GtKYnU9tQvXq2pZvmfS9oxDeqavSit0wJOBdy8QtH6hAIeW3tfEE7j8ogEyk4EpVAIGNb0I3SKK8uSct4k575NjMnPSoq6tbNW3fv3rt25Ya/V6DXXj9fj4A9jvssN9lYbrK23GRtaWJnvs7BwtDBfK2Dib6doY6tkZ7tWk3b5Yo2yxVtlivZLB1jt1TBYYmC/dK/HYwne5gq+2xU8jZTObBtSvC2KcFWqsEO6hddNG86zwx10bzppR3lqxProxPrqxvnp/vYXy/hgF5SgF5yoP7TAGiSt3aMm+b93RqhO6Zd2qZ0asvkIxsUfYyU9xpOczKcY79q9tYlmsYmi7bZbnL22XvwbMj5+w/uJjyNe/X2RUHR+6YWGJlGEorauu16fUlrmqvTEHVZrQ052OYiBqmZzSCQCSg4rLy+Oq+pLs9nv/OViyeYpEY6GcFlkRB1Gc3Vb7+7Tu4t0JqPuHbtmnRtSmxsrLxz6d30F60Ri8UvXrzYsmWLdDWddJG2g4NDTk4OKJ35Ob6iNZimvMLMpNKcFCq2Go8sw7aU4hCfBLKMxyKjG/Pqi5NgpU9/NIDW9GA6/b0Pmir6++t/o6rGSy/cQ+uhnvKyi9fOPIp4IB0puR569WTwyeDjJ0+eOHXA+5DT9n3Otu67rd03LbNbb2BpNM9qjd7WeSrr5ymvn6u8bvFUs9XTbVZPt1k93XrdlF2GynvWq7gYKbttUvbfrBRgpuRvrnzUVvW8jcpZG5WzO6Zd2jX9+q7p13ZNv+6qecdV866r5p19sx946UR46URKN9g6YJBwwCD+gEG8n36cHzTWX/+xv/5jf/04f/3HBwzi/Q0e+0FjffVifXRj9mtHempFeM6JcJl5y179vIXqMVNl3/VKexaPsV441nypiqWRno35qh0OFs477Z1ddrsePxwcev1mUnJiXkFOM7KRzqZw+Kw2Eb8nTL19XWtQsDxMcxGupZSErqaTmjlMPItB5HOply+GXDx7lE5ooJNaOExiS006vPL19xfJAa35CIFAsHDhQggEoqWlxWAw5J1OL6bvaw2bzY6Kilq1apVsvmn8+PGenp5lZWXyTq138yWtwTZmpSbctdhpuXbbhoiHVyiYSmxLMbb548C1lHBZJBQst7Ywvr44+YejKLEWaE2PJL8ob6W6ladWxP5v9d/z0gt3131grLZnhbLN0tH20pGSlWN2bVTy3qjss1HJe4tK4LYpJ7dNCd425cROjSvSkZI9s2776MRIR0p8dGL+F9Ltyv+NKOm+5f9uXf5feOlFeOtJ9zCP8IL+bz9zL71wL2jEv5uDQmP8oHEH9OMPGCR46US6zbq7S+Oa/bQL21RPbp542GSSt6GS2zq1nes07dbMsVykabRu3hbL9Y57d3ofP3Li1u2bMfGRz18+zcrNrIPV4IgYnoAj7wvybb5Ha/DIcgKqioCqxLdWkDA1XCYu7dXTty8eU7A1NCKcyyS0VL9pqviB2y3TBwAAIABJREFUIjl45UugNR/x8uVL6abIISEh8s6lF9OXtYbD4dy+fXvu3LkyoZk5c+bRo0fhcLi8U+sLfFZrmipeohsy9zjbHnhw0f/NnUXbDd+lRlMwFZjmoo8C21LMZZFQDdm1BXH1RYk/EUBreiCCNr6z3T5LlePf3CpB1rHGBxrtpRvpr//4fyMl0Dg/aKwfNM4XGuOrHy2ND+zkGxNbn/UnL70Ib2iENzTSBxrlqx/tA4321ouS7WHuOSdi76z7O6ZfspoSZKZywFh53/Lx9gv+Nl+iaLl2trXZUgdbs907bZ1373I56H/o0oUrcY9jM7LfVddV0FgkNo8hEPI6JL24HuJ7teb/1cmVEVorSehqPLKMim/kMAjwqleN5c9/qE4OaM2nWFlZQSAQZWVlLBYr71x6K31Ta0QiUWxsrHRAT4q2tvb169fRaLS8U+s7fElrUPXvdjlaHY69cQv2aqWf7aljvixiLbqp4KPAwAs5TCKyLrP6fXRtweOfCqA1PY7UVynLla19dKO9fkA7vr0F5o9E+L/uAo3xg8b568cHGCR660a7z3m4e0boDvWL1lNOb5l8dOMkfyPFfetUndZrOKzT2r5E02SZtsnmVbbOdh6H/I9dvXo1IvpRckr8u6y0iuoyFBbJ4vTlSYGvaA2yPpuELMEjPy6Sw/23qyW2pYSMg7Hp+KaKFw2lT3+0Tg5ozUe8f/9+xIgREAgkKChI3rn0Vvqg1uTk5JiZmcmEZunSpQ8fPuRwesFQcO/iS5NQhObcmxePrd5j5fb2xiLXLVfPHqHjKlGN7z8KdFM+h0lA1mVU50bV5sf9XACt6VHwhBwbMye7qed8vneo5oeVxUsvXDroIp0w8oFG++hFeetGySpd3Gc/2qlx1XpqyBaVQBMVj1UTd85X2LpoovlKdauNC+ysNzjttNmze+ceb0/fMyHno6Ki3qS9Lq8qwZMxTA6N18YRd3blCqPewpe0BlH7DtWQk/E8El6VRcVWY1tKPi2Sw7YUk3ENbDquqfx5Q0nyjxbJAa35lG3btkkHbDAYjLxz6ZX0Ka2Bw+EuLi6yHQ80NTUfPHgAhOY38SWtaalOQ9ZlnT0bqLNmga2TVV3pa2xzfiss96NANeZxGHhE7bvKnIjq9zE/GXlRlUBregzRsVGrlBx8dWO7RGK8oRE+0Chf/Rg/aKw/9HGAQaIvNNZD+5HLzFuO6lds1M6YKwaZTgwwnuy5XtllnfqO9XNsVsw2W6RpuGHJdrvNLn4egefPXXjw6F7is7g36a8KivObkY00BkXcpUuj+waf15rK16iGzItnDxnZmG1z2laal0rBVGI+KZLDwAvJmDoWHQsrfVZXlPgTdXJAaz6ioKDgjz/+gEAgwcHB8s6lV9JHtIZAIAQFBU2cOFEqNIqKikFBQUQiUd559WW+shIK1ZCDbcyrznveUpWBhb9H1me3NuT8/8hGwXI5dHxLTVpF9qOqvMifjsocoDU9AhKVsGm5reP0q99T+/Jfia500CXKFxrtA4321o3y0oncrxXhOSfcc07E7hmhttPOmqscNlXxXqfovEDBYuE48+VTLI2gNhZrHR2373Fy3LPP1eP4kRN379xLfZFSVFqAQDfT2RSugC0UCySSTnmfkl7DZ7UGWZuW+zrKwt7yRuHTzZe8bZ23YxoL8IiSj4rk0PACEqaWRcPASp7UFcb/RJEc0JqP6Ozs3L59O6iw+Wl6vdYIBIK7d+/Onj1b1odm165d9fXgHfbb+YrWIGozWxuyMU15aFgOsj7rc5HZ2pDNpuOaq9+UZz6ozAn/hQBa0yMIDb2xZqLzp1sleOlFeEOjfKHRvtBYP2hcgEGCv/5jT+1w11l3dk2/bjf1nJVysNnEQyaTvAyVXNeqOa6bbbtay3yxppHhQovtG5w8XfxOBIXcun0z/knMi9cpefk59Y21RApeKAJNwLuML2hNes7ryM325vcqXx3NCltmbZSREkVBV3xUJIdqfE9E17Bo6PqipJr82J+rkwNa8xF5eXnDhg2DQCAXLlyQdy69j96tNQUFBWvWrJGV0ZiYmGRnZ8s7qf7CV7UmA1GX+dXIQNZnseg4eNXrsox7FdmPfiWA1sgdNL7VELrdfXaYn37sByuMwj3nRLhq3nFQv2CpemyTip+xyr4lY20WjN66VNVyvbaN2VIHe3NnJ4c9e5zdDgUcvXbletKTpJy8rMbmehqbzOEz29r5nRKwm/pv57NaA6983Vqb4em5c8u5/bueXVxquT7nZQwJVfpRkVwrLJeAqmJR0fWFCTXvY36uSA5ozaesX78eAoHo6uqy2Wx559LL6K1a097efv78+TFjxkiFZt68eTExMaDndHfyodbU5MfVFyf9pzVvW2refSvSEbUZLBoWXvGyNP1OeeaDXwugNfKkvb3dy8NnwYhtFpOCTSb5GE7et1Z117oZdmu0LRfNNFqpZ2q+1sHN0evYoeBr165FP45IeZmck5dVXVeJxrVy+eCRLX++VDKMasiqyH9ut3v7nBUGly4exTUXoBrzPiqSQzZk41srmVR0bUF8VV7UT9fJAa35iCdPnkAgkEGDBsXExMg7l15Gr9Sa2trajRs3SoVm4sSJ586dAz7b/ci0pqk0oSInqjo/vrnyRWP5C3jVm+aatG/F25badBYN01TxoiTtVlnGvV+M0i9rzQOgNb8ZGo22x9lt+2aHPbvdDvgcPHf6QkxsTHrG26q6CiIVx+LS+UKuuDe3denzfGWBN6Yxr6Uqo/r9c0xjHrox79M6OWRdFh5ZwaCgavJjK3PDf75ODmjN/4fFYhkYGEAgEGNjY3nn0svoZVrT2dkZGhoq26Jy1apVoFmwvJBpDbIq+cXjyx57tmek3sc2ZjRXv4FXfTNeN1e/ZVLRjWXPi99cL02//evxWa0pfHY0+voeBYW/ampq5X3C+jLCdmEHmC3qtXyrHV8OpimvtSH7s3VyiNoMPLKMQWmtfh9dkf3oV+rkgNZ8xIULFyAQyMCBA5ctW2ZoaGhoaGhubu7h4bF///7Tp0+HhYW9ffu2vr4ej8czGAyhUCjvfHsKvUlr4HC4ra3t/7F3nnFNZF8fH1fdfdYtf9feXcvaFRFs2HsDe0MUe0MpdgVUpElRUBGQ3ntvoYeSAKEn9F5C6DVAQvp5XkyMiLq6AmKZ72dekMvMnZshGX5zz++eI6ropKWlxWAwBnpQPy7dg1C5JE8PO70Lpw44W+tXFcRU5EYVU8KKyGHFlA9toSVZ4W1N1IK0wOSwF6mR5r3fesgagp8mKVjL31pFZtOC4cP/V15eMdAXDAPjK+WDsiY78mMmuZjS7KjqsrTWhgoKwSkj1qZXPjlM1rwNjUabNGkS8q/89NNPv//++7x586SlpRUVFV+8eOHr60sikX7kJVTfjKxxcXH5+++/0T/kypUrCQTCQI/oR6d7ECoF75Cf4psS46pyRV7rgVJGgg+tKLaYElqYifvAFlJEDm1rrCxI8yeFPkuJMO2DLfwlKfRZYvCThGD9tHDDaM+Hime2TJ00avkKqbCwcKygKQbGh+gua7KTPPJSfF/LmqiP+uRKKBG0ktSWhnJyvEM63qqXPjlM1vQgLi5ORUXl4sWLCgoKx48fX79+/aZNm5YsWTJ+/Pjhw4ejq6XeZfjw4bNmzdq0aZOysrKbm1tJSQmdTh/ot/Ll+AZkTV1d3YULF9C/1rBhw27evNnS0jLQg8J4I2vKyL7hvi+VLsrG4mwr8yKf6Nw6LbfPxlSrNCusIjeymBxakB5SmNFjCy7KxLU1Vuan+iXhjJLDTXq/kcJMUsKfZ0a9IOEMH6sdnz974oIFC589N+FwsPRrGBj/hkjWZCe6psc556f4FpND0Nmaj27FlLCqkuSW+rLMOLu0aIve++T+RdYondn2o8maHvD5fD6fz+FwGAxGSUkJkUj09PR8/vz57du3ZWVlpaSkpk+f/q7KGTp0qLi4+OXLl21tbXNyvv9w/Ncua8hksqi00+LFiyMiIgZ6RBhCugehClK8fZ2eXDh1wMFCp6mSEB9mf/2q/JXzst5ORoUZQVUFUYUZwW/XggkozAhqa6zIS/ZJDDYkhT7r/UbGm5HxZtZGysuXzBw/fsL9+w9ramoG+iJhYHwDCGUN3qYw1euVserDuxdzkv2oefhPMMmFF2XiqMWklvrSjBjr1Eiz3pvk3i9rPFUzcI+undu+dt3Ggb5aXy90Or20tJRAIHh7e9+/f19aWvrvv/9GK0yJmDBhwsaNG9XU1AgEwvc6QfBVy5qgoKBp06YhCDJo0KDLly9XV1cP9Igw3tA9CJUcbZ+b7JNJ9LihePLe9bOUBK/aomhPB8MLpw9ePnvY1kwzPy2gPDu0LAtXlBmUnxaQn+ZXkB7Y2liem+xFDNJPwhl93paIM0rCGaVFvMiKNfO2UduzbfnoUaNOnT6Xk5M70JcHA+ObQTRbk5PoRia6GWiqKF8+nhDpUl0UW5odUUQO/bBJLqwoM4RanNRSX5KOt0qJMO0Tn1x3WRPvp5kQoJkYoGGhd2rejNF79uwb6Kv1zSAQCDo7O1NTU01NTRUUFNatW9cjaDV79uw7d+6Eh4d3dX1XyS2/Xlljamr6+++/o4Gnly9fDvRwMHrSPQgV5mNy5fyRcL9XVfnhz/Vvn5bbY26sXpaNqymMcrfTV1aQO3Vst77mtQD35+QEz1JKSF6qb36af0tDWW6SJyHgcWLwk8/bkkONsmJeRnnpnJHdPHni2G3bdyYkJA70hcEASnQF3iEHABK8CyOss/7TsTwOv6GSzucJQADR9tnZMdT+GSPGG7p7a5Ii7cqzQjwdnlw8c9jB8nEJJbwyP/rDJjlcQXpQZWFCS11JWrRFcrhJn/jkRLKGFKKfFmbgZXlt18ZFEyeMOXHiZFlZ6UBfrW8VBoORnJz88uVLaWnpMWPGiMTNkCFDli9frqamRiaTv4/lVF+jrOno6FBWVkav+JQpU0JDQwd6RBjv4e2VUB7+LkYXTh+0ePGgujAyIdLhlvKpi2cOOVnpUvPCKnJwkQGvNNUUTh2TOX1ir525ZlFGYF6qX0t9WU6iR7y/bkKQ4X/aiEGGSSFPMqOeEwIN7lw9MHniqJVSq1zd3Af6kmAICTZJf3U5AgAoURUkv+L/dGxRcq3ZhXAelw8AEVZZmeHl/TFCjO50D0KZPb1z78bZEjIuOcZdReGE4qXj4f5W1Lyo8uyIwgzcuz65grTAygJic21xatQrUtjzPvHJJYe9SA1/To5+EeGhce7YxnFjhm/avC0iImqgr9N3gkAgqK6udnBwkJeXnzJlSnd9s337dhcXl289OPXVyRoajbZ3717RiqesrP/2qIfxxaipqZkzZ47TKzW0eEIJOSgZ73RTSf7OtdOJkQ51RVGe9gYK5w6fk99rY6qRQXBrLIupygvzcjDwcXqSn+qTl+LTUl+alegW66dFCNT71C1Ajxionx5hTMI9MXxwesHsKTP+mWVk9Owz8jHy+YKU7IrK2m/7C9yvtNUzmqs7knyKyJEVAMDnCTLDyyOts3Liqvg8AQAIBNBU1d7e3JUaVBJlm11X1oYeGG5BsVaOBgA+X8DnCdeg8bj8ckpDbnxVR/ObGe8mWkduHDWPUNVWzwAALodP9Cx4vN+vubqDz+VzWDweR3g4h8VronW01HYKBMIalny+8IeOlq6uTswY/vl0D0LlkjyNdG9cvSCbEOnUUB7vbPX43MkDj9SuxITYVuaGl+eEF6QHdffJ5af6VeTHN9cWpUSYJuGMem+SSw5/nh1vkYQzfnD96IypY8XEJZxdXLk8LCtSv1BUVOTo6Lhv3z5Ryn4EQcTExB4+fFhSUjLQo/tMvi5Zk56ejuZVRBDk0KFDmJnma6a+vn7GjJkPb5+soPhlJ7pnJ3kWpvvnp/qaGNw+Jbfb+PGNogz/8qygADcjpUuyZ07svXf9jLudXgk5oDwrODvJIzfZu6W+JCvBJdbnESFA96NbvL8uIUA3GWeQFv7E6qnCupXzJkyceOeuam98wfiUojvG/j5RZB4fq/b8Hrx0k54eDXomH+L+KLGlrtPxbpzNNXzQs7RnJ0LcHhI5XTyBQGCpGGl4JNDPMMVDM1F3r28+kQYAXjpJntpJABDyMsNTJwkAOttY1tfwZhfCrZSjDQ4HZOGpAJDkU/jkaKDNdbzphfDH+/xKM+o7W1mmF8LV1rv7GqS0NzH9nqQkehcCQGVO48vz4abnw1+eC3O5T2hv7gKAssz6SGtK0LO0p8eCjI4FpYeVDeTF+pZ5sxIqwTU52qGUEuzv+uzC6YOvnt+nFUTmp/o/0blx8tjuu9fPhPmal2XhyrJCSykhhemB+WkBuSm+5flxTbVFyeEmiSFPPt8nF2JECjXOjH6ZHmVirHVhyaIZs2fPfvLUuKOjY6Avzw9BSUmJoaHh2rVru68Sv3TpEolEGuih/We+Ilnj4+MzduxY9ILevHmTyWQO9Igw/g0ul2ts/GzM6JFPtJTKswJySZ5Zie45JM+SzIA4nOWdayfPnthjZ6aRm+xZWxge7vtST0Px0tmDB/dutjN7WJDmnU3ybK4roRCd8V4P4/y0P7olBj9Oj3jibXVLZovEhPFjTp46k5PbB77gqrpWQ7soJV3P5GwsX99bCAQC4xPBpufCGHQWl82Lss16eS4cnaRh0Nl6+/3y4qsEAoHx8RAn1Xj0kACjVJNzYewurt3NmLBXZADwfkxyfUAEAD/DlBdnQtubmAIBhFtS7G7ENFLbbW/EZkaUo8c63I51f5QAAEm+RQaHA5qq2vk8gZViVIRNVkdzl/7BAC/dpObqjvoKusXVSO/HJADIjqHekXKJsskqzagLNcu8v8mjpQb7F/g5iIJQRWnels9U71w7XZDmnxbndlNJXuHc4WBPk8by2NwU3xeGd8+c2Ktw/ojF8/vRQVaFGYFFmUE5JO+yvNimmkJS6POEIIPP9smlRzwj41/av7i2bsW8sWPH3rh5q6IC+0p+aTo7O3E43LFjx/7880+RuDlz5sy3lc3/a5E1np6e//vf/xAE+fPPP83NzQd6OBifipWVzejRo9RvninO8M0leVKIrhSia0GKV2Gaj6+TweWzB86e2GOsez0rwa06D5eX7Bnq/Rzn+TwnyT070aO5rphCcMR7qsf5av7LRvTXTg3VD3FSPX9s09gxf23evC0qGt+37yI8Ie+kutNDsxBafWvf9vztwucJXpwJDTRORV/a347VPxQQbJIeYpqRFlyqu8cvzILc2cZ6eiyoNKMO3acqv0nvYEBdWZuzGgFnlgkAvobJntqJAPB4n192rND8K+ALmHQ2qpAaqe258VVpIaUvz4V5aCYAQHYs1UguCAQCALC9FhPnlleUXGNwKIDLFoYh8hJomju92xoYqcGlj/f7oSGpZlq73gH/yuzGL3iFvh+6562hJLi9MLhz8fShmBBrWmGkh53+hdMH7lw7jQ+yqi2OzkvxdbV5rKIgJ39MRvmyXEyIVUGab1luTFNNYRLuGTFA/7/65BKCDJNDjcjRLwIc7h+UXjlm9EjZY8czM8kDfUl+dHJycm7duiXKcTxs2LALFy58KzM3X4Ws8fT0/OOPPxAEGT9+fGBg4EAPB+O/4e3jM3bcuMtn9hameRemeZGJLhSiS1aCa0GKZ1Gat7eD3i3lE7IHtt1RkXe30SFF2RakeFGIzlkJbk21RZnxDlHuqjHeGu/d4nwepeB0Y7wf3VbYPXXSqEViSzw8vXj9E2Vvau3UMAvZdcXMxieRxcLqMgKPxze7FBHvmgcAfL7A7EL4K4WIGOdcvGMO0bMgJbCkpbazpabT8HBgeVYDekhlTqPeQf/a0lZntXhU1nhoJqBzMNoyPvkJb2Vz57J5IS8znhwNMr0Q5qWTZHQ82Fs3CQAoURVPjwXxOHwBX2B8IjjONS+XUPXsRAiPI/y7V+U3qa13r8pvirDKsrgaiTbWlbUaHA6g5jZ9qcvzXWHn4LhEbC4lzoFCdMkheZRRgn1djM7J73thcKckM7A4I+DZ45snj8lcv3I80P15cWZgKzU+K9HTzuxRfKhNXrJ3aXZ0Y3V+YsjTeH/d/+STSww2yIx+FuWpdfnk9r+njFu3flOfP7Fg9IbCwsJ79+6Jlk0NHz785s2bX38+sIGXNaJ5mnHjxuHx2Gf6myQ2Nm7q1L9ltq3CB5qVZPhkJ7qS453J8U4UgnNhqlceyT3Kz+SptsrpY7uOH95h+fxeTqJrFtG1qaaIHGcX5XY3xutB9w3v+SDW+2FioBbR/5GBmpz4/Knz5s0zMHzKZPZ7coUEcuk+JYt9ihYJmT/6OlIej292UShrAMBTO8nhTpzotxlh5c20jrZ6hs5u3ySfIrSR5F/84jSOQWc53o1DZY3bQ6KXdhIAPD0WlOBdiO5WU9yCt8/OwlfeW+tamSOcX/HSSUIFECWywkguGAB4HL7uXt+MsLKCpGrDw91mawg0nT1+7U3McCuK413hkOpKMVnz+Tg5u0wYNyrK73lRundWonsOyauUHJgYaX9L6cT5U/u9HQ2rC8Kykzwtn6ufOb7n8tlDjzUUo4MsaPlhBWl+lAS30uyoxur8xGDDeD/tj/vk/HXj/XUTAh+nRTwhBOjev3542uTREpJL7ewdRWZwjK+KkpKS27dvi2Zu5syZY2try+V+vc9+AyxrPDw8RPM00dHRAzsYjN6QnZ2zUmr15IljHt09l53oUpDqkRnviG5kglN2gktBikdBqkew+1M/Z31yvCOZ4NJYU5gRYxPhcivaQ637RvR7mBSgaWlwftXSWePGjbt5605VVdUXeyOdTPYTh6glh/Wu6XtXVjd/sfN+bfC4/GencHj7bPRlRXaj3oGAYJOMgqRqX4Pkh1s9qTmNna0snd2+xidC0kPL0kJKDQ4FEDzyAcBCITLAOA0AnNXi0NASwT1fZ49vQWJ1U1X7q8sR9jdjC5Kq1da75cRVtdR2ZuEr761xRTVKZkS5trRPa11nVydH/4B/IamG2c7WP+gfYJTW3sRsqe20UIj00EwEAQS9SLe9GYMOr660Ve+AX2UOJms+h8bGRpndu8UWzIgOMC0jB2QlumcluueleJdk+nvY650/ue/G1eMB7sbU3JCSTH9nKy31W2dOykqfk98bE2yZS/IozopooOURA/VjfTQ/apKL99dOCdUnheg9eXhy0bwp06ZN19MzaGr6cb9o3wqFhYUXL14cOnQoKm527twZHx8/0IN6PwMpazw9PVFfEjZP833A4XD09Q0nTJi4frW4t4NucbpnTpILOd4hI9Y+Iw7dHHISXXISXTJi7DLjHRtrCjNirCOcb0S734tyuxftfi/OW50UoOFudnXv1iWjRv4lJyc/UFF2Ulb5fhWrxdK61p4J7YzvKgXnJ8LnCZJ8i0pS60QtJWl1TqrxFlcj3R4SyzLrAaCZ1vH0WFCEdZabRoLtjZhkf2GKGrx9DrouKd41D13KxOPyo+2yTM6EmV+KcHtApDcwASDKNsv4RIiVcjTuZUaUXXaEVRYA1FfQn8oGmV+KqC9vc7gTV5RcCwB5BNrzUzgjuSAjuSA3jQR6IxMAwl5litzKdSWtxieCaQXYf8fPhE6nHz4iO2PaRD/nJ2WUgKwENwrRNSvBrTjdN4voamJ4++QxaaWLRz1sdcopAZU5QZnxzj6O+sQw66wEl2JKeAMtjxjwONZb40MOuVgfzThfzaQgnVScnt2zK1vXLhw7ZqyS0jUq9cs9sWD0HhwOt2rVKlTZ/Prrrzdv3qRSv7qEmQMma7r7abB5mu+JvPx8md17x48bden07ghf4zySS0GKa2acXXqs7ZstxiYjzr6xJj892jLM8Vqk6x28x91E/wdB9jfOHFk7ddKYDRu3RuNjBvaNsDlcCw+C5G69g5es8EkF2Pw4Cmr1RWmqajc4GEDN+/AcydtXrbOV1VLT2b2lvYmJZqx5q7G5i1bQzGHx2pu7OF3Cue6uDnY5paEyu1E0AHoDo5EqzFfE7uLWlraKdsb4DFgs1pWriuPHjnJ49bAiOyAnyQ31yWUnuhVn+JAJzuZGdy+e3ndSdpehpmKQ29OsBNc8kkdGnGMRObShKjfeTwfvef9DPjmiv1YK7rGP9a2925ZMmjj2qOxxCgXLSfZN0t7ebmhoOH78eFTczJ8/PyQkZKAH9RYDI2swP813j4OD0/LlK0aN+N+RvettTe5mEe3zSM5ZRAdyvF16jE0a3ioj1q6xOj8tyiLcSYXgqxrpdueuwq5pk0ctXbbc0clloIf/hryy2ssP3OdLaV5X86IU0D5+wI9EQyXd4FBASUb9QA8Eo894qKE5Yvifatflc5LcilK9KERncrwTOd4pO8G1KM07M97J11H/3rWTcge3XTq9P8L3RXaCc1FmaD01J95PG++h1tMn5/Ug3kcjOVgb53T34vFN48b8tWHDppAQLHH8N09+fv7JkycHDx6MTts8evTo68nJMgCyxt/fH5un+RFoa6P7+flv375r8uSJy8TnaN07G+lnnBxpkU9yLiA5ZxMdm2oLcgjWUS7X9O4dnD9r/IyZ/zx+rN/S8tUtse7icJ38kjfsMZZaZ2BmH9fM+Fq+vQMOm8mtym/q6sAy/H5XmJm/GjN27DLx2R622sXp3jmJrplxQp8cheick+RalOZFJji5WmviA03J8Q6FmSH11OxYn0dRbne7m+TwnuqkIE28h/p9lX1/Txq1YKGYo6Mzh4N9Wr4fXF1dJ0+ejE7byMjI5OTkDPSIAL68rElLS5swYQI2T/NDkZ6eoaR8TUxMbPSov5YtmXP22PbHDy76OGg3Vud62WmuWTptzJgxKtduUr+gL/gzKK9tvvXQV3KZzhFZK/9ICh+wqBTGd0tRUfG+Awf/Gv7nxZO7SVHWRakeWQlOGXGvfXKx9uR4xzz/hTNGAAAgAElEQVSSG4XglIq3LsgIrqdmx3o/jHK9jfrk8B6qRN8HRN8HhuqyEgun/vPPP4/1DFpb2wb6bWH0PTk5OTt37kSVzd9//+3m5jbQI/qysqa8vHzRokVozj0cDvclT40x4FTX1ERERBoYPNm+Q3rGzH/mzpmxVEJs+rS/j8nJk8mUgR7dJ8EFvn80RWbXy2ULdG+q+2QWf9U6DAOjl7i5uU+bPnPOzMlG2ldJEZZFae45iU4Z3U1ysbapeMv89MA6KgXveT/C+Wak6504L9UEvwfWBmfXr5g1btzYq4rKpWVYXYvvGSaT+eDBg59//hlBkKFDh965c6efsot9Il9O1rS1tW3evBktE2pjY/PFzovxFdLR2RkXR9B9rBcaFj7QY/nPlNY0PjIMXiNusH3tsydmkRUNWLFMjO+W2tq669dvTp8+fdaMidcuHwp2N8gnOecmOlEI9plxtukxNilRFvlpAXVUcrSnWrT7LaKvmof5lb3bFo8ZPfLQ4aNpad9S0n2M3oDD4ebPn49O2xw/fnwAy4B/IVkjEAhOnz6NvmENDY0vc1IMjH6CD4JQQu5JOdtV0/TkDtq44VIZPMwxgPHdUlxc8vSp0bz5C6f/PUlm20rbF3cIIabpMTZFKa45RLuizKBGWlZSoEaAjeJ52TVTJ41es25j2Df4xILRS6qrq3fv3i2y2tTW1g7IML6QrDExMUHf6tmzZwd2egoDo6+oamrVMQrdufT59gXGiiruBHLJQI8IA6MfYbFY7u4ee/cfmDhxwpRJY7dukFS+sN/ksWJCpFNNRaa68p6pE4eLL5GwsbXn8/kDPViMgYFOp586dQr9d7927dqSkgG4K34JWRMfH48ufdq0aVN7e/sXOCMGxhcjnJR39qTjthlGe1a8VNcJLKnDqi1ifOdkZ+f4+PjevHVn6bKV06dPW7RgtvjiBdOmTX+sZ9DQiH3+f3TYbLaKioooq01aWtoXHkC/y5qqqqo5c+YgCDJhwoSCgoL+Ph0Gxpenlk5/ahW1b6XZ7mkmx/ZZW3sltDB7ppjDwPj+4PP5NbW1bu4e+voGpaU/ehk1jO7o6uoOGTIEQZBp06alpKR8yVP3r6zh8/kHDx5EbcLe3t79ei4MjIElMrXgwgXng7NMD8w3PXvWMYSYwwVsKh4DA+MH5dWrV7/88guCILNnz/6SKW36V9a8fPkSnYm6fft2v54Ig8PhREZGOjs7V1dXoy0MBsPX1zc2NvbTOyGRSC4uLp9Sd/7Vq1dmZmaf1GlSElhagqUl5OW9aaRSwd4eLCyglyo+Ph4IBOHPnzDsj5CeDomJvemgoaPD0DLy8IZXctMsDkqZ39Xxzyqv7u2oMDAwML5NrKys0IXfS5cu/ZT/LH1CP8oaCoUycuRIBEE2b9789aRV/l7p7Oxcs2YNaspGW6hU6u+//75p06ZP70ROTg5BkI+mfrayskIQZMWKFR/v0cEBFi6EW7fg8GGYNUsoYkpKYPVqOH4crl+HhQvB3//TR9gTdXV48AAAIDAQzp37/H5Qzp6FV6962wlAQm75hcsusvMtTsy0PLLT0sgmuqGz8+OHYWBgYHx36Ovro7Mb27dvp9PpX+CM/SVrOjs7t2zZgiDIyJEjs7Oz++ksGCKYTCZ6wf/v//4vIiICAKqqqkaMGLFt27buu7W3t3d19axHzefzOzo6AODcuXMIgnQvN0+n07ncN+UDaTSaurq66DMqamcwGAwGQyB4O/EulQpiYuDlJXwpLw+WlgAAqqqwZYuwUUcH1q0DFgu69QWM18YULhfY7De/QndDk68zGMDjAZst3EFdHdavh/Z2EC3BaG2F1nfqMDQ1wYe+V21tsHUrZGT0bBcIoKEB3tXlDQ3wrlhpa4OWZgBo5rCf2eOP77Q5P9tObr6l/Cl7HzwZi0lhYGD8gNy7dw/9ryErK/sF5jj6S9bo6emhb+PZs2f9dAqM7jCZzK1bt6LXfM2aNTwer6GhYdSoUTt27EB3oFAosrKys2fPnjt3rqKiIo0mrNoYHBwsISExZ84cBQWFHTt2DB48mEAgAACRSNyxY8fs2bMXL15sbm6O7vzo0aM//vhDTk7ul19+2bx5s+jsp06dWrVqVc85RnNz2LQJBAIoL4fqamAwoL0dOjpgzRoQBbDy82HBAkhOfnOUkxOcPy/82cYGNm+GhgYAABwOVFSASoXz50FBAZYvB3NzMDODFy8gIwPmzoWxY+HMGejoADodzp8HGRmQkQFFRUCXZuTlwenTcPYs7NwJKirQ9k4e98hIOHoUeixMjYyE/fvh6FHYtg0MDYUSikyG/fth/37YsQO0tACVfa2toKIC0tKwezecOQNNjQBAKixXvOkhJ251ZZbjoWWvlO55JOZg6VYxMDB+LLhc7qVLl9B/T4qKiv19un6RNenp6WiB7j179rC7P21j9BtMJnPDhg0jR47ctWsXgiDGxsZ0On306NGorGlqapo/f/5PP/105cqVixcv/vTTT8uWLWtra8vJyfnzzz//+OOPu3fvKigo/P7777/++mtKSkpra+v06dMnTpyooaFx6NChIUOGeHp6AkBoaGhSUlJFRcWQIUM2btwoOvu6deuGDx9eUVHx1pj09GDDBrhzB7ZuBXFxuHULeDyorYVp08DXV7gPjQYzZ0L3MiKpqSAmBhQKAMClS4AgEBoKAKCiAvLyUFsLI0bA1q1gbg5kMly+DCdPAosFN2/C2rVQUAAMBpw6BTIykJ8PBQWwcydcvQoCAezcCadPQ2srJCfD/PlvBiDi6VNQV3+rhceDNWtAQwO6usDfH8TFgUwGOh3WrIHr16GhARITQUICjIwAAK5ehVWrIDMT8vJg9Wq4ehWVOx1sto1/4tGdVpdmO1ye57h3rZnOy9Cy+qZe/8ExvluoVKqDg0P3WHB+fr6DgwOVSv3EHlgsVmBgYGBg4L88GbPZbBwOZ2Nj4+Dg8ElrVLlc8PcHMzNwcICmbh/gsDAwNQUXl/c8Knw67e3g7Cx8gGGzoa7u87tCCQmBysredoLRd7BYLFlZWVTZ2Nvb9+u5+l7WcLlctPDVmDFj8vPz+7x/jPfCZDJXr149adIkEok0ceLEiRMnEgiEKVOm7Ny5E16nQ1RTU0N3vnv3LoIgnp6eqKf7xYsXAMDn85ctWzZ48OC0tDQXFxcEQfT19dlsdmZm5tChQ7uLmMLCwsGDB/dooVAoPSXs06cwdCjo6EB5OURHw+TJ4OgIdXUwYgT4+Aj3qaqCCRN6Olq2bAE7O+jshPXrQVISrK2Bz4dt2wCPh4YGmDz5TWDr0iXh1I6xMezaBQCQnQ2jRkFQEFRXQ3U1ODnB9OlQVARHj4KUFMTFQWcnUKk9Q1EcDly8CFFRbzXy+SAhATIykJ4OLBZUVwOTCaGhMGUKpKdDVRXU1oKaGixZAi0tICn5ZlR1dUAiQbfgXVohVUXV65ik5Y25bqcW2RyTtbYPINFZPaOBGBgA4OPjgyDIsGHDkl/PYpqbmyMI4v/JLrTW1tbx48dPmzatARUK78Dlci9evDh48OBff/0VQZDp06cnd58xfRc+HxQVQUoK7t+HFStg2zZhhNfEBMTE4MED2LEDDh/+YIT3o9BosH49oHaFe/fg5cvP7Aelvh62bIGsrF51gtHXtLS0SEpKIggyfvz43Nzc/jtR38saNzc3VJE9efKkzzvH+BBMJnPNmjV//fVXR0eHg4MDgiBbtmwZM2aMjIwMABw4cABBEMLrRUNeXl4IghgZGV24cAFBkKCgILQdfZmammpgYIAgyJIlS1atWiUlJTV27Njdu3eLzlVQUNBD1rwfTU2YMwdEhpv792HrVqHhRrTav6oK5s6FgIC3Dnz4EG7dgthYOHoUbGzg/HlISYFly6CpCaqrQUzszeqny5eFssbQENBwW3o6/PUXbN0Ke/aAtDTs2gU7dkBBAdBocPo0TJsGU6aAoiL0yOqdnw8bN0L1O6uWCATYtw8mTIB//gFNTaDTwdYWhg+HnTtBRgakpWHLFrh0CTIyYP58SEj4l4vB4HFsfBOP7be+vNDx5jyPw0sszis4x5KLP3INMX48/Pz80FvounXr0OkWOzs7BEFCQkK679ba2trTzQbQ1dXFYrHYbPbff/89Z86c5uZmtJ3D4XR3a6akpCAIsmHDhvz8fGtrawRBDh48CAACgaCjo4PV3euGEhAAixYJvyD19bBpE+TnQ0MDSEqCpycAQFMTLFgAFhZvHUWnC51wAMBigSi/vEAAbDYIBMKYb0cH8HjQ1gZ8PrDZsH49qKm9MdWhU7w9ctNzuVBfD++OEyUqCmRk3mN9o9PhXZ3H4UBdXc/oM3zAPIfRO+Lj43///Xf03xNq6OwP+ljWNDU1zZ07F0GQZcuWMRhYRrIvh0jWNDY2AsD27dsRBPnpp5/27dsHrx1b7u7u6M7GxsYIgtjZ2aEedWdnZ7R927ZtgwYNSktLe/78OTpbk5ubm5GRERwcTCKRROd6V9ZwOBwOh9PzJmtuDmvXvpE1enqwaxfQ6bBrFzx9KmxMT4dFi6CHqZxEgtWr4fJlePkS6uth1So4cwaUlIQ2HTExEJmaRbLGwEA4W5OeDuPGAZEINTVQVQUVFUAmQ3s7oHXXCgvB0xNmzYIjR966Ufr6goJCz1sbiwXoFy8rC6yt4X//gydPwNsbZs+GsjKg0aC6GoqLoaAA6uth/nwQFaWn0cDR8b333Nyq2uv3fY4utbq30Etpgcv+9a8ePg3Or+r1lDvGd4S/vz+CIIMGDUIQBLW12dvbi2SNQCCwsbFZvXr1zJkzly5damlpiZaj4XK5enp6CxYsWLRokZqa2qRJkxYuXIhKH2tr66VLl86dO3fjxo0xMTEAUFlZ+erVKzSBXktLy6+//rp27VoAqKurW7p06eXLl3uO6dAh0NAAHg9KSqC5GTo7gc0GR0dYvvzNrKSSEpw69dZRSkrw2pYHZ8/CtWvCu4GuLlhbQ2IiyMuDvDxISYG7O5w6BVQq2NnB2LEwe7YwtuvrC1u3wqFDsH27MFQtEIC/Pxw9CmfOwKZN8OpVT8UDAI8egZbWWy0MBmhogIwMHDoE+/cLn4t4PDA1hV274NAh2L0bkpKEO2dmwsGDcOAAbNkCurrwjnbE6A2Ghoaoan/48GE/naKPZY2qqiqafA8nusVjfBGYTOby5cuHDRuGeoHJZPLo0aMRBJGWlgaA5OTkYcOGzZw508PDw8LCYuTIkZMmTaqsrExOTh40aJC4uLi7u7uRkdEvv/wyaNCg1NTUnJycoUOHrl+/nkQi2dnZTZkyxdDQUHSu/Px81Jgsarl27dq+fft6FjarrIT580FXFwCgvh7ExcHYGADAxATExYVpZk6fhkOHer6ZjnbYuAFGjIDwcKEtZvBgcHUFACgpgblzQZSM59w54Z1UTw9Wr4bmZmhpgXXr4MoV4Q5374K0NDQ3w6ZNcOeOsPHsWThwoHuQCBQU3rO0u74eVqwAa2vhyzVrQFsbamth/vw3T6VycoCuqD96FGRlhVLmyhXYtetDj5IsAc8Zl3J0n/WFBfbqi3zOitkf2m35wj62no7VFcEAAPDz8xs0aNCePXtmzpw5btw4Op3u4eGBIAh6U0UDUgsWLLh169bKlStFQeRXr14hCCImJqaqqrpv3z4EQSQlJdF0VkOGDFmzZo2WltbixYsnT55cWFjY/XQaGhoIgujo6AAAlUodNmxY90WOQlAj/PnzsGkTiIuDkxMAwMuXsHr1m33U1WHjxrc+9s+ewZYtwseDefNgyhRoaACBAFauBBcXCAsDBAEVFXB0hNhYmDkTsrKE318lJWhshIQEmD8fbG2howNcXGD2bEhOhuZmmDEDrK2hsxMsLWHhQnjXciQvD8HBb7X4+sK8eUChQHMzyMkJbxre3jBnDuBwQKeDtjYsXQo0GjAYsGoVXLwINBoEB8Ps2eDi8vl/S4x3YLPZ6Ofzt99+Qxft9jl9KWuys7NHjBiBIMjJkyf7sFuMT6Grq0tGRmbmzJl1r912enp6I0eOPHHiBPrSxcVl9uzZQ4cOHTx48Pz58xMTEwGAx+M9efLk119/HTJkyLZt2y5cuDBp0iQ0ym5qavrHH3+MGDHir7/+2rFjR/dbYXFx8ZgxY/bu3Stq2bx589ixYyvf9ej5+MCCBSArCxs3gpycMB7f1gb798Pq1XDwICxeDGRyj4Nq2HyawjWYMwvq6wEAHj2C6dOFBsDKStiwAURTR7dvw/XrAACRkTBtGuzdC11dkJEBy5aBtDQcOQKLFwMaYgsOhvnz4ehROH4cpKUhM7P7tYNDh948q3XHxAQWLgQ5OdixA44eFU7COzvDwoWwfz/s2werVwOaPTMvDzZvhgMHQE4Odu4UWp4/TB617q6O/xEpy1sLPNXEfQ4tsDh13jEgPosDWCHYHx00CGVgYIBGk9XV1V1dXQcNGhQVFdXV1TV9+vSpU6ei9mEqlTp27Nh58+bRaLSdO3f+/PPPFAoFAMhk8q+//iohIdHS0iIvL//TTz8RiUQWi2VmZoYgyOPHj0XnQudlJSQkWltbAYDNZlMolPeUJ9y5U2hZq6qC589h/HiorAQzM1i27M0+9+8LfWYiyspg4UKg0SA6GiQlYdUqyMsDCgU2bYL2dvD3h4kThd/xsjKYM0fohpGRAdTAcO8eSElBbS1QqVBfDxs2wNWr0NICM2fCxYuQnw/t7UClQg9LX1kZHDv2lqkZALy84K+/wNYWamqgrQ3q64HDARkZkJWFujqgUqGsDCZNAmtrKCiAWa/vPABQUAD96QL5MSktLZ06dSqao6+tN07zD9CXskZBQQFBkFGjRmG1nwaEurq68vJyUSSIx+MVFxd3n0FpbGzE4XCRkZE9Co7m5OSEhIQwGAwmk1laWipy/lZWVvr5+cXHx3NEAXIAAGCxWEVFRVVVVaIWKpVaVlbWPcPNG6qrwcUFYmLeauRyAYcDN7f3hLoBvPFZFrY4aHx9Z6HT4fVydODzoabmTcC+pQVeuwegoADi4oRzMJ2dEBgInp5vfgsAtbXg5gZ+fj1D5kwmpKd/cKq5rAxcXCA8/K3ZHSoVPDwAh4PukVYGAwICwN8fPi38ygeBV2TGscO2F8QcHi3xvybmfkDK4sYDn+S8io8fjPH9gsoabW1tAECnYA8fPvzHH3/g8fjW1tb/+7//W758uWjnAwcOoKmqZsyYMWLECPSphsFgTJs2TUxMjEaj7dixY9CgQWvXrl25cuXSpUtHjBghmnlFNc3ChQvJ7zxa9ERKCi5devNy0ybQ0wNLy7dma9TUYPv2t74mDAbs3QsBAWBgABoacPs2mJnBq1ewbx8AgJsbSEkJXcbFxTB3rlDW7NoFBgYAAKdOwYQJsHcvSEuDjAysXQt6egAAsbGwbRtMnAgLFsCLFz1lja0tyMn1HD+TCUZGsHw5TJ4M27dDRga0tcGyZSApKex/925YtgxwOPD0hKVLod9sHxgojo6OaJjVGJ3C71P6TNbk5eWhZbqVlZX7qk+MH5PIxPw7JkEDPYovRGlDk6puwIEVFjfFPDUlAs8ucDiw3dLILrqm7Uuk48T4CkFlzYMHDwAgPDwcDQ3//vvvMTExDAZj1KhR8+fPR/fs7OycM2fO5MmTi4qKNmzYMGzYMHTGtLKycsSIEeLi4nV1dbt27frll1/Cw8Nzc3OTkpKCgoLQyRhLS8uff/5548aN3R+XBQIBm81+z/PJkSPQvQDO7t1gYAChobBo0ZvVT+fOwbspSQwMYO9ekJMDCgU8PIRGGTs7AABXV1i5UrgsvLus2blT6L07cwZkZKClBWg0aGiA7GyoqgIOR3jGjAwwMYE//ui5bEpVVZj2szvo401bGxCJcP48TJkCeXmwdSuoq0NTk7B/Mhnq6iAsDObNe5PJk0iEt53aGH0Cm83etm0bgiATJ0789MwFn0jfyBoej3f27FkEQUaMGNEjcIuB8V/JyK+68MiV0fWjZDziAd83hnxCzv7kQrtHkv5qS3yPi9vIyzu44lK7eJyPH4/xfYEu8FZVVUVfKisroxbLsLAwAFBSUkJrpHh7e6NpwZWUlABAR0cHQRB5eXkPDw809dmiRYs4HA46JXPjxo309HRFRcWpU6cmJSWVlpaiNQh37dr18OHDa9euoQad+vp6aWnpe/fu9RxTYCBMnSr0tEVGwvTpkJkJHR0gIQEaGgAA2dkwaxZ4ePQ8MDkZxo0DSUmgt0JpKUyZAhMnAhrkcnICCQmhgCgqghkzhKHbrVvh5k3gcMDPD2bNEpZpq6sDCQlhhoi//4awMAAAJhOWLBGai1EaG0Fa+j1Lu58+hY0bheIGh4MJE6CuDl68AHFx4UxwaiosXAixsdDWBgsWgImJsDcpKdDR+aw/I8ZHIBKJ6IewzxP09Y2sSUhIGDp0KIIg11GjAwZGLyiqbNinYlVV/07pg++aysaWh09Djq6zurXES2dp0A0xzwOSFkp3veKz3jE6YHzX4HC4UaNG6aEBF4Dq6mpJSckxY8bg8XgAaG9vP3fu3C+//DJ06ND//e9/ly5dQm0xra2tcnJygwcP/u233y5durR58+YNGzZ0dnZ2dHScPXv2t99+Gz169KhRo5SUlJhM5rNnz4YPHz569Ojffvtt8ODBQ4YMWb9+PQDQaLQRI0bs2bPnPcNSVQUxMZCTAwkJ0NcXrj8KDgYxMTh0CNavB0VF4Lyjwvl8WL++dc/+0vp2AIANG9649X19YdcuQAPiZWUgJSV0sejowD//gLY28HigpgaLFsGxY7BuHRw/Ds3NwOOBpiYsWgQnTsC+fXD+PHQPqaekwMGD70kMWFMD+/fDqlVw/DgsXw6mpgAA7e0gJwerVsGpU7B+Pdy5I/Q7e3jAypUgLw979sDZs1hAqv+4ePEimqIppZc1j9+mb2QN6qoZM2ZMUVFRn3SI8SNT10TffvllRn7Vx3f97sAl5Zw55yQvZvtQwv/R0kCFRS6HtlhqmYQWVdd//GCM7wIGg1FUVIRmakBpamrqbnoDgKysLF9f3xzUrt4NAoGA1nSrq6urrq4WOe0oFIq3t7do/9ra2pKSktLXFBcXo4EADodTUlLSc0mjCDIZHB17WmjLy8HB4f2Oe+HoG3NScjWtI/gAUFf3xlPMZL7JJszlQkWFUFUIBJCc/MZ0n5UFLi7COZtu7x8cHaFb9Toh1dWQl/f+YXA4EBkJTk7QI55AJIKrK/S4klVV4Or6Jj8WRv9QXl4+fvx4tCAB/93UQZ9LH8iakpIStFSCiopK73vDwOjoZO1TsfQISx/ogQwMlY0tepYRslutVRa6ay8LfrA04KSY3ZF91uZuBDobS0yM8e1R1dxxUdO1g/GB7HkYPzDa2tpojJXQdyKyD2SNmpoaOo/0cTs9xo9ENp3qRnvrk5rQnG9WFmpbGVXFfLP8soLRYF0RaVYWmtwifIri8fgn1R0fmvWZU48PAv8aUnHnB55B3yGwNqWmq/nj+/UnESn55y46n5F0uC/hp70i+La4t+wymwuKrhEpWEESjG+MLhZXXtUht7Tm47ti/GDU1taOGzcOtYv1VZ+9lTU1NTX//PMPgiBHjx7tkwFhfB+UdNYuiL66OeGBqMWdRliIV76dY38szWgdQa2S2YDutir+7on0Zzey7RbilfxqhAlprup6Hr5t01eDEQj4C/DKVhWflPqJymzcnPCw5JM1UP9R19GubxFxeJOV0mIPzeXBWsuDlBa5H15ndVvTL5c68MPDwPh0ZG/YBsVmf3w/jB8P1BQ/YcKEsrKyPumwt7IGrSfy66+/9lO6QIxvDg6f612TuIagOiHk2JFUYV0wBo+1Iv62cUkQAPAFgvVEda1CTwBQzXPanvgI3Ue70GstQbWLzwEA9eeBa+SMOBweHwQAwBPwO3lv4i91rNYObs9wTCuns57VxuW/lc6Oxec0sdsBYA1B1ZYqrGTJ5nPrWK1s/vuy7AAE1qbsT9Fj8XuaH1s5nQ3snouuWXxObVeLAHrmvKljtXa+M8LPA59ZeFnZ7cQSu/sSAdorgx8sDTy/2PnoXpsXTrF1WGJijG+Ek+pOL93iBnoUGF8jJBLpt99+E+XL7j29kjUcDmfz5s0Igqxfv57zrgce44ekmd1xhWIRUpemWei5J1kXbYxvyl0QrVTUIZyFNikN2Zb4qIndvoGobl4Whjbmt9MW4JWTW4oAwNgheoW0AbWq1aIq7EKm2fE0480JD1s4nUnNBftIjw+mGGxJ0DArD0UPrGQ2XiKb70/WO5CivzzudlQDBQD4AsGL0uBtiY9OpD+7m+sohldyqYoDAHca4Uiq4emMFxuJD2wro/jvZOG7m+v0tOSt0pt0LvNurpMMSedgiv6BFH00WMYV8J4WB+xM0jqYor8nWTetVbheidRSuDdZ92CK/uaEh09LPrXk8r/T2Nn5zAEvu8NGaZG71opgTakQVUm/ExJ2J087ekVkMDg/ykp4jG8XJT2vW099B3oUGF8jXC5XRkYGLa6M1nbtJb2SNampqT///DOCIE9FlQsxfngEIEDXX+gX+ewiaaONdpXRc6KuNLCECy9daPEL8cppbSVzo6/61gjXUNCYzTMjL7vTCADgHJS6bJM+IblUvdT5l8BDT4v9PaqJee1VErE3dAu96VxmZAN5IV7ZtSoeAI6kPtme+KiS0dDMblegWKyMu8MV8HyqEyeFnw2oTW5it5/PNP3Jd1dgXUo9u21KxHk3GqGTy3pRGiwRe0M0JNHgZdOeRje8lffCuSpuEV6lqKO6kU0/mGKgQLEAAPtK/AK8UnRDFp3LUM9zWRl3p57V1srplIy9cS3bpo7V6luTNCtKwafmwytE/iPx5JJLSm7Hl9mpSQZoSgVrrQy+Ke59cKnl1ZseKQVYYmKMfserOqG4840/ppbVal0RaVqGI02bEFEAACAASURBVDa/tfgIV5f+sizEuSq2lfMmnbehfeThm9ZdrL55+i3prA2pS393SvW9FHXWuNOwNU1fNS4uLqhxODQ0tPe99UrW3Lp1C0GQ4cOH91VIDON7QqfQS/q1rDEuDZoacb7+tYZwroqbGnE+ooE8MeyM6B9/FbNpQthpy4pwAAgn5i1Zqevom6JR6bqBeB/d4WVpyKxIhYIOWgWjoZbVKpdmtCZeFQCy6RXN7PZmTkcVs8msLPSfqMtN7PYzGSanM0zQA5vY7fOiFT2rE+pZbZPDzylRrAo6aHQus6qriSt4K2iV2049nmbczn3ricGhEj8y5IQjNbamqxkNRTF57M0JD85lmtZ0tVQyGgo6aGNw8p40Ynpr6dzoq20cYfGEvPaqgg4a9B3NTIa5O+HoThvFxe5aK0I0pYK1VoRcEXc/vN3awCKC2tTy8S4wMD4L64rIP4Nlg+tS0ZfVXc0r4m4fSX1yJ9dxcvg50eIA45JAMbzKowL3nYmah1IM2l4rG+eg5OWyBtX1fVMAyKYySjzmuuiL9u88KfY/n2nWJ+fF6CfodPr06dMRBLnUvUbH5/L5sqalpWXRokWYWRjjQ3SXNZ7VCQvwSiJZ41QVuyzuVn4HbUnMde8aYUaKKmbT3OirQbWpAJCSVSG1xkD/eeS1AtuLFOEtSTnLekr4uf3JetJJ2rtJOqvj7ylnWaMH3si2kyLc3U3S3URUnxetWNvVciT1qUa+u2gwawlqdlQ8AEQ0ZG4h3p8YdkYsWsm8PIwneCtZwovS4HMZb+diB+jkdhkU+y6LuzUp7Kx0knZWW0U9q00sRmV53O09JF3pJG0Zks7y2Fsxjdl2ldGr41U/8SHys0kuqFC67XVc0k5dIkBTKkRrVcj9pQGnJRyPHrR1CU3tYGPLaDH6knJG/dnMl3Ojrk4KPxtRL1zuejvHYWeSFuqEe1UeJhF7o43LqGe1ScTeQB9UmtjtC/BKluXh6P5RxIJZWzUyCqkc4AJAK6dT9NVr53bVs3rKHS6fV8dqbeH0TIXXwG7jC/juNOLK+Duix49mdjtqoXsXDp+nQLYIrk1991d1rNYeDzAA0Mimd59kQmHx2HWsHys76JcHzX4nLi7e2trbS/35siY0NHTw4MGDBg3y9vbu5SAwvku6y5qM1tKFeOWcdmHtD+1Cr/3Jep3crl1JWiIjS1pryaLX+xRW1G3Z9vzmDZ/TaSaXss3RHVTznNcT1etZbdVdzfWstpLO2pz2ynYucz1R7UKmWWprcU1XS2JzwQK8UiOLfiL92RWKxeuxCJbF3XaowrP53HYuUwCQ3lZqXOz/R4isbWV09zFfz7Z1psb2eCPoHbOV05nQnC+f/vyfyMuFHdVrCWq6Rd5N7PbqruZGNj2zrayRTfetTlqEV2bwhMIiuiErrD4T+gE6q8vcnXB0j62CmJvWyhDNVSHaUjhVSf+jK2yv3HCPzSx618WMgfF5+Ncmn8s0TWzOXxF3O+i1PtiWqPGsVFi4raarZU7UlQpGvXd14oq42yK9opRlJZoxJRdUzV+nZRIYdTzLSD792VL8NVdaPE/A1yvy2Z6ouZf0eDdJt6ijGgD4AoF3deL+ZL1zGS+3JDy8kGmG6owKZv2pjBdyaUYXMk1PpD9bT1Tv4nMaWPSrFMt9yY/3kHSPpRmVMup6DL6C0bAjUZPKbOzeGNlAOZiifzjVcHPCw/t5ruhzSEln7Yn0Z3tIutsSH93NdeIIeADA5nMNi/2lk7QPpuhLk7RTW7GU3/2Ft7c3giD/93//F/9ulsX/yOfLmnv37iEIMmfOnA+mpMT4sXlU4L4tUUP0cjdJ9yLZHAAqmA0L8Mo2FZEA8LI0RDzmenVXMwDIpz8/lCKsLVzXSt+//9WJA3a7Yh5fyDZFG9NbS6dHXgyoTQaADm7XriQt1TznFk7n5PBzzlWxANDJZR1ONfwr5Hgnj2VbEfV3xAVUJFlVRCB+Mr41SeWMhsnh52IbcwCghdO5CK9sUREuGmF1V/POJM3u7gEUrQLPbYmP0Blvz+qEKeHn2jiMx0U+y+Nu17JaACCuKWd+tGJKa3Ejmz4n+opVRSTam0TsDXTxVz+RUVylcs9bbqWdumSAlhROc1WI1gqcioTXgXVWGkYh2CJwjD4BlSl0LkMi9gYqa5g89rLYW6IHkkpmw7SIC2mtxbaVUWvjVUUHquU5byI+YPG5AFBArV+50VDhidMQ3P49JF1naiyV2fi0OGB+tBKxOb+e1XaJ/Go14R6dwyjtrJ0cfta8PIzF55BaiiaGnbGsiACAI6lPpEna5Yz6uKac2VFXVsXfA4AXpcEr4m7XslormA3SSdrqeS49Bh/ZQL5INu++7LGdy9xAvK+W59LF44TVZ4jjrxd31jB5rPVE9dMZJrSuprTWErEYlUcFHgDgSI2ZGXk5soHSwKIfTjXcQLz/7gQPRp9QUlIyadIkBEEM0PrtveAzZQ2LxVq2bBmCILKysr0cAcb3inFJoFz6m6Lzqa3FYjEqh1MMpOLvHkszQu8ObRzGwRSDNYR7B5L1lsRcp9DL0Z3ZfJ7cCVvpVS93hxmqlzijjQIQvCzDLcQrn0h/tpf0eA9JF30Iu5Ztsyzu1sn05+cyTc9lmq4hqNKYzV18jnKW9Ubi/aOpT/aQdMTxKgG1yVwBTzXPeXGMyol04z0k3asUSybvzTKiuKacY2lGorkWEZXMRhmS9hqCqlya0fK423aV0QDQyuk8nGq4hqB6Kv3FWoKqRoE7h88DAEdqzMr4O8fTjGWStK9QLLt4/btMicFl2/mTju62vSLurrUcp7kqRHNViNby0PNLXI4dsLPwJLYwP8l/gIHx79SxWkWypoFNnxZxUSRrqMzGsaGngutSzctCV8S9KfStlucsEXO9lcMAAGpj64H9lusvG06IOkOmlwFAB69rbrTinVxHWldzBaMhs61sRuQll6q4Dm5XbjuVyWNXMZtKOuvWEO6p5jrlt1ctiFbKaC1Fe9Ys8FgRfxsAXpQGj8LJe9II9azWFk5nA6tnCobrObZGby9sbOd2bU54uCtJK6OtrIXdgeZ68K0hjQs9FdOYXclsoHU1GZcEzotWrGe1yaUZ3ct1Qg/s4HaltZYw+/kb/cPC5/N3796NIMjmzZvfU0P+v/CZsiYrK2vIkCEIgli+WwIeAwMAAJrZHbVdb0VJ61ht7jRCZAO5e4iEJ+CH1Wd40IiN3aLjAoDzCs7bFz93jkruELyVAKa4s8adRoxtzBHNdQsAkloKXWnxxR01AFDT1SJytyS3FPnVkNo4nbVdbaLHLHJbuVNVbFJzQY8BVzEbCzuq3/te2HxuRAPZtSq+nPGmNpMABISmPHcaoeDtoyqYDW40Aqnly5Wyzyyl3bjve3ytvaqkv5ZUqOaqEB2pUPWlgceX2p+96BwY+05BYwyM/0h3WcMV8DYQ7z8rDUR/VclsnBt9NZdOtaqIWB3/pvq3aq7zziQtroAPAI0dnRfPuMzerT4vUqmEWQsApYy6qRHnNxLV95B0diVp7Sbproq/61dLAgAnauyWBA2p+LtyaUbzohUfF3pHN1AW46/Vvb6fuNIIUvF3u/jsFnbHw3z3+ZEK40NPH07WS3s7SMTh846kPsE39vz8Z7aV7SHpzIy8ND9aUbvQi8ljm5SFjAk9uS/5sXSSlnSS9o5EzYMpBjl06vK42+5V2CqqL8STJ08QBPnjjz8qKnq1tPMzZY2RkRGCIL/99htW2xKjn7h133fXwufmDtg95ZNgcNkeUenHjzgoSLhrr8BprcZprg7RkQq7scT3oJT1Xd2AzNIfsXQoRl/RXdYAwCbig0cFQks+GjaqYNSHN2QuwivTucIJwjMZL5WzrdGfO1gsFWWvxes053moFLJoAFDd1Twj8pJtZVQjm17d1Vzb1ZLeVtrAojtRY6dFXPSpTsxtr2LwWIdSDe/nu2S2lS2IVspvF64rtKfipeLv0rmMFk4nANSx2mKbcnYkPJwXrdh9eVRaa8nxNGPO24k32Xwu6pbLb69yrYqfGn7+Yb6bY1XsvKirJZ211V3NtV2t5Yz6zLayNg5jI/G+QbEfemAXj+1GI7w7IYTRVyQkJKDTJUFBvYrdf6as2bdvH5qFj8fjfXxvDIz/js6zsD3zXl6/jxnS/wMF1XXqhkHHpOxUJQO0V4U+Wh2ivTpMa2WowhJ3WRlbI+toWjO2oAPjc6hltSzEK/vXJKMvn5cGi8dcozIbBSC4SrHcmqDB5LHbucwlMdc1CtwBgNxWPjPysmidI0/AV9MIXLVEf7b59QJuFQDwBYLzmabL4m6hQsSDRlwTf6+ks/ZBvutCvDJ6VExj9h+BB9TzXfkCwfZEzfNkUwBo5XQuib0uGXuTw+eq57lIJ2mjaRqelQaJx1zrLmtMy3DnM017vJGarhbxmOtOr1cG7EvWu0Q2p3U1/xN5WbPAA208n2l6IdOMLxA8KQ6QiL1B62oCgGclQUtirld3YWkU+ovGxsYRI0YgCPL8+fPe9PM5sqa5uXnhwoUIgqipqfXm3BgY/8ILu5j980xPnXNgYgms/wtsAdc9PO2kvOMFCRetFaFaq0MfrcbprA57tDxEXtzh9Gknt/A0Jg+7pBj/jUY2fWuiRuTrBd5MHvtMhsn2xEc7k7SWx91ObBGGdIPrUsXwKgeT9dcT1ZWzrDndipk8NgnfMOuppP6DMr7QzF7d1bw98dFG4v1jqU8lYq6blAYDQG47dXncnd0knTMZJsrZ1keSH9/MsQeAjLbSFXG3D6Ton0p/voGovj9ZjyfgF3TQ1hPVtyc+kk19uo6o5l+bLDodXyC4TH6F5hbvDh8E5uVhqEVPNvXp/mS9MkY9AHhXJy7EK8umPpVO0lpPVMtsKwOANi7jWJrReoLakdQnawiqQbUp/XR5MQCAzWYvWbIEQRBFRcXe9PM5soZIJA4bNgxBEF9fLBk2Rn/hHJiyd5GZ/H67IlrDQI/l26O8ofmRMe7YRru7kv46q8K0VuO0VuMer4q4Kxkot9pe+Z43gVI60GPE+MZ4t5JaXFOOO43QI9FLJaPBiRqLVkHpzjN7/OqpBnce+/LhTbIoAQjwjVkeNAKN2SRqbOF0+lQnhtZldPE5LD636vXybDqX6VuTlNZawuZzG18XaGPxuWH1GZ40Yk1Xc/fTcfg8YnPehxYulXbWetCI4fWZ3UNUDWy6V3VCj0YAiGnM9qARsdQ1X4Djx48jCLJ79+7edPI5ssbc3BxBkJEjR2ZlYVZEjP4iKD5rzxKz42utI7KxygCfAx8EgYSsU/JOFyRdtVbgtFeHaa4O1V4dpisVflXc6/BmGw3DkIqm5o93hIHRF9j5J22eY6yi7EXv6psqsBjfH2pqagiCSEpKtrd/fh3fz5E158+fRxBkxYoVDAa2dhTjw7BY4OMDZmZgaQkvX8KH5vbi4+HBA7h4EZSVwcoK6MKHsLjsEpllZnLLnGzVn4O5KdjZ/T97Zx0X15n2/dO02263b9ef7j5bSbftPt22u5Uk6DA+NGnj0hhOQpQIEeJEkBGYGSTEg7s7jLsACZoECElwd/e53j+GEg82xDjfz/0HHM657/sMMPM7l0L1kxoRSKVw/jzcfdj2cOMGXL0K+fm6vaFXkfKmFpezGRuIfo7zE9wwHGeT9DPYdDcs54xh2ub5YeYbAv3iVZ1oYWKUmSdelL9a//y6ZZdL65vGPxtlVhIYGIggyCeffFJSMvVM0knLmr6+vvnz5yMIYm1tPeVVUWYFcjn84x9gaAg4HCxYAPb2TziHwYCPPoKlS4HJhL174Z//hJ9+gsZGAMgtubvagGVlEONmYgU4Y/j2v0AiweOJf2vWAIIAjfbQQXNzQBBwdZ2hO3vlSFfftNsatnl+mLNBuiuWcwab7oLNoJrwjuunmBsGbt4Rxs0sGkELE6PMJLysYnPC1SXGZ1VFaA9BlCfD5XIRBPnzn/+ck5Mz5UkmLWvq6+v/+Mc/ol27UcbHywtIpGedwOfDn/4EUVH3j1RUwIcfwoEDAFBSVGqm72z3bdi+I7E9Q0PQ0Q4//AC+j+Y1gJUVfPopkMnQ/auDv6kJiER4//2HtE5rKzTcLzkD/f2gtYS3tMCY0fHBr1876jo6qOe4GygBjgsS3DAcFyzHGZvhiuW4Ybj758evJweccE+5UfFohWUUFF1x/XalxWL/Vd+fC0u99qL3gvKSopU17733nlqtnvIkk5Y1CoVizpw5CIIkJSVNeVWUWcHp07B0KWRmApcL7U/q3Lt4MZiZPXpQrQa1GgAqbxbZ6B/dPS/GfGPgaMWVb78FT89Hz7e0hPXrwcQEMn9NgggJgZ9/Bj09OHMGAKCnBw4cgIULYflyWLcOtLbNoCBYuxYcHWHhQjA1hZgY8PCAhQsBj4egIB3d/8sIL7t405ZQW/0QZ8MMNyzXGZvhjM1wxXLdjHk75keuX+HvFShq6X201R8KyvQp7xu02Bhs9vUlt3P8F70XlJcUHo+HIMibb74pEommPMmkZY2/vz+CIO+++y5aiA/lWQwNwdKl8MEHsHIlYLHw7bfA4Tx0Qmcn/N//PcH68ittBYU79XY56Cctp1zKZXnDmpXw889Q81gV4LVrwdkZduwABwcAgOFhcHQEJhMwGHB2BgA4dAgIBCgogMZG2LIFFi6E4WFgsQBBwNERCgvB3h5+/3twcoLCQti9GzAYeK1DGhu7ujz9RetN/Q/Mj6diuC5YjjOW44Ll0HC8k/ppNoYhm7eGJsoKhmFk/LlQZhVyOVy4ABcvwoULcOUKVFQ84ZyODggNhX37YNs2cHEBuXz0+EB/a2Ki+RKm3XeR2yy9NOd9Qf6kSpu1tRAUBElJMPBAj4K+PoiNhZgY6EX7Mb3myOXyt956a86cORLJo5n5E2fSsubEiRMIgnz66afd3egjHcrT6e8HNze4fBm6uqC1FXbtgq++gpYH8m6qq+HDD2Gs+UZpKSxZAkuXwpIlcPIkAPQX5u+bb7fLKHkdzj8JswTmfQd6eqBQPLrQmjXg7g6RkUAmg0YDpaVAJsP162BkBG5uMDAA33wDbm5QWQllZSCVwl/+Arm54OUFX345+i6ZmAjffDPqosrIgM8+mw2xxuLc0u27IqwXhJzWT6dieS44jguO44rj0rD8w3rJG3GB+4/HZd5Cc9BQHuDnn2HuXCAQAIMBU1NQqR494d49WLQIvvkG9u4FGg1++QXmzgU/PwCArs5hYwOLr2x2GnM24k83zV8A//hfiIh4dAaxGN54A377W7jzQBuEoiJAEPjgA6h/tEE3ymuGUql85513EATh8XhTnmTSsmbDhg0IgpiamqL1hVEmwe3b8MUXIBA8dHDePPDwGP26vh5cXOD0aTA1HY3Iyc85Pm/jFuOETfpB3sFS0GjAfifMmwePJP6tWQOnTkFLC8ybBwoFhIfD4cPQ2Qnz5wONBg0N8PHHoKcHy5fD4sWwbBlQKFBSAkwmLF06OkN8PBgaQmsrAEBiInzyCUzDrfsK0dLTw/ITbPw5YP+CeJoJzxXHdcFxXHBcKo5PNebt0YtdQ7nqfolf3oQmgaMA1NTA998Dl/vUEwYGwNwc8PiHxAedDnPnQmUlDA0B0cR+webthokbl/hnVTaB82kwMHg0mk0kgq+/hi+/fMiO6+kJ77wD33wDdQ80pa+rG8uaBIDR0LqBAW3CAQBAf//9r1FeEZRK5W9/+9tpRrlMWtb89NNPCIJYWlpOeUmUWUFTE7i63n9bKSqCL74A2cNm5717QU8PuroeOnj+PBCJAAC52a4/rLA0id/zfYSDSwIAQHg4vP8+VD3c22jNGtBWu7azAycnsLaGpCTQaOCHH4BKhbY2+PxzCA6G5maorYX6erh2DYaGgEq9L2vi4kBfH5qbAQASE2HuXMiaRbVEs4rLHY7G2hiFnDbIoOL4LjiuK47riuPScHwXDG+zfoSVRUhISlZX/+vsmEMZH5EI5s8HoRDS0uCJFctKSuCDD0Aqfehgfz8kJUFrK/T1AQl33HT3NpMEM4xfdPYdOOcDOBw8YvXn8YBEgi1bwNR09IhGA1ZWQCbD11+PyhqpFJYvhzVrwNQU2OzR03bsADs72LQJ8HjYsQM4HLCxAQIBzMygrEy3rwTKzKFQKN5++20EQVJTU6c8yeRkzdDQEA6HQxBk9+7dU14SZVbQ0gL/939gZwfDwzA8DNbWQCQ++mTW0ABffQVLl4JEAq2tUFsLMTHw3//CqlUAANfV7G9+NMfGHJ6XaLnpah+HA//5BtaufTTwZdkyOHgQACAjA/73f2HRImhuho4O+PprrTMLLC1h5cpRY0xgIPznP9DRAXQ6LFw4OkN0NHz3HTQ1AQDExcHf/z5LrDVjdA72nQuXWawM2q8XT8Pw3XA8rbJxw/PpOOEJgzQzw0D7/VHS/NIXvVOUF8fFi/Dee7BmDSxZAh98ACdPwiMGe19f+PLL0f+jx+nqBCKOpb/eDhdrYRTD/MUBDOc/wfbD44GxMcTGwrx5cPMmAIBKBWvWAJUKn34KbW3Q2go//ABnzkBXF0il8O23o06u+fPho4+AxwOpFP7xD/j2W+ByQamEjz+G8+d1/mKgzBDp6ena4F3F4/EGE2ZysqalpeX7779HEMTFxWXKS6LMFvh8MDCAJUtg5UrAYEbfpB7h3j1YtQr++1/Q1wc9PfjuO9iyBe7dAwC4mRes95OZSeAxY44Zll5sgIX1a59Qkc/ObjSRu7ER9PTg0CEAgLY2MDUFFmt0iUWLAIsFMzP4/nvw9wcA8Pa+n4SVng4//wxtbQAAXC7o6UFens5fjJef63cr9xyJscKEnDZIp+MFrniedlDxfHesaL9+4oYfA5y900vrUMP+rEQoBAcHKC+HwUGIjoa//hWiox864cgR0NO77xjy9QUyGZYuhWXLQCSC4WEg4gK+plgSIrdhko8Y2Q3/c+59H/QYPB7Mmwe1tUAgAIMBAECjwcmTcOUKzJ0L7e3g5weffw4FBXDvHlRXg5UVGBkBABgZwdinkqnp6CON9utt22bkBUGZASIjIxEE+fvf/15YWDjlSSYna8rLy//1r38hCHLx4sUpL4kyi+jqgvh4SEp61NT8CDduQFQUJCc/VFpmZDA1TmBO9HNakLwRd5ErzH7ytS0t96NtWlvvL9TQcN+9NTAAAgHExNx3YLW33/fTP+iDHxiAurpHH0NnDb3Dg8GpmRarA/fqxdOwAiqe74bnueF5bng+Ay90M+Zv14/euDrgSqyiFU0Cn+UsWgSPtDpOSIC5c+//i6WlwbFj4OoKf/sbnD0LAEAmxNgdXm8aefD72K0HEhsjIuEvf37UMc3jwfffQ0sLnDsHGzdCayusWAHFxeDnB3PnQlsbHDsGH38Mq1bBkiWwbBng8aB1HZBIMPap9NNP9ytBEAhgbj5jrwKKjvH29kYQ5Isvvih/vPLqhJmcrCkoKPjb3/6GIEj0IzodBWUGkN4oN1vkf2ZByob5fldSMse/AEUXFJTVHDwVb4kJOamfzsAL3PD8seGOFzkb86yNQrftikhX3RyCWar/ZiMpKfBguAORCMePP3RCbS189NETKksRCKMHyUTRUZeVC0POzEv5ZV1oUV4h/OPvEBr60MlaWdPcDNXVoKcHvr5gZgYjI3DxInzyCbS3A5UKJiZQVwe1tdDYCHfvjuYtEghw7tzoJIsW3bcDEQhgZaWjlwBlxnFyckIQZN68ea3asIEpMTlZo1Qq3333XQRBuM+Ih0dB0RE3ymo3rvA7rZdi812Qq2/Gi97OLKJ/ZCgoOdNyffBu/TiaiZCmFTcEPpUgoBOE7jjREYPUDcRAx9MJ14qfVLwE5fXj5En45BMoLQUAiIuDzz6DxwumsVjwP/8DZ89CcTF0dEBeHhw4AP/v/426q7DGuZu2LV7oT9PnrlwYJNq4Gb78/NF4Xg4Hvvpq1NdsYQEffDAqiby84IMPoK1tNKcyPBwAoLsbFi+GvXsBADAY8PEZnYREAjp99GtjY9i4UecvBsoMsX37dgRBcDjc0NDQ+Gc/hcnJGm04z29+8xv5WJElFJQZo7qlbcN6f6cFybvnR+07EtszNPiidzS7uF3XeMQ1ydwk+KRhhjtBRCXwqQSBdtAJQnec2H5+nNnyIJ8QScM02u2ivBq0tYG5OWAwsG4dfPfdaIza41y6BN9+C99+C4aGMG8eGBlBaCj09MDAAKxZVfL5v1YTPJ2NuRaY4KuGqyD6sbo1UilQKKNVN4OD4bPP4Pp1AAA/P5g3bzRd8fJl+O9/wdwcVq6EZctGhdHKlRAQMDrJ+vX3LTcrV8KePbp8HVBmjJGRESKRiCDIypUrpzPP5GRNUlISgiC//e1vVY8XYkJB0TVdAwPrLf2OzUs6ppdkYRZYrY3qRXmODMFwFC/Han2IvV4MHStkEIRjyoZGEDIJEldj/mbDCNtNoVGc6wMa1Cf1uqNUQmjoqM3maXR2Ao8H4eGQmwuaX/unajTQ2lKVfc16w9WjCxJ3LAh3YqY94drBQWhoGL2qr+9+AFxnJ9TU3J+trAyio0EiuR8GV1NzP8auvh7G3ivq62Ea7gyU50l9ff1f//pXBEFOnDgxnXkmJ2uSk5O1skapVE5nVRSUiTACYGMf7Dg/3s0gY4XppYKKx9KgUJ4LJbUNx+nJFoSQEwbp7gQxlSCgEoQ0gpBGENIJQiZBcsKQY4YJPuAUr7qFNmdGeSrNQ0Pb7SMPzI85NC/OelcI2p4D5UG4XO4bb7yBIEh6evp05pmcrNGu+vbbb6OyBuU5oAHYeyzGQS+GasRZZ3I1SfKkImAoz4t4Ub6Vecgug1i6iZBBEGllDY0opBGF7kSJO15ywCDJfHEQ7Rz3DpoEjvIkugcH9h2J3T0/8sSCpA3r/KqbUfsryn3c3NwQBPnDH/5Q9UjN1UkyOVkjq9VMWwAAIABJREFUkUjmzJnzm9/8BpU1KM+HU8zUHfoRVGPOJqNQ70Dxi97ObKeiudXJPdUMF3zCIIOJl/wqa0R0oohOFHkQJQysaKt+jNkvQVeilZ0DaGFilIfQgOYEI3nLD6Fn9FPNfgqQ5t0Z/xqUWcO6desQBMFisQMPNjqdPJOTNWKxeM6cOW+++SYaMozyfPDyF242CKEZc/YuiNl7MuZFbwcFACBBnL9la4Q9JpZuInInSsZkDZ0oYhAlLKLstBHPxiTcfl+08HrJi94syssF9SLH+vsgqhHH3CggKBWt2oAySktLy3fffYcgiIODwzSnmrSseeutt6bZXRPl9WBoYLitvru9oUc7Opp6R4Y14182SQLiVRZGgTRj7uH5iZZbgnoGp6XiUXRFXWcH7QLX4seQE0YcFkHKGJU1Yu1wJ0rYBNlh/VQzcvAxt+SSWrTxMsoonqFCs+/9GcZc2/nBDH/0cwRlFLFYrO0GFa7N3p8Gk5M1IpHozTffROvWoNTcbj27OcN1eRxtdQJtdQJ1RTz9l8SmSt1n+caL89YZ+9Ew3OMGKeZrA0uqGsa/BuV5wb1WtGV7xDbDaLqJyIMoGZM1DKKYQRSziDJ3rHS3YYLFuuALEbLmHrQwMQoEpmSaGQZQjTm75kcddIrvH556eRKU1wlHR0cEQebOnVs27dakk5M1arX6/fffRxAkLe1JuXkos4OhgeFLu/gXdvDu5jSU5TWW5TWW5TXcy20Y6NX9O5Qor2Q55iIDwz9jlGFmGsjJLNL5EijToaatneknsFwSctQgjUWQMX7VNAyihEGSMEgSFknuhhHZGUdt3hKeKM7v16AfYy8rGuho7Bmzv7Y39PTPwH90orTQnBjgYph+RC9xk01oTVu7zpdAeeXo7u7W9mWysLCY/myTkzV379795z//iSBIYGDg9NdGeUXpaR84v43bUPY83o+ySytWEC7RjLlUDM9CP/BqEhqr/jIiyr29Y3fUNkwM3UTMJEoZRLFW02gHkyRjExVOhlxLUtgh58ScO9NKc0CZCdobe8Kc5C5LY0ftryvjXZbGXku9q/OFJHml5j8FnjZMczHMWLPoSmFljc6XQHnlSElJ0aZ2JycnT3+2ycma1tbWefPmoR28Zzkjw5ooF6Uq7vZzWOtWdd3GFQFnjNJpJny7eeGu59AWCi8pTd1dLH+hxc/Bhw3S2ASFO0mq1TTuJIk7SepOkjJJMhZevt8wxWJZCPOqoLoFTe59iYhjZNJWJxSrasry79tfO5p6db7QjbJai9WBJwxS6BjeGsyVdPVNnS+B8sphZ2eHIMi//vWvTl3UK5+crNFoNCQSCUEQe3v76a+N8ooyPDiS5pt72CQ0hqZWRBfLo4rlkUWyiKLu9n6dr1Xe1GprFXLcMIWO4zvoxzkciu0e1P0qKLpCml+6+2DMZqMomomYRZKNaZqx4UlSMkyk24xiLTaGRPFy+obRhhgvBVf2CiQhz0NhVDW3WZgFndBPoZlwbY1CzoVKn8OiKC8ztbW1X3zxBYIgjo6OOplwcrIGANasWYMgyPLly0dG0BKRs5T+7sF4jyxvm7Szm9LPbcnwtcvwsU0/t5XTUtul87Uau7p22Ece0k+i4vinjNItzIKq0FLoLzdtfb2+4VKrFaFHDNI8CUoPkuwBWSPzIMmYZJkXSeliIrTGRzgcjZMXoMVLXjyiwBupPjnPYaHO/j5z28BjC5LdTLh79GMcnROew6IoLzMXLlxAEOR3v/udrpoyTVrW7Nq1C0GQBQsW9PejD80oM07P4MC+I7EOenE0HJ9uLFhFuZxzF43MeAVQ3yrbtT96k0kkzUTMJsnHNI0HeXSwyQo2QXnUiLPBNNjVh1NSi+a4vUhyOWUnyBEBjmJ51Kj9VRp+q7Z0Rh4hbHeHHF6Q5IrlHtNLttoa1D+NXs0orzodHR1ff/01giBr167V1ZyTljV0Oh1BkH/84x9dXbp/NEd5hcjlll3ZI7iyR3B+OzeOkdnXPSPeBA1ojlKT7BfE0PECOla4EReYIMqfiYVQdE5bX8/lWIXFihBHw1RPgpJJko9pGg+y3IMsZ5LlnmQlm6DYZZRotTH0SqyytbfnRe96liLwL/S1y/C2SfO1y/C1yzi7Od3LKi1fUDETa+07GbtPP46K5Z0yTDdbG1hag7bamL14eHggCKLbjkyTljXBwcEIgrz77rslJWj90NlLPr/cdXlcsvc1vl9B+rlctmVq8FHpQN+MPHU5n0vbMi/CHS+kY4VbMZFeAaKZWAVlhrheWrn/WLwtJpJuIvEkKx6RNUyynEVReJHVNKxkk0n0tp1RqbIbL3rLKDOLs2e6vWE0Fct3MeZYLgziZt560TtCeTFUVVV9/PHHCIJs2LBBh9NOWtbk5ORoK/JFRkbqcB8orxD93YP+B0TX0+/3au5q7fPdwim9VjcTyzH8edbzQhl4EQ0n2G+QeMA5biZWQZk5ugb7r8QqrdaE7jNI8SQqWGTFmKZhkuVMioJJUbAoSh9yppMx34wQeoKReqOi9kXvetZRltd4Za/g8m7+JXte8FFpc5Xuq2tq8Q2W2mEi6Fg+Dcu3Mgi+GI+24pmluLi4aKNqFAqFDqedtKzp7OycO3cugiCHDx/W4T5QXiF62vqv7hW21DzkhQw9LlPFzkjK99V4pY1JGB0npBIEJwzSbXeG9gyhLRRePXLvVB08mWBLiHTDSLxIykdkDZOiYFEUXhS1J1G93zjNcnWYd6C4Fq3V9ryouNHkuiwu4rSCf7WAdzn/0m6++7rE1roZKQwdlJhpbRLKwAoYeOHWBZEuaNWGWUl1dfWHH36o26gaLZOWNcPDwytXrkQQZOnSpbrdCsqrwsiwxv+AKImdPTw0mg1XcaOJtjqh8mbzTCyXIM63poRSsQIaQXjGmGu1NqSockbMQigzTb9mKCwj28464oBhqhdBxSYrHtQ0LIqCRVGyKEpvSqY7XrHFMHbL1shYYU7/CJoEPuOEnpDF0u43ntRoNFf2CPh+hTOxVrK0YCMu0B0rouOF+/USHA7Fdk+vYzPKK4dGo9m0aZPOo2q0TFrWAICzszOCIN98801dHfrpMkspy290XRbnu4UTS88MPCxxXhybyMqeiVaXACC8VmL9cwgVI6ARhFSswOrHkHQ16ox/hblVVXfEJcmWHOFqIvYiq1mPyRoWRelpqjpLyXLGim3IkQdPJqhu6L7cLcqDBB2R5HLLHzzCuZif5jsjKd+KW/dW4a944MRUvOCUUYa1eUh5U8tMLITy0hITE6ONZpmJGnhTkTXR0dFakSWXoz7R2Ut3W78w8EaMmzqRlV2a/SyBe6+6macuGtQMT22h3NIqy5UhbhgBnSBk4iVWBqGXE3TpiEV5/vSPDMaJcjdbRzhgkr2IKs9f1czoMFWyTZVsU5WXqfosOcvRMMNiaZj7ZT5asmjmSD2bE3JMNpbP2FzV6WmVqpwZt3J+WfVy0mV3nJhKELhjRb+Y+mWXlo9/GcrrQl1d3VdffYUgyL///e+aGt13z5iKrMnNzf3zn/+MIEhAQIDON4TyMtPbOVBR2NTfM1h3t63qVnNNSWvVreaqopbqktaKgqanZUKJc25/i6GeOJOqLiqbwqIVDS0WG4JdMHw6UcgkSrbpRbucRZ3xrwP3GppOs9NtyBFuJmJvcib7YU0zNs6aZjEJyp3GCTZWYSGpWWhk1UzQ3thzcQePaZYcQ1WHn1I4L4m9slc4E3XDAeB2XcPGVYFuJnwaQcDEi82wwXHC3JlYCOXlxN7eHkGQt956Ky5uRvI/piJr2tvbtZ2hdu7cqfMNobzM3M6s9d2S0VjeEUvPdF0W574uyX19kvv6JPqaRE/L1EeCiMcorq03XxG0e368xdJgZ++Mm5WTS3Jp7+01swx0NhIwiCIPosTRKGX/4bjuAbQa5OvAEIwkSPL37o47upDDJCvYj2katqmKbapkU5Q+5Ew3E+kmXNT23ZGinBINzIjHczYzNDCcmVgaS8uMo2fmcsqecWZ7V6/o2u223il2jKppb7fbFH7SKINOELnjxTsw0awrwqlNhfLKkZqa+vbbbyMIYm1tPUNLTEXWAICVlRWCIF999VVPD1o+axYx2D/cWtutGdH0dg00VXY2VY2O5qrOtvqep8XWNHV12e+KPmnEZWAk9oZx5quC3C/z79Y3TXDRYRix3hFyyojLIIrdiRIXE4G1RUgl6o94jQjmZ5KW+LgSxV6m6sdkjZJl+mvADUXtTVIfM+Ja/BR6mpVeVIXG9k2Xvq7ByhtNvZ0DjeUdFYVNNSWtVTebq2411xS3lhc0tjc8+e29rrljkbmv3Y7wVOWNIZi0c7m1t2eXQ8xhw1QGQUwniA8bpuw+GjPtW0F5BSgtLf38888RBPnss88qKmak2CNMWdaEhIQgCDJnzhyxWKzbDaG8/IyMaDIu5HU+3N0343xu/b0np+OOaDTHaSl79BJYRBmLIKNhRFv1oy03BJ8Lk9a1d4y7nAY0DsdjjxinehAlDKKYhZOt+zkgt6xSNzeD8uIYgRH1rbLDzom2SyOOEjhPstOoxjQNi6LUhhV7UlRsgnKPUZLFmpDzYbKW3hlJQp4l1N5uvWjPq7zZzL1S4LY8zn3tqP2V8UsidVX802w2IxqNnX3Yjv/GWpBCHI7HSvJvD8MkWgT2Dw8dOpW43yBJ+x99xohnYRvUhdpfX3fa2tq0rbLnzJkzo3Xvpihrampq/vKXvyAIcuzYMd1uCOVlprdzIP1CbvBRyUnTqKsOwhiqOtJZGe2qCjosOfljVOXNpxpg2MFCO/0oFlHOIErcSVI2Ue5iLNxkFGltGeoXr2obr2T+CXrKfkwykyBjECVsvNyCEJokLtD1zaE8VyR5pUddkzb8GOyISWPilT6mmU90Pz0ua7RpU95kFRUj2WISs3VnZJrqBuqTmhrDQyPtDT0jw5q+7sHm6q4x+2tTVWdLbXd/z1Prhp/2TDuASWaayBwNUjaYBh5zS55U5NwZz/Sd+rFMopRBFLlhhJarQwrv6T50FOXlYXBwcOPGjQiCIAhy6tSpGV1rirJGo9H88ssvCIIQCIS+vj7d7gnlpWVocEQdXxpwUOxkGuXnIIx2VUc5q6KclWFOcmVsyVgZm8eJFuTYEsM98FJ3kkQ7PEhST6L8jDHfyjjMZlNoFDenc+Cpf0jsq0J7kzg2Ue5OkrCIsp3YOC9/1Ez4SjJmoTH/KdTBIMWLpPaiqNmUJ4fUPFHTjA6ynEVWeJNUTkZ8G3LEEafknKKqEQ0qbqaILLKoWP1Q0Jsw6EZ26lObqwclZm7CRTLxMg+ilImT7dKL37g46BQz7Wb5hCLnaFd4W+ZHs4gyOlHMwEmsKWHJMvRB5XXm6NGjWk1jY2MzPDzFrNgJMkVZAwBXrlxBEOT999+/fv26DjeE8vKjGdFcS7s70DuJDlDZxeXWK8LoWIk7SfrgYJJkbKLCyZBniQ/bdTCak1U08iRr9tUYlR02ypOocCdJmUTZYaM0h1NoC4VXD8G1kqNuyRt+DD6ISWXiFT6UB7Ofxnc/MR+WNUyynE1SeuFVx4y4CykXjvskDw1PwhWCokUdfzv8lOLMzzEss5RYujrSRRnlooxyUR7GhIoCn9qfS1ZQ+gvB35MgZxDFDKKERZLRTMS7DOPXLwnwDBDdbRgncs43SmKrH8EmyhhEMYsgszOKPBct0fWdobwsXL16dc6cOQiCUCiUtra2mV5u6rKmsLBQ64fy9fXV4YZQXhUKhJXp53MF/oUZ5/MEATfiGJnPaCLT3NllbhHkhhF5PCxrxsSNJ0FxxDDdghJ64FS84sbdR3wK0dwcS2yYF1HpTpJ6kGRnjAS220K7+lFn/KvBgGZYmndnv1O82cIQB4NkL5LKi6JiP1al5ul2mieYajxJSk+c8jAmY/PyyENuiZK80p4+NPF7KtySV0eeVp78MZq5ITmGqo5yUUW5qCJOKfhXC/q6nvqSltY3rl8ZyMBJ3UlSBknCIEncSVIWSU7DibcaRluZh16IkjV2PfUNIZx7zZYQwSRIGSQJiyTfrZ9wkpWKehJfS7Kzs//4xz8iCPL11183Nj6Pbu1TlzVDQ0NkMhlBkMWLF+twQygvPxqNJtnzmhMlkm2Zevqn6Mu7+YdNwnxs07tan+GO1GzdH3ESw2OS5b/2cH50sMkKJl7uaJRm9lOwk0fKtdv34+QFOcVrcQE+JLUHWcYky6hYse36MLSFwiuB4FqJ46nEjaYhh40zmASFD0X9YDVh1iTdTyyKwpOkZOEUx024tksjjlCTuNm3ppCMg/IIhZLK2tJJPEa39HTb744+YcxhkmQPPqJ4kGRsosIFI7TDRG22Cw/LyO56knM5XXXD5sdwd7xUK4aOGWfsdohpRfNqX0fS09O17qd//etfQuHzyOSfuqwBADqdjiDIe++9h/qhZhV9XQMXtvOKVbVtDT3+B0S9XQNleQ2x9MxnF+9y8+E6YJPYJKUHWf6MwSYr2QTlXoNE86UhLl4ZxdX1AJBbVrWK4O9NVI+eRpDbLorIUN98XneMMmkGYViaf2e/U7y5aegBg1QvksqTonqkQwLL9Inup6dqGi+Kio1XHjJKs1kedtA5QZhX0juEtovSGRU3mtLP5/H9CzMu5PGuFiQwswpET03BHdFonNxT9xgkskmKx+2vHiSZF1FxyohvjQ3fah+RIM7vGXrozUF1457N8jA6VuJBknqQZAycxHxN8O26hpm/S5TnzcDAAJ1O19aqee+992g02sjIzDqLpyVrysvL//SnPyEI4uDgoKsNobz89LT1++8TtdV1A0DQYYk2rzvSWXlD8qyk65DkrM3YKB+S+n7r5qcPb7LKHSvbbZSwYXng1RhVeu4Ny9WhTLycRZYzyXIvomozJupKEtpC4SVFeK3E8XTiRkrwIaN0Jl7hRVE/3s/yKe4nFftJ7idPsoqFVx42ybBaEnaMkSzOv/3EGCyUKXM97d5xYoS3TbqTaeSFHTznJbHPzm0EAM8goe2CSC+y0oMke+JgkxVsgtLJiGeBC9njGJOhuv8cUlRZZ70ulGYiYZJkHiSZD1G1hugvv/nUCGWUV52UlJTPPvtMa7bZuHHjTPRMGGNasgYA7OzstKV1qqqqdLIhlJefoYHhS7v5oqAbw4MjAQdF8qji4cGRy7sF2cnPeleSFpSuJQaeJWUyH4n9fMpgURReZDUDL9+JS1i9/uqaJf4eZDmLomRSFN4Utb1hgts5znO7ZZSJ0Ds8yL9WvPdYrMWPofsNUryISk+y8ok9up+maViPmWq8KWo2QeVonG6zPPwoLUl+884QKmhmgMBD4jTfnMH+4YCD4trbre0NPZFnFDW3n1X0MlaYa0OKYBEVz7a/ssgKL6LqkEG6OTn0kEui6tY9DWjae3utLUNdTcRMssKDLPciqWxwkeGp157b/aI8f0pKSn766Setsvnhhx903rh7jOnKGqFQ+M477yAIcvnyZZ1sCOWV4KasynlJ7A1J5U1plfOSWC/rNOrK+Lb6Z7nGi2vrLFaHeBDk7InJGu1gU5ReZLUrTuxCFmk/57TOiKMYzoEj8U9026M8f0Y0Gl5m8f7jcRvJIUeMMph4hRdZxSTLH9Gpj8map7qf2BSVF1nFwisdTdIsl4QepSeL82+jIaUzR5iT7Ka0CgDCTipuyqoAQOuKesYl129X2q6OYGClrAnYX73IKhZe4WiUZr44xMU743p5peX2YFeMiEVWMMlyL5LKwSSZepb7nO4W5QXR0dHh4OCgVTYffvhhRsaMdPebrqwZGBggEokIghgbGw8Oon7uWURrXXdrfQ8AZCffiaVnVtwYJ6WzqbvLflfMKROBJ0X1sJdh/OFJUT14FZuiouPl1uZhaAsFndNW33M7c3JNu5rbu7efDF+BuXpMn+tFVLHJytEPs6cJmvGyn7wpmWy86oBxqvWKMCdmqrL43qSK2KJMgViaOspFNdg/LPAvjKGqh4dGYmmZab7P6kDZ0tVtbRvqihFrbagTGdoK0Q7GyVbrQykrztJIUu21bIrypAl/56EoVLnOBi5cuPC73/0OQZDf//734eHhOp9/urIGfi1gM2fOnOcT5IzyMtDXNaiIKS7NrgOA0mt1kc7KtvpxatiPgOYYLXm/YaqPaeZkZc3jw4eUtXZh0PU7aAsFXTI8OBLgKHZdHicKulld3DLBq/oHh4KTMzdZhe/FJnlg5V7jypqnuJ/YpiovspqFVzli0q2Wh55kpypv3Z3R+0UZo6akxW1FvDS8qOFeO2tjirdtutvyOK395hlsPxR1AsNjT1jWMCkKFkXpTVHTcLLTJAHT9P5fCA0rtdkc1tT15Ha5KK8ZqampH374IYIg7777ro+Pj24n14GsaW5u/uijj7RxQBq0yucsQKPR8PwKXZfF3s2pB4Dmys6rDsJzWzm9HeMUDvEI4u8wjD9rmvV47bXJDl9ytg0pMkGU/1zueLagii1xNAyJclGxLVL99osmdW1Va5vHVYHFshBHwzQvgmrso26CYcI+lEwWXrnPONV6RbiTR4q65B76VvKc6enob6npAoCSzNrI04o71+rHvcT9En8vLtmLrJ7sYwmbonzY/qr0wCtsVoRnFpXP/I2ivBQoFIp///vfCIK8+eabzs7OOhQPOpA1AODk5KStOKxSqXQyIcrLTG/ngN9+0Z3r98vGaEY0fvuEt2TjPNtFC3I2U6I9SWrWtGWNNyVzNz4JbaGgQ6puNZ8gR0hCbwFAT0d//b32+rvtt7Nqn1mO6FEyS8oPnUm0poSfwQi9SGrP0VSmZ7mfPE2VbFPlUTLHdk3EGe905a17M3aLKE9Fo9Hk8cq15pnu9v6I04q718dPt47m5dgSo86Ss6Zvf/Ukqe3I0ZF8tFbILOLmzZv6+vraUJuDBw/qKvFbN7KmrKxs7ty5CIKYmZnpZEKUl5m+zoHLu/g1Dzspru4TZiWNk5+ZdavcZmWEB17Bnv6bIEV1DMM9cCZ+Jm90FtHfM8gySwk9LtN+qxnRcC/ns8xSLtnzL+8SFIgm4ezr1wwmyQu2bovcgolxx8p8KA88yj+pSYKPaeY+fMqyzRcVpWh+7wsjh3Pv1MKorOQ7ADDYP5zkeY3xS2LlreZnX5VVUr7ONMiXnD19++tZ06wdhgnMIMFzuV2Ul4Xa2tqff/5Zq2xOnz6tkzl1I2vgV4PNb37zmxmKbUZ5qYh3z/KyTrslr26r764ubuFcymesTWxvGKdIaHN3l4VVMN1E+qusUbAoCi+K2puiZj/+WD+OEVvlihFvtg/rGURbKEwXzYgmjpHJ+CWx59eCinH0zB1fXsnllAFAoajCfX1S5c1xPuEeoaGz83yEzGpt6H7jVDZB5UVRP634HttUxSDLty+KPemWhrZxflGEHJdJwm49eCSOkcm7Mo6Tt7y52XpjqDtB4Tl9+6tp5kGj9GOuKUMjaM3o2UVzczOFQtEqG1dX1+lPqDNZU11d/fHHHyMIsmjRopmuIYjywuntHAg/KaetSqCvSXRbEe9tnVakHP8DSQOa7QciT5kIHowx3EmO34tJYhOUXhTVpAIPaTipzfrw4qrxIwBQno1GA9kpd0qzRr2KdffanUwjL+zgBh+VVt1sBgD/A6KMC3lTmPlWdd0Z73TbJREnjPhnyVmepuonZj+xKaqz5Kz9+qkWa0L94lRdA6hUfd6EHJOq40sfPBLvkZV27lmZUADQ0d/rcDDuhAnfizLp8JrH7K/q0yZCe/uYxs6ndpJCeV2pra3F4/EIgrzxxhsMBmOas+lM1gCAt7c3giBvv/02arCZJbQ39BQra6rGs1Q/iKs3Zz822ZOs0koTd4J85bore1yjbZZHHDJOZ+OV2h9NaBAUtosiMjJvjb8qymRQxpb4bEofGhy+nn7XyyqNezmfZZ4iCy8CgBxOmTb9bVJws4t27o22w0fTcXIfSuaYuHm88h4dJ7M1jnQ4HJd7By3v+VzJTCj1tk3P45U3V3XW32tXRJcwNybfzhr3d61x9krfY5DsQxlLb1R4UlTe5EnbX1kUJZug3Lgi+FYN2uttNlJeXj5//nwEQd56662zZ89OZypdypqmpiZtYDMej0dr2LyWdDT13pJV9fcMlhc25XLLbkqripQ1t+TVBcKKQlFlf/f4v/SQ5OxNuEgvktqDLGeS5VQTyRbzqNL6hpw7lYddE61/CjtilOFFVLHJ45Qu9SDLvUhKW6PIK4loCwUdcz3trrd1mvbr5qrOi/Y858Wxnc29NSWth4xDvaxSeVcLulomVwixpbc7MDnTblPEHuNkNkHtY5r5xCYJLIrSm5x5xJhjvizkcpSiewg12zwnRoY1GRdyXZfG0lYluC2PY6xNzHpm0fAxzkVKNulHeZPVY327DpimbsPF0HFSb7KaNWH7K5Oi8CFlricGC3JKZvpmUV5O7ty585///EerbKKjo6c8jy5lDQB4enpqPWR+fn66nRnlZaA0u+7CDm5jeUecexZ9TSLLPEU7PDYk+9ika7NDn42koHQtIcCHqNL24mbgJDYrwrOKygFgBDT868X7T8ZbEEJOGvPZRAWLrHhau28PssyLrLQ3iHc9i7ZQ0DGdzb1XHYQpPtfvXq8vFFaWFzSVFzQO9A35buZcsufJIooSWNlX9wrGKhX1dg4UKaqHBsYPibjX0ET15VouCTtmwvMiqT3vey4UD37+eZFVdBOpHS56z6FY1Q00Mer50ds5UJpdd+da/UR+m1rSlDdtF0YwCaPVhH1JWesogVuoYdttonebJLpjZV5kpbaU8Pid4EiqLbhov1g0nXb2kp+f/+mnnyII8re//e3atSk209CxrOno6NDT00MQ5PPPP793D30/eg3RjIxWFxgZ1mhG7o/hoZGJFB4orq03Xx3MwMmYJLkHSeaBk9kujEh/oAdez9BAojSeUY3TAAAgAElEQVR/665IW2zEaSO+N1E5eubjjfRIiiPG6fuPxKOhGDqno6k3ykXJ3JDstiI+h1MGACne1y/vEQz2j37a+dpl8P1GK+sne11jbkge6Bua4OTKm/cOnkqwJUU6G4t8KJlab8X9p3aynKltJERSOeqnWywJPRsiaevrnYG7RIG+rsFiVU1Px0B1cUsup6xQXHlLUX1LUV0gqsjjlbdUj/+gcquyzmZdGBUr0XZ38iapzQmhvGvF95qaGFd4NuvD9hgkMfFyT7JyXPsrm6Q8aJJ6wj31Odw4ykuLQCD4/e9/jyDI/Pnzp9YRU8eyBgA4HI62LvKmTZt0PjnKi6Wtvjsr+U5mwu3slDvXUu+OjeyUOzkZ9/om4IRq6uqy3xVzwpjLJMncSVImXmZDCA/nPqrKOwb6QtKyNtmFb8ZEuWFEbKLcgyRzJ0kfHEySzA0rtrYIRVsozBDtjT3dbf0AkMstP4oLqyq6H0R1ebeAezkfAG5n1p4gR96SVQOAMOBGTsaEHmb6NUPR/NzNmyJ2YOI9cHKvB70Vvz67e5DlnmSlO05qZxS90yFaXVQ2Izc5u6m93Xplj6DyZhPvagF9TSLLLGV0bExhrE3UpsI9m56BASu7YGdjAZMs9yDLvEkqW2xEWGq29qd596pPMFMtfg5xNEpl4uXsZ9pfmWT5GYxg894wtFfGLOfChQtvvPEGgiC//PLLwMA4VV4fR/eyBgB2796tbacQH4+WFXmtKM2uY1ukelmneduke9um+/w6tEeaq8dPYRjRaI5TU/bqJ7FJcneSlE1U2BpGXoiTP/Hk2vb2i1EyK7OQ7UaxNBOxJ0nxiLJh4xVrfw7IuYe2UJhB2ht7z/wc7bo8buxIRWHTSdOoypvN/T2D1FUJqWdztMeFgYUTlDVaatrbvYLEVmvCDmDSPIkqT4rqQU3jQZZrPZVeJNUxowzzn4OZVwQtPeMUEUCZFBrNU+2vI8OakeEJFX7ddyrusHE6kyh3J8nYROUObJxPwEN1MuU37jieSbT8MeywYbonQckiyd1JsseHB0nmhhFbmodWNE20cQfKa4lGoxnriHn06NHJXj4jsqa+vv6rr75CEOSbb75pahqnAyLKK4YGptmNjhkk2KIfzSLJGSQJmyS304vyCHxWDa57Dc0sf4Hl2pBdxvE0EwmLJHMnSRgkCYMkYRPk5oSQRDHaQmGmGOgb8tsnvGTPC3OSF4oqAaCmpIW5MTn4iBQAolyUZzdnDA9pOpt7+f6FfV2Tfq4CgJy7lcc9ki3J4aeM+V5E5QPR4vef49kkBd1Ess04dtvOKHFu6fiTokyMrta+XE6ZOv52dvJD9tdrqXeyku40lHVMZBKfIMkOXCyLKHcnSVlEuYNJ0hn2o8mwI6BJU9/cezjWkhjqZMxj4eVMkvyRpxQPkpSOldgsCZPmoYUZZzvd3d3Lli3T5lbHxcWNf8EDzIisAYDY2Ng5c+YgCLJ///4ZWgLlBaLRQD6/3G+/6KI979xWTqrP9cEJh1ZE83NsSeHueAmDKGYRZTv14s54pY97VVFNvbN3xsYlQXv1Ez1wEhZRyiCKmQTpTpNYtIXCzCGLKKKujO9p779zrf7CDp7/AZH7uqSI08rBvuGspDvHieHa9P7Q4zIf2/TBvikWUhuC4WR5wfZdkVuxMVQTiRdZ9ZCsIcncSVIPksyTqDhmwLH4KYR1VdiI9kTUBTW3Wy/s4LEtUr1t0r1t7ttfva3T2OYpefwJdWhKkhRYEEI8CQp3koRJkh3CpDqeSXzimV2DfQmS/J37ojYRIk8b8byICg+S1J0kGRssgmwTLiI4PVOnd4nySlJVVaVNjPriiy8qKiomfuFMyRoAsLOzQxDknXfeQTt7v35IQm+d/DEq43yeKPgG91K+p0VqyDFpf++ElE1WUbnV8hCqiYhBFDOJUgeDxCPOSYMTKy167XbFMXqy2cLggwYp7lgJiyA7ZJjqcDJ2eneD8lQKhBXFqtGovda67gJBRVleAwA0VXWe/DFKFXcbAJSxJceIETW3WwGgrb6nsWJCj/iP09bXczVeab0xbLdhIhMv99TGYZBkD4ZVsUlyd6x0q2HMlm0R3OwiHd3l7Gba9te8sqrVP/qx8XIGSeJOkp404m7eEzby9Ek7+nvDONl2W8NtjcJdMUIWQeZBkmrtryyifJteLP0Kd1obQnldSE1NfeeddxAEsbCwGBqa6JPzTMmanp4eS0tLrW/s+PHjM7QKyguhr3vw8m7+g09yXa19vnYZJeraiVze1NllZh7obMxnEEUeRMlho9S9B2PbJ5zqogGNOO/2/hPxFuSQIwZpLvqCTVtDu/rRZKjnR1/XgLdNWtBhCQA0VXae/ilanVAKAGnncmmrEzyt0sJPypsnkETzREpq60+x0yx/Cj1imOGJVz7uqnAnSVhE+QkjjoVpCNWXW93Spst7m8WU5TUGH5Fe3Mm7uJMX5aqaSBqUluq2NlurMGeMwIMocSeKnY345rZBPUPjeCRr29svRMosN4ZsM4x2wwhZRJn2OeeAfrKjU0L/MFr5DAUA4MCBA9rqwwEBARO8ZEZkTWlpKZFI1GoaQ0PDW7fQOrCvFb0dA4GOkkceysNPKYoUE0rG0wBs2Rd+3CiDQRS7E8UnjTlb7CJq2yf3iD8EwymKwt0HYjYYBa1advVm2YQUFYpOaKnpyriQ19HY29c14GuX4X9QBAApPjlOlMgCYUVjRWccI+uqg3DitU8eR5BTvPdIrB0lytlYyCYqHjDYjIZVMUkydxPpDv1Yy40hnCzUbDNdbmfVOVEiY6hqUeANYUBhgKPYY33SRCpRAUDv0ODB4wkHDFOYRCmDKHY1FpibBdW0tk/k2rLGZra/0HxNsL1hPM1EzCLIThvz7GzDa9pQtYoCANDS0rJgwQIEQf73f//39u3bE7lE97KGx+N9+eWXWk1jbm7e3Dy5DnkoLz8jQyPp53MDHcUNZe2tdd2tdd3KmBJfO05VUXNLTVdX6/j1Z918OLsxce4EMZ0ocjHhW20MLmuayt9Je39vFCdnw15/6XU0xvAFwL2c77osrq9roPRanRMlsuRXd1VTVefpRdHlhdNKF+ga7A/nXrOxDNtuGMcwkbJJ8jFNwyBJGESJO1HCJspOGnHNSCHHaSkVzWj6zNQJPynnXHyo7ZffPhHvSsEEL6ee52xZEM0iSulEkRtGaLU6pODuJCqOFFfXnfJMM1savNcggWUsXb8oIK8c7Z6BMopEItFWjVm9evVEOk7qWNacP3/+T3/6k7aV9/Hjx9EWCq8l/d2DwUck++YHOi+Jpa9OoK1OOGgQfIIc6b428czPMcFHpePOEJKcZWUSysRLaAShu4l49aKrN6unbm7pGRjo7Uf/0l4Ad67XV9xoAoBIZ2XoCdnY8a7WvihXVUN5R3lhkyK6uCy/ccpLlDU2u1/mW60MdTROZeKkY0EYDKKYQRTTiWIPopRhIrE3iLexCI3ljdOaEeVpRLmotJluY6SfyxUEFE7wcr9ElaVhqAdBQiMK3UyEVktCJZNPWFMXlx1nJNssCqPo+SaJJ6qoUGYDx44d01aNiYqKGvdkncmawcHBsUTz//mf/wkKCtLVzCgvGyPDmoayjprbrU2VnY0VHdXFLdpvK282VxQ21d0d33osLbyzGneVhZNQCQImTrKCcCWzZEI5FygvJ7F0dSxN/eARjUbT095/cSff0zLVyyo1/Vzu8NDUa6xdu1Nx6EyCBSHUyYjLJsjdifdljXawiNJThhwzXPApZtqduqmrqFnLtdR7vnace3kNrXXdrbVdt+TVbPOUPF55a21XW333uL87cW6p9eJQqomAThDSsEIb09Bk2Y0pbEMDGkXhXZuDIf5xaAsFlPu0trZ+9913CIL88MMPneP1eNeNrOnp6dm8ebNW03z77bdqtXr8a1BefUrUtcWqmpEhTUfT5GrbF9c2mK0KdMXwaQSBB060nhDAzUTDI15hyvMbfbdw8gUV9XfbU31zqotbAKCzpU/bN6q5qtPXLiOOkTlW3q2ve1Bbv3jiDMJwgjh/647IrZhoqrGIRZA+IGtEdKLIgyh2x4nt9ePM1wZFcq8PwdQje2YhKT7X9y8IOkGOpK9OoK1KOIINP0GKZKxNdF0e62mZOm4A+L36JssNIWeMeDSCiIET2WLDAlOmnqQ9ODLc24faX1EeIjQ0VKsxPDw8nn2mDmTNwMDApk2btOstXbq0urp6+nOivOS0N/b47ROeXhTNWJtUd7fNxzadezl/rFzpuDR3d++0jzpikELDCxhYkSU2JCJ9il3NUF4SbsmrL+8WsMxTLuzglahrI88oPa3SIp2VN6SVAJCTUXaCHNnfM9TXPXjner2XVertrLoprNLQ1XkuXGq+Kmi3foI7VuJBlIzJGjpRRCOKPIjS08ZcC5Ngx1MJxTX1ur7L15aWmq6akpbGio6mys6akpb6e+11d9qqbjVX3miuLm4ZN/p7aGTYekfICf10GkHojhfb6oV7h4uey8ZRZgvDw8OLFy9GEOSTTz4pLX2Wi3O6sqanp2dM0yxbtqylBY3ae/0ZGRqJdFYGHBTfy2u8sJ3b0dxbIKigr0lsqhy/ecLoDKA5Sk22nx/DwAvpWMFmk/BLkU/un4DyCtHfM9hc1QkAAv9C2qqE0uw6ZWzJua2cGKra144T7abWaDQZl/KOEcJjaZkjI5rhoRFFdEnVrUm/aRSU1Ti5p5r/GHzUMJ2Jl7gTxVpNQyOKaEQhgyhyx4r36idYrgsOTcka0Ey03AVK1a3mAmHFQO9Qe+Okm1QcoSY5GMbT8UJ3vHjL/Ei3S5yZ2CHKbEahUGi7YO7cufMZp01L1jxop1m+fHlHxxTLcKG8WvR2DJzbymkoa+/rHjy3jat1NIQ5ybNT7k58EmaQwHZ+KB0npOEEO4yjGRd4M7ZflOcN93I+Y22S9uuBvqGLO3lnFse0N/YCQJiTfMeXV2Koo35q/wOi21lTiRYfAQ3/WtHuQzG22PAzRjwWUarVNDTC6PAgiE8bci2Mgw+ciM+9g6bVjMNA33CCR5brsljnxTFleY0RZ5QBjuJJpehfipRvMgljYIUMvNB+QewxWvL0ivyhoDwBe3t7BEHee++9/Pyn9syZuqzp7e0di6dZtmwZmsg9e+jvGTq/jVuiru3vHbqwk9fT2T8yovG149yUTOLDI0aQa0UIdjPhUbF8B4P4Qy4JM7dhlOdMZ3Nv0GFJmJNcGVOS5pt7ghyprWmUyyk7tSi6SFFdml1Xd7ftpnS6aqNrsN8/QWWxMXiHYSzVRORBFI/JGipBQCcIGViRg16C2fKgwET1uAXiZjN8/0If2/TygsbAg+KKG021t1vd1yddS5vEgwo3q+gXnJ8HVkjHC/bpJew7GtcziL7gKDrmzp07f/jDHxAE2b1799POmaKs0Wg02t4IqJ1mdiKLKGJuTE7zzfGySsvlll3ZK/CxTe/tnMS7WHZRucWyIGcjDhXHc9RL3O4YMXO7RXn+DA0Ml6hqUryv7/zqagIzCwDaG3pclsQKA0YTZC7t5vvtF+lkrbLGZrfzHPOlwQf0kjxwEgZBRCUIqQSBdrgTRM7GPEvjkL1HYvPuoWabJxN4SHw97S4A+O0TaRPyMy7mZ1yYRML8jYraFZRLVBM+DS84ZJC0c3dUc3f3TG0XZRaj1R4fffTRnTtPLlc2RVnj4uIypmnQeJrZiTyqmLoq/gQ50nlxzFUHYUPZhIqKjtHc3b3BPOCkfpobjnt0QYrV9qAJtoVCeYUYGR5JP5/bWN4x2D/kt190eY9gsH8YAMTBN50Xx7TWdgFAY0VHQ7kOnouUN+7uPRJriQtxMuS440W0B5QNnSCgmwj36SVsXB7oGybtGBi/YuRsI+yEXBR0AwACHcXaRLbgo1LOxafa+R+nvrPTbkvYUYMUGo7vZJhmaxWKFkhEmQmUSuW7776LIAiNRnviCVORNTExMW+99RaCIEQisb19ch9mKK8Bw0MjkrBblTebu9v66++1N1VO5TNJA5ot+8Ic9RLdsNwTeqmWVkGNnWhP5tcTjQaKFDVHsGH1d9sBoCyv4RghPJ9frhnRxNLU9F8SvazTYqmZPe3TbezVPTgQwb1uuzl0s0GEizHfnSCiEgRUAt+NwHfD8+l4obMh19YwbM+hGHVRmQ5u7DXitrrW0zI17Vyuz6YMdUJpkuc1t+VxlTcnUSd6cGT4iHPirgUxNJzA2YizYUVAUTWaiYaie4aGhpYvX44gyOeff972pCYbk5Y12dnZH3zwgXbGZydZobyu9PcMssxSVPETas/xDFy803cYRLqZcE/op1isD7pbN61a+ygvM/X32mmrE+SRRUMDw2yL1Bg3NQAEHZbQVycUK2vq7rbFuqkv7eJ3tejAjlLX0cHyE25cHrhXP55mIqQTBFpZ44bn0/B8BlZwQC/BfGmQp5+oCVXSD1AgrPCyTjuKCzu9KPqSPe925qQz8N39+NY/hNCxfDqGv4J06fq9yvGvQUGZPCkpKW+88QaCIFevXn38p5OTNdXV1fPmzUMQ5P333xcKhTraIcorxsjQSNq5HKZZcoGgorG8o6GsvaGsvf5e+2RbG4YkZ1kYBdIwvFOGaRbLgrKLKmZowygvA83VnTW3W5O9rtF/SRweHClR1TpRIrX2GwDo7xl0XR57YzJR588m927VIecEC3LwYYNkd6yIihe44flueJ4bnkfDC1yMuRbzgrfZR4iuT1edvx6oE0pLVDUDvUMNZe3199qm1qY0nHvNzDjADcNhYPirMJcFOSU63ycKCgD09/cbGRkhCLJw4cLHu0RNQtb09PSsWrVK25fh/PnzOt0kyqtEX9dgyDGpo1HIqYVRtNUJ1JXxbsvjaKsTJuuNkhXeWYW7RMPwzhilWfwYyM8unqENo7w8XE+/q20jFXJMFnFGOXZ8ZGiEujK+QFgBADdl1dqqAdNEA5o01Y0de6OsDcNOG3IYOCEVz3PF81zxPDc8n44VHNJLXEvyY10VNnXNdrON/0FRqk/ONCdR3SizXBp42jCdhuFtwPjHoC26UGYMT09PBEF+//vf5+Q8+nc7CVlz+PBhbZjw3r17dbo9lFeMkRFNS21XQ3lHQ1l7/d22+rttdXfbGsrahwcn1/Tndl3DhpX+pwzSXIwyzHEBcaK88a9BeV0IP6lIZGePfSsJu+W2PK6rpe/u9foj2LCUszlVt5onXrf6GbT0dJ+PlFmsC9phEEXF8Gl4gVbZuOK4NBzP1Zi3ySBsk12o4PqsNi1kJpYyzZKVsSVa46vW/jqp3EYAqG/vMDcPPK6XQsNwrYyD/GLRvk4oM0VhYeFf/vIXBEGYTOYjP5qorBEIBO+99562PUI3mraHogtaerp37oo8sCCOZsw1m+9/OUHxoneE8vyouNHEWJeUxyvvaOqVhhUdxYXncMp6OwfclsV5WqXy/Qov7uBFu6n6unXTG6iout7FJ2MDJWC/fiLNhE/F8VxxXFcc1xXHo5rwD+olrqf4u3lnVLWM36j1tST1bM4xQvhRfDh1ZTx1ZbzbijjnxbHXUidRtwYANKCxcwg7uCCeiuFuMQxjXubP0G5RUIaGhpYsWYIgCBaLHR5+yGc6IVnT1dWlr6+PIMinn376tExxFJTJogHNUVrS1u/DGRie+feB7GA0Wmt2USCsuGjP87JOc1sRJ48sBoAwJ/nZzRlaKdNa231qYXSRskaHK4pySuwPRlmYBJ/QT2VgBa44rguO64LjuOG4bsbczfPCNm0OTVfd1OGKrwodDT0NZe2N5R1a+2v93ba6O21TyE0745m+Qz+Sasy11488wUieia2ioGi5cOECgiBvv/329evXHzw+IVnj7OysdT9dunRpZraHMkvxDBZazguiY7i234e4nst40dtBed709w7W32vrbusDAGVMyckfo2rvjNpLOpt6T/0YdVOm4wJ6vcMDYenZtjYhWwwjzhhyqDi+C47jguO44jhUE95hvaR1eD83X055E1pzZSoEJ2VZYAJpxpx9ejG7jkS96O2gvM5UVlb+9a9/RRDk5MmTDx4fX9ZkZ2draxUvWbJkaAhtGoeiS2KFeRb4AFfD9B3zw4+6JA5pJhedg/LaUFPScmphtDrxfs2IyDNKlllKT8d0i9k8keq2Nvcrgg0/B+yZH0PD8NxwXBcsxxnLccVyXI04dnphluZB8aL8YUD/ICeHrPDOcuxFqjH38PwEsy0BQ+gLiDKTbNiwAUEQCoXyoDgZR9YMDAwsXLgQQZC//vWveXloRCeKjrleUmm2NOC0Xur/Z+++45q+9v+Bf9T2tvfe/u637e2us9stW/a01FErdTFF3CIO3Huwp4ADZe+9ZO9N2BASdgJJyN6DDAKE5PdHLPW6RSAI5/l4P3xoCMk70SOvfD6fc85JlRTHC6n84Sn5GQbMfPhOZl06euyva4TrM1BX9BMIXVO701xtJ+bs9XQrw8jLatnu2sUuuoXOugUuugXuOkWXVbOsDCKveedgqGC3uzeAotC3bw65pZF3VTXLwjqCJXjjncAB4PXJz0N98803PT1/T6R9Ray5f/++/PSTp6fnFLcHzEUMvsDCKuKqStY51fTDR+LBQsOATCYj9rBubUyFJU/HhH+RZCSzGrn/YJytRsxNjTx33SJn3QJn3QJX3UJXrcJDyvF798Qkl7QOS8GB6tfCEgrsHZLOqqbdUM2x3BUBQiEwpWAwmHwjhcTEv3cVfFmsodFo33//PQRBOjo6IpFo6jsE5qLDZxLOqqRdVcu0No/EgU1kAJks83ZT+OmyMckkzO5+TTQe715cpaVZxDHVZJf1hW66Rc66+c66+W46hZdUsyy0Iy67ZfWQaNPWz7trTDp2zTP70Lq4W+q5lr9HNPeANTaBKcRgMNasWfPUujMvizXe3t4QBL3//vslJWCeHjBVXO8WHFaPc1bPNdsc3EsGPzkA2SBzaIj/ZiumTIoOPPmye5a5YcRZ1Qx37UJn3QInnXwXnQI3zUJ75USb3VGJRS3DMrAh6ysExJZZrQt3Vs+z+jUCrLEJTLXdu3dDEKSnpzd+ec0LYw2Hw5EfqjEzM3t2cWIAmCxxuU3mGmFeagWb9QKb+8BnO0DBihq7Dx9PsNaMuqqe46pd6KxT4KST76ZdcEU1y1ov8rzLIyR2Mueczz4ZlQhLvfCbqjlWuhGppWChYWBqyWdq//e//6XT6fJbXhhrQkJCIAiaN28eOFQDTKkqJHqrzgMPtfw/dYPBZztgJmAJBeEZtXZ7Yg4qxztp5LvqFDjp5Dnr5LtqFtgrJ+7+PTw0pVYkmZx1AmcfOJpovS3yukqWtUrEw9RqRbcDzHJZWVnyPZ1qamrktzw/1nC5XPmWlvr6+mBSNzClesk0c7OwGypZ5lphqUVvuysNAEwWNIXhfCd/t2n4KZVUF818F538Wzp5rjoFV1WzrbWiTl5IaUWBHaqfgzsksraLvKKUYbs2wjsafCoGphYWi/3oo48gCHr48KH8lufHmrCwMHn8ycjImMb2gLmIKRAcdUg4szbFViMyJAnsnwDMLLWdGMdraVY6EReUH7lpFzrp5Dnp5Llq5duvTbT4IzwkFcYTDym6xxnn6IWEM+tS9q+JcrqXp+hegFlOJBKtWLECgqALFy7Ib3lOrBGLxaqqqhAEGRgYCIVg1QFgao3JpJc9sg6tjjmkFuMdDD7bATOOeGw0ubjVdm/0PrXYG+o5Ltp5Tjq5rjr519SyLVTDjzkmNXTjFN3jzOIVVHxINfbo6rgLTo8kYI1NYCpJJJLNmzdDEGRlZSW/5TmxpqamZt68eRAEJSUlTW97wBzlH1tmsybcQTn+imeWonsBgOcjc3k+4aUWf4QfU0l0WZ/vrJ3npJ3rqllwUil5l2novdjKQbCY5F9SilotNcNOrUk8cSZ5EBzNAqbY4cOHIQjasGGD/I/PiTWnT5+GIGjx4sUczhzdzBaYZmllcEudsBOrE+wvJr763gCgOK19hMueWea6YWeV05w18520c521c6+pZu9Rj7J3TKyAo1/9EHNAQw/ud53A82tTDx6Ko/IGFd0OMMvJJ0MpKSkJBALZs7GGxWKtXbsWgqBjx44poj1gLmpF4S23hJ1cnrDXIXpMNn2LsAHABIzIJFk17Qft42zUI6+oZrpo5d/SznXRzDu+Nmn3hrDb4WWsOX/uHsdkm28PO7sm2WpnRB+Voeh2gFkuODgYgqDvv/+eQqHIno01OTk5CxYsmDdvXlYWOB0ATBOWQGBuEXbi53hr2wiWQKDodgDg1VgCQVBajdXOiINKsTfVc5y1c120c6+rZ9koRR6yj69C9Cm6QUUaHBafPJt8fFX8nxuCkANgmR9gaiUnJ8t3hsLhcLJnY82xY8cgCPrll1+oVKoi2gPmIqlMduRMwpHlMda7IjAUsIkM8M7oJdFu3M41Nwk/qZTsopl7SyvHRTPXUSllp0mod3AJXTBH9ziTyqS3AvL2L4/aqnW/oRdcTw1MrZycHAiCPv74497eXtlTsYbBYCxevBiCoCNHjiioPWCOcrtTuGdVuPXv4XA0QdG9AMCbKWnpsT+daK4eelElw1kz11kr97pq5l6VqH0HY+fsCpMP06qtVoXuUH+YX9ep6F6AWa60tHT+/Pnvv/8+AoGQPRVrMjIy5Pt15+fnK6g9YI6Ky27coRRkYxRW1tKr6F4A4I1xxaLo7AYbq6i9SlHXVbOctXKcNHNOr03ebRTqGVRE48+5y2bz6jqt9cJ2Kgcl5DUruhdglqupqXnvvffee++958SaixcvQhD07bffcrlcBbUHzFHVyP7fNe5Za4Y+qkIquhcAmCAMnekZVGTxe/gx5YSb6tnOWrnX1TLtlCLt7KIfVSAU3d206h6gWpuF714d9DAO7J8ATK3q6urnxxqpVLp161YIgjZv3uCt5YwAACAASURBVAz2tgSmGYpMN98S8ufqwMicBkX3AgBvpRGFO30tbZdWyGmlFCeNbOf1OY5rkrdrBd+8nYujsxTd3TQRjo5Y2UaYLw9yvVOg6F6AWe6FsYZCochXIL569ari2gPmKJZA6GCf+Ov3fnfiKhTdCwC8rRGZJKMCsf9wzB61iCvKGc7rc26oZdmtibLcHZ5d067o7qbJiYvJu5Y/OHczXdGNALPcC2MNDAb75z//CUFQamqq4toD5iipTHrVLctgiY/3w2JF9wIAk4PGH7wbW7F7a+jBdTE31LKc12efVUrZqRN8welRH5Wu6O6m3L2oym2r7h8+Ga/oRoBZrqKiYt68ec+JNZGRkfIpUi0tLYprD5i77kSX6//gc8MtB6zIB8wmCCzpikfWLoOQU+sSndSzbqpm7l8bZbkjPD6/SSKbzaf7c6s7Nq4N2HsganhsVNG9ALNZdnY2BEH/+c9/enp6ZE/GmhMnTkAQpKqqCq4XBhQioxSxQcXv1Nlk4ciwonsBgMkkkY0VNnQdPZ1gqRZ6fl2qi3r2ubUpO9WDL7o86iXRFN3dVGnHkU00/GzMI8D+CcCUSkhIkM92GhgYkI3HmpGRERMTEwiCzM3NFdoeMHfBewibjO8cOBjDFooU3QsATL7BYXFYRq3FzrB96yKvqWTcUs06sCZ6t1loTE7j0NiIorubfGQuz2JX6B+bHvTiZ210A2aCwMBACIJ++uknOp0uG481QqFw3bp1EAQ5OjoqtD1g7mLxhWY7HuwwCyKywB6rwKyFoTOd7ubv+jXk6OpYF7WsC0qpO1WDTl1K6cBTFN3aJBsaHTl5NtlEz68OgVF0L8Bsdu3aNQiC1NTUhoaGZOOxhsfjffPNNxAEubi4KLQ9YE47dCLW2NgP7I0HzHpViD6H80m7NYPPrk2+pZx5ZE3s7m2hERn1YumsugzF7V6Bhop7fjVYaBiYKlKp1NraGoIgU1NT+S2PYw2FQvnoo48gCLp//77i2gPmOk+/QiUt107cbPvYCgDPEowOJxQ279kbZbU29JpS+qW1qbvVgh0uJDX2Dii6tUkTndWgrOqamAsWGgamyvDwsI6ODgRBe/fuld/yONa0t7d/8MEHYHY3oFjJWS3L19+sbp7Tux8DcwqRzfUKKd7xW9DhNTHX1qXbr4rdtSkkJBU2OCJWdGuToLqlT1XHLSCmXNGNALPW+Lmmmzdvym95HGsqKyvnz58/f/788vJyhXUHzHm1bZgftG/klXYouhEAmFYtaPy5W+m7dIMd1yZeXZNmoRLicDapGf3OH7YhUjlav3s7BYJNBoGpgkQi33//fQiCIiMj5bc8jjWpqakQBH344YdIJNiRB1CYfhJDbZtnaBJM0Y0AwHSTyqR59Z0Hj8VZKAVfXJXssCp29+YQ/8hyllCo6NYmTiqVGlj6OzqBkwDAVImJiYEg6P333x9PL49jjXwtvn//+9/9/f2Kaw+Y67gC0e9HH16/l6PoRgBAMRh8QWBClYVZ6P41kRdXplgrhdodiKpCvMOnZQ9ci7M+Gzk8IlF0I8DsdO7cOQiCli1bxufz5bc8jjVpaWkQBP3rX//q63uHxw/wrpPKpAdvxR9ySlB0IwCgSJ14yq2AvO36Dx1Wxjosj91lEuwdVMIUCBTd10T4Rpdusg/k8MFiVMDkGxsb27x5MwRBZmZm41t0P441OTk58pNQnZ1gJh6gSC7BBWaOwYruAgAUr7Sl96hjgoVasOMv8VYrQ+wORxfWdyu6qTeWW9WhY3ubwgQLDQOTr7+/f9GiRRAEeXp6jt/4ONYUFxfPmzfv/fffr6+vV1B7ACCTyWTR2Q1bHB6MScG2UAAgE4yIY3IbLXaF7VkZYv9T9HatB+6BhWQuT9F9vYFuDGW9lQ8aP/u39gSmX0pKivyITGVl5fiNj2NNXV3dggULFixYAIOBqzUBRYK19W93DOEKhhTdCADMFANMtvuDwp0bgg7+HLFnRajtnsiChq53JfgzOPyN9oEtXXhFNwLMQkeOHIEgSEVFhcP5e236x7GmoaHhvffegyAoLy9PQe0BgEwmk1GZg7vPhqEHwGc7APgfsE6M45VUc82gfd+H7tR+eMMnB0tnKbqpVxuVjO2/EVdU9+6dPgNmOB6P9/3330MQZG9v/+Ttj2NNV1eXfDk+EGsAxRqVjNm7JDZ3vvMrdgDApBNJRtIr2mxtI81XPjT/4eFeq6hHlYgx2Uw/cOMaUhD+qE7RXQCzTWlp6bx58yAIysjIePL2x7GGSCTKN08IDgZXawIK5hJcUFQLPtsBwPNRuIN3YyrMN4fs/v6Bmcp9Z9+8ftqM3kYtOrvhXkKVorsAZpuLFy9CEPTVV1/JN+4e9/cO3itWrIAg6MyZM4poDwD+llmOLKrrkf++v7//6NFjdnb7Ozu7FNsVAMwonQTKJZdH29UDt35/x3pneHJx64hshq4N04GhZ1Z2FRcXb926zc3dg81mK7oj4J03NDQk3wrK0tLyqS89jjVjY2Pbt2+XT/6e9vYA4DnYbPbNW04LFy0yNdHZZGqwcOG3Fy5eIhKJiu4LAGaQ/LquQ0djf19xd6vSnSsumWjyTDxsg0Qid+22+Pabryx2blFau0JZWSUsLFwimaEhDHgn1NbWyk8xhYaGPvUlaPx3ly9fhiBIXV19cBAsMAAo0vCwOCwsbPnylSuX/3jf7xYV28jAt0SF+CgrrVq27Dsvb28Ol6voHgFgpmCLhOHptba7I4yXeVtuD00ubB2SjCq6qcdIJNKZM2eXLV2y8Ve9wqwoHg3Z11Fx7aLDooXfaGlp54JLOYGJOnr0KARBCxcufHYN4b9jjXz/hG+//ba7G1zWAChMXl6esbHJwm++un7peH9nJY/WTsU1UbBNXGo7AV3n5XJx5fIf1dTUY2PjxteUBAAATWE4++Vv0rpjuMr7/PX0rgGKYvsRCAQBd+5+//33mhpKMWG3GYRWDhlBxjTQ8S08Wju8LvfQPvMvv/zczOxPsFga8KawWOxnn30GQdDx48ef/erfsaasrGzevHnz588vKyubxvYA4DEkErlj564lixcd2mfeWpsrYHTT8a2k/sbxouJaBIzuXmT5lfPHFi38Rt/AqLikRNFdA8AMUo3odzyfrLfa63fTe9FpDaLRkenvQSqVJienKCkrf7d0ka/7FQK6fpDeRcE2PzmWWcS2QVpnRVGS2VbTZUuXHDp8pK8PbEcIvK5bt27Jt3tqa2t79qt/x5ru7u6vv/4agqCIiIjp6w4AZDICgXjy5Kkvv/xyy0aj0vwEHq2TQ26nYJvJmKanioJtZpEQfHpXCyxnv+3uL774fOfOXU1NTYp+BQAwUwxLJSmFrbt2Bqssd3E4nYBAk6bz2SsqK3/fuvWrr75wPL6/F1HOZ3QzCG3PDmQypomKa+FSO9jk9oykYGMDrYULF129du2pKS0A8CwOh7N69WoIgszNzZ97h79jjUgk0tbWhiDI1tZ2mroD5jwej+fl7b1s2TJV5TVJsQ/YlA4evZs60ErBvaI41E4+o6e8MHmTqeHSpUvs7Y/h8WAZUwB4jMId9Asu1Tfw0dLxCoquFo4MT/Uz9vf32+3bv3jxot07f6+vyhKyUCxy+ysHMm0Azmf20gltIfc9V6746Zdflgc+eMDnv5ObegLTIyYmZv78+fPnz8/Pz3/uHaAn/3DmzBkIghYtWsQFl2QCUy8xKVlDY/3KFT/5el6jDrQKWSgmEUkdgFMH2l6j4HQCYpDRw6N1J8U+NDLQWrx4iYuLK5g7CgDjmrvxx88nrVNzsT4c3tQxVUtcMpnMa9euL1q40HSDfnZauIDVy6N30whtrzeW4dQBOIvULmShCX1N7s4Xfvxhmba2dlp6+hR1C7zTpFKpkZERBEH6+vpCofC59/mfWFNQUABBEARBhYWF09IhMEfBYLBff/1tyeKF58/YozthYh6WRe6k4ZETKAaxXcTupxOQQfe8lv/yw4qVK8PCwkUikaJfIgDMCCOysexy5O8WgSob3O9EVfAmdbc1kUgUGhq6/Jfly3/+IeyhL4vcKWT30wntExvLbHKXmIftbqs8feLQ0qWLTX/bWF1dPYndArNAcXHx/Pnznzuve9z/xBoOh7Nw4UKwKB8wdbq6umz32v33v59aW25vrisQcTBcei+d2E4nvFWxqd1DXCwO1eh84/x3yxbrGxikg097APAXDl90P65SeaP7FrvA6panJ8ROTHZ2toGB4ZLFC11uXhhANw1xsWxK11sOZDqxncfoFXEwjbA8a8s/P/vsv3v22CIQiElpGHjX8Xg8XV1dCIJWr179kpVooKf+bGNjA0GQjo4O+LwLTC4Gg3Ht2vUlS5YYGWjnZycI2BgBq59O6qQTJ604tN5hPqELUe1wdN/ixYu2bPkdzB0FgHHoAbrDzaSVm5yv38sZFIgn/DhweNu2bWZLFi+yP7K3s61ymI/n0HoncSDTSZ18Vr+QjS3KSzIx0l2yZMm5c+cpFAVPWQcU7v79+xAEzZs3Lyoq6iV3ezrWyFev+c9//tPa2jqV7QFzyPDwyMOHD1evXq2hrhwREsCjo0VcHJvSwyB1TXoxyd18FmaIN1Bfnbd75x9ffP75gQMH+vvB3FEAeKywpmuTfaDpoXsFsDfekASHwx0/fuLrr782+2NjdVmWiIvjszBMcvdUjGU2pUfExXHp6IToB7raGj/88IOfn9+LLqcAZj08Hr906VIIgkxNTV9+2OXpWINEIj/99FMIgnx8fKayQ2CuyM3NVdfQWLp4oYfLVQq+Y1RI5tDQTErvlBaL0iviDgg5uKL8NF093V+W/0IiTus0VwCYyQSi4bvxFXp7/c76ptPZ/Nf5Fg6H4+XlvWTJUnU1pbTkCCF3QMTDs6hTO5CZlF42DT0iJNGInXfv+C5evOTAgf1T/eYAM9Px48chCPrggw/Ky8tffs+nY83w8LCZmRkEQStXrgS7KABvo6mpyczsz88//+y4/X5UV71EROWzsSwqaooLzaKiWNReNq1POEiRSQfL8mL+9c8PkO0din4/AGBm6ScwTnunmZ0Kzqlqf/k9ExISVFVVV638+a6/O4eOHhGQuYz+KR/LtMdjmcvEiUVM2Sjr+oUjmppa0/PmADNKTU3Nf/7zHwiCDh8+/Mo7Px1rZDLZo0eP5POhYmNjp6A9YPbD4/H2x44tXbpku9mW+ppCyRBNyCWwaX3TUmg2rU/ApYgEbFJ/U2vxnRAvu8/++zHYABwAnquyGb3veuzVu9lYEuvZr1ZVVRkaGi1ZvOjG1XN4DGJsiMZjYqdnLLOoaA4dIxIwBYN0dFt+U56rg62RyQbT6X+LAMUaGxszNTWVb+7U09Pzyvs/J9aIxWIVFRX5GayREQWsvQ28u3g8nqen55IlSwwNdB6lxor55BEhlcfEceiY6Sk+hzQk5DAoqLaq6JLESxXJ50O89n322Scg1gDAi4iHR2OyGw/cjEsrgUskj7daa2/vsLXd+/nnn9ntsUA0V0mG6CIeicvATs9A5jKwwkG6iM8k9jXW5wcUxZ2tSbt43O5XEGvmoJCQEPmhFjc3t9e5/3NijUwmu3fvHgRB//jHP6qqqia1PWDWGh0djYyMWrNm7fJffnoYeJvHGpAOswZZeC4TNx3FwA5ySGIRl0PH9rRkVT1yK0m8VJp0pTrtSqj3fhBrAOCVCFSOT2RpYFIDCkO8du3a0qVLTYz0y4oyJWLGsJA2TQOZieUycXwuWSRg0QhIRHV0Wcr1koSLpUmXazOuglgzBzU2Nsp3tVRSUnrNhYKfH2uIROKyZcsgCDpw4MCkdgjMTiUlJaamv33zzVfXr56nEHtlIxzRIIXHwk9tsR//hs8hiUUcEZ810FPdUHi3It2pIu1WeerN0uSrINYAwOuTSEYPnrz6/z5fpqWlnhgXJhbQJGIWn0OctrEs4FGGxXwWtb+n6REsy6si7WZF2q3ylOsg1sxNHA5n/fr1EAR98sknr3+Q5fmxRiaTOTo6QhD0f//3fygUapI6BGYhFAplYWGxdOmSg/v3dLc3yiQ8sYA2yCZOSxH4HNKQkD0k4lLxCERVDCzbqybLszrLozLDBcQaAHgjWVlZqqpqK3754Y6fO4uGlUl4Ai55msYyiyDgUsQinoBHw3VXNRU/qMnyqMnyrM50q0x3ArFmzpLPfoIgyN/f//W/64WxBoFA/Otf/4IgyM7ObjLaA2ab0dFRPz//r7/+ZuuWjRWlebLRQYmYI+BS+BzylBebzOeQRXzWkIDDpqJ7mjMbiu7X5/nX5fvV5viAWAMAb4RIJO7ZY/vVl184nnLoRyFlUoFYwJyOgcwhD7LJAi51SMgV8ZlkbCsSFlufH1Cf51+X5wfL9gaxZi6LjY197733IAiytrYeGxt7/W98YayRyWRnz56VTxOvrKx86w6B2YZGoy1atNjby0M6KpSN8oU8moBLnY7iUIb4rBGxgM+lYjrK4JWRzSUPmkoeNhbeq8v3B7EGAN5UTEzsl19+0dQAk8nEo0OcaRrIXKo80AwPCdjUvp7mzJbSkKaSh03FDxoK7oJYM8e1t7d//fXXEAStWbOGTCa/0fe+LNaQyeQlS5ZAEGRiYjI6Ovp2TQKzDZlM/umnn7JTgmSy0SEBR8ijCXkMIY8+NfX4kUV81ohYMMRnk7EtnQ0pbZWRrRXhreWhINYAwISFR0Qqr1vOpnRLJWLRIPPJETdVNUgfEnBHxUI+h4zrqkDC4uAVEfDy8JayEBBrAA6Ho6enJ9/wYALzll4Wa2R/bcEAQVBMTMxEOwRmJwqFsnz58pDbjuS+arGIJxbxRHyGiM+cmmKIBMzhIb5YxGOQe9CIgvbaBGRtPLImFl4ZCWINALyNqOiYtat+bCoJpROQI8PCIQFrSsfykIA9MiwQDrLI2JaepkftsLj22nhEdQy8IgLEGmB0dHTv3r3y4BEQEDCBR3hFrBEKhdra2hAErVq1ik6nT6hJYHaSx5qwgPPd9XF97SVDAs6IWDAkYA0J2JNarCEBe2SIPzoi4tBx+N6anubMrsb0robU9rpEEGsA4O1FRcesW/1zU0kIojqGgmsbHRkSi7hTMZbFQs7osGhYNMggdfcji7ubMroa0zrrU9prE0CsAeTkV79AELRnz56JnSZ6RayRyWR5eXkLFiyAIMjJyWkCTwDMVo9jzZ3zvU3J8Kro/vbSISFHMiIWC3liIXeyamRIMDoiFg4yKQNt/e3FKHgeqjWnu/kRiDUAMFnksaa5NAxRE4uoiafgEKNi0YhYOIkDWSzkjQyLRoeHeCwiAVXX15aPguf2tmR3N2WAWAOMc3FxkWcaU1NTDoczsQd5dayRSCRWVlbyyd7V1dUTexpg9nky1iBhCUhYIqotn8vASUaHR4eF8tNSb1MjYsHoyJBYxGNR0PheGKajDNNe0ocoBLEGACbXeKxBwuIQsIT2uuSB7mrhIEMyOiw/8/s2NTzEGxkWjgyLRIMMGr4d11WJ6Sjtby9Gt+WDWAM8KTAwUD71SUND400vE37Sq2ONTCZDoVCLFi2CIGj16tUDAwMTfjJgNnkq1nTUp3Y2pPW0ZFNxiGHRoEQyPCzmT7CGBZLRYfkHOwoOjkfV4ntr5P8bglgDAJPuyViDrE3sbEjtbEhDI4pYNIxkVDw6OjThsTw6IpSMisVCLpvaR+pvxPfWDPRUYzvLQawBnhITEyPPNKtWrerv73+bh3qtWCOTyZKSkj744AMIgnbu3Ak2igJk/xtrOuuTuhvTu5se9bRk97bmDvTW8rm0McmIRDI8MiIaGRa+fklGhyWjwyI+i0lBUbBwUn8zsa8B3wsDsQYApsiTsaarMaWrMb27Oau3NRfdVkgZQIhFvLGx0dFR8RsN5NGRoTHJyOjIEJ9DoRM7yZgWEqaJgK4DsQZ4VnZ29scffwxB0NKlS9vbX7Gf/Cu9bqyRyWQXLlyQn/Ty8PB4y2cFZoHxWINqToZXxXY3ZWCQeb2tOWhEYR+yBNddzSD3DAm5Y5LRMcno6Ih4dGTo5SUZHR4bHRkWDQ4y8QxSN43QTh1AkDEtINYAwJR6Mta0VMb2tWWj4LkoeH4fsrivvZSAqucyBkbEwrGxUXlSeVWJxyQjkpFhEZ/JoWPoxE4aoZ2Cg5MwzSDWAM/Kysr6/PPPIQj66quvampq3v4B3yDWCAQCExMT+VTykpKSt39u4J0mjzXhdy+iWlJ2b9+wbbNBfWkssbesD1nU31GO7aoaQMFI/c1sGkYs4o6NSaRjEvnxG/nxmL9LMjw2JpFKx0aG+DwmnkXuZZJ7mOReOrETxBoAmAbyWIOoji5Mv6OpvubquQMYRP5AV2kfshjTWYHrrhpA1VIH2ngs0siwUCqVjI2NSp4/lkfkXxXxWRw6lknqYZJ7GKRuOqEDxBrguaKjo+XHaT755JO8vLxJecw3iDUymQyBQHz55ZcQBC1fvpxAIExKB8A76q9YcwHTlr7XcgsEQWtW/piVdJeGgQ30VOG6qwnoelJ/ExnTSid2cJl4sYgvkYyMjY1JpWNS6djYmGRsbFQqHZPKpKMjQ4McMoPSSyd1Mcg98gKxBgCmx1+xJgpWELz852UQBFnu3ASHpdOwddiuyoGeGkJfAwnTQsG1Mcg9Ai5FfuRGPpCl0rGxsdGxsVGpTCqVSYdFfC5jgE7qppO6H49lEGuAF/D19ZVfT/Pll19mZ2dP1sO+WayRyWQxMTHyU1GGhoY0Gm2y+gDeOeMnofpb05CwhDPHbd57b8HHH//H+dpJTGc5A99C6m8k9TdTcAg6sYNB7mHRMDw2WSTgDIsFktFhqXRMJpOOjor5XCqT3EsjtNOJnXRi1xMFYg0ATIfxk1C9TSklmQ82btCGIGj1yp+SYgKo2AYaronQ10DGtlLx7TRiJ5OC4tBxAi5tSMgbGRaNSUZksjGpbGxkWMhj4enELjqhg07sopP+GsikLhBrgKeMjo6OX9by888/w2CwSXzwN441Mpns4sWL8m7++OMPgUAwid0A75DxWNPTmNzVkIxtzwm7f3Pht19BEKShsjoowKm/q4pN7qAOIOnETiYFxaZjeSzCIIfC51AEXJpwkCUZEXOYA9SBNhq+nUboeLZArJmz+MNiCpeLotCa+wdKW3tSClu9Q0oqGlGK7mt2emLdmri+1kfdTemnHWzk/8mb79hU8CicNtDCILbTCB10UheL2sdh4AZZRD6HwudQhVyaWMgbFgsYpG7qQBuN8NyxDK6tAf4mEAj27dsn/wemrq6ORCIn9/EnEmskEsnhw4flPVlbWwuFwsntCXgnPDXBGw3PIvWWlOWE/7HZ2MDQyO+2b35uWmleIoPYIeRgOfR+Nh3LYxH5HPKgvNiUEbGATe2j4ODUAcSLCsSaWUwqk47KJDTeYAeWXN6CSi1tvZdQ4RZccM0r58zFDPsjyXvN43ZsiNilF2WnnWioczezCqHolmenJ5fj66hPwiJzCd3FYfedtTXVLCyskpPiivJS4A2FfGYfn41h0/o5DNwgm/R4LLNJwkGmWMil4dupuLYXDWQKrg3EGkAmkxEIhC1btsjzw6+//joVS8ZMJNbIZLKhoSFra2t5Z8eOHQMbYc5Bf5+EgqdV5EdEh3j2t+UQe0rxqPpBHkMmE3C5VG9vD8vdZkW5SVx6v2yUIxYwBFzKIJs0yCYNssnDYgGLiiZjWyg4+IsKxJpZgD8sJnO5vWRaExpX2tqTVNASGFvt7F9w6kqa9eFoG5tYu50J+7YkHTRJPqiZelQt47RG9mXNgls6pZ56lQEGtYEGDVfVis5eeiSWgKUlpsTjWFMW1t2QlJUUmJsaSOgqIvaUkfHdoyM8mUzU09tht9fmnONRRHP5MJ8iHeGIBml8DnmQTeKxiMJBxpCQQx1AULCtLx3LINbMddXV1aqqqo8PBJqb83i8qXiWCcYamUzGZrM3b94s7+/SpUuT2BPwThjfE6qvNbWtIffUiaOXz+xD1qUzB5qGRSyhgDY2NigUCn813QhB0LatG/1vu3ci6oU86oiIyWeTeCzisFjAoqBI/U1kTMtLCsSad4JUJh2VjdF4gx04cgUcnVoKD0ypcgspvO6Ve+ZixtGjKba747cbRZgbxOzTT3bQf3ROL++6bom7TpWnXrW3Xo2vQa2fYW2Acf0dk/oA4zp/49rbxjBf4xof4+rbujW2v8fVdLzVCl3ASzzeE6o0FNWSVpCdsNdmZ9i9m9iOIh4DNTzEEQpoMpmkqanxHx98+Omnnxw+YBsTGUTC9w4LGUN8GpeJF/BoQwIOBQsn9ze/eCC3glgzl0ml0jt37nz66afyzODg4DB153kmHmtkMhmdTjcwMJB36ezsLJVKJ6stYOYbjzU9jYlMItzL023J4q/2224vzg5jElr5HIJIwBobFRcX5S7/5Uf5P5KvvvrSUF83NSl6kE0cZBOHh/hMcg8R3UDqb3pJgVgzowiGxRQuD0WhN/cPlMF7k4taAmOrnAMKjl9IsdwfaWMTY7sjbt+WhP3GSQe1Uo6qpjtqZF/WLHDSLfPSr75r1HDfqOmeceNdk4Y7Jg0BG+r9N9T7baj1M6m9bVJ72wTmKy/jGl/jGh/jGh/jan/j2rPrc656ZY/JxhT90met8VjTWZ9IJXRu/3Pb6lU/ulw/1dGYM0jv4XPJ4iGeVCK+cfXix//3H/lY/u67pfv2WiPhtQIuScClDQnYZEwLsa/x5WOZgK4HsWYOolAotra28n85H3/88b1796Y0LbxVrJHJZDgcbvyYkqOjo1gsnpS2gJnvyVhDwTYjWyp2mpn8+P0SUxMdT+dznc0FLGIbDQfnUHr6uurv+nvs2P7HP//5TwiCPvzgA3hT1bCALhbxGMRuQm8dEd3wsgKxZtpJZTKJbIw+ONiJI1e0olLL4PcSKt2CCq955py+mHH0SNIe+5EVjwAAIABJREFU89jtG8J36kbY6sYd0Uk9pZN5WSvfWbPMTbvcQ6fCW6/a16DG3wgWYFwnP/QyHlxum9TeNqn121Drt6FOXrc3yL/0nFjja1zjpVu11yy+uQ/s2TKFxmNNOyyeQ0OnxD9cr776px+XWe3+PSHCj4iuYxLbqANtPAa6rjL3xrXz+npaj6+N2GDEZxOEPJpIwCL1NxFQ9S8fyyDWzEHl5eVr166V/4PR1NSsr6+f6md821gjk8lwOJyOjo68aQsLCy6X+/aPCcx8T8SaBExHKZvW31CZcuKo1XfLFv/047Lt235LiL6LRzcK2ZhBZp90mMFlYJGtNf633ZxvXiLjuwbZeLGIRyd24ntqCKi6lxeINVOEPywmc3m9ZFojClfa0pNU0HI/tsrJL//klVTrQ1FW1lE2O2JsN8XaGcXbqccfVEo6rpZ+bn3ONa0CV53S23rV/vowP4Pq2wY1vobVPkZVPkbyX6t8jKp9jOVVI88o8rzyprHG3wh2UjPT+V6+ot+nWW481iBqYim4NgqhIzPp3ubfDL7+6ot1a1acPGZXVZLCoXQNMvuEHJx0mEkhdMOqCm5evxAb+ZDHwvE5ZJGARexrwPfWvmIsg5NQc8nIyIi7u/u///1vCIIWLFhw8uRJNps9Dc87CbFGJpNRKJTt27fLk42RkREWi52UhwVmsidnQiFq4gZ6amjEnmZYtutNR3WVNd9+89Xa1StsrXdGhvqTB5AiLmFESB3mU4Z4pCEeiUPHsGj9YhGPRmjHdVcO9Na8vPC9MFw3iDUT9MShF0olHJ1W1vYgtdotpPCqd87pi2mHDydY7Yjaqh/0p06IlU70Aa2E45qp5zWyrqvn39IsdNEqdtMp9dAt89Gv8DWo9DGs8Das9Das8DKs8DSs8DSs8DKs8DKs9DKq9DKq9DaqktekxBpfY5iXbpXtrvgu/MT38gVex//OhEoh4+AEDKIwM+LYYaufflz27Tdf6uuuv3jmWGVJBpuGEvPJwwKKmE8W8UhCLpFJQfNYRCGfiUfV4XqqXzWWYSDWzBFIJHLHjh3yVLBw4cL4+Phpe+rJiTUymUwsFh8/flz+GpSUlOBw+GQ9MjAzPTXBGwlLxHaWUQk9bU3l0WE+Nhbbli1d9N9PP1m18pddO7ZGht5trisRsAckIhqPgWVS0Cxqn1jIpeGRuK6KgZ7qVxaINa/0xFUv+NLW3uSilvsxVc5++Q4Xkiz2RVhaRVr9GWmzMXqPQfQe9ei9a2OPKic5qqVf0si6pVngpVPqo1vupVvmpVfqqVfqoV/qrl/qYVDiYVDqblDqblDqYVDmYVDmYVjmYVju+bieH2t8jKp8jap9javl0eS2vExqb5vUBpjU+ZnUvWasCTCuO6KZFhBdruj3dfZ7ck8oBCy+oz6F1NeIx3bAKjJ9PS5uMNL+/PP/fvP1l5rrVU8dP5STEd/X1TQqpIoHSWxaH4OM4jEJQj4Tj4LhuqteYyxXgVgzu/F4PC8vr88++0yeB3777bdJX5nm5SYt1si5u7svWLAAgqAlS5aUlpZO7oMDM8pTsaajPrWzIa0PWcQg9aC6W7MzYtydzu8w2/Tdd4uXLFn0888/bP9zy7nTDnFRQQN9bWxaH4OCEgs5lIE2bEcptqvilQVizTiJbIwxyO8aoFS2otPK2u4nVroFF1z1zHa8mHroULz1zsg/jB9u1XporhVutz7WXj3xtFrqZZXsq6o5NzVynTTzXbQK3LSLPHRLPHSL3fWK3fSKXPWKXfWKXPWLXfWL3R5XiZt+ibtByXim8TQo9zIo9zas8Das9DGs9DWs8jWs9jWs9jOo9jeE+RnW+OhX+epX++hXe+pWeulWeepWuuqUu+pUuGpXOGmVOWuV39QuvWxQ4LGhyu81Ys1tY5ibTqWtRVwfla7o93v2ezLWIGsTO+pTuxozCCgYg4xubaqMjbx7/vRhY0PtxYu+/e67JcpKq/fZWty6fqG8+BGT3Muk9HKYA4JBBq6nGtNZ/jpjGcSaWayoqEhXV1ceaD755JPr169P/8p2kxxrZDJZeHj4Rx99BEHQRx995OvrC5a0ma2ejTXdTY96WrLRbflUbCud3N8Gry3MTQp54HXogPV6DZWffvxu8aJvlNetOulwiE7sYtPQQwI2BQfHtBdjO8tep+ZUrBGMDFO4gygKvQk9UNaKSi5sDYytcvLLO3ElxfJghIVVuOWf4Va/RVjpR1gpR+xZHXVoXdxx5aTzqunX1LNdNfPdtQrdtApdtQtctQtctPOddQqcdQpcdAtcdAv/qiJX3SJXvSI33SI33WIP3RJPvVIPvVIv3VJv3TJv3XJv3XJf3YrbepVeuuVO2kXO2sU3tAovaOZc0Mw9tz7bQT3dQS3DXj1tn1qinXKinUainWGCnWGi3YYEu20JdtsS7HYk2O2J32sTt/9g/L6TcbbHYuzPJ9tdirUwiQ0wrvf/K9O8KNYEGNYd1E0JTZ3MJdWBF3kq1nQ2pHU3Z/W25GA6ShmkLuJAT0NtaXZ6lI/HtR3bN6uprFv47dfLl/+orLQmPiaIz+znMnACHk3+weM1xzKINbMPHo8/duzYhx9+KM8027Zta2lpUUgnkx9rZDJZYWHhd999J39tO3bswGAwU/EsgGI9N9b0tuagEYV9yFJ8L4xD72PR8Bh0R1N9aX523IO77mdOHtZcr2L2xyYiBs6hoUUCNhnTgkYU9reXvFbNxlgjkUnp8kMvcHRqKfxBSrVrcMEVz6xT51MOHoy12B62Wef+Vs3AXRohe9QiD6nGnlBJPK+Udlk545pq5g217FsaOW6a+e5aBePlplXgrl3gplPgql3gpJnvrJnvtD7vhkauvK6q5VxVz7miln1RJfuSSvZ5tcyTGmknNdIc1qcc0E44oJ1gpxNnqRdpqRe12zDiD5Pg3w2Dtm8Ms7WKsbWKPbA/wfF8muO5tLNXHt3yzbvpm+cWWHg3uSIgofxhWnVaGTytDJ4Da6/vwjZ0YeFoApHJITI5DD5f/kqlMqlnUPFx7aw7Jg0vP1rjZwxz1anYuy+exh9U7N/OHPHcWIOC56MRRf0dZWRMM485QCVhejpbYJU5GSnhHi6X99tZLFu22P+2yyCjj0PHCng0TGd5H7L4dccyiDWzyOjoaEhIyA8//CD/ob9y5crY2FgF9jMlsUYmk3V2dv7222/yF/nLL79kZWVN0RMBivKSWNPfUY7rrh7ohVFxbVwmjsemUIj9GBSciGt7lBZuf2QvpqeRTe0V8VlkTDO6Lb8fWfSa1Yd8J2ONYGSYyhtEUxktGEJ5GyqlqDUwtsrZP8/hQpK5XaiFZZjFtlCLX0MtdEItlEOsVoQeWBXlsCb+zLrkK0oZLqo57mq5bmq5bmq5rmq5rup5rhp5t9SzL6tmXFZ7dF41/aRK8imVFAflxANKsQeV4vati7FcG265JsJKNcJKL9JKL9LaONJma5TN71E226P2WEfvsYq23RdjeyLGxj7q8NmEyx7Zlz2ynQLyHyZUP4ivjkivz6luz65qL2nqaRsgwnGEDgIZx2DhGCwSh8sbEnGHRILhiazjAO8jWG+J9Teof+W1Nf4GtUc2pCaVKuaj3hz0oljThyzGdFbguqvxqDomqWuQTWIzSQPY7v7eFgoBceOqo7+PE4fay6ZjBFyq/GDq649lEGtmAbFYnJuba2pqKv9Z///+3/9zdHSkUqmK7WqqYo1MJhMIBFevXv3HP/4BQdCHH3546dKl6ZncBUyPV8YaArqe2NdExsFphA4OvV/ApQwJWU0N1SePH+7rqmNRukV8JrG/sReei0YUvHbN6FgjlclYfEEPjlrd2pdRhniQUO3xsPC6e/aZc6lHD8TZ/Bm+Vff+ZpU7O5QfWq4Ltl0VdnhF1PGfY4//HHdyeYLjioRTKxLPrEw6tTbRXjnWXjnuoEr0HvWIPeqRlpph27WDdmoFb9N5uFH/3ka9e9t+e2htEWllHmFnF3PyfOqJMylnr2XcvJ17wzfXNbDwTmJ5QEJ56CNYWnlbahk8r7azqWegvgvbjiGR2Fwii8Oc9h1qpTLpVa+cs1p5AcYNL481fia1N7RKjp1J4Q2JprnJOevlsWagp4bQ10DCNFMGEAxSN4+F53Opw2L+nQCf29432ZRuNq1PwKX2txej2vJffyCDWPNOk0gkycnJ4wcv5Bs8VVdXK7ovmWxKY41camrq0qVL5S9bQ0MDHLaZNV4n1pD6mym4NsoAgoyDk3FwFrUXi4IX5aYQ+ltohHYhn0nsa+htzUa35b1+KTzWDIlHGBw+hsRs6yVUtfSl58GDI6vdvQtOnE/abhtktuPBlo33ftX1/1XF3+BHb+3FHibLfH/97rbp935bv7+7e/VD6/UhVutDLPVCrDaFWW4KszILs7YMt7aMsNkbYXMs0vpo5NHzCVc8si67Z7reLQhKqAmMq4rJapAfQSlrRSEGiG04YheRMsBk45gsEoc7KB7iDolEozN6v6RKJNraNM7PoM7vVRO8/Q3r9hsnpVeAqZTT53ViDRnbShlAUAbayFg4ZQDBZWDrqotqK3NoBCSTihZwKf3IQhQ8943GMog176LBwcHU1FRDQ8PxQKOsrBwSEiISzZTPIVMea2QyWVdX159//il//e+9996hQ4fA1TazwGvGGjIW/ndhWik4OIPYTsHBKbg24SCDgK7tbn7U25r9JpXTM8WxRjI2NjwiGRoeJdK4LV34AlhXbG6Tf2z51bvZ9i6Ju86Fbdh/V2275zKDa99rXf9Z6+Yv2rfWaDgbGPmabXuwfdtDG5sIh5MJDicSL17LcPHNd/LJ9QwqvpdYeSehIiK7PqMCkVbeVlDfJT+C0oklk9hcIovLmTH/KUy6UdnY2ZsZFzQL7pjUv3zdmgCT+itaRacupw+PgakGk+aV69S/Zqx5ciyTMC00PIJOQJIwLQxyL59NRrfl9bRkvdlYBrHmnSIWi6Ojo/X09MYDjZqaWmhoKP+v6+dmiOmINTKZbHR0NDw8/Pvvv5e/F0uXLg0KCpo54Q6YgJfHGgqmgYGHkzEtpBcVtlXIY+BRtV1NGT0tWW9WzZlTGmtyqzrO+2bsuxpjdz1277WYHWdC91yJPuKUaHM56oxPmmd4kVdYcWR6XWFVV1FlVy28v2uA2oGjoCkMAouLZ3Fog3z+sJgnHhoek0zd+/8OyYN12G6I9zese+VyfAGGdTYmcYWNM/T67pmDLxaz+UIuX4SncjBEZj+e0dpJaGjH1SEwyYUtYem1QanVnuFFnuHF9xIqOvpesZ7hS2INrruKPtBMHXjhQCb2N9FJPYNsMgqe29386E3HMog17wQcDhcaGqqhoTEeaDQ1NWNjYzkcjqJbe45pijVyWCzW3t7+/fffl78vJiYmjx49ms4GgEn0kliD76nKSQ3NTQ2n4eAUXCuxv+nZImGaBTzaQE9NZ0Nqd9OjN6spPlrD5PAxBAaGyGTzpnvFhdmHLxYfOZF0ZX2Rv8krYk2ASd0FrfwLTllDIzP6hNrkksiko7KxUdkYic3FUJn9FEZDJ7YKjq6G96WVtCXkNcdnN/mFlXmFFHsEF11yfeR4NfXkleS9R6J27g/edvShjvlt5Z3ua/50XfbrdVULz032gXuuRJ/xSfMIKwpOq8koRVS19LG4r7iU6kWxBttZhkKUxIf7N1ZlsUjI5w5kQl8Dndg1yCb2tmR3Naa/8VgGsWYGk0gk+fn5hw8fXrx48XigMTAwiImJmcn7P05rrJHLycnR0nq8U9qCBQvMzMxqa2unvw3gLb0o1pDQVZEPPbfs2W5gs/X27Vs0XCupv5HY90z1Nwl4tIGeqo765K7G9DeuhtSOmXfJMPCstFL4Hp34AOO6V26eEGBQZ7Uxtrbz3TtDLZVJx2RSrkjEFAgYfAGGxkRR6L0kWiNqoB6FrevBZlYiU4tbk4ta78VU+oWV+oeXXXbLPHMjzfFqquW+sN12oeZ7w8x3hlqYhVr8EWppHGxhGGymH7hROcBwjY/mKg+lJU5KPzirKLnq6nobbvIz2hWwZV/ggYuxl25nBsZXpRfD6xAYNJ5OpvO4fNHI6BsfI3xurEG3FWA7Sq9cOr7xwO6Ne8xK8xOYRAThmYFMQNfTCZ08NrGnObOzIXUCYxnEmhkIhULdu3dPQ0NDPulHvhCdsbFxWlraTDvl9CwFxBqZTDY4OHj//v2VK1fK369//vOf+/fvb21tVUgzwMQ8N9ag2/IGukoP7LNwSQpyq0/SsDLNSg5hEtsI6PqnitjXwOdScV0V7bUJnfUpb1wg1rwL2EPCg4cTnbTL/E1qXx5r7po0nNHMue6dK5GNKbZn6V+HT8TSUTyTjaEw+8h0GLK/Co4ub+lNKmqNzW+KzmnwjihxDytyDyu66pV1yTXzovMjB8ekow4JR44l2JhHWm4PNzcL3aR1b6Pm3c1a97ZrBO1SDzZXD96rEr5POdJOOeLQ6siDKyP3LQ8//GPkoe8i9/wUarkyeMfqQDP1+38YBprqBOz+M+Tw4bhzl9Nc/PLvx1fGZDUW1HQ1dQxgSMxB4dDkvuTnxhpsZ0l5TuTOveYR7UXWIdf/tDXDdFRRsM1PDWQ8qpZG6OCxCN2NGR11SRMZyyDWzBhisTgjI8PW1nZ86wMIgn788ceLFy/OkFlOr0MxsUaOTqe7urouXLhQ/t59+umntra24MjNu+K5sQYFzyX2VhzcZ34mwiewJ9/o4p4bl07wqB14VN1TRUDX87lUbGc5EhbXUZc0oQKxZqaLyW3cp5sUYFj38q0u/UzqvHVhNttikTjiZD21VCaVyMaYAgGTL6DyBtEUei+Zhugj1XZjanswVR3o9LK2lOLWpIKWu1GV/uHlviGll1wzz97KOHQs3sIuwmJ/uMW+cIvdEZY7Iyx3RlhtirD6LdLaNNJaN9JaO9JaK8JqdYTN6gib1REH1sYcXhd3eG3sSaXEU0pJjkpJl1TSrypnXFXKcFXJdlfOdVXKurw27cyaJPuVsQeVoqxWh+5eF2yhG2K5KcxqR7jtgUi7UzFnbqV5BhaFJcOyq9ob0QNdRCqexWEJheJpuXT6ubEG015cX5r0h+U2//q0G9XROpYbizOiGHj4UwN5oBdGxbfzWPiuhrT22oSJjWUQaxQLh8Pl5eXZ29uvXLly/vz58p/IH3/8sampaXx8PIVCUXSDb0aRsUYOjUY7OjqOZ8P33ntv586dOTk5iu4LeIUXnoRCVSaE+Rrv/3N37E31/VvC7rszia3P2ZQbBeNzKZjOUkR1THttwoQKxJoZjczm7t+X4KxV5mcMe3ms8TeuP6uX5x9e/qKHGpNJR2SSEZlEODqMo7EwVEYvkVbV1lfV1lfa1JtY1BKX3xQUB/MILXIPL3ILLrzqkX3ZLeuiS+bxk8kOJ1KO2iftMY+x2RX9p0no79pBW3SD/tAJNteOsNCKtNSK3K8Zd2B9/KH1CSc0Uk5qpJ5SS72kknlFJeuyatZVtexratnX1LNvqOfcUM+5oZF9a32u8/pc5/W5bpr57poFHuvzXdfn3VLPua6SeVk544JS+tm1yQ5K8QdVo200wndqBf9hELj110Ar8/Ajx+LPXElzDyq8k1QRllWXU9NR34lFk+jcGTBz4kXX1hB6Kq9cdPj1ot22kIu/Wm5uqXxEwTY+NZBxPVWUAQSPie+sT0HC4iY6lkGsUYCurq779+9bWVmNL8Iit2rVqmvXrtXV1Sm6wQlSfKyR6+7uPn369KJFi+Rv6/vvv29sbJyQkEAmv+IafkBRXhRr+hBFJBQsMsTHYJP+uXNHcd1V+F4Yrqf6qRroreFzyJiO0raqaCQsfoJVE9sGYs1MFZhUdUAz9a5Rva9xzUtijd+GOh8D2J+7wyLK6jIrECnFrQn5zQERFQERFd4PSy+6ZJ53yjxyPMlyX5TlgSirfVE2FjF7dsfs2RW7d0vc3i3xezfF7TNM2GeQYKMRu18p8YBy4kHlpOOqaSfU0k+opV/QyL6okXN5fc5NrYJbWoUu2oU+OmXeOmXeOqWeOiWe2iUe2sXuOkXyctEpcNEpcNUpdNbJ/7u081y08101813W57tq5Lto5F1RzzytmmqvlLBvXYzVuvDdqqEWBmFWm8OtdkYcOhlvdzLm9M00jwdFYam1mRWIum5sF4mCZ7Gn7dDLBLzkkmE0ovTyleO6v+nGRwVQcY3PDmRsdyUZB+cy8R11yYia2AmPZRBrpgeZTK6rq7t165auru6TZ5rmz5+/fPlyGxubtLQ0Ov3d3l92psQauf7+ficnp2XLlo2/1ytWrDh37tw7dFZv7njJTChsZwW5r5bQVUVCwfC9NdiuymeqAtddNcgm9yOL4BURiOqYCVdbFYg1MxGexba1inPXrbxtDHtlrPE2qdn/a/Ju42hb/QRb/UQ7vSQH3QwH3YwTupkXdfIuaudd0sp30Spz1Spz1Spz0y530y531y7z0K3w0K3w0C330qvw0q/wNqjwNaj0Naj0NqjwNij3Mij3NCjz0C/10C/10C+R70nuplfsqlfkolfkolfoovd4109X3UI33cfJxk2n0Ekz/4ZGzlW17EuqmeeUM06oJR/SiN+zPspCP2LXxrDfTQKtLSKPOiSev57hcrfgTmJFZE59DuzxoZd3dPGhl0zwHuipJqNqCd3VJHQtrrvq2bGM6SgnY1o5DFx7bUJbVdRbjOVoEGumglQq7enpSUlJuXnz5s6dO1esWPHkgZl58+bp6upevnw5Ozubx+MputnJMbNijRyJRPL29l61atX4W//RRx+ZmJhER0eDdfxmjpfEGkxHObarAtddieuuxHZVPK/Kcd2Vg2xSH7KwtTysrSrqLQrEmpnIJ6zkmGa6v1Gdr3HNy2ON/JLh+yZNgcaNd40b7ho33DWqDzCq8zeq8zeC+RnDbhvBfI2qfYyqfYyqfIwqvY0qvQ0rvQ0rPB9XuadhuYdhuYdhmYdBmYdBmbtBqbzcDErc9Evc9Uvc9Yvd9Ivd9EvcdYs9dEs8dEo8dEo8tUvcNYuvr889r/7ouErqUY0kW9UYS/VIa8Mom9+jbHZF2R6M2Xcq9sytdI/AotDk2sxKRAMK10EgDzDZTIFgSDJDD71MwKv2hHrJQK7AdJSRsS0cBg4Ji4NXRrzNWAaxZlJIpVIMBlNbWxsUFLRnz561a9d+8cUX0P/69ttvTU1Nb9++DYfDZ02aGTcTY42cQCBIS0s7cODA559/Pv6XsWjRIisrq4cPH/b19Sm6wbnupcvxlb2qSjGd5Tw2Ed2W31IaAq+IeJsCsWamaceQzbdEeepWPs40rxFrntzqUv4tPsY1PsbVPsbVPkbV3kZVf1Wll1Gll2Gl1/NijadBuZdBuZdBubdBhY9+hZd+mbtOiYtW8c31BdfX511Wyzmtnm6vmWynHWehG/mnceg202Abyyh7h6Rz1zI8HhbdTa4Iz6rLgbW/04deJuCFsaa9pL+j/OVjuQ9ZQuxv5tCxiOqY1vKwtxvL4SDWvKXu7m4zM7Pxyzme9MUXX5iaml64cCEyMhKNRiu60yk0c2PNOAwGExAQoKOj8+9//3v8b+jLL780NTUNDAxEIpFcLlfRPc5FT8aa9trE7qaMv2JNUX976auqBNNRxmMR0fC85pKg1vKwtysQa2YWp9v5DuoZAca1PpMda3yMKr2NqrwNq7wNK70NKn0MqnwNKn31q3x1q3z0Kp21i69o5jlqPDqqlmKnmmCjGbvHOMZ2a4zt7pgjpxL3nYw9czPdI7AoLLUusxxZ24XpJJIHmCymQDAkmUMLAD7ryVjT2ZDc3ZTxd6x51VjuQxQR+5rYdGxbVVRLWchbjmUQa97SuXPnxn9Kfv755+vWrbO2tvb396+srMThcHNkZf93INbISaXS8vLyW7duGRsbL1iwYPxv7sMPP9TS0nJwcAgPD+/t7VV0m3PIeKxBtaQ0lERWF4Rj2/NR8Dw0orAPWfSqKuxvL+axCCh4blNxYEtZyFtW84tjTZjPgc8/B7Fm+rSg8LtNo27ry0PJxGONrzHstnGNnzHM37DW3xDmZwjz0a/20K1w0S67pVlyXaPwvGbOcZ2Mg7pJtsZxVr/HmJmG2lrFHjuRcuHGI5e7+QEJ5RHZddk17XUdGDSJzhaCBaNf6HGsKQvrqI0vzwlqqUrAIPNR8PzXGMhF6LZ8ArqeTeuHV0Y0lwa99VgOfkmsObnPFMSal7O3t4cg6KeffkpMTGxra5NI5uL+Le9MrBknFAqRSKS3t7eBgcGT56fk4VRTU/P8+fNZWVkIBIJIJEpfuckbMFHjsQbTll786P7R/TsSI7wIPaX97cVoROGrqqAPWcRl4ntbshsL7zaXPHz7ejbWlKVca8y+EeV36N///md7e4ei37A5QSIdu+iSdXp9tp8x7JWxxn9Dnf+Ger8NdX4mdf4mdQHGdQHG9XeM6u8a1AcY1LnrVd7QKT6vmXdKO+vQ+pS9mgl2Jgl22+L3WsTtOxS33zHuzK10j8Di0OTazEpkAwr7+NCLcK4fepmA8VjT25Ty8PblE0cs60riiD3lfchXDuRCFDwPj65n0/pby0ObigPffiA/N9aUp1yB599ysDXR0dVX9Ls1o9na2kIQ9Ntvvym6EUV692LNkxAIRGho6NGjR5WVlZ86j7hgwYKff/7ZzMzs7Nmz9+7da2lpUXSzs82TJ6F6m9Mq8kKPHTS/7X6+D1FA6C1HtxWg2vJfXHloRAGXMdDTnNlQENBUHPj29VSsqc1yqc28FeRhp7Jq0bLvvgMrBUyPijaU9YYYX/2/zh/9FWtum9T6mdQFmNTdNWm4Z9J416TB36je16DWU6/GTa/SWav8sk7Rab3sIwZptoaJ5r9G79wUsdc6zuFE6oXrWfKrXsKyarNr2us6MSgiDRx6mVxPnoRCtz6KDnI+tHfHo4Q+LWEOAAAgAElEQVR7pN4KXEfxSwdyfu//Z+8846K4ujA+GjWaNybRoNHYsCv2LhpFRQQrotiwK4KIoqhgQUBAEFAsiKCCWFBp0kF6Z6kLS++9984CC+zzfpiVJokmllWZ/28+7F7u3j077J195txzz4lyzk0NrixOj/QxDvcw+CRzubOsCbTXCHW65mN1RenUprEjfzsqeYzbZ+urZvfu3QRBiIqKctsQbvJty5p2KioqoqOjHz58uHPnzunTpw8dOrSbyhk6dKiNjQ23zfyuaJc1aZGvA12Ngz2fZsS4qCnJnpY94GZvnJ/imxHrnsJ48zeHS2q0a3VZTnKEfeib2+HuBp/kCHW9E+x8M/TNjUiPm1YPz24VnvfnyOESew9Qq5Nfhla0KajaKy5x0V8TcnsN7c6a4LurQ/QFQvVXhegIBF5d4X1xuetpfifppbaSf1kfFbY6utXyyB5zGXmrI2denlWz0zb0fPw62N43JjgxI6GAjHqpo1wvX4B2WRMfYu7lYJRMtwtwe3pSSkJb7WxMsF1+im9atOvfzeXkSKecFFplUTrd62GYm/4nmcikrAl2uhHhdiPU5fodtYOzp42eMGGCppb297dt5xPCZrNFREQIgti9eze3beEm34ms6UxtbW1ERISFhcXVq1clJCTmzp1LxuJcvnyZ26Z9V3RZhLK7L31Y3OKJTlG6/8vHukcPbNdUPR0ZaJ2X5J0R65Yc6fzO4ZQS5VJdlpMYbhvsohfqpv9JDrqHfoyPgYfF1WN71478Y4iIyAYPDy9un6dehIN/rPiyp+qLvC8ue3NmhYP0yteH11oc2PJyu7Dpob2vTsm9vnjV8Zq++11zH1PHYKeguOD4zNT8kor699SXpvjctMualAhr0/uqssd2RfiZp8e4XlOWO7J/27OHWukxrrlJ3mnRb96dy0kRDtlJQRVFaeGeRiGudz7JRA5z04/yusfw0jczOL12xUyeYTwnT55Oo3a/vg82m7127VqCII4cOcJtW7jJdyhrulFeXr5w4UKCIFRVVblty3dFt0WoQDfTMzL7tNXO5CV7JUc6XVc7c/TAtrs6FyP8LQpSvNOjXVKinJIjHd8eDilRTtVlWYlhNsHON0Jd73zkEeZ2N87/QajrnSund44dxTNv3oKXr8xZLOpG/8vBZrMv6NmL7zM9dtb8vJqdjpGniXWwg19MaEpmfF5BNuV6+YpplzVxtFdpUfYvTbSOHdpu8+J2VT7Nx+XxmRP7TkrvefVYJ5XhnJPokcpwTo7smMuJEXbZSQEVRanhHvdD3tz6+Lkc4XEvPuDhG3ON/eKrRo7g2bZ9J51OhRB8EK2trYsWLSII4tSpU9y2hZt8/7IGwIoVKyhZ88npvAgV5GYS5P4kI9rl+tXTMkd3utkZFaf7Bro9vSh/5PC+rVoqckEez1KjnHIS3DJiXJLpDkkRdsl0h6rSrIRQ6yBHnWCXW//5CHW9zfA2iPK+d0dDavG8Kby8E7R1btTW1nL79PRGyqvry2sp18u3R6edUOZuNvfiQqxDvV+clN6jckE6NuR1Yaq3uam2zNEdUofEnz7QiAm2zoh9k5PglspwSoqwTwizyUr0Ky9MCXW7R3O++TFzOdz9Toyfob+D7uljW3jHjli1WtDRiSoO+C9obW2dNWsWQRAXL17kti3c5PuXNWw2e/ny5QRBqKmpcduW74p2WZPBsPVzfihzdMdTI43CVO/Xz29KHtymrCgd6W9RmRPo/8ZUU/nk3p0b5U/sM7yl5OfyODXKMTHcNinCvrIkMyHEKtDherDzzf920N3vRHvrvzA8v3Ip37ixY+ROyxcUUKHBFBT/js47oZ7cV5WR3Bnk8Sw92vnmtXOH94ka3VLKS/LIT/KweXHrjIzE/t0bVS8ef2GsFRVomRLpGB/6OjPBr7wwJdT1Ls1J979N5BAXvWhv/dA3epqX9k/g/YNvxqyHDx8xmY3cPjHfGLW1taNHjyYIQkdHh9u2cJNeJGsUFBS4bct3RedFqMQw60A3U3nZfepKJ1Ii7VOjHG9ckz8osVlXQ54RaJGf5JEQZvvEUO20jMT+3Zse6aukMRwTI+wqSzLigi387TSDHHX/7RHuqsfw0nd6rrx941IenqF79+6PiKBz+5RQUHyTdN4JlRzx2uKpjuTBbS8faxemega5Pzkvd1Dy4Lbnj66lRzvmJbkHeTzVUTstfVhc6vB2byfjFLpdZrxPWUFyiMvtQHvtfzuRaU66kR63I9xvG2rLLJk3afTosVfVNMrKyrh9Sr5J4uPjBw8eTBCEubk5t23hJt+/rAEgKChIEISUlBS3DfmuKCwsnDp16suHV9Lo1jFBr1Kj7BPCbHSunj5+RPz185sl6d40jycqF6T279qornTCw86oKNWzNMMn0M3Ux+lRYvjrhDCbypKMWNorP1uNQAftDz9oTjrR3rc9LNVkD28YOXzIqlWCHh6e3D4ZFBTfME+ePps/Z1ps4HOyeEJmjJP/GxO543uUzkuGeT8vTPGwfn7jpNSuowfEDPUu0f1eVeUGZMW6uNrcD/cxiw+1yojzLitICnbWC7DT+ldzOezNjSjPO6/unxNZPXfc2DHSx09kZWVz+2R8w7i4uJD7Y8LDw7ltCzfpFbJm69atBEGIi4tz25DvirKysunT+WSPiqZH2SSGWsWFWCVF2KRHO1g/05U6tE3xzMEQr2cFyW7hPmaayrJH9otKHhS7o30+yM00KdwmLsQyPtS6ojg9lvbC1+ZqgL3mhxxBjtcjPW4GOlxXlt8xdeKo2XPmPTd70TvTaFJQfEKsrKyH/f6b1WONDIZtXLBlXIhVapR9XIjVzWvyh/Zu1tdVTI6wzU90dbK8c/bkvkMSW86c2PvC+Fp0kEVC2OsYmnl6nFdZQSLNSdffVuMD53KIs3akp56TmdJu0eXDeYZu2y4eEhrK7dPwzWNoaEhWhs7Ly+O2LdykV8iao0ePEgQhJCREJR3+hLS1tdnY2IwcOUJWcnsGwy4p/HUszSI22CItyi6GZn5b6+whic0aV2R8nR+WpntG+r94/lD90tnD4qKC+roKieHW8aFWFcXpMUFmPtYq/nYa/3wE2GuEvdEOe6NzW+3QHL6xkyZNun5dp7KyktvngILie6C+vv7kyVOj/xz2ylg9O84pLtgylmYRH2qVGePo4/RA8fSBo/u3Gt2+lBhuXZTi5u1oZHBD8YSkuIS4iJvNvYQwy7RYj9L8xCBHbT8btffO5UCHa3R3XW9rtVNHREaN/J1/2V8Ojk7UlfmToKioSBDE7Nmze3mdxF4ha86cOUMQxOLFi9va2rhty/eGn3/AuHHj92wXSgi1TI54HRP0KiboVUKIZVqUrb/zQ9ULkockNinI7fewNUiNtM2KcYilmQe5mcTSXsXSLCqK0qIDnnlbKvnZqP3d4W+rHuKsGeZy/dndk2uW8f0xfPgpOXnKU/1NkBNf5mIQBSAtvMjtAaOt9d/NvuzY0urSBgDeT+NjvHI+i4kUnVC6ojKMZ4iB7vmsWMf4EIuYoFexNPOkMOuUiNe2Zrpyx3cd2rtJ79oZuu/zDIZdVqxDqOeTMO+nMYEvUqPdSvMTAu21fK1V/2EuB9iph7+5TnPQ1FDcPWva2BkzZhmbmDY3U3v+Pxl79+4lCGLz5s29PLdFr5A1mpqaBEGMGjWqgcq5/hmIimJMmTpNRHAx3fdZBsM2lvYyOuhldNDLhFCLDIZdgOvDW5pn9u1cL3lAVFf9lJPFrVjaq1jay1iaeXlRKiPgmZfFZd/XV3s8Au3UI95ct3usuGsL/8g/eLaJ74qKYnD741J8KAyPrGtbbFtb2pKDC9wfRre1/AtZU1PWcGe/S0FKJQDPxzGx3pSs+RLc1b83ZMhvGpelMhl2SeFWMUEvo4NexgS9TKFbJ0dY273QvXTm4K5t687K7n1w+2Kg66P4EAtGwPO0aNfSvIQAO00fK+W/m8shTpohTpoGmpLzZoybMGGCiqpaeXk5tz/ud0VjYyMZRSorK8ttW7hMr5A15ubmBEH88ssvycnJ3Lbl+yQzK2sp/7JZfBOeGamm0q0TQy2iA8yiA8yiA80SQsyTwy0Z/s+tnmgqnt63b6eIkd6FxFCL2KCX5YUpDD9Tz1cXfKyUOx/eVsr+NqphzpquZhel960d8yfPGsG1Ts4u3P6UvZSijKrijOqijKrEwPwmZguA4szqaM/s5JCC9rWDgpTK0uyaovSqaI+s4kyOAzzWJ+fmHqfmxpbacmZJZodXPCe+LNozOzex41etvrop3j831jsnM7oEAJvNDrFNuSps7f00tracWZpTU1vOJHs2M1uSaAXRntkVBXVkS21FY1ZMKbO2OYmWH+uTw6xt/vyn5HvG3Nxi2LBh4ptXBbx5mBZpE0d7Sc7lmKAXSWGWiaEWNLdHhjcUZI5slzwg6vb6bjztRSrjTUluvL+thrfF5W5z2cdKOchOLdRJ4+mdE8ICs3l4fpeSPpGYRF2HPz35+flTp04lCEJXV5fbtnCZXiFrQkNDCYLo16+fpye1ZeZzUVVVdfjwUZ7fhxzYJRLsbpwW+Tom0IwR8Jw8ogPNEsMs0qNeB7k+9HYwiA54Hh34oqwwJcr3scdLBW9LpfbDx+pKiKOan7XKldNbx4/hmc4388mTZ42NVAYLruH2gHFdzO7u4Td3D70pzamJdM3Q2+v8VMHv7qE3zy74NdaxANjrRWhttTW75P9SOVB7u73fywQAcb65N/c4AQh3SH90yqu1lc1qbrW/GX5LwvmVSpCBpJuzfiSAzOiSuwffmJz2tlCjaYnaehjHAHihFHBZwPz+MffchHJz1SDvp/EAKgrr7h11fXTK+5VyoP4RV4Z7FoCU0ELNLbbGct5Pz/veO+J6a59LZRGVEvCj8PH1nTtvweg/h+lclU0Ot0wKs2ifyIyA57FBL1LpVknhlh62+sHuxgz/JykMl5LcOD8bNS/zi53nsv9r5XBnDbvHZ/dtW/bH8KFbRLeFhoZx+8N9twQHB//www99+/a1tbXlti1cplfImpycnB9//JEgCBMTE27b8p3j5Ow8Z868aZPH3tY6nRDyMjncIiboeZTf0/YjNsgsJsgsyvcJw/95WWFylI+xu9k5L/NLXuaXvC0uBdkqB9mq6ClLLJozfuy48Zpa2hVUXDC3cbxNP7/YLCEwv66qKTO6VHeHQ2JQPoDmxlbD4x5vDBkALNWDNTbZlOfXAaC/ydDebl9TxkwOLiBlTcjrlHtHXAEkBOapb3hdmFoJIImWf/egS1Vxg71euP3NCPK9whzStLfZNdazqorqdXc45CVVAHh0ytvtYTSAJwp+j8/6sJpaAYTZp2mJ2lWXNGRGlZye88T9UQyAuspGHXEH90fR3DhP3xW1tbXKyqq//TZkrcACJ4sbqXTLxNBXDP9n7ROZ4f8sjvYiOuAZ3cckOdKpOCfW11rV86UiOZd9rS6H2Ku6vbgge0CQd8zwlQKrHRyduP2ZvnP09fUJgvjzzz9TU1O5bQuX6RWyprKyctKkSVS1yy9DVVXVxYuXR/zxx5oVc03vXYryNU2NMI8JfBblZxrp+/bweRzl97SsICnS+5Hbc3nPVxf8rC/T7K480ZNas3z6mDGjjknL5ObmcvujUACA/c1w03O+5GP3R9FXVlv4v0qkWSeHOaQ9VfTTFLUF8Foz1FaHs0G3rZWtJ+GUElaUFlFEyppQ21RDaXd2G9taK/SVSlD7yHWVjc3MFlZja3lebXZsaYxXtvlVmtZWu5rShqqiBt0dDnmJ5QBMzvj4PIuvKWPqbLfPiComX9vS3HZjp0M6vTgzukR7m31dBcef91I50O5Gr07a8QmJjIxcI7huGM9vModFncx1k8NeJoW+ZPg/ifLtmMsR3o+S6I7FuTE+VsoeL857mV8Isr3ia3VJVX7rhLE806fPNHrwqIHJ5PZH+f7Zs2cPQRDLli2jcl70ClnT0tIiJiZGEISYmBi1GerLEBRE2yOxl4eHZ9miGcrnDwQ4GySGmCWFvogNehblZ0r3No70NS0rSKJ7PfB8KR9kp2T9QFZ8/QIeniG7dkuEhFAZLL4i7G+Gt2sRe71wrS22trphlurBlurBtrphAeaJAKyuhdjpctYXWlltehJOyaGFXWTNcY9WVttjeR/H292TQScG5d899Mb4tLf9zXAL9WDdXY41ZczKwnrdHQ65CW9lzfP4yoI6HXGH/JQK8lXNzBa9PY7pkcWZjBK9PU7NzBay3exygMOtiM9/VnoLbW1tJo9Nl/Iv+2P475uF+R/dVmD4myaFvkgMMYsJeBrp+zjc60FihH1xTrSPlZK/1YWA15fuXJVYPJd37LhxKqpqpaVUvuAvQXNzMxlY08uLXJL0ClkDQEVFhSCIWbNmlZSUcNuWXkRSUrL82fN8fHyjRvIclhB5cv+Su82taH/T1LCXCcFm1aVpicGm9sYyMvtXjxz224qVlKf6a8T+ZvjLK4HkY9/n8XoSHf+j0tzadHoxAAu14FfKnD71VU3q619nMkq6yBopd7Dhash4JOdFdmO3sZ31I+kuGTriDh6PYsilpcTA/Oti9u2ypjijGoDxaR/vp3ENNU26Ox2j3DLfvkuj6jqrrOjSTEbJzd2OTfWcHa2UrPkc1NXVubq5bdosOmnihBnTxqmc3//6qUaAs0FSiFli8NP0GJfKooQQB1XTm4eFBfjGjB555KhUenoGt63uRdDp9IEDBxIEYWlpyW1buE9vkTUvXrwgCGLQoEF0OlU56EtTWlr24MHD9es3jhgxcupk3rUr50vu33hb81R8lO+ta6emTRw+nW/mY9OnVAaLr5PXWiFPFfzIxzVlTJ0dDpbXgkuyqlPDCtVErN0fRgOw1gpRXPqC4ZlVkFr5SiXI4JhbE5MV55urtdUOAM0q+c5+ZwBFaVWaoraBFknl+bVuDxja2+0zGSU64g72N8OrSxvSI4vvS7ldWWNJLkJpbLRxfxhdW858dMqbjOBxNWLc2OWYGl5YkFr5SjVI/7BrQ01zEi1fS9S2qY7z5TE952ujTXn7PheRkVEXLl6aO3f+H8OHLZgzdYsw/9nj262f32SEe+zdxs8zdPBWse0BgUHvH4jik3Lv3j2CIAYMGJCSksJtW7hPb5E1oaGhv/76K0EQL1684LYtvRQWqyUzM9PJ2eW8woVVq9fOnTN78qQJkydPUVO/RmWw+JoJfp3iaRLT/jQ/ueKpgp+BpJuxnLfbw+jWljYANtqh+ofe2FwPfXDC00KNVp5fCyCdXmytGQIgMTDf5V4U2TPGO8dQ2sNQ2v3ZBf/M6FIA0Z7Zhsc9DI+7v9YKZbhnmV8NKkqramtluz+KMZT2yIkr830eH+WWBYDV2Op0h65/xNVIxtNSPbgstxZATnyZpTqtfRHK/VFMiC11Zf+8VFVVxcfHPzZ9sm//ocVLls6YMX3ixPH8/H/Z2Nq1tVH5grnAoUOHCIJYuHBhfT21DbDXyJq6urq5c+cSBCEjI8NtWygAID+/wNHRKYnKYPFtUlPObGF1hKmRcTYA6qub3vvatlZ2TVmXGNK2tu4tJD2m1GfWNbcHCFNwHTbAYEQ7OTlTP6jcoqysbPbs2QRBnDx5ktu2fBX0FlmDt5WhZs+e3dT0/isvBQXFh/P8YoC5KrX0QEHBBTw9Pfv27dunTx9zc3Nu2/JV0ItkDZlr+Mcff+zlRdspKD45KaGFGZHF3LaCgqI3IicnRxDEpEmTioupOQj0KlmTnZ39v//9jyAIPT09bttCQUFBQUHxsdTU1PDy8hIEcejQIW7b8rXQi2QNi8Vat24dQRAbN27s5QVOKSgoKCi+A+zt7fv27UsQhIODA7dt+VroRbIGwK1btwiCGDJkSGxsLLdt+bZh9xjM+a3T2oq6Om4bQUHxRWlsbCwvL29pafmg3j2mM/0KrwaNjegdheSOHz9OEMSECRMqKiq4bcvXQu+SNQwG47fffiMI4s6dO9y25RPDYrG0tbX37t0bGRlJtlRUVEhLS+vo6Hz4IMbGxnv37v2HkiIsFuvp06diYmLCwsKGhobvD75mMqGnB1lZ7NuH58872h0dISsLGRncvYuPieB+9AgPHgBAVRV8fP77OCTPn4Pa/0/Bbeh0+u7du1VUVJqbOdXIfX19JSQk4uLiPnCExsbGM2fOXLx4saGh4Z97Njc3S0hILF++PDMz8z2DpqfjwgXIyODgQbSHJzY0QEkJ+/fj2DHQaB9oXg8UFUFGBqQNycn4yOxiLBbU1MBgfNQg3wIlJSV8fHwEQZw+fZrbtnxF9C5Z09bWJiAgQBCEgIDAd1Y4o6GhgZ+fnyCIlStXMplMADk5Of369VuxYsWHD7Jz506CILy9vf+uw40bNwiCmDt37owZMwiCUFNTe89plJbG4sXw8YG+Pn75BTY2AODtjYkT8fAhPDwwbx7U1T/cwu48eIBHjwDA2BgbN/73cUh27KBkDQXXsba2Jgiic8bYhw8fEgRhZ2f3gSPU1tYOGTJk1KhRZWXvqV1gbGxMpnFLSEj4p36lpViyBIcPIzwchw9j3DiQJduOHMHy5aDRcOECZs1CfPwHWtidkhLIyyMnBwD27MG/uRnrgawsCAggLe2jBvkWsLGx6dOnT9++fZ2dnblty1dE75I1eJuNsV+/fgEBAdy25VPCZDLJyCGCIO7duwcgPz+fh4dn/fr17X0KCwtdXFw8PDy6uSsjIyMdHBzKysqkpaUJgvD39yfbY2Nj7ezsaDRa+5LT6dOnly1bVlNTw2QyBw8ePGPGjLq6OgDBwcGenp7dbw1DQzF5Mtp9P8+fw8MDAI4dw5EjnEZrayxahM5luhMSOm77srI6HpeWIjwcjY1gMJCaCicnZGYiOxt5eaiuhoQEFi6EqyvH81xUBDs72NigqKhj5IwMWFvDyQlVVT2cwYICbNrEubB2hsGAtTU8PNDZS5+aCmtruLigtrajsboajo7d35SC4l9ib29PTuQpU6YUFBQAMDU1JQjCxcWlvQ+dTre3t293zZKwWCwvLy9PT8+SkpKJEyfy8fGRiS7ZbLa/v7+dnV1iYmLn/uHh4T///DNBEMOGDUtKSgJQX1/v5ubWw17RGzcgINDxVEcHJSWIicGECQjj1ALD5s3d5Yi/f4e2iIhAUhLncUoKUlJQVYWoKMTFwcUFRUUIC0NjI5KSMHs29u/vGDYsDJaWeHtR6t7Y46KYrS0OHUK3O676eri4wNq6wwwAbW3w9YWFBWJiunQmrxXu7h/lS/7MsNnsDRs2kFlLampquG3OV0SvkzUFBQUjR44kCEJaWprbtnxKmEymkJDQDz/88NNPP/Hw8OTl5VVVVf3+++/tsubVq1cjR47s16/fgAEDpkyZ4uTkBKCtrU1RUXHQoEF//PGHkJDQnDlzBgwYEBQUBMDAwODnn38eOXLk0KFDDx48SN721dfX19bWlpWVWVhY9O/f/8CBA6S3Zvny5T///HNWVlYXm/T0ICKC4mIYGeHZM07YSlUVFi3qcIpkZWHWrC7rR6amWLWK0/nqVfDwIDkZAIyNsXMnCguxdClWrMCcOXjwAEpKUFBAdDRmzMDw4ZCTA5OJ0FCsXQsJCWzdioULER0NAJaWEBbGvn3YuhXr1uFdf76FBfbs6dLCZuPGDWzahGPHsGwZNm0CmQ358WPMm4cjR7BxIwQFObetdDqWLMHu3ThwAHx8cHP7mP8mRW+GlDWDBg0iCEJOTg7As2fP2mVNdXW1hITETz/9NGDAgB9//PHQoUOVlZUACgsLN23a9OOPP/Ly8oqKivLw8MydO7e2trahoeHgwYM///zzqFGjhg8frq2tTYbRNDU1LVu2bP78+UuWLPn1119JWZOVldW/f38hIaHuNm3eDE1NJCfjzh24unIajYywbFlHHwUF7NrVJc7m8GGcPct5zM8PQUGQy2qHDkFfH/7+mDkTAgJYtAhmZuDnR1ISXr4EDw/4+HDvHpqacPYs+Plx7BiWLoW0NBobwWLh6lVs3Ii9e7F2LSQle4iHO30a3ba7pqVh7Vrs2oXDhzFhAvT1AaC6Gnv2YPVqHD0KAQHcusXpbGyMOXNw+DBERLBqFfLz/8M/8QsQEBAwYMAAgiB0dXW5bcvXRa+TNQDOnj1LEMSff/75/uXkbwcmkykgIDBy5Mjz588TBHH8+PGSkpIRI0aQsoZOpw8ePHj8+PFPnz41MTEZOXLksGHDMjIy/Pz8CIJYvHixj4/PkydPBg8ePGjQoMjIyKSkpAEDBggICDAYDNIBfvXq1fb3UldXJwhi6NChUVFRZMupU6c2bdpU1M1LceMGpk7F7t2QlMTKlfjrL+Tno7AQI0bA1pbTJz8fY8fiyZOOVxUWYsECkAthO3agXz9YWQGApCSUlFBWhsGDceAAsrJQUwMZGRw+DAB6etiwAQCqqrBqFdTUOKOdOQNBQTQ2YsUKKCtzGuXkOH6jzly7hrt3u7SwWJg1ixMSVF2Nw4eRnIycHIwfj/b75s2bISUFAGvX4uhRTuPp0zhwAG8DIygo/hV2dnbkFF63bl2/fv0iIyNtbGwIgnBzcwNw7tw5cjevubm5lJRUu/S5fPkyebcWFBQkLy9PEMSiRYtaWlru379PEISiomJsbCyZYt/HxweAurr6L7/8EhcXJyEh8eOPP5K1hAoLC4WFhRUUFLrbJCqK5cuxdy9kZMDHB/Ke8M4dLFnS0UdZGYsXd/FfOjpi8WLU1aGgAJMmYcwY5Oaivh5//QUfH7i7gyBgaoqiIsTEYOpUjstk0yaO1+f5c0ydyrltKCzE5MmwsEBpKcaM4ThvMjJw9CgKCrqYymZj/36Edq0LZmKCyZM5rpcXLzjXB11dLFvGUUWhoZgxAxERKCnBmDGcWV9ejrVrce/ef/1Pfl4OHz5MEMSIESNy3vUx9256o6wJDg7+6RhkF6oAACAASURBVKefvrPAYSaTuWLFij/++CMvL09YWPiHH354/Pjx2LFjN27cCEBBQYEgiFevXpGd79y5QxCEoaGhmpoaQRBWpG4A1q9f36dPHzqdrq+vTxCEsrIyg8FwcnIiCIKfn7/9vWg0mqGh4dixYwUFBauqqgA0NjY2Nja2dXMI6+hg0CA4OgLgXMtUVVFQgJEjOUE2APLyMGYMTE27vHDTJujrc64p27dDWxtVVVi2DImJKC7GpElwd+f0PH4cx44BwM2bIP1SDAZ++w0qKjAywoMHOH8ev/2G6GioqmL8eMjJwc2th9svchmrW2QAm409e8DHByUl+PmhuhoAnj/HL7/g9m0YGcHEBLt3Y9o0pKVh3rwODw2bjZKSnt3jFBTvg5Q1enp6ERERBEFs3rz5wYMH/fv39/b2bmhoGDZsGB8fHznXWCzW9OnT//zzz8TERH5+/p9//jk/Px9AXl7ekCFD5s2bV1xcvHnz5v79+1tbW0dFRZHzXVtbOzY29n//+5+WlhYAUVHRn376KSMjA0BbWxuTyexhK4CQEGbORHo6ADAYGDcONBqMjdHpsoArV7B0aRdZU1yMGTOQlgZbW6xfj40b4e8PT08ICaG1FdbWmDaNM60yMjB9OsgNqhs3gnQ/SEpi2jQ8fgwDA5iaYtYsHDiAujoICWHBAmhqIjQU7y6+hIXhwIHusy88HGPHQkQEpqacdbHmZqxaBRERmJjAwADGxuDlhZERQkIwcybHKgBMJr7KinWJiYnDhg0jCOJsuz+M4i29Uda0trauX7+eIIjp06dX9Rhm8Q1CypohQ4bU1taGhIQMHDhw9OjRQ4YM2bJlC4A9e/YQBEGuLgF4/fo1QRC3bt06efIkQRDkghQA8uYvIiJCV1eXIAhBQcFdu3aJi4tv375dWVmZzWZ33td98eLFf44vhrY2Vq3qeHr3LlauRF4e+PnxVkghJwezZnX3nRgbQ1ISVlaQkcGbN9i2DZaWWLECTU3Iy8PcuXj7QSAjw5E1N25wZE1EBEaOhKQkTpyAlBROn8b16ygtBQALC2zbhtGjsXAhukVW0enYsKFLiA9JbS2MjbFuHYYPh5AQkpPx5An+/BPS0pCRgZQU5OVhbIyYGEyfjuDg9/yTKCg+AFLWqKmpATh27BhBEHPmzBk0aJCvr29VVdXAgQOXLl3a3nn79u0DBgzw8vKaPn36kCFDyDyzTCZz/Pjxc+bMyc/PX79+fd++fcXFxXfu3CkuLr5t2zZHR8e9e/cSBCEkJLRz584RI0b069dv48aNSZ2DTrqxbh06+WshLg4lJTx50iXg5sIFiIt3eVVbG6SkYGQEFRU8fAgNDVy5gitXOH5Nc3MsX87RJWlpPciagwcxezZOnoS0NKSloaAAMmi6shJ6ehAQwB9/QEyM485p5949yMr28BEiIiArizlzMHEiJzZoyRKIiEBWFlJSkJGBoiLi4/HyJRYtwldf34p0zv3666/d4qso0DtlDQAXF5c+ffoQBGFkZMRtWz4NpKz57bffyOvaqVOnyKhDMTExAKT3RUVFhexM+qitra3JBaZr164BqK2tnTFjxg8//ECn058/f97uzSorK3N2do6KimIymdu2bdu0aRMZJrxjxw6CINzd3QFkZWUlJSV1T3JoY4Np0zrudc6dw4EDaGnB7t24cIHT6OWF2bORl9flhSkpWLECGzfiyRPU1YGfHwICnCtdZibmzOkQJe2yRkcHmzcDQGwsxozhhOMAqK6GpydaWuDoyPE2l5djyxasXNllkcjICOfOdT+n9fUdDpjiYkyfDkVF+PtjypSOoOP0dAQEoLkZc+firTMMoaGQkqJS4FD8N0hZQ87W9PT0MWPGkFVffH19Gxsbx40bx8vLS3plEhMThw8fvnDhwqKioi1btvTp04fcCREQENCvX78FCxZUVFTs27fvhx9+iIiIIPu7uLhkZ2fLy8vPmDFj3Lhxo0ePHjRoUN++fcePHx8SEsJisRITE7Ozs7vbJCuL7ds5j9lsCAjg+XOEh2PaNLRH1ImKQkmp+wufP4eAADZtQmoq3NywYAHWroWXFwC8egV+fo5fpLOs2bABpB/90iV0jvIJCEByMurqQOada2tDUhLGjOnypmw2jh2DtXV3M+h0TjhdXR1evMDvvyMxEdu3d5n1ZOQynY5JkzocukZG0NJ633/sS1NcXEx+K3bu3MltW75GeqmsaW1tFRERIQjir7/+qvsufn4aGhoWLFjQv3//vLw8AKWlpeQebBEREQCVlZXz58/v37//sWPHJCUlCYJYs2ZNbW1tZmbmiBEjBg4cqKioKC4uPmTIkL59+wYHB1dUVIwdO3bYsGFaWlr79u1rj0o7ffo0OSZ5t8fPz0+W7V29ejUPD0/3q2FdHdauxY4diIuDrS0mTuTcbFlbY8IE2NkhPBx//YVTp7p/mMZGbNiA/v0REgIA69eDIDgLT2lpmDSpI8T48GHs3w8AenoYMwZ2dmhqgowM5s+Hvz/i4rBuHYSEwGRi/XoICSEmBvHxEBbGuXMdbuq2NuzY0SWtDklNDaZPx/79SEtDcDCmT4exMRoaICSEPXsQFYXAQMyaxbFfSwsrVsDHBxERWLkS0tL4wPxmFBRdITd4X3gr/Q0NDclbFHITr5GREZlk4eLFi9OmTWvfB/7ixQvSA62goCAgIDBgwAA+Pr7m5mY3N7e+ffsuXbpUR0dn0aJFgwYN8vPzY7FYVVVVNTU19fX1ZM4LOp0OIDs7e/DgwRvfzZUQE4OJE3H9OlJToa4OPj4UFgKAqChERREdDX19LFjQQ76ZjAzw8GDePDQ0cALjxoxBSQkAPHuGOXM4dwgpKRgzhpNpRlgYQkIIC0NMDPj4oK6O1FRYWGD4cNjZoboao0ZBSQlZWfDywsyZHSva5NutWtXD1m4TE0yYAFtb5OdDSwszZoDJhIMDxoyBmRlSU6GlBR4eREaiuRni4jhwADExcHTEpEkwM/vof+knRk9Pj/xKeJECkaIrvVTW4O21o0+fPmZf37f2P8BkMhUVFQ8cONCeqcLe3n7Dhg2amprk0+TkZGlp6alTp06ZMkVWVrY9vNfHx0dYWHjKlClKSkqPHz8WExOLiYkBEBgYuGnTpkmTJvHz81+/fp3MhcNkMjU1NSdOnMjLy3v06NF0cq0dkJOT27FjRw+F1nJyICmJdesgKAgDA84vfWsrbt3CmjUQFMSJEz0vXZuYYN8+jivYxAT793Oc1YWFkJPjbG4CYGAAAwPy42HTJmzdivp6MJk4dQrCwli3DidOcG680tJw+DDWrsXmzVBS6rIkT264SEnpwQw6HTt2QFgYGzfi5k2Ogyc5GYcOQUQEgoJQVOTcbjY14coVrFqFzZuhrNwlwoCC4t8QEhIiLCz8+PFj8mltbe3x48fFxMRCQ0MBsNlsExOTxYsX8/Lyrl271szMjFwaJqODFyxYMGfOHBMTEyUlJVlZ2dra2tbWVhMTk4ULF06ePFlERMTS0rJbinAlJSVxcXHyglBQULB+/fp2t24XPD0hJoZ167B5Mzw9OY25uTh4EIKCEBTsIi86c/w4tLU5j0+cgLY2Z7eUnx/OnePMlKIiHDnCkSP29li0CKqqAODqCjExCAtDUBBGRpwLiJsbNm3CunXYtg0mJl3ei8GAomIP+YVbWjjr1CIiEBfnrGK3teH+fQgIQEQEO3dyogABpKdj714ICWHbtu5hf18B+fn5kyZNIghCWFj4/QlReyW9V9bU1tauXLmSvL95b9Kq74aGhgZSoHSj/m/Wkqurq9/Nqt7U1FT7r362y8p6uNA0NHz6WLzOq2B1dT2MX1bWQ9IaNvs9edZLSnroUFHRwzJTVVVHsCEFxeekuqdvWmtr69/91H2aOMIeczIVF3/iSgVsdpeY35ISvFvFr7Cwhzdtbu6hZzuNjRwnU2dYLI73qBulpV9n+QUyqmbAgAHtMZEU3ei9sgaAp6dnv379CIJQendJmIKCgoKC4msiOTl5yJAhZNBk952nFG/p1bIGwJEjR8jil4xeUECEgoKCguLbhcxV88svv9A/smzWd01vlzUpKSlk0uFt27Z9n1WpKSgoKCi+fQIDA8nc0/Ly8ty25aumt8saADo6OgRB9O3b1/rdbYEUFBQUFBRfAWQFqDFjxlBphf8ZStagtrZ28eLFZM6r8q8yoeQ3TQu7tb61ewxj21fvGGODXdlcx2r7rsq8U1B8DMzW5qa27gG5bPQwl9t6auQWrLbWyuZvPouHhYUFuan7VnvtKoq/gZI1AODg4NC/f3+CINq3Q1N8KtSTLfUznNufVrMaFOKf7afflmIYhlWmtrcbZ3vsj7yzn37bLNfvM1lS0lR9OeFFev0HldcubKw8Hv0gn0nJXAoKAKhvbTzCMAgoT2hvcS9hHIy8K0G/pZNmy2xtbu92KcFsf+QdySiDoIq/T1v8cQRVJKklW76rsXrEszRGMeHZZ7Lky5CXlzd58mSCIObNm9fjDjiKzlCyBgDYbPbu3bsJgvjtt9/8ySJqFB9NC7v1Zro9YbflSuJLsoXFbt0VcXMtTTW0MvVsnOlcX/nU+kIAxtke4zyOORSFP8v1meJ1wizvsyibtPoiXnepztflf8CrNGZLqGZ969e4w5OC4gtT2lSzJ0Kvr72YWwmnui29Kn2K5wn9DGf3EsZsnzOqSeZssNvYbQej7q4MvBxSmXwx4fksn9PxNZ9lucQk22umj1xNS8OHdFZNMr+U8G0nJyNrlPbv39+9vRwexd9DyRoOqampY8eOJQhi5syZBd1KwlL8eyqa6/ZH3lnsr7DA96xyEqeqgH95/AQP6bi3V7p1wWqPsj3awF7ir6ibZkc26qbabg7tnq08pDI5s6E4sCLRpyyWbKFVJJnnBwSVJ3bullZfZF1AsyqgMao7arM3tDY5FIU7FYWHV6Yt8jtPq0gG0NTW4lEabZkfRK9K79H+K4kvr6e+7tZYzap3KAq3KqCl1nd8Q1htrR6l0eb5AfG1XWrT0KvSLfMDP98NKwXFlyGyOmOp/4U1QSozvE+1y5oDkXeORhmQjz1LY6Z6yZY118TWZI/3kI54O6c2h2jeSLPvPFRtC9O/PD6tvtC2MCSHWQqgsa3ZpZhunh+YWtflqhtSkWxVQLMpCMlv7PCY5jDLLPMDAysSn+R4/xV4ubaFCaCkqdquMNS6gJbD7CH9WENr0/ZwnXdvZmJqsizzg1yLIxs6LZFnNBRb5QfZF4W1O58AtLDbPEujLfODkureKZH7RbCwsOjbt297qXaK90LJmg7s7OzINDZ79+6lUgJ8JPnMinsZLhXNdZIMg/PxT8nGm2n2q4OutPc5GftINuZhRkPxFK8TibWcslAuxfR5vmcLG7tUnRQP153ne3aR3/k9EXrlzbVXkl4uDVCUiNBb4HdO8e3gpjne833P7qXfPhJ1j9dd6mWeP4CM+qK1NNV1tKu7Im6sCroyxetETE1WXWvj4Sj9PXS9I1H3+LxkVZJesdhdYmjawN4ertN+BSdJqM0RCFLaS791JOreeE/pR9keACpYtWLh2kI0VUmGwcrAy/cz3wBobmtRSnw53/fs0SiDtTQVmegHLWwqRofiWyWgPOF5rl9BYwW//wXHonAAbGAd7eqdDE46uPzGcj7vk+l1RWa5vssDLra/UCH+6R66Xufgm5S6/GneJ5cFXFzkI29fGFbcVCUWpr2OdnVn+I25Pmde5gUAaGxrlo8zXex3XpJhIBZ2fZbP6eS6fACOReHzfM/uCNcVC7u+wO/c6iDlFnZrRFXa5hDNY4z7uyNuTvOSJc3rTGJt3oYQjdLmjqzirey2OxmOi/zOSzLubwhWXxOkXNRYCeB1QfASf4Vd4TeFaKrCtKuk6iptrtkSqrWWpnKMcX9ZwEXDTDd8WdLT08ePH08QxOzZs3tP2tiPhJI1Xbh06RIZlkVWeaT4eCTotxTeKg/VJHOBwI7Mh+fiTNeHqAdVJPF6SLX7P9xLGGM9jgVXJHceZE2Q8hTPE8l1+dWsBtMc7zm+8uRFJ6uhZLbPmdeFwQA2hV57lsupFSUfZyoSrMYG+1Ss8fKAi2TMsnzc41+cJVLrCiKrMiZ4SJc0VQPwLYuTjXnY0OnmjBz2UKR+FatL5uW7GU6zfE6Tj01zvHRSbQGoJJkL0lSb21oA+JXFzfCWS6jJDa9KG+MuSX6E8Ko0/oCLf+cToqD4Vihvrl3gd86pKAJAFat+hrfcrXQH8k85zNIx7pI+pbGGma78/hfaX3Il8eUSf8Xalo6V3OS6/MFOe7RSX5c117SBLRP9QDxcl/yTZX7QHJ8zOczS1PqC5YGXUt46b5b6K2qlWDe1seb4nCHXkqpZDYv8zi/1VwSgnmwpROOUFtdLc2g3qZ3XBcGXE150llZVrIbp3ifvpDsBqG9tOh1rkt1Qksssm+sj/yzHl+yzl35bknEfgEaK1SK/85WsegAGGS4bQ651uyx8bvbs2UMQxM8//+zh4fEl3/ebhpI1Xaivr1+3bh1BEIMGDaK+Rp+EzrJGM8W6s7fmXJzpphCN0MqUSZ4yyW8dvG4lUbweUqEVXSo0CdFUryVbkY9FQ7Xm+px+mOV+L9PlcbbnYt9zW0I1AdS2MBPr8vzK4p7l+AgHqwkHXy1qrFwecPFVHqfcd2Jt3gzvU9HVWQWNFTN95IRoqnfTHRnVme9uy3qU5S4VbditMaA8YZTb0U0hGk9zfMi447qWxqX+F7aEaDzK9riX6WKY6TrK9fDTHG/tVFuxsOvtL6xk1dW1UDE6FN82xU1VnWXNNC9ZvbcaIpdZNtLtsHdpjHG2Z2dvjVLii2X+Fzp/+RNrc8d7SJERdSVN1WPdJfeE3yDn8p10R543+w0yXVrZbSVN1dE1me4lDIMMl2leJ9WTLUMrU2d6y2U1cKocPMry4A+40MZm2xeGjXI7ui/yjlmub1r9O4URAEnGfdOcLvUgm9pa9tNvj/eQupTwjFaRVN5cC8A0x+s3ZwnNZOv7mW8eZrvLRBuOdj+aWle4MeTazXTOOhob7LLmGvIe5svw5MkT8jZbQUHhi73pdwAla7qTkZExYcIEgiCmTp2am5v7/hdQ/COdZc3NNHshmmr7n+RiTY5HP8hoKJrudTK1jnNJci2JnOsjX9BY0XkQoWDVexkunMc0VcHAy+fiTGViHsjGPLwc/8ymIBiAfqbzAr9zuyNuKiW+3BGuuzn0WnZD6WI/BediTjrObGbpPN+ztIokAGn1RapJ5gt95Ee4HjoZ+6impUudLGmG4f2sN+9+ltDKFNnoB3N8zkzyPH473bGgsWKur/yWYHW5WBOZmAenYh4pJZjF1+YcY9w/yjD4FCePguJrobOsASAc3GkRilnO530ys77YLNe3szv2QsKzXRE3Og+SUJvL530yua4AQEZDMa+H1AH6LXL6nI41vpJoFl2TVc1qkGIYLg1QlGQYqCVbLPVXvJZi7VMWO89XvriRU9bKIj9oWcBFUjAFlidKMwwneUhP8JB+lO3R+R6lmtUgHKwWXZ3V7bPUtTQ+yvbYFKI+wvXwMr/z8bU59zPfjPc4Jh/7+ETMQ5mYBwrxpgaZLhn1RYv8zj/P9f2Ep/HDiY+PJ1PFzps379PU8+o1ULKmB1xcXH788Ucy9fC7hR4p/hWdZc2b4kg+71PtcTPrgq/qpTs0tbXM9zvXvq/7drrD6iDlVnaX2CahYFXSaQxgX+Tt3RF67X+iVSQl1eXRKpL+cD1kXxRGul40UqwFg1SqWfWbQ65ppnKyLEZWZUz2OkGvSs9rLA+qSATQ1NbiWxY30GlH5zCa0ubqLaFaye+EB4ZUpCTV5uPtNXG468H0+qINIRoqSRbtfRyLwkuba/QznP8KvNzeqJjwzOmdJX8Kim+LbrJGPFz3XPwT8nFkdcZkrxOFjZVhlanTvE62+1Q2h2oqJ77qPEhCbe5075Nk7G0Fq26Wz2njbM/2v74pjqxi1d9Is5vqJZvdUEo2CgdfVU56mV5fxOd9KqSSszZ9K92B3/9CY2tzaEVKZn0xgLqWRtUkixFuh8uaO6rwepRGd9NVAKpY9e0hOPmNFSsDLh2IuutcHDHVS7b8bXqbvMZyz9LoVnbb9nCd9ui9PGbZMYZhZkPxfz+JH0xlZeXSpUsJghg4cKCPj88XeMfvCUrW9Iyamhrl/fskbAvTlos1Jh83t7WIBKvviNBlVGfqpNou8jtP7h66mW4/1UvWszT6TXHkQt9zZDRuZ5YHXtRJ5WyVCq5IGu0ueT3VJq2+8GGW++8u+z1Lo2Nqsoa9OWCY6ZrbUOpQFD7R8/hifwU22OZ5ARM8pV8XBEdWZ+wI1x3kuDOhNje4Ivk3FwnDLNdcZqlhpuskT5mETpuY/MritoZef3fZ6F6Gy2RPGYei8OyGUqXEF/N9z7a0tZrnB/J6SL3MC0iqy1dKfPGH66HU+sLipqqZPnJqyRYpdQU30ux4PaRi3rlfpKD4tihqqpzufdKuMJR86lMay+sh9SzXN7giabG/wqlYkzY2uw3srWHXt4RpRVan3053XOB7NrIqo/MgsTXZY9wlE97uD9BLd+D1kLItDEmuy5diGE7xOpHfWK6f4TzGTZJWnpRaV3A3w3mAo/j5+CcAjjHuCwQphVQme5XGTPY8Md/3LJvNvppsMcZd0rM0OrOh+HCUvlDw1c6bmLRSXivGd89YU9Fcu8Rf8RjjfnxNTnhV6orAy7ppdg2tTWtoKqKhWpFVGQHlCdO8ZGViHgB4XRA8xfOEVUFQQm3uroibq4OUa7t6dj8HLBZr//79VPK9/wwla3qGxWJt27aN/GJdu3aN2+Z8w9xKdzDpdEOW2VC8j357TaCSUPBVl7fLQ6y2lqvJFquDrvwVcEk71ebdYJfLiS+sC2jtT52L6RtDNNYFKYuFXiddxGxAP8NZIFBpY7D65UQz8/xAqWjDSlZdC7vtbobzqkCljSEaKkmv5GKNk+vy2cDTHJ/1IerCNBXxcF2P0i5VTq3ygx5l9ZAcgsVuvZ5qsz5YXThIeU+EXmR1OshdFelOKwOVhIPVJOi3PEtjyM7eZTEbQjTWBV3ZEX7D++2mdAqKb5dKVt25+CchnWL5TXO8VwReXuWvKB1tVNnJz3Eo8u6awMuCNFX7txqoncz64qMMg/y3S8yt7LabafaCQSrCwVf30W+T+TkrWHVyscYCAZe2hWnfy3S5k+6kmmwOoKK5Ti7WWDDwkkSEnnLSK6XEF8w2FrO1+VLii3U0VZHgq1LRhu2OIgBsNlsz9XVQeQ8ZFuhV6WJh19cGXhaiqWqmWDe2NgPIYZYeibonGKi0KeTaxYTn9S1NpIUGGW8EgpSEaVelo41ye9pD/snR0tIif3qOHDnyBd7u+4OSNX9LWVnZmjVrCILo16/f3bt3uW3Od0VJUzXrnci7Klb9v9plUNzUfb2Z2dpc3skF3bm9pqd7rHdHIDu/a1vnv777KlZbS1mnHaTtlPQ0PgXFd0NDa1OPM66kqbrpg0Nrm1pZ5e9MnwpWHSksulHJqn83aPfvJn59a9M/FHEoa6551ylb3lzb2HVfJDl+RU/jfw5sbGwGDhxIEISAgEBFRcX7X0DxDpSs+Sdyc3PJclH9+/c3NTXltjkUFBQUFN8tDAZjxIgRBEHw8vImJye//wUUPUHJmveQkpLCx8dHZg6wsbHhtjkUFBQUFN8hpaWlZJjw4MGD37zpYScmxQdCyZr3Ex4ePm7cOIIghg4dSpXkoKCgoKD4tNTX14uKipIhNVTMw0dCyZoPwtfXd9iwYQRBjBo1ys/vc5WYpqCgoKDobTQ3N+/bt4/UNHJycux39kxQ/CsoWfOhODo6/u9//yMI4o8//nBw6J6im+KjYDKRm4viL5EQgoKC4jNSUYHcXFDp4z6Ytra2EydOkJpm3759LBaL2xZ981Cy5l9gbm7+yy+/EATx66+/PnnyhNvmfPVUV0NaGps3Q1QUmzfj6tWe+1y/jjVrICQEAQGIiSHqbWa8nBxISGDrVoiKYssWHDwIV9ceRtDXh5gY/P27NNrbY/t2UOvTFBSfBDs7iIlh61Zs2YItW3qeiQkJOHEC/PwQEcHy5ZCTQ3U150+PH3MmMjmXL13q4R6mrg4nTmDXLpSWdjS2tkJDAzt3Ii3t83ww7nPx4kVS04iKitbV1XHbnO8BStb8OxwdHcmE1n379tXS0qK8hf+EszP+/BNKSrh2DSoqePq0e4eWFmzdinnzYGSElBQEBUFMDOPGISYGAOh0/PIL5OSgoQFNTRw9igkTEBDQfZBt20AQkJFB5/+FiAgIAhoan/PjUVD0GrZvx/LluH4d6upQVkZISPcOiYng48OWLbC3R2oqLC0xYwZERFBbCwASEpg1C9euQUMDKiqYNQs7dqCp6/7twkKMGweCgKVlR2N2Nn75BQSB73Tp/9q1a6SmERQUpAp0fyooWfOvodPps2bNIr+Lp0+fbmrqIbkCBQDo6GDr1n/q8OABJk9GdnZHC5uNrVtx7hwAREaCjw+dpzo/P7S1uw9y5AiWLMHMmR03efHxEBTEuHHQ1OS01NTA3h7m5mjfM5mcjPBwFBbCygpkTdOiIlhawt0dVLkMCorONDZi+XJYW/9th+Zm7N2LLVvQ1qnmSWYmZs2CkxMAHDyI8+c7/hQRgREjkJraZZD8fAgKYv58bN/e0WhmhvnzMWVKh6yJicGrV3jzBq2tnBYaDRkZSEjAy5ccX290NF68AJ3+3z/yF0FFRaVPnz4EQSxatKiwsIc6nRT/DUrW/BdSUlJWrVpFKpu9e/fW1PSQio0CqqpYswYaGpCUhKNjDx3++guXL3dvbGkBmYQqIgIzZqC92mhyMpYu7XInR7JvH2RksHw5Xr/mtNy7h127wM8PdXUASEzEihXYsQNHjmDGDM4Id+5g2jSIfqut8QAAIABJREFUimLXLsyZAxkZHD0KcXHMnAk5OVBOOAqKdjIyMHcuLlzAqVNQUelyH0KSnY1Ro/Bu6aLaWtTXA8ChQzhzhtPY2IibN7FsWZfFJgD5+Vi5EoqKWLy4Y9ZLSuLoUcyaxZE1+vqYMwdHj0JUFHv2oLwcAHbtwoIFEBPDrl2YNQsKCti5Ezt2YMIEmJt/wtPwCWlra1NQUCB/QRYvXpz2/S6xcQVK1vxHSktLt2/fTn4v165dm5mZyW2LvjKamiAigvHjoaWFs2fBw4ObN7t0qKjAxIkwMuI8bWxEUhISE5GZyblaxcRgxAgIC2PHDmzZgnHjcOAAmrsnAMWOHbhxAxcuQEwMABoacOgQLCywbBnIqhcbN+L4cU7nJ08wdSoaGnD3Ln78EXZ2AGBggIEDYWUFAI8eYcoUUN5gCop2HBzwv/9h927cvYvVqzF9OuLju3Tw8cHw4UhJ4TytqEBCApKSkJMDMlhESgqTJmH7dmzfjtWrwcODd3OA5edj0SK4umLFCty/DwAxMdi/H1ZWmDgRISFIS8O0aRzx1NyMzZtx4QIAiIhgwgRkZQHA1q0YMwYZGQCwYwd27/5Mp+Qjadc0AgICOTk53Dbne4OSNf+dxsbG9gj2mTNnenp6vv81vYe2NgQGIj2d89TICKNHcy43JMXFGDMGxpwqmEhNxYIFmDsXEyZg714AiInB6NGQl+fE1ly6hDlzYGzc3ZUiLo7r1+HriyVLUF+P8HCsXo2MDCxZguvXUVODkSNx+DAePMC9e9DSwsCBCArC3btYs4YzgqMjFi3ihDe6uGDChK/ffU1B8eUoKICzM2dxtqkJS5Z0WVEC4OKCYcM6JvurV+Djw+zZGD0aDx4AwLFjWLIE165BTQ3Xr+PAAfz1V0d/kvx8LFiAoCCoqeHAAQDQ1sapUwgNBS8vQkKgrw9eXty+DX19GBtzwn0AbNwIVVXOIPLyOHiQ8/jCBaxciYaGz3BG/jv19fUyMjLt8TTU2tPngJI1H0VbW5uGhkb//v3JNMSampqNjd2LjPRSuomPnBxMn86JYmln2TK0F0ivr0doKCIjceYMBAUBICoKfHxddkzcvInRo7v7rsXFceUKAAgKwtoaN25ATQ0tLZg/H9raKC4GLy927MCZM5CVxZkzUFFBcTF0dbFlC2cEW1ssWcJZ+XJwwNixCAv7ZOeBguI74/z5jrlDkpOD4cPh7c15WlAAGg2RkVi+nOMxPXSIEzBHwmRi8mSoqHQZJD8f8+cjMBA5OVi4EElJ2L0bgYEIC8O4cQgJwdWrmDYN8vI4eRKysrhwAWZmALBhA9rLXMvJ4dAhzuNz57BsGWcV7OsgNzd3y5YtpKbZtGlTMZXS4vNAyZpPgKWlJS8vb/uXNbVbKFzvJDcXGzYg9m3xahoNU6Zwtji1o6+PYcM6+pBcucK5CSNlTedibzduYPjw7ltDxcWhpAQAqqrYvRvCwqDRwGJh7lxoaqKxEXPmoH03PpsNOzuw2dDWxqZNnEZbWyxezFn5cnDAuHEID/8EZ4CC4vvg6VNISnY8FRfneFPaaWmBmBiWLweza0FZfn5OWoeDB6Go2NFeU4PJkznTth1S1pBrTOLiOHIEIiJgMkGjce40nj3D3Lkd/aOjOZ3Xr8eNG5xGObkOb825c1i+/OuRNVFRUQsXLmzPT1Pdvvud4lNDyZpPQ0pKytatW8mvLC8vr4WFBbct4jb19ZzN24GBCAjAihWQl+/uwmEysW8fJk2CmhqsrGBmhpMnwcPDuQJGRmLYMMjLQ10d6uq4eBFDh+Lq1e6DbNyIs2cBIDYWgwZh6VKwWKisxJQpnOumjg5mz4atLRIScPQoZsxAYyM0NbF6NWcES0vMnMmJp3n9Gr//3sP+VQqKXoufH/78E9euISEBenqYP7+HCZKejlmzICCA27dhawsjI2zZAh4ekJlL9+0DHx/U1aGmBnV1bN2KceOQmNhlhNxcTJ0KFxcAMDQEQXBCZzw9MXQoAgLQ0IA5c3D8OBgMuLpi9GiOZlq1iuMTAiAlhV27OI9lZTFvHr6OTDBv3rwZO3Ys+QNx8eJFav/sZ4WSNZ8MFoulra09ePBggiD69Olz8uTJctIB0GspK8PZs1i/HoKCuPD/9u47KoqrDQP4BURBEBsK2BFjV+w1lth7LNiwIRg7CtgToxG7URNLFHuJRg1VRDqogEpHBQRBEEF6lbpse74/Zl1YXDTJJ6D4/s6enOzsnZnLoDuPd27ZIv8ht0iEkycxbRoGDcJ332HGDNjYSPoFv3yJuXMxfbpkIq8ZM2BlJWf09ZEjuHoVAAoKsG4dzp4FgLw8WFhIxkGIRJK2mQkTMH8+njwBABsbyaMrAH5+2LoV3HC2R4+wfDlo7VxCynN0xJQpGD8eEydWfJQslZ6OzZsxfjwGDcK4cTAyQmio5B8h585h0iTJ3+WpU2FkhJCQirtnZmLTJkm3tvBwLFkiCU9hYVi+XPLXNigIs2Zh3DjMnImDByVfFL/8UjZA8uxZnDwp+f+LF7Ft2+fQt+b06dP169fn1rA8c+ZMTVen9qNY84l5e3v37t2bS+UDBw708/Or6RrVtLw8/JPm1pycqm0u5vFknmcRQv6tjAyZmWnkEgqRlVW1kz9lZ8sZEflZ4vP5P/74o5KSEmNMV1fX1dW1pmv0VaBY8+klJyf/8MMPXLJRU1PbsGFDcnJyTVeKEEJI9cnJyZEuYNmvX7+wsLCartHXgmJNVTl//nzr1q25P9PdunW7evUqrbRACCFfg6ioqOHDh3Pf/9OmTUuUTjBIqh7FmioUGxv7ww8/1K1bVzpIKpCG2BBCSK12/fr19u3b0wI7NYViTZVzc3MbNmwY90e8UaNGW7duzagw8wohhJAvX0JCwtKlS7lvexUVlcMVplYn1YJiTXUoKCj47bffWrZsKZ2S+MqVK4WfzYQKhBBC/k+Ojo7du3fnvuR79uzp5ORU0zX6SlGsqT5RUVFLly5VVFSUrgZy7do1Pp9f0/UihBDy36WlpZmamnLTzXOze6SmptZ0pb5eFGuqm7Oz89ChQ9k7Q4cOvXz5cm5ubk3XixBCyL/m6OjYq1cv7vu8Q4cONz7XZcO/HhRrakBhYeGVK1dGjhwpDTeDBg06e/ZswecxIWYtFhERYW5uPnv27GBazJIQ8v/JzMxcv369dFDI0qVLExISarpShGJNzSkqKrK2tv7222+l4aZHjx6nTp2iDsWfnFAo9PHxWbJkSaNGjbhLra+vT+vMEUL+Mw8Pj4EDB3LfJ61atbrKzXVOPgMUa2oYn8+3tbWdNGmSNNz06dPH0tLyeYUFU8h/UlRU9Ndff02ePFnapYlb3YIxZmJiUtO1I4R8eSIiIkxMTOrVq8d9k8ydOzcqKqqmK0XKUKz5LJSWlt65c2fixIlcpzNuKPjMmTOtra2pUeG/iYiIOHHihHQhC+6x95YtW6KiotauXcttuX79ek1XkxDyxUhOTv7555+bNGnCfYG0adPm3Llzoo8uKEGqF8Waz4urq+uSJUsaN24svRn36tVr06ZN/v7+NV21L0NOTs7169fnzZunqakpvYb9+/f/7bffpBN95uTk6OvrM8Zat24dFxdXsxUmhHz+SkpKTp061a1bN+mcNCtXrnzx4kVN14vIQbHmc/Tq1auDBw8OGjSoTp063N8iNTW1sWPHnj9//uXLlzVdu89RYWHh/fv3LSwsdHV1pWmmcePGU6ZMsba2fsutzl3O/fv3uTV1J0+eTHOAEkI+4M6dOyNGjOC+VZSUlKZPn/7o0aOarhSpFMWazxefz3d1dV29erWWlpb0Vt22bdvFixdbWVnFxcXRIlPFxcUeHh7bt28vP6yMMda3b9/du3cHBAR8YN/du3dzhWkmUEKIXEFBQQYGBgoKCtx3xfDhw2/fvl3TlSIfQbHmC/DmzZtz58599913qqqq0jt306ZNv/vuuyNHjjx+/Phrm/YmLi7O3t5+zZo1nTp1ko6uZIx17NjRxMTE29s7Ly/vowcpKSkZP348Y0xDQ4Oe8ZFPpaioyNPT8+nTpzVdEfJ/efHihZmZmXSEQadOnU6fPk1Tw38RKNZ8Sby9vS0tLUeMGKGkpCS9lysqKg4aNMjMzMze3j4nJ6em61hVeDxeSEjI77//Pm/evHbt2pVvm9HR0Zk/f/6VK1eSk5P/1THDw8O5lrCBAwdmZmZWUc3J10MgEBgZGXFd/tesWRMaGlrTNSL/WkhIiKmpaYsWLbivl+bNm+/cuTMlJaWm60X+KYo1X57CwsLIyMjjx49PmTKlTZs20ru7goJCq1atpk+fvm/fvrt37z579iw/P7+mK/t/SU9P9/f3P3v27KJFizp37iz9lxNjTFlZWV9f39jY2M7OLjU19T8PRjh//jx3QAMDA+pkQ/5P27dvLx+4NTQ0TExMgoKCarpe5OMEAsG9e/cMDQ01NDS4X1+jRo1WrlwZHR1d01Uj/w7Fmi9bbGzsX3/9tXr16vbt2zNZjRs3/vbbb42NjQ8dOuTm5paZmfn598Xh8/mvX7++c+fOoUOHFi1a1Lt3b+l8MxxVVdXvvvvO0tLS3d39k4Q2oVBobm7OHXzNmjX//wHJV+v06dNcH//vv//+559/1tbW5v5cqampzZ8/39PT8/P/C/h14vF4169fnzBhgrQPTePGjVetWvX48eOarhr5LyjW1BIZGRleXl6bNm0aM2ZM586duWE+5ds2tLW1hw0btmnTpjNnzri6ugYHB8fHx78/RKg65efnv3r1yt/f/9atWzt37pwzZ07nzp01NTUrRBltbe3BgwevXr361q1bL1++LCoq+rTVEAgE8+fP5861a9euT3tw8pVwdnbmur7179+fW+YwLi5u27Zt0qF59erVGzFixMWLF9+8eVPTlSUSycnJZ8+e7devn/TbRk9Pb/PmzdRC80WjWFMLpaenP3jwwMrKavXq1UOHDpW2qZZXr149XV3doUOHzpo1a82aNfv37//rr78ePnyYlJRUWlpaWloqEon+/39cisVikUhUWlqan58fFRXl4eFx8eJFS0vLVatWzZo1a9iwYXp6eu/XjWu9Hz58+ObNm//6669nz55V9T9zc3Nzx4wZwxhTVFQ8efJklZ6L1D6hoaFcV4y2bdtGRESU/+jVq1d79+7t1KmT9M92ly5dNm7cSH2Ka9arV6927twpnYeGMdarV6+jR4++fv26pqtG/l8Ua2q5wsLCpKQkV1fXHTt2TJkypXfv3i1btqzQliOloqKiqanZqlWrNm3aDB06dOzYsZMmTVq5cqWpqemGDRuOHz9+4sSJixcvuru7e75z+/btk+WcOnXq8OHDa9euXbdu3Zw5c0aPHj1y5EhdXd0WLVo0bNhQOodyBU2bNu3Ro8fo0aPXrl1rZWV1//79N2/eVPOgg+Tk5D59+nAX4datW9V5avJFe/XqVc+ePRljampqbm5ucstkZWVduHBh5MiR0pmoNDQ0pk6devPmzaSkpGqu8NcsOTnZ1tZ2wYIF0uk6FRQUhg8ffu3ata9tPGktRrHm61JYWBgVFfXgwYObN28eO3Zsw4YNs2fPHjRokLa2doVHP1Wkbt267du3HzFihKGh4ebNm48dO2ZnZxccHPw5jOEKDw/nuig1a9bMy8urpqtDvgBxcXHceodKSkrnz5//cGGxWOzq6rpixQrpkquMsc6dO69du9bT01MoFFZPnb9CJSUlzs7Oq1ev7tq1q/TKKysrz54928nJSSAQ1HQFyadEseZrJxQKCwoK0tLSYmNjXV1draysjh07ZmFhsXr16hUrVkyaNIlrcdHX1+/evXuXLl20tLSay9OsWbMWLVp069atW7duAwcOHD169OjRo5ctW7Z69epNmzYdP378xo0b/v7+iYmJmZmZRUVFn2f3yXv37jVt2pQx1q5du7CwsJquDvmsJSYmDhkyhMs0v/322z/fMSYmZu/evf3795fO1FC3bt1Bgwb9/vvvoaGhfD6/6ur8VeHxeAEBAT///HO3bt2k7WSMMX19/XXr1gUGBlKUrJUo1pB/JD8/PycnJz09/dmzZ0+ePHn6nrCwsMjIyOzs7KysrC/6Xz9///031/ezQ4cONEU6qYy0nUZBQeHIkSP/4QilpaXOzs7r169v3bq19I6rpqY2fvz4nTt3hoSE0E33P3v+/PmBAwfGjBlTfoqvNm3amJqa2tvb1+xQCVLVKNYQUtHp06e5ZKOtre3o6FjT1SGfncTExMGDBzPG6tSp86/aaeRKT0+/evXqtGnTWrVqJb0Hq6urDxw48MCBAz4+PmlpaZ+k2rVbWlqaj4/PkSNHJkyYUP4xX7t27ebPn29jY5ORkVHTdSTVgWINIXJcu3aN+2Zs0qTJzZs3a7o65DMSFRXFtdMwxv5bO01lnj9/fvbs2dmzZzds2LB8jzR9ff3ly5dfu3YtKSnp83x6W1MEAkF4ePiJEycWL16sr69f/qKpqanNmjXr4sWLtDzw14ZiDSHy2dvbc8Ml6tatS6O+CcfPz69Lly5cf5qjR49WxSmEQuGrV6/OnDkzZcqUtm3blr9Va2pqjh079sCBA56envHx8VVx9s+fWCyOjo52cHCwsLDo1atXhQksdHV1J0+e/Pvvv8fGxtJTvK8TxRpCKuXr69uhQwfGmKKi4t69e2u6OqSG2dracouI1atX78SJE9VwxtjY2Js3b3L37wqDCtu3bz9z5sydO3e6uLhkZWX95/VDvgh8Pj86OtrOzm7nzp1Tp06VLtjEqVev3tChQ7dt22ZjY/PVpj0iRbGGkA8JCgrq3r079+25efNm+vffV+vo0aP16tVjjDVt2tTa2rqaz56XlxcSEnLgwIHJkyd37Nix/HQMSkpKWlpaQ4cOXbNmzZUrV/z8/F6+fPmlD6dKSUkJDAx0cHD45ZdfZsyY0alTp/LdZRhjysrKPXv2nDdv3qVLl2JiYmhtbSJFsYaQj3j58uXQoUO5L9MlS5ZwU+OTr0dJScn69eu5PwCdOnXy9fWt2fokJye7uroePXp03rx55Re7lWrbtu24ceOMjIx27979559/BgYGZmZmfs7jE/l8fnZ2tq+v77lz50xNTb///vvu3bvLnb1TU1Nz+vTphw4d8vDwoAn0iFwUawj5uJSUlAkTJnBfrAMGDHj48GFN14hUk8TExJkzZ3K/+m+//TY8PLyma1RGJBJlZGQ8fvz45MmTCxcuHDx4cPmxVFJqampaWlr6+voGBgZmZmYHDx68fPmyu7t7YGBgVFRUSkrKJ19nTS4+n5+RkREbGxsQEODu7n7hwgVLS8vly5dPmjSpS5cu2traKioqFWrepEmTzp07jx071tTU9NSpU4GBgSkpKV96QxSpahRrCPlHsrKyfvjhB+7btlmzZqdOnarpGpEq5+Li0rlzZ+6XbmBgkJ6eXtM1+hCRSBQdHe3o6Hj48GFjY+ORI0fq6Oh8YPbwOnXqaGtrd+/efcSIEdOnT1+xYsX27duPHz9ubW3t4OBgb29vZ2fn7+8fGRkZHh4eHh7+5MmTN2/e8N6TlJT07Nmz8PDwiIgIHx8fOzs7e3t7BweHixcv/vrrrwcPHjQzM1u4cOG4ceP69OnTqlWr8nPJVKCiotK9e/dFixbt2bPn+vXrQUFB1DhK/i2KNYT8C1ZWVtw0xIwxExMTmgmjtuLz+QcOHOA60ygrK2/ZsuWLayQoKipKT0+PjIy0t7c/dOjQsmXLxowZM3DgwK5du7Zs2VJdXb2ybFGeqqpqg3I0NTVbvKdp06bSAtwV+6iGDRu2adOmZ8+eI0eONDAwsLCwOHLkiJubW2JiIj1aIv8nijWE/DtBQUHcVGyMsb59+9Z4TwvyySUmJs6dO5f7Fbdp06Y2LX0qEAgyMjKioqJ8fX0dHBzOnz//66+/WlhYzJ8/f9SoUV27dm3cuLGSkpKSkpKCgsI/CShycUeoU6eOpqZmly5dBg4cOGvWLFNT0/3791+4cMHR0fHx48exsbGUYEhVoFhDyL+WlZW1YsUK7hu8UaNGNKtNbeLm5iYd+zZmzJjPqjNN1RGLxcXFxTk5OSkpKYmJiYmJic+fP3d3d3d3d/fw8PD09HRxcTlz5syxY8dOvOfYsWO3bt3y9vb28PBwdXUNDQ1NfCctLS0nJ6egoICGEJJqQ7GGkP/ozJkzzZo14+5/CxcujImJqekakf9LZmbm5s2b69evz/1Ozc3N8/Pza7pShJB/h2INIf/do0ePpPPot2rV6rfffqP5M75Q9vb20invWrZs+eeff9Z0jQgh/wXFGkL+LxkZGRs2bOCWxmSMjRgxwsvLq6YrRf6FhISElStXSmdJMTQ0jIyMrOlKEUL+I4o1hHwCvr6+Y8aM4e6LKioqZmZmSUlJNV0p8hEikejq1avffPMN94vr2LHj9evXaS1JQr5oFGsI+TR4PN6pU6eks7527dr1ypUrNV0pUilvb+9p06Zxv6w6deqsWrUqMTGxpitFCPl/Uawh5FOKiYkxMTGpU6cOd7+cOXNmQEBATVeKyHj27NmSJUukc9r27dvXycmppitFCPk0KNYQ8uk5OjoOGjSIu2uqq6svWbIkMDCwpitF8Pr1682bN0snVGzTps3BgwczMzNrul6EkE+GYg0hVSIvL8/S0lL6TEpdXd3ExCQoKKim6/WVevPmzaFDh6S/Dk1NTQsLi/j4+JquFyHkE6NYQ0gVevHixY8//qilpVW+5YbCTXVKTEzcvXt3165duV+BgoLCggULgoODa7pehJAqQbGGkCr36tWrLVu2tG7dWhpuli1bRuGmqkVGRv7000/lF7UeO3ass7MzjXUipBajWENINeFabrS1taXhZtGiRY6Ojl/cGoqfv5CQkLVr10obyRQVFadPn06XmpCvAcUaQqpVQkLC5s2bpS03ioqK/fv3P3XqVGxsbE1X7YuXkZHh6Oi4YMEC6fLUTZo0MTQ0fPDggUAgqOnaEUKqA8UaQmpAdHT0zp07u3TpIn0+0rZt22XLlnl4eNAN+D+IiIjYsWNHnz59pNezWbNmFhYW9KSPkK8NxRpCakxOTs6tW7emTp3aqFEj7masrKw8ZMgQarz5h1JSUuzt7WfOnKmhoSENNH369NmzZ09cXFxN144QUgMo1hBS8wICAnbs2NGpUyfpvblNmzaLFi26cOHCmzdvqItrBRkZGTdu3Fi5cmX37t2lV6xhw4ZLliy5fft2QUFBTVeQEFJjKNYQ8rnIzs6+fPnyxIkTpV1DuBlWpkyZcubMmdDQUKFQWNN1rEnPnz+/fPny3LlzdXR0WDn9+/ffs2cPtW8RQkCxhpDPkK+v7y+//DJgwAAlJSXpzVtDQ2PixImWlpYBAQE8Hq+m61hNBAJBeHj4gQMHvv/++wpppmPHjubm5rdv3y4qKqrpahJCPhcUawj5TBUUFISGhlpaWo4ZM6ZZs2bS27mqqmrv3r3NzMysra1DQkJyc3NruqafWHFxcURExJ07d3bt2jV48OAGDRpIf3Y1NbVBgwaZm5vfv38/Ozu7pmtKCPnsUKwh5AsQFhZ2+vRpAwMDaedi6eQ3AwcOXLRo0ZEjRx48eJCXl/eFdsTh8Xjcz7hy5coRI0Y0b968/I9Zr169UaNGHTx40MfHh+aeIYR8AMUaQr4YQqEwISHhzz//nDt3bp8+fRo2bFjh3t+6devJkyfv3bvX3d09NDQ0JSXlsx0unp+fHxsb++DBgz/++GPBggV6enrlexQxxhQVFfX09CZPnnzkyJHIyMji4uKarjIh5AtAsYaQL1JBQYG/v/+VK1fMzc2HDBmipqbGZGloaPTo0WPcuHEmJia7du26efNmQEBAdnZ29QcdgUCQm5v79OlTOzu73377bc2aNQYGBkOGDJEuPCmlpKTUtWvXpUuXHj9+3NXVNSEhoZqrSgj50lGsIeSLV1BQEB8fb2dnZ2FhMXr0aF1dXQUFBfYeVVXV5s2b9+/ff/78+bt37/7999+vXr3q4uJy//79kJCQ58+fJyUlZWZm/qunPAKBgMfjpaWlJScnP3/+PCQk5OHDhy4uLk5OTn/88cePP/44f/78vn37amlpVWiMkWrTps2wYcNWrVp15cqV6Ojo2tdViBBSnSjWEFLbxMXFubi4XLlyxdLSctGiRcOGDdPS0lJUVJSbKjj169fX1tbu0qVLnz59xo4dO3Xq1KVLl5p8jKGh4bhx40aPHt2zZ89u3bppa2urqqp+4CyKioqNGjXq16/fzJkzN2zYcOLEiTt37rx48aKmLxghpPagWENILVdUVJSRkREeHm5tbX3gwAEjI6NRo0b16dOnc+fOLVq00NTU/HDi+Q8aN26so6PTtm3bfv36TZw4cdWqVb/++qutre2TJ0/S0tLy8/O/8gl4CCFVh2INIV+j/Pz8lJSUiIiIkJAQd3d3R0fHCxcuWFlZ7dixY8OGDYaGhjNmzJj1QTNnzjQwMFi3bt2WLVv2799//vz5ixcvOjs7u7m5BQYGRkRExMbG0owyhJBqRrGGEFKRWCwWCATCf6Cma0oIITIo1hBCCCGklqBYQwghhJBagmINIYQQQmoJijWEEEIIqSUo1hBCCCGklqBYQwghhJBagmINIYQQQmoJijWEEEIIqSUo1hBCCCGklqBYQwghhJBagmINIYQQQmoJijWEEEIIqSUo1hBCCCGklqBYQwghhJBagmINIYQQQmoJijWEEEIIqSUo1hBSrXJzcyMjIyMjIxMTE/l8foVPhUJhSUkJj8cTiUQ1Ur0qV1oKHg88HsTij5Tk8SAQyNkuEqGkBCUlHz/C/0kgQEkJhMKqPcv74uLw9m11n5SQ2oJiDSHVJDg4eNmyZXp6eurq6urq6i1bthwyZMhff/0lKHfzvnXrVseOHXv27PngwYNPXgFfX9/U1NRPfth/KjUVW7agY0fRGYj7AAAgAElEQVS0aoVWrTB+PNzcKi3s7Y2ePfHbb3K2jx6NFi3QsiUmTICfXxVW+MgRtGsHZ2fJ24ICBAcjP78KzwggJgYdO+Levao9CyG1F8UaQqrDnTt3NDU12XsUFRW3bt0qbZv5448/uO2Ojo6f8OyRkZFGRkaNGjXyq9Ic8AFpaRg+HIxh+nTs2AELCzRrhjp1YG8vp3BuLgYMAGPYulVmu4cH1NSgq4uffsLGjdDRQcOGePSoquq8Zw8aNsTt25K3W7agSxckJlbV6TiHD6NpU7x8WbVnIaT2olhDSJXz9/fnMo2KisqKFStu3rxpZ2dnZmamqqrKhZibN29yJc+cOcMYU1BQuHv37ieswLZt27gThYSEfMLD/gu7doExWFqWPTl69gytWqFdOyQny5QUCrF+PRiDggK2by/bXlCAnj2ho4PoaMmWkBA0aoQJE1BUVCV1LilBbi5KSyVvp05F69bIzKySc0lNmoTvv6/y52uE1F4UawipcgYGBlyqOHz4cPntx48f57ZPnTqVx+PhvVgjFotLS0uLi4tLpTfXd/1viouLBbJdT9LS0tzc3BwdHaOiokpKSqTb+Xy+qakpY0xZWdnPz6+kpERc7q6Zl5fn5ubm7u6enZ1d/mhisZjH4xUXF3Nv/fz8Hj58WFRUBEAgEPy7DkB8PgYPRvPmFTPBmjVgDD4+Mhvt7NCgAQwNUacOtm0r2+7qCsawZYtM4bVrwRjkPrArKUG5iwYAIhGKi1GhzsXF4PEk5QEIhfDxwYsX4Lo9cRdKLEZxMWbMQLt2iIuTlJd68QJ2dggJwXs9pQAgMxMeHnB0/EfNPMnJ+OYb7N9faQGxGC9fwt4ePj7yH4cJhYiIgI0NwsPl9woSiRAbC0dHPH2Kcn9ICKk1KNYQUrViYmIaNWrEGBs4cGCJ7I0kMzNz48aNFy9ejI+P5yJChVgTHx//7bff6unpmZubS/e6efNm586dv/nmmzt37nBboqKi5syZ07JlSy4kqamp9evX78aNGwBEItHChQsbNGjAPfDS1dUdOnQol2D4fP5PP/3Url07bq82bdps27ZNmmOSkpImTZrUoUOHEydObNy4sV69eioqKidPngRw4sSJjh079u3bNzw8/B9dAqEQYWEICKjYCLFoERiDr2/ZlsREtGmDdevg4wMFBZmHUIcPgzFYW8sc4fJlMAYrq4pnFIuxYwd69UJUlGSLSISNG/HNNzh3Tmb3du3g64viYgwciHPnsG4dGEPdurh/H+fPo1Mn3LuHwkL06QNlZairo21brFghyUbR0ZgxA/Xro359qKpCXx9OTmUHLyzEjz+ibVuoqKB+fTRqhIULkZT0oQvl6IhmzfDwofxPo6MxZQo0NaGiAjU1tGmDQ4dkopubG4YNk1RGTQ3DhyMoSOYIjx5h7FhoaEBFBcrKGDAAnp4fqg8hXyCKNYRUrQsXLnC5YdWqVR8tXCHWREdHcw+qDA0NpWVOnDjBHfDvv/8GwOfzx4wZwxhTVVWdOHHitGnTVFRUuALOzs4Avv322/K9edq2bfv27VsAq1ev5rZ07NixS5cu3P8vXryYazd6/fq1rq4u96l0Xy5ImZubc2/9/f3/+3WJiUHDhujQoawJh8/HmDFo0QLFxfD3r9i3ZtkyMIYKD9F8fcEYzMzkHP/CBTCGo0clb/Pz0a4dGMPKlZItQiFGjULDhiguRn4+mjdH27bQ04O5OebMQXS05MGZgwMEAlhbo29f6Ojg5Encvw8A0dFo3Rp16+L33+HiAmtr9OmD+vXxLmtizx4wBlNTODjA2Rnm5mAMo0ejsLDSa7J9Ozp3lt/Kkp+PwYPRpAlOnYKTE27fxqBBYAx//CEp4O0NdXW0bo1Ll+DigitXoKMDHR08eSIpEBKC5s3RtCmOHIGTE06dQosWaNiQ+vGQWoZiDSFV69ChQ1wIWLNmzUcLV4g1L168aNy4MWNsyZIl0jKnT5/mDmhrawvAy8uLe2v1rtHC19d32LBhEyZMuH79OoD4+PhFixYxxurUqXPx4sVnz56JxeK7d+9ye/3www9v374tLCzct28ft8Xa2hpAUlJS586duS2LFi3y8vI6f/78mzdvANjY2BgaGi5fvjw+Pv4/XpTCQowbB8Zw+XLZxj/+kMQIAF5eFWPNrFlgDJGRMscJDgZjWLxYziliY6GhgUWLJG8fP0b9+lBRQf/+yMoCgIwMNGwI7sLm5qJlS9SpA29vSXmRCD/+CMZgZyfZYmgIPT1JPx6hEMbGUFSErW3ZGZOToasLPT3J8ceNQ8uWMg96Nm/G/PmVNtiUlKBfPxgby//05UsoKWH16rItCQmYPh0HDkj2HTQIKip4+rSsQEAAFBSwZIkkJy1YAMZk2pNsbcEYdu6Uf0ZCvkwUawipWgcPHqzSWOPr66ukpMQYGzx48K5du1xcXIqKiqTPkjhbt27l+tY8efdvdwsLC8ZY8+bNE9/1+SgoKOCaZ0xNTVEu1mhra6ekpHyaa8HJy8PcuWAMGzaUbfT3h5paWdeZ92PN7NlgDBUeewUGgjEYGck5i0iEiROhrS2JEVu2QE8PCxdCTQ0BAQBw/ToYk+SS7Gw0b47+/WWOwMUa6VgtAwPo6oK7FLm50NFB377g8yEQgM+XdKxZvhyM4fFj4F2M2LQJT55U7OUj18uXaN68rLGngsREaGqiVStcvozk5IotOk+egDHMmQNAUhmuPiNHokEDvHmD3Fy0bo2hQ2V2FIng6Ylnzz5eN0K+HBRrCKlaR48e5VLISunjj8r9h1gjFApnzpwpfU6kpKTUrl27uXPnOjo6SvsUb9y4kYs1AdwdHZgyZQoXa5YuXWpiYmJsbGxsbNy0aVPG2JQpUwAkJydzsaZXr14ln7BvaUqKZKT3hg1lt9i8PAwdiiFDyvrzcnnll1/KduRizfPnMkcLCak01gA4cgSMSeaAGTsWM2bg6VPUq4crVwDAxKQs9GRno1kzlHvSB3ww1sTHo3FjNGqE3r2hry959e6NZs3AGC5cAICHDyWPvVRU0KcPNmzA/fvyuxVzzp6FlhZiYiotcOAA6tUDY9DWxqhROHYMERGSj6ytJdt79ZKpT5MmkosWEwMFBcyeXenBCaktKNYQUrWcnJyUlZUZY7Pfu6nk5eVt3brV0tIyODiYG530T2INV0YaawCkpqbu2rWrZ8+e0l41XL45wD2hkBdrxo4dy5VpXo6enl7Lli1nzpzJHZOLNd999x2vwtif/ywwEN27S7q8lB/GdewYGMPw4VizBsuXY8UKTJoExtCjB4yNJY+lNm+WM+jJ2RmMYdcu+ad78QLq6jh0CElJ0NLC7t0A0KYN5s5FVha6dCnLMdnZ0NTEDz/I7P6BWOPvDwUFdOiAGTMwfXrZy9AQCxeWje1KTMTFi5gwAZqaYAyMYcEC5OTIr+3MmRg9Wv7EylL+/rC0RK9eUFUFY2jYUNID+uRJMIbevTFrlkx9FizA4sVISUF4OBQVYWDwoYMTUitQrCGkar19+7Znz55c00iQ7MgUW1tbLoKMHj1a7gDvqKiohg0bMsaWLVsm3Us6ZZ9tuY4dRUVFhYWFPj4++/btMzIy0tDQYIy1b9+e6w0jjTXBwcFc+VmzZjHGtLS04uLi8vLycnNzi4qKsrOzS0tLuSUdEhMTuVizcOHCT3MhPD2hpQXGcP16xY+uXsXgwRg4ED16oEcP9OkDPT0oKEBLC716SXrF/vknGMP58zI7csOjpN1fKhAKMXAgxo6FtTXq1pX0m5k7F998g9u3oayMU6ckJblYY2Iis/v7saZ9e3DTNKemQl0dw4YBgFgseQHIzUVurqR8aakkowgEyM6GnR309cs6D1WQmws9PZkB7e8rKJD8T2Eh4uNx8KBkcsKiIvj5QUEB69fLqQ/XGSgqCvXqYcoUmQMWFuLOHckjM0JqC4o1hFQ56fw0gwYNevDgQWlpKY/Hc3FxkQ7JPn36NFeyQqzJzs5u3749Y2zIkCF5eXkAhELhtGnTyscae3v7SZMmDRgwwLPcYN0BAwYwxlq3bs316t2wYQMXa/z9/blmof3793MnunbtGrdLcHDw999/b2xs7OTkhHJ9axZJe92+8+TJkxs3btjb2xdIb7QfFR2NVq3QurX8OWYAyTJP3EsohLs7FBSwZQuEQsmzqqAgqKqiXKsVAMyeDXX1ih1uyjtwAM2bY/ZstG0rWWjp4kXUq4fvvkPLlpD2GfqHsUZ6kKIi9O0LdfWKD8XWr8fgwYiPR34+pk1DuTAKADdvgjG8+13LcHVFo0YfWk3C0xMDBsj0UAYwbRqUlJCaiqwsNG2K/v1lOvG8fYtJkzBnDnJzIRRiyBA0bSozfU5MDJSVK2YdQr5wFGsIqXLFxcXSGfnU1dX79+/fu3dvdXV1bsukSZOK3s2Ta2VlxW3ksoVYLB42bBi3Zc6cOUeOHBk3bpyKigr3VMvGxgaAm5sbV0BHR2ffvn1nz57lpplhjBkbG3PT4ezatYsrM2zYsOnTp6empsbFxeno6DDGNDQ0tmzZcvToUT09vfJpKTExkRvabVihxwmwfft2xli9evVCQ0P/0c8vEmHGDDAGY2M8egQvL3h6wtMTHh7w8pL/UObevYpdhsVimJiAMZw7h/x85OXh+HHJ6O4PzMl7/z5UVMAY5s6VbAkKgoYGGMOECWXFsrPRpAmWLpXZd+tWmaYgbijW2bOIjQUAGxswhmHDEBAAHg8ZGZKmo549kZUFgQBjx0pCTFoaxGK8eIEJE6CoiHcNZjKOHEHHjh/qefPsGerUQZcuePgQJSUoKoKHBxo3xuDBkg5JGzeCMSxdipgYCIVISMDSpZJ+xFyjEddFevx4xMRAIEBsLAwMyjpNE1JbUKwhpDpkZWWZmZlx8/JJqaqqLlmyJC0tTVpM2m/G6d1AXGdnZy0tLekuurq6v/32G9fhxvrd3HQ3btzo3r07kzVhwgTpAOyAgABpyxBjjOth4+Lioq+vX36XJk2aSNuNXr9+XVms4ZZiUFBQCJZ7h35fXBwaNJB0nuW6mEhfderIb7/x9ARj2LxZZuPr1xg0CAoK6NULPXtCSQlTpyIj40OnzsuTPPqRjiTnGloYw8WLZcWystC4ccVYU2GAN9d/hYsyeXkQibBnD9TUUL8+Bg1Cly5gDN9+W9bnNyICPXqAMXTsiOHDoaWFBg2wZ4+c7FJcjAEDMGvWh34QAGfOQEUF9ephwAD06wdVVfToUXb1cnNhZARFRWhp4dtv0bo1FBUxbx7S0yUFRCJYWkp6Fg8ZAh0dMIZ9+ypOu0zIF45iDSHVJzIy8siRI+vWrVu3bt3evXsDAwMrFIiLizt79uy5c+cSEhKkGwMDA7dv37527dr9+/cnJSUVFxdfunTJysoqlms2AACkp6efOnVq3bp1ZmZm5ubmDg4OFfr5Pnr0aPPmzWvXrj18+LC0cSgjI+PcuXOmpqbr1q3bv39/WFiYtHxBQYGNjY2VldW9e/fEss0hAQEBZ86cuXr1Kjet38fl5uLKFZw/j3Pn5LzevJGzS1ISrKzkdPsoKMCZM1i6FEZGuHLlIx1sOV5e+OMPlB+j7uGBM2dk8lBxMS5frriMw9OnOHMGr15J3opEsLWFqSlOnIB0/HxEBH7+GUZGWL4cly8jL0/mCDk5OH8ey5ZhyRJs3Ihyl1fG27fYsuUfrdkZHo6dO2FkBCMjHD0qZ4EqHx+sX4/Fi7FqFVxc5LRj+flh40YsXgwzM+pVQ2olijWEEEIIqSUo1hBCCCGklqBYQwghhJBagmINIYQQQmoJijWEEEIIqSUo1hBCCCGklqBYQwghhJBagmINIYQQQmoJijWEkOomFItKhKVylzwoFpYWC3k8UaXLCLwr8A8m4qsufJGgWFgq+sAaDv/Ay8LU18XvTa9HCPmXKNYQQqpVoZA3/tEv84IO80XC8tvTeHkmYSdauCzVdjHq4rn6VLyLSCwzr39ySbZxyLFWrsbaLkbdvNYej7srFH8WE///GuvQw3v9q6L0jxetRBovt5uX6d4X1p+wVoR8nSjWEEKq1caIy+yvIUN9tpYPJRmlb7/z+0n59qwfwv7YFX1zpO+PzHbSvhc20gIpJdkD729kdlNXPbHaHf33KN+fmPXY3S/+romfoCLz8IvMbnJMYfJ/PsKdtCANp/m+Wc8/XpQQ8kEUawgh1ccxNZDZT2PWY0b57Sgfa3ZG3WC2Ey699uTeFgp5I31/qnt71pO8V9yWH5//yWzGX028x70tFpZO89/TyGl+eP7rav0B5NkccUXx9ozYwpSPF63EL9E39b3NPpPGJ0K+aBRrCCHV5HVxpq778qn+e3vcMxv4YLP0Lp7NL+jiZdrVy7RIWLY8p3dmOLOb/GPkNQCFwpK27su7e60TiMueW3lmPGU2EzaEX4Q8QrGoWMgDUCIs9Uh/ElOQzC/XHSeuMM0hxT8g50WBoFjuvnGFqS5pIbdTAhKKMuR2mXlZmGqf8vhlYSqAnyKvVYg1hUJeQE7MrTd+YXlxpbLP2t5XIizte3+jSdjJD5RJ4+W6pIfeTgl4XSR/xfJUXo5d8uN7mc/y+EXvfyoGYgtTbJIfPcqJzpf3IxNSa1CsIYRUk9mBv7Z3X5FUnDXM98e+9zdIY82j7GhmP2152KnyhQsEJdouRoN9tgCIKUhh9tOMQo+XLxBflN7k7oJRfj/LPZdPVmT/+xvPvHKb9MiS3fpOy2UJ94gnNC9+5uPdDZ0MVR0NNO7M7ei56q83Mgt338uMGOmzVf3OvAZ35ik6TFdxnD3Tf198UZq0QEJRxrzAXzWc5qvcnlX/zlyzZxfWPD1b19GAizVi4O83D3t6r2/gNE/VcbbanTn971ncTQ/5wGVJKMpQcZxz642f3E/zBcUbIy61cjNRcZytdmd2QyfDBUGHk4qzyu++KOhI47sLVB0N1Bxnt3I1PhHvXP4ILwqTpz3erX5nXn3HOfUcDbp6rr6e5PPeeQipJSjWEEKqw6l4F+Yw3SElAEDfexb9ysUal/QQZjNhY8Sl8uWLhLyOHqu/8VgFwCk1iNmMr9CjtkjI6+61roPHyqzS/PdP55Iequxo0NLVpM99i43hF+YHH8nmF7woSG7laqzuOOtAjK1reujdtOARvj/WtZv897tIEZQb2+D2rGZ3F1xI8HTPeOKQEmAQeJDdGDYz8KBALOJOOsrvZ2Yzblvkny7poecTPHp4r2vkaND47gIu1jzKjm7gOGeYz48OKf7uGWGXX3ur35mj4DD9SV58ZVfmfIJHE+dFMZU8w/o56i9mN3VD+CWntCC39DCz8AvsxtBxD38pFPIA5PAL+t6zYLYTfo76yy097G5a8OTHu5nNeGmySSzO7O5lyuynHoyxc894YpP8qLvnGkXbSc5pH0pahHy5KNYQQqpc+NsEdad5q5+eASASi/vIxhqntCBmM37b8z/L71Ik5HXzWqfrvhzAn4n3mfWYoy9vly8gEAn73dug7bIkQd5zGc+Mp8xuciu3ZdxzIm709aqnVsx2onXyI2mxYiGvh9faDp6ruOdfh2LsNBxm3HrzUFqgVCTo7W3exu2HtJJcAFav3Jj1mF+ib0oLhOXFa95d2MBpPhdrziS4M5sJTmnB0gK2Kf7jH+1ySQ+t7OLMCzo8zX9vZePDR/pub+v+A19c9gRtc8TlxSHHUkpyAOx9Yc1ujTr60rF8hYf5bGvhYpRckgPg11h79vfoP+JdpAUCcmPq355pGHxERF15SG1EsYYQUrX4IuG4hzu7e5nm8gsACMSiCrHmblowsxm/9fnV8nsVCXldvUzbu68AcD3pAbMeezjWQfawgj73LFq4Lk2UN92LR8YTZjNhRdhp6Zas0vxWbss6e63N5ReWigQ8EZ8n4oshtgi/xGzGu2c8AfC6OCMyP0m6S6lIkMsvnPhoV3uPFVxKmBP0a93bM6Py35Q/1+ygX5XfPYT6O9mPWY8b5bf9blpwLr/woxcno/RtVy/TX6JvVFZgbtBhZjtxU8Tl0Lz4CtP5CMWi3vcsmt5dmFCczhcJuZ9IJBYdj7vL/h59KdELQP/7G3XdlxeW67QEwD8nJjQvnmINqZUo1hBCqpAY4q2RVxvcmfP07Svpxv73Nw58sEn61ik1iNmMk9ta085tOYC/knyY9ZjybRIAhGJhv/sbdCqJNe4ZYcx+yi9RZXEhODeu4d0Fanfm9L5n0d17HffSv2fWzHkxuzVSOpi8VCSwSX60MfyiQeDB3vctWrmaMNuJ3b3XZfDeAtD3Nm/rvjy1JKf8ubZEXJV2Gc7h588KOMCsxzG7Ke3dl88KPHA96UGybPnyXNNDGzjN98h4UlkBv+znum7L2N9j6jka6N8zN3923jsznGu8SS7Jbue+vM7tGd281/XwXs/9RD3vrW/vvoLdGrnnhbVAJNRyXTLowebKDk5I7UOxhhBShULz4pjdFFXHOaueWJmEnjAOPWESdrKZ8+LmLksWBh89GGMHwCvzGbOdaCE7pqlIWKrnvrKr11oAD7OjFewmb4mUac7JLH2r676i7/0NJaLS98/LxZodUX9Jt3hlPqtze2ZXzzXzg47MCjwoeQUcXBj82+Lgo38n+wEIy4vv7W3G7Kc2d17c7/6GlU9OWyc/HPxgSwePVRmlb8UQd/dap+uxIo2XW/5c2yL/LD8SSiAWuqaHrX56Rs99hYLD9+zWyK6ea/xzXsi9PpbRt1q5mXxgVmUASSVZl157T35s2dxlCbMZx6zHLgz5vVDIe1HwprHzwubOiwwCDxqU+4kMg48sCjrslBqcLyjWdFlMsYZ8VSjWEEKqUEhu3Ajfn4Y82Nzrnrm+txn33/p35tS/M7eb+8oVT04DiC5IVr0zd17QkfI7ZpTmNXYynOa/D0A6L6+h04LpAfvLF3j69pWK46xFwb/LPe/7sSamIEXDaf5Iv+0VShYJedyY51KRYOIjS2Yz4dQrlzx+Ucm7qDH58Z627stTebkAvvffp35nboWZ98zCLyjenimNNdIR1PmC4pC8OKOQY+zv70xC5YzfLhULhvv+NCfo1w9cQJ6Izw1rF4pFOfxCuxT/nt7rmM04t/QwoVjU2XPNNx6rc/gF5XcpEfJz+IViiLP5Be3cf+jmta7CMe9lhrunhxUISz5wXkK+UBRrCCFVSCwW88WCUpGAJxKUigR8kaBIyOt9z7zPfYtCIU8sFuNdnmhyd0H5RZHOJLgz63FXEu8B4IuEQ322tXRZmlH6VlrgSuI9ZjPx97g7cs/7fqwpEfHHPNyp6jjreUFS+ZIrn5we+mDLq6L0AkFJ47sLuniZlv/0RUGyxp15eh4ruS66v0TdZLdGnUvwkBYoFvJ63TNTvTMnrigNwL4XNv3vb3hTUjYAO7u0oIHT/NEPd7xfyZSSHC0Xoz8T71d29dJ4uRMfWXLhT+pa0gN267vzCZ4A5gcdUbCf5pMtMz3x9ufX+3uv98t6DmBZ2B/MZoJXZrj00zx+UUvXpV0812aXyoQhQmoHijWEkOrWy9u8zz2L8luskx8x63HTHu+OL0oXiIVu6WHNnAw7e65JLsnmCtin+DPbifOCDycUZ/BEAr/s5y2cF3X3Wp/Nl39vdssIZXaTfo66Xn6jQ2oAs504+MGmoNyXJcLSVF6uZfQtdmOYvrdZsbCUJ+L3umeuaDfFNuWxQCzki4TBuS9HPdzBrMc1dV4U/vY1gDcl2e3dlzd1mueQElAsLE0qzjIKPc5sxjZ0MowtTAU3jv3miHlBhyPzk0RiUSovd+8La2Y9dnf0rfcreeuNX1PnxRGVT5TMEwlG+e1gNuNPv3JN5eUKxaLI/MTRfj8rO0x/8jYegFfmM2X7ad08V3tnhhcJeTn8Aqt4V2YzsbnzYm4ImH9OTH2HmV08Vj7OjuaJ+AlFGeuenWd/jzopO7cNIbUGxRpCSLV6fyQU56fn15n9tJauSwc92FzXYYaem8njnGjpp6UigUXEJWY3pY2byYAHm9TvzOnqsfJeuUaICrhYs1021gA4EX+3rsNMdcc5/e9v/MZzFbOdNPzBJmmwsEt53MhxjqqjwWCfLUMebGnhYrQ09PiikGOK9t/7ZEVyZbwynnX1WFnXYUbf+xs6uC/vfc/8O7/t9e/MfVmYAiBfUGwceoLZTmx6d+FQn20dPFYqO86aEbA/nZf3fiWn+e8b8GBziVBO3yCp8Leve3itZbaTOnisGuqzVdN5YSMnw19jHaQTLp9/7dHSeUk9x1l972/o5mWq6DC9v7f5w+wo6RGuJN5r5jRf3XH2gAebWrsZM/vppk/PFsvrkERILUCxhhBS3ZzTQlzkTbzrkxW59umZpaHHLaNvyR095Jnx1PTZWePQE3te/J0qLyhIJRZnnUtwD8p9+f5HYXmv9kT/bRx2cs3TM9cS7/HKLaoAIDTv1Y6o68ZhJ9Y8PeuUGgQgrjDt3Cv3hHILdL8pydn3wtoo9Ni2yKupJTkxBcl/Jt4vfpdORGKxV8ZTi/CLJmEnVz457ZAaUNliT0de3rZP8f/AT8HJ4RdeTPBY8eSUSdjJrc+vRryt2LqTUJx5MMbWJOzkD0/+OPvKLVdQcf2EFwUpu6JvGoedNH129gOjrgipBSjWEEIIIaSWoFhDCCGEkFqCYg0hhBBCagmKNYQQQgipJSjWEEIIIaSWoFhDCCGEkFqCYg0hhBBCagmKNYQQQgipJSjWEEKqkViMwkLJqzKFhSgoQMm/XIixsBBRUQgNRWgo0tMhFFYswOcjP7/s7Nzrn5yFx0NBAQoL5RyTIxRKjiySP+0eIaTaUKwhhFQXHx9MmwZtbWhpoWVLLF2Kl7KzACclYckStGiBZs3QuTOOHoVAUMmxyklNxfbt0NMDY1BWRp06aNQIY8fCyUmm2N27aNcOenpo1QqtW6N1a7RqhW7dsHs33rz50PEtLdG+Pb75BpcuyVTQiYgAAAg4SURBVPlULMaPP6JtW/Tti4iIj9eWEFKVKNYQQqqFuzvU1dGsGdatw4EDMDICY+jcuSzZpKRgwAAwhrVrceAAxo0DY9i58yOHffYM3buDMfTpAzMzXL+Oixcxbx5UVcEYjh8vK2lrKzmjoSFmz8b8+Rg/Hi1agDGMHo309EpPsWoVGANjMDCQ0x6Tm4u2bcEY6tZFiJwVIQgh1YliDSGk6hUUoEcP1KmDwMCyjZcvgzEsWyZ5+9NPYAx//il5y+Nh5kxoaOBJ5WsYZWaib18wht9/r/g4KTgYurpQVUVYmGSLnR0Ywy+/lJURCpGdjcWLwRh+/bXSs6xdCwUF6OhARwcxMRU/tbFB06Zo1Ajq6ggN/dBFIIRUPYo1hJCqFxAAFRUsXCizsbQUbduia1eIRODxoKuLbt1knjrduwfGYGZW6WH37wdjWLVK/qdXr4Ix7NsnecvFml27Khbz9gZjMDWt9CyrV0NJSRJuzp6t+Om8eRg8GJMmoV69iq012dlwdoajY8WHXFwHI+4nTUmBoyN8fMpiWVYWXF3h5ob8/EqrRAipBMUaQkjVe/sWgYGIj5fZmJUFTU306gUAL1+CMSxZIlPg1Ss0bYqRI+Ufs7gYvXpBVRXPnskvUFCAixfx6pXkLRdrLC0rFnNzA2PYuLHSynMPoW7fRpcuGDFC5qPYWGhqYvdurFoFBYWyWFNcDEtLtGoFNTWoqKBhQxgbIzu7rGLjxmH7dpw6hYYNUacOFBUxahTi42FvDx0dKCuDMfTti6CgSmtFCJGHYg0hpIb88QcYg4UFADg6gjHs3i1ToLgYPXuifXtkZMjZ/dEjKCnh22/B5/+j03GxZts2FBVJhkEVFSE4GOPGoX37D3WL4WJNSAi2b4eKiky/4Js3oayMJ09gbCwTaywswBhmz4aHB9zcsGMHFBQwdaqkAaagAF27okkT6OnhyBHcvQtzc0m/nwEDsGsXnJxgaQnGMGYMCgr+0U9HCAFAsYYQUjP8/NCkCVq3Rmws8K6fzeHDMmUEAgwYgObNy1pcynN2lvPwSCDA69eIj8erV5JXYqKkn6+DAxhD/fpo00YyEqptWygrQ0EB169/qKpcrImIwIMHMpUUiTBzJvT1AWDBgrJY8/w5VFQwebLMQY4dA2OSZ1iFhejRA4zB1lbyKY+H/v3BGM6dK9tl+nQoKtLoKkL+FYo1hJBq9+gRtLSgoQE3N8kWrh/MoUMyxfh89OsHbW28fi3nILdvgzGsWyez8elTtG2L5s2hrQ0dHejqYsIESbcVe3swhh49sGAB5syBoSHGj0enTlBWRu/ecHevtLZcrPH3R3ExdHUxciSKigAgKwtNmkjqPH8+FBQkXYZ//lkSWQQClJSgpASlpQgJgbIyDAwAoLgYnTqhZUuZ4Vdz56JOHTx/XrbFxATKynj69B9dUkIIAIo1hJDqZmMDdXU0bIjbt8s2/vmnnNYaoRADBkBLS36s8fQEY5g4UWZjbCxMTLB4MYyMYGgIJSXo6UlijdyRUAUFuHQJCgrQ1UVCgvwKc7HG1xcATEygpITISAC4cAF16yI4GADmzSuLNSYmYAwdOqBHD3TrVvZiDJ064e1bCIXQ00P//pJ4xJk6FXp6MkHHyAh161bac4gQIg/FGkJINTp9GvXqoUOHin1ZfH2hoIBNm2Q2ZmWhfXv06YPiYjmH4rrrtmyJlJRKT9elCzp0kIk174+EAjBrFhiDq6v8g5SPNVyWOnYMAKZMwdCh4PEA2Vgzd64kb82fjzlzJK/582Figh07UFiI0lLo6mL8eJmzTJ2Kjh2RmVm2hWINIf8exRpCSHXZvh2MQV8fL15U/Cg1FY0bY+pUmY3PnkFVteKw8PKWLgVjOHNG/qdCoZxYI3d+PzMzMIZr1+Qfp3ysefsWLVtiwgRERKBp07LZbsrHmpUry8pLicXIyJAM6i4shK4uxo6VKTB1Kr75RqZzNMUaQv49ijWEkGphZQUFBRgYyJ+ORSDAiBHQ0UFaWtnGK1ckU+1VJjAQjRpBQwOOjnI+dXGBqiratJGJNfv3VyyWkIAePT7Ui6V8rAFgagpNTWzYgLZtERcn2cjFGq4JytoajGHNGpmDPHgAfX1JM09REcUaQqoIxRpCSNV7/hwNG0JBASdPwssLd+9KXo6O8PWVLCHp5ATGMGsW4uJQUgIfH+jooEePsule5LKyQt26UFCAsTHc3ODjAx8fuLpi4UIoKEBJCaamkjYSLtbMng1nZ8nZnZ1x4oSk18vcuZWuP7ViBRiDj4/kLVfPOnVk2pbmzAFjkn42hYUYORKM4cABvHmDoiL4+aFjRzCGGzckBdq0wahRMmeZPLniUPbFi6GkRLGGkH+FYg0hpOpZWYExKClJJpor/+rdW9J1hs/Hli1gDC1bom9fqKmhWzfcv//xg3t6YvjwioflVnpycoJYLCnGjYR6/6WhgRUrPrTaJfdQSRpr8vKgrw/GZIaFc/1puFgD4OVLjBoFxiR9g9TVoa4uaarBu9aaceNkzjJ5Mjp0kIk1S5bQSChC/i2KNYSQqhcVhcuXce0arlzB1atlr8uXcfu2TDPJgwcwN8cPP+DAgQ8tP1lBaSkePcLu3bCwgIUF9u5FUFDFafpevcKlSzJ1uHQJHh5ISvrIwR8+xIULMh2T/fxw5YpMM5K3Ny5flunwW1yMGzdgbo4VK7Bnj8zKVmIxHB0rJjY3N9jby3SO9vHB1avIyvqH14AQAoo1hBBCCKk1KNYQQgghpJagWEMIIYSQWoJiDSGEEEJqCYo1hBBCCKklKNYQQgghpJb4H2V7ClMl09StAAAAAElFTkSuQmCC&quot; width=&quot;640&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;
Partition&lt;/h2&gt;
&lt;img alt=&quot;&quot; height=&quot;509&quot; src=&quot;data:image/png;base64,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&quot; width=&quot;640&quot; /&gt; &lt;/li&gt;
&lt;li&gt;&lt;h2&gt;
Replication pros and cons&lt;/h2&gt;
&lt;h4&gt;
&lt;b&gt;Pros&lt;/b&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;HA&lt;/li&gt;
&lt;li&gt;Scales reads linearly&lt;/li&gt;
&lt;li&gt;Asynchronous replication&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Cons&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Can NOT scale writes linearl&lt;/li&gt;
&lt;li&gt;Cluster memory capacity equals a single node memory capacity&lt;/li&gt;
&lt;li&gt;Conflict resolution for asynch. replication&lt;/li&gt;
&lt;li&gt;Global locking for synch. replication (deadlock prone)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Usage&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Small cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Small capacity&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Read-most&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;
Partition pros and cons&lt;/h2&gt;
&lt;h4&gt;
Pros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Scales writes linearly&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Scales memory linearly&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Configurable HA&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Local lock only.&amp;nbsp; Synch. replication only. No Conflict resolution&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Cons&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Can NOT scale reads linearly&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;No asynch. replication&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Usage&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Large cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Large capacity&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Write-most&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/7178710608403587326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2013/10/cache-replicatio-and-partition-basic_13.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7178710608403587326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7178710608403587326'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2013/10/cache-replicatio-and-partition-basic_13.html' title='Cache Replicatio and Partition -- Basic Concepts and Pros and Cons'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-7353025835809259040</id><published>2013-03-27T22:03:00.000-04:00</published><updated>2013-03-27T22:03:34.457-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Certificate"/><category scheme="http://www.blogger.com/atom/ns#" term="JMS"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="Weblogic"/><category scheme="http://www.blogger.com/atom/ns#" term="Websphere MQ"/><title type='text'>Connecting to Websphere MQ from Weblogic using Certificate</title><content type='html'>Here is the requirement: we need to connect to a remote Websphere MQ sever (v7.x)&amp;nbsp;from a Weblogic servier (v10.3) using a certifcate by configuring MQ destination and connection factories in a JMS foreign&amp;nbsp;server.&lt;br /&gt;
The difficulty thing is how to authenticate the JMS client on Weblogic with the MQ server using a SSL certficate.&lt;br /&gt;
&lt;br /&gt;
Originally I though I could configure my keystore on the &quot;keystore&quot; and &quot;SSL&quot; tabs of a Weblogic service. But this option threw the following exception:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;[EJB:011014]The Message-Driven EJB failed while creating a JMS Connection. The error was:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager &#39;&#39; with connection mode &#39;Client&#39; and host name &#39;NAUMIB1.jpmchase.net(1414)&#39;. Check the queue manager is started and if running in client mode, check there is a listener running. Please see the linked exception for more information.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Nested exception: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode &#39;2&#39; (&#39;MQCC_FAILED&#39;) reason &#39;2397&#39; (&#39;MQRC_JSSE_ERROR&#39;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Nested exception: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2397;AMQ9204: Connection to host &#39;NAUMIB1.jpmchase.net(1414)&#39; rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2397;AMQ9771: SSL handshake failed. [1=javax.net.ssl.SSLHandshakeException[sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target],3=NAUMIB1.jpmchase.net/169.69.169.122:1414 (NAUMIB1.jpmchase.net),4=SSLSocket.startHandshake,5=default]],3=NAUMIB1.jpmchase.net(1414),5=RemoteTCPConnection.protocolConnect]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Nested exception: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2397;AMQ9771: SSL handshake failed. [1=javax.net.ssl.SSLHandshakeException[sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target],3=NAUMIB1.jpmchase.net/169.69.169.122:1414 (NAUMIB1.jpmchase.net),4=SSLSocket.startHandshake,5=default]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Nested exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Nested exception: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Nested exception: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager &#39;&#39; with connection mode &#39;Client&#39; and host name &#39;NAUMIB1.jpmchase.net(1414)&#39;. Check the queue manager is started and if running in client mode, check there is a listener running. Please see the linked exception for more information.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:608)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:236)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.wmq.internal.WMQConnection.&lt;init&gt;(WMQConnection.java:440)&lt;o:p&gt;&lt;/o:p&gt;&lt;/init&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:7062)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:6453)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:295)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6230)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:115)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.internal.JMSConnectionPoller.getConnection(JMSConnectionPoller.java:473)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.internal.JMSConnectionPoller.createJMSConnection(JMSConnectionPoller.java:1962)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.internal.JMSConnectionPoller.connect(JMSConnectionPoller.java:780)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.internal.MDConnectionManager.startConnectionPolling(MDConnectionManager.java:241)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.manager.MessageDrivenManager.start(MessageDrivenManager.java:584)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.deployer.MessageDrivenBeanInfoImpl.mdManagerStart(MessageDrivenBeanInfoImpl.java:1174)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.deployer.MessageDrivenBeanInfoImpl.deployMessageDrivenBeans(MessageDrivenBeanInfoImpl.java:1154)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.deployer.EJBDeployer.deployMessageDrivenBeans(EJBDeployer.java:1675)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.deployer.EJBDeployer.deployMessageDrivenBeansUsingModuleCL(EJBDeployer.java:1450)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.ejb.container.deployer.MDBServiceImpl.startService(MDBServiceImpl.java:69)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.server.ServiceActivator.start(ServiceActivator.java:98)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode &#39;2&#39; (&#39;MQCC_FAILED&#39;) reason &#39;2397&#39; (&#39;MQRC_JSSE_ERROR&#39;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:223)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 21 more&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2397;AMQ9204: Connection to host &#39;NAUMIB1.jpmchase.net(1414)&#39; rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2397;AMQ9771: SSL handshake failed. [1=javax.net.ssl.SSLHandshakeException[sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target],3=NAUMIB1.jpmchase.net/169.69.169.122:1414 (NAUMIB1.jpmchase.net),4=SSLSocket.startHandshake,5=default]],3=NAUMIB1.jpmchase.net(1414),5=RemoteTCPConnection.protocolConnect]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:2010)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1227)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.msg.client.wmq.internal.WMQConnection.&lt;init&gt;(WMQConnection.java:355)&lt;o:p&gt;&lt;/o:p&gt;&lt;/init&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 20 more&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2397;AMQ9771: SSL handshake failed. [1=javax.net.ssl.SSLHandshakeException[sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target],3=NAUMIB1.jpmchase.net/169.69.169.122:1414 (NAUMIB1.jpmchase.net),4=SSLSocket.startHandshake,5=default]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1020)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.connect(RemoteConnection.java:1112)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.system.RemoteConnectionPool.getConnection(RemoteConnectionPool.java:350)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1599)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 22 more&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection$6.run(RemoteTCPConnection.java:1005)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.security.AccessController.doPrivileged(Native Method)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1000)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 25 more&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:294)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:200)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.security.validator.Validator.validate(Validator.java:218)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 35 more&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:289)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... 41 more&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: small;&quot;&gt;The above exception is complaining about the CA&#39;s used in the MQ server certificate are not available in my&amp;nbsp;keystore. But I am sure I have these CA&#39;s in the keystore.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: small;&quot;&gt;The real problem is the keystore you configured on Weblogic server &quot;keystore&quot; tab is only recognizable when the Weblogic server DIRECTLY connects to an SSL server.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: small;&quot;&gt;In my case, my JMS MDB on Weblogic connects to the MQ server through IBM MQ API. So Weblogic is not directly connecting to the MQ server. You can see ths from the&amp;nbsp;IBM packages &quot;&lt;span style=&quot;font-family: Courier New; font-size: x-small;&quot;&gt;com.ibm.msg.client&quot;&amp;nbsp;&lt;/span&gt;&amp;nbsp;and &quot;&lt;span style=&quot;font-family: Courier New; font-size: x-small;&quot;&gt;com.ibm.mq.jmqi&lt;/span&gt;&quot; in the above exception.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: small;&quot;&gt;Finally in order to connect successfully, you just need to define the following 4 properties on the Weblogic startup cmd line:&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: #1f497d;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: small;&quot;&gt;-&lt;span style=&quot;color: black;&quot;&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &#39;Arial&#39;,&#39;sans-serif&#39;;&quot;&gt; javax.net.ssl.trustStore=&lt;your file=&quot;&quot; full=&quot;&quot; java=&quot;&quot; key=&quot;&quot; name=&quot;&quot; store=&quot;&quot;&gt; &lt;br /&gt;-D javax.net.ssl.trustStorePassword=&lt;your java=&quot;&quot; key=&quot;&quot; passphrase=&quot;&quot; store=&quot;&quot;&gt;&lt;br /&gt;&lt;/your&gt;&lt;/your&gt;&lt;/span&gt;&lt;span style=&quot;color: #1f497d;&quot;&gt;&lt;span style=&quot;color: black; font-family: Calibri;&quot;&gt;-D&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Arial&#39;,&#39;sans-serif&#39;;&quot;&gt; javax.net.ssl.keyStore=&lt;your file=&quot;&quot; full=&quot;&quot; java=&quot;&quot; key=&quot;&quot; name=&quot;&quot; store=&quot;&quot;&gt; &lt;br /&gt;-D javax.net.ssl.keyStorePassword=&lt;your java=&quot;&quot; key=&quot;&quot; passphrase=&quot;&quot; store=&quot;&quot;&gt;&lt;/your&gt;&lt;/your&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraph&quot; style=&quot;margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1; text-indent: -0.25in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/7353025835809259040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2013/03/connecting-to-websphere-mq-from.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7353025835809259040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7353025835809259040'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2013/03/connecting-to-websphere-mq-from.html' title='Connecting to Websphere MQ from Weblogic using Certificate'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-3567770886318424096</id><published>2012-12-25T22:24:00.001-05:00</published><updated>2012-12-25T22:24:41.216-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="H2"/><category scheme="http://www.blogger.com/atom/ns#" term="IMDG"/><category scheme="http://www.blogger.com/atom/ns#" term="Lucene"/><category scheme="http://www.blogger.com/atom/ns#" term="MongoDB"/><category scheme="http://www.blogger.com/atom/ns#" term="NoSQL"/><category scheme="http://www.blogger.com/atom/ns#" term="RESTful"/><category scheme="http://www.blogger.com/atom/ns#" term="Sphinx"/><category scheme="http://www.blogger.com/atom/ns#" term="XMLDB"/><title type='text'>Technical Evalutions for a Real Time Searching System Part 1 -- Overview</title><content type='html'>I recently conducted a technical evaluations for a real time search system (RTSS hereafter). It primarily focuses on mature open source frameworks. Many technologies involved are quite new and very interesting.&lt;br /&gt;
I present my ideas in a 4-part series:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Part 1 -- Overview&lt;/li&gt;
&lt;li&gt;Part 2 -- Solutions Based on SQL and NoSQL DB (H2 and MongoDB)&lt;/li&gt;
&lt;li&gt;Part 3 -- Solutions Based on Index Search Engines (Lucene Solar and Sphinx);&lt;/li&gt;
&lt;li&gt;Part 4 -- Solutions Based on XML DB (MarkLogic and Berkeley DB XML) &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2&gt;
1 Main Business Requirements for RTSS&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Supports auto-complete and spell checkers on customized list of names;&lt;/li&gt;
&lt;li&gt;Supports advanced searching and browsing on many combinations of attributes;&lt;/li&gt;
&lt;li&gt;Support ranking / relevance;&lt;/li&gt;
&lt;li&gt;Supports different types of clients (Java/C/C#) by being service-oriented;&lt;/li&gt;
&lt;li&gt;Supports huge user based by being reliable and scalable;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
&amp;nbsp;2 Architecture Layers&lt;/h2&gt;
The RTSS can be divided into 3 logic layers. From front-end to back-end, they are as follows:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The UI layer that includes web applications hosted on Jetty/Tomcat/JBoss, and non-web applications such as Java Swing and c/C++;&lt;/li&gt;
&lt;li&gt;The service or business layer that provides results to the UI layer for auto-complete and spell-checker and all kinds of search requests either in a language neutral format such as XML, Fast Infoset, JSON or such descriptive binary protocol as Google Protocol Buffers;&lt;/li&gt;
&lt;li&gt;The DAO layer that provides the service layer with search results. Data stores (SQL, NoSQL, index search engines and XML DB) will also be discussed along with DAO.&lt;/li&gt;
&lt;/ul&gt;
The 3 layers may be hosted on different servers for flexibility and scalability. However, they are usually combined together if possible for better performance. Data stores are usually on a separate server. However, in-memory DB can be embedded into the service layer.&lt;br /&gt;
In the following discussion, the lines or words in &lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;bold blue&lt;/b&gt;&lt;/span&gt; are viable options for final selection.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/3567770886318424096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2012/12/technical-evalutions-for-real-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/3567770886318424096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/3567770886318424096'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2012/12/technical-evalutions-for-real-time.html' title='Technical Evalutions for a Real Time Searching System Part 1 -- Overview'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-282421157515105569</id><published>2012-12-25T21:35:00.001-05:00</published><updated>2012-12-25T21:35:54.126-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GPGPU"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenCL"/><category scheme="http://www.blogger.com/atom/ns#" term="Parallism"/><title type='text'>GPGPU High Performance Computing using OpenCL -- A Uniform and Portable API across Multi-core CPU and Many-core GPGPU</title><content type='html'>&lt;i&gt;Although this post overlaps with &lt;a href=&quot;http://yongjun-jiao.blogspot.com/2011/02/gpgpu-high-performance-computing-using_26.html&quot; target=&quot;_blank&quot;&gt;this previous one&lt;/a&gt;, it shows helpful diagrams and its approach is more systematic. Here it is.&lt;/i&gt;&lt;br /&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:RelyOnVML/&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves&gt;false&lt;/w:TrackMoves&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val=&quot;Cambria Math&quot;/&gt;
   &lt;m:brkBin m:val=&quot;before&quot;/&gt;
   &lt;m:brkBinSub m:val=&quot;&amp;#45;-&quot;/&gt;
   &lt;m:smallFrac m:val=&quot;off&quot;/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val=&quot;0&quot;/&gt;
   &lt;m:rMargin m:val=&quot;0&quot;/&gt;
   &lt;m:defJc m:val=&quot;centerGroup&quot;/&gt;
   &lt;m:wrapIndent m:val=&quot;1440&quot;/&gt;
   &lt;m:intLim m:val=&quot;subSup&quot;/&gt;
   &lt;m:naryLim m:val=&quot;undOvr&quot;/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState=&quot;false&quot; DefUnhideWhenUsed=&quot;true&quot;
  DefSemiHidden=&quot;true&quot; DefQFormat=&quot;false&quot; DefPriority=&quot;99&quot;
  LatentStyleCount=&quot;267&quot;&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;0&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Normal&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;heading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;35&quot; QFormat=&quot;true&quot; Name=&quot;caption&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;10&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; Name=&quot;Default Paragraph Font&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;11&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtitle&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;22&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Strong&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;20&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;59&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Table Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Placeholder Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;No Spacing&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Revision&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;34&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;List Paragraph&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;29&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;30&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;19&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;21&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;31&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;32&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;33&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Book Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;37&quot; Name=&quot;Bibliography&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; QFormat=&quot;true&quot; Name=&quot;TOC Heading&quot;/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:&quot;Table Normal&quot;;
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:&quot;&quot;;
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin-top:0in;
 mso-para-margin-right:0in;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0in;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;}
table.MsoTableGrid
 {mso-style-name:&quot;Table Grid&quot;;
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-priority:59;
 mso-style-unhide:no;
 border:solid windowtext 1.0pt;
 mso-border-alt:solid windowtext .5pt;
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-border-insideh:.5pt solid windowtext;
 mso-border-insidev:.5pt solid windowtext;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:shapedefaults v:ext=&quot;edit&quot; spidmax=&quot;1215&quot;/&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:shapelayout v:ext=&quot;edit&quot;&gt;
  &lt;o:idmap v:ext=&quot;edit&quot; data=&quot;1&quot;/&gt;
  &lt;o:rules v:ext=&quot;edit&quot;&gt;
   &lt;o:r id=&quot;V:Rule1&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_399&quot;/&gt;
   &lt;o:r id=&quot;V:Rule2&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_642&quot;/&gt;
   &lt;o:r id=&quot;V:Rule3&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_643&quot;/&gt;
   &lt;o:r id=&quot;V:Rule4&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_597&quot;/&gt;
   &lt;o:r id=&quot;V:Rule5&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_598&quot;/&gt;
   &lt;o:r id=&quot;V:Rule6&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_635&quot;/&gt;
   &lt;o:r id=&quot;V:Rule7&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_636&quot;/&gt;
   &lt;o:r id=&quot;V:Rule8&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_640&quot;/&gt;
   &lt;o:r id=&quot;V:Rule9&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_641&quot;/&gt;
   &lt;o:r id=&quot;V:Rule10&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_226&quot;/&gt;
   &lt;o:r id=&quot;V:Rule11&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_229&quot;/&gt;
   &lt;o:r id=&quot;V:Rule12&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_232&quot;/&gt;
   &lt;o:r id=&quot;V:Rule13&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_407&quot;/&gt;
   &lt;o:r id=&quot;V:Rule14&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_410&quot;/&gt;
   &lt;o:r id=&quot;V:Rule15&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_413&quot;/&gt;
   &lt;o:r id=&quot;V:Rule16&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_143&quot;/&gt;
   &lt;o:r id=&quot;V:Rule17&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_148&quot;/&gt;
   &lt;o:r id=&quot;V:Rule18&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_151&quot;/&gt;
   &lt;o:r id=&quot;V:Rule19&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_118&quot;/&gt;
   &lt;o:r id=&quot;V:Rule20&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_115&quot;/&gt;
   &lt;o:r id=&quot;V:Rule21&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_121&quot;/&gt;
   &lt;o:r id=&quot;V:Rule22&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_124&quot;/&gt;
   &lt;o:r id=&quot;V:Rule23&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_119&quot;/&gt;
   &lt;o:r id=&quot;V:Rule24&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_116&quot;/&gt;
   &lt;o:r id=&quot;V:Rule25&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_122&quot;/&gt;
   &lt;o:r id=&quot;V:Rule26&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_125&quot;/&gt;
   &lt;o:r id=&quot;V:Rule27&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_301&quot;/&gt;
   &lt;o:r id=&quot;V:Rule28&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_302&quot;/&gt;
   &lt;o:r id=&quot;V:Rule29&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_303&quot;/&gt;
   &lt;o:r id=&quot;V:Rule30&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_304&quot;/&gt;
   &lt;o:r id=&quot;V:Rule31&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_316&quot;/&gt;
   &lt;o:r id=&quot;V:Rule32&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_319&quot;/&gt;
   &lt;o:r id=&quot;V:Rule33&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_322&quot;/&gt;
   &lt;o:r id=&quot;V:Rule34&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_345&quot;/&gt;
   &lt;o:r id=&quot;V:Rule35&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_346&quot;/&gt;
   &lt;o:r id=&quot;V:Rule36&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_347&quot;/&gt;
   &lt;o:r id=&quot;V:Rule37&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_348&quot;/&gt;
   &lt;o:r id=&quot;V:Rule38&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_350&quot;/&gt;
   &lt;o:r id=&quot;V:Rule39&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_351&quot;/&gt;
   &lt;o:r id=&quot;V:Rule40&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_352&quot;/&gt;
   &lt;o:r id=&quot;V:Rule41&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_353&quot;/&gt;
   &lt;o:r id=&quot;V:Rule42&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_355&quot;/&gt;
   &lt;o:r id=&quot;V:Rule43&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_356&quot;/&gt;
   &lt;o:r id=&quot;V:Rule44&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_357&quot;/&gt;
   &lt;o:r id=&quot;V:Rule45&quot; type=&quot;connector&quot; idref=&quot;#AutoShape_x0020_358&quot;/&gt;
  &lt;/o:rules&gt;
 &lt;/o:shapelayout&gt;&lt;/xml&gt;&lt;![endif]--&gt;

&lt;br /&gt;
&lt;h2 style=&quot;mso-list: l2 level1 lfo1;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin; text-transform: uppercase;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;1&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Multi-Core CPU and Many-Core GPGPU&lt;span style=&quot;text-transform: uppercase;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
CPUs began from single-threaded serial processing of
general-purpose tasks such as arithmetic, logic and I/O operations.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;For many years since then, CPUs improved the
performance of single-threaded applications simply by reducing their latencies
based on Moore’s Law [1]. Each new CPU provided increased clock frequency,
which enabled applications to run faster.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;Applications performance was improved by merely porting them to the new
CPU even without code modification.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
However, every increase in clock speed imposes more demands
on power and cooling requirements, and also tends to increase the disparity
between CPU and host memory access times.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;To counter this, CPUs design employed complex low-level &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;Instruction-Level Parallelism &lt;/i&gt;(&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;ILP&lt;/i&gt;) [2] such as instruction pipelining,
out-of-order execution and speculative execution while still keeping the
frequency in economically allowed ranges.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;But, efforts to further exploit ILP have stalled since the late-1990s due
to the following reasons: &lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;margin-left: 37.5pt; mso-add-space: auto; mso-list: l1 level1 lfo3; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;1.&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;ILP proves inadequate to keep CPU from stalling
for host memory accesses because ILP often involves sophisticated hardware
design and many applications have difficult-to-predict code; &lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin-left: 37.5pt; mso-add-space: auto; mso-list: l1 level1 lfo3; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;2.&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Many applications need to process independent large
data sets; &lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;margin-left: 37.5pt; mso-add-space: auto; mso-list: l1 level1 lfo3; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;3.&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Many applications need to handle multiple concurrent
tasks.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Instead, the industry shifted focus to applying Moore’s Law
to implement more cores and larger caches per processor chip. &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;Larger caches help to reduce the access time
gap between CPU and host memory, especially for applications with spatial
locality. Cores are units that execute a single stream of program instructions.
&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;A physical core, if it supports
core-level multi-threading [3] such as Intel’s &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;HyperThreading&lt;/i&gt;, is equivalent to two or more logic ones each of
which supports one separate hardware thread (by hardware thread, we mean the
execution context (program counters, registers, etc) is maintained on-chip
during the entire lifetime of the thread so that context switching between
threads can be done in just one cycle and virtually without cost. We will use “core”
and “thread” hereafter unless otherwise noted). As you can easily reason, the
more cores a system has, the greater parallel computing capacity. This is the
case of GPGPU that can easily support tens of thousands threads.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
However, these highly parallel computing processes do need
us to parallelize application algorithms as much as possible in order to
improve performance based on Amdahl’s Law [4]. Algorithm designers employ two
commonly used &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;Thread-Level Parallelism&lt;/i&gt;
(&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;TLP&lt;/i&gt;) models [5] to do so. One is &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;Data Parallelism&lt;/i&gt; (&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;DP&lt;/i&gt;) that decomposes data sets into multiple independent data
elements to which a single stream of instructions are concurrently applied. &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;DP is often used at fine-grained level and
supported by a processor’s SIMD function [6]. &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;The other is &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;Task Parallelism&lt;/i&gt; (&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;TP&lt;/i&gt;)
that decomposes applications into many independent tasks that can be concurrently
executed across different cores. TP is often used at coarse-grained level and supported
by a processor’s MIMD function [6]. TLP improves overall application
performance through high throughput of all threads, though latency is actually
increased at individual thread levels.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Thanks to the commoditization of many of these parallel
processors in the last decade, they are inexpensively available to us as either
a workstation or a desktop cluster.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Many
large data set processing applications such as CT reconstruction, used to take
many hours even several days on traditional serial CPU, can now finish in several
minutes on these parallel processors without even resorting to any expensive
proprietary hardware such as ASIC, FPGA, Cell BE or multi-node clusters.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Next, we will review two typical parallel processors: &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;multi-core CPU&lt;/i&gt; and &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;many-core GPU&lt;/i&gt; &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;dedicated to General-Purpose Computing&lt;/i&gt; (&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;GPGPU&lt;/i&gt;) and how OpenCL provides a uniform parallel computing
paradigm for them. We conducted our researches on a Dell Precision T7500
Tower Workstation [7]. It features two Intel Xeon quad-core E5507 CPUs, and one
Nvidia Tesla C2050 GPGPU.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Because both processors
represent relatively latest developments on parallel computing on CPU and
GPGPU, our discussions are around them without loss of generality.&lt;/div&gt;
&lt;h3 style=&quot;mso-list: l5 level2 lfo2;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;1.1&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Multi-Core CPU&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
From the first 32-bit Intel Core architecture introduced in
Jan 2006 up to the latest 64-bit Intel &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;Xeon
&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;octo-core architecture [8], all
multi-core CPUs share the same principle that it is easier to improve overall
application performance using throughput-oriented multiple cores than using a
latency-oriented single core. &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;However
CPU’s primary role as a general-purpose engine determines trade-off must be
made among flow controls, caches and number of cores.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
The 64-bit Xeon processors, as shown in Figure 1, represent
Intel’s latest developments on multi-core and multi-processor. They target the
server and workstation marets. Here are the highlights:&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Each processor supports a maximum of 4 threads.
HyperThreading is not supported;

&lt;/li&gt;
&lt;li&gt;Large on-chip L1,L2 and L3 caches (a total of
5.25M) and flow control (not shown in Figure 1);&lt;/li&gt;
&lt;li&gt;Each processor supports 3 parallel memory
channels that are totally 192-bit wide;&lt;/li&gt;
&lt;li&gt;Each processor’s memory bandwidth is 19.2GB/s
and peek single floating-point capability is about 36GFLOP/s;&lt;/li&gt;
&lt;li&gt;Each core supports 128-bit SIMD vectors through
SSE; MIMD is supported at processor level through the 4 cores;&lt;/li&gt;
&lt;li&gt;NUMA supports – each processor accesses its
locally attached host memory through the integrated memory controller much
faster than access other remote host memory attached to the other processor
through Quick Path Interconnect (QPI).&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxyeDv40568mN9RDYaeVFLKak-xTgT3x0cQefeihOjJh2gOB3YxR79Pd84Ji-AiRWhgBWhn9Z_WK-dQMVi1peMaqvU7c5-MYvVU12UQc7TD0GukYhlxOKLvG8Pvi6DwrBKy3ERBZIkm9Y/s1600/figure1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;358&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxyeDv40568mN9RDYaeVFLKak-xTgT3x0cQefeihOjJh2gOB3YxR79Pd84Ji-AiRWhgBWhn9Z_WK-dQMVi1peMaqvU7c5-MYvVU12UQc7TD0GukYhlxOKLvG8Pvi6DwrBKy3ERBZIkm9Y/s640/figure1.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;mso-list: l4 level1 lfo4; text-indent: -.25in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;mso-list: l5 level2 lfo2;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;1.2&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Many-Core GPGPU&lt;/h3&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;mso-list: l4 level1 lfo4; text-indent: -.25in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;tab-stops: 51.0pt;&quot;&gt;
From the first GPU invented in 1999
by Nvidia to process graphics only up to its latest Fermi-based Tesla products
dedicated to general purpose computing [9] [10], GPU has evolved into a
massively parallel processor that can run tens of thousands of threads on its
hundreds of cores.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
C2050, as shown in Figure 2, turns PCs and workstations into
affordable small clusters. Here are the highlights:&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Each Streaming Multiprocessor (SM) schedules parallel
threads in groups of 32 called &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;warps&lt;/i&gt; (AMD’s
FireStream GPGPU, C2050’s equivalent, uses &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;wavefronts&lt;/i&gt;
for the same purpose. So we will use warps hereafter without loss of
generosity) to 32 scalar cores.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;In other
words, each SM maintains its own single stream of instructions of the kernel
and each instruction is scheduled to 32 cores on different data in lockstep.
This is how Nvidia implements SIMD using its so-called SIMT [11]. SM’s SIMD is
1024-bit wide that is much wider than E5507’s. MIMD is supported by scheduling
concurrent kernels across the 14 SMs;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The 14 SMs support a maximum of 21,504 (1,536 x
14) active (resident) threads on the 448 (32 x 14) scalar cores thanks to the large
amounts of registers. These numbers of threads and cores are much larger than
CPU’s;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Small on-chip caches (the total is about 1MB)
and simple flow control (not shown in Figure 2), which means higher latency
than CPU;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Each SM support 48KB shared memory whose access
time is between that of cache and global memory.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;This shared memory is explicitly available to
programmers through API (on the other hand, caches are transparent to
programmers). CPU doesn’t have such memory;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;All SMs access the off-chip global memory
through a wide 384-bit interface that has 6 parallel channels;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The device connects to the host through a PCIe x
16 Gen 2 slot. Its bandwidth is 8GB/s that is much slower than its 144GB/s memory
bandwidth.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;The device’s peek single floating-point
capability is about 1TFLOP/s that is much larger than E5507’s.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhycST1T7M3zke1Wmjwx7yVr45pjYWD7jd_IMQqUx7GXjKJlyoypquykw93ZOACIV9Am7d1ERM1_7c9-ramG7etcVULPhAIi9viGmFBbdMs7mqLlwB1rbSSFWuCE-0OOrneSfGgakeik3o/s1600/figure2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhycST1T7M3zke1Wmjwx7yVr45pjYWD7jd_IMQqUx7GXjKJlyoypquykw93ZOACIV9Am7d1ERM1_7c9-ramG7etcVULPhAIi9viGmFBbdMs7mqLlwB1rbSSFWuCE-0OOrneSfGgakeik3o/s1600/figure2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;mso-list: l3 level1 lfo5; text-indent: -.25in;&quot;&gt;
&amp;nbsp;&lt;/h3&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;width: 100%px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 style=&quot;mso-list: l5 level2 lfo2;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;1.3&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Different Workload Processing on CPU and GPGPU&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Because today’s computer systems often form heterogeneous
parallel computing ecosystems with CPUs, GPGPUs and / or other types of
processors as shown in Figure 3 (T7500 ecosystem hereafter),&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;it is important to know the type of workloads
that each processor does best so that you can partition workloads and schedule
them to appropriate processors using OpenCL. By doing so, you can access all
the computing power (serial and parallel) of your systems, achieving very high system
utilization.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcwDDCEH64jTDr_qn1fTFCBU07BzCR5_S5c-L_UtRqcrVEPpn434h5P2pE3ZgC9MB7puCrkLxqSiFxKvp9tvPIh_-Q01dL668in5uyiwFiYxoFlQ_iehyQlcEBEh2q3GgnP1GPXuF6yuQ/s1600/figure3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcwDDCEH64jTDr_qn1fTFCBU07BzCR5_S5c-L_UtRqcrVEPpn434h5P2pE3ZgC9MB7puCrkLxqSiFxKvp9tvPIh_-Q01dL668in5uyiwFiYxoFlQ_iehyQlcEBEh2q3GgnP1GPXuF6yuQ/s1600/figure3.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;tab-stops: 264.0pt;&quot;&gt;
&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;width: 100%px;&quot;&gt;
   &lt;tbody&gt;
&lt;tr&gt;
    &lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;GPGPU is suited to process large date sets while
CPU is better suited to low parallelism (also serial operations such as disk
and network IOs, and hard-to-parallelized programs).&lt;br /&gt;This is because small data sets can’t justify the time incurred by GPGPU’s slow
data transfer on PCIe and other setups. Large data sets also spawn a large
number of threads that are required in order to take full advantage of GPGPU’s
massively parallel structure and to hide its high latency on memory accesses
and other operations;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;GPGPU is suited to algorithms with high
arithmetic density (the number of arithmetic operations per memory access).&lt;br /&gt;This is also to hide GPGPU’s high latency. When a warp is stalled due to
latency, SM swaps in a ready warp for execution, if any, through its fast
context switch to maximize GPGPU utilization.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;Latency can be fully hidden if SM always has some arithmetic
instructions to issue for some warp at every clock cycle during that latency
period.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Obviously the more arithmetic
instructions and threads, the more latency is hidden;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Data transfer on PCIe should be minimized due to
PCIe’s slowness.&lt;br /&gt;In order to keep a high number of operations performed on GPGPU per data
element transferred, you sometimes have to move more parts of your program to
GPGPU even those parts perform faster on CPU;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;GPGPU is suited to programs whose memory accesses
have spatial locality.&lt;br /&gt;Because off-chip memory accesses have the highest latency, both CPU and GPGPU
access a block of consecutive memory such as 32 bytes instead of just the
requested single data such as a 4-byte integer. However, GPGPU further coalesces
memory accesses by a warp into as few memory transactions as possible.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Better spatial locality means fewer memory
transactions, higher cache hit rates and less waste of bandwidth. This is more
important to GPGPU than to CPU because GPGPU has smaller caches and more
threads;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;GPGPU is suited to programs whose control flow
logic is simple.&lt;br /&gt;This is because SM schedules a common instruction to a warp at a time. Full
efficiency is realized when all 32 threads of a warp agree on their execution
path. If threads of a warp diverge via a data-dependent conditional branch, the
warp serially executes each branch path taken, disabling threads that are not
on that path, and when all paths complete, the threads converge back to the
same execution path. So divergence leaves SM underutilized.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;This is also because CPU has more complex
control flow logic and ILP mechanisms.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;mso-list: l5 level1 lfo2;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;2&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;OpenCL – A Better Parallel Computing Paradigm&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Parallel computing does need users to parallelize their
algorithms using DP and / or TP of some programming paradigm.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;However, parallel computing for heterogeneous
processors is challenging as traditional programming paradigms for CPU and GPU
are very different. &lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
For example, there are &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;Pthreads&lt;/i&gt;
and &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;OpenMP&lt;/i&gt; for CPU, and they all assume
a single shared address space and require users to possess complex multi-threading
skills.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;GPGPU programming originally
required users to possess intimate knowledge of graphics APIs (&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;OpenGL&lt;/i&gt; or &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;DirectX&lt;/i&gt;) and GPU architecture and to make their non-graphics
applications look like graphics ones by mapping them into problems that drew
triangles and polygons. This placed a great constraint for non-graphics domain users.
This old approach was adopted by Fang et al in their CT reconstruction
algorithm [12].&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
With the advent of &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;Unified&lt;/i&gt;
&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;Shaders&lt;/i&gt;,&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;GPU dedicated to general purpose computing
(GPGPU) such as the Tesla series from Nvidia and the FireStream series from
AMD, and programming paradigms such as &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;CUDA&lt;/i&gt;
from Nvidia and &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;APP&lt;/i&gt; from AMD,
CPU-based non-graphics applications can now directly access the tremendous
performance of GPGPU without the above limitations.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Unfortunately all of the above different programming
paradigms have very sharp learning curves (it should be very formidable for a
non-computer domain expert to program all the parallel processors in the T7500
ecosystem using these paradigms) and some are vendor-specific. Worse yet, none
of them may be supported by future parallel processors. &lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;OpenCL&lt;/i&gt; [13] is an
open industry standard for general purpose parallel programming across CPU,
GPGPU, and other processors. From the software perspective, it is a framework
consisting of an API to create &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;host
programs&lt;/i&gt; to coordinate parallel computing across heterogeneous processors,
and a subset of ISO C99 with parallelism extensions to create &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;kernels&lt;/i&gt;. OpenCL supports both DP and TP
without users even knowing complex multi-threading mechanism. This, along with
its support of universal C language, can greatly shorten the learning curve of
non-computer domain scientists and engineers.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
From the hardware perspective, OpenCL enables users to
design portable, efficient and high-performance applications through its
low-level, close-to-metal abstractions over heterogeneous processors (Although many
details of the underlying hardware are exposed, OpenCL can’t expose all
details. Otherwise OpenCL’s portability and programmability will be restricted).&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In the following sub sections, we introduce these
abstractions by borrowing some figures from OpenCL 1.0 specification [13], and
mapping OpenCL concepts to the hardware in the Dell T7500 workstation. Readers
should be able to figure out the function of each OpenCL concept based on the
mapping and our previous introduction on CPU and GPGPU.&lt;/div&gt;
&lt;h3 style=&quot;mso-list: l5 level2 lfo2;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;2.1&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Platform Abstraction&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;
 
 
  
  
  
  
  
  
  
  
  
  
  
  
 
 
 

 
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaxh3HDZBOhZQuCePoCP5pekNmfMTR-A2bXDSwfxziiDXNy7TqOAV_O1szuoXby8fSZrxdReQRNZ1QQ6XUwUgoRYYgHAvCfQ8T-M0p_9_-KnqKfbMllHnEvvEDKQofTrlgxc-caUeYafE/s1600/figure4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaxh3HDZBOhZQuCePoCP5pekNmfMTR-A2bXDSwfxziiDXNy7TqOAV_O1szuoXby8fSZrxdReQRNZ1QQ6XUwUgoRYYgHAvCfQ8T-M0p_9_-KnqKfbMllHnEvvEDKQofTrlgxc-caUeYafE/s1600/figure4.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Table 1 shows how the various components in Figure 4 map to
CPU and GPGPU.&lt;/div&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-firstrow: yes; mso-yfti-irow: 0;&quot;&gt;
  &lt;td style=&quot;border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 184.5pt;&quot; valign=&quot;top&quot; width=&quot;246&quot;&gt;&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: center;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;E5507
  CPU&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 167.4pt;&quot; valign=&quot;top&quot; width=&quot;223&quot;&gt;&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: center;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;C2050
  GPGPU&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 1;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Compute Device&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 184.5pt;&quot; valign=&quot;top&quot; width=&quot;246&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
the CPU chip&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 167.4pt;&quot; valign=&quot;top&quot; width=&quot;223&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
the GPGPU chip&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 2;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Compute Unit (CU)&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 184.5pt;&quot; valign=&quot;top&quot; width=&quot;246&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
the 8 cores&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 167.4pt;&quot; valign=&quot;top&quot; width=&quot;223&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
the 14 SMs&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 3;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Processing Element (PE)&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 184.5pt;&quot; valign=&quot;top&quot; width=&quot;246&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
the 8 cores&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 167.4pt;&quot; valign=&quot;top&quot; width=&quot;223&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
the 32 cores in each SM&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 4; mso-yfti-lastrow: yes;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Host&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 184.5pt;&quot; valign=&quot;top&quot; width=&quot;246&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
Dell T7500 workstation&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 167.4pt;&quot; valign=&quot;top&quot; width=&quot;223&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
Dell T7500 workstation&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Table 1&lt;/b&gt;: Platform Mapping&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
OpenCL provides API to query all CUs connected to the host
and to submit parallel computations on PEs.&lt;/div&gt;
&lt;h3 style=&quot;mso-list: l5 level2 lfo2;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;2.2&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Execution Abstraction&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
An OpenCL program consists of two parts: &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;kernels&lt;/i&gt; that execute on one or more
devices and &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;a host program&lt;/i&gt; that
executes on the host. &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;OpenCL defines an
index space called &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;NDRange &lt;/i&gt;(the grid
on CUDA) on devices. An NDRange can have 1 to 3 dimensions.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Each point in the index space is called a &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;work-item&lt;/i&gt;.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;When the host program submits a kernel to a
device, an instance of the kernel (a thread) executes for each work-item. &lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Work-items are organized into &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;work-groups&lt;/i&gt; at coarse-grained level, each of which is scheduled to
one CU independently. Because C2050’s smallest execution unit is a warp, the
work-group size should be a multiple of 32 for best performance. At fine-grained
level, each work-term in a work-group can synchronize with each other on shared
data accesses.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Work-groups often work
with local memory (defined in the next section) on GPGPU to eliminate redundant
and stride access on global memory if your program possesses either of them and
has spatial locality. &lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
DP is supported by mapping each work-item to one or more data
element(s). In strict DP, the mapping is one-to-one. OpenCL implements a relax
version of DP where a strict one-to-one mapping is not required.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;You should determine the dimension size and
mapping based on your program logic and the device’s capability.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;TP is supported by submitting multiple task
kernels across CUs. Each of these kernels equivalently has only one work- item,
which is wasting 31 cores on each SM of C2050. So TP is usually used on CPU
each core of which executes one task kernel.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
This execution abstraction is scalable because DP
work-groups and TP task kernels can automatically and independently be
scheduled to any available CU as the host scales to more CUs.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;
 
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwL0qFml8IX8y1cUFED690eNbWpXdXv3xJTot8NKrpvIapm8Dj3qtVPB2BCGGt0zcJm_QVyZ-t9-GLdKVrIsifLDZJ1W6YI_KPE8qoF3yeBq6m9QnVtpTByMGvecIJvBDzm6C_XADk40A/s1600/figure5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwL0qFml8IX8y1cUFED690eNbWpXdXv3xJTot8NKrpvIapm8Dj3qtVPB2BCGGt0zcJm_QVyZ-t9-GLdKVrIsifLDZJ1W6YI_KPE8qoF3yeBq6m9QnVtpTByMGvecIJvBDzm6C_XADk40A/s1600/figure5.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;mso-list: l5 level2 lfo2;&quot;&gt;
&lt;span style=&quot;mso-bidi-font-family: Cambria; mso-bidi-theme-font: major-latin; mso-fareast-font-family: Cambria; mso-fareast-theme-font: major-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;2.3&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Memory Abstraction&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Because C2050 caches global memory accesses into its L1 and
L2 cache, the performance of applications whose memory accesses are not
predicable (or possess poor spatial locality) can still be improved. &lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Because the on-chip local memory’s access time on GPGPU is
close to caches, it should be used if a work-group’s spatial locality can be
accommodated in it and the work-group items have redundant and /or stride
access on global memory.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Both CPU and GPGPU have registers that consume zero extra
clock cycles per instruction. OpenCL doesn’t explicitly expose registers.
Instead kernel compilers usually optimize automatic variables to use registers.
However if there are more automatic variable than available, these extra
automatic variables will be place in the off-chip private memory and this is
known as &lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;register spilling&lt;/i&gt;.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;The register usage usually has a significant
impact on performance.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Since the constant cache on GPGPU is separate from the
private and global caches in L1 and L2, it is not tainted by them. So it can
improve performance if you can put constant data there, especially when your
kernel doesn’t have good spatial locality.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimEPVc-CT-AQWlIE6-RN8mlzuKHJf0q3hpx8Q_U37GqN2i4jFnqLV8Yh7GrPVfjSJPwqo7fdoeRkfDxT93lxwnmJYpp0XTZumV2IiStR2GHFqRtsaBZ8nD1_ltyxpEqZ38BSYK5vO3yHI/s1600/figure6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimEPVc-CT-AQWlIE6-RN8mlzuKHJf0q3hpx8Q_U37GqN2i4jFnqLV8Yh7GrPVfjSJPwqo7fdoeRkfDxT93lxwnmJYpp0XTZumV2IiStR2GHFqRtsaBZ8nD1_ltyxpEqZ38BSYK5vO3yHI/s1600/figure6.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-firstrow: yes; mso-yfti-irow: 0;&quot;&gt;
  &lt;td style=&quot;border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 192.3pt;&quot; valign=&quot;top&quot; width=&quot;256&quot;&gt;&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: center;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;E5507
  CPU&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 159.6pt;&quot; valign=&quot;top&quot; width=&quot;213&quot;&gt;&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: center;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;C2050
  GPGPU&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 1;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Global Memory&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 192.3pt;&quot; valign=&quot;top&quot; width=&quot;256&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
The off-chip host memory&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 159.6pt;&quot; valign=&quot;top&quot; width=&quot;213&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
The off-chip global memory&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 2;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Local Memory&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 192.3pt;&quot; valign=&quot;top&quot; width=&quot;256&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
implemented in host memory&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 159.6pt;&quot; valign=&quot;top&quot; width=&quot;213&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
The on-chip shared memory&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 3;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Private Memory&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 192.3pt;&quot; valign=&quot;top&quot; width=&quot;256&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
implemented in host memory&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 159.6pt;&quot; valign=&quot;top&quot; width=&quot;213&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
The off-chip local memory&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 4;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Constant Memory&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 192.3pt;&quot; valign=&quot;top&quot; width=&quot;256&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
implemented in host memory&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 159.6pt;&quot; valign=&quot;top&quot; width=&quot;213&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
implemented in global memory&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 5;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Global Memory Cache&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 192.3pt;&quot; valign=&quot;top&quot; width=&quot;256&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
implemented in L1, L2 and L3 caches&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 159.6pt;&quot; valign=&quot;top&quot; width=&quot;213&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
Implemented in L1 and L2 caches&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 6; mso-yfti-lastrow: yes;&quot;&gt;
  &lt;td style=&quot;border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 126.9pt;&quot; valign=&quot;top&quot; width=&quot;169&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Constant Memory Cache&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 192.3pt;&quot; valign=&quot;top&quot; width=&quot;256&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
implemented in L1, L2 and L3 caches&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 159.6pt;&quot; valign=&quot;top&quot; width=&quot;213&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;&quot;&gt;
The constant cache&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;&lt;br /&gt;
Table 2: &lt;/b&gt;Memory Mapping&lt;/div&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/282421157515105569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2012/12/gpgpu-high-performance-computing-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/282421157515105569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/282421157515105569'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2012/12/gpgpu-high-performance-computing-using.html' title='GPGPU High Performance Computing using OpenCL -- A Uniform and Portable API across Multi-core CPU and Many-core GPGPU'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxyeDv40568mN9RDYaeVFLKak-xTgT3x0cQefeihOjJh2gOB3YxR79Pd84Ji-AiRWhgBWhn9Z_WK-dQMVi1peMaqvU7c5-MYvVU12UQc7TD0GukYhlxOKLvG8Pvi6DwrBKy3ERBZIkm9Y/s72-c/figure1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-2420903524365470721</id><published>2012-05-16T22:47:00.000-04:00</published><updated>2012-12-25T19:26:07.135-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algorithm"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Structure"/><category scheme="http://www.blogger.com/atom/ns#" term="Interview"/><title type='text'>My Recent Interview Experience in the Financial Industry -- Computer Science Fundamentals</title><content type='html'>A base salary around $150k seems to be the watershed between a regular job that can be easily landed and a better paid job that needs a lot of efforts.&lt;br /&gt;
If you want to get better compensations, it is mandatory that you master computer science fundamentals. Most of financial firms I dealt with just didn&#39;t ask me any financial domain knowledge. Nor did they ask so-called populate technical skills such as Ajax, j2ee web development, Java Swing or JDBC etc. Instead, they just focused on fundamentals such as thread, socket, data structures and algorithms. Especially they wanted to make sure you are good at language-agnostic commonly-used data structures and algorithms.&lt;br /&gt;
&lt;br /&gt;
I used to think that only hedge funds, prop trading firms, and high-profile technology firms such as Google and Amazon asked data structures and algorithms. But now it seems that other firms are just following suit.&lt;br /&gt;
For thread, it is not enough to only know how to create them. You also need to know thread safety, thread pooling, memory model etc.&lt;br /&gt;
For socket, it is not enough to only know TCP and UDP. You also need to know the Select paradigm and how to fine tune performance and latency.&lt;br /&gt;
For data structures, you should be very familiar with collection, set, list, queue, hash and tree.&lt;br /&gt;
For algorithms, you should know very well complexity analysis (the Big-O notation),&amp;nbsp; all common sorting, median and order statistics, iterative and recursive, divide and conquer, exhaustive, back trace and dynamic programming.&lt;br /&gt;
&lt;br /&gt;
There is a very well-known book &quot;&lt;a href=&quot;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=11&amp;amp;ved=0CGkQFjAAOAo&amp;amp;url=http%3A%2F%2Fshafaetsplanet.com%2Fuploads%2Fpdf%2FIntroduction%2520to%2520Algorithms.pdf&amp;amp;ei=kFW0T7bVKonK6gGL2ojVDw&amp;amp;usg=AFQjCNFqtVsqROjS54bifuC3SX9Zs_SbHg&quot; target=&quot;_blank&quot;&gt;Introduction to Algorithms&lt;/a&gt;&quot; from the MIT press. If you was not touch this book in school, you need to learn it by yourself unless you don&#39;t want to work for good companies.&lt;br /&gt;
&lt;br /&gt;
If you have worked for many years, you feel it is not quite fare to be asked so many algorithms because new graduates usually have fresh memory on algorithms than you. But, if you think you are a smart guy who is willing to accept challenges, you should welcome any interview questions.&lt;br /&gt;
&lt;br /&gt;
Speaking challenges, many firms also ask you some brain teaser questions. Basically the interviews wanted to test your analysis skills and logic reasoning capacities. Since most developers don&#39;t often face such problems at work, they feel it more difficult to work on them than on regular programming issues.&lt;br /&gt;
The good news is many brain teasers are relatively easier if you go through some training. A good source is the &quot;Brain Teaser&quot; link under my &quot;INTERVIEW WEB SITES&quot; section on the left.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/2420903524365470721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2012/05/my-recent-interview-experience-in_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/2420903524365470721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/2420903524365470721'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2012/05/my-recent-interview-experience-in_16.html' title='My Recent Interview Experience in the Financial Industry -- Computer Science Fundamentals'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-7923722566033474774</id><published>2011-11-02T11:26:00.001-04:00</published><updated>2012-05-11T22:35:22.822-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Float"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Floating-Point Number Equality Comparison in Oracle, Sybase / SQL Server, Java and JMS</title><content type='html'>As you know that computer can&#39;t store all floating-point numbers exactly primarily due to memory constraint. A double value such as 0.1 is actually represented as 0.1000000000000000055511151231257827021181583404541015625 in computer memory. Due to rounding errors, your equality comparison on floating-point numbers will probably fail.&lt;br /&gt;
In this topic I will show how SQL and Java store exact floating-point numbers (or just decimal numbers), and how floating-point literals are represented.&lt;br /&gt;
&lt;br /&gt;
SQL99 uses FLOAT, REAL and DOUBLE PRECISION for approximate floating-point numbers, and NUMERIC(p,s) / DECIMAL (p,s) for exact floating-point numbers. For floating-point literals, SQL99 stores them as approximate floating-point types if they use the E notation (scientific notation); otherwise as the exact floating-point type if the literals meet the precision and scale of the exact types.&lt;br /&gt;
Because the NUMERIC(p,s) / DECIMAL (p,s) stores values without loss of precision for your decimal numbers, it should be used if you want to compare the equality between a floating-point column (in DB) or variable (in Java) to a decimal literal such as 0.1. &lt;br /&gt;
Different database vendors may have a bit different variants from the above specification.&lt;br /&gt;
&lt;br /&gt;
Oracle 10g uses NUMBER(p,s) for both floating-point types in addition to its BINARY_FLOAT, BINARY_DOUBLE and FLOAT(p) for approximate types. Make sure you always specify the precision (p) for exact types.&lt;br /&gt;
If a floating-point is sufficed by f&amp;nbsp; or F (for BINARY_FLOAT), or d or D (for BINARY_DOUBLE), it is of approximate types; otherwise of the exact NUMBER(p,s) type.&lt;br /&gt;
&lt;br /&gt;
Sybase ESA 15 and MS SQl Server 2008 both comply with the above SQL99 standard very well. And both also have MONEY(SMALLMONEY) for exact float-point numbers.&lt;br /&gt;
&lt;br /&gt;
Java has BigDecimal to store decimal values exactly. For example new BigDecimal(&quot;0.1&quot;)&amp;nbsp; stores 0.1 exactly. &lt;br /&gt;
&lt;br /&gt;
JMS&#39;s message selector is a string whose syntax is based on a subset of SQL92. Unfortunately JMS doesn&#39;t support exact floating-point numbers and restricts its exact numeric literal only to those without a decimal.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/7923722566033474774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/11/floating-point-number-equality.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7923722566033474774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7923722566033474774'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/11/floating-point-number-equality.html' title='Floating-Point Number Equality Comparison in Oracle, Sybase / SQL Server, Java and JMS'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-7887476659726257818</id><published>2011-08-17T22:52:00.002-04:00</published><updated>2012-05-11T22:34:18.491-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="JTA"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring"/><title type='text'>Key Concepts to Understand Spring&#39;s Consistent Transaction Handling</title><content type='html'>&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;div style=&quot;background-color: white; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif; font-size: small;&quot;&gt;Class FooBarService&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt; &lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;show&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;s simplified pseudo code for different transaction handling paradigms using JDBC,Hibernate and JTA.&lt;br /&gt;
Class FooBarServiceSpring shows&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; simplified pseudo code for consistent transaction handling using Spring.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Obviously Spring&#39;s transaction handling is quite different from JDBC and Hibernate; but is closer to JTA. However, by no mean does Spring only support JTA. Instead, it is only a matter of configuring different PlatformTransactionManager (PTM hereafter) in your application context in order to support different transaction handling paradigms.&amp;nbsp; For example, Spring&#39;s DataSourceTransactionManager, HibernateTransactionManager and JTATransactionManager are for JDBC, Hibernate and JTA, respectively.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;This &lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;discussion can help readers understand some internals of Spring&#39;s&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;PTM implementations on heterogeneous native transaction platforms. &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;span style=&quot;font-size: small;&quot;&gt;//different transaction paradigms using JDBC,Hibernate and JTA&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;class FooBarService {    &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; //local transaction paradigm using JDBC&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; public void foo() {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //creates a session with the backend database&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Connection conn = dataSource.getConnection();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //starts a new local transaction.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.setAutoCommit(false);&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; updates-data-through-this-conn&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //commits the local transaction&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.commit();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //closes the session&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.close();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; //local transaction paradigm using Hibernate&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; public void bar() {        &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //creates a session with the backend database&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = sessionFactory.openSession();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //starts a new local transaction.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; updates-data-through-this-session&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //commits the local transaction&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //closes the session&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; //Global transaction paradigm using JTA&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; public void fooBar() {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; userTransaction.begin();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //creates a session with the backend database1&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Connection conn1 = dataSource1.getConnection();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; updates-data-through-this-conn1&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //creates another session with the backend database2&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Connection conn2 = dataSource2.getConnection();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; updates-data-through-this-conn1&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //closes the two sessions&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn1.close();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn2.close();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; userTransaction.commit();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;//consistent transaction handling paradigms using Spring&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;class FooBarServiceSpring {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; @Transactional&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; public void foo() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; //updates data through some data source connection&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; @Transactional(propagation=Propagation.REQUIRES_NEW)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; public void bar() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;//updates data through some data source connection&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; @Transactional&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; public void fooBar() {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foo();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bar();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;1.&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; Key Transaction Abstraction&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;The following 3 interfaces are key to understand Spring&#39;s transaction handling: &lt;/div&gt;&lt;ul style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;li&gt;TransactionDefinition&lt;br /&gt;
It allows you to define transaction requirements (isolation level, propagation behavior, timeout and read-only status) before your transaction is started.&lt;br /&gt;
In &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FooBarServiceSpring, you specify your &lt;/span&gt;&lt;/span&gt;TransactionDefinition in @Transactional.&lt;/li&gt;
&lt;li&gt;TransactionStatus&lt;br /&gt;
Once your transaction is started, this interface allows you to query its current status including rollback flag and new vs existing flag, and to mark it to rollback only (for example when you encounter an exception).&lt;br /&gt;
Spring&#39;s default TransactionStatus implementation also includes the underlying native transaction such as a connection for JDBC, a session for Hibernate and a user transaction for JTA.&lt;br /&gt;
In &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FooBarServiceSpring, @Transactional allows you to specify your rollback rules. &lt;/span&gt;&lt;/span&gt;For other status information, you either implicitly knows(such as IsNewTransactio and IsComplete) or can retrieve from the underlying native transaction bound to the thread (Spring binds JDBC connection and Hibernate Session to the thread; JTA&#39;s UserTransaction is also bound to a standard JNDI name).  Please note that Spring doesn&#39;t bind TransactionStatus to the thread because PTM can pass it around in your AOP proxied methods.&lt;/li&gt;
&lt;li&gt;PlatformTransactionManager&lt;br /&gt;
It wires together the above 2 interface and works as a coordinate overall. &lt;br /&gt;
Specifically its getTransaction() method takes your TransactionDefinition and creates a TransactionStatus representing either a new or existing transaction.&amp;nbsp; Its commit() and rollback() methods take the returned TransactionStatus and commit and rollback the target transaction, respectively. &lt;br /&gt;
It allows you to demarcate transactions as a singleton because it can get different transactions bound on different threads.&lt;br /&gt;
In &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FooBarServiceSpring, @&lt;/span&gt;&lt;/span&gt;Transactional uses whatever transaction manager &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;you&lt;/span&gt;&lt;/span&gt; configured in your application context such as DataSourceTransactionManager for JDBC.&lt;/li&gt;
&lt;/ul&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;When we say Spring transaction, we really mean TransactionDefinition and TransactionStatus. The PTM is more like a JTA UserTransaction / TransactionManager. But once again, it handles all types of native transaction API&#39;s behind the scene.&lt;/div&gt;&lt;ul style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/ul&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;2. Physical Transaction and Logical Transaction&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FooBarServiceSpring&#39;s foobar() calls foo() and bar(). Suppose there is no transaction before you call foobar(). So &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;foobar() creates a new physical transaction while foo() starts a nested logical transaction due to its default propagation being REQUIRED; the logic transaction ends when foo() returns.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;But bar() suspends the current transaction and creates a new physical transaction due to its &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;propagation being REQUIRED_NEW. The new transaction ends and the suspended transaction is resumed when bar() exits.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Because each (physical or logic) transaction always has a begin and end, we sometimes use transaction scope.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
For data persistence, only the outer physical transaction can commit or rollback. But &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;on each individual inner logic transaction (method) level, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;you always specify your TransactionStatus and can mark transaction to rollback . However the embed native transaction in &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;TransactionStatus is either new (if it is a physical one) or existing&lt;/span&gt;&lt;/span&gt; (if it participates in an existing one).&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
You can also turn on the &quot;validateExistingTransaction&quot; flag in PTM &lt;/span&gt;&lt;/span&gt;so that the inner logic transaction will reject participation if its TransactionStatus is not compatible to the outer TransactionStatus.&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Resource, Connection, Session, Transaction and &lt;/b&gt;&lt;b&gt;Resource Manager (RM)&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Resource can mean any valuable data; but in PlatformTransactionManager it is either a connection (for JDBC and JMS etc) or session (for Hibernate and JMS etc).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
Both connection and session represent a communication link with the some backend resource manager (RM for short). In the database world, both termscan be used interchangeably. Although Hibernate uses session, it uses a connection behind the scene.&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Transaction represents a unit of work. We mentioned in the above Section 1 that Spring&#39;s abstract transaction covers an underlying native transaction.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;For JDBC and Hibernate, you create local transactions using connections / sessions and because they have one-to-one relationship, you can sometimes interchange the 2 terms. In other words, if the inner logic transaction participants in the outer physical transaction, it must reuse the the same connection / session.&lt;br /&gt;
For JTA, you creates global transactions using transaction managers; multiple connections can be enlisted in global transactions as transaction branches. One thing that is very different from JDBC and Hibernate is that you can conduct DML changes using different connections to the same backend RM instance in the same global transaction (This is because when a connection is enlisted, XID is created to represent this branch both in the JTA and the RM. Even you use a different connection, the RM can still identify the same transaction using the passed-in XID). &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;RM managers resources (transaction) on behalf of you. It is commonly used in JTA/XA world. For most of us, databases are common RM.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;4. &lt;/b&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;b&gt;Transaction and Session -- Which Comes First?&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Arial,Helvetica,sans-serif;&quot;&gt;In the foo() and bar() of &lt;span style=&quot;font-family: Arial,Helvetica,sans-serif; font-size: small;&quot;&gt;FooBarServic&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;e&lt;/span&gt;,&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; you first create a connection / session, then starts a transaction. Before you close the connection / session, you first commit / rollback the transaction.&lt;br /&gt;
But in the foobar() of &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif; font-size: small;&quot;&gt;FooBarServic&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;e, you first starts a transaction, then create&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif; font-size: small;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; a connection / session. Before you commit / rollback the transaction, you first close the connection / session.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
In &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FooBarServiceSpring, all you have is just @transactional and you are not allowed to open or close any connection / session explicitly.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif; font-size: small;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;So how can Spring hide the difference between JDBC, Hibernate and JTA and whois taking care of connections / session anyway?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Data access experience tells us that we always need a connection / session and its lifecycle methods (open, close etc) are just boilerplate and resource will leak if you forget to call the close method (actually this happens very often). But we must define transaction requirements by ourselves. For example, only you know that the bar() in &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FooBarServiceSpring requires REQUIRE_NEW propagation based on your business rules.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;So Spring is taking care of connections / sessions behind the scene. You just need to specify you transaction requirement using @transactional. &lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;The next section tell you more details.&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;b&gt;5. &lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Transaction and Session -- Resource Synchronization with Transaction&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Because you always explicitly specify your transaction requirements, Spring synchronizes the needed resource (connection or session) with the transaction at both transaction start time and ending time or at the transaction scope boundaries.&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;For JDBC and &lt;/span&gt;Hibernate, Spring binds the connection / session (hence also local transaction) to the thread so that it is always available on the execution call stack.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Spring PTM automatically either retrieves an existing connection / session from the thread (if an outer transaction is already there) or creates a new &lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;connection / session and binds it to the thread before starting a transaction.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;When transaction is right before being committed or rolled back, Spring PTM also automatically closes the connection / session and unbinds it from the thread.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; For JTA, Spring  gets the UserTransaction from the standard JNDI name, so the global  transaction is also available on the execution call stack.&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;When you retrieves&lt;/span&gt; a connection / session, it is automatically enlisted in the global transaction (Spring doesn&#39;t help here; the underlying XADataSource usually does the magic).&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;When the JTA transaction is right before &lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;being committed or rolled back, Spring PTM once again automatically closes the connection / session .&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;6. &lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Nested Transaction and Transaction Suspend / Resume&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;For nested transaction, both&amp;nbsp; the outer and inner transaction are live in your thread while when a transaction is suspended, your thread work on another new transaction;&lt;/li&gt;
&lt;li style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Nested transactions are dependent i.e. only the outer transaction is physical and can commit the change; but you can rollback the inner logic transaction.&lt;br /&gt;
The suspended transaction and the new transaction are two physical transactions and are independent i.e. they can both commit or rollback independently;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Suspending tranasction is deadlock-prone because the backend RM still holds the resource locks on the suspended transaction even your JTA has switched to another new transaction. You should be very careful even your application also locks some resources in the suspended transaction that are needed by the new transaction;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Nested transactions are only supported by JDBC with the savepoint feature. Because XA doesn&#39;t support nested transactions, neither JTA can (This seems to be ironic because most databases support savepoint);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Suspending a JDBC transaction in Spring means first unbinds&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; it from &lt;/span&gt;the thread, then creates a new connection and binds to the thread.&lt;/span&gt; &lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;For JTA, Spring just delegates the suspend/resume to the underlying UserTransaction in addition to its own bookkeeping for resource synchronizations.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;7. &lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Propagation.SUPPORTS and &lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;No Transaction&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;No transaction means your data changes are committed on each individual SQL statement level (it is autocomit for JDBC) instead of grouping several SQL statements in a transaction.&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Propagation.SUPPORTS also commits data changes on each individual SQL statement level if there is no existing transaction. But if you set your TransactionSynchronization in PTM to ALWAYS, it also supports resource synchronization on an empty transaction scope (empty transaction scope means no underlying native transaction).&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;To make it concrete, the same JDBC connection or Hibernate Session will bind to the thread inside the empty transaction scope for reuse in the execution call stack until the scope ends.&amp;nbsp; Be aware that the connection is of course in autocommit mode.&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Please remember that if you empty transaction scope has active resource synchronization, DON&#39;T nested Propagation.REQUIRED or Propagation.REQUIRED_NEW in it because resources synchronizations for the 2 transaction scopes will conflict (unfortunately you have to read the PMT source code in order&amp;nbsp; to get to the bottom).&lt;/div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/7887476659726257818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/08/key-concepts-to-understand-springs.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7887476659726257818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/7887476659726257818'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/08/key-concepts-to-understand-springs.html' title='Key Concepts to Understand Spring&#39;s Consistent Transaction Handling'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-8366107060174243356</id><published>2011-08-10T11:20:00.003-04:00</published><updated>2012-05-11T22:34:23.917-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="quartz scheduler"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring"/><title type='text'>Dynamically Creates Quartz Scheduler using Spring</title><content type='html'>&amp;nbsp;Here are&amp;nbsp; my requirements: I need to dynamically create quartz cron  triggers and add them to my scheduler. All my triggers schedule the same  job but with trigger specific job mapping data.&lt;br /&gt;
&lt;br /&gt;
Before I show how to dynamically create quartz schedulers using Spring,  let&#39;s quickly review Sping&#39;s static configuration. The following  excerpts come from &quot;Chapter 23 Scheduling and Tread Pooling&quot; in Spring  2.5.6 reference document and shows how to statically create a quartz  scheduler:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;lt;bean name=&quot;exampleJob&quot; class=&quot;org.springframework.scheduling.quartz.JobDetailBean&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;jobClass&quot; value=&quot;example.ExampleJob&quot;/&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;lt;bean id=&quot;cronTrigger&quot; class=&quot;org.springframework.scheduling.quartz.CronTriggerBean&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;jobDetail&quot; ref=&quot;exampleJob&quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;lt;!-- run every morning at 6 AM --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;cronExpression&quot; value=&quot;0 0 6 * * ?&quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;lt;bean class=&quot;org.springframework.scheduling.quartz.SchedulerFactoryBean&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;triggers&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;list&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ref bean=&quot;cronTrigger&quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/list&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Spring&#39;s JobDetailBean extends quartz&#39;s JobDetail and provides the following added functions:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt; Setups sensible defaults in its life-cycle init method  afterPropertiesSet() e.g. set the job&#39;s name to the bean name and set  the job&#39;s group name to &quot;DEFAULT&quot; if they are empty (Remember that  quartz scheduler uniquely identifies a job by its name and group);&lt;/li&gt;
&lt;li&gt;Supports any job class that implements the Runnable interface besides quartz&#39;a regular Job interface;&lt;/li&gt;
&lt;li&gt;If your actual Job class extends Spring&#39;s QuartzJobBean, Spring also  automatically injects the job map data to the job&#39;s properties;&lt;/li&gt;
&lt;/ol&gt;Spring&#39;s CronTriggerBean extends quartz CronTrigger and provides the following added functions:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Setups sensible defaults in its life-cycle init method  afterPropertiesSet() e.g. set  the trigger&#39;s name to the bean name and  set the trigger&#39;s group name to &quot;DEFAULT&quot; if they are empty (Remember  that quartz scheduler uniquely  identifies a trigger by its name and  group).&lt;/li&gt;
&lt;li&gt;Associates the trigger to the provided&#39;s JobDetail in afterPropertiesSet();&lt;/li&gt;
&lt;li&gt;Set the trigger&#39;s timezone to the default one and start time to the current time afterPropertiesSet();&lt;/li&gt;
&lt;li&gt;Sets trigger specific job map data through the Java&#39;s Map interface;&lt;/li&gt;
&lt;/ol&gt;Spring&#39;s SchedulerFactorBean is a quartz Scheduler factory bean and  wires jobs and triggers together. It implements many functions behind  the scene that you have to do by yourself&amp;nbsp; if you directly use quartz  API:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Overrides default quartz properties e.g. thread pool parameters and jmx export;&lt;/li&gt;
&lt;li&gt;Registers triggers;&lt;/li&gt;
&lt;li&gt;Registers jobs. If you already assigned a job in your Spring trigger bean, you don&#39;t need this;&lt;/li&gt;
&lt;li&gt;Sets the JobFactory to the default Spring&#39;s AdaptableJobFactory if  it is not set by you. AdaptableJobFactory support Item 2 in the above  JobDetailBean&#39;s added functions. AdaptableJobFactory&#39;s sublass  SpringBeanJobFactory also supports the same function as mentioned in  Item 3 in the above JobDetailBean&#39;s added function.&lt;/li&gt;
&lt;li&gt;Schedules your jobs with quartz&#39;s scheduler;&lt;/li&gt;
&lt;/ol&gt;All the above functions are implemented in the Spring&#39; init method afterPropertiesSet().&lt;br /&gt;
&lt;br /&gt;
Here are the steps to dynamically configure quartz scheduler using Spring to meet my above requirements.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Still configures my JobDetailBean, and my actual Job also  extends Spring&#39;s QuartzJobBean in order to take advantage of the added  function;&lt;/li&gt;
&lt;li&gt;Still configures my CronTriggerBean using Spring&amp;nbsp; in order to take  advantage of the added function. But its scope should be &quot;prototype&quot; so  that I can dynamically retrieve a new trigger bean instance and set its  cronExpression and its job map data. &lt;br /&gt;
Here is the new trigger configuration:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;lt;bean id=&quot;cronTrigger&quot; class=&quot;org.springframework.scheduling.quartz.CronTriggerBean&quot; scope=&quot;prototype&quot;&amp;gt;&lt;/span&gt;&lt;br style=&quot;background-color: #cccccc;&quot; /&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;     &amp;lt;property name=&quot;jobDetail&quot; ref=&quot;exampleJob&quot;/&amp;gt; &lt;/span&gt;&lt;br style=&quot;background-color: #cccccc;&quot; /&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt; &amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Here is the pseudo code:&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;CronTrigger ct = (CronTrigger)appCtx.getBean(&quot;cronTrigger&quot;);&lt;br /&gt;
ct.setName(ct.getName() + some-distinguisher);&lt;br /&gt;
ct.getJobDataMap().put(some-key, some-value);&lt;br /&gt;
ct.setCronExpression(some-exp);&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Still configures my SchedulerFactorBean. But I need to add my above  triggers to the scheduler. Because I create the above trigger after  SchedulerFactorBean&#39;s afterPropertiesSet(), the trigger&#39;s associated  JobDetail is not added to the scheduler. But I can explicitly register  the JobDetail: &lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;bean class=&quot;org.springframework.scheduling.quartz.SchedulerFactoryBean&quot; id=&quot;scheduler&quot; lazy-init=&quot;false&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&quot;scheduler&quot; class=&quot;org.springframework.scheduling.quartz.SchedulerFactoryBean&quot; lazy-init=&quot;false&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;jobDetails&quot;&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;list&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ref bean=&quot;exampleJob&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/list&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;triggers&quot;&amp;gt; &amp;lt;!-- will dynamically add more triggers --&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;list/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;autoStartup&quot; value=&quot;true&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;quartzProperties&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;props&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;prop key=&quot;org.quartz.scheduler.jmx.export&quot;&amp;gt;true&amp;lt;/prop&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;prop key=&quot;org.quartz.threadPool.threadCount&quot;&amp;gt;2&amp;lt;/prop&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/props&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;/bean&gt;&lt;/span&gt;Here is the pseudo code:&lt;br /&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;Scheduler sched = (Scheduler)appCtx.getBean(&quot;scheduler&quot;);&lt;br /&gt;
sched.scheduleJob(ct);&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/8366107060174243356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/08/dynamically-creates-quartz-scheduler.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8366107060174243356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8366107060174243356'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/08/dynamically-creates-quartz-scheduler.html' title='Dynamically Creates Quartz Scheduler using Spring'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-5448695194506015366</id><published>2011-06-15T17:49:00.001-04:00</published><updated>2012-05-11T22:33:04.933-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Will class literals (some-named-type.class) cause class initialization?</title><content type='html'>Suppose you have the following classes:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;class Foo {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static int cls_var = 10;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;cls_var:&quot; + cls_var);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int inst_var = 20; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Bar {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String arg[]) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&lt;b style=&quot;color: blue;&quot;&gt;Foo.class&lt;/b&gt;.getName());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Will &lt;/span&gt;the &lt;a href=&quot;http://192.9.162.55/docs/books/jls/second_edition/html/expressions.doc.html#251530&quot;&gt;class literal&lt;/a&gt; in &lt;b style=&quot;color: blue;&quot;&gt;bold blue&lt;/b&gt; cause Foo to be initialized (assign cls_var to 10 and run the following initializer)?&lt;br /&gt;
On the console you will only see &quot;Foo&quot;; you will not see &quot;cls_var:10&quot; as you may think you should see.&lt;br /&gt;
&lt;br /&gt;
In order to find why, you need to know that JVM subject a class to the following 3 processes in order:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#19175&quot;&gt;Loading&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#22574&quot;&gt;Linking: Verification, Preparation, and Resolution&amp;nbsp;   &lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#19075&quot;&gt;Initialization   &lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;The class literal evaluates to the Class object for the named type (or for void) as defined by the defining class loader of the class of the current instance, and this information is accommodated by the above Step 1. &lt;br /&gt;
&lt;br /&gt;
Foo&#39;s static variable initialization and the executor of static  initializer are done in Step 3. Step 3 can be lazily executed by JVM  after Step 1, which means Step 3 may not immediately follow Step 1.&lt;br /&gt;
&lt;br /&gt;
This is why you will only see &quot;Foo&quot; output on the console. For  more details, please see the linked JVM spec and Java language spec.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/5448695194506015366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/06/will-class-literals-some-named.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/5448695194506015366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/5448695194506015366'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/06/will-class-literals-some-named.html' title='Will class literals (some-named-type.class) cause class initialization?'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-6200015249827764625</id><published>2011-04-12T09:11:00.001-04:00</published><updated>2011-04-12T09:12:52.782-04:00</updated><title type='text'>A GPGPU Article Published in DZone.com</title><content type='html'>Large data set processing needs parallel computing that can be hosted on commodity processors ranging from low-end multi-core CPUs to high-end many-core GPUs. OpenCL can program both CPU and GPU, and even future parallel processors. Readers can learn from the article what workloads each processor is good at.&lt;br /&gt;
&lt;br /&gt;
The article first discusses why OpenCL is a better programming paradigm for parallel computing on heterogeneous processors than others (OpenML,pThread, CUDA and ATI Stream); then compares the major hardware differences between CPU and GPU, and what different workloads CPU and GPU are each good at; finally a brief example is given regarding how to parallel an originally single-threaded algorithm to CPU and GPU using OpenCL.&lt;br /&gt;
&lt;br /&gt;
This article was based on the coding experience with Lili Zhou, a medical physics resident at &lt;a href=&quot;http://server.dzone.com/articles/parallel-computing#id=28&quot;&gt;NY Presbyterian Hospital / Weill Cornel Medical Center&lt;/a&gt;. More discussions are expected as we are migrating more single-threaded programs to multi-core CPU and GPGPU.&lt;br /&gt;
This article is basically a rerun of my &lt;a href=&quot;http://yongjun-jiao.blogspot.com/2011/02/gpgpu-high-performance-computing-using_26.html&quot;&gt;previous post.&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/6200015249827764625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/04/gpgpu-article-published-in-infoqcom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/6200015249827764625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/6200015249827764625'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/04/gpgpu-article-published-in-infoqcom.html' title='A GPGPU Article Published in DZone.com'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-5084753675048058011</id><published>2011-04-01T11:25:00.002-04:00</published><updated>2012-05-11T22:32:28.540-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Throws RunTimeException in Java Class Static Initializer?</title><content type='html'>When you want to run some logic during class initialization, you put it into so called class initializer e.g. something like this:&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;public class MyTest {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (some-condition)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RuntimeException(&quot;something wrong&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;throw RTE in static initializer&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
However there is some caveat. If the RuntimeException is thrown, class MyTest will still be loaded, but in erroneous state. So you can&#39;t do handle the following scenario.&lt;br /&gt;
Assume in the static initalizer, you want to retrieve some external property values and the RTE will be thrown if some property value is not configured yet. MyTest is also supposed to be deployed on the server side.&lt;br /&gt;
When JVM first attempted to load MyTest, the RTE was thrown because of some missing property value. The user saw the RTE and configured the missing property values. Now he/she hopes to be able to access this class.&lt;br /&gt;
However when MyTest is being accessed again, he/she will get NoClassDefFoundError. &lt;br /&gt;
&lt;br /&gt;
This error is so confusing in this case because binary code of MyTest was indeed found by the JVM classloader. However it is just in erroneous state.&lt;br /&gt;
In order to find details, you need to read section &lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=1684531418775159957&quot;&gt;2.17 Execution in JVM Specification&lt;/a&gt;. Basically a class like MyTest must go throw 3 stages in order before it is being put in use: Loading, Linking and Initialization.&amp;nbsp; The static initializer is executed in Initialization. If any exception is thrown in class initialization, &lt;code&gt;JVM &lt;/code&gt;will throw&lt;code&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt; ExceptionInInitializerError &lt;/code&gt;and put the class in erroneous state. (since the Initialization is after loading, the class was indeed found by JVM and loaded)&lt;br /&gt;
Based on Step 5 in section 2.17.5 in the above reference, JVM will stop initializing by throwing &lt;code&gt;NoClassDefFoundError &lt;/code&gt;even the class has been found and loaded.&lt;br /&gt;
&lt;br /&gt;
Because of this caveat, you have to throw an exception in a class constructor and use a class variable as a flag to void repeating execution of your logic that is supposed to be run only once.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/5084753675048058011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/04/throws-runtimeexception-in-java-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/5084753675048058011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/5084753675048058011'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/04/throws-runtimeexception-in-java-class.html' title='Throws RunTimeException in Java Class Static Initializer?'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-8524010714612597883</id><published>2011-03-01T18:58:00.001-05:00</published><updated>2012-05-11T22:31:47.421-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Replication"/><title type='text'>A Data Replication Article Published in InfoQ.com</title><content type='html'>Although data replication is an old technology as you can find it in Oracle Advanced Replicatin and Oracle RAC (Formally OPS), it is also widely used in some new products such as TimesTen, Gigaspaces and NoSQL.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.infoq.com/articles/Concurrency-Control-Data-Replication&quot;&gt;This technical article&lt;/a&gt; is based on my previous posting &quot;&lt;a href=&quot;http://yongjun-jiao.blogspot.com/2010/11/locking-schemes-for-replicated-data.html&quot;&gt;Locking Schemes for Data Replication Updating&lt;/a&gt;&quot; and reviewed by &lt;span style=&quot;font-size: small;&quot;&gt;Ron Bodkin, CEO of &lt;a href=&quot;http://www.thinkbiganalytics.com/&quot;&gt;Think Big Analytics.&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It discusses and compares several schemes commonly found in commercial and open-source products.&lt;br /&gt;
It helps you understand the prons and cons of different data replication scheme and assists you in choosing the right one suited for your business requirements.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/8524010714612597883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/03/data-replication-article-published-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8524010714612597883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8524010714612597883'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/03/data-replication-article-published-in.html' title='A Data Replication Article Published in InfoQ.com'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-8848650136491551673</id><published>2011-02-28T16:49:00.001-05:00</published><updated>2011-03-05T22:53:24.614-05:00</updated><title type='text'>Welcome to the World!</title><content type='html'>My baby, Bryan Zhou Jiao, finally came to the world on Feb 15, 2011. Now I truly underdand how hard the ten-month long pregnancy is, which is especially true considering both my wife and me have passed the prime time for having a baby. &lt;br /&gt;
Fortunately the whole preganancy process basically went smoothly and both Mom and the baby are safe and healthy.&lt;br /&gt;
I am also a bit suprised so far. I am very afraid of baby crying and originally I though babies would cry very often. Luckily my little one is not worrisome and he only cried when he woke up and felt hungry, which seems to be his only requirement from us.&lt;br /&gt;
&lt;br /&gt;
Here are some pictures.&amp;nbsp; &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQXSysCrrrOkpD15WlRDqqgS3V4_xQKAcf8sC6wkutX6hqENTaPTMpN3HSooPln86rqBWRQ1w_wqzkAxBmxL7AlHhdy-ZVozuAfc2_G9_vTcbC7yPbIuoZoLFYf3CGwkiSFe3_riU1P0/s1600/S-IMG_0360.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQXSysCrrrOkpD15WlRDqqgS3V4_xQKAcf8sC6wkutX6hqENTaPTMpN3HSooPln86rqBWRQ1w_wqzkAxBmxL7AlHhdy-ZVozuAfc2_G9_vTcbC7yPbIuoZoLFYf3CGwkiSFe3_riU1P0/s320/S-IMG_0360.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3hyphenhyphen3kQi-joO0EsjFSX-yn1OtGgoEJbsPCUoK4XySVx41FKCajDK3i9aYTILaa6OztS-NAyxf5Qr9TQwiWdOZUyyDjMl9UO1uk-CzRot0b8wUd6WOc76kE4Co9b6u9NUOyVP5C9nSPwhY/s1600/S-IMG_0354.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3hyphenhyphen3kQi-joO0EsjFSX-yn1OtGgoEJbsPCUoK4XySVx41FKCajDK3i9aYTILaa6OztS-NAyxf5Qr9TQwiWdOZUyyDjMl9UO1uk-CzRot0b8wUd6WOc76kE4Co9b6u9NUOyVP5C9nSPwhY/s320/S-IMG_0354.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
More photos and videos are available at &lt;a href=&quot;http://www.flickr.com/photos/bryan-zhou-jiao/sets/&quot;&gt;Flickr&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/8848650136491551673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/02/welcome-to-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8848650136491551673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8848650136491551673'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/02/welcome-to-world.html' title='Welcome to the World!'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQXSysCrrrOkpD15WlRDqqgS3V4_xQKAcf8sC6wkutX6hqENTaPTMpN3HSooPln86rqBWRQ1w_wqzkAxBmxL7AlHhdy-ZVozuAfc2_G9_vTcbC7yPbIuoZoLFYf3CGwkiSFe3_riU1P0/s72-c/S-IMG_0360.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-4760973282510476020</id><published>2011-02-26T23:36:00.002-05:00</published><updated>2012-05-11T22:31:13.917-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DP"/><category scheme="http://www.blogger.com/atom/ns#" term="GPGPU"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenCL"/><category scheme="http://www.blogger.com/atom/ns#" term="TP"/><title type='text'>GPGPU High Performance Computing using OpenCL -- Parallel Computing on Heterogeneous Platforms</title><content type='html'>&lt;i&gt;The following technical discussion was co-authored with Lili Zhou who is a medical physics resident at &lt;a href=&quot;http://server.dzone.com/articles/parallel-computing#id=28&quot;&gt;NY Presbyterian Hospital / Weill Cornel Medical Center&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;The discussion can help you understand the major hardware differences between multi-core CPUs and many-core GPUs (GPGPUs) and the different types of parallel workloads that CPUs and GPUs are each suited for.&lt;br /&gt;
Here it is.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;Processing of large data sets entails parallel computing in order to achieve high throughput. Traditionally high throughput was only achievable through either proprietary hardware (&lt;a href=&quot;http://en.wikipedia.org/wiki/Application-specific_integrated_circuit&quot;&gt;Application-Specific Integrated Circuit (ASIC)&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Field-programmable_gate_array&quot;&gt;Field-Programmable Gate Array (FPGA)&lt;/a&gt; or even &lt;a href=&quot;http://en.wikipedia.org/wiki/Cell_processor&quot;&gt;Cell BE&lt;/a&gt;) or multi-node clusters.&lt;br /&gt;
However, as throughput-oriented multi-core processors become more pervasive, the same performance is now achievable through these commodity parallel architectures that range from multi-core CPU for low parallelism to many-core &lt;a href=&quot;http://en.wikipedia.org/wiki/GPGPU&quot;&gt;Graphics Processing Unit (GPU)&lt;/a&gt; for massive parallelism.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;This article focuses on major hardware differences between CPU and GPU, which further decides the different workloads that each processor is suited for. In the end, it gives a data partition example using OpenCL across CPU and GPU, and compares the performance differences on the two platforms.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;1 OpenCL – a New and Better Parallel Computing Paradigm&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Because you most probably have different workloads that can be better processed using CPU than GPU or vice versa, you need to master parallel computing for both CPU and GPU.&lt;br /&gt;
However, parallel computing for heterogeneous processors is challenging as traditional programming paradigms for CPU and GPU are very different. &lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;For example, you usually use &lt;a href=&quot;http://en.wikipedia.org/wiki/POSIX_Threads&quot;&gt;POSIX Threads or Pthreads&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenMP&quot;&gt;OpenMP&lt;/a&gt; for CPU.&lt;br /&gt;
Although GPU typically only handles graphics computations, its gigaflops or even teraflops of floating point performance and high memory bandwidth make it suited to some non-graphics applications including data-intensive scientific and engineering computations, which actually falls into the scope of so-called &lt;a href=&quot;http://en.wikipedia.org/wiki/GPGPU&quot;&gt;General-Purpose Computing on Graphics Processing Unit (GPGPU)&lt;/a&gt;.&lt;br /&gt;
However, GPGPU programming originally required programmers to possess intimate knowledge of graphics APIs (OpenGL or DirectX) and GPU architecture and to make their non-graphics applications look like graphics ones by mapping them into problems that drew triangles and polygons. This placed a great constraint for non-graphics domain scientists and engineers.&lt;br /&gt;
This old approach was adopted by &lt;a href=&quot;http://www.cs.sunysb.edu/%7Emueller/papers/pmb7_12_006.pdf&quot;&gt;Fang et al in the CT reconstruction algorithm&lt;/a&gt;.&lt;br /&gt;
With the advent of &lt;a href=&quot;http://en.wikipedia.org/wiki/Shader_%28computer_science%29&quot;&gt;Unified Shaders&lt;/a&gt;, dedicated general purpose GPU such as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Nvidia_Tesla&quot;&gt;Telsa series&lt;/a&gt; from NVIDIA and the &lt;a href=&quot;http://en.wikipedia.org/wiki/AMD_FireStream&quot;&gt;FireStream series&lt;/a&gt; from AMD, and high-level programming paradigms such as &lt;a href=&quot;http://en.wikipedia.org/wiki/CUDA&quot;&gt;CUDA&lt;/a&gt; from NVIDIA and &lt;a href=&quot;http://www.amd.com/US/PRODUCTS/TECHNOLOGIES/STREAM-TECHNOLOGY/Pages/stream-technology.aspx&quot;&gt;ATI Stream&lt;/a&gt; from AMD, CPU-based non-graphics applications can now directly access the tremendous performance of GPU without the above limitations.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Unfortunately all of the above different programming paradigms have very sharp learning curves and some are vendor-specific. Worse yet, none of them may be supported by future parallel processors.&lt;a href=&quot;http://en.wikipedia.org/wiki/Opencl&quot;&gt;&lt;br /&gt;
OpenCL (Open Computing Language)&lt;/a&gt; is an open royalty-free standard for general purpose parallel programming across CPU, GPGPU, and such other processors as DSP and the Cell/B.E. processors, giving software developers portable and efficient access to the power of these heterogeneous processing platforms.&lt;br /&gt;
Although OpenCL is very new, it is a better choice because of the following factors:&lt;/div&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot;&gt;It utilizes a subset of ISO      C99 with extensions for parallelism. You are probably already familiar      with C programming;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&amp;nbsp;You don’t need to learn      anything else in order to take advantage of the parallel structures of      current and even future parallel processors;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&amp;nbsp;You just need to      analyze your algorithms for data or tasks decomposition without even      knowing the underlying complex multi-threaded programming mechanism, not      to mention any graphics API or GPU internals.&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;MsoNormal&quot;&gt;We will use OpenCL terminologies in the following discussion. If you are not familiar with them, you are encouraged to read the first three chapters in the &lt;a href=&quot;http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf&quot;&gt;OpenCL specification documentation&lt;/a&gt;.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;2 Major Differences between CPU and GPGPU in Parallel Computing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;You need to know the major hardware differences to be able to select either CPU or GPGPU for different workloads. This discussion uses &lt;a href=&quot;http://i.dell.com/sites/content/business/solutions/engineering-docs/en/Documents/Precision-T7500-T5500-Technical-Guide.pdf&quot;&gt;Dell Precision T7500 Tower Workstation&lt;/a&gt; (it has 2 Intel &lt;a href=&quot;http://www.cpu-world.com/CPUs/Xeon/Intel-Xeon%20E5507%20-%20AT80602000795AA%20%28BX80602E5507%29.html&quot;&gt;E5507&lt;/a&gt; quad-core processors without Hyper-threading) and &lt;a href=&quot;http://www.nvidia.com/object/personal_supercomputing.html&quot;&gt;NVIDIA Tesla C2050&lt;/a&gt; for reference. You can click their hyperlinks to get introductions for their capabilities.&amp;nbsp; &lt;br /&gt;
C2050 is based on NVIDIA’s next-generation CUDA architecture codenamed “Fermi” and has 14 CUDA 32-core multi-processors one of which is shown below courtesy of &lt;a href=&quot;http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIAFermiComputeArchitectureWhitepaper.pdf&quot;&gt;this resource&lt;/a&gt;:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp6AK8vRDhVLdJ9M6uLGbthIiXFBgllDhFhsuKzTQME8IKIpPp1T3VIYWtggo_-jOe_qmXaWfh5nSpp15LmofqovfW1QAZUa70mMhW31ElMJJqgmIhOHSp23DXrCM9aW208zOb1LrlBNY/s1600/fermi.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp6AK8vRDhVLdJ9M6uLGbthIiXFBgllDhFhsuKzTQME8IKIpPp1T3VIYWtggo_-jOe_qmXaWfh5nSpp15LmofqovfW1QAZUa70mMhW31ElMJJqgmIhOHSp23DXrCM9aW208zOb1LrlBNY/s1600/fermi.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;2.1 GPGPU Supports Much More Hardware Threads than CP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;T7500 only supports 8 &lt;a href=&quot;http://en.wikipedia.org/wiki/Multithreading_%28computer_architecture%29&quot;&gt;hardware threads&lt;/a&gt; (4 compute units or core in CPU terms * 2 processors) while C2050 supports 21,504 (14 compute units or multi-processors in CUDA terms * &lt;a href=&quot;http://en.wikipedia.org/wiki/CUDA&quot;&gt;1536&lt;/a&gt;), which means C2050 is in a better position to process massive amounts of data in parallel than T7500.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;2.2 GPGPU’s Threads Are Lightweight&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;By the above “hardware threads”, we mean the context or state of a processing element (one of the 4 compute units in T7500 or one of the 32 CUDA core in a C2050 compute unit) is saved in registers allocated to each thread so that context switching can be done in just one cycle.&lt;br /&gt;
If you create more than 8 threads for T7500, context switching will involve software operation, which takes many more cycles and are accordingly expensive and heavyweight.&lt;br /&gt;
Because C2050 has &lt;a href=&quot;http://en.wikipedia.org/wiki/CUDA&quot;&gt;32,768&lt;/a&gt; registers, it can support as many as 21,504 in-flight hardware threads.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;2.3 GPGPU’s SIMD and Global Memory Interface Is Much Wider than CPU’s&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Simd&quot;&gt;Single-Instruction Multiple-Data or SIMD&lt;/a&gt; is suited to process large data sets in batch mode.&amp;nbsp; T7500 implements SIMD with SSE that is 128-bit wide while C2050 implements SIMD with &lt;a href=&quot;http://developer.download.nvidia.com/compute/cuda/3_1/toolkit/docs/NVIDIA_OpenCL_ProgrammingGuide.pdf&quot;&gt;Single-Instruction Multiple-Thread or SIMT&lt;/a&gt; (a smallest execution unit of 32 threads runs a single instruction) that is 1024-bit wide.&lt;br /&gt;
T7500 has 192-bit global memory (system memory in CPU terms) interface through 3 parallel channels per processor while C2050’s memory interface is 384-bit through 6 channels.&lt;br /&gt;
This means C2050 is better suited to large data sets that possess spatial locality.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;2.4 CPU Has Larger Cache and Lower Latency than GPGPU&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;T7500 has 32K L1 and 256K L2 per compute unit and 4M unified L3 while C2050 has 16K L1 per compute unit and 768K unified L2, which means that CPU is more lenient to the requirement on spatial locality than GPGPU and also has lower memory access latency than GPGPU.&lt;br /&gt;
However GPGPU is optimized for high-throughput by hiding the latency for memory access and other instructions through fast context switching to ready threads in the scheduling queue, which assumes, in addition to there being a large number of in-flight thread, the number of arithmetic operations per memory operation is also high (Imagine if you only perform one arithmetic per memory load, context switching doesn’t make much sense). &lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;2.5 GPGPU Gives Developers Direct control over Its Fast On-chip Local Memory&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;GPGPU’s local memory (shared memory in CUDA terms) approximately corresponds to CPU’s L1 cache with respect to latency.&lt;br /&gt;
This memory region is shared by all work items (parallel threads) in a work group (a thread block), and can be used to boost effective bandwidth and system scalability by reducing or eliminating redundant loads from global memory and coalescing stride accesses to global memory.&lt;br /&gt;
The coalescing of strides is possible only when memory accesses of all work items in a work group fall into the local memory. In other words, a work group exhibits spatial locality in the local memory. &lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;C2050 has 48K local memory. Without using it, the redundant global memory loads from tens of thousands of threads if they do exist, will cause too many memory bus contentions, and un-coalesced stride accesses will waste too much memory bandwidth. &lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;2.6 Data Needs Transfer Between GPGPU and Host&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;T7500 uses Gen2 &lt;a href=&quot;http://en.wikipedia.org/wiki/PCI_Express&quot;&gt;PCIe&lt;/a&gt; X 16 for data transfer. Although the bandwidth of Gen2 PCIe X 16 is 8GBps, it is much lower than C2050’s memory bandwidth 144GBps.&lt;br /&gt;
So the number of compute operations per data element transferred in your parallel algorithms should be high otherwise they might be better handled using CPU.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;3 Different Workload Processing for CPU and GPGPU&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;A fundamental requirement for parallel computing on both CPU and GPGPU is that you data or tasks can be decomposed for concurrent processing. However CPU and GPGPU are suited to different types of workloads.&lt;br /&gt;
On the other hand, if your data or tasks exhibit little or no parallelism, you should leave them to CPU for serial processing. OpenCL allows you to parallelize parts of your CPU-based applications by putting the parallel parts into an OpenCL kernel while leaving the rest untouched. &lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;3.1 GPGPU Is Better Suited to Process Large Data Sets&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Small data sets can’t justify the time incurred by GPGPU’s slow data transfer on PCIe and other setup costs. Large data sets also spawn a large number of lightweight threads that are required in order to take full advantage of GPGPU’s massively parallel structure and to hide GPGPU’s the latency for memory access and other instructions by fast context switching.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;3.2 GPGPU Requires the Number of Arithmetic Operations per Memory Operation Be High&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;This is to hide GPGPU’s long latency for memory access and other instructions. Otherwise CPU is a better choice thanks to its larger cache.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;3.3 Data Transfer on PCIe Should Be Minimized&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;In other words the number of compute operations by GPGPU per data element should be high otherwise CPU is a better choice due to the low PCIe bandwidth.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;3.4 Memory Access Should Have Spatial Locality&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;This appears more important to GPGPU than CPU because CPU has larger cache and GPGPU’s wider SIMD and memory interface otherwise only means waste of bandwidth and limited scalability across its compute units.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Please note that you can relax this requirement a bit for GPGPU if your parallel algorithm meets the above 3.2 very well because a large number of arithmetic operations do hide memory access latency. Actually this relaxation is also a winning point because in order to use CPU’s SIMD feature, you must explicitly pack your data into vectors, which requires your data to have perfect spatial locality.&lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;4 Partition Your Data for Data Parallelism &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The key to OpenCL programming is to partition your data or tasks so that they can be processed in parallel. &lt;a href=&quot;http://en.wikipedia.org/wiki/Task_parallelism&quot;&gt;Task parallelism&lt;/a&gt; needs to vectorize your data and / or to submit multiple small kernels.&lt;br /&gt;
Since you face data parallelism most of the time and it needs more data design consideration, this discussion will only deal with data parallelism.&lt;a href=&quot;http://en.wikipedia.org/wiki/Data_parallelism&quot;&gt;&lt;br /&gt;
Data parallelism&lt;/a&gt; allows you to concurrently apply the same OpenCL kernel (the function to run on GPU in parallel) to multiple independent work items (data elements) in an OpenCL index space (a memory object decomposed into data elements).&amp;nbsp; OpenCL doesn’t require you to have a one-to-one mapping between work items and data elements. &lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;When you design a new parallel algorithm, you should put the requirements in Section 3 into consideration. A good candidate for parallelism is the FOR or WHILE loops with large iterations, and large data arrays.&lt;br /&gt;
One loop or one array can correspond to one dimension in an OpenCL index space while the loop iterations and array elements can map to work items. Nested loops or multi-dimension arrays can correspond to up to three dimensions in an OpenCL index space.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;When you try to parallel an existing singled-threaded algorithm, you should also target its loops and data arrays and analyze its data access pattern to decide which processor is better suited, CPU or GPGPU?&lt;br /&gt;
If you are not sure about the selection, which is especially true when your existing algorithm doesn’t fit the requirements in Section 3 one way or the other (for example, the algorithm doesn’t possess too much spatial locality),&amp;nbsp; you can first parallelize it to CPU. Then you can enhance it to GPGPU with slight modifications (still remember that OpenCL is a general purpose parallel programming paradigm across CPU, GPGPU and other processors?) and compare them. &lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;This approach is what we did for our CT image reconstruction program – Conebeam.&lt;br /&gt;
The Conebeam runs on Dell Precision T7500 Tower Workstation equipped with a NVIDIA Tesla C2050.&amp;nbsp; It has one one-dimensional input array, one one-dimensional output array, and three nested FOR loops that result in about 100M final iterations. The three FOR loops dynamically calculate the indexes for both arrays and compute the output array values based on the input array.&lt;br /&gt;
There are more than 200 arithmetic operations per memory access. Only the input and output arrays need transferring to and from GPGPU, respectively.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Here is pseudo-code method to parallelize on GPU:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;01.void&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;someMethod(float&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;*inBuf, float&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;*outBuf) {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;02.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;angle=0; angle&lt;anglesz; angle++)=&quot;&quot; {=&quot;&quot;&gt;&lt;/anglesz;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;03.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(int&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;binX=0; binX&lt;binxsz; binx++)=&quot;&quot; {=&quot;&quot;&gt;&lt;/binxsz;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;04.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(int&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;binY=0; binY&lt;binysz; biny++)=&quot;&quot; {=&quot;&quot;&gt;&lt;/binysz;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;05.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//the number of final iterations here is about 100M&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;06.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;idxIn = calculate based on angle,binX and binY;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;07.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt; &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;idxOut = calculate based on angle,binX and binY;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;08.&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;block&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;09.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outBuf[idxOut] = calculate based on inBuf[idxIn];&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;10.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;11.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;12.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;13.}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Because the three FOR loops calculate the values of the output array independently, they can be parallelized as the three dimensions in an OpenCL index space.&lt;br /&gt;
Because the three FOR loops have large iterations, and the two arrays are also large, this program seems to be a good candidate for GPGPU.&lt;br /&gt;
However, because the index accessing order of the two arrays is not synchronous with the three FOR loop iteration order, this program has very bad spatial locality and local memory can’t be used. Fortunately because it has high arithmetic operations per memory access, it should hide memory access latency in some degree if we use GPGPU. &lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Before we compare the two OpenCL implementations with real tests, here is some estimation:&lt;br /&gt;
Since T7500 has 8 compute units running at 2.2GHz while C2050 has 16 compute units running at 1.1GHz, T7500 has an approximate equivalent of 14 C2050 compute units. &lt;br /&gt;
T7500 has 192-bit global memory interface through 3 parallel channels per processor, so its overall memory interface is 384-bit. C2050’s memory interface is also 384-bit through 6 channels.&amp;nbsp; &lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The significant differences include (a) T7500 has just one processing element per compute unit while C2050 has 32 processing elements per compute unit; (b) T7500 has much larger cache than GPGPU and (c) T7500’s memory bandwidth is 230GBps while C2050 is 144GBps (GPU usually has higher bandwidth than CPU. However this high-end E5507’s effective memory speed is 4.8GHz while C2050 is only 3.0GHz).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The GPGPU version should be approximate 32 times faster than the CPU version if we put aside the cache factor and the CPU version doesn’t use SSE feature (The algorithm’s spatial locality is so bad that the above (c) shouldn’t generate any advantage to the CPU version).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Here are the real testing results:&lt;br /&gt;
The original single-threaded version ran about 70 minutes. The CPU version didn’t use SSE in order to port to NVIDIA GPGPU version easily and it ran about 12 minutes. The GPGPU version ran about 1 minute.&lt;br /&gt;
The CPU version didn’t have 8 times improvement over the single-threaded version because the Conebeam doesn’t have spatial locality and the 4 cores per processor incur memory bus contentions.&lt;br /&gt;
The GPGPU version didn’t have 32 times improvement over the CPU version because again the Conebeam doesn’t have spatial locality and CPU has much large cache.&lt;br /&gt;
In order to have linear scalability on GPGPU, the algorithm should be enhanced to exhibit spatial locality if it is possible. &lt;/div&gt;&lt;h2&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;5 Further Discussion&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;A major challenge for GPU programming is &lt;a href=&quot;http://graphics.stanford.edu/%7Ekayvonf/papers/fatahalianCACM.pdf&quot;&gt;to preserve GPU performance levels while increasing the generality and expressiveness of application interfaces&lt;/a&gt;.&lt;br /&gt;
Although OpenCL, CUDA and ATI Stream relieve programmers from learning graphics jargons, they may not allow you to make good use of all GPU resources. &amp;nbsp;The authors are not sure whether this concern still hold true even with NVIDIA’s Telsa series and AMD’s FireStream series.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;While OpenCL provides programming portability, it doesn&#39;t necesssarily provide &lt;a href=&quot;http://www.netlib.org/lapack/lawnspdf/lawn228.pdf&quot;&gt;performance portability&lt;/a&gt;. &lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt;&quot;&gt;&lt;/span&gt; &lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/4760973282510476020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/02/gpgpu-high-performance-computing-using_26.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/4760973282510476020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/4760973282510476020'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/02/gpgpu-high-performance-computing-using_26.html' title='GPGPU High Performance Computing using OpenCL -- Parallel Computing on Heterogeneous Platforms'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp6AK8vRDhVLdJ9M6uLGbthIiXFBgllDhFhsuKzTQME8IKIpPp1T3VIYWtggo_-jOe_qmXaWfh5nSpp15LmofqovfW1QAZUa70mMhW31ElMJJqgmIhOHSp23DXrCM9aW208zOb1LrlBNY/s72-c/fermi.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-5342022943069086713</id><published>2011-02-02T11:49:00.001-05:00</published><updated>2012-05-11T22:29:42.572-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GPGPU"/><category scheme="http://www.blogger.com/atom/ns#" term="ICD"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenCL"/><title type='text'>GPGPU High Performance Computing using OpenCL -- Work with Multiple Vendor Platforms using ICD</title><content type='html'>Sometimes you have different workloads that are better handled with different vendor OpenCL implementations.&lt;br /&gt;
For example if your data presents access locality or coherence, the number of calculation per data element transferred on PCI&amp;nbsp; is high and the number of calculation per memory access is also high, you can use NVIDIA&#39;s OpenCL implementation on its GPGPU.&lt;br /&gt;
On the other hand, if your data doesn&#39;t possess all of the characteristic mentioned above, you can use ATI/AMD&#39;s OpenCL implementation on CPU so that you at least can take advantage of all your CPU cores.&lt;br /&gt;
&lt;br /&gt;
OpenCL has an extension &quot;cl_khr_icd&quot;. It is technically called OpenCL ICD (Installable Client Driver) that is a means of allowing multiple OpenCL implementations to co-exist and applications to select between them at runtime.&lt;br /&gt;
&lt;br /&gt;
In my case since I have both CPU and GPGPU-friendly data, I installed on a 64-bit Windows 7 workstation both NVIDIA GPU Computing SDK 3.2 that support OpenCL 1.0, and ATI Stream SDK 2.2 that support OpenCL 1.1.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Find out whether your Vendor&#39;s SDK Supports OpenCL ICD&lt;/b&gt;&lt;br /&gt;
You can compile and run NVIDIA&#39;s oclDeviceQuery program. If you see &quot;cl_khr_icd&quot; in section &quot;CL_DEVICE_EXTENSIONS&quot; it means NVIDIA supports Opencl ICD.&lt;br /&gt;
You can also run ATI&#39;s &quot;clinfo&quot; program. It actually prints out all OpenCL platforms. Again if you see &quot;cl_khr_icd&quot; in section &quot;Extension&quot; it means the corresponding platform supports Opencl ICD.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. How does ICD Work?&lt;/b&gt;&lt;br /&gt;
Although I setup all my Visual Studio projects with NVIDIA GPU Computing SD, I basically can still dynamically load ATI&#39;s CPU OpenCL implementation.&lt;br /&gt;
The project setup basically needs two configurations. One is to specify the OpenCL include directory that contains vendor-neutral headers such as cl.h, cl_ext.h and some vendor-specific headers such as cl_agent_amd.h for AMD.&lt;br /&gt;
Unless your SDK&#39;s have different OpenCL versions, all vendor-neutral headers should be the same. If you need vendor-specific headers, of course you have to setup your project with that vendor&#39;s SDK.&lt;br /&gt;
&lt;br /&gt;
The other configuration is to specify the OpenCL library directory where a vendor-neutral stub library &quot;OpenCL.lib&quot; is located. This &quot;OpenCL.lib&quot; is called ICD loader that is responsible to dynamically load a vendor specific ICD library.&lt;br /&gt;
When you install a OpenCL SDK, the SDK registers its ICD DLL in the register key&lt;br /&gt;
HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors on Windows if it supports ICD.&lt;br /&gt;
So the ICD loader can scan the above register key and dynamically load your vendor&#39;s DLL library.&lt;br /&gt;
&lt;br /&gt;
For more information, please refer to &lt;a href=&quot;http://www.khronos.org/registry/cl/extensions/khr/cl_khr_icd.txt&quot;&gt;this resource&lt;/a&gt;.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. How does ICD affect your Code?&lt;/b&gt;&lt;br /&gt;
Your application is now responsible for selecting which of the OpenCL platforms present on a system it wishes to use, instead of just requesting the system default.&lt;br /&gt;
This means using the clGetPlatformIDs() and clGetPlatformInfo() functions to examine the list of available OpenCL implementations and selecting the one that best suits your requirements.&lt;br /&gt;
&lt;br /&gt;
For example, previously you could call the following function without specifying the specific platform value: &lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;context = clCreateContextFromType(&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,  CL_DEVICE_TYPE_GPU,  NULL,  NULL,  &amp;amp;status);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
With ICD, you must specify a specific platform:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;cl_context_properties cps[3] =  {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL_CONTEXT_PLATFORM, &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (cl_context_properties)platform, &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0};&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;context = clCreateContextFromType(&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cps,  CL_DEVICE_TYPE_GPU,  NULL,  NULL,  &amp;amp;status);&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/5342022943069086713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/02/gpgpu-high-performance-computing-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/5342022943069086713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/5342022943069086713'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2011/02/gpgpu-high-performance-computing-using.html' title='GPGPU High Performance Computing using OpenCL -- Work with Multiple Vendor Platforms using ICD'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-6458478608671396299</id><published>2010-12-11T14:50:00.006-05:00</published><updated>2012-05-11T22:28:47.714-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GPGPU"/><category scheme="http://www.blogger.com/atom/ns#" term="HPC"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenCL"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7"/><title type='text'>GPGPU High Performance Computing using OpenCL -- Installation and Setup</title><content type='html'>High Performance Computing (HPC) with General-Purpose GPU or &lt;a href=&quot;http://en.wikipedia.org/wiki/GPGPU&quot;&gt;GPGPU &lt;/a&gt;is one of the hottest technologies when it comes to massive amount of data processing. &lt;br /&gt;
Compared to the general-purpose CPU, GPGPU adapts some innovative new approaches to parallel computing both from software and hardware perspective.&lt;br /&gt;
&lt;br /&gt;
When it comes to program GPGPU, &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenCL&quot;&gt;OpenCL &lt;/a&gt;is the clear choice because it is the open standard&amp;nbsp;for writing programs that execute across &lt;a href=&quot;http://en.wikipedia.org/wiki/Heterogeneity&quot;&gt;heterogeneous&lt;/a&gt; platforms consisting of &lt;a href=&quot;http://en.wikipedia.org/wiki/Central_processing_unit&quot;&gt;CPUs&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Graphics_processing_unit&quot;&gt;GPUs&lt;/a&gt;,  and other existing or future processors. And almost all major GPU vendors including Nvidia  and AMD(ATI) support it, which was manifested by their OpenCL 1.0  driver releases recently.&lt;br /&gt;
&lt;br /&gt;
I have been studying GPGPU for several months. Now I get a real chance to help some scientists process some medical image data. Here are what I have.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;64-bit Windows 7 professional; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://i.dell.com/sites/content/business/solutions/engineering-docs/en/Documents/Precision-T7500-T5500-Technical-Guide.pdf&quot;&gt;Dell Precision T7500 Tower Workstation&lt;/a&gt;. It includes 2 Intel&#39;s latest 64-bit Xeon quad-core processors (a total of 8 physical cores. no HyperThreading), 6GB DDR3 ECC main memory, Broadcom NetXtreme 57xx Gigabit NIC, and &lt;a href=&quot;http://www.amd.com/us/products/workstation/graphics/ati-firepro-3d/Pages/ati-firepro-3d.aspx&quot;&gt;ATI Firepro 3D V5800&lt;/a&gt; for the display.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nvidia.com/object/personal_supercomputing.html&quot;&gt;Nvidia Tesla C2050&lt;/a&gt; GPGPU. It has 448 CUDA cores and 3G GDDR5 ECC global memory. It is Nvidia&#39;s flagship product to build a powerful workstation.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;1. Install C2050&lt;/b&gt; &lt;br /&gt;
You can really build a personal supercomputer (or a mini-cluster) right on you desk using T7500 and C2050. Unfortunately T7500 and C2050 came separately and installing C2050 on T7500 is not that straightforward as what the C2050 installation instructions tell you inside its CD package. &lt;br /&gt;
&lt;br /&gt;
With C2050 you can basically configure 2 ways:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Keep the existing ATI Firepro as the display adapter and the new  C2050 as a pure computing co-processor (not use it to drive display).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Use C2050 as both the display adapter and a computing co-processor. &lt;/li&gt;
&lt;/ol&gt;Configuration 1 is my case. I believe many people also want to have this configuration.&lt;br /&gt;
&lt;br /&gt;
The first step in the C2050 installation instructions is to remove current graphics driver. This should only work for configuration 2.&lt;br /&gt;
My first attempt strictly followed the instructions. I downloaded and installed the latest Nvidia driver 263.06 and its GPU Computing SDK 3.2. My monitor was still connected to the FirePro adapter. The Windows Device Manager shows a standard VGA adapter and Tesla C2050 adapter both of which are working properly.&lt;br /&gt;
However when I ran the oclDeviceQuery OpenCL example in the SDK, C2050 was not recognized.&lt;br /&gt;
I am not sure whether it will work if I connect the monitor to C2050 and disable the standard VGA driver. I didn&#39;t put any more effort into it because I really want to have configuration 1.&lt;br /&gt;
&lt;br /&gt;
So my next attempt was to restore the ATI Firepro driver. Unfortunately my previous uninstalling did some damage and I couldn&#39;t restore the ATI Firepro driver even the installation files still seem to be under c:\drivers\video\R259137\packages\drivers. So I downloaded the latest FirePro V5800 driver package on AMD&#39;s website and finally restored.&lt;br /&gt;
Now when I tried to run the same oclDeviceQuery, I got the same result. Actually even when you try to run any of the CUDA examples in the SDK, it didn&#39;t work neither.&lt;br /&gt;
&lt;br /&gt;
In order to make C2050 recognized, you need to enable it to work in the so called TCC (Telsa Computing Cluster) mode instead of the WDDM mode. Basically the TCC mode enables the Tesla C2050 to work as a computing co-processor along with a display adapter among other functions.&lt;br /&gt;
&lt;a href=&quot;http://us.download.nvidia.com/Windows/Quadro_Certified/263.06/263.06-Win7-WinVista-Tesla-Release-Notes.pdf&quot;&gt;Nvidia&#39;s release document for C2050 driver&lt;/a&gt; is so confusing at this point. The document mentions TCC is the default mode for C2050 that made me think it would be in TCC mode when I installed it. But it is not in my case.&lt;br /&gt;
&lt;br /&gt;
I tried to run nvidia-smi to enable TCC mode but it complained there was no TCC GPU detected.&lt;br /&gt;
In order to enable TCC mode, you have to manually edit the Windows registry by adding a DWORD entry called &quot;AdapterType&quot; and setting its value to 2. This new entry should be under&lt;br /&gt;
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0001 (or 0000 or whatever number that corresponds to your C2050 adapter).&lt;br /&gt;
After the above change, you have to reboot. After reboot, when you can run the same oclDeviceQuer, you will see Telsa C2050 is successfully recognized.&lt;br /&gt;
Please be noted that because TCC mode disable the graphical functions, none of graphical examples will work.But isn&#39;t this what you want? The TCC mode is faster than the WDDM mode for computing and let the display adapter to do graphics.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. OpenCL Support By Tesla C2050 Driver&lt;/b&gt;&lt;br /&gt;
Another confusing point in the C2050 driver release document is it didn&#39;t mention to support OpenCL. It only says to support CUDA C/C++. Fortunately the testing with its OpenCL examples show it indeed supports OpneCL 1.0 (actually if you examine the files installed by the 263.06 driver package, you can find the opencl.dll library).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Install OpenCL SDK&lt;/b&gt;&lt;br /&gt;
Nvidia&#39;s Developer Zone also seem to be confusing. When I just want to setup a computing SDK for GPGPU(not graphics), I was at loss what to download.&lt;br /&gt;
Basically you have to download 2 SDKs after you have installed the C2050 Driver (the driver package includes both the low level CUDA driver and OpenCL driver).&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;NVIDIA GPU Computing Toolkit. It includes both CUDA and OpenCL SDKs.&lt;/li&gt;
&lt;li&gt;NVIDIA GPU Computing SDK 3.2. It includes SDSs for CUDA, OpenCL and DirectComput. It also include samples.&lt;/li&gt;
&lt;/ol&gt;For OpenCL development, you only need to install 2.&lt;br /&gt;
On Windows 7, you probably have Visual Studio 2010. However the OpenCL example solution in the above 2 is for Visual Studio 2005 and 2008 only. The good news is Visual Studio 2010 can successfully convert the 2008 solution. The only major conversion warning is regarding the targetName is not consistent with the generated executable file name. But this will not cause you any trouble.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/6458478608671396299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/12/gpgpu-high-performance-computing-using.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/6458478608671396299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/6458478608671396299'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/12/gpgpu-high-performance-computing-using.html' title='GPGPU High Performance Computing using OpenCL -- Installation and Setup'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-1196266268474813039</id><published>2010-11-21T21:46:00.002-05:00</published><updated>2012-05-11T22:27:43.482-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="COTS"/><category scheme="http://www.blogger.com/atom/ns#" term="Network"/><category scheme="http://www.blogger.com/atom/ns#" term="RTC"/><title type='text'>Commercial-Off-The-Shell Enterprise Real Time Computing (COTS ERTC) -- Part 4: Network Requirements</title><content type='html'>&lt;span style=&quot;font-size: small;&quot;&gt;Enterprise applications rarely work in isolation nowadays. Inst&lt;/span&gt;ead they usually cooperate with one another in a network environment.&lt;br /&gt;
Due to &lt;a href=&quot;http://en.wikipedia.org/wiki/Ethernet&quot;&gt;Ethernet&lt;/a&gt;&#39;s uniqueness, this topic will only discuss the &lt;a href=&quot;http://en.wikipedia.org/wiki/Internet_Protocol_Suite&quot;&gt;TCP/IP suite&lt;/a&gt; over Ethernet. The networks in Figure 4.1 are used for the discussion.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEircR3qcgEm-VPVo9FsL-mJ3uvlPT7LOutzxBteToidpTbQZeFQG1hzjuo_UecG_pVncDycm2Nyk2dt0TXiZiPjMAWELmnD2xmxKS855rjITJbhiEdikT6B1HhMm2Yf7-nYIciIyyVdu9w/s1600/network.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEircR3qcgEm-VPVo9FsL-mJ3uvlPT7LOutzxBteToidpTbQZeFQG1hzjuo_UecG_pVncDycm2Nyk2dt0TXiZiPjMAWELmnD2xmxKS855rjITJbhiEdikT6B1HhMm2Yf7-nYIciIyyVdu9w/s640/network.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 4.1 Networks&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;1. Network Latency &lt;/b&gt;&lt;br /&gt;
The network latency from a host in  LAN1 such as Host11 to a host in LAN2 such as Host21 is the cumulative  latency of all the following component: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;the TCP/IP stack latency on Host11. It includes all &lt;a href=&quot;http://en.wikipedia.org/wiki/OSI_model&quot;&gt;OSI &lt;/a&gt;layers  except the 7th application layer (you have full control at the  application layer). At least the 2 lower layers are implemented in the  NIC firmware. All other layers are either included in the OS or also  included in the NIC firmware.&lt;/li&gt;
&lt;li&gt;the &lt;a href=&quot;http://en.wikipedia.org/wiki/Network_switch&quot;&gt;switch&lt;/a&gt; latency in LAN1. The switch is a Layer 2 device. Originally an unintelligent Layer 1 &lt;a href=&quot;http://en.wikipedia.org/wiki/Network_hub&quot;&gt;hub or repeater&lt;/a&gt; was used. I will compare the latency difference later on. &lt;/li&gt;
&lt;li&gt;the &lt;a href=&quot;http://en.wikipedia.org/wiki/Network_router&quot;&gt;routers&lt;/a&gt; latencies between LAN1 and LAN2. The routers are actually Layer 3 switches.&lt;/li&gt;
&lt;li&gt;the switch latency in LAN2. Again the switch is a Layer 2 device.&lt;/li&gt;
&lt;li&gt;the TCP/IP stack latency on Host21. Again it includes all &lt;a href=&quot;http://en.wikipedia.org/wiki/OSI_model&quot;&gt;OSI &lt;/a&gt;layers except the 7th application layer.&lt;/li&gt;
&lt;li&gt;the  propagation delay from Host11 to Host21. It is the time it takes for  signals to travel in the physical copper cables or fibers. Signals in  fibers or copper cables can travel at about 2/3 of the fundamental &lt;a href=&quot;http://en.wikipedia.org/wiki/Speed_of_light&quot;&gt;speed of light&lt;/a&gt;.&lt;br /&gt;
If the communication distance is short e.g. in a LAN, the propagation latency can be negligible compared to other larger latencies. &lt;br /&gt;
On  the other hand if the the communication distance is long, it can&#39;t be  ignored. For example the straight distance from San Francisco to New  York is about 4,125 kilometers and the one-way signal travel needs about  19.6ms that is the lower bound of your overall latency optimization.&lt;/li&gt;
&lt;/ul&gt;Network  latency can also be defined as the round-trip latency between Host11  and Host12. However since our discussion focuses on latency and jitter  analysis of all involving components, the above one-way definition is  sufficient.&lt;br /&gt;
&lt;br /&gt;
The data unit in our discussion is a  packet. For example we can set it anywhere from the minimum Ethernet frame  size (it is about 64 bytes) to the maximum &lt;a href=&quot;http://en.wikipedia.org/wiki/Maximum_transmission_unit&quot;&gt;MTU&lt;/a&gt; (it is about 1500 bytes) and compare the  difference.&lt;br /&gt;
When you analyze your application level latency, the  data unit is an application level request, which has complications when  interacting with the underlying &lt;a href=&quot;http://en.wikipedia.org/wiki/Maximum_segment_size&quot;&gt;Maximum Segment Size (MSS) of TCP&lt;/a&gt; and the MTU of Ethernet frames (later sections will explain more details).&lt;br /&gt;
&lt;br /&gt;
The prioritized latency and jitter analysis mentioned in Part 1 still applies here. For example  upgrading to a faster switch in San Francisco doesn&#39;t make sense because  the minimum latency to New York is bounded by the 19.6ms propagation  delay and the latency of switches is usually in low micro-seconds.&lt;br /&gt;
&lt;br /&gt;
The following sections will discuss the latency and jitter in all involving components.&lt;br /&gt;
&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Non-Determinism in &lt;/b&gt;&lt;b&gt;Ethernet&lt;/b&gt;&lt;br /&gt;
Ethernet,  as standardized by IEEE 802.3, is implemented at Layer 1 and 2 of the  OSI model. Its latency comes from the processing delays at&amp;nbsp; Layer 1 and 2. The latency has jitter because of its &lt;a href=&quot;http://en.wikipedia.org/wiki/Media_Access_Control&quot;&gt;media access control  (MAC)&lt;/a&gt; protocol - &lt;a href=&quot;http://en.wikipedia.org/wiki/Carrier_sense_multiple_access_with_collision_detection&quot;&gt;CSMA / CD&lt;/a&gt; at Layer 2.&lt;br /&gt;
&lt;br /&gt;
With CSMA / CD, each host detects if another host is transmitting in the shared medium before it tries to transmit its own data (Carrier Sense). When a host detects a carrier, its Carrier Sense is turned on and it will defer transmission until determining the medium is free. This deference is unfortunately not predicable. If two hosts happen to transmit simultaneously (Multiple Access), a collision occurs and all frames are destroyed.&lt;br /&gt;
&lt;br /&gt;
If  we replace the switch in LAN1 / LAN2 with a hub / repeater, all four hosts  will be in one collision domain. The more hosts trying to send data, the  more collisions and the more non-deterministic.&lt;br /&gt;
Hosts sharing a &lt;a href=&quot;http://en.wikipedia.org/wiki/Full-duplex#Full-duplex&quot;&gt;half duplex&lt;/a&gt;  connection are also in the same collision domain.For example even there  are only Host11 and Host12 communicating to each other using a half  duplex connection in LAN1, collisions still happen when Host11 and  Host12 tries to send data to each other concurrently.&lt;br /&gt;
&lt;br /&gt;
Although redesign of MAC protocol can solve the  collision problem, it is not compatible to the existing ubiquitous  Ethernet deployments and thus is appropriate and not a COTS solution.&lt;br /&gt;
If  we can avoid collision, Ethernet will be much deterministic. This is  what the switch in LAN1 / LAN2 is supposed to do. With the switch each host is  guaranteed the exclusive use of the medium in both directions and is thus in a different  collision domain from other hosts.&lt;br /&gt;
For example Host11 can  communicate with Host12 while Host13 is communicating with Host14  without causing any collisions or frame drops.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Non-Determinism in &lt;/b&gt;&lt;b&gt;TCP/IP &lt;/b&gt;&lt;br /&gt;
IP is at Layer 3; TCP and UDP are at Layer 4. The biggest jitter at these upper layers actually comes from the non-determinism of the underlying CSMA / CD.&lt;br /&gt;
For example if the underlying frame was dropped due to collision, the upper packet will be lost if it is UPD and will be retransmitted if it is TCP thanks to TCP&#39;s time-out mechanism. &lt;br /&gt;
&lt;br /&gt;
A side note for TCP&#39;s time-out mechanism: if the network is slow, a low time-out value can lead to false retransmission. This is another reason why RTC applications prefer such fast networks as LAN.&lt;br /&gt;
&lt;br /&gt;
You should also be aware of the following points&lt;br /&gt;
&lt;b&gt;3.1 Non-Deterministic Routing Paths&lt;/b&gt;&lt;br /&gt;
A router has an additional Layer 3 compared to a switch. The more routers, the  more potential communication paths between LAN1 and LAN2, and the more  non-deterministic. A long communication path also leads to more frame  drops due to data corruption. So a RTC system is usually enclosed in a  LAN; otherwise make sure your routing path is deterministic.This is why  many &lt;a href=&quot;http://en.wikipedia.org/wiki/Algorithmic_trading&quot;&gt;algorithmic trading systems&lt;/a&gt; especially high-frequency trading system, collocate with exchanges.&lt;br /&gt;
&lt;br /&gt;
If  the communication path is predicable, the determinism of a network with  switches and routers will depend on that of those  switches and  routers. Modern switches and routers are actually very fast  and can  show very low jitter if managed properly, which will be  discussed in  Section 4.&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
.&lt;br /&gt;
&lt;b&gt;3.2 Packet Header Overhead and Fragmentation&lt;/b&gt;&lt;br /&gt;
Each packet at IP, UDP and TCP layers has a header besides the real payload. The head size for IP, UDP and TCP is 20, 8 and 20, respectively.&lt;br /&gt;
Actually the Ethernet frame at Lay 2 also has a 20 bytes overhead. When an IP packet is greater than the Ethernet MTU (it is about 1500 bytes), IP needs to fragment and reassemble its packet.&lt;br /&gt;
TCP also fragments its stream into packets based on the MSS, the available window size and some other factors.&lt;br /&gt;
&lt;br /&gt;
On one hand, more fragmentation and reassembly means more extra computing and higher latency. On the other hand, smaller packets than the MTU or MSS mean more significant header overhead and lower throughput.&lt;br /&gt;
In order to reduce jitter, your application level requests shouldn&#39;t have too variant sizes (different sized requests also mean different transmission delay). You should make your requests as large as possible before the latency misses your target. If possible, please decide the request size based on MTU.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3.3 TCP Flow Control&lt;/b&gt;&lt;br /&gt;
In order to avoid TCP packet drops from buffer overflows, TCP employs a sliding window mechanism to control its data flow.&lt;br /&gt;
So slow processing at the receiver host requires the sender host to send out smaller packets or even have to wait if the window size becomes 0. In order to reduce this jitter, make sure both ends can process network data fast and predictably.&lt;br /&gt;
&lt;br /&gt;
If the network is slow, the sender may have to wait for the latest window size from the receiver. A fast network such as LAN can reduce this waiting latency.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3.4 Nagle&#39;s Algorithm&lt;/b&gt;&lt;br /&gt;
Because of the 20 bytes header overhead in TCP, &lt;a href=&quot;http://en.wikipedia.org/wiki/Nagle%27s_algorithm&quot;&gt;Nagle&#39;s algorithm&lt;/a&gt; coalesces a number of small outgoing messages into one packet and sends it out.&lt;br /&gt;
This algorithm is usually unacceptable to RTC systems because they need immediate response for each of their requests. This is  especially true when the RTC requests are small.&lt;br /&gt;
&lt;br /&gt;
RTC systems usually take the following two counter-measures:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Enclose each request in one TCP packet;&lt;/li&gt;
&lt;li&gt;Turn off this algorithm by using the &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;TCP_NODELAY &lt;/span&gt;socket option.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;3.5 Delayed Acknowledgment&lt;/b&gt;&lt;br /&gt;
Again because of 20 bytes header overhead in TCP, a pure TCP response packet will have too much overhead. So &lt;a href=&quot;http://en.wikipedia.org/wiki/TCP_delayed_acknowledgment&quot;&gt;this mechanism&lt;/a&gt; delays the TCP layer response by waiting about one or two hundred milliseconds, and hopes to send back the response along with the upper application layer response using just one TCP packet instead of two.&lt;br /&gt;
&lt;br /&gt;
Unfortunately a one or two hundred milliseconds deadlock can occur if this mechanism interacts with the Nagle&#39;s algorithm and your application&#39;s response doesn&#39;t synchronize with the TCP layer&#39;s e.g. an application request was sent out in two or more TCP packets. Please refer to &lt;a href=&quot;http://en.wikipedia.org/wiki/Nagle%27s_algorithm&quot;&gt;this resource&lt;/a&gt; for a detailed analysis. &lt;br /&gt;
&lt;br /&gt;
In order to avoid this jitter, you need to take one or more of the following measures:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;disable the Nagle&#39;s algorithm;&lt;/li&gt;
&lt;li&gt;disable or configure the delayed acknowledgment mechanism. Please refer to &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa505957.aspx&quot;&gt;this resource&lt;/a&gt; on Windows; and &lt;a href=&quot;http://linux.die.net/man/7/tcp&quot;&gt;TCP_QUICKACK&lt;/a&gt; on Linux;&lt;/li&gt;
&lt;li&gt;Make sure your application level request is enclosed in one TCP packet.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;3.6 UDP with Application Level Retransmission and Flow Controls&lt;/b&gt;&lt;br /&gt;
TCP implements its reliability at the cost of more computing work and header overhead than UDP. If TCP&#39;s reliability is more than what you want, you can use UDP and implement your simple reliability by yourself at the application layer. This approach should give your lower latency and jitter than using TCP.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Latency and Jitter of &lt;/b&gt;&lt;b&gt;a Switch / Router&lt;/b&gt;&lt;br /&gt;
A router has an additional Layer 3 function. Its processing latency in a well-planed network will be predicable through a warm-up period that should cache all routing paths in the router. So we will focus on switches only.&lt;br /&gt;
A modern switch basically has two packet forwarding methods:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Store and forward. A whole frame is buffered before being forwarded. A checksum is usually performed on each frame.&lt;/li&gt;
&lt;li&gt;Cut through. The switch reads only up to the frame&#39;s hardware address before starting to forward it. There is no error checking. &lt;/li&gt;
&lt;/ul&gt;Because a cut-through switch doesn&#39;t have the additional buffering step, it has even shorter latency. However a cut-through switch will fall back to store and forward if its outgoing (egress) port is busy at the time a frame arrives. So we will focus on store-and-forward switches.&lt;br /&gt;
&lt;br /&gt;
The one-way port-to-port latency of a switch is the cumulative delays of the following components:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt; Layer 1 processing at both ports including signal modulation and data framing;&lt;/li&gt;
&lt;li&gt;Switch Fabric Latency. A switch has an internally shared high-bandwidth fabric that is much faster than any of its ports.&lt;/li&gt;
&lt;li&gt;Store and forward latency;&lt;/li&gt;
&lt;li&gt;Queuing latency. It occurs when different ingress ports are sending frames to the same egress port concurrently. Since only one frame can be transmitted at a time from the egress port, the other frames must be queued for sequential transmission in a FIFO manner. This phenomenon is called head-of-line blocking. Due to the FIFO behavior, the latency of a frame in the queue is unpredictable.&lt;br /&gt;
So each port of a switch has an outgoing queue, which along with the switch fabric actually gives the impression of simultaneous paths among its multiple ports.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;Detailed analysis can be found from these two resources: &lt;a href=&quot;http://www.ge-ip.com/ethernet_latency_gft737&quot;&gt;Switched Ethernet Latency Analysis&lt;/a&gt; and &lt;a href=&quot;http://www.ruggedcom.com/pdfs/application_notes/latency_on_a_switched_ethernet_network.pdf&quot;&gt;Latency on a Switched Ethernet Network&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Both analyses show the queuing latency is usually the largest and a switch&#39;s jitter comes from it due to its unpredictable head-of-line blocking. .&lt;br /&gt;
In order to reduce the queuing latency and jitter, you need to take one or more of the following measures:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Plan your network traffic properly including a predicable many-to-one mapping from ingress ports to egress ports; a smaller many-side value if a higher predictability is needed; and more importantly, no egress port should be oversubscribed. &lt;br /&gt;
For example if you egress port is of 10GbE, you can only have a maximum of 10 1GbE ingress ports concurrently sending data to it; otherwise frame loss will occur. If you need some 1GbE port to have a higher predictability, you need to reduce the number of 1GbE ingress ports concurrently sending data to the 10 GbE egress port.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Because a switch&#39;s queuing jitter can cause avalanche effect at subsequent&amp;nbsp; network hops, this is another reason why you need to reduce the number of routers in your networks;&lt;/li&gt;
&lt;li&gt;Apply &lt;a href=&quot;http://en.wikipedia.org/wiki/IEEE_802.1Q&quot;&gt;Virutal Lan (VLAN)&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/IEEE_802.1p&quot;&gt;Priority&lt;/a&gt; values to different traffic. Make sure your RTC frames are in a separate VLAN or have the highest priority. This is similar to the different priority levels for RTC threads we discussed in Part 3.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;Finally in this section, even a hub / repeater has lower latency than a switch thanks to its simple Layer 1 processing, a RTC system should not use it unless necessary such as port mirroring because it creates jitter.&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;b&gt;5. Gigabit Ethernet&lt;/b&gt;&lt;br /&gt;
Ethernet evolved from 10BASE-T to &lt;a href=&quot;http://en.wikipedia.org/wiki/Fast_Ethernet&quot;&gt;100BASE-T&lt;/a&gt; to the current widely deployed &lt;a href=&quot;http://en.wikipedia.org/wiki/Gigabit_Ethernet&quot;&gt;1GbE or Gigabit Ethernet&lt;/a&gt;. Now even &lt;a href=&quot;http://en.wikipedia.org/wiki/10_Gigabit_Ethernet&quot;&gt;10GbE&lt;/a&gt; has often been seen in backbone networks and high-end servers as a cheaper alternative to the appropriate and expensive high-speed interconnects such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Fibre_Channel&quot;&gt;Fiber Channel&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/InfiniBand&quot;&gt;InfinitBand&lt;/a&gt;.&lt;br /&gt;
A modern cut-through 10GbE switch such as &lt;a href=&quot;http://www.bladenetwork.net/&quot;&gt;BLADE&lt;/a&gt;&#39;S RackSwitch G8124 can has an average port-to-port latency in 680 nanoseconds (the average is on latencies of several different packet sizes from the minimum 64 bytes to the maximum 1518 bytes).&lt;br /&gt;
&lt;br /&gt;
Although this 680 nanoseconds latency is at the same magnitude as the main memory, the load on CPU increases linearly, without some kind of TCP offloading or OS kernel bypassing, as a function of packets processed, with the usual rule of thumb being that each bit per second of bandwidth consumes about a HZ of the CPU clock. For example 10Gbs of network traffic consumes about 10GHz of CPU that is much higher than the 3.33GHz of Intel&#39;s latest processor &lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_Intel_processors&quot;&gt;Core i7&lt;/a&gt;.&lt;br /&gt;
As more of the host CPU is consumed by the network load, both CPU utilization and host send / receive latency and jitter become significant issues.&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Rdma&quot;&gt;RDMA&lt;/a&gt; over TCP/IP or &lt;a href=&quot;http://en.wikipedia.org/wiki/IWARP&quot;&gt;iWARP&lt;/a&gt; has come up as a rescue. Basically an iWARP NIC or R-NIC allows a server to read/write data directly between its user memory space and the user memory space of another R-NIC-enabled host on the network without any involvement of the host operating systems.&lt;br /&gt;
&lt;br /&gt;
API&#39;s have been implemented for different platforms including the OpenFabrics Enterprise Distribution (OFED) by the OpenFabrics Alliance for Linux operating system, and the Winsock Direct protocol for Microsoft Windows.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/1196266268474813039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/commercial-off-shell-enterprise-real_21.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/1196266268474813039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/1196266268474813039'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/commercial-off-shell-enterprise-real_21.html' title='Commercial-Off-The-Shell Enterprise Real Time Computing (COTS ERTC) -- Part 4: Network Requirements'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEircR3qcgEm-VPVo9FsL-mJ3uvlPT7LOutzxBteToidpTbQZeFQG1hzjuo_UecG_pVncDycm2Nyk2dt0TXiZiPjMAWELmnD2xmxKS855rjITJbhiEdikT6B1HhMm2Yf7-nYIciIyyVdu9w/s72-c/network.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-926365637474197247</id><published>2010-11-09T17:37:00.002-05:00</published><updated>2012-05-11T22:27:14.052-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="COTS"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="RTC"/><title type='text'>Commercial-Off-The-Shell Enterprise Real Time Computing (COTS ERTC) -- Part 5: Java Requirements</title><content type='html'>Because programs designed using standard Java (either Java SE or Java EE or Java ME) exhibit non-deterministic timing of execution, standard Java is not widely used in RTC, especially in HRT.&lt;br /&gt;
However due to standard Java&#39;s popularity in many industries, extending it with RTC functions is very attractive.&amp;nbsp;The &lt;a href=&quot;http://www.rtsj.org/&quot;&gt;Real-Time Specification for Java (RTSJ)&lt;/a&gt; is designed to seamlessly augment standard Java with RTC functions.&lt;br /&gt;
&lt;br /&gt;
In this topic I will describe the key areas where standard Java creates jitters and how the two populate RTSJ implementations - Oracle&#39;s &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/tech/index-jsp-139921.html&quot;&gt;Java RTS&lt;/a&gt; and IBM&#39;s &lt;a href=&quot;http://www-01.ibm.com/software/webservers/realtime/&quot;&gt;WebSphere RT&lt;/a&gt; - reduce them.&lt;br /&gt;
This is also a good time to compare RTSJ with C/C++ if they both run on the same underlying RT OS.&lt;br /&gt;
&lt;br /&gt;
But before we start, here are few things about RTSJ:&lt;br /&gt;
Its implementations usually need a RT OS. Actually it is a must for HRT. In order to lower the learning curve, RTSJ doesn&#39;t introduce any new Java syntax, instead provides several new classes. Both Java RTS and WebSphere RT support Java SE 5 or later. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Threads, Synchronizations and Memory Management Models&lt;/b&gt;&lt;br /&gt;
Because Java threads have a one-to-one relationship with the underlying OS native threads (e.g. Java threads are implemented using the native POSIX threads on Solaris and stock Linux), most of Java threads&#39; functions are delegated to OS native threads as we discussed in Part 3.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.1 Regular Java Threads vs Java Real-Time Threads&lt;/b&gt;&lt;br /&gt;
Regular Java threads created by class &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.lang.Thread&lt;/span&gt; &lt;span style=&quot;font-family: inherit;&quot;&gt;(JLT)&lt;/span&gt; are not suitable for RTC due to the following factors:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;JLT only has 10 priority levels, which is not enough for COTS ERTC.&lt;/li&gt;
&lt;li&gt;JLT maps to OS non-real-time threads. For example, JLT maps to the SCHED_OTHER scheduling policy on Linux that creates jitter due to its dynamic priority adjustment. &lt;/li&gt;
&lt;li&gt;JLT has the &quot;priority inversion&quot; problem because &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.lang.Object.wait()&lt;/span&gt; doesn&#39;t implement the &quot;priority inheritance&quot; logic.&lt;/li&gt;
&lt;li&gt;JLT doesn&#39;t provide priority-based synchronization because &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.lang.Object.notify()&lt;/span&gt; is not required to wake up the highest-priority thread; and the &quot;unlock&quot; action in the &quot;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;synchronized&lt;/span&gt;&quot; statement is not required to choose the  highest-priority thread to be the next lock owner.&lt;/li&gt;
&lt;li&gt;JLT is subject to unpredictable pauses induced by GC because JLT allocates objects in the standard Java heap.&lt;/li&gt;
&lt;/ul&gt;RTSJ provides a new thread type &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;javax.realtime.RealtimeThread&lt;/span&gt; (RTT) to fix the above problems:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;RTT must have at least 28 priority levels. For example Java RTS has&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/documentation/javartstechinfo-138022.html&quot;&gt; a default of 60 on Solaris and 49 on stock Linux&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;RTT maps to OS level real-time threads. RTT maps to the SCHED_FIFO scheduling policy on stock Linux which provides fixed-priority scheduling based on FIFO queues (another stock Linux RT scheduling policy &quot;SCHED_RR&quot; doesn&#39;t meet RTT requirements due to its round-robin feature).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;RTSJ requires &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.lang.Object.wait()&lt;/span&gt; implement the &quot;priority inheritance&quot; logic. On Linux RT and Solaris, it can delegate to the underlying POSIX threading services.&lt;/li&gt;
&lt;li&gt;RTSJ requires &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.lang.Object.notify()&lt;/span&gt; wake up the highest-priority thread, and the &quot;unlock&quot; action in the &quot;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;synchronized&lt;/span&gt;&quot; statement choose the  highest-priority thread to be the next lock owner. On Linux RT and Solaris, they can again delegate to the underlying POSIX threading services.&lt;/li&gt;
&lt;li&gt;RTSJ provides a subclass of RTT called &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;javax.realtime.NoHeapRealtimeThread&lt;/span&gt; (NHRT) which is protected from GC-induced jitter (see next section for details). NHRT is intended for HRT.&lt;/li&gt;
&lt;/ul&gt;Because RTT exposes many of the underlying OS native threading functions to Java, RTSJ can compete squarely with C/C++ in the above areas.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.2 New Memory Management Models&lt;/b&gt;&lt;br /&gt;
Because NHRT is not affected by GC pauses, it is allowed neither to use the standard garbage-collected heap nor to manipulate references to the heap.&lt;br /&gt;
Besides the standard heap, RTSJ provides two memory management models that RTT and NHRT can use to allocate memory on a more predicable basis:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Immortal Memory. &lt;br /&gt;
It is not garbage-collected. Its primary use is to avoid dynamic allocation by statically allocating all the needed memory ahead of time. &lt;br /&gt;
It is like the malloc() / new operator in C/C++ without the corresponding free() / delete operator because once an object is allocated from it, the memory used by the object will never be reclaimed. Any unintended allocation into it is regarded as memory leak and can cause out of memory. &lt;/li&gt;
&lt;li&gt;Scoped Memory. It is not garbage-collected either. It is intended for objects with a known lifetime such as temporary objects created during the processing of a task. It will be entirely reclaimed at the end of the lifetime such as when the task finishes. &lt;br /&gt;
Because many standard and third-party Java libraries create many temporary objects, it is impractical to use immortal memory if RTT or NHRT has to link to many libraries. In this case scoped memory is a better choice.&lt;/li&gt;
&lt;/ul&gt;Although the two new models enable RTSJ to compete with C/C++ equally at the memory allocation area, they are hard to use and very error-prone because objects allocated in the two new models and the standard heap have difference GC characteristics and lifetimes, and assignment rules must be enforced. &lt;br /&gt;
So the recommended use of the two models is limited to programs that can&#39;t tolerate GC pauses such as in HRT.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.3 Communication between NHRT and RTT / JLS&lt;/b&gt;&lt;br /&gt;
Because an NHRT could block on a lock held by an RTT or JLS. While the RTT or JLT holds the lock, GC could preempt it and indirectly preempt the NHRT. If this is not tolerable, you either should void lock sharing or use the following non-blocking queues for resource sharing:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;javax.realtime.WaitFreeReadQueue &lt;/span&gt;class for passing objects from RTT / JLT to NHRT.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;javax.realtime.WaitFreeWriteQueue &lt;/span&gt;class for passing objects from NHRT to RTT / JLS&lt;/li&gt;
&lt;/ul&gt;Because many Java libraries use internal locking, NHRT linked to Java libraries must avoid indirect GC preemption to ensure HRT behavior.&lt;br /&gt;
&lt;br /&gt;
Because the new JTSJ classes and RT functions above mentioned have a medium-level learning curve for Java SE developers, you are recommended to still use JLT with careful tunings if SRT can meet your business requirements. Those tunings included the OS level tunings as mentioned in Part 3, limiting the number of your application threads, avoiding of resource sharing and GC low-pause tuning as mentioned in Section 2 in this part.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Garbage Collection&lt;/b&gt;&lt;br /&gt;
Although automatic garbage collection provided by JVM greatly eases the memory management in Java compared to C/C++, it is unfortunately another big source of non-determinism.&amp;nbsp; &lt;br /&gt;
Although standard JVM provides different GC algorithms such as serial, parallel and concurrent to allow users to make a trade-off between pause and throughput, all algorithms involve a stop-the-world (STW) pause, in which all application threads except NHRT are stopped so that GC can run without interference. This STW behavior is only acceptable for SRT or loose HRT.&lt;br /&gt;
&lt;br /&gt;
Although RTSJ doesn&#39;t define deterministic GC, a RT JVM must provide one in order to support HRT. There are basically two approaches: work-based and time-based.&lt;br /&gt;
Both approaches are aimed to minimizing the effect of long pause by doing incremental collection in a GC cycle. Unfortunately neither can provide HRC guarantee.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.1 Work-Based&lt;/b&gt;&lt;br /&gt;
Because the standard STW GC behavior blankly taxes all application threads, the work-based approach has each thread do a specific amount of incremental GC work proportional to its allocation amount each time it allocates an object. &lt;br /&gt;
However your application is still unpredictable because the GC cost spread-out is often uneven because the allocation is often uneven and the amount of time to do a fixed amount of incremental collection work is variable as shows in Figure 5.1 courtesy of &lt;a href=&quot;http://java.sun.com/developer/technicalArticles/Programming/rt_pt2/&quot;&gt;this resource&lt;/a&gt;:&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD9PXp8s5CWg2V4sWXGSj987UeF3ZDvAarCmYZWyVFyIZ0zHDNx2GUVm1Bp2jwdF6ipnOGGr5QqXUW6ExyKrCFlh8UCpEEIP5A2S7kDYTAQHF2NT6VB8wtHwWmp_74JXpU1is0acJ_-3k/s1600/work-based.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD9PXp8s5CWg2V4sWXGSj987UeF3ZDvAarCmYZWyVFyIZ0zHDNx2GUVm1Bp2jwdF6ipnOGGr5QqXUW6ExyKrCFlh8UCpEEIP5A2S7kDYTAQHF2NT6VB8wtHwWmp_74JXpU1is0acJ_-3k/s1600/work-based.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 5.1 &lt;span class=&quot;dkcaption1&quot;&gt; Risks of Work-Based Garbage Collection&lt;/span&gt;&amp;nbsp; &lt;/span&gt;    &lt;span class=&quot;sp10&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;2.2 Time-Based&lt;/b&gt;&lt;br /&gt;
It schedules a fixed amount of collection time in each GC cycle. &lt;br /&gt;
Although it spreads the GC cost equally through a GC cycle, there is no direct correlation between the allocated collection time and the reclaimed memory, and your application is still unpredictable as shown in Figure 5.2 courtesy of &lt;a href=&quot;http://java.sun.com/developer/technicalArticles/Programming/rt_pt2/&quot;&gt;this resource&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYQh3jlxTEz8BveEDIvVDQGfbr95RwjUQZLRbjNoQ5xS685Wbfue9uvmA528tTJIxZVujYBD1Nxtm0VPA4zuCcEYvG_Oq3Jgrv1ddthYKxQxAECi3b32NFlh9EMOWjbBwqSZ4Tez226og/s1600/time-based-gc.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYQh3jlxTEz8BveEDIvVDQGfbr95RwjUQZLRbjNoQ5xS685Wbfue9uvmA528tTJIxZVujYBD1Nxtm0VPA4zuCcEYvG_Oq3Jgrv1ddthYKxQxAECi3b32NFlh9EMOWjbBwqSZ4Tez226og/s1600/time-based-gc.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 5.2 &lt;span class=&quot;dkcaption1&quot;&gt;Time-Based GC and Undesirable Outcomes&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;2.3 Oracle Java RTS 2&#39;s&lt;/b&gt; &lt;b&gt;Approach&lt;/b&gt;&lt;br /&gt;
Java RTS uses a modified work-based approach called &quot;Henriksson&#39;s GC&quot; or Real-Time GC (RTGC). This RTGC can be configured to run as one or more RTTs that run at a priority lower than critical threads (NHRT and critical RTT) and higher than non-RT threads (JLS) and maybe non-critical threads as well (non-critical RTT) so that critical threads may preempt the RTGC, and RTGC may preempt non-RT threads and non-critical threads to keep up with the application memory allocation rate. This is shown in Figure 5.3 courtesy of &lt;a href=&quot;http://java.sun.com/developer/technicalArticles/Programming/rt_pt2/&quot;&gt;this resource&lt;/a&gt;:&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgszmuZREn2fiau3N_K7UYVSwFxdIuB2FqJ-jWYWV4eW7NKs7oTB61PdTXGFnHvIDNitBAe34XZAqINItG8ef4_-e2E0rUixY8Uwrh-WSeZi9I7vlx7oUDboVht3q1DIdXRt_21zJQzGrA/s1600/javaRTS-+rtgc.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgszmuZREn2fiau3N_K7UYVSwFxdIuB2FqJ-jWYWV4eW7NKs7oTB61PdTXGFnHvIDNitBAe34XZAqINItG8ef4_-e2E0rUixY8Uwrh-WSeZi9I7vlx7oUDboVht3q1DIdXRt_21zJQzGrA/s1600/javaRTS-+rtgc.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 5.3 &lt;span class=&quot;dkcaption1&quot;&gt;Henriksson&#39;s GC&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;The initial RTGC priority is lower than non-critical RTT but is boosted to its configurable &quot;maximum priority&quot; higher than non-critical RTT if remaining memory is close to another configurable &quot;memory threshold&quot;. These two configurable parameters enable you to tune the balance between non-critical threads&#39; deterministic and memory throughput.&lt;br /&gt;
&lt;br /&gt;
Figure 5.3 shows that RTGC ensures HRT only for critical threads that should competes pretty well with C/C++,&amp;nbsp; while trying to offer SRT for non-critical threads that usually can&#39;t compete with C/C++.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.4 IBM WebSphere RT 2&#39;s Approach&lt;/b&gt;&lt;br /&gt;
WebSphere RT&#39;s Metronome is a time-based deterministic GC. It divides a GC cycle into a series of discrete quanta, approximately 0.5ms but no more than 1ms in length, that are devoted to either GC work or application work.&lt;br /&gt;
Even a single GC pause has an upper bound of 1ms, it is not enough because if several quanta were devoted to GC work, the application still experience a longer pause time as we discussed in Part 1. It must also meet another parameter called &quot;utilization&quot; that is the percentage of time quanta allocated to an application in a given window of time continuously sliding over the application&#39;s complete run.&lt;br /&gt;
Figure 5.4 shows a GC cycle divided into multiple 0.5ms time slices preserving the default 70% utilization over a 10ms windows courtesy of &lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-rtj4/index.html&quot;&gt;this resource&lt;/a&gt;:&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOCDHsIeNq6_UeVoEyDL7s4M2paEz-25YlprazPujXouzqrdBGl5D7TcbqAYDVtFt4YWL-fbzvn3aCkQvaVvbDKACMvoqawo6t4h28Dp237u5f-5k6ADsEyPDnhVBMSt-Dwt1ZH74b-24/s1600/metronome-gc.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOCDHsIeNq6_UeVoEyDL7s4M2paEz-25YlprazPujXouzqrdBGl5D7TcbqAYDVtFt4YWL-fbzvn3aCkQvaVvbDKACMvoqawo6t4h28Dp237u5f-5k6ADsEyPDnhVBMSt-Dwt1ZH74b-24/s1600/metronome-gc.gif&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 5.4 Metronome GC &lt;a href=&quot;http://www.blogger.com/post-edit.g?blogID=1684531418775159957&amp;amp;postID=926365637474197247&quot; name=&quot;figure3&quot;&gt; Sliding window utilization&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Compared to Oracle&#39;s RTGC, Metronome provides more determinism to JLT and non-critical RTT while RTGC ensures HRT for critical RTT.&amp;nbsp; Because learning RTT takes time, Metronome is recommended to implement SRT with JLS.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.5 Standard JVM&#39;s Approach&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Both Oracle&#39;s &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html&quot;&gt;Hotspot JVM&lt;/a&gt; and &lt;a href=&quot;http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html&quot;&gt;JRockit&lt;/a&gt; provide so called low-pause concurrent GC that only briefly pauses the application and runs concurrently with &lt;span style=&quot;font-size: small;&quot;&gt;your &lt;/span&gt;application for most of the time. &lt;br /&gt;
Hotspot JVM allows you to specify both a target pause time and throughput while JRockit only allows you to specify a target pause time that seems to be inadequate based on our discussion in Part 1.&lt;br /&gt;
Such a low-pause concurrent  GC can at best provide SRT.&lt;br /&gt;
&lt;br /&gt;
Another very promising SRT implementation is provided by &lt;a href=&quot;http://download.oracle.com/docs/cd/E15289_01/doc.40/e15071/toc.htm&quot;&gt;JRockit Real Time&lt;/a&gt;, which extends the existing mostly concurrent low-pause GC by ensuring the target pause time and limiting the total pause time within a prescribed windows (unfortunately such a windows can&#39;t be configured by users).&lt;br /&gt;
JRockit Real Time GC is more deterministic than the regular JRockit concurrent low-pause GC. Oracle claims it is the industry’s fastest JVM with &lt;a href=&quot;http://www.oracle.com/appserver/docs/jrockit-real-time-datasheet.pdf#search=%22jrockit%22&quot;&gt;its  average response time in microseconds for most well-managed  applications and low, single-digit, millisecond response with a five  nines reliability guarantee.&lt;/a&gt; These numbers are pretty good for SRT even in the financial services industries.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Here is the biggest advantage of tuning GC compared to the new RTJS classes in Section 1: it is transparent to Java SE developers. In other words, it doesn&#39;t need developers to change their existing programming models or adapting to new RTC models.&lt;br /&gt;
&lt;br /&gt;
Finally in this section it is often hard to pick a selection between SRT&amp;nbsp; or loose HRT coded  using C/C++ and SRT coded using Java along with a deterministic  low-pause concurrent GC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Class Loading, Linking, Initializing and Compilation&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;3.1 &lt;/b&gt;&lt;b&gt;Class Loading, Linking, Initializing (LLI) &lt;/b&gt;&lt;br /&gt;
A standard JVM &lt;a href=&quot;http://www.blogger.com/goog_1664021697&quot;&gt;loads, links and initialize&lt;/a&gt;&lt;a href=&quot;http://java.sun.com/docs/books/jvms/second_edition/html/ConstantPool.doc.html&quot;&gt;s&lt;/a&gt; classes on demand; it also unloads classes no longer referenced. Though LLI provides great flexibility on memory and CPU consumptions and the one-time cost can probably be made up if the same class is referenced multiple times, it is still another big source of non-determinism.&lt;br /&gt;
For example class loading usually takes at least tens of milliseconds because it usually involves disk IO. The linking and initializing are also very CPU-intensive.&lt;br /&gt;
&lt;br /&gt;
You can eliminate the LLI jitter by pre-doing LLI in the application warm-up phase (it is defined in Part 3) either by calling the standard &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.lang.Class.forName()&lt;/span&gt; or using RTSJ implementation-specific utilities.&lt;br /&gt;
For example, Oracle&#39;s Java RTS 2 allows you to either specify a list of classes for pre-loading and / or pre-initializing on the command line at JVM startup or use the Initialization-Time-Compilation (ITC) API during runtime (Both Java RTS and WebSphere RT can automatically generate a list of classes that were loaded or initialized by your application&#39;s execution).&lt;br /&gt;
&lt;br /&gt;
Both approaches for eliminating LLI jitter are basically transparent to Java SE developers.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3.2 JIT vs Ahead-of-Time (AOT / ITC) &lt;/b&gt;&lt;br /&gt;
If you used C/C++ static compiler before, you know compiling (optimization included) is very CPU and memory intensive. So modern &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_performance&quot;&gt;JVM JITs&lt;/a&gt; initially interpret Java methods and , for only those methods that execute frequently, later compile to native code. &lt;br /&gt;
Because the dynamic nature of Java makes much important information only available during runtime, JIT can generate even better code than statically compiled language like C/C++. Recompiling (deoptimization), overriding (virtual) method optimization and escape analysis are just three examples.&lt;br /&gt;
So if JIT can carefully balance the compiling time and optimization aggressiveness, the one-time compiling cost will be made up by the multiple later executions of the native code and the average execution time will be equal to or even shorter than the corresponding C/C++ program.&lt;br /&gt;
&lt;br /&gt;
However because the compiling time is up to JVM and there is execution time variation between interpreted code and native code, the dynamic JIT is another big source of non-determinism.&lt;br /&gt;
The only solution to eliminate JIT jitter is to use some kind of static compiling such as AOT in WebSphere RT and ITC in Java RTS. &lt;br /&gt;
&lt;br /&gt;
However AOT/ITC also has some disadvantages.&lt;br /&gt;
Firstly, the platform portability is comprised by AOT. ITC is a bit better due to its initialization-time compiling instead of AOT&#39;s development-time compiling. &lt;br /&gt;
Secondly AOT/ITC-compiled code, though faster than interpreted code, can be much slower than JIT-compiled or C/C++ code because AOT/ITC can only make few conservative optimizations with little information available at hand.&lt;br /&gt;
&lt;br /&gt;
The debate of&amp;nbsp; JIT vs AOT/ITC is still involving. Readers are recommenced to &lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-rtj2/index.html&quot;&gt;this resource&lt;/a&gt; to gain more insight.&amp;nbsp; I personally recommend JIT because you can still achieve SRT and even loose HRT with it. With such fine tunings as warm-up and background JIT compiling, your Java programs can compete toe-to-toe with C/C++ programs.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Timers and Clocks&lt;/b&gt;&lt;br /&gt;
If RTC needs nanosecond resolution and your system can only provide milliseconds at beat, it will cause jitter.&lt;br /&gt;
RTSJ provides new classes &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;javax.realtime.Clock &lt;/span&gt;and &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;javax.realtime.HighResolutionTime &lt;/span&gt;to expose high-resolution clocks in underlying hardware and OS as discussed in Part 2 and 3.&lt;br /&gt;
You should also use the following standard Java methods if you need nanosecond resolution:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; java.lang.Object.wait(long timeout, int nanos);&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; java.lang.Thread .sleep(long millis, int nanos);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
You shouldn&#39;t use standard Java&#39;s &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.util.Date &lt;/span&gt;or &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;java.lang.System.currentTimeMillis()&lt;/span&gt; due to their low resolution and synchronization with the world clock (this synchronization looks like jitter when this world clock is updated). &lt;br /&gt;
&lt;br /&gt;
In summary RTSJ can compete toe-to-toe with C/C++ in most areas for building COTS ERTC applications. The only concern is the learning curve of its functions extensions to standard Java. However the curve is not steep and often necessary for RTC.&lt;br /&gt;
If you had bias against using Java to build RTC systems, hopefully you will have a second thought after this discussion.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/926365637474197247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/commercial-off-shell-enterprise-real.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/926365637474197247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/926365637474197247'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/commercial-off-shell-enterprise-real.html' title='Commercial-Off-The-Shell Enterprise Real Time Computing (COTS ERTC) -- Part 5: Java Requirements'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD9PXp8s5CWg2V4sWXGSj987UeF3ZDvAarCmYZWyVFyIZ0zHDNx2GUVm1Bp2jwdF6ipnOGGr5QqXUW6ExyKrCFlh8UCpEEIP5A2S7kDYTAQHF2NT6VB8wtHwWmp_74JXpU1is0acJ_-3k/s72-c/work-based.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-6216577977326815717</id><published>2010-11-05T15:47:00.003-04:00</published><updated>2012-05-11T22:26:40.592-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gigaspaces"/><category scheme="http://www.blogger.com/atom/ns#" term="Locking"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Replication"/><category scheme="http://www.blogger.com/atom/ns#" term="TimesTen"/><title type='text'>Locking Schemes for Replicated Data Updating</title><content type='html'>Data distribution is commonly used in high-performance computing  (HPC). Basically there are two fundamental data distribution topologies.  One is replication; the other is partition.&lt;br /&gt;
&lt;br /&gt;
With data partition, you can achieve parallel processing of a large amount of data. &lt;br /&gt;
With data replication, you can achieve load balancing and high availability(HA).&lt;br /&gt;
&lt;br /&gt;
Even  though a data item has several replicas in a data replication  environment, it should have some degree of transparency and appear to  only one virtual global  item to end users.&lt;br /&gt;
The biggest  challenge using data replication is the proper trade-off between data  coherence and performance based on your business requirements.&lt;br /&gt;
&lt;br /&gt;
Some kind of locking scheme is usually employed in order to achieve data coherence.&lt;br /&gt;
I  will list some replication and locking schemes I have experienced using  Oracle10g advanced replication, Oracle10g RAC, Oracle10g TimesTen and  Gigaspaces XAP 7.1.&lt;br /&gt;
&lt;br /&gt;
Before we go to details, let&#39;s suppose  you have a distributed airline ticketing system (DATS hereafter) which  has two databases: one is in NY and the other is in LA. Depending your  replication scheme, data can be updated either at one site only and  replicated to the other or at both sites and replicated to the each  other.&lt;br /&gt;
Further suppose the following actions take place in time sequence:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;There  is only one ticket left in the database. Because both local database  replicas are synchronized at this time, the only ticket can be taken by  either NY or LA;&lt;/li&gt;
&lt;li&gt;A NY customer bought this ticket. This  action was updated in the local NY database and will be replicated to LA  somehow depending on the replication scheme;&lt;/li&gt;
&lt;li&gt;Depending on your  replication scheme, the LA database can show the same ticket either  still available or already taken by a NY customer. If the same ticket  still appears available to the LA database, it will be sold to a LA  customer. This will create an oversold situation.&lt;/li&gt;
&lt;/ol&gt;&lt;b&gt;1. Synchronous Replication Using Distributed Locks and Local Transactions&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Oracle  RAC (formerly OPS in version 8i and prior) allows the same physical  database to be accessed at multiple instance sites. In order to allow  users to read and write any data at any time at any instance site,  Oracle RAC uses &quot;Cache Fusion&quot; to ensure data coherence.&lt;br /&gt;
&lt;br /&gt;
&quot;Cache  Fusion&quot; basically uses synchronous replication with a distributed  locking manager (DLM). DLM acts as a distributed lock (DL) coordinator  among other functions so that the same resource - e.g. a table row - can  only be granted to one instance site for changing at a time while other  sites have to wait.&lt;br /&gt;
&lt;br /&gt;
DLM also act as a global resource  directory. For example, when instance site 1 updated a row, it doesn&#39;t  need to actively push the new version of data to all other instance  sites.&amp;nbsp; When instance site 2 later requests the same row, DLM can tell  it to get the latest version from instance site 1.&lt;br /&gt;
Also instance  site 1 doesn&#39;t need to use any distributed transaction thanks to DLM and  the fact that there is still only one physical database (so far I  haven&#39;t seen any synchronous replication that use both distributed locks  and distributed transactions).&lt;br /&gt;
&lt;br /&gt;
Benefits include very high degree of data coherence and load balance for both reads and writes.&lt;br /&gt;
Drawback include poor write performance and requirements of high-speed interconnect due to distributed locks.&lt;br /&gt;
Distributed locks usually consist of quite a few daemon processes and  data structures at each site whose coordination performs poorly in a  low-speed interconnect such as LAN and WAN. For Oracle &quot;Cache Fusion&quot;,  distributed locks are implemented with  &lt;a href=&quot;http://www.blogger.com/post-edit.g?blogID=1684531418775159957&amp;amp;postID=6216577977326815717&quot; id=&quot;sthref75&quot; name=&quot;sthref75&quot;&gt;&lt;/a&gt;Global Cache Service (GCS), &lt;a href=&quot;http://www.blogger.com/post-edit.g?blogID=1684531418775159957&amp;amp;postID=6216577977326815717&quot; id=&quot;sthref76&quot; name=&quot;sthref76&quot;&gt;&lt;/a&gt;Global Enqueue Service (GES) and Global Resource Directory (GRD).&lt;br /&gt;
&lt;br /&gt;
If  we apply this scheme to DATS assuming the poor interconnect performance  is tolerable, step 3 has to wait for the DL to be release by step 2.  When step 3 gets the DL, the same ticket will show already taken by step  2.&lt;br /&gt;
(In order to have good performance, most multi-tiered  applications use optimistic locking that can create lost update problem.  For example if we use optimistic locking in both databases in DATS, the  application tier in step3 can first read the LA database before step 2  and then sell the same ticket to a LA customer after step 2.&lt;br /&gt;
The  application must use &quot;optimistic locking with version checking&quot; to fix  this issue. One version checking is just a version number that increases  whenever there is any corresponding data change. &lt;br /&gt;
Suppose the  version is 0 at step 1. Step 2 updates it to 1. The version found by the  application tier read at step 3 is also 0. But when the application  tier tries to sell the same ticket, it will fail because it will find  the version has changed to 1 from its cached value 0.&lt;br /&gt;
All our arguments assume &quot;optimistic locking with version checking&quot; .)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Synchronous Replication Using Local Locks and Distributed Transactions&lt;/b&gt;&lt;br /&gt;
Oracle&#39;s multimaster replication (also called peer-to-peer or n-way) has two data coherence protocols.&lt;br /&gt;
One  of them is synchronous replication that applies any changes or executes  any replicated procedures at all sites participating in the replication  environment as part of a single distributed transaction. If the DML  statement or procedure fails at any site, then the entire transaction  rolls back.&lt;br /&gt;
&lt;br /&gt;
The distributed transaction ensures  data consistency at all sites in real-time. However it doesn&#39;t use any  distributed locking. Instead it only uses local locks in the participant  local transaction.&lt;br /&gt;
This is the case when an application performs a  synchronous update to a replicated table. Oracle first locks the local  row and then uses an after row trigger to lock the corresponding remote  row. Oracle releases the locks when the transaction commits at each  site.&lt;br /&gt;
&lt;br /&gt;
Benefits include high degree of data coherence,  simple implementation, easy administration and fit to both high-speed  interconnect and low-speed LAN and WAN (implementing distributed locks  in low-speed LAN and WAN is much harder than using lock locks in such  environments).&lt;br /&gt;
Drawbacks include possible deadlock due to  temporal behavior of local and remote locking, high availability  requirements on network and poor write performance.&lt;br /&gt;
&lt;br /&gt;
If  we apply this scheme to DATS assuming the poor interconnect  performance is tolerable, step 3 has to wait for step 2 to release the  local and remote locks. When step 3 gets the locks, the same ticket will  show already  taken by step 2.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Synchronous Replication Using Local Locks and Local Transactions&lt;/b&gt;&lt;br /&gt;
TimesTen&#39;s unidirectional active-standby pair configuration only uses so called &quot;return twosafe &lt;br /&gt;
replication&quot;.  It provides fully synchronous replication between the master (the  active site) and subscriber (the standby site).&lt;br /&gt;
No distributed  transaction or distributed lock is involved. Instead only local  transaction and local lock are used. Specifically the local transaction  on the subscriber is first committed before on the master. If the  subscriber can&#39;t commit, the master will not commit either.&lt;br /&gt;
At any  time, only the active site can be updated that greatly simplifies data  updating complexity (otherwise using local locks and local transactions  will be insufficient) and ensures fast fail-over to the standby site in  case of the active site failure.&lt;br /&gt;
&lt;br /&gt;
This scheme has similar benefits and drawbacks to the previous scheme in section 2. &lt;br /&gt;
However  its performance is even better thanks to the avoiding of two-phase  commit (2PC) required in a distributed transaction. It also eliminates  the deadlock because only the active site allows updates. &lt;br /&gt;
Although  the standby site seems to be a waste of capacity, you can collocate it  with another active site as shown in figure 1 (by another I  mean it has different data from the collocated standby site).&lt;br /&gt;
This  scheme has lower degree of data coherence due to the inconsistency  resulted from master commit failure even the subscriber has successfully  committed (the root cause is it doesn&#39;t use distributed transactions as  you can guess. But you should also know that data inconsistency can  still result from the second &quot;commit&quot; phase failure in a 2PC process). &lt;br /&gt;
&lt;br /&gt;
TimesTen&#39;s practice in this scenario is consistent with its  configurations for high performance in other areas such as asynchronous  logging and data caching with write-behind policy,&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Gigaspaces  IMDG has a very similar topology called primary-backup replication. The  only difference is it uses distributed transactions instead of local  transactions only. So it has higher degree of data coherence than  TimesTen.&lt;br /&gt;
Another advantage is the fail-over happens in Gigaspaces  IMDG transparently to end users while TimesTen customers need to resort  to some third-part cluster manager or some custom software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If we apply this scheme to DATS,  either NY or LA site will be the active site and the other standby site  has to connect to the active for data updating (in reality,  active-standby often is used with a high-speed interconnect). The local  lock in the active site prevents the oversold situation.&lt;br /&gt;
&lt;br /&gt;
This  scheme along with data partitioning as shown in figure 1 is strongly  recommend compared to the two previous synchronous schemes if it can  your business requirements.&lt;br /&gt;
Although the two previous synchronous  schemes allow updating anywhere, updating the same resource entails  costly lock coordination over network. Scalable updating is usually  achieved by data partitioning. &lt;br /&gt;
Although the two previous  synchronous schemes allow distributed and scalable reads, you can  fine-tune your partitions to allow more current reads. &lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL2rgQLeh6fyfIE-rncDqhVG8CYLDsy62DDk44NsKsvvilnNaDKnYyV9s56bMSg3OM8FKGN9DI7zkTmuddmdgCrdfuEvG8EGrxLFaLSE2GRa8TGkN8sPvQYdb1rCTwCTuSfX3XsTWGhg8/s1600/primary-backup.JPG&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL2rgQLeh6fyfIE-rncDqhVG8CYLDsy62DDk44NsKsvvilnNaDKnYyV9s56bMSg3OM8FKGN9DI7zkTmuddmdgCrdfuEvG8EGrxLFaLSE2GRa8TGkN8sPvQYdb1rCTwCTuSfX3XsTWGhg8/s1600/primary-backup.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 1: The Primary-Backup Partition in Gigaspaces&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Asynchronous Replication with Update Anywhere&lt;/b&gt;&lt;br /&gt;
Another  data coherence protocol in Oracle&#39;s multimaster replication is  asynchronous replication that allows users to update data at any  participant site.&lt;br /&gt;
This scheme is also used in Oracle&#39;s  updatable materialized view replication and TimesTen&#39;s bidirectional  master-subscriber replication for general distributed workloads.&lt;br /&gt;
&lt;br /&gt;
With  this scheme the data changes at one site will be queued for propagation  to other sites and committed locally. The queued changes will be  propagated in batches in a separate transaction. So it doesn&#39;t use any  distributed lock or distributed transaction. Instead it only use local  locks required in the corresponding local transaction.&lt;br /&gt;
&lt;br /&gt;
Benefits  include great read and write performance, easy implementation, simple  administration and fit to low-speed interconnection such as LAN and WAN  and disconnected updating.&lt;br /&gt;
Drawbacks include limited degree of data coherence depending on data refresh frequency, and possible data change conflicts.&lt;br /&gt;
Because  there is no distributed lock or distributed transaction involved, a  replication conflict occurs if two transactions originating from  different sites update the same row at nearly the same time (when the  queued changes are propagated to the other site, the other site will  have two versions of data changes. So which one should take place?). &lt;br /&gt;
&lt;br /&gt;
A  conflict resolution method must be provided to resolve the data  inconsistency. Both Oracle and TimesTen have a prebuilt &quot;latest  timestamp&quot; resolution method that makes the change with the latest  timestamp the winner. Oracle also allows you to customize a resolution  method based on your business requirements.&lt;br /&gt;
&lt;br /&gt;
This  scheme can&#39;t be applied to DATS if oversold situations are not allowed  because the changes at NY and LA sites can be committed independently in  two different transactions that result in the same ticket being sold to  two customers.&lt;br /&gt;
If occasional oversold situations are allowed, the  NY and LA sites can sell tickets at different times thanks to the three  hours time zone difference. If a replication conflict does occur,  relevant information should be recorded in the database based on which  your front-end application takes proper actions (in reality a  reservation system like DATS doesn&#39;t use this scheme).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; 5. Asynchronous Replication with Update on Master Site only&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This scheme is used in Oracle&#39;s read-only materialized view replication, TimesTen&#39;s unidirectional  master-subscriber replication and Gigaspaces IMDG&#39;s master-local replication.&lt;br /&gt;
&lt;br /&gt;
This  scheme basically has similar benefits and drawbacks to the previous  scheme in section 4. However because it only allows updates at the  master, it eliminates the notorious replication conflicts, which most of  the time proves to be a very sound design in an asynchronous  replication environment.&lt;br /&gt;
&lt;br /&gt;
If we apply this scheme to DATS  and suppose NY is the master site (or a third site is the master), NY  has to wait if LA first gets the local lock at the master site. The  local lock in the master site prevents the oversold situation.&lt;br /&gt;
&lt;br /&gt;
Life  is much easier using Gigaspaces IMDG&#39;s master-local topology as shown  in figure 2 because it automatically delegates your local cache updating  to the master which propagates the same updating to other local caches.  Gigaspaces IMDG also supports optimistic locking with versioning.&lt;br /&gt;
You must do both by yourself if you use Oracle&#39;s read-only materialized view replication and TimesTen&#39;s unidirectional  master-subscriber replication. &lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNYqKYhr0yljl-WbzEjU757zmjQiFL31qz_5kTO9ZFyc8Wmt7qaV1jTpzdSYQzdf4mUl-LNRTd48wVuDZapuXMrynYtu8jtmdDyP_yDTlgHr1GuOfgwScOIZbcNQbiQw4e1kIJcXUBzwo/s1600/master-local.JPG&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNYqKYhr0yljl-WbzEjU757zmjQiFL31qz_5kTO9ZFyc8Wmt7qaV1jTpzdSYQzdf4mUl-LNRTd48wVuDZapuXMrynYtu8jtmdDyP_yDTlgHr1GuOfgwScOIZbcNQbiQw4e1kIJcXUBzwo/s1600/master-local.JPG&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 2: Gigaspaces Master-Local Topology where Master can be Figure 1&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/6216577977326815717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/locking-schemes-for-replicated-data.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/6216577977326815717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/6216577977326815717'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/locking-schemes-for-replicated-data.html' title='Locking Schemes for Replicated Data Updating'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL2rgQLeh6fyfIE-rncDqhVG8CYLDsy62DDk44NsKsvvilnNaDKnYyV9s56bMSg3OM8FKGN9DI7zkTmuddmdgCrdfuEvG8EGrxLFaLSE2GRa8TGkN8sPvQYdb1rCTwCTuSfX3XsTWGhg8/s72-c/primary-backup.JPG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-8043171402347170442</id><published>2010-11-03T00:08:00.007-04:00</published><updated>2012-05-11T22:24:19.181-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C99"/><title type='text'>Duplicate Global Variable Definitions in C?</title><content type='html'>If you are still a novel C developer, a common, however bad, practice of using a global variable is shown as follows:&lt;br /&gt;
&lt;div style=&quot;background-color: black;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;/* global.h */&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;int globalInt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: white; color: blue;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;/* file1.c */&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;#include &quot;global.h&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;void foo() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;  globalInt = 1;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;/* file2.c */&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;#include &quot;global.h&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;#include &quot;stdio.h&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;void bar() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; printf(&quot;the globalInt is %d&quot;, globalInt);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;}&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Neither Visual C++ studio 2008 nor GCC 4 has any complaint compiling and linking the program as C.&lt;br /&gt;
&lt;br /&gt;
However you will get &quot;duplicate definition&quot; error if you try to link the same program as C++ either using VC++ or GCC.&lt;br /&gt;
&lt;br /&gt;
After I made some researches and found the reason, I feel embarrassed because I have already been though C was just too easy.&lt;br /&gt;
&lt;br /&gt;
In order to know the reason, you need to know the variable declaration, variable definition, and tentative definition and &quot;multiple external definitions&quot; in C99.&lt;br /&gt;
&lt;br /&gt;
When you &lt;a href=&quot;http://en.wikipedia.org/wiki/External_variable&quot;&gt;&lt;b&gt;define a variable&lt;/b&gt;&lt;/a&gt;, you are telling the compiler to allocate  memory for that variable, and possibly also to initialize its contents  to some value.&lt;br /&gt;
For example &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;int i = 100;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
When you &lt;a href=&quot;http://en.wikipedia.org/wiki/External_variable&quot;&gt;&lt;b&gt;declare a variable&lt;/b&gt;&lt;/a&gt;, you are telling the compiler that the  variable was defined elsewhere. You are just telling the compiler that a  variable by that name and type exists, but the compiler should not  allocate memory for it since it is done somewhere else.&lt;br /&gt;
For example &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;extern int i;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Here are the two important rules you have probably already known:&lt;br /&gt;
&lt;b&gt;A variable must be defined once in one of the modules of the program. If there is no definition or more than one, an error is produced, possibly in the linking stage.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;A variable may be declared many times, as long as the declarations are consistent with each other and with the definition. It may be declared in many modules, including the module where it was defined, and even many times in the same module. But it is usually pointless to declare it more than once in a module.&lt;/b&gt;&lt;br /&gt;
Since the &quot;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;globalInt&lt;/span&gt;&quot; in our example is outside of any function, it has the &quot;extern&quot; linkage. so is the &quot;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;int globalInt&lt;/span&gt;&quot; a definition or declaration?&lt;br /&gt;
Based on &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf&quot;&gt;C99&lt;/a&gt;, it is called &quot;&lt;b&gt;tentative definition&lt;/b&gt;&quot; in Section 6.9.2 as stated below:&lt;br /&gt;
&lt;br /&gt;
&lt;i style=&quot;color: blue;&quot;&gt;A declaration of an identifier for an object that has file scope without an initializer, and without a storage-class specifier or with the storage-class specifier static, constitutes a tentative definition.If a translation unit contains one or more tentative definitions for an identifier, and the translation unit contains no external definition for that identifier, then the behavior is exactly as if the translation unit contains a file scope declaration of that identifier, with the composite type as of the end of the translation unit, with an initializer equal to 0.&lt;/i&gt;&lt;br /&gt;
Based on the above C99 standard, both file1.c and file2.c should have the following definition after being compiled:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;int globalInt = 0;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So if both VC++ and GCC strictly followed the C99 standard, the linking step should have failed due to duplicate variable definition.&lt;br /&gt;
However C99 does have an Annex J.5.11. as follows:&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;&lt;b&gt;&lt;i&gt;Multiple external definitions&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;i&gt;&lt;span style=&quot;color: blue;&quot;&gt;There may be more than one external definition for the identifier of an object, with or&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; without the explicit use of the keyword extern; if the definitions disagree, or more than&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt; one is initialized, the behavior is undefined (6.9.2).&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
So obviously both VC++ and GCC allow consistent multiple external definitions by extending the &quot;tentative definition&quot; to the entire program scope from the original file scope.&lt;br /&gt;
&lt;br /&gt;
Now the last puzzle why C++ complained.&lt;br /&gt;
Because C++ treats C99 &quot;tentative definition&quot; as normal variable definition, you of course got the variable duplicate error.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/8043171402347170442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/duplicate-global-variable-definitions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8043171402347170442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/8043171402347170442'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/duplicate-global-variable-definitions.html' title='Duplicate Global Variable Definitions in C?'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1684531418775159957.post-41271013871888951</id><published>2010-11-02T20:50:00.003-04:00</published><updated>2012-05-11T22:23:36.398-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Structure"/><title type='text'>How to effectively Manage Floating-Point Keys in C++ Map (or Set)?</title><content type='html'>Because computers can&#39;t accurately store floating-point values as you know, you should try to avoid equality comparison between them or use some approach like &quot;relative error&quot; as mentioned in &lt;a href=&quot;http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm&quot;&gt;this resource&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I have a table of data where keys and mapped values are both floats. Although I can provide my own Compare logic using the above &quot;relative error&quot;,&amp;nbsp; this Compare template parameter is only used for &quot;strict weak ordering&quot;. In other words, it only tells whether two floating keys in my case have a &quot;less than&quot; (&amp;lt;) ordering so that the &lt;a href=&quot;http://www.cplusplus.com/reference/stl/map/&quot;&gt;Map&lt;/a&gt; can order keys in acceding order.&lt;br /&gt;
&lt;br /&gt;
For example if Compare says the predicate of &quot;float1 &amp;lt; float2&quot; is false, it either means float1 = float2 or float1 &amp;gt; float2.&lt;br /&gt;
But the C++ Map doesn&#39;t allow you to customize either an equal or a greater than logic. This is especially troubling when you want to use Map&#39;s find() method based on floating-point values. In this case, the Map will use the computer&#39;s intrinsic equal(=) comparison logic, which is not reliable for floating-point value&#39; comparison as you know.&lt;br /&gt;
&lt;br /&gt;
Fortunately in my case I know the maximal precision and scale for all my floating keys. So I first safely mapped my floating key to integers and then saved the corresponding integer keys into the map.</content><link rel='replies' type='application/atom+xml' href='http://yongjun-jiao.blogspot.com/feeds/41271013871888951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/how-to-effectively-manage-floating.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/41271013871888951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1684531418775159957/posts/default/41271013871888951'/><link rel='alternate' type='text/html' href='http://yongjun-jiao.blogspot.com/2010/11/how-to-effectively-manage-floating.html' title='How to effectively Manage Floating-Point Keys in C++ Map (or Set)?'/><author><name>Yong Jiao</name><uri>http://www.blogger.com/profile/01698520020370722842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE38nRnmKnYy597YMNXPfKecH0mX033dD9TpBupxVQo_7XLH8ObgTsFR1LLeyZfVzx_j0qI_JCsXfA87wnaLvULSYUEOBIC9SP6yGRvGJa-iAgcsavpUpH_-3WFv9g3QM/s1600/*'/></author><thr:total>0</thr:total></entry></feed>