This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/accumulo-website.git


The following commit(s) were added to refs/heads/asf-staging by this push:
     new 4935fed  Automatic Site Publish by Buildbot
4935fed is described below

commit 4935fed7a581dd65bb6c4e68b53b6ae94f4c524a
Author: buildbot <us...@infra.apache.org>
AuthorDate: Wed Feb 26 22:25:18 2020 +0000

    Automatic Site Publish by Buildbot
---
 .../blog/2020/02/26/accumulo-spark-connector.html  | 433 +++++++++++++
 output/css/accumulo.css                            |   2 +
 output/css/accumulo.css.map                        |   4 +-
 output/feed.xml                                    | 305 ++++++++-
 output/images/blog/202002_masc/architecture.png    | Bin 0 -> 86251 bytes
 output/images/blog/202002_masc/architecture.svg    | 713 +++++++++++++++++++++
 output/images/blog/202002_masc/runtime.png         | Bin 0 -> 37732 bytes
 .../blog/202002_masc/sparkml_vs_mleap_accumulo.png | Bin 0 -> 20964 bytes
 output/index.html                                  |  14 +-
 output/news/index.html                             |  13 +-
 output/search_data.json                            |   8 +
 11 files changed, 1450 insertions(+), 42 deletions(-)

diff --git a/output/blog/2020/02/26/accumulo-spark-connector.html 
b/output/blog/2020/02/26/accumulo-spark-connector.html
new file mode 100644
index 0000000..6131c21
--- /dev/null
+++ b/output/blog/2020/02/26/accumulo-spark-connector.html
@@ -0,0 +1,433 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<link 
href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/paper/bootstrap.min.css"; 
rel="stylesheet" 
integrity="sha384-awusxf8AUojygHf2+joICySzB780jVvQaVCAt1clU3QsyAitLGul28Qxb2r1e5g+"
 crossorigin="anonymous">
+<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+<link rel="stylesheet" type="text/css" 
href="https://cdn.datatables.net/v/bs/jq-2.2.3/dt-1.10.12/datatables.min.css";>
+<link href="/css/accumulo.css" rel="stylesheet" type="text/css">
+
+<title>Microsoft MASC, an Apache Spark connector for Apache Accumulo</title>
+
+<script 
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"; 
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" 
crossorigin="anonymous"></script>
+<script 
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"; 
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
 crossorigin="anonymous"></script>
+<script type="text/javascript" 
src="https://cdn.datatables.net/v/bs/jq-2.2.3/dt-1.10.12/datatables.min.js";></script>
+<script>
+  // show location of canonical site if not currently on the canonical site
+  $(function() {
+    var host = window.location.host;
+    if (typeof host !== 'undefined' && host !== 'accumulo.apache.org') {
+      $('#non-canonical').show();
+    }
+  });
+
+  $(function() {
+    // decorate section headers with anchors
+    return $("h2, h3, h4, h5, h6").each(function(i, el) {
+      var $el, icon, id;
+      $el = $(el);
+      id = $el.attr('id');
+      icon = '<i class="fa fa-link"></i>';
+      if (id) {
+        return $el.append($("<a />").addClass("header-link").attr("href", "#" 
+ id).html(icon));
+      }
+    });
+  });
+
+  // fix sidebar width in documentation
+  $(function() {
+    var $affixElement = $('div[data-spy="affix"]');
+    $affixElement.width($affixElement.parent().width());
+  });
+</script>
+
+</head>
+<body style="padding-top: 100px">
+
+  <nav class="navbar navbar-default navbar-fixed-top">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target="#navbar-items">
+        <span class="sr-only">Toggle navigation</span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a href="/"><img id="nav-logo" alt="Apache Accumulo" 
class="img-responsive" src="/images/accumulo-logo.png" width="200"
+        /></a>
+    </div>
+    <div class="collapse navbar-collapse" id="navbar-items">
+      <ul class="nav navbar-nav">
+        <li class="nav-link"><a href="/downloads">Download</a></li>
+        <li class="nav-link"><a href="/tour">Tour</a></li>
+        <li class="dropdown">
+          <a class="dropdown-toggle" data-toggle="dropdown" 
href="#">Releases<span class="caret"></span></a>
+          <ul class="dropdown-menu">
+            <li><a href="/release/accumulo-2.0.0/">2.0.0 (Latest)</a></li>
+            <li><a href="/release/accumulo-1.9.3/">1.9.3</a></li>
+            <li><a href="/release/">Archive</a></li>
+          </ul>
+        </li>
+        <li class="dropdown">
+          <a class="dropdown-toggle" data-toggle="dropdown" 
href="#">Documentation<span class="caret"></span></a>
+          <ul class="dropdown-menu">
+            <li><a href="/docs/2.x">User Manual (2.x)</a></li>
+            <li><a href="/docs/2.x/apidocs">Javadocs (2.0)</a></li>
+            <li><a href="/quickstart-1.x">Quickstart (1.x)</a></li>
+            <li><a href="/accumulo2-maven-plugin">Accumulo Maven 
Plugin</a></li>
+            <li><a href="/1.9/accumulo_user_manual.html">User Manual 
(1.9)</a></li>
+            <li><a href="/1.9/apidocs">Javadocs (1.9)</a></li>
+            <li><a href="/external-docs">External Docs</a></li>
+            <li><a href="/docs-archive/">Archive</a></li>
+          </ul>
+        </li>
+        <li class="dropdown">
+          <a class="dropdown-toggle" data-toggle="dropdown" 
href="#">Community<span class="caret"></span></a>
+          <ul class="dropdown-menu">
+            <li><a href="/contact-us">Contact Us</a></li>
+            <li><a href="/how-to-contribute">How To Contribute</a></li>
+            <li><a href="/people">People</a></li>
+            <li><a href="/related-projects">Related Projects</a></li>
+          </ul>
+        </li>
+        <li class="nav-link"><a href="/search">Search</a></li>
+      </ul>
+      <ul class="nav navbar-nav navbar-right">
+        <li class="dropdown">
+          <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img 
alt="Apache Software Foundation" 
src="https://www.apache.org/foundation/press/kit/feather.svg"; width="15"/><span 
class="caret"></span></a>
+          <ul class="dropdown-menu">
+            <li><a href="https://www.apache.org";>Apache Homepage <i class="fa 
fa-external-link"></i></a></li>
+            <li><a href="https://www.apache.org/licenses/";>License <i 
class="fa fa-external-link"></i></a></li>
+            <li><a 
href="https://www.apache.org/foundation/sponsorship";>Sponsorship <i class="fa 
fa-external-link"></i></a></li>
+            <li><a href="https://www.apache.org/security";>Security <i 
class="fa fa-external-link"></i></a></li>
+            <li><a href="https://www.apache.org/foundation/thanks";>Thanks <i 
class="fa fa-external-link"></i></a></li>
+            <li><a 
href="https://www.apache.org/foundation/policies/conduct";>Code of Conduct <i 
class="fa fa-external-link"></i></a></li>
+            <li><a 
href="https://www.apache.org/events/current-event.html";>Current Event <i 
class="fa fa-external-link"></i></a></li>
+          </ul>
+        </li>
+      </ul>
+    </div>
+  </div>
+</nav>
+
+
+  <div class="container">
+    <div class="row">
+      <div class="col-md-12">
+
+        <div id="non-canonical" style="display: none; background-color: 
#F0E68C; padding-left: 1em;">
+          Visit the official site at: <a 
href="https://accumulo.apache.org";>https://accumulo.apache.org</a>
+        </div>
+        <div id="content">
+          
+          <h1 class="title">Microsoft MASC, an Apache Spark connector for 
Apache Accumulo</h1>
+          
+          <p>
+<b>Author: </b>&nbsp;&nbsp;Markus Cozowicz, Scott Graham<br>
+<b>Date: </b>&nbsp;&nbsp;26 Feb 2020<br>
+
+</p>
+
+<h1 id="overview">Overview</h1>
+<p><a href="https://github.com/microsoft/masc";>MASC</a> provides an Apache 
Spark native connector for Apache Accumulo to integrate the rich Spark machine 
learning eco-system with the scalable and secure data storage capabilities of 
Accumulo.</p>
+
+<h2 id="major-features">Major Features</h2>
+<ul>
+  <li>Simplified Spark DataFrame read/write to Accumulo using DataSource v2 
API</li>
+  <li>Speedup of 2-5x over existing approaches for pulling key-value data into 
DataFrame format</li>
+  <li>Scala and Python support without overhead for moving between 
languages</li>
+  <li>Process streaming data from Accumulo without loading it all into Spark 
memory</li>
+  <li>Push down filtering with a flexible expression language (<a 
href="http://juel.sourceforge.net/";>JUEL</a>): user can define logical 
operators and comparisons to reduce the amount of data returned from 
Accumulo</li>
+  <li>Column pruning based on selected fields transparently reduces the amount 
of data returned from Accumulo</li>
+  <li>Server side inference: ML model inference can run on the Accumulo nodes 
using MLeap to increase the scalability of AI solutions as well as keeping data 
in Accumulo</li>
+</ul>
+
+<h2 id="use-cases">Use-cases</h2>
+<p>MASC is advantageous in many use-cases, below we list a few.</p>
+
+<p><strong>Scenario 1</strong>: A data analyst needs to execute model 
inference on large amount of data in Accumulo.<br />
+<strong>Benefit</strong>: Instead of transferring all the data to a large 
Spark cluster to score using a Spark model, the connector exports and runs the 
model on the Accumulo cluster. This reduces the need for a large Spark cluster 
as well as the amount of data transferred between systems, and can improve 
inference speeds (&gt;2x speedups observed).</p>
+
+<p><strong>Scenario 2</strong>: A data scientist needs to train a Spark model 
on a large amount of data in Accumulo.<br />
+<strong>Benefit</strong>: Instead of pulling all the data into a large Spark 
cluster and restructuring the format to use Spark ML Lib tools, the connector 
streams data into Spark as a DataFrame reducing time to train and Spark cluster 
size / memory requirements.</p>
+
+<p><strong>Scenario 3</strong>: A data analyst needs to perform ad hoc 
analysis on large amounts of data stored in Accumulo.<br />
+<strong>Benefit</strong>: Instead of pulling all the data into a large Spark 
cluster, the connector prunes rows and columns using pushdown filtering with a 
flexible expression language.</p>
+
+<h1 id="architecture">Architecture</h1>
+<p>The Accumulo-Spark connector is composed of two components:</p>
+
+<ul>
+  <li>Accumulo server-side iterator performs
+    <ul>
+      <li>column pruning</li>
+      <li>row-based filtering</li>
+      <li><a href="https://github.com/combust/mleap";>MLeap</a> ML model 
inference and</li>
+      <li>row assembly using <a href="https://avro.apache.org/";>Apache 
AVRO</a></li>
+    </ul>
+  </li>
+  <li>Spark DataSource V2
+    <ul>
+      <li>determines the number of Spark tasks based on available Accumulo 
table splits</li>
+      <li>translates Spark filter conditions into a <a 
href="http://juel.sourceforge.net/";>JUEL</a> expression</li>
+      <li>configures the Accumulo iterator</li>
+      <li>deserializes the AVRO payload</li>
+    </ul>
+  </li>
+</ul>
+
+<p><img src="/images/blog/202002_masc/architecture.svg" alt="Architecture" 
title="MASC Architecture Diagram" /></p>
+
+<h1 id="usage">Usage</h1>
+<p>More detailed documentation on installation and use is available in the 
+<a 
href="https://github.com/microsoft/masc/blob/master/connector/README.md";>Connector
 documentation</a></p>
+
+<h2 id="dependencies">Dependencies</h2>
+<ul>
+  <li>Java 8</li>
+  <li>Spark 2.4.3+</li>
+  <li>Accumulo 2.0.0+</li>
+</ul>
+
+<p>JARs available on Maven Central Repository:</p>
+<ul>
+  <li>
+    <p><a 
href="https://search.maven.org/search?q=g:%22com.microsoft.masc%22%20AND%20a:%22microsoft-accumulo-spark-datasource%22";><img
 
src="https://img.shields.io/maven-central/v/com.microsoft.masc/microsoft-accumulo-spark-datasource.svg?label=Maven%20Central";
 alt="Maven Central" /> Spark DataSource</a></p>
+  </li>
+  <li>
+    <p><a 
href="https://search.maven.org/search?q=g:%22com.microsoft.masc%22%20AND%20a:%22microsoft-accumulo-spark-iterator%22";><img
 
src="https://img.shields.io/maven-central/v/com.microsoft.masc/microsoft-accumulo-spark-iterator.svg?label=Maven%20Central";
 alt="Maven Central" /> Accumulo Iterator</a> - Backend for Spark DataSource</p>
+  </li>
+</ul>
+
+<h2 id="example-use">Example use</h2>
+<div class="language-python highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="kn">from</span> <span 
class="nn">configparser</span> <span class="kn">import</span> <span 
class="n">ConfigParser</span>
+<span class="kn">from</span> <span class="nn">pyspark.sql</span> <span 
class="kn">import</span> <span class="n">types</span> <span class="k">as</span> 
<span class="n">T</span>
+
+<span class="k">def</span> <span class="nf">get_properties</span><span 
class="p">(</span><span class="n">properties_file</span><span 
class="p">):</span>
+    <span class="s">"""Read Accumulo client properties file"""</span>
+    <span class="n">config</span> <span class="o">=</span> <span 
class="n">ConfigParser</span><span class="p">()</span>
+    <span class="k">with</span> <span class="nb">open</span><span 
class="p">(</span><span class="n">properties_file</span><span 
class="p">)</span> <span class="k">as</span> <span class="n">stream</span><span 
class="p">:</span>
+        <span class="n">config</span><span class="o">.</span><span 
class="n">read_string</span><span class="p">(</span><span 
class="s">"[top]</span><span class="se">\n</span><span class="s">"</span> <span 
class="o">+</span> <span class="n">stream</span><span class="o">.</span><span 
class="n">read</span><span class="p">())</span>
+    <span class="k">return</span> <span class="nb">dict</span><span 
class="p">(</span><span class="n">config</span><span class="p">[</span><span 
class="s">'top'</span><span class="p">])</span>
+
+<span class="n">properties</span> <span class="o">=</span> <span 
class="n">get_properties</span><span class="p">(</span><span 
class="s">'/opt/muchos/install/accumulo-2.0.0/conf/accumulo-client.properties'</span><span
 class="p">)</span>
+<span class="n">properties</span><span class="p">[</span><span 
class="s">'table'</span><span class="p">]</span> <span class="o">=</span> <span 
class="s">'demo_table'</span> <span class="c1"># Define Accumulo table where 
data will be written
+</span><span class="n">properties</span><span class="p">[</span><span 
class="s">'rowkey'</span><span class="p">]</span> <span class="o">=</span> 
<span class="s">'id'</span>        <span class="c1"># Identify column to use as 
the key for Accumulo rows
+</span>
+<span class="c1"># define the schema
+</span><span class="n">schema</span> <span class="o">=</span> <span 
class="n">T</span><span class="o">.</span><span 
class="n">StructType</span><span class="p">([</span>
+  <span class="n">T</span><span class="o">.</span><span 
class="n">StructField</span><span class="p">(</span><span 
class="s">"sentiment"</span><span class="p">,</span> <span 
class="n">T</span><span class="o">.</span><span 
class="n">IntegerType</span><span class="p">(),</span> <span 
class="bp">True</span><span class="p">),</span>
+  <span class="n">T</span><span class="o">.</span><span 
class="n">StructField</span><span class="p">(</span><span 
class="s">"date"</span><span class="p">,</span> <span class="n">T</span><span 
class="o">.</span><span class="n">StringType</span><span class="p">(),</span> 
<span class="bp">True</span><span class="p">),</span>
+  <span class="n">T</span><span class="o">.</span><span 
class="n">StructField</span><span class="p">(</span><span 
class="s">"query_string"</span><span class="p">,</span> <span 
class="n">T</span><span class="o">.</span><span 
class="n">StringType</span><span class="p">(),</span> <span 
class="bp">True</span><span class="p">),</span>
+  <span class="n">T</span><span class="o">.</span><span 
class="n">StructField</span><span class="p">(</span><span 
class="s">"user"</span><span class="p">,</span> <span class="n">T</span><span 
class="o">.</span><span class="n">StringType</span><span class="p">(),</span> 
<span class="bp">True</span><span class="p">),</span>
+  <span class="n">T</span><span class="o">.</span><span 
class="n">StructField</span><span class="p">(</span><span 
class="s">"text"</span><span class="p">,</span> <span class="n">T</span><span 
class="o">.</span><span class="n">StringType</span><span class="p">(),</span> 
<span class="bp">True</span><span class="p">)</span>
+<span class="p">])</span>
+
+<span class="c1"># Read from Accumulo
+</span><span class="n">df</span> <span class="o">=</span> <span 
class="p">(</span><span class="n">spark</span>
+      <span class="o">.</span><span class="n">read</span>
+      <span class="o">.</span><span class="nb">format</span><span 
class="p">(</span><span class="s">"com.microsoft.accumulo"</span><span 
class="p">)</span>
+      <span class="o">.</span><span class="n">options</span><span 
class="p">(</span><span class="o">**</span><span class="n">options</span><span 
class="p">)</span>  <span class="c1"># define Accumulo properties
+</span>      <span class="o">.</span><span class="n">schema</span><span 
class="p">(</span><span class="n">schema</span><span class="p">))</span>     
<span class="c1"># define schema for data retrieval
+</span>
+<span class="c1"># Write to Accumulo
+</span><span class="n">properties</span><span class="p">[</span><span 
class="s">'table'</span><span class="p">]</span> <span class="o">=</span> <span 
class="s">'output_table'</span>
+
+<span class="p">(</span><span class="n">df</span>
+ <span class="o">.</span><span class="n">write</span>
+ <span class="o">.</span><span class="nb">format</span><span 
class="p">(</span><span class="s">"com.microsoft.accumulo"</span><span 
class="p">)</span>
+ <span class="o">.</span><span class="n">options</span><span 
class="p">(</span><span class="o">**</span><span class="n">options</span><span 
class="p">)</span>
+ <span class="o">.</span><span class="n">save</span><span class="p">())</span>
+</code></pre></div></div>
+
+<p>See the <a 
href="https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnector.ipynb";>demo
 notebook</a> for more examples.</p>
+
+<h1 id="computational-performance-of-ai-scenario">Computational Performance of 
AI Scenario</h1>
+<h2 id="setup">Setup</h2>
+<p>The benchmark setup used a 1,000-node Accumulo 2.0.0 Cluster (16,000 cores) 
running and a 256-node Spark 2.4.3 cluster (4,096 cores). All nodes used <a 
href="https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-general";>Azure
 D16s_v3</a> (16 cores) virtual machines. <a 
href="https://github.com/apache/fluo-muchos";>Fluo-muchos</a> was used to handle 
Accumulo and Spark cluster deployments and configuration.</p>
+
+<p>In all experiments we use the same base dataset which is a collection of 
Twitter user tweets with labeled sentiment value. This dataset is known as the 
Sentiment140 dataset (<a 
href="http://www-nlp.stanford.edu/courses/cs224n/2009/fp/3.pdf";>Go, Bhayani, 
&amp; Huang, 2009</a>). The training data consist of 1.6M samples of tweets, 
where each tweet has columns indicating the sentiment label, user, timestamp, 
query term, and text. The text is limited to 140 characters and the overall 
unco [...]
+
+<table>
+  <thead>
+    <tr>
+      <th>sentiment</th>
+      <th>id</th>
+      <th>date</th>
+      <th>query_string</th>
+      <th>user</th>
+      <th>text</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>0</td>
+      <td>1467810369</td>
+      <td>Mon Apr 06 22:19:…</td>
+      <td>NO_QUERY</td>
+      <td><em>TheSpecialOne</em></td>
+      <td>@switchfoot http:…</td>
+    </tr>
+    <tr>
+      <td>0</td>
+      <td>1467810672</td>
+      <td>Mon Apr 06 22:19:…</td>
+      <td>NO_QUERY</td>
+      <td>scotthamilton</td>
+      <td>is upset that he …</td>
+    </tr>
+    <tr>
+      <td>0</td>
+      <td>1467810917</td>
+      <td>Mon Apr 06 22:19:…</td>
+      <td>NO_QUERY</td>
+      <td>mattycus</td>
+      <td>@Kenichan I dived…</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>To evaluate different table sizes and the impact of splitting the following 
procedure was used to generate the Accumulo tables:</p>
+
+<ul>
+  <li>Prefix id with split keys (e.g. 0000, 0001, …, 1024)</li>
+  <li>Create Accumulo table and configure splits</li>
+  <li>Upload prefixed data to Accumulo using Spark and the MASC writer</li>
+  <li>Duplicate data using custom Accumulo server-side iterator</li>
+  <li>Validate data partitioning</li>
+</ul>
+
+<p>A common machine learning scenario was evaluated using a sentiment model 
trained using <a 
href="https://spark.apache.org/docs/latest/ml-guide.html";>SparkML</a>. 
+To train the classification model, we generated feature vectors from the text 
of tweets (text column). We used a feature engineering pipeline (a.k.a. 
featurizer) that breaks the text into tokens, splitting on whitespaces and 
discarding any capitalization and non-alphabetical characters. The pipeline 
consisted of</p>
+
+<ul>
+  <li>Regex Tokenizer</li>
+  <li>Hashing Transformer</li>
+  <li>Logistic Regression</li>
+</ul>
+
+<p>See the <a 
href="https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnectorBenchmark.ipynb";>benchmark
 notebook (Scala)</a> for more details.</p>
+
+<h2 id="results">Results</h2>
+<p>The first set of experiments evaluated data transfer efficiency and ML 
model inference performance. The chart below shows</p>
+
+<ul>
+  <li>Accumulo table split size (1GB, 8GB, 32GB, 64GB)</li>
+  <li>Total table size (1TB, 10TB, 100TB, 1PB)</li>
+  <li>Operations
+    <ul>
+      <li>Count: plain count of the data</li>
+      <li>Inference: Accumulo server-side inference using MLeap</li>
+      <li>Transfer: Filtering results for 30% data transfer</li>
+    </ul>
+  </li>
+  <li>Time is reported in minutes</li>
+</ul>
+
+<p>Remarks</p>
+<ul>
+  <li>Time is log-scale</li>
+  <li>Inference was run with and without data transfer to isolate server-side 
performance.</li>
+  <li>The smaller each Accumulo table split is, the more splits we have and 
thus higher parallelization.</li>
+</ul>
+
+<p><img src="/images/blog/202002_masc/runtime.png" alt="Runtime" 
title="Runtime Performance" class="blog-img-center" /></p>
+
+<p>The second set of experiments highlights the computational performance 
improvement of using the server-side inference approach compared to running 
inference on the Spark cluster.</p>
+
+<p><img src="/images/blog/202002_masc/sparkml_vs_mleap_accumulo.png" 
alt="Mleap" title="Spark ML vs MLeap Performance" class="blog-img-center" /></p>
+
+<h1 id="learnings">Learnings</h1>
+<ul>
+  <li>Accumulo MLeap Server-side inference vs Spark ML results in a 2x 
improvement</li>
+  <li>Multi-threading in Spark jobs can be used to fully utilize Accumulo 
servers
+    <ul>
+      <li>Useful if less Spark cluster has less cores than Accumulo</li>
+      <li>e.g. 8 threads * 2,048 Spark executor = 16,384 Accumulo threads</li>
+    </ul>
+  </li>
+  <li>Unbalanced Accumulo table splits can introduce performance 
bottlenecks</li>
+</ul>
+
+<h1 id="useful-links">Useful links</h1>
+<ul>
+  <li><a 
href="https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnector.ipynb";>Complete
 Jupyter demo notebook (PySpark)</a> for usage of the Accumulo-Spark 
connector</li>
+  <li><a 
href="https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnectorBenchmark.ipynb";>Complete
 Jupyter benchmark notebook (Scala)</a> for usage of the Accumulo-Spark 
connector</li>
+  <li>GitHub Repository <a 
href="https://github.com/microsoft/masc";>Microsoft’s contributions for Spark 
with Apache Accumulo</a></li>
+  <li><a href="https://github.com/combust/mleap";>MLeap</a> - Scala/Java 
stand-alone model inference for SparkML-based models</li>
+  <li><a href="https://spark.apache.org/docs/latest/ml-guide.html";>SparkML</a> 
- Spark machine learning library</li>
+  <li>MASC Maven artifacts
+    <ul>
+      <li><a 
href="https://mvnrepository.com/artifact/com.microsoft.masc/microsoft-accumulo-spark-iterator";>Accumulo
 Iterator - Backend for Spark DataSource</a></li>
+      <li><a 
href="https://mvnrepository.com/artifact/com.microsoft.masc/microsoft-accumulo-spark-datasource";>Spark
 DataSource</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h1 id="license">License</h1>
+<p>This work is publicly available under the Apache License 2.0 on GitHub 
under <a href="https://github.com/microsoft/masc";>Microsoft’s contributions for 
Apache Spark with Apache Accumulo</a>.</p>
+
+<h1 id="contributions">Contributions</h1>
+<p>Feedback, questions, and contributions are welcome!</p>
+
+<p>Thanks to contributions from members on the Azure Global Customer 
Engineering and Azure Government teams.</p>
+
+<ul>
+  <li><a href="https://github.com/AnupamMicrosoft";>Anupam Sharma</a></li>
+  <li><a href="https://github.com/arvindshmicrosoft";>Arvind 
Shyamsundar</a></li>
+  <li><a href="https://github.com/billierinaldi";>Billie Rinaldi</a></li>
+  <li><a href="https://github.com/chenhuims";>Chenhui Hu</a></li>
+  <li><a href="https://github.com/loomlike";>Jun-Ki Min</a></li>
+  <li><a href="https://github.com/phrocker";>Marc Parisi</a></li>
+  <li><a href="https://github.com/eisber";>Markus Cozowicz</a></li>
+  <li>Pavandeep Kalra</li>
+  <li><a href="https://github.com/roalexan";>Robert Alexander</a></li>
+  <li><a href="https://github.com/gramhagen";>Scott Graham</a></li>
+  <li><a href="https://github.com/wutaomsft";>Tao Wu</a></li>
+</ul>
+
+<p>Special thanks to <a href="https://github.com/ancasarb";>Anca Sarb</a> for 
promptly assisting with <a 
href="https://github.com/combust/mleap/issues/633";>MLeap performance 
issues</a>.</p>
+
+
+<p><strong>View all posts in the <a href="/news">news archive</a></strong></p>
+
+        </div>
+
+        
+<footer>
+
+  <p><a href="https://www.apache.org/foundation/contributing";><img 
src="https://www.apache.org/images/SupportApache-small.png"; alt="Support the 
ASF" id="asf-logo" height="100" /></a></p>
+
+  <p>Copyright © 2011-2020 <a href="https://www.apache.org";>The Apache 
Software Foundation</a>.
+Licensed under the <a href="https://www.apache.org/licenses/";>Apache License, 
Version 2.0</a>.</p>
+
+  <p>Apache®, the names of Apache projects and their logos, and the multicolor 
feather
+logo are registered trademarks or trademarks of The Apache Software Foundation
+in the United States and/or other countries.</p>
+
+</footer>
+
+
+      </div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/output/css/accumulo.css b/output/css/accumulo.css
index 67751ee..0197723 100644
--- a/output/css/accumulo.css
+++ b/output/css/accumulo.css
@@ -284,4 +284,6 @@ a.prop { display: block; content: " "; margin-top: -90px; 
height: 90px; visibili
   .navbar-collapse.collapse.in { display: block !important; }
   .collapsing { overflow: hidden !important; } }
 
+.blog-img-center { max-width: 95%; margin-top: 10px; margin-bottom: 10px; 
margin-left: auto; margin-right: auto; display: block; }
+
 /*# sourceMappingURL=accumulo.css.map */
\ No newline at end of file
diff --git a/output/css/accumulo.css.map b/output/css/accumulo.css.map
index 0a8c603..32bd782 100644
--- a/output/css/accumulo.css.map
+++ b/output/css/accumulo.css.map
@@ -6,9 +6,9 @@
                "_sass/_syntax-highlighting.scss"
        ],
        "sourcesContent": [
-               "@import \"syntax-highlighting\";\n\ntable {\n margin: 10px 0px 
30px 0px;\n padding: 10px 5px 10px 5px;\n}\n\nth, td {\n  padding: 10px 40px 
10px 5px;\n  border-bottom: 1px solid #ddd;\n}\n\nh1 {\n  font-size: 
34px;\n}\n\nh2 {\n  font-size: 28px;\n}\n\nh3 {\n  font-size: 22px;\n}\n\nh4 
{\n  font-size: 18px;\n}\n\nh5 {\n  font-size: 16px;\n}\n\nh6 {\n  font-size: 
15px;\n}\n\nbody {  \n  font-size: 14px;\n}\n\npre code {\n  font-size: 
14px;\n}\n\ncode {\n  background-color: #f5f5f5;\n  c [...]
+               "@import \"syntax-highlighting\";\n\ntable {\n margin: 10px 0px 
30px 0px;\n padding: 10px 5px 10px 5px;\n}\n\nth, td {\n  padding: 10px 40px 
10px 5px;\n  border-bottom: 1px solid #ddd;\n}\n\nh1 {\n  font-size: 
34px;\n}\n\nh2 {\n  font-size: 28px;\n}\n\nh3 {\n  font-size: 22px;\n}\n\nh4 
{\n  font-size: 18px;\n}\n\nh5 {\n  font-size: 16px;\n}\n\nh6 {\n  font-size: 
15px;\n}\n\nbody {  \n  font-size: 14px;\n}\n\npre code {\n  font-size: 
14px;\n}\n\ncode {\n  background-color: #f5f5f5;\n  c [...]
                ".highlight .hll { background-color: #d6d6d6 }\n.highlight  { 
background: #f5f5f5; color: #4d4d4c }\n.highlight .c { color: #8e908c } /* 
Comment */\n.highlight .err { color: #c82829 } /* Error */\n.highlight .k { 
color: #8959a8 } /* Keyword */\n.highlight .l { color: #f5871f } /* Literal 
*/\n.highlight .n { color: #4d4d4c } /* Name */\n.highlight .o { color: #3e999f 
} /* Operator */\n.highlight .p { color: #4d4d4c } /* Punctuation 
*/\n.highlight .cm { color: #8e908c } /* Comment.Multil [...]
        ],
        "names": [],
-       "mappings": 
"ACAA,AAAA,UAAU,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,OAAQ,GAAE;;AAC9C,AAAA,UAAU,CAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAQ,GAAE;;AACpD,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,aAAa;AAC9C,AAAA,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,WAAW;AAC9C,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,aAAa;AAC9C,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,aAAa;AAC9C,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,UAAU;AAC3C,AAAA,UAAU,CA
 [...]
+       "mappings": 
"ACAA,AAAA,UAAU,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,OAAQ,GAAE;;AAC9C,AAAA,UAAU,CAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAQ,GAAE;;AACpD,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,aAAa;AAC9C,AAAA,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,WAAW;AAC9C,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,aAAa;AAC9C,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,aAAa;AAC9C,AAAA,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAQ,GAAE;;AAAA,UAAU;AAC3C,AAAA,UAAU,CA
 [...]
 }
\ No newline at end of file
diff --git a/output/feed.xml b/output/feed.xml
index 4c61e58..0784d48 100644
--- a/output/feed.xml
+++ b/output/feed.xml
@@ -6,12 +6,283 @@
 </description>
     <link>https://accumulo.apache.org/</link>
     <atom:link href="https://accumulo.apache.org/feed.xml"; rel="self" 
type="application/rss+xml"/>
-    <pubDate>Tue, 18 Feb 2020 17:14:36 +0000</pubDate>
-    <lastBuildDate>Tue, 18 Feb 2020 17:14:36 +0000</lastBuildDate>
+    <pubDate>Wed, 26 Feb 2020 22:25:12 +0000</pubDate>
+    <lastBuildDate>Wed, 26 Feb 2020 22:25:12 +0000</lastBuildDate>
     <generator>Jekyll v4.0.0</generator>
     
     
       <item>
+        <title>Microsoft MASC, an Apache Spark connector for Apache 
Accumulo</title>
+        <description>&lt;h1 id=&quot;overview&quot;&gt;Overview&lt;/h1&gt;
+&lt;p&gt;&lt;a 
href=&quot;https://github.com/microsoft/masc&quot;&gt;MASC&lt;/a&gt; provides 
an Apache Spark native connector for Apache Accumulo to integrate the rich 
Spark machine learning eco-system with the scalable and secure data storage 
capabilities of Accumulo.&lt;/p&gt;
+
+&lt;h2 id=&quot;major-features&quot;&gt;Major Features&lt;/h2&gt;
+&lt;ul&gt;
+  &lt;li&gt;Simplified Spark DataFrame read/write to Accumulo using DataSource 
v2 API&lt;/li&gt;
+  &lt;li&gt;Speedup of 2-5x over existing approaches for pulling key-value 
data into DataFrame format&lt;/li&gt;
+  &lt;li&gt;Scala and Python support without overhead for moving between 
languages&lt;/li&gt;
+  &lt;li&gt;Process streaming data from Accumulo without loading it all into 
Spark memory&lt;/li&gt;
+  &lt;li&gt;Push down filtering with a flexible expression language (&lt;a 
href=&quot;http://juel.sourceforge.net/&quot;&gt;JUEL&lt;/a&gt;): user can 
define logical operators and comparisons to reduce the amount of data returned 
from Accumulo&lt;/li&gt;
+  &lt;li&gt;Column pruning based on selected fields transparently reduces the 
amount of data returned from Accumulo&lt;/li&gt;
+  &lt;li&gt;Server side inference: ML model inference can run on the Accumulo 
nodes using MLeap to increase the scalability of AI solutions as well as 
keeping data in Accumulo&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;use-cases&quot;&gt;Use-cases&lt;/h2&gt;
+&lt;p&gt;MASC is advantageous in many use-cases, below we list a few.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Scenario 1&lt;/strong&gt;: A data analyst needs to 
execute model inference on large amount of data in Accumulo.&lt;br /&gt;
+&lt;strong&gt;Benefit&lt;/strong&gt;: Instead of transferring all the data to 
a large Spark cluster to score using a Spark model, the connector exports and 
runs the model on the Accumulo cluster. This reduces the need for a large Spark 
cluster as well as the amount of data transferred between systems, and can 
improve inference speeds (&amp;gt;2x speedups observed).&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Scenario 2&lt;/strong&gt;: A data scientist needs to 
train a Spark model on a large amount of data in Accumulo.&lt;br /&gt;
+&lt;strong&gt;Benefit&lt;/strong&gt;: Instead of pulling all the data into a 
large Spark cluster and restructuring the format to use Spark ML Lib tools, the 
connector streams data into Spark as a DataFrame reducing time to train and 
Spark cluster size / memory requirements.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Scenario 3&lt;/strong&gt;: A data analyst needs to 
perform ad hoc analysis on large amounts of data stored in Accumulo.&lt;br /&gt;
+&lt;strong&gt;Benefit&lt;/strong&gt;: Instead of pulling all the data into a 
large Spark cluster, the connector prunes rows and columns using pushdown 
filtering with a flexible expression language.&lt;/p&gt;
+
+&lt;h1 id=&quot;architecture&quot;&gt;Architecture&lt;/h1&gt;
+&lt;p&gt;The Accumulo-Spark connector is composed of two components:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;Accumulo server-side iterator performs
+    &lt;ul&gt;
+      &lt;li&gt;column pruning&lt;/li&gt;
+      &lt;li&gt;row-based filtering&lt;/li&gt;
+      &lt;li&gt;&lt;a 
href=&quot;https://github.com/combust/mleap&quot;&gt;MLeap&lt;/a&gt; ML model 
inference and&lt;/li&gt;
+      &lt;li&gt;row assembly using &lt;a 
href=&quot;https://avro.apache.org/&quot;&gt;Apache AVRO&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/li&gt;
+  &lt;li&gt;Spark DataSource V2
+    &lt;ul&gt;
+      &lt;li&gt;determines the number of Spark tasks based on available 
Accumulo table splits&lt;/li&gt;
+      &lt;li&gt;translates Spark filter conditions into a &lt;a 
href=&quot;http://juel.sourceforge.net/&quot;&gt;JUEL&lt;/a&gt; 
expression&lt;/li&gt;
+      &lt;li&gt;configures the Accumulo iterator&lt;/li&gt;
+      &lt;li&gt;deserializes the AVRO payload&lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/images/blog/202002_masc/architecture.svg&quot; 
alt=&quot;Architecture&quot; title=&quot;MASC Architecture Diagram&quot; 
/&gt;&lt;/p&gt;
+
+&lt;h1 id=&quot;usage&quot;&gt;Usage&lt;/h1&gt;
+&lt;p&gt;More detailed documentation on installation and use is available in 
the 
+&lt;a 
href=&quot;https://github.com/microsoft/masc/blob/master/connector/README.md&quot;&gt;Connector
 documentation&lt;/a&gt;&lt;/p&gt;
+
+&lt;h2 id=&quot;dependencies&quot;&gt;Dependencies&lt;/h2&gt;
+&lt;ul&gt;
+  &lt;li&gt;Java 8&lt;/li&gt;
+  &lt;li&gt;Spark 2.4.3+&lt;/li&gt;
+  &lt;li&gt;Accumulo 2.0.0+&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;JARs available on Maven Central Repository:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;a 
href=&quot;https://search.maven.org/search?q=g:%22com.microsoft.masc%22%20AND%20a:%22microsoft-accumulo-spark-datasource%22&quot;&gt;&lt;img
 
src=&quot;https://img.shields.io/maven-central/v/com.microsoft.masc/microsoft-accumulo-spark-datasource.svg?label=Maven%20Central&quot;
 alt=&quot;Maven Central&quot; /&gt; Spark DataSource&lt;/a&gt;&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;a 
href=&quot;https://search.maven.org/search?q=g:%22com.microsoft.masc%22%20AND%20a:%22microsoft-accumulo-spark-iterator%22&quot;&gt;&lt;img
 
src=&quot;https://img.shields.io/maven-central/v/com.microsoft.masc/microsoft-accumulo-spark-iterator.svg?label=Maven%20Central&quot;
 alt=&quot;Maven Central&quot; /&gt; Accumulo Iterator&lt;/a&gt; - Backend for 
Spark DataSource&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;example-use&quot;&gt;Example use&lt;/h2&gt;
+&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div 
class=&quot;highlight&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span 
class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span 
class=&quot;nn&quot;&gt;configparser&lt;/span&gt; &lt;span 
class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;ConfigParser&lt;/span&gt;
+&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span 
class=&quot;nn&quot;&gt;pyspark.sql&lt;/span&gt; &lt;span 
class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;types&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;T&lt;/span&gt;
+
+&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;get_properties&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;properties_file&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;):&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;&quot;&quot;&quot;Read Accumulo client 
properties file&quot;&quot;&quot;&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;config&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;ConfigParser&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;()&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span 
class=&quot;nb&quot;&gt;open&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;properties_file&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;stream&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;:&lt;/span&gt;
+        &lt;span class=&quot;n&quot;&gt;config&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;read_string&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;[top]&lt;/span&gt;&lt;span 
class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;stream&lt;/span&gt;&lt;span class=&quot;o&quot;&gt [...]
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span 
class=&quot;nb&quot;&gt;dict&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;config&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;'top'&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;])&lt;/span&gt;
+
+&lt;span class=&quot;n&quot;&gt;properties&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;get_properties&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;'/opt/muchos/install/accumulo-2.0.0/conf/accumulo-client.properties'&lt;/span&gt;&lt;span
 class=&quot;p&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;n&quot;&gt;properties&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;'table'&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;'demo_table'&lt;/span&gt; &lt;span 
class=&quot;c1&quot;&gt;# Define Accumulo table where data will be written
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;properties&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;'rowkey'&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;'id'&lt;/span&gt;        &lt;span 
class=&quot;c1&quot;&gt;# Identify column to use as the key for Accumulo rows
+&lt;/span&gt;
+&lt;span class=&quot;c1&quot;&gt;# define the schema
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;schema&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StructType&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;([&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StructField&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;sentiment&quot;&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;IntegerType&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(), [...]
+  &lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StructField&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StringType&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(),&lt;/s [...]
+  &lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StructField&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;query_string&quot;&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StringType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;( 
[...]
+  &lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StructField&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StringType&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(),&lt;/s [...]
+  &lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StructField&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;StringType&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(),&lt;/s [...]
+&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
+
+&lt;span class=&quot;c1&quot;&gt;# Read from Accumulo
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;df&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;spark&lt;/span&gt;
+      &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;read&lt;/span&gt;
+      &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;nb&quot;&gt;format&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;com.microsoft.accumulo&quot;&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;)&lt;/span&gt;
+      &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# 
define Accumulo properties
+&lt;/span&gt;      &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;schema&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;schema&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;))&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;# 
define schema for data retrieval
+&lt;/span&gt;
+&lt;span class=&quot;c1&quot;&gt;# Write to Accumulo
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;properties&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;'table'&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;'output_table'&lt;/span&gt;
+
+&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;df&lt;/span&gt;
+ &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;write&lt;/span&gt;
+ &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;nb&quot;&gt;format&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;com.microsoft.accumulo&quot;&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;)&lt;/span&gt;
+ &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;)&lt;/span&gt;
+ &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;save&lt;/span&gt;&lt;span 
class=&quot;p&quot;&gt;())&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
+
+&lt;p&gt;See the &lt;a 
href=&quot;https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnector.ipynb&quot;&gt;demo
 notebook&lt;/a&gt; for more examples.&lt;/p&gt;
+
+&lt;h1 
id=&quot;computational-performance-of-ai-scenario&quot;&gt;Computational 
Performance of AI Scenario&lt;/h1&gt;
+&lt;h2 id=&quot;setup&quot;&gt;Setup&lt;/h2&gt;
+&lt;p&gt;The benchmark setup used a 1,000-node Accumulo 2.0.0 Cluster (16,000 
cores) running and a 256-node Spark 2.4.3 cluster (4,096 cores). All nodes used 
&lt;a 
href=&quot;https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-general&quot;&gt;Azure
 D16s_v3&lt;/a&gt; (16 cores) virtual machines. &lt;a 
href=&quot;https://github.com/apache/fluo-muchos&quot;&gt;Fluo-muchos&lt;/a&gt; 
was used to handle Accumulo and Spark cluster deployments and 
configuration.&lt;/p&gt;
+
+&lt;p&gt;In all experiments we use the same base dataset which is a collection 
of Twitter user tweets with labeled sentiment value. This dataset is known as 
the Sentiment140 dataset (&lt;a 
href=&quot;http://www-nlp.stanford.edu/courses/cs224n/2009/fp/3.pdf&quot;&gt;Go,
 Bhayani, &amp;amp; Huang, 2009&lt;/a&gt;). The training data consist of 1.6M 
samples of tweets, where each tweet has columns indicating the sentiment label, 
user, timestamp, query term, and text. The text is limited to 140 [...]
+
+&lt;table&gt;
+  &lt;thead&gt;
+    &lt;tr&gt;
+      &lt;th&gt;sentiment&lt;/th&gt;
+      &lt;th&gt;id&lt;/th&gt;
+      &lt;th&gt;date&lt;/th&gt;
+      &lt;th&gt;query_string&lt;/th&gt;
+      &lt;th&gt;user&lt;/th&gt;
+      &lt;th&gt;text&lt;/th&gt;
+    &lt;/tr&gt;
+  &lt;/thead&gt;
+  &lt;tbody&gt;
+    &lt;tr&gt;
+      &lt;td&gt;0&lt;/td&gt;
+      &lt;td&gt;1467810369&lt;/td&gt;
+      &lt;td&gt;Mon Apr 06 22:19:…&lt;/td&gt;
+      &lt;td&gt;NO_QUERY&lt;/td&gt;
+      &lt;td&gt;&lt;em&gt;TheSpecialOne&lt;/em&gt;&lt;/td&gt;
+      &lt;td&gt;@switchfoot http:…&lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr&gt;
+      &lt;td&gt;0&lt;/td&gt;
+      &lt;td&gt;1467810672&lt;/td&gt;
+      &lt;td&gt;Mon Apr 06 22:19:…&lt;/td&gt;
+      &lt;td&gt;NO_QUERY&lt;/td&gt;
+      &lt;td&gt;scotthamilton&lt;/td&gt;
+      &lt;td&gt;is upset that he …&lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr&gt;
+      &lt;td&gt;0&lt;/td&gt;
+      &lt;td&gt;1467810917&lt;/td&gt;
+      &lt;td&gt;Mon Apr 06 22:19:…&lt;/td&gt;
+      &lt;td&gt;NO_QUERY&lt;/td&gt;
+      &lt;td&gt;mattycus&lt;/td&gt;
+      &lt;td&gt;@Kenichan I dived…&lt;/td&gt;
+    &lt;/tr&gt;
+  &lt;/tbody&gt;
+&lt;/table&gt;
+
+&lt;p&gt;To evaluate different table sizes and the impact of splitting the 
following procedure was used to generate the Accumulo tables:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;Prefix id with split keys (e.g. 0000, 0001, …, 1024)&lt;/li&gt;
+  &lt;li&gt;Create Accumulo table and configure splits&lt;/li&gt;
+  &lt;li&gt;Upload prefixed data to Accumulo using Spark and the MASC 
writer&lt;/li&gt;
+  &lt;li&gt;Duplicate data using custom Accumulo server-side 
iterator&lt;/li&gt;
+  &lt;li&gt;Validate data partitioning&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;A common machine learning scenario was evaluated using a sentiment 
model trained using &lt;a 
href=&quot;https://spark.apache.org/docs/latest/ml-guide.html&quot;&gt;SparkML&lt;/a&gt;.
 
+To train the classification model, we generated feature vectors from the text 
of tweets (text column). We used a feature engineering pipeline (a.k.a. 
featurizer) that breaks the text into tokens, splitting on whitespaces and 
discarding any capitalization and non-alphabetical characters. The pipeline 
consisted of&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;Regex Tokenizer&lt;/li&gt;
+  &lt;li&gt;Hashing Transformer&lt;/li&gt;
+  &lt;li&gt;Logistic Regression&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;See the &lt;a 
href=&quot;https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnectorBenchmark.ipynb&quot;&gt;benchmark
 notebook (Scala)&lt;/a&gt; for more details.&lt;/p&gt;
+
+&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;
+&lt;p&gt;The first set of experiments evaluated data transfer efficiency and 
ML model inference performance. The chart below shows&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;Accumulo table split size (1GB, 8GB, 32GB, 64GB)&lt;/li&gt;
+  &lt;li&gt;Total table size (1TB, 10TB, 100TB, 1PB)&lt;/li&gt;
+  &lt;li&gt;Operations
+    &lt;ul&gt;
+      &lt;li&gt;Count: plain count of the data&lt;/li&gt;
+      &lt;li&gt;Inference: Accumulo server-side inference using 
MLeap&lt;/li&gt;
+      &lt;li&gt;Transfer: Filtering results for 30% data transfer&lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/li&gt;
+  &lt;li&gt;Time is reported in minutes&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Remarks&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;Time is log-scale&lt;/li&gt;
+  &lt;li&gt;Inference was run with and without data transfer to isolate 
server-side performance.&lt;/li&gt;
+  &lt;li&gt;The smaller each Accumulo table split is, the more splits we have 
and thus higher parallelization.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/images/blog/202002_masc/runtime.png&quot; 
alt=&quot;Runtime&quot; title=&quot;Runtime Performance&quot; 
class=&quot;blog-img-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;The second set of experiments highlights the computational 
performance improvement of using the server-side inference approach compared to 
running inference on the Spark cluster.&lt;/p&gt;
+
+&lt;p&gt;&lt;img 
src=&quot;/images/blog/202002_masc/sparkml_vs_mleap_accumulo.png&quot; 
alt=&quot;Mleap&quot; title=&quot;Spark ML vs MLeap Performance&quot; 
class=&quot;blog-img-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h1 id=&quot;learnings&quot;&gt;Learnings&lt;/h1&gt;
+&lt;ul&gt;
+  &lt;li&gt;Accumulo MLeap Server-side inference vs Spark ML results in a 2x 
improvement&lt;/li&gt;
+  &lt;li&gt;Multi-threading in Spark jobs can be used to fully utilize 
Accumulo servers
+    &lt;ul&gt;
+      &lt;li&gt;Useful if less Spark cluster has less cores than 
Accumulo&lt;/li&gt;
+      &lt;li&gt;e.g. 8 threads * 2,048 Spark executor = 16,384 Accumulo 
threads&lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/li&gt;
+  &lt;li&gt;Unbalanced Accumulo table splits can introduce performance 
bottlenecks&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h1 id=&quot;useful-links&quot;&gt;Useful links&lt;/h1&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;a 
href=&quot;https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnector.ipynb&quot;&gt;Complete
 Jupyter demo notebook (PySpark)&lt;/a&gt; for usage of the Accumulo-Spark 
connector&lt;/li&gt;
+  &lt;li&gt;&lt;a 
href=&quot;https://github.com/microsoft/masc/blob/master/connector/examples/AccumuloSparkConnectorBenchmark.ipynb&quot;&gt;Complete
 Jupyter benchmark notebook (Scala)&lt;/a&gt; for usage of the Accumulo-Spark 
connector&lt;/li&gt;
+  &lt;li&gt;GitHub Repository &lt;a 
href=&quot;https://github.com/microsoft/masc&quot;&gt;Microsoft’s contributions 
for Spark with Apache Accumulo&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a 
href=&quot;https://github.com/combust/mleap&quot;&gt;MLeap&lt;/a&gt; - 
Scala/Java stand-alone model inference for SparkML-based models&lt;/li&gt;
+  &lt;li&gt;&lt;a 
href=&quot;https://spark.apache.org/docs/latest/ml-guide.html&quot;&gt;SparkML&lt;/a&gt;
 - Spark machine learning library&lt;/li&gt;
+  &lt;li&gt;MASC Maven artifacts
+    &lt;ul&gt;
+      &lt;li&gt;&lt;a 
href=&quot;https://mvnrepository.com/artifact/com.microsoft.masc/microsoft-accumulo-spark-iterator&quot;&gt;Accumulo
 Iterator - Backend for Spark DataSource&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a 
href=&quot;https://mvnrepository.com/artifact/com.microsoft.masc/microsoft-accumulo-spark-datasource&quot;&gt;Spark
 DataSource&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h1 id=&quot;license&quot;&gt;License&lt;/h1&gt;
+&lt;p&gt;This work is publicly available under the Apache License 2.0 on 
GitHub under &lt;a 
href=&quot;https://github.com/microsoft/masc&quot;&gt;Microsoft’s contributions 
for Apache Spark with Apache Accumulo&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h1 id=&quot;contributions&quot;&gt;Contributions&lt;/h1&gt;
+&lt;p&gt;Feedback, questions, and contributions are welcome!&lt;/p&gt;
+
+&lt;p&gt;Thanks to contributions from members on the Azure Global Customer 
Engineering and Azure Government teams.&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;&lt;a 
href=&quot;https://github.com/AnupamMicrosoft&quot;&gt;Anupam 
Sharma&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a 
href=&quot;https://github.com/arvindshmicrosoft&quot;&gt;Arvind 
Shyamsundar&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/billierinaldi&quot;&gt;Billie 
Rinaldi&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/chenhuims&quot;&gt;Chenhui 
Hu&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/loomlike&quot;&gt;Jun-Ki 
Min&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/phrocker&quot;&gt;Marc 
Parisi&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/eisber&quot;&gt;Markus 
Cozowicz&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;Pavandeep Kalra&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/roalexan&quot;&gt;Robert 
Alexander&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/gramhagen&quot;&gt;Scott 
Graham&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://github.com/wutaomsft&quot;&gt;Tao 
Wu&lt;/a&gt;&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Special thanks to &lt;a 
href=&quot;https://github.com/ancasarb&quot;&gt;Anca Sarb&lt;/a&gt; for 
promptly assisting with &lt;a 
href=&quot;https://github.com/combust/mleap/issues/633&quot;&gt;MLeap 
performance issues&lt;/a&gt;.&lt;/p&gt;
+</description>
+        <pubDate>Wed, 26 Feb 2020 00:00:00 +0000</pubDate>
+        
<link>https://accumulo.apache.org/blog/2020/02/26/accumulo-spark-connector.html</link>
+        <guid 
isPermaLink="true">https://accumulo.apache.org/blog/2020/02/26/accumulo-spark-connector.html</guid>
+        
+        
+        <category>blog</category>
+        
+      </item>
+    
+      <item>
         <title>Accumulo Clients in Other Programming Languages</title>
         <description>&lt;p&gt;Apache Accumulo has an &lt;a 
href=&quot;https://github.com/apache/accumulo-proxy&quot;&gt;Accumulo 
Proxy&lt;/a&gt; that allows communication with Accumulo using clients written
 in languages other than Java. This blog post shows how to run the Accumulo 
Proxy process using &lt;a 
href=&quot;https://github.com/apache/fluo-uno&quot;&gt;Uno&lt;/a&gt;
@@ -1317,35 +1588,5 @@ address thrift CVE. Issue &lt;a 
href=&quot;https://github.com/apache/accumulo/is
         
       </item>
     
-      <item>
-        <title>NoSQL Day 2019</title>
-        <description>&lt;p&gt;On May 21st in Washington, DC, there will be a 
one-day community event for Apache Accumulo,
-HBase, and Phoenix called &lt;a 
href=&quot;https://dataworkssummit.com/nosql-day-2019/&quot;&gt;NoSQL 
Day&lt;/a&gt;. We hope that these three Apache communities can come together to 
share
-stories from the field and learn from one another. This event is being offered 
by the
-DataWorks Summit organization, prior to their DataWorks Summit event May 20th 
through 23rd.&lt;/p&gt;
-
-&lt;p&gt;At this time, we are looking for speakers, attendees, and sponsors 
for the event. For
-speakers, we hope to see a wide breadth of subjects and focus, anything from 
performance,
-scaling, real-life applications, dev-ops, or best-practices. All speakers are 
welcome!
-Abstracts can be submitted &lt;a 
href=&quot;https://dataworkssummit.com/abstracts/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
-
-&lt;p&gt;For attendees, we want to get the best and brightest from each of the 
respective communities
-because the organizers believe we have much to learn from from each other. 
We’ve tried to
-keep costs down to make this approachable for all.&lt;/p&gt;
-
-&lt;p&gt;Finally, sponsors are the major enabler to provide events like these 
at low-costs
-to attendees. If you are interested in a corporate sponsorship, please feel 
free to contact
-&lt;a href=&quot;mailto:els...@apache.org&quot;&gt;Josh Elser&lt;/a&gt; for 
more information.&lt;/p&gt;
-
-</description>
-        <pubDate>Thu, 28 Feb 2019 00:00:00 +0000</pubDate>
-        <link>https://accumulo.apache.org/blog/2019/02/28/nosql-day.html</link>
-        <guid 
isPermaLink="true">https://accumulo.apache.org/blog/2019/02/28/nosql-day.html</guid>
-        
-        
-        <category>blog</category>
-        
-      </item>
-    
   </channel>
 </rss>
diff --git a/output/images/blog/202002_masc/architecture.png 
b/output/images/blog/202002_masc/architecture.png
new file mode 100644
index 0000000..89718e2
Binary files /dev/null and b/output/images/blog/202002_masc/architecture.png 
differ
diff --git a/output/images/blog/202002_masc/architecture.svg 
b/output/images/blog/202002_masc/architecture.svg
new file mode 100644
index 0000000..80c347f
--- /dev/null
+++ b/output/images/blog/202002_masc/architecture.svg
@@ -0,0 +1,713 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<!-- Generated by Microsoft Visio, SVG Export architecture.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:ev="http://www.w3.org/2001/xml-events";
+               
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/"; 
width="5.69012in" height="8.85433in"
+               viewBox="0 0 409.689 637.512" xml:space="preserve" 
color-interpolation-filters="sRGB" class="st12">
+       <v:documentProperties v:langID="1033" v:viewMarkup="false"/>
+
+       <style type="text/css">
+       <![CDATA[
+               .st1 {fill:#ffffff;stroke:#4672c4;stroke-width:0.75}
+               .st2 {fill:none;stroke:none;stroke-width:0.25}
+               .st3 {fill:#ffffff;stroke:#70ad47;stroke-width:0.75}
+               .st4 {fill:#70ad47;font-family:Calibri;font-size:1.00001em}
+               .st5 {fill:#ffffff;stroke:#ed7d31;stroke-width:0.75}
+               .st6 {fill:#ed7d31;font-family:Calibri;font-size:1.00001em}
+               .st7 {fill:#4672c4;font-family:Calibri;font-size:1.00001em}
+               .st8 {font-size:1em}
+               .st9 
{marker-end:url(#mrkr4-35);stroke:#4672c4;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+               .st10 
{fill:#4672c4;fill-opacity:1;stroke:#4672c4;stroke-opacity:1;stroke-width:0.28409090909091}
+               .st11 
{fill:none;stroke:#b5c6e7;stroke-dasharray:5.25,3.75;stroke-width:0.75}
+               .st12 
{fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+       ]]>
+       </style>
+
+       <defs id="Markers">
+               <g id="lend4">
+                       <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " 
style="stroke:none"/>
+               </g>
+               <marker id="mrkr4-35" class="st10" v:arrowType="4" 
v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto"
+                               markerUnits="strokeWidth" overflow="visible">
+                       <use xlink:href="#lend4" transform="scale(-3.52,-3.52) 
"/>
+               </marker>
+       </defs>
+       <g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+               <title>Page-1</title>
+               <v:pageProperties v:drawingScale="0.0393701" 
v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+                               v:shadowOffsetY="-8.50394"/>
+               <v:layer v:name="Connector" v:index="0"/>
+               <g id="shape1004-1" v:mID="1004" v:groupContext="shape" 
transform="translate(0.75,-106.441)">
+                       <title>Sheet.1004</title>
+                       <rect x="0" y="129.543" width="130.394" 
height="507.968" class="st1"/>
+               </g>
+               <g id="shape1000-3" v:mID="1000" v:groupContext="shape" 
transform="translate(278.545,-106.441)">
+                       <title>Sheet.1000</title>
+                       <rect x="0" y="129.543" width="130.394" 
height="507.968" class="st1"/>
+               </g>
+               <g id="shape1-5" v:mID="1" v:groupContext="shape" 
transform="translate(327.129,-584.822)">
+                       <title>Sheet.1</title>
+                       <rect v:rectContext="foreign" x="0" y="616.927" 
width="38.7" height="20.5851" class="st2"/>
+                       <image x="0" y="616.927" width="38.7" height="20.5851" 
preserveAspectRatio="none" xlink:href="data:image/png;base64,
+                                               
iVBORw0KGgoAAAANSUhEUgAAAXgAAADICAYAAADiIPpnAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0
+                                               
Ad5mH3gAAHdoSURBVHhe7b0HuGRFtTYM/vfj4179vOpFmdM9IF4wYgYlzuneu8/MMCheE2YMqMOcc2Ykmq6io+AVc04XMZJECSKCAUSS
+                                               
oiCCEkRgThpghjwMceL/vqvW2l3dp7vP3ru7z+kz1Ps869kd9l5VtarqrVVhV20VEBAQ0GvYvHyrx0H+Rb9Owuatttqa//OqPwUEBAQE
+                                               
9DourCP2m95TnDu6pPCSFUvmvHxseM6uNy17yhP1LyH60w7c6v/TrwEBAQEBvQjxyj2yHhsqHDA2WPjB6GDhany+fWy4cDc+j40PFX8/
+                                               
Ptx3zNiyOc/TW7e6sNzc2w8ICAgImEHokMvj+HlscPv/BKGfCDJ/9J7Dipvvhtx1aFXuOWzu5jveV9yMe8ZHhwpHWaNQ7/kHBAQEBMww
+                                               
fHKfGJ67B4j7b/cdPnfzqmVC4hvHhorrQOTr4ME/KtehwvrxoYKQ/WreAy//bh22CSQfEBAQ0EMwUh4ZKr4YxH3j/UfMFWIXMh8sbMJn
+                                               
fq+Xjfjv0ZVLC5vZGOC5k1cdtf3jqafV5GxAQEBAwDTByPjmJds/DSR98Roh9yK9dHjuDYm9Torr6M3f60j+a6IU8MfyAwICAgKmGTYs
+                                               
Q4Cov8zxdvXYN0wm8paynp787cuKm0cHC8OqskZ/QEBAQMA0woZmRofn7g/v+0GOuesYeyMSbyl87k438XoXx/GpN3jxAQEBATMAG5q5
+                                               
5qDtHz8+VDx3zeFzc5O7J+vceHzx3InD5/4r9YflkwEBAQHTDPOuxwaLB4KYN962VIZnsg7N1IuM26+GJx+GagICAgJmADY0c+Xirf7P
+                                               
2HDhNDex2rb3brL+zkNlqGZkYmjuLgwnDNUEBAQETBNseGZssG+30aHCan1pab1H0vllsLBpfKiw4d7DZDXOtyVAIHjxAQEBAV3G5s3V
+                                               
zcFAxsuU3G31TC1Z5xQS/K1L3cTrxFDffgyLBB82JgsICAjoImx4hoQ7Plw4iZOrIOXOeO9VkaWW3OIA14v/cfB2/49hhk3JAgICAroI
+                                               
G56ZWDK3CA/7Gg6ldGD1TCOpTrgOFY6SsLklgteDCAgICAjoIJLVM0OFfUG8a/hyEj63u3pmkkA3rxtI8LiuHDvE7TwZJlwDAgICugDx
+                                               
oHUcfGy47yCSO7cZAAGn3JYgo3BcH+KGavp+KJEAwoRrQEBAQIfhEyuI/ZM6Rk5y79gEawPZIGvshwrrR5f0vYZhBy8+ICAgoMPwt/IF
+                                               
wZ/sbSzmE3KnxU24cm38YN+fRg7b6UkMP5B8QEBAQAdhE6xjgzs+eXSocBm3FejSBGuNcNnkxLBNuBaPlrh4w0UBAQEBAW3CvObRob7n
+                                               
gnhHuTkYyDfLEkl643mHdNbrZmS383xXiY/Xo5gtsJVAoYEKCAjoKdgY/OiSYgyiXceXkXBNO8G6aRxeuDzjXorKSvIMZyO3JObwkEQI
+                                               
6OUJVyFxxI/r93kVUWIXIdF7/+tjAQEBAdMLf/35xFDh3dwaGESb+g1WuXeo8BBkDUke3/OsvFmvyzLXjw0X38C4+PMCvQAhcRI2JeOa
+                                               
fWsE9GtAQEDA9MCf1BwbLnyWB2eDpLn+vSXB63r2jTx/Fde/jA0V347rrbLFQb7dJ9czbOi9/MbFhe0YH5DijJG8eOGwDbc1bkbO9NDH
+                                               
l+5QGB+a87LxpYVXjQ71vXV0sPCWieG5+08Mzn2hTRwbAskHBARMK5ItCkhWQ4UzUu8g6Tz8jW7zsMI51DE+VPwIv4sXn7IHYMJGhUM9
+                                               
crjIYPGjEicd7uDnbkPConcOe/iNXj1I6OhlVMaH+/4b6T0dDdKNiPtaiBw47tIjK5Duwf9/xvXTK0D2+ngg+YCAgOmDkdnI0FPngIyu
+                                               
4hp4kpUjqpYiQzHcAhj3f4M6Vhz6tO3x21XqiWdehcNntEcwYROuVy7e7f/w2g2QbIXQKU0aEvYmRoeLe6HBWoZ4nQi5nvFkutmYscfC
+                                               
9fwcnuKKIAo/c8iJadEG7w70jt6nKgPJBwQETA9so6+RoeKLQUJ36xh8miEWWeJIIpsYKiwVZQCefTPETbqm01MV5/XrlsLeG64tPOos
+                                               
oJfOHgv3u2+m86ZlT3kiGxd43+8cH+r7lnrhD5DIuXyUxK5pk7iqrWSiuIHwvw18hktB6fVrMAEBAQHdha364GeOIXOIZCVEyalKvI3F
+                                               
3kR9eHxp30JRCJBAxwcLp7SxG6VNuK4bXdL3Oupsh+DZgLEXQC9df6oBjxCU5aFLiweCrD83Ply8ENc72dCR0Nkb0XTa3IIjdF0xBG/e
+                                               
j3u9yJYMkEdXQ5/0aoaLFQ06ICAgoHvwhwrgjb+fXqoQVrrxc9kwDI3CxMQhc59JHTct2+X/8rpiyZyXQ89qXd8uQzVTEGGNkAhJrojH
+                                               
pTbhSq+b16mwXIddlNQnDYWwARob3P4/QbSvRFgfh5wzOlgYY2/kXoTJcCVdLi4kczZSaQm9scizRU1T3480KgEBAQHdg+8Zg+SOV1Il
+                                               
qU1F8PxfV9AU/7zqqO0fTx2+l4z/l+t4OiVNj8AXuZ8NzshQ4UOqsuHYdTI5CkJvdpD36OKn93GN/+hQ8UjoPRVyA2Q95xvY02A8SfA6
+                                               
3MIGaYMROqRR/DKJNgobtAG9gfMdGrWAgICA7sAI/rqhpz4BBHS+TgjSY21JbLhHPFol8BNFGUCyNU+bpIr/rqBXTI/cf76VmIfMZ1T/
+                                               
BJccUqfpJtHLOLprUCZNjnLLhZHhuXuMDBaXIJ7HQ8eVkDUkWBK6DbtIOlzcnJfeIUJvIht1fuNOO5M2ICAgoGtIJliXzNkJBLSCBIgr
+                                               
vdh6cqoX8bCVgJeLMnrSuhLFGg6uC+e9SqZZx+N5hut69ipA9idQH3Hdgbtuox8TjLxzp23Hl+zw/LHBvreNDRe/ND5U/D2eWc3JUD7P
+                                               
Rkb3n6es1wYnTU+lY4K0bJAloIjX+OIddtaoBwQEBHQF8jo9P4wtKewDEnpYJxOnHE4hWXEyFtfNEyBV6qAum7A1gudvuP9UEiyueQh1
+                                               
w63aOEwMuy2FCYbDcfSR4cJ/oRE5dmyo75e4dxSykcMuJHWuXOGwC3WMDRcexXW9DrvUhzEdwnA3cE4CBH/NzUu2f5omJSAgIKDz8Nd9
+                                               
w+t9x0p4u1xFAyJKRfC60uW+kcHintRhjYXB1q9PLJv7cty3ioSLa+qhmkQGE2K8AbIU3vmRo0PF00HaHEd/mL0ONiDcdtgaKHroFH5O
+                                               
9MykuIZFl39Wh7QCAgICugKfkEcHi5/iZl8gn1RvoJLgZThnsHAzx9qpo57g/QYE93+S99Pj57ONdLYSPLORDQp7DSRxEiXjyyEPvccN
+                                               
u3CCeOa89FYiDY00imhM1SwBAQEB3YGNvxPw3E9JPYziCNT2oPktx7+po57gCfwmq1pWvOdpfMP1Sm1E8qyNlzA5pq5DQxvUQ7fJ0UbP
+                                               
9JKsd/bq+3tYQRMQENB1GMFPvHvuU7jUkUMo6l23JHh60yR5kvXoYOGbogxoRPCE7XXDTbioP+eEqwnjl2csfyZFGiDt8SwTowQEBAR0
+                                               
E0bIK4eLz4I3vDrDFgVCWPIy0GDxCFEG8AUj/VgDn/jHhgunJee99uZQSjfEveA0XLiA2yDQDv77BwEBAQEdhbwcpGPkI0v6FnK4Q/dX
+                                               
STPcsVEmZOGFjw8WXiX6oMtW0DSCDdWML+3bHc+v1uWYeb34bgtt0JFhH9pV03oPVyqpLZLVRgEBAQEdh+9tg4SWcvIPhE0impLY6OXr
+                                               
5OZdY8vmPI86mg3PGKRBUVLD821NuHZcXE+Cm4ZxGaXER5dXtivrbc5gbGnfYjEEMJWtAgICAtpC7bBJ8Ut8sxOElMZzlclOWbY4WLja
+                                               
O5hjStKyYYmbls15KnRcpZO0MzGeLmmAsAchk7QkYTZaHD5ivNj45BlCQmNpn9lgiC789jkxABCGZgICAroOI2Tu3wIi+wXXkIOUph4X
+                                               
x//0uqVBGC7+zCZq03qldv/4cOFN0LdJh4Wmw4s3Qpc3WLnen4ROAiap65p+Hjt4LdL1HZDy7/Q32iMV0XvkLg2lrko61Vtl1HCfnICA
+                                               
gICOwgj5dudNX6/jxHxByEiqoYDchbzU4/+MKAPSErx/H3T9pIsTrtTnL6VMDuBg3HXbgkcQ7j9xz5ljg30fnhics4hkPLp0+2dwD3h5
+                                               
MUuHbFKLS8d6JfeLeQAK05p2J8yAgICAtmETrCu9Qz5ASFMNz1A2cuiBnvfocOE9ogxotoKmEWyY4tZlhZdAn+y7jmsnvHjGP3mDlXEk
+                                               
SZNsdThoI7cFhvf+K77Yxf3vuQePREohe9oMFc6TVS9OX9aGZx2Xj0LHjWPDc3alzuC5BwQETBtIxtctdxt2cX8XkJKQIUgpDcnKvbg+
+                                               
Mj7c12/6sqwK8RuDkaHCct3CQHTrNZ244aL13GeGVw67sCdib7lyohRkvxr3Xox7vjrBjc9AuhyW0uANEvfNsAlPkVJyp2SKDxsWfZfg
+                                               
LsRtQHSiMQsrZgICAroKWcUCT5JDBf4brKNDxY9kIVg2AnoYxjg3+6IOX19a2DO3LS5sB71/EQ976n3oZfxfPXTKJg67cMiFpKw9gfsg
+                                               
V+KeE0aGi4PcMviWxU/+dwnUA+3BF7DsgBICut3qHq56yd6jWKcrkdaPDRXfTn1q89Q9m4CAgIDUMBJrNP5LD54HYPDVeW94ZqrhCBnX
+                                               
1nHzi+7Wl3byELyQnw4TjQ0WD6R+WU44uZHhd9veV3oPDJ+ErsMuD0Ouh5w6Olx4/8qlxfiOJlsBmC2MdH3yhR3eC3K2zcpkzB5h+vFo
+                                               
KiR1vhfgCL74EVUZVswEBAR0FiRNElmjcV96shxW4YTiqNte957bHLmTuNOMNfNs0Q0kV5Da91VtbiKzhoFkPzpYOEV3WpQNw0joJE6S
+                                               
Lr1qhqkTl5SRseHCL3Bdzhet2JNo1MjI8AiP7eMVYejPAt+75uQqwr/fTbwW2ZBYOGlEPH3X2BS/LcoB254hICAgoC0YqTcilduOLGw3
+                                               
MtS3n0wqDhcvBHneTSIjYQqhZVm9wnshbpzZ81TbGIawxmF0SeElIPO76J3Tk2f8KLpUcbUehP15yJs5jn7b4sK/iQIPHNunh+576Y0g
+                                               
5K7hcpIZjcmo9gaykjt7Fxu1YTqHp2JRZ6MeU0BAQEAqkKBkYpOeqRKVj4klc4vw0F8L0vkKNxHDda1MPoIwZYzZkRPJjEMR6QkeZMaJ
+                                               
S3nLc7B4IMMSsqzzjrOgdpik8AHGD9cHJd5cjz5YeM/40JyXjRy205P0thqwp9LMS28GawhpJ4ajSz6z2UInePXZv9yyuLAjdQZyDwgI
+                                               
yAwhUiP1Bt4phyl4XB1I57sgrb+DgB6lV0rvUtd8U0jqMpat37OK7MmO6/23HNK3O8Nt5Smnha2queag7R8PUn8lpNLsxCMOxfAgESF2
+                                               
HcPPgoTcD5/7r7DRz5WgufQzq010+9/ChNkiDMsEBASkghA6CIwESlJrRGYcqhgb6jsEJHMqyOpmepUkHQ5z6MQphGPKMq6cl9R92SCk
+                                               
Nli4buWy4lzGoVEPIg+akbU2bDWTo3nhxxWE/g0laPZosq6YWa/2fQByAPUxbu30ZAICArZwJF66iv6cgAQ1wheThvoOBbGcDWJayfFq
+                                               
EjrJSleAcJiBww2UTpC6L+vXHM4DsPt+acsLO0XwBD15acwgQuj83CHS9O2JdHyIPRGufEFjlYncYXPZQIzDVCNLioOqsiM9mYCAgC0M
+                                               
RupCbA1Iwr1ZOedlIJcPgIx+NTpUuINETlLneLW8dOQmSoXUcww1pBWGISto+NKQRq+jBN8tSE9IewjyshN6NOqB02b16WwlsoGYzGMM
+                                               
Fj8lyoHZYIOAgIBphHmqjYYmuBpjbGlhn9Gh4tGjg30XgljuJSFxQzCOp9NrJ5HTmxQP1BF8I0LqnLgw5MWi8eGq5+q/ldqLkAZUCXhi
+                                               
6dwy0nCne7Er83LI5BSrscHij0xnGHcPCAgQGNk08tTHBnd88sqhYjQ61HcsvPTLQCgP0FPk0AtJVfcnp3fOIYXpO1jahbOB2wGwYZHh
+                                               
iaG+/RhnpqNTQyjdAuIoBDyytPAcpOEG70zY9PZTG8g6/OHCBTzi0NcdEBDwGAeJvd7b5Wv6JEsQ+udAIFdAHiGhe+PpFCP1aTviLukd
+                                               
uB6CbOnLHsRDR8mKk9vQCD2X8TcvtldhSxZpZ/SGfq/r1TnMknoYC3mDa3GdrLYZLlw3ccjcZ1Jn8NwDAgKcl+sRIYkBpLE3iPM4XP8K
+                                               
EtlAr5KkLuPpzrMkwU4rqUNIeo7UEQc2MIwTx/q197ASJHnu6JK+15nX3mzlSy/AvGsuqYSdT3ZDK862kPq0t5J1tAOu3LRsX+qU4bUe
+                                               
77kEBAR0GT6x05uUNd6DxZ+BvNfSmyRxePuvOEJ3Mp2kbssokxON5PAPkuFw4WZuISBLMQ9xR/MZepngfO8aafisTIrSzhlXzEDcZOxg
+                                               
4VHk3RuoT4bZenzeISAgoMvwyX30kOJeo0N9PwVhbPRev6+SuvMsp5nURWTSlsMP4qWSyIYK18LjPWFsSd9BtlukD+mR9DC507vWj1uN
+                                               
DPUdygbU30BsKnFDMiKyHJLPjg8VD1eVYcVMQMBjHUYCJEOQw5Egi3vWHDHXhmC4lJHEvskjk25LDanTo+WEoW4TzJd1roCn+1UOv9gL
+                                               
TD6YHorOIfTysMzjbNhodGnf65Cuh9iAwc6S7qnEyw9ZDkn7oGH+oigHwrh7QMBjHEbucvTbYOGbJFMKSUaJvYZUuigJqRtZsffAuOC3
+                                               
e/HbRbh+mjsprmqwLQDJjNLL4+w+ZOhEbb9yuLgX0nYbh5rSkrsntJttIPYTO0817DETEPAYhxEMMTZU/DIJVcbYh2Xoo55IuiFG6us5
+                                               
McphF755qi/1rJaj6oaKR8t68MEdn6xRTcCJydlE6j4Yd17HF++wMxqva3Rr4WzkPug2ENNnLxnRfeUDuQcEPMbhL4EcHS4czHF2Dsnk
+                                               
8CCziK0Kkb3TSeqcJCWp67jzBMI/c3SweMTIYHHPVUdt/3iNYgLZEoCk3sNDL1PByJ07TiLNv2bDSnvo3Ea9zRqKDs+so/1w/ef4ku2f
+                                               
7+sOCAh4DCMZHlhWnAuCuF6W5XXHczdS56ThBvYQGBZJ3a3I6bsFDcxJY0v7Fq9YVnyRfySdYutkN8ZZTOoGGxdnA4seyvdkvXrO5ZAy
+                                               
JzFYuBsSzlMNCAhwAFkm3js3oNJxbjkco45Ecot6mLLqhj0DEpnsC8PfhwvXIazjuV3wisHCs/34ECQpkroMv2xBhOUPicFjb+c8Vdsd
+                                               
Es+F81QDAgI8GNGQFEASP1HilReGID6R5BM3NiykztU4+I0EdhXH+SeG+16zYrjv6RIRDxxH3xJJ3eCTLxq2xbRPluWQJhzKsfNUR4f6
+                                               
wnmqjyGwAPnSiUpCHfV6felURWwUTicrOXVJGMuXL0+E3/X3rKiP71Sovz9rmPXPt5IpYWTA4/FAGlfom48k4fYJXskdV+4HcymuH+P2
+                                               
BuNLdyhI4B44TMEx9S2V1A3iXWv6RgeLr4B91uqhJpnIHSInVLn86vuWKAds2Cdgy8UMVY6EKNtFt+K/tUfmzcCwt1hyaQR7uebmocIO
+                                               
II3rdYiGB0f7ZJJLQF4bZLJ2sHD/6HDh/fWeJcmI4+wyrv4Ysbt57/DcdxsfLoxpg5qN3Dl8BtF3Ac62M16hO5D7Fo5eqCTtkHxXyV0/
+                                               
Gx63xx6Lnrjvvvs+eZ999vl/+pvhMUPyRrpcVgdS/6t58J0geBV7KWoN5A9c6siDPyRwDyQ+2SdlFi5zTAt/aIbbKHByGTaRuQmIb7OW
+                                               
woaTXj+uN908NHcX6gvkvuVDCs+8efOeGpfj46JS5YSoFH0D1x+Wy/ES/GUVJ3UFOvDAA6XyUyd0fYK6nM7oO1E5+rZco/ib+P0TURTt
+                                               
f+CuB24jD2YnecZJ4gU9eyD+x0O+Rf2I+/Hl8oCsDAAyV/56YoeuPRHGx6D/zKgcXwn910flyhX4/lPI0jiOi3prq7Dkv0ql8h945hix
+                                               
dTn6Lj4fVy6XZf0x4Ieb6IpL8UG49we491vyTH8c619EszCT36H/jXj2+7Q/4i42kryQ/Kh8B/IN1f953LsTn7F8bAQj+OsO3HWbseHC
+                                               
L7iOGsTRuTF41cOJQO+M1VWQEzkGX38gtQxhkOg9MtxSUEPwQ4UTtDHNuikb792oz15sPbAt0V4BVXgEUDly/sDCzfMHFmyuxAOb91u4
+                                               
/2YQwVWo7Nu5/8upW3q7F4S4TxxVHly4YD/ROVCZL1f7TAFZbgKpnDmw74DsAZJluMYIiOGBbM/Zb+GizQOx08vPaESSU3iAZiQ4CT6x
+                                               
IQ27wQ6nIJ5r/fiLRANiLwoI82h9hOE0DMv0gpz3hr5HFsxfuJm2wecRNob8z0+/fXbpi8+X9FUWSPqQX2+Sm1qEByS6kIazmadm95p0
+                                               
QJBPLi5RPFbZt/IsPrPbbrs1fdnFJwYQxnLdc7zTO0FSFz1VeY3eNgbT36+AV/+RiaVzX6DRSCAePSVDnvc4ktUto8Pc46ewRvf2oW18
+                                               
e00lG3RS9oER299eiT5gC4QRDsh1RxDITaz4uG6ISvGj+nmiv39AKlCryl4PIyZ4nW+OyxUhD+rllaRIkd9K8UZeSXQgll/bkEdKkmfl
+                                               
lftAdq+H/iQcyHqSLhuOXXfdVXoHrbxRH/59iP97oesu0eV0b5I0KCkyTIp8jipH8BmNe0uCR6PxFj5numCHn8sNDknaraFk/oCg/8Y8
+                                               
0XjcW5lXeSH/a2UrC096UuX4cmmIyvE6C7teFs4HwZfiCxCuvKo+lc2MdFYOFvcEaazNSTppRLxPiBz6wRUg9EQ5lgziv2N8uHDS6FDf
+                                               
a+1QCoN49Zx83QK81NoGtfhtbeiyNai4F/baqI3x2TastSXYJ2AyEhICeRyjhL4Jsp4E70grfhAkJyeoG9mkQFJY4NV+2Gs0NpJYTIxU
+                                               
GBavDA9hvYvPtSJJgxHbggULHo94XqThkLySBgoEf5UNnaRpoHxCQ9zfz3iJXo2jhkG5F2HezfCM/NnI8DnV0Sju/E1+p7dvDYQ2Dp/l
+                                               
74rkWWucYPs9ce+dYiNns2sqlcr2/K8VCVuace8L8fyExv8RhlsnzHfXE4ni/5WHHVrmge/9jQ31/fB+t5yxm2+xuolCR/Yy/kyvnksp
+                                               
6eGPDReuGIdXv3JZ8UX13jsnZmf7ShsbVllxSPFFsMOd1XXsdTZqJYPOi+dwGhtF6gte/BYIIwZ46M8FYdyqhCNeNis8r/JZPVMgVSvv
+                                               
Ec7WIIvvCWmop47v3wQRvjLqj14LvR9DOHdpeBsckVZO0GeJVhWR/0l8oO/dTofE14UD4lViXl0pVV7G+1IQfJI+N96t5FuOHzbbcJiD
+                                               
4UHnPA4/MR1oRDh8sxLfK3y2BeEm6YnK0YmV2HnjFOg8RP+qsbHpQjj0+NfzXk3Xzy09aQhebK7pcPap/JW9CKTzNfjvjbgeiO9vwPXN
+                                               
1mNLCyOH0SWFl4BAVskY7/TsQyNED6Li8M0G2bIAYcu+7kOFO+nVw9N9/c11m4rRW9WtClKV516CH+fRocLncg2LOS9+g/YAzre3foMX
+                                               
3xhbs4LRu6WwQvnC37QC9prxErIBaX3N80zpydHDW8/P6tF9U28lpvR+jFQWLVr0RBDRRTosQHmoXB6Q02EMIMdvadib3LVylv5FNLWZ
+                                               
kZpOVl6lpAdyl16CxF9JeR0ITMaqWxEhYf8jz56D50Y13g9p/FaBAA+WGxuAk7noKdiLNw1tZD0O6N8WNv8D9Wpj9BCIdZH9t+uuB25D
+                                               
G3LiGTaUyof7P67psTxJtnNtlS4LEz2GwzUsnS+ofEduaI4p89ngEwMPyaB3SAEBddeT96Xq1csQzmp4tnzxSk9luhJe/dFcXljvqc7G
+                                               
9fPmxd8yXHwW0jZuy1MhtTZpIfTedSx+88hg8R3Ud2E5rKaRCmPkPRVh1MOeJenj64wWqIQg4d2CFO9OPLtSfDfI4Dsggnv4nWQAcjn3
+                                               
gAMOkPWyadKs6SP5Pgt6bqZuJacRDhXwPw6r8ApyPk4JFPfgGsUn83dFMxvxdyXLypGq28K4Gmk4id9NJ+Jvb+rxuYY6/XSRPGVOAA2F
+                                               
6rwP4bxa/5YGjGk00Z8NTfPVwujv739muRytqNoFn9FQyU1NgDhJTwh5spHPwG5c3WRo1hAmcUEYX1c7b5LnS/Gg/jUJDdI0JWqGaoYL
+                                               
x9GLl33g3WEaQiS65LGrImE4sqdXLxuRcfiGni6+3wE5eWRJ4U2ji5/ep9GddahpUAcLH6MnjnRlX1Ez6I5NxOfLbln85H+nvsfoUI0j
+                                               
5lbkhkqxLT1WVlROaOH7dvzMScMmFWZr6jQPa5qRhBlFlR+a9+s81sqp7KKDCCZI8PwPBHk90iDL5hhnebAFzE4csoCehyDOayzH58sN
+                                               
Cuici9+uVhIV4kFYx+jfU5KxPB/FN+rzQpYkLoT7WtOp3moy7NPM3p7OXWCLMX1+g+gsx8vlJqBJ+h/XqmwYrBzQ24fuB6hbwinF1wzA
+                                               
5pxInd8/H+Rf3gW9gZ2RjmczjciPlyAO4vEznYwXbStKXV62tBOu2+D5X2geiF3YQKCc9rnGpryLXSFPkIeb6GwFexOSJDE+3PcFjg+L
+                                               
d+lIPtN67U6INigMl0s3NzIu3PIAZMjfr0RD9InxoTkyfEfMJi/eiPi2Qws7Ip036tLHrC89yctk3KwNOoZ8vY8JsII0qtDz5i3s41AD
+                                               
Ksk7QUjL4R19G5X0dFx/i+tlkD+hEl0OuRSE+Sv8fiLuPQ73vgcVaM+BgQFpLQ0axrQVLsRBKqIS8APWdRfBb/h/W3wW4lUCutuGVlIQ
+                                               
PNMhaQHZvkuer5L3H+AJv40EjOsh0HuBhm3j/g8jnDKfbUGYiX5E9ZOmX8nvH3vttde/Qv8++Mzvm+dXpNG6kC8l8Zkm8U9sj3i91eIk
+                                               
OtGAkPj4nw2X5IWlCXZ5L8MQKVU4pPQA5CaUkX/yWiOl+EZcRyAcdhI7Ik63Ik7P8XU2gqW1v3/BDtBzjRK8DL3BJuOqm+HcIN+R5yyf
+                                               
fMbKSFYYyRN8AxVkutbbHOzRjF5mJ0X2PMdV9mDhmn2ZoBwu3I3ffo142fsSAtp1hpyvVKgZix8sHqFvpubZ6G29evF/WfGep8mkPXTn
+                                               
yvtZA2ZsfQGX4YYoOhhk/V1UhCshd0GEQFhx0ogQRyleDaL7HVdRQN9uql6Qt1JlgV9oEY8zlBhlSSEbKP7Owo3/znW/OY8P399p//Ha
+                                               
DP7/8Jw/pekmiXFsn8sXucplHW2hYfPzRjckEv1AHyUaVi6zEa7Pwf3jPsEjjjIUA+/3pbRzEkYU3wJbP5v/NSL4mjhHlc9qumV1DMI4
+                                               
Uf9q6v2nhNeIxJ/TeFNIuNKQMq62hp/C4SX7LGXH4hTFly3ca6EsB2yVH5ZWpH0PPHuH6nkUtpFhnmo4A7L+PY7i1bh3Vz7TTln0SX58
+                                               
ad9CkM6l9J5JJPSqIRybn3aP3hMS/UOM0wNHovEZ7PsT4rQ340viXF6b9iTfeg1mZ75JjPRcpUSddd5DJqe5vBUN4FHURxvM5pVGrbC1
+                                               
X7BZeVDgF6JC/W9crtC7Ssjaq3RGXKyoJKtHcf+jqCxcVvcof5P/dRUJn+PzOt58Kye74nnxyzVIq1hdM66lD17kaxAnWfrHdeqI4/1c
+                                               
GSI3AYjXZxzBmSdb+aT+RTSNn+l3totP07Fs9Rq9pZGO3DaQ0OQet/ZazsVsQaRJuPB2v6x5IGQF0vzDbru5eQLx4svRH708up/5yP/8
+                                               
/DXUEDwIXePsyLQUfUb/ItrJlyRNiPuZZlvawcpTM9H8kTImcYvik1RVS4K3tKJX8iamRxsVXF0ZNP38ri+F/cl6Ke16r35X/7bFhe1G
+                                               
BwvvB5lcT0+T3rOb/CwK0ZP0PcLppsC7La5j2Pqq/+1jw32HTRw+918Zz8Ve469Dq/ZmcU/CP2wF6TqEPRIdfsrUeLLB1RU1196mO3Ru
+                                               
cac5uQJdLdQghP1BGmegQqw1L13JIvFC9TOJS8hrCtlEksfVnpXKpRV9FSr9sXupVwZ0avOtGhgZoOByFcdvNGy32qQU34I4LMV/78B/
+                                               
78T305UQ1LuvnGhxSkMqbouC+E/yrLeG3BcNdzXC/RKHvfhcq3RXCau8O8hotcWPV8T5XOTZ2xl/GYcvx9ey8cB1U8yXqnRSUvXXEHUN
+                                               
wVcbJbe+vRx/Xv8ichO8hbFw4cKnQPeVfBuVjRPjD7maDRTtVSMyzFf5I66rpOyh/NBuaHQ+IUqBFnnBuEp8ofsjaiuTCaTrD05/In+H
+                                               
3k/xfkU7jZlAPEGP6EeXbv8MPYz7Cq7g4NANx4B16ERWvxjpdEG4nHI9x6rVWz0DvYvdNWpbLT/QvW9AoBztg4b+PNYD/SmxZa/BhlNu
+                                               
GC7+B3tKtKn2kBrZoJnQNm4riMHCx0QxsMXs7WPEQSBzd0Ul/xEK/EOs4KwYuvTOJ3S/suQTI3uttFJxy5VL+Aq7RqUlkeaBR5DvQNiy
+                                               
zh1X864tffyN3+2zDVX80V6lbzUOb3Hmahmk5zZnPwnnDtj1f9kzQMX5GnoE/8OxaNj7RfIgMEWjlvzHSVNnr6TRZFrYiMhn+U1/51Xi
+                                               
X/siUU04dQT/vQUDQvCPaLp/ZvHyywkglX6KOCfwbP9i6F5ZtUu0ojKv8jyuUqJ9OTHPRmDvvRc8jV4kvm8PMj7T0stnOE8gSh2aVMJq
+                                               
vBDGd6Wx0t4OiPxw9nIYloWJeG1nK6U6jfoxXY71wuN8O0jlPJIuSUnfgE2WOeLaGbJ3umQ1DcPhLow8nKR64tOB3LvG8uYJsPWHYKc1
+                                               
kjdRJC8B1eV7T4FDKebJozdyECdMKbBrpmWT4sVzHH+wcPPI0oLM72xe3LyezxbUDMnIxF85GjdiR4Uyb70zpN5YjFydNy9j9NUK3CmS
+                                               
t3RyshFhXObIy41/KxkK4Zjwu/72KL1NTsJxpQd1tCD4hPCi/mh/1eFWspQrv2pFIFOl08KslCoRdN6n+ePyBvH34+7Fn7aVHggalTNg
+                                               
A3n9vr7C+iRNb5dkynRrGKtsCA1x3Ib3UhrEt6W3442HvwqNiPRoqB/h/UZuaALaDHG4VPOL8hA9TP7XymaWRk7o45nz3WSz5OdGPF+S
+                                               
m6YRtme7fhVwq9rRwTmLxgaLPwLJ3MsNxXRNN0mZBNXOvjbyMg+usrkWJ1bx+cSxQ+Y8T4Pf6lzvWD8pV6X4IuaL7g20EuX9JfyvlUPT
+                                               
C7AG6h8Hb/f/kEY5mzWrFw9bia31JbXjRDHAXph+nHWQF5T4gaSHlvt4Zq5Wbuddd5fY64WNyXr11NbBu10msQSmIr80MBJDOpcynRSG
+                                               
R5IhedgGVr7oPTZ2S2J5FXXUE6SHpDAwHJlnMA+6VPmG/lUD6poqfd7/fDP2NCU76WEwni7+tXGnaPzVE6/8df4+8+WwiAYVduvl6vEi
+                                               
jVxZJJPAuGp+ROfRk5Y768AJ3ZK+KatoSPRJwxdFR5j9qRsELwcuMI0c/6Y9KNYY4v7dkOZbaUvmA+z6T9uUrZXdvC0OdkE6ZI8hl6bK
+                                               
Ctu6oQm62i0nYZCQ6ifxuFxxdLjvC/SwOU5PosFnkg+9+qxEz/tlCaCcVTpUuIk9hiRM2M2Ii8OisOlxsNH9Vq7EVt7SYLNlL8OGwiaW
+                                               
zn0d0us2FONhKY3t01DYKOhyy5V8K5n6uN8+r7MNCbmzAqCS/Y6Zq5XaebWTCXg6RLx5Ryrojnsk73uZWWGEhrTOFaJjQS7pXjPl6BIU
+                                               
5uWQY2XYhIU9qnwSNvk04nCTkrt7OaYcHyYKXUWZRAQ+4YCUvqo2dcMCUfQB/k7youi9qcjE837/C3Fx2wZorwPxPxFx/TjjrvH/tHx3
+                                               
q53W8h5paOCJ4/k9qIfh8+rDfhOPuRT/WsfhH3bPiw0uR8+KWxS8jAJd9MS/it9XIrz3iJImdgGS3xCvb2v+qgdfOVL/IpL7zJYoAwfg
+                                               
3odYNpWAzjfyb5QOg9kMZB7jGenxaPm+CfF9J+K/fxQNvA7hvxqfX+s+u+WgQKp8aQcc35U3SOs8xImhubuAYD4EsrmGJMXJP31hqurV
+                                               
NyAnFbvHeaJ8ZrBwPMf+VX0NYSHtr0R+XMH80Dym0/Cws3N1aW0rO/cKbEUNh57gjZ9JL14nsett1Eqk18OeFLz4ZBdWe3N2tiAhd+7G
+                                               
hwy9WisORZas9YCs0wlCevIHSaxdpctT8ZJnULE/aAVZK/sDqP/JmH89cP/xahtX6EvRV/Svhg2OVQS+ao+Kc44b2pH0PIzK5G/ElRqm
+                                               
k94tKt05Gp+HZMihFF9mb8TWgx437rtWyNQN4WyELQ/kf03iQDtJmmCTBYyzEvEjfJ6fxWZug7E78dujVm54P58D+PykPDJbMVzY9Fwj
+                                               
eMh6NhRyU23+JnGBzd9neSZp9jYCa2VL+w/6D5Y4uvxm+ZaN2PDdVnjJi2j8HXn0Nj4znYRGr5reZz3R375szlNHhwsHg3R+B5F9U3Sc
+                                               
niJ7z+hnExm/Z6OgXujfJpb2vU7VbeUvfdxn/vwCHIGvoTzYjqlmGzpYGyRfo/hks0PWMjtTYM+IVx7nh/Q/pBuRZXv5CY2CDpPdxR1C
+                                               
fb2zAQm5czwZmXmtVlK23NLl7yExT/5OVFIZM81T8cyT6++f/0xU7Bt1LPZhtzSx4cZeCUGhEnxUiU3IjORkhNooLmZb/Mc3VK8lMSk5
+                                               
3Y40yJr/BsMjLVHVWXkr9NjEsPQoKkpIPux+WSpZii9w6WRFlvh/UG5ySNJp8Bst3LsU4ZjXTJHywfA1DjoMFK+xuYlmvSyzFV84gk39
+                                               
LX/vwX/P53/+szZcRCAeX5I4WCNTjmWtsqJheICfh8dqGmi7hnMt2lg+2E456wToKdZ7iyPv3GnbseHiK+FRngbSWUPyJgHp8A1JXl5e
+                                               
AuHbJmOPQL5yx9BTkyWOF3rpQRrfgLRe5/Ig8dqt7nuT8tW9foBmdu4p2DANG8vxwcIpeQ5gQc9JnpEJ6aHCd0Ux4K+G6llYwR0YGPhP
+                                               
VJyrtOBza9yZGpJpJTJcwzgyriRNxj0LQfqkweGEhQsWCeHq8MMD0CktNHWSGEksvJqdQA7v5L18RtZJl6NxeKs72zO8+jByrZQqezH+
+                                               
jPt+CBOfr7VlkFnib/Fwbw7HVzEOJCWJSym+CP/La/XuNChJ6+PYe+Bv/Iz4nsgDLuwZ6DiFv/NP012PWpKvvBU2+CfTT0IQQc+KV/6m
+                                               
5efvaPRkt8JmBG9pjvvjfsT7UdpUG54bbWWS2Y6wuDF90K+HfLhwQVCyskPDmtRIEaaL4aLXcxZt4KeBn32xA0eQtzI278dlJkCCItHX
+                                               
j9PrQRffALlPcEkfyZ4eOwnfeZ3FP48Oz91fb9/qO95wDBrXZ9ChQTqdHV39IrFX59mUB2iTKKrIkCLQ1M5tgDoblpV2YRPZaBQrIOz7
+                                               
9BSsrBOu69X7XzuydK68Wd7zBG+VRlaRRPGvtXJO2qO8lwTEJCtcJK6l+CSreM3IqR4J4VYq/4HC/SmQ1U/ZxUel/xmI4n1GSA2ISQo0
+                                               
96QBKX4fz/6QXVY2EkbwTUhAnoPuF+HeH4Fgf4B4/4TL8nC/EG8zEmwEuxfp3V3iAcKG3u/heioakflyk4NfAZPPHBaS8N2ReD9FPN5v
+                                               
L/K0IjE/jv39/fS6D4OOs9jIIF+uxferoPeXuKLnX07WUgMNicDCgl12cyQj8wangESO8Bq8JEy7H3F9IsOQNDh7fhvhyTh5Kzva87JP
+                                               
fin6MMJC2iXcHzipqMjxfMhfyaOjvXLVMB3TDY7Tk+wp+pPg1sHCs0E+Hx8b6vs7PXd8vgfy6ephH8v99fdboxxwWfDNrEfaa+EQZaN6
+                                               
b0OXG2xotFU5yYNW+cZxdJmXaMP+vq1gk+/r2615ViOt58tgaFBPNp02zt9z8DMJhf1bSu7WgvsZ3IsihY5eBeKeDDFkIUqg1b09UZmn
+                                               
QJa0dgoMs8Y2XHIIEpwDqTkLNCVmg517EjJOr169/iQYX7pDAV7760d0rJjwJ1HnVSrPQ8N4EuuPeO3OmWtV523u6z40xrKZW5YeZwpI
+                                               
OSYfLdjb9fqIekLXhu1f8u5ZbzZYiR4PiPrOO3N48RCZz+DKmuRoP8SlncanW0gqKryUxcxsbaV7ZUI1jdh4/D0l3Tc8I8E3QyCd1rA5
+                                               
m2a2TuZ0AqYHQn4Nhm+IC5e7HsgunJAvRUPopcg7LV59rw7HNBKdq8HnCRC87MnTqSWSfjlBr+koxM9/a1gmMscGd3xyo3RJekHazdJd
+                                               
D38Lg9HBwjd10pkefKYtDCAyFj82XPj55uXODj23Z7x1O2NuQBXFt5IokeFcQTA5gzMIdNAb4Ak73LzJViXwe3eGfEqxHFyNz9dy2MBP
+                                               
W0qwYNRLGuR5hsj7XCPU6zKZCnmeaQQ+l7zgpI1r4jhkhB+XNM9nvb8e9c+3klkDEp2M03NIA9fTlEA5j8AhJ5srQX3JMseWzHnZfESH
+                                               
PPikrKDheB04gpO4F9hvBMl9fKhwgkwmDxcPGh0uvPTOD2wn5xP7YLrp2U/l3dtY/MhQ8cUg6lvdbpOZl01u5Fux/Dwx3Pca6pMGtlfK
+                                               
ihEgrtx75QydXJS3RtsQdvFEB4dN2OKzUHAlgkzOuHv4f2eGf1zhtBegINHXkZ7tmK4OefEBAbMdCeGgnh/Gg8NJotzwr6YuTS321vO5
+                                               
qGNuAr/9HlrSy+OwD4h9tThqpfiaXat7T8lqofHBvgs3f3hHTnKSVG+H/HZ0sPip8cHCq29avMPO3rxCgmbevf8Z+j7PYRrVm9mL52oc
+                                               
XM/nm8fU1ygeM4GE/GDYxSRfb1e++oxNI+zeyZmY8wfcyhJ8XoPfJiDcrxvdungNf7f/eT+kdbewtcjzOmewEl072/wokHtAgMInYdTB
+                                               
r+owS1ZHTubkZEinHH9f1QFt1bNkKxRw0G7QP6IjCAzvjnnz3OlmBm4RoPu6byYhc5LTTZKK530DCPrk8aHi4ePDff03LZsjq698mHcv
+                                               
vRodx+fvK93RfiOqO+O6+MJG7uPDl80mhvpkCxWGQ/38PGMww+phB9cpSebz3ulFczWLKzhoIKLzuAIC3bgFFW6qFUXP5ktT/B6VosOj
+                                               
cuUc3G8vwuSZzOUz8rq8eO5uK91ktUYHvIqAgC0GVtdZL0DOP9XN4rLOsbHO2bkCnxbFDrmJzIZ3ED+eEuYOXHHDuQxvfVmPgbT6zE3Q
+                                               
ZLknV7wMFx7lBCcJlpOdJHqOh+vyRa4a+sPoYOHrIP+3Tyyd+wL2AKjDB1e9XKe7ZKJ3cAyXTPL9ATQUqbcw4Lp4xMcO6P5DTxzt53u3
+                                               
INz36/CGZCDEz9Q0IuRMrwCF5yq+Ddlq0yxCTxV6FYj+Eq/FTkfyunOlxlleuLBXpoFUR8MFBDyWYESqG6tdyqFY1LmswzOyWk1Etwhp
+                                               
p5fskfsckLodPE8OQMPjVsWBI47gPbZef2LpnEUkdRI6yNSGUtz2CzwNC943h1nYCHDYRJdAbgLRj40O9f0Sn5fzPYCVy4ryzowPPdpv
+                                               
hZ7fmtmLZ7jyJvFg32JVOXNevLXoXIpEUlbjZm3RbfxbvGjoOZO9AQnAQbpfzEg7BV/DTRKt68+/o8M51DkVyfN/G5KZ8N/UrNcdEBDg
+                                               
YPUdPeidUW/+kXOIxp2LwK0poki2ODC9WWHkzu2eQeZnsT6j/le3sEZ44sDpBnzmDdMT52ZrbtVL0wlREv868+5vRWPAN3hJ+PqG7wP4
+                                               
/W94/se4ZymXkN697ClPpH6SM4dbdOI0tRcPkUaG8UJjcvVtRxZkDrB+2ep0gSQoRBj1R6+lMYVclawzSNJl45DLHnssEiMZqVsYDSDE
+                                               
7xcOeuFaeCiNSJ5hufF9KZzRb/H8i/XxTs3kBwRskbBeLYiZRxPepXUtXY+5KslSZL6JTX15lkhaXXUcEH9fnTWKxUe2jGBY+P83iHxC
+                                               
kiuHi/8BUr5cTptyB5U3IltfhHiV7MW75zAMPXsKt0jGf3fgv8vGhov/MzLUdzg+r/L23q/X10rEi3enRhUP1yjLqhr9OD3whzBgQHup
+                                               
STxjNXBacStXSvEYCo6sidW3IFMnCHGRAsI48W1Qa8mlNbdwXMNjq2Q2RVHls4u0MQHCOuuAgClgQymop69gncrp0BnB31TZt/Is6svq
+                                               
WNU4daXoC9SnCzvqRw/cMZjl+IaXzFuUTJZyUhQe+CluJ8jMwygUkLZ4/urdu8labpnMCVZ43zz0PE3D0UikMdGJ2mtXH5oc0D29iz2M
+                                               
EGHs7WDAK3ViNNvwjDc0Q+9bFDtiz9xaGcm73Q0rf9QGx+Ijrbr8FsVj5XLlTfIQoIVleo3XGpp+d+BFFtFnH8sQ2zWyTUtxKzge67ab
+                                               
Col94NC9x+spZ3bopB6W4stsfyCfsKdCDblHlf/2hmUbcc8Gjeed5fJ8Wzwh6Rgf7jtGx9bpYZNUfZJNL25rAg7DrOOYu42hu7Nwc+uV
+                                               
FTXUw+Efxnfa18WzYvCK1pzLku4XQ2Zvze2c0o3cz4T62hkmqXbbBgZA5LKUEmHIvuauJa/8CgVEdhUkshSsLkMmdbXRbIds+Jz/ktD0
+                                               
FYiZQX16pUzmxJZqO6Yjq0yC1XciLsfL1TOW4VWty2nFbRNcrpxlOn3draD1Q4BGZgn1aR1vNg9ge97wzAfZwtomWkGc7yaBcrULCbWO
+                                               
YNsROZNWib/R/1OLe1ZOyBod7LvQjj2cTi8+KQicKKEx83bXmEF4lluotr0nRV0hPI6FUAviOn739jTvhSEZn0yaAvb4N54disZozsDA
+                                               
wI7coZM79uH7XHpAnGDCbQ0rJSDpTFuBZguYHpd/rdPFVVZcGcVe3XzuTR7HRQptyYn5ZnvcK2aj7STOJhp3E6uzU4ndWwPfGYrk7Nl8
+                                               
SyRR1+3kse+oOmJSePXw84FkDV0PTUHuFOm5C8eU4w/xWds/ZsVQYQFIdK0b6841TNNt2WBLNUeG58oBOtO5ZDIxNjzvQ9XQMu7tGTeN
+                                               
JB48Gwrqa4fgCXse5Metb/8G3XdDt2z9SjhimLpAdQtW+fRrDYR4uAVwf3Qw99BAL4SHkp8Pb+evkBX4fiu+3+6kMo5Cez2ulyCNP+Gc
+                                               
AtJ5MI+1g55Jm3R5FX62IiEv/Z6A6WKDh/SXxLMrRZ+BTU5yk+iyM+VNtBeuKyET+H0F/r8G//0ONj0J10+DNN7FbvxstF0zu3QSRvAI
+                                               
ZxvY69xcb6urA8g6Dx0fF8WuLk5VH2l7sb/0zsvxXea4JbobCPLUHwL+Hp83krxtaeE5IM8VHKbRydN6gp1p2cBVOG4pZ98hjHOjrZ27
+                                               
gprWtJ3umpcB0PN5VZkmw1sheVb2BdcDMAgrpDOBRpWQk8nwKF+KOL4PBf4UR9jxA+wN0cuh0DYicf3+4vo7xO7VXtQa6PozCvQXUcAX
+                                               
1ROW2mBWET3jXE+w9L5R2feEzY5Cmk+H3W6GPNzQdpBGdqPU2w7kfwV0fhmOyyt5jqgGJ1Dbdb+CpUQzYpftj+N4Z5Yt2GhfXGOkZz+U
+                                               
hwPgPLyKV08WofwtpKC+LCCB4vanqypC0mt1B9c5sPOVtBmuWT14WcHGz4jPu6mvUfzrkPS2EfbueHZU5/vSNC7kIzv79WJ4f4nzyC2P
+                                               
xwYLl+omX3knRLspsppGXsjyD+eejvLnVzZ4jv8jme1eHMo6HkexlS0j/f0Dz6XOdr14hW8ImXjTz9OKRpWwv7//mSDhpSCT85Due0k8
+                                               
Rkh6+g1FTr1JxHU3J0v1f7E9dRlx6e884/RIDuto8AKrsL2MRrYDEe0qpF6OLkTa1lpa2QAaeYgtzC7OBo1tVv0ftnMvxSS2w28I58/I
+                                               
pw+SLDV4InktfgYxKQ74vhNs8xbUw29CLoJ92GN5APIIhGQom4HBRugtI812dTYhUcs9tCHSvUTVElJvLB8q8yrPo26ts3zWbJ5G7GB5
+                                               
Hi0pW+NOUdeTdPKkNMTrb5o3jG9arrGVNDft7TVc9OS5hl1X0mRZqz5dIvMCsgXxYDEZzpqW5ZI+WaICHMMWVQpOeqP7wmdkHTwy8KeW
+                                               
4R2qRLJKAteZ8LoaVcI9o1LlK6hoY0YkWuApNeTj2dPEt5kv8r/cXyUs0cPKKuTnCvjNUSk62n+JTOM3E7aZChxySWxHcoF3CTc0Ph7p
+                                               
WGW28xrDPLZL/m9qO5Rrtd0ICPFjiFPy5uJM2U6JNgk3nhe/HET9RcTxZstvK1cU/pZWkmdKsexoCCR1xwge6d4XYT3C+9Ve9XZtJbZE
+                                               
chVy86XU14rgrQzgil5DdAnThWeZ183ytJHIShoe+cgiJIq3cmmBh/xJ3cO9vUnR7ogQPD14bkUs0QamneBBGh/WTKNkMbwv/mEbx6jq
+                                               
pFC1gRkhL4131UZRtIeS030e4VKqXlWVcHy75BWny1VA8XaMFPHbdeweI472cknSBe4FWKU2wHYVeNenIg1yIDnLiKav3nb1NsgrzW1X
+                                               
jq9FfN6OaEne1udzt+HbBp93Qd37CuJ0T12Zco0dhWlIKyBfIW2U0ZK+gOSVC9YjqUsoO6/nfSp8zsJNI9Zb/7sNA9Xnt8F+57sqqDu/
+                                               
0LJr+V2vt5VIo4LnuJBjH+o8TfeNGRvqey/fTnVbA8gwDcfi6c3PONmj8eGB5zZE8wnGVzYfmyZOSwo1yYKZTWPmML4v9gozT8BnJSJm
+                                               
bGglL3yPBIV0J3jsnPC7m5NSmj6rgI5IGtuik2LhyB76RpLsLfGoQI1q04o2jajp8eDz87nSAp7Xg2I7562TcKfTdpQa20lZL1V+aARF
+                                               
TEcD6dsGHvZBcbnyT8tLxI82kThqfPPYxsj3ZtS/ZzMcL8ykDqLcHKZhUrKG49bAl+Pf2wqmRrazcHmlrfWZPD0GGXKSdLn3bIQcbSWN
+                                               
7uF+LbcfINFz/xi+tITfZE8aWV0zc579BsaFJA8P/i2Mr04QTwvBJy06J2a0Zc2TAfViXbg7K6VKRP1aAKYlUW1Cl+45RP3R25GOa10l
+                                               
lDT55OSneTqFYYunpqsgRkEWb9Yo15DIdELtJiTCpY3oxR2GCjlWtx1079iOSwRL8TXwdKWMEt0kecsXLokFwX6Z8VHSE2LXuNXHN6vI
+                                               
IRy4Xs4lpH64ftoQ/ue9sLOEK70ieTaKT1N1RI0D55dBlIMvKR9QGJ6vbyqR+93z0XcTxwsOo+8Frzik+CKQ+AdBpGeAVEdIqPceNlfE
+                                               
thqwLQqmmew36EHe4xNDc+V84Gndk8Yyna09utC3eZ6Eb+Q8YgXtBhS05zGMmSKetKipAPDs4HXIqfKSDtfosRLWp3MmRYhBViMwflHl
+                                               
Y4i6VLTptrUfHvL7hShLZ7EsacWm3XrRdvqyTnwXerCydzfRDduZTq7lB7meyXDZyEC4i2MnG7x10uhH8c/r58H8dCEOp6hzkClf4EiI
+                                               
88d8ZSOl6oiEbP16xPkilgNxHLOXAeEhl0eVExF/2eLXT0f9UIdsX7Bk++ePDxcOBqGfAGL9G7cc4DJKTsQq2VJA9rJNQSdfjqoX6t4o
+                                               
WwcPFo7XKE7vfjSWGe5E+fgCLfCdqIwstNaVu3TevIV9DKfVZMxMwi80bo1u5a9drISdFE4uPspKJD2MKP5mo4rQTfjhwFF4C+I0ovlO
+                                               
4aqOnradNkLr0EAOaTJqSKpdmH1Qx56GOvZrzzadbvRoZ9dooRxI4IClxa7cCBDe8IUaj8ykq3WCBH8U9QF0KoS0aub1Ip7zmrylmi0c
+                                               
15C4nWJL8en6ImDDMi1j2jy0o8EboiuG+57OE55AsJ8F2V4CuZf7w3CDMl7p6eO39R7Zd9K7X6cNyl08UpDxmbG9aAhk2LFqUDFujcFz
+                                               
CAqBTPyozp9bJvUayfuFBjbgq9P3auEXD9nS0+PiHXhSOUE3eus6yXv6Hwdv7ROIh+tROLt1oifYdSHJKwltQho6SvKmg2cioGyJ5y7h
+                                               
dMc21Ot2dI0q/y0RAIx0LS58kxpxuV4btqzxsDm2TRXdC8ovAxAhevSI3oR7ZHsRPqPPphPyT5U3fsk3wJ3Oqcsyx7ftSD79KQF3nxwZ
+                                               
nFPiUA7kFyDe2/iW6Zoj3Ni9bAs8KJOzfCO2LbLncBDH3knwo4NF2ceemPbdJAEE6ApADMDAeZdONZNqN6tU+aFlUreJJy38eKDQH8O4
+                                               
mkcnDVRtWnpdpCIx/kjL1zRZXbO1l5dPgMf4PdeLkO54L/d4GgrPI1UyWucP1+gGZnmRPIv8aGccOpVYeWU6kIZ3aNAkFCEVI3g3hBbf
+                                               
o+nNGhdbA78WPd0y9anDlqziAo1wPu9uq0fes1OKpkF6IeVy/DuUrTnUmacM01sm2fOkJv0pwcThc/+Vk7MjQ32HcB09SPkmbgzGYRwO
+                                               
5+gkLUmeG49tAPGT7JsSPgidV/6/kRO7HPdnowHdyTDWtHvvBr+i0qjqZWTKmClEChEzHPq7Tjxp4aX7X9Bl/ToLrlVyL+6zTcSTl3SU
+                                               
og9LQoFOeKM+zHb0rswzZbgMvy4+s0bYMAkpgZw6sTjAbB71y7AV9EvZ6maP0DblYiMlLyB5+c40CMHIECQcOLk3uyNnq3RGI90WnARv
+                                               
5QHk/nLoHPPeUs3S0EvPRj33ywb2HdiROjvBEyRXO39Vf0rA/8aX7bDz2HDxDaODha+DrP8Kol7PbYO5MkcnaSn07rnskVcZX6fodxFr
+                                               
JOT7cOET1pNo1KOYTlQ9jVL8XiW5xCPokMhSJ+oGySdnOHYi8/LAwuUVPYvvsNBa5aiLd6dEus910ui+Tojzskrxo6iE/yUJ9rrP7cJs
+                                               
x1UaUblyjjoElG6R17TZDmVAzgZGGf0b0rmTn94sMGLt7+/fwRsO6Sa5U4x8b0ecZVtdL+5J3qOOv0vLep46jjDEPlfZNsHecOBz8P/f
+                                               
tTwwrVnyiffaFsR/gS5ZcaLx70i5NciWvSB6Ej6+TtI9MvTUOSDtBaNDfceCqC+C3MehFhI3J0z5maTP/WUoHOaht87/SfDjQ8Xf45kD
+                                               
VN2Mk7vACgIzDQb+k2ZSp8lOSJ6CAvIRCRjotHc5Ffzw6Ll75N6xCigVx3lH7L00flnF/73TpGWHmMsLUfmJqh6mQ45XK8U/13JC6ZTt
+                                               
Gr6ROkl8u3bWdtS1QVei/Kh+/DolEtJAL+ozSrrMC8a1PrxOiq1cu5arwBi+zXfVvdR4tMaJac1iO7GNCyP6LVRVHcM4LuK/SzV89iSy
+                                               
pJV6bUEGX0KTnoHavKPkXg9O0HIIh4TfaHz8pmVPeeL40r7dQfhDIO3vQy6DjOP7WlwfhjwIWQW5At7/8aNL+l7HZ/Tx3iB3BRMnCZQX
+                                               
MJSIYfBOjxfaJA0KfJQcZTVdJF87y1/5JOOi6ewEQUkFUNnE02mon5WpkXDVi4btGgQ+1zkS0MrIpXDR1zXJbdnZnuW15sWVDpSRuvST
+                                               
5MV2zexn/+nzzu6ds12yUgSOyDsl8Q5J2WkFawS5PBi6JhhfXNstX0zjVPKIy+/KhfULGvx8R3n4trwD4PKNz/nhtBIJR9KD/Fd1W3Er
+                                               
Z/RSkrdUM+YDdRq53wRyl00FNb5dJfd6yGocELKQfZPx8rHBHZ/M4ZyVQ8UXrxws7jk22LfbyOLCc25b7M5dNbCxmKkzWJvCCiYLBTLp
+                                               
J9462SyFII0IybNSozEZlMCBdsgnJZJGDAVpMePivVlZH8csQvuI10JSYAXQfX343/2w5S3wBi9DxToPhHE2r/j9cvw+hqvsh81ur0dY
+                                               
WSteM7HG9GHk7QDTrQ1c5orjN4yozMcqaUkYes0njgxcgzjZdmshE5CrEebFsN3vIBfzu/6+lukjOdTYrjNEv07HkW+wseCU5ZO2FVsh
+                                               
rh+vy1P7nEWkbFFYvvR7M3EefBSfbHXZrhZ3rdvW88pWztSukqao8lnVuw3y5seqj7qypNPFmXaO5KhP2YJAy1pDgp1GCEFfWG5O9o2Q
+                                               
NBI56ti0wCsYz4cnsIIZxxUGdRnTCTHy4SEeiZfUTZI33XxzEeHeqyTVzjCUFehNTEtCelF8I9L0/XK5cgj3A+EhFfSoYNNtdUJqW24F
+                                               
S+KQuJSi94MMzsVza6iDurQy5yUFX9bRW4P+Mxp5cymRkBYqId/sNQJuh9xpO3nes90GxPNv9DA5F4Q2iVvkPp3b/dJ+bmvh8hMW4jt/
+                                               
r5Qq8+gg8CUYyHhNHrRvO++NzconmXbCb+gawWxLrxY6Llfiy2cnhM9yYOlKI/stXFTzApLF1+IF+20HG/+Z9yKMbASPdDDfpXyW4nc5
+                                               
ffHXVBclM7nrs7ejXMlBQQDjm5pQpwskeSFuiOznzu8q8t2kV4ndg+eBVN7ITGCG8grxM6gTApKXDH7I1tQS3SB5FGxpuObvM78AMpCX
+                                               
mBg+JEsBr4p6ngmplOIHQdA/h83exvFICTQDmGY2BtDxTeiSJWZKou0RlSMJfl6HeC3Q4Ji/qQui2W6gf+AlIN/btFK2Q+5MU9V25fhO
+                                               
1O8fopK/igQkgWYEntsFxPYh7u3SMdvheY3fRKXiDpaeqmxaI0rCwnPuCMw8dYf5Vtb3GrhVcCm+Rnp+8L5BqmfXi/2Oe34L8rVdJAnJ
+                                               
Z4s3TxKDvgmNV1b7eD1C2Zd+0LN11vLgyN0d5PMKxg3Yus1lqQFp4BdiLrVjpubMxKnEb8XvR6F5tQY7paeUBb4uVIDvJt1JR9J+fNKK
+                                               
2EHjzd0QT/c8EB9THxzd4KBo6NqDlZXDR1qh2rE7bSwTY+xVaBCpG1G7T/eW+Y3ajsSQr2HUtKie+7mCCQ2PvOVXB6nsDW1m0sB29Oyp
+                                               
k2F4tssbVz5nW2B/VINoWTbtP/bKWGdyNTTaKLtnQepRtD8asCdpXlD/VDIJFi/ZlhjOiCzZzFr+cb/YtBSvhiNyMn67L2f5TOp8FA3I
+                                               
CXDArNuQcFbDvDYCFeYrmiGUdr2ieqmSPFpzegYaLCpuZzLcSAoV5S2oNBvbHHev7mzHI/j6ozdIIAohHldQKSSfGgJqALunZpMzfgah
+                                               
fgThPdIBorJT6W+3w1j8sFogiT9s506+h1dJfZ7uLCIeoMQlii8AGeu+3g6MUzu28wkC8eVr8g94tquPSxqhvc2Lv9qWBbawXRJfNAjH
+                                               
S6NaHTev191Q9H6xEfL/a9YjaBOJLendQ7/Md2QmeCfS6PF50ZG9LBi5sxfwNsaJCOQ+A/DGbLdhi514vt0keTceV2K4XmXPDWuo5LDm
+                                               
2pNk/PDTihCUkBy8ROiWt+wIDceIqR1s7Vdq2IJj3jKZyPC9uKSWWtKoDKtqoqVtzXaIw254Xg7owDVPHJi/bo021+aXok/x1X0JBNBw
+                                               
EhJqAzVbFavt8r0ub6LeND97Qx8N42rEz3XhIOdzc5Y1XVFSOcfWl7P+eXUhjdTHjb8JkIZlao+kXOSVHM/bcO8G1MX3aJRaNZgB3YaR
+                                               
Dd9YTLrobPnztf6tREheC/eKUqnyMoarmZ+34ifPIe6fVoKi5Gmg1vM4OVwf8pd3klC64X34RIXP70C4vifvxyuNSKOseXc6VEp8W1Us
+                                               
P02w3Sl8lhU6R6Wukns5vgMNTLINgJatrtoORHIUCZqC8PPkezLZCjt8S9U29DgtXHRMirj3Kl2FkyW/7E3UDaVSLC/KqM685V/gxxX2
+                                               
OM7yEuEwb+rjkFayPmvj9+i9Re/T6ARy7wUYyaOw7YQMsoN6WVnaKSCNRMhA9ScvPPgVNgss3v2cHIziW5Vk8kwW22TwWnhAB4lywPe0
+                                               
u4E6ovooK0gbRGXDNKPMR+ps1TBZ2MiDV+GZdrxgI/eJSqkyX5QDefM0LXz9IOifaBzcS1SN49lMWCaTYRq+vUudjWy3667uhCHY7EU2
+                                               
GY3wUq9A471S9qP4GjYS1NWJMlbXWNuSxm7U32aSvOAYRZUPaFQCufcSrMIM9A+8ABXmRi0krPDdJPnLOWnmh58BSaGGx/2NNiq48zzc
+                                               
a/92QlXXCcpg4fAK0jhHSSO791UdaliPRmqRKHee4STv0CoeyYVDBW0Qgg27wXMfkHX4wLQdLWjk6DbXqtjqn+yNI2yn8zZr0UjJMXgA
+                                               
y1eN7Sw82hfPPKiNYhaHQpa0Iq5nea//t13OjOBlS/ByfL7YwfXAp4PgxbGgwElZLhECpqv+BKSHv1vc3si4lVphOk7yqCAsfDKkAI/j
+                                               
XBSGJzHcLIUiqWxx/NI2vHfpMkvlLkXvF8XAdBfOhKi4jDLvLoDOprqks5oWYJInaunjqiY8k3doKGkYoeeNongayV2RNGBRqZJ/ywC9
+                                               
n2UBZfO91AdMahwtbUjvIXY/rmnziXXItgHoyJvHBiN4NHTbI4wb1A7ZG7rsYrywgfMuEhkgkHvvIlnKhEK8HzLuHo/k/YzthIjHqAX+
+                                               
2xI6kLJwJBUPDUQy9q6erx9GK/HHXpPlhUa204wkPbRFkp5sRFV9cacUfUfVTRpq8Ahla3iSpzr7u7zwdLUWjRfjCdt9XPXNSJe8Srp8
+                                               
cS9e1UbjuEnG1EvRZ0Sxg2+7hPCR5mNylDnadxPfaIan+yHqUdQ0InlQrbOyGdhduWyQT9ywYCm+lZuuMQ42jBXQu2BhkUIXRdEbkIny
+                                               
qj2unSR5IxP/zbllDJOoJ6V6GAnrwQaycgZ6sr6N6yZ8vc26ZojcBUZUsPk+iJu9QJOlkgrBK+mea0MA9bZMej790ku7Q4kqa89HhtgY
+                                               
jh3KPIO2qzaOUfwjTU/WoTq5X56N4pNVHeHbLvmMRtjetUjfMCJvuDqL5R12kze7NW/aJXg+L3FD2eHLVw8zDG20GselQ2I2duFVPXig
+                                               
pswF9Bh8TwyF8T0sLF0geRMbx72rXB7Yk2FO5Qna/yD3d1KHFLBsZJhsNoVKcTB1daiytQOpFCRK2Pw3YhP1LOvi3kwSggdJ/YWv0lNf
+                                               
HcEn6YPtkv1mrKKmFFstcQ+3EqCuGe6S+71OvpmdpzxUbVeOz0d65EhE33ZW5nbb7YB/8+YtstQH83Yf5Bi+r7NNME8lXzmHxLAk/dNA
+                                               
8Co2ub8higZk62pN10zWpYCp4Bc+tM6HJ4TYJZJ3k0/RebZ+uhlpePF6HArxSTkqGkWXa0bnmQc6wyRFJBUVBP8RI9+MFXWDW+oZrZg3
+                                               
b56ckeuTlHnZsmV0OfojbYA8zdLz8Ye1viRKgQ4RVW5UCb68E+I31k7vB5+v5D5Cvl6iaruFfbxHy12mCVbVv5LzRtTVoTKXxBH19MM5
+                                               
y007QgfEVlLd0MaiiYDphp9JqNCyc14O72hq0cJI/QhniQZJJIXXYBWtv7//uXjmZl2LnKWiubXICBMeX/2ZkzOJxBOFJ7Y/4vdoDlub
+                                               
N7UK9nkmdfkkZemkB4l78rwFmpAUl6ZS1wwOzXhICP5f6F0zjrAdy1Ta3g9Flkqi/F1vZ4T6tvOWSO6KMMbdeH2GTfpwrzYK1yKec6mr
+                                               
Q7ZL4ohe2dc0jDyryXKL2VrChtOl0Znxhj8gBepIvpvnTtphzn+nl8TwGhUQ+w3xeiufy0GC9rLVJVaRe4OkajzRXRC/23J4okbwd4KA
+                                               
X+DrBJIucxRVPqn5SAJMPwQE/a4SV5JJ3B6pxAnJoYx+2kiOjbgX/6nE1sL/o9FaeCsj8FB5rvF9em8mD14J8ALrIXSi3FkcmQ9I+xmM
+                                               
V47GzSRLeaiXZNgT8VgqkXP5EoZqeh1G8rzCS/i+ViDJVC+D2xUpXCyg8KwPlYAdkkrmVzh0R7+gFSZ9Ya7tKdiJU8nQyEzD0kcCgJ3d
+                                               
lq8Z0ycEH8V3c2dIX6flIYekoNtes89CUDb2/nDUH73K19kDSPKQyxy10U/yO6U4gi/F13G7Yuryy1vVsajQsZDFAXzGe34qkYlp2P7H
+                                               
ZrdONI4Wxz32WPRExP1PmctMY8n7rG1XsZqbnjFePVRGAlrBMor7dqOQ2iHMndzSgIXKvPjLEZ6sjfcrgXk8cpxcOfptDpLyJ3T39XX2
+                                               
AjxC2Ro2PoVxFRunr3A2kTeJ4C2d8E6fh97BCtoZurOMv4sHyoYHeSN79PSQ7Ujuks6a4a30ZXOqMfhEP9J/lDZ0mfVLedWDNBSmPzcs
+                                               
jsiTuQhnVLfbyOV4xZGu9HEbzuUheT5jW2ZcYKdOBZKfJbCM4gsV8IB/pwTLrllnSB6VQComdTZ4G9MjqWfhnpvzELx7Jrpk331fIatM
+                                               
eqvwJYRCIvm+knB2gi/Hd5LIqccIwBpKrnSAnR/VNzfTEoFHUPE3qUfRNkF1CCgfLp0g+D0Q1zXa0OUh+N9zpQx11RG8APnyeSWw1Pli
+                                               
9cN5t8k+R0m5bgcewe+OMPK9JId06HOrUK9PwbWdpZYSNtMKXcnh+54tA3oZRohxHO+MDLxKSZYTdXla/HrZFJcqtkrjcxIgUE9S3PME
+                                               
99oOjKlJihVNCT55sQpou5J1CpZONmRI/9mOENITCUQJvnJbf3//MzydCZmAAI9QIqOk1ssK77w7NwneieGFTsJs5yZB9WWfDATPsqGk
+                                               
dLaV8fpyxytse6KW+Swk6ib2eS3Fb/Z1tonkAA2km3sKrbNwNNy0YvMPN/f3z39mVKqcoMd5Uk+eem27Sj7EeDF+veVIBbRCsmVrPE+2
+                                               
CbhFC3wWT7qZsDDZWOhFtoTRIykpzKgk79ICtJkNgvd8K0kmgcyLsgrcK7D4cIgARHJFHoLXivqPBXsveJoohc18MkF+fdUjqLR63dAW
+                                               
PGNOMlJPLw1tEWY77d3dkbXxp7g0Vg+bBkSnlXdcnwQbXJCjvIPwJF/u4RGOvs42Ua0TaHitTkDyEvy11KmnQvlblfj3phXpLaPB/BuK
+                                               
jCyd7LUyE9AcyZ4j4k3rEXTM1LpMzi4gNC2ot6MS7CKhwUvxyRgE/QkWHnpduC8tSdkk4SNoIGTf7w5Vso7B0kjvG/FcmZmkYDuXD5VL
+                                               
bPwTeJylEw3H/wXBn64Elbri8sxeR37x2IAeKNJrr6Sb7eAxPhtxzkTw6iToMr/oC6LQQXRaWnnGLu671t2Xa4nkiB3I0iH7Jb1PEGmy
+                                               
fQLLQU34raX6Fm+58isjYdSRQdrQnY2QfahG6iaec+mOfiCRBHqtzgU0gVYoKWD0qJmZWqnytvhOoEe8bI4DqrcIJL0GhovCbFui5lnD
+                                               
fS9f06euHiOpZB08vDwOQT2kdshE8FqhThWNDskBI/DM/p3kL93vLASl3hiuV/f3L5A9R3rYg38hGqS7MzWOSmAsHyhbHxSFrmyLzoT0
+                                               
0GOF7swb2yEfleArV3D+ytfZJiR+BBru72m8Mq2B13td7yWK/1fVcQhpG/QKfjpfXkDMXaeTbYRhV3u/hXZNGqaAHobf9Udh+LRWKkrW
+                                               
LmJVqgTP/WmSvdlZ4HiV5WDl+PdCUvAsa55tLUrwldvg5b2IunqN4FXkzeHElko+U4lVVBIJKlMyuQUkBM+3W6HvGiGbbASfbO9sBNVj
+                                               
nlhCxshb7uXj5mdS2s7KnAicFeoBkvywtEL3/rg/z+lbtnfP2R1+czppgKBbtrewclAXfnPxGjfUYdnu10vvi/CfDdXk7Z3b8N6t0Lu7
+                                               
rz9gFsDIQw9tduurXaFJX8h80QInlSiqVE+G2dURvI4P3qCEk2kcVAvqSnp51NUhL6pTqHpjcoCFpE/GhjX+rUXtRpJCPshmVoCQlKUT
+                                               
HaKdcc8/cthu1hA8CPoAxNNNNqpNphTcp/fzTIBXUA9AfULw5siQ/KURyKLb5Z9bOuh5yNbjaAemA3nxJITxdy3f2Zwrr9wgfbJVsqZX
+                                               
0o7fkiMAIXkdN+0BVn4Vlk7OQhiBlMvzuVTrdi1o+bp1WuBcqx99WAIAPJLaG/dk64I7MYK/A5V4N+rqJQ/eq6w8VWsk83pm2E291jWW
+                                               
Pk+nVCZcuZ1snu0dXAWF99+jQzTSkPED0n5wDhK25aX3oXzJPjEeAVd1V/d6Sd/w6r3yXFT5JPUoRGc7sDhW9pWJ5ZU6kZuZ4MVW5fgR
+                                               
r3FLnAKUmW2jcnSWNvCdqNOfkBAAfwQgoH0kY7xdgFfBKv+TtPjpK1hV3DNSIdBl/Ch1AskYfNkdUpG1AlNsJcMDnBimrh4iqWTSuoag
+                                               
0ldW8RId+VSusJ0kTadXWXMRPOLiJlnL0TjiJ8cs9tjwFsu1lD/0XvJs1GYviI3BRrJPjNUVv87AA3crkLSM1uloJsnqLXjDg9TTqXpo
+                                               
+Ys4lxEnt/Y/K8Fb2svRPVDzYuqz+OG71Dmen4z7zHHLO1Rjixwegh3kHRcNp+2G7rGOaTllxwoDrs/nOLcWhuwtvlZKeb56MhELghQ6
+                                               
EMxQUoHTVzKKrUVmwyEnvveQByFpY4HnMBfTZys7vPi3Ev9FpK+KRsAqqkfwu+A+O44xkwevlXMtPNwFvs4egaSTgP2ybrjlv+R0OSei
+                                               
qaee5HCFJ1v5WQ5PVogNcXnQttM1nW0iqdfcNI9hafnOTPC2A+n8feYXqM/SDnh2rRwp6XBvuWYNwySZrIcNpCHtkC0ekxCP3ScxneDp
+                                               
VotphWFrVJhfCkllnfChKMGzsIKIJ71Uwx6CnIqTXTfv1b1uqlvdAjPuQVghp2eDONoB2OkrEWymlZteoiwBBZguSZtH8Hyd/e9SybIt
+                                               
80smITkBTF0eCfQCJC6ME8rMTzOWPdc4okyhXJxheWHpM9tVKpX/gO4/cFUJl4020NNQEA/t/cR3oHGU/Vk61Dh6u49WjshJvtXGrRRf
+                                               
ZuPjft6aPQ7gPvio114Dl61eO+EzdmzhdyUAoIccrVmBScSOTHoSx75QgM9GIZOXDrpg1IQoURE+r4VayMHL4KnFyIrPRdHrqM+vEEjD
+                                               
j93e8bnGA20s+SLz1KwAzxS8fCA5/SJn45W8qIL0yD4xfv6a/Th0Q5LKsUyS4iZavROPeqViGiHRgUG6LlPCykbwjnSSs1LrCR523QUE
+                                               
+k+1QSaC1zJ3IxcIUFen18AjPl/MWd+U4CVNp0GVpNkneCJp5HhmcClerWHlHaqpvnCoh+0oasIMmAwhdj9zeHgGPLr3olLLzoSucLqV
+                                               
KV0ieCl0COO/tVsqGVqXwa0FBU492Ps59kd9iKtUCK3AF+hr1HkKmBtqKMVryuWBAerskDeVF9W3gvOfTlX1iryNrPz8tTC40glp/7kj
+                                               
s8z200nqaAW8WdnnZoZtl8DKPFf4IJ43KwGlsiHsLQ2BPINyKwodRKfZDmTE5Zd2xGGmIRptFC5iL8DX2SaSek5y1nixLKR2DJh2CuOH
+                                               
8vdlVTeJ4IFq3S5FH85dt6tiu07eCpvIirZecRZ6EvXETmOB2A+Et3sxM0Iz312j+E+20VaHjep5FG1NtMqYIOL+T29feCF4ruBAQZQz
+                                               
WHFfHoJP9qOB/q9RJ9GgQE8LjCB5OAfS9c8c5EGxFSBsEPeivvr0+PkclSrfUPuxcqbvJWg+SuUux0epuqTizwCScC29IM7no3yvVnuk
+                                               
Ix9NF+sJyoQtLyVEv9ku6o9ei/vybBNsSyRPM10dqneSZnk7OXuvRcS2+XDPJvNdxKT6YI0SnSzk/2+0DLUzVKNLb6Pz6HhQd4fssuWA
+                                               
BbveKJwEi8qVc2hEZlxSINEl188syDLJ2CFPwlAl+FJ8upIVMzJLAeC9UiFQiM60tFmXlqcI4f98J+dXJXnxwpbEzcSKECN3VlCm1XaO
+                                               
pDSIcytZzyEr6DgF6qRiNqgoSd6QnDVvKFkrp06SRX+F7YrUNwO2Y1p8AkrGoqXs88zTLCQMUpT7UT+sVwcwDF84PzKoS1clnybpaSxw
+                                               
KNzwj+9QAKKzHVia9QjBf2ieZqsTlnZ+jqK3iGIvzfXwhmrm4dn2tifRhlV0RJWPSQCAbZ72mEYjYgdZ7wmjnQSjPaLjuGZEP9PtjbqL
+                                               
O/3CgelBJePLNCOa+Zm8Ua04k7rLVrBYAfG/Ww2jBSSHJI0IvKrvSQBAhxu7lvCHNuA5fUWXb1KyNlo2nskXdBY6jVJBJlVQKy+4z20X
+                                               
nKOR1PyRSomGQt56JBo0KN1CQuYM0xoX+61crrxD7cH4piZ4tcU9sI0sATV9QEI2KI+fFMdDy2iNjmaiZVT0R5GV56YEmgVmc9nwrxzf
+                                               
nsvpQfzUVg+h3vaLYpfmZvFL4g4OcUd4treqxvU+IzTK/W51lqarbfvMViQbRxnw/fnsdiOz1mgB9Im9viBaFxMkX3m3Pt8JYkuGiFDx
+                                               
PyoZn6WSmXgFjl4C9fkZjji/VQtyQjY5xYiR57K+g7qB6VhOmrxAQshQVpTYKtekMecj6L1b3Jvlp4ULouFmXDdpWck60Uqx9cz3mcer
+                                               
YSZk2CU8ztLAoToQzGHWi0jS5h86nb7s2e6lN5o+s6VXHrbmFrriFGQr08mQjpWzTpUxy+e6lVfZylC1cbuDL0tRn9e4NYTFnw4inr/I
+                                               
s0nW3iCFz+iB3ZW/Ik2yQKBDnDTrUNOqySv7pehTMNAqGlkyqjmx+2KnJl3tFeh2utlJxUPG7I7ue9418IyzDc8kPYw6QvyA6ua9eQqU
+                                               
L26oJopvBentQ/0svJ2qgPVgobXKo8MyX2aetUHuPtHK6VSt4m6Vhl4vyknmHSXrxJWhiG+2zpfDvf30dRoad23ky08Cuf8OhHAhFxF4
+                                               
/2/FVTBaPqwu1Me7XqTMKcFcyH2OqMfsaGWP4eD/X+WY3LeX69Z2+uU6iyMIvrp9Qvb8tNVXf+cEta+3Fcze3Po4jpIXrHKVJXvfQ+ti
+                                               
R7dymE1IyF02jALRoQDLPuwZiF0EBaGhQW2vlyxgRluBwOe50JdrskdFSJvPowLbJF4twZcqX2nTY6gXa+xuAMnL6/1EpyohwYLq61vQ
+                                               
v+AZJFimsw1yry7ta7JypgFYhqTSoHE5TCtlWiKsFyFGlxfRJfCo5XARoKaH0i6YHl/fQP/AC0jui/bbH/GuHvyt4DGHZ0r507KkcW0l
+                                               
STrYC1I9kwgeZXsO5x0kvRmWlyJ/bZvlZLVIh+YsmJfCCXDyjvYchSy9C5d2lv9S/Gs7xSoNwQMJH8Fux6rN85YlSvUlRN3sTQk+CWeL
+                                               
BwrZtkj8e2HEa2hQRxDpib1OvLWo1bFuZO42aVrO+oon3f4ovsgqF/TmyWjzpMbnq1fIuJi3ALAC/7SNJZKNJKnguN6EHo2MAxJeGnMV
+                                               
snobEbDT65CG6zU8SpYKmQjsK2uroesqNqzU7dmpKSw+Olk9ofmV15be+vHKFfBQZUkrwbikiU8TyNLRetuVy5W3IcxRhsd4g+j9Q9Pd
+                                               
kuDsB5VX01CqJPvAG8lZGtiw4N7RHPZSB0KGHzr55mZSJtnQabyyEqzfuH1f1SVpnwp2H98noWOnjlI7jpcO1cQTKJ8voO4O2Wp2gCf0
+                                               
IANv3G/hIhqBhqTnl9eYFHuFeiMy2PZ8EbByUZiJJlbp6gsASIvLx2yHQqkwXhhpJSlsqLg1R/X5BQn/XazhdIrgKQzbCtd97B0t0q66
+                                               
QrxSLWytvAoZw/fuTYDvXL73v0ImVhHy2Ykia/lJ8mjw5a3VtN6On3fIc9tTP1cjQ9GG3JFExO1gK4dw+EmDSBo5Dbep3SDSkPNefpZf
+                                               
FexZgcR+yPCMvCX9dSvB+vv7d4CXvULzMVWazBGR3kxUOYJ6FBIHsxfiUMF9WY+IpNiiht/YNsF+HrSBxEawxy/VC2dasvBBssKHQ72q
+                                               
zspSKlhakAcDCP/BHPbxxWts419aOeqQvWYHmBFeAW6H3E2M5FkIf0wi0qCmBO7dnd4DdNgujewV5CWt5MUHVCZZyWAZ6xUi7rJ4g4aV
+                                               
d+y4lYgtpJCW4gtAVq9HIfOJ3iCNDomFws/NKkVlXuWFsOsxIJ5xR4LSDWXjlDfvpPLQBiC4ZM/3LJWAceYVdv4v6Mo3OVcrSQPp0lc5
+                                               
C7oXKlnXwBps33b4eRLxyxxFHO8N230JumWOSW33SHItxQfw3l11aBFh7oHf78xCMhz/VX0o/+U3Ug/A+EicLF9RFt7E++Te9A0z7aK9
+                                               
w+hE6lGkJtBmsHi5sxEqV3jesx9+S0Faqo1bKRoSxQ5Z4pfci/J4nNbNRHcOkZEFjdPRqppo22Y9DavA7AajgOXdNa6ZyEy/tpxjIO3P
+                                               
IJyI62tR6LdFsOJdua5Y9GwWdtxzAp6rTu46gshLWsnLR3CUquthtRBb2mVYIetJPdlFiM5VSoQBokeaj6DdmX7GoxVoJ46xg3wOFI8d
+                                               
xM5CrwWfcW4n3kKkjBuI79y8y1zNniRRkMM5mtZONJh+OXoQcjrKyjs43JYmjrjnSZDdkbalkDPw/N3UpbZbj+8kDetp3Y4GQPZ1MU+P
+                                               
G3lZHHBNZ2folPtlDXxZJqq9xjppeFgGNFzmQapyXvMSkTdPAkxq0LLC8hBx3gVh2Ju72fLQ0s709LuDsYGkcUsLi8vChQufgjL/Jz3H
+                                               
oB0+cIsHwHM82Yy605SfWQ0zouv+x2d0sFKaCPmwoEgGwbiQv4CgzmJXHnIK/j8fv93CguFVvHZJiyIvzyBdV+2ju9l5GZqcGq9r4NkY
+                                               
SOGs09Ex0YopB0YwXtqgrELhvQB2+BpI60gQ+EG4vppeJCrHGxD3JfjvWMTrJ7jvOtwvROyRQjsFnsJnxU4I53o2tM4m+Qq+PQc9PInf
+                                               
vPj2h72UhKlPj3oDucU3Is4/hY2Ogc0Oob0k3Ch6LRsA/P5ByLdQ1i7E/bKem896++FXyzmImDbA5xuQhp00LXRC5EUkPpuJ4HGf5S/0
+                                               
PId6rK7ZlYBD8wUJ16UvbT4m81xI56HU4zUebcHyj70chHOPpiEzwetzDyAvas4PyIjk3QSkcz/os15WXl6Q+qJl/c9IqyydbNQj3JKQ
+                                               
tKxI8FvVgO10hRqJkAh1cmkXDdxINGwWpnZJi2Ie1yZ6vUwfwMJiXkTiTaAQvr1L6W4mLKBCeiRqS79WCv73ECrJg7hKga65J0ruaWc4
+                                               
xpfksBIuTaM9lIAyeVsGvyJzfJtxZoXvoF2lfNAuZhPGX1+KeUTt9rCRTIN7aLdJ5Qv6hODRIFyMevAkxt8qvjd8aUScPNdCbJng1d62
+                                               
GELsRqK0FfT9JMfkvvNEcQXxvd7X2S6SNHP7hCpRZyN4pF2fG7VVUH6jlgV+eQIpf555pGUpX9l3+Wcr/b6pqnPHb1bACseCBQuehsRf
+                                               
SSPi2r7XNVmYKaycXA7GQkOiErKK3S56/NzouUwiBQAZKelokok1RBRV/lsrI+PXCdJMJ66w0c7r9LM0cqwcJvyO3327dcRGKkbuD0XR
+                                               
gOyuCZDYE9vkgZWngf6B50K3vXnc6fJkjZyQdRO7+fclNm4i5tmd4nl00sixodI0GLnUP9tIRF9Urvyqfj8U0y/j3FF8kbxQ5vK2Xkcz
+                                               
sXy7D86JvGfRKS/U4gg7LKUN1Y5ZCJ5lVRu36I+2CVo7BGrPCj+h96/8lLXR8QV1ScrIRjRkb6du5YNcTs1sgOd1RYdr4ZkOsuuWftv8
+                                               
/3Ku7We66j0cv8Ahzd/Qbj/JoNtpbia2SohxYOE16UacqM9I4hHYxt64rWn42kB1D5dS/C6GmYMosgjTM9lu+qILpNEzvlRXWUTxFyUF
+                                               
CqYDXv3vxFYuf9LpQxycZx79QFUlZc7KYn9//zNApLa0NUsD6PKOw5o6pNYhgk8IDvE6jg2lhNe6YawXSTvTBB3Jnk/tEDyQOB3osbyS
+                                               
+rU8Mc/rw08rWv6jFcgPWQCS0oaMSzMh/M/1aPVfd2GFDte5yBjZVRFGzOJV9ISwJ6DEtcq8m0aFy35jBUalPl27ySSGNBV4NgvTJ4Wb
+                                               
+UsCFoMAbVbCGvgNBQjya5onlHYqZbdE8tyRptv50GxBDxT/ZT10ehPnW2TfpnJ8LPUQptOu3LIa996hRJql8dPeQXw56ut2vs42kZAP
+                                               
eh4n6qQmbZOlTvDeDeIwdXAIxH8eNv2SpD99g9tI+JzYEeWTh7HIfIvxYAvQRizbtoWKidnOll8n5V8hS531vxkh+SRQm1RSQ/RihWwm
+                                               
dvwbvNLKmzQ5liE1sAKz114Ln4L7L9UKk6WSzT5xFcJWi6ytlCtvE2MAfgXqFDyn4QmoROcmlTKbRzgdYm87cr7mIMbZ3gqFk7AryE5W
+                                               
LPE+75lWIqTDsohyeAj1KKQcmq114jDr5L4SKMtr5RzqITqxU6I1ysw3hHG+1oms9Z/xm7Spn9/g54WVJ26DgrS7t3+z9XzqRdLm8in+
+                                               
oAQCNIlrHlK2Zxo927Y9MsMMKIdfRPEvO/xmZ7fFyH0TKmWy9rZZwbJKxkkgPJPpIIdZKvIugVaKlezqiiGAbpC7wcoUN/FCuJcnJN9b
+                                               
trZJS3+TM/HoUJb8F5HSOQBInzYYILnoFdQDsByyoieVnb0n1UtJ64lWCdQ7mg7IQ0A1sHIgW5aAQLVOZHJ6WMb0yq0BpLFUtB0/ADpc
+                                               
fYZd+RKkNcztOGbGG/dxCTd1qx38+CYcwnDRGHyaPT3UoUNRPD4A+R/8LstBoWM+ehgfRfnZXR5QPVxyi/vfwSFwvjjH3zrR6GWGVUhc
+                                               
90SiV7mWOPMRbNMmWqBsPHkDDCinShGtiMuMq1uiugqc3bMUb0qvjf6fcVH7JKtOUDi5PMwKX1fJ3WBhcFdBEMcV2siY7SbFebqFw3ru
+                                               
hZ5oHLaR8VibGEWllJVlGYnEPyjFTg4TG/iVGmX1aC23Qtr67FSygauBXHmNPqGqSCJtE6jVfbd9QtJryUae1rjxCojiJttM54FfXiM7
+                                               
YMbV23bqoC0T/gMncqnbbEHUhhl9GPefj7JyBZ919Sn+DcrJkfJ/FJ92wCtfRV2/8HWgAdiH9qTALLJtyQycdyBICiBa4PcyEVpYe9GT
+                                               
l5dUlDDuhxGTcxinIK6kQuCZV+DZPGvgpUBpxW9ne4BuCeNHYpeDj108ox+g0MnaXyCZCJ0GJNslo3DvjEogW8Gq7Ugg7VTO9iVZA49u
+                                               
v74vYS85sevO8p/kc6PnJ4stkeQeRDtTj6W/hizK0be17GZxEmyCEfGOFlPPFGU9NWySkcQM/Q/krPfWuN3Jt62pr1PxM1g8UZb5Bro7
+                                               
6L09fvL3DfqKBAI0ijd+E1IGN74GzyU9YYsTytBZ+H0tCP6fMKPtgw+eqXwWYazBf5wb3J+/zRTB1yQMET2Wa9e1UPUGyTsyTbxSfL4J
+                                               
Bl+kUU5ToBJiQwYdYhUG16wkLd6UVmbKzJOVE8ZDKpraZ4Lp1CSbfTriUWVAQvLc+wjEeQrjp2RAgptJb94m284FaTyBcbS4ovxXJ4jT
+                                               
N+K2iutSO8LSvDn/ivDOzjEMakMK6+rJpV1U41Z5K/Rv0nCyefDIR7XXtQv6F8hQRIr6mBWJc1KRt9+TIbGscfXFhns4b+LP3zWsJ7iH
+                                               
8ycjIOuK/iSA8/JrlJkzQfTn4PNX+Zs4NSgL7HHgyt1l/4u/dyrfcsEym0DEvuBVRnlhiYaYASF5SmVgIXLxqZxVqbgDBYg0Xql/DyrZ
+                                               
Meyea5pSkTPvVVv8A5l5FESWunkVop2CllcYdyF2FlQlmPUoZCejQMkePMQMkbshIXleUTf+G3GtHibj8nbaiR5hu5VX3ilcBpSPM7KW
+                                               
D4gclsJnoULKWgOC3w73uTmJbOXFJsnviOe5LRU6RBQsExJX9Aw+wPzQPMmaH26FT8Q9l1xj6XNJp+A3GrDz8RKma4DbcbCS5afGKfVx
+                                               
N68bBP9q3D9h3ng1X+OLkfYf4feD2SPUjQzfA53cmuRV+I97YgnBz5gHb/ATh0h+HJHTbowYkpWxHWOmFy88ZoBWxjHE6TCLo2b4lORO
+                                               
+IUDJHMCzx2F7rTdZOnOcQkZwv8NdXA9M7rbJ+I/N5bnKoYRfbdtxHjLSzxsYJQwaLOLvJeXiJrD02cSteVqoIyKcCFtpkTK+DOvu207
+                                               
6uYQn8wvLVywCGXK7etidnJ76kSXqE398sFrI7H/3CoX9eAIv2Hjlfvo4L48e70Ywd/Q7luidUgafZTrL2kYVvf88FsJ0y6NG9J+kqqr
+                                               
ye9Owho2esjoSV8v8ygZ9tRvIIy/LkGt/KxK2n55dZ9jbiUiczaV/fjdygzSfRHs99N58xY9Fboux/9H4vsZdATx7IvjKL7b9ueZcYIn
+                                               
ahPHrlu0ggZQb1XIBZUySyFIJaqTBT/x2HVd7l0cu+Rbkhoti2Nqr9QqBCfSYHy3fC8lwWu83CqGUuWHolCBlvm1iBv3Pdnk2UgKPaRT
+                                               
hCWFEEKd4q0zLpIGKdzRhSh877ITiQhN70x57Q3hkxJXbaECHIb0XGuNlF++IJ2wnb1IRn26bcZA1XZwGJB/cvasVbz58+cX8IyckaDE
+                                               
wfhMJYyrG4fWNfWELWO0dMvmfuX4XuYfrpKXqQTxkPigy0+7UVeHGu6kfIDcTtQwzPaN4zJZpFzKs+kPi2kHSY+Qb6QibCs3D3vx8aU+
+                                               
vpPuQX5IPjNfwHeyzw9hNq4l+Hh0EsGz/pXjX8jnUvQJ3HM/8uxGzu2gfO2GcnY3npGhtZ4geMLPIPf6eeUHiPSDrBhaEKwwWEHNWhl5
+                                               
v09cFMksr7KvBBkfDyPJy0uKSQeEp4E9I68+l+OrNQ3p4q0eDZ9BRh5DPX4jyEqHDHwH7vs17nuA93lpkDRqIXKVB/pINvpfVVw4UgBr
+                                               
7sd/Yhc0dtTLgohCNc5KyQamAbF3ovJ3C3IAh36mHecijz8Iu/6ZaWf66m2HClJjO/29qe28+/k9KVMU+Z0b35WiT9mEIGGeobyIhHLO
+                                               
cxIsH9MIPdgF8/fb7L1nQPI0cUSA3pW7b2FDHa3EnToV/5p6FG3nsdUJd4RgfDnDyJJmX/ZzvaFJe+B3A379h8N1wkLYvVGcsgjTvXDB
+                                               
flLfOZmq6omkvKKuvQ55sIZEz+9Vgo+vhFzKzzxpi/roRPJ73C+T13zXQnTmOemua2ACfE8BkVwEUjkVEb7TCgKvJBwlLEdMzvNhBasV
+                                               
/u7+I2lVK58Sl+pag8p+MSrg0TDsizVogRo6l1dq6ejv72c3eZUSiMQhhSTL1GCDQVGoDY1PVuwdoBDsD/L9OtJ5DZ572K8w/Cw6nAdH
+                                               
8UlKfuN/vIc9F/85/Ecb3uy6kZVDuaxNgxUwLn7B73Uwrn7Zmjdv3lNhu7ewhwTb3Yi0rq+3QVrb2TMUfsd/a2G3v6JMfQdhvAF5ZquK
+                                               
DIlX2E9nxh2m8hPk4w9QFn+MytpU+L/EmfMeck3mPixtSXnVoamfUTeeOwX6UZdaS/U+2RdfVtAoctUDH2Z/2bqb5zGX4p8jHSfVx6GV
+                                               
SPwisdXPQGZ7i2IXt7bj1wpW7+I4LiIOX0Yen4/8OBfxOA/yK17x+y/w29n1gv/O0ftqpRT/Ena+BPd8znOaEocS9udhMd/weEnSiIbt
+                                               
Y7Dfh/mZ9yLcY3GvjNOzPLARQjxfyu8+X/QM6iK1NSK9DxKxHAa5AIa9HZ9rKhWFFbJeGt2D5x8pl6MVNC51opAs2HfffWUVgkG9q4QM
+                                               
coAZIc8z7gjzYSEK9cxTiM22r8PzMlmilUMymJlan3H4Ds+08mrJ7HLEZVTXQu6ASNj19uB3JTDG6X7ISsiVqDynQccx3BYXOp9jhc3A
+                                               
cOt/m01g/H2iJ/DbLrDdm9jlh+3OQfqvV9tN2mnTtx3+Z4N9H2w2huf+iOuPWPGgaz8Sgao3mGfWVSKqg5WZvNItUHe7caNMK/xyQ0Lm
+                                               
mQbI0ydQ2Kt2w7HlbetFf5f76oXPcasKO/ilARqlc6r0T7ttMoPGhAFqSGzRokVPLJfn7w6v9l2ohMeRjECal6GS3QAZRWt4G76vxufb
+                                               
UeHGcc8/8RndmQor7bdQgT/ArguHgEDiyTCDwg5crqn8OZFkACr7GxEH5wlmIHghEBlLmy8vDNWTEkGita6+D9htW3hJO8KD2xMNxGtB
+                                               
OosRjyNhg4/CW/g4PQBcOUyxlF18EhLuexHfLmykz8LpxKvqvQKWrfryRbDi4vedKqXKXrQdyst7aTvY6yNiO+npcQ/4yjDueyvfKsR9
+                                               
u3LCS1XUwAun9ytdwJRoVA87iHbLyOwrY81IjMB/27D1g7f09HJ5wfM5qURSw/eXk7Bw3Zlj4Gwl9ZFJoO4uVMCkEJAcuMafxA2ySE3w
+                                               
2tsYMU9wioL1OC8dHQF1Ueds9tbTgHbtsO3EUaDgcxoykPXWuWTqBje3bs33rhEG484wGoWdVqBmpghN4t5Jgc5GabG1+PX/8Tc/7/17
+                                               
mj3T80hOq1eD5EGiQyt0V4ygBhbAC/8iu/XqvSfjty1El0iC4EvxnxBPWefr65wCMr5rJMPPXob76eXnZFzfv1//eyxCygdXHtTZrr7C
+                                               
yEldZjv/fv7nbgkICGgHyUn2VsH43YTfTfh9Ols1j4y3jsrRqVkJnuPiSvCnK2kAqQm+GZj2RhIwNRrZjRIQEPBYgxG8m4SJL1ayTkXw
+                                               
Oukpa9wjb88KoF2CDwgICAhoF0bwPCcTxH6LjqenWyKp4/TyTFT5gCh03mIg+ICAgICZhhE8X2wBWdup8akJXlbc4HODl1gCAgICAmYQ
+                                               
ibctyw91LbV55lOKEjzkwRigHoD6AsEHBAQEzDASbxsE/24h63KONfDl+M5yufwc6vEmbQMCAgICZhAJGfOFIh1/T0vwnIS1NfA3cA0/
+                                               
9QSCDwgICOgNVAmep+m43Sll6aOSeCvx18BfYC9oBYIPCAgI6AHY24Vcfx+X41+QrJXcU7/kxCWSePbHohAIBB8QEBDQAzAylh3z7NR4
+                                               
NzyTag08RdbAR5XPiEIgEHxAQEBAD8DIuOwO653QfWhSLZGMS24Yh5OsZe8gACAQfEBAQMBMwwhediMsx/fmXAO/CQT/elHorcoJCAgI
+                                               
CJg5JCexyza97kASEnYmgoc8WEIDIRrDGviAgICAnkBC8PDAh+m9yxr4DATvPP7KbdzqmHqqm40FBAQEBMwkEk+7XI6P0fXsnFylJ79R
+                                               
JltbCe4Tgi/Ff7EDJALBBwQEBPQGkslQLnOU5Y5uyCWV0IvnAcloHH5TLpe3pZ5A8AEBAQG9AR2eKf9LVI7Ok+WO9cMwU4hbIhl/VbQB
+                                               
geADAgICegM2RMODwnfjZmPl8sAAz+2cSkp6xXMLF/Qv2EH1EGGCNSAgIGALQyD2gICAgB5FrkOFdUgmGcsPCAgICAgICAgImGZstdX/
+                                               Dy5zyZJv/hArAAAAAElFTkSuQmCC"/>
+                       <rect v:rectContext="foreign" x="0" y="616.927" 
width="38.7" height="20.5851" class="st2"/>
+               </g>
+               <g id="shape1001-9" v:mID="1001" v:groupContext="shape" 
transform="translate(289.786,-381.889)">
+                       <title>Sheet.1001</title>
+                       <desc>Spark ML Pipeline</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="56.6929" cy="615.392" width="113.39" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="113.386" 
height="44.2404" class="st3"/>
+                       <text x="13.22" y="618.99" class="st4" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Spark ML 
Pipeline</text>              </g>
+               <g id="shape1002-12" v:mID="1002" v:groupContext="shape" 
transform="translate(9.25393,-458.504)">
+                       <title>Sheet.1002</title>
+                       <desc>AvroIterator</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197" v:verticalAlign="0"/>
+                       <v:textRect cx="56.6929" cy="589.059" width="113.39" 
height="96.9051"/>
+                       <rect x="0" y="540.607" width="113.386" 
height="96.9051" class="st5"/>
+                       <text x="26.52" y="555.41" class="st6" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>AvroIterator</text>  
         </g>
+               <g id="shape1003-15" v:mID="1003" v:groupContext="shape" 
transform="translate(46.1043,-458.504)">
+                       <title>Sheet.1003</title>
+                       <desc>Pushdown Filter</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="38.2677" cy="615.392" width="76.54" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="76.5354" 
height="44.2404" class="st1"/>
+                       <text x="12.76" y="611.79" class="st7" 
v:langID="1033"><v:paragraph 
v:horizAlign="1"/><v:tabList/>Pushdown<v:newlineChar/><tspan
+                                               x="25.67" dy="1.2em" 
class="st8">Filter</tspan></text>          </g>
+               <g id="shape2-19" v:mID="2" v:groupContext="shape" 
transform="translate(9.02896,-576.316)">
+                       <title>Sheet.2</title>
+                       <rect v:rectContext="foreign" x="0" y="608.42" 
width="113.836" height="29.0914" class="st2"/>
+                       <image x="0" y="608.42" width="113.836" 
height="29.0914" preserveAspectRatio="none" xlink:href="data:image/png;base64,
+                                               
iVBORw0KGgoAAAANSUhEUgAAAWgAAABcCAYAAABDeS/aAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsS
+                                               
AdLdfvwAACOESURBVHhe7Z1ptB1F1Ybvt5wAZRJUEFRAEHWhOC0FFXXpDycUFMURJ1BwWEsFFAcg4ICoIBASBGVQEX4oaoAgksQQQEIC
+                                               
EQcIEiBgCIMjmdAIBPo7T51+uzrndvep7q6+94a736xandune9fuXbve3lVdw0jSER5++OFkyZIlyd///vf0TDn++9//JosXL07uv//+
+                                               
9Ew83HfffclNN92UPPTQQ+mZctx5553J7bffnv4VD4888khyyy23JPfee296phxr1651tlizZk16Jh5WrFjhZD/44IPpmXLcddddydKl
+                                               
S9O/4uLWW29N7r7n7vSvcjzwwANO31WrVqVn4gGZyCaPYbj77rudzl0AG2PrYaDM0JcyjI01a1Y72fjeMODD+DI+HRvUPergMFCXqdPU
+                                               
7diAg7AFnDQMcBscB9d1hegE/UjvH8Dx58yZ4wwJdD4PFfK//vWv5Ne//nVG5jEKXzIo9N/85jfJf/7zH/d3lexFi65Lrr766ojO15eD
+                                               
Q82dOze58cYb3d9FUJ44Hba455573N8xbbFs2bLk0ksvzci/Svb111+fXHXVVdGdb926dcm8efOSP/3pT+mZ0ZBekCi2EIHFtAUykS3y
+                                               
r5KNruiM7jGBbbExti6D9KLMKDvKEMS0Bb6GLUR4VbLxYXzZBzzt9QDkSd1btGhRemY0pBd1mTqtYCqmLeAgbAEngSLZ4jK4DY7TS76I
+                                               
49qiM4LmjY9T37zkZvd3FUH/+9//TmbNuiz5xz/+4f6OafC//vWvzoghBE1FWbBgQZT888CZr7zyyuxlVQTlSYQ0a9as5G9/+5v7O6Yt
+                                               
li9fnsyePTtrqVTJhpTmz5/fCUH/7ne/S2644Yb0zGhIr9WrVztbEMGCmLZAJrLJA1TJRld07oKgsXHIy4oyo+woQxDTFvgatlB0XiUb
+                                               
H8aXQ1qkdUCe1L2QlxV1mTpN3QYxbQEHwUVwEiiSLS5b0uM2OE4t0g2OoC+//PLk5pvDCPqyy7ojaBx7vAn6iiuuCCZobKHukJi2oPlI
+                                               
RVxz//AI+o9//GNnBE3UGELQRLddE/Sq1cMjaHRF5y4I+ur5Vztbl0F6EUGjr7oAYtoCX8PnQgkaXx5vgqZOd0XQ2CKEoOE2OM4IugEk
+                                               
wwjayzCC9jKMoL0MI2gvwwg6Bz28EbTXywja62UE7fUygvZ6GUG3gBH0aBhBexhBexhBe5CnEfRoGEHnYATtYQTtYQTtYQTdO5dyWRFB
+                                               
T5kypTQBjkUjVRi6qGvyMILOwQjawwjawwjawwi6dy7lsmERdBHhcu6MM84YVa/OOeccI2hQJdsI2sMI2sMI2sMIuncu5bKmBM0Y7nyZ
+                                               
M9nl4osvNoIGVbKNoD2MoD2MoD2MoHvnUi5rStBMCJo+fXomm4iafI2ge6iSbQTtYQTtYQTtYQTdO5dyWVOCBueff76bUo6Mc889150z
+                                               
gu6hSrYRtIcRtIcRtIcRdO9cymVtCPq2225Lvv/97yenn356ts6LEXQPVbKNoD2MoD2MoD2MoHvnUi5rQ9Dg1FNPdUl5GEH3UCXbCNrD
+                                               
CNrDCNrDCLp3LuWytgQ9CCPoHqpkG0F7GEF7GEF7GEH3zqVcZgTdApJhBO1lGEF7GUbQXoYRtJcRk6BjwAg6ByNoDyNoDyNoDyPo3rmU
+                                               
y4ygW0AyjKC9jIyge5UdVMmGNFhAfbwJGlt0RdDIJg9QJbtTgu7Z2Ai6n6cR9GhEJ2jUBCjNYtbMkgFVBM3AbZyvK4JmcW9tYVMl+w9/
+                                               
+EOyYGE3BB26YP/KlSudLR7tC/aH7C4zURbsR9fJsGA/vgeqZOPDXS7YTx0sg/SiLne7YP+syt1lxGVwW37Bfn6JjZSg4wnWA/3vf/9z
+                                               
DhVSEdlm5pJLLukkamS8IVsFrV4zvCIuXLjQVUSRUls9dD9b4vz2t78NqohstYMtutjm6Y477nDb+axcNbwisqALFXHdun5FbKuH7lfL
+                                               
KiRSopJgi2V3xt/mCZnIDtnmCV3Xi5Ra6qH7sS02DtnmCfKk7ChD0FYHIBn4Grao2uZJwIfx5Wybp5Z66H7qHHWPOlgGXUtdpk5Tt0Fb
+                                               
HYBkwEHYImT7PbgNjoPrQAw9PPqyOoig+0DpmTNn9h5ieFOWt9aMGTOy6CAm/vKXv7h57iHNet7gOF9cQ/dJicoVStDYQtFBTLBi1kUX
+                                               
XRTUrL/uuutcJBE7gibyYi2CEIKmyX3hhRd2snktMpEd0qxHV3SOHTViW2yMrcsgvSgzyo4yjA187cILZwQTNL7so8Y4IE/qHi3YMkgv
+                                               
6jJ1mrodG3AQ9S+kNQ+3wXEi6C4wggI4XqzEm5XE2y20AuCo9GvRH0fzhfuLZNdJyKAgKfRrr702zakY0o23J4VDRIEDttWD+5HD5pbI
+                                               
rerXEmg+EUnQ5xnTFjSRiQIXLLgmzakY0o0IAp3p84xpC8gAuf/85z9dPlW2AHQB0Iyk3zGWLZAlf6uCdMu/NGPaAtsiN7Q7i+iSDVsp
+                                               
y1i2wMfwNSL5Sr9Mf6PFoZdmTFtQ57BF6GbJtDro5qCO93V4cJTsOkm2kL9VBSbSjVYNL01mAj7wYJ/3imQ3TeQzwhuZQqeAcNo2CRkQ
+                                               
Im/YGb038m1L+02QKuhh9XGMNyPNhiL5oQkDs/EjjgQphfS5CjRbcBSaUG3ssp4tevJCIp98wWMDCp8Iq0h+nYQMbMHzhLQkBCKUWLaY
+                                               
O9fbQh+OqyD96CPGjjFtgSwqd0hLQqC/Ed15hva2mOtsijzWYxgG6UfZ4c+UZUxbcAwJpAQISbagbGLY4le/+pX7GDssf/X/8pKdd8W8
+                                               
zBbU+aI8QhP1De6hpRTS7SUQfKFDW1vkk+wCZ4wQNRKq0/m/+KbFzVPP0ZDBF2maQXrIOli7dq1T6ve//72T5XTqyS3MryilOnBEBsbj
+                                               
rVYXNG/4WPHnP/+5vg6kVA/sQFLkXAc0m6gIsWxBxNPEFkS6sWyBb6gZXQfoTYuM58g/V2F+RSl3DzKwa5NmKeUo/25jC2yJTdWKqIMH
+                                               
e5EaZdnWFiRkUN+od3VB/ZZ/x7CF+nzrgMibOh7LFryEiaLrgpeb/LuRLQYSMm7ocTLc3Fkf9MTC8DehwWDYkDA56nRnBB3SPBhEk3uq
+                                               
gLyi4X3D0IUeddG/J54ezhKN9YiHpjo0KccybNC2SP/FwwZui4mgR2Qd8pgkEbTBYDBseDCCNhgMhgkKI2iDwWCYoJhwBE1/TqzUBkXy
+                                               
YqVQFN0bK1WhzrV10VR27+pR98ZOgyi6Jmaqg6b3hSBUdv66YdeOJQb1apMmGhxBFynaNjVB7Flr4OFH6slso38oQuR3YYsQFOkWyx5N
+                                               
ZY+VLZRPrOcdBvILyav4mrHRUWhadl2ii/yb+hq6xE6g0whamYRARMo9jIlkwPiRRx6ZfO1rX8u2hilN005Npp46NTnmmGPcotcMOs+P
+                                               
tw01el5fJrcwoYLdd7/85S8nJ554YjJt2rTi/Ick7jvppJOSmTMvdmM3QZVt8voyJnv27FnJUUcdlRx77LGF8kMSOkydOtU9j/ZA67mB
+                                               
OwrSiXHHv/zlL5Ozzz671qD9Kuh+5CGXiQkalx1qC8YNMxmAMqasi54zJGGDb3/728mXvvSl5Mwzz3RjrIt0uW/FfW76/3HHHefsf8op
+                                               
pzTyAe7Bf/CjU6ae4sbJanVFUPX8+o3xvshiEoMwWH5Nwaw8fKNs3RzpQFmwTgW7UIesVdEl8n7B+HTsAlccffTR7lmGlRO/f/3rX0++
+                                               
+tWvukk3zObUs9R5pq6ff4QB+ytWrnAL6DCDrU1iZhbGqjtJRQ/JdM9vfOMbyZZbbpmMjIy0SrvssouriKFTivOFwyyzvffeu1Bu28RG
+                                               
kVWQHgxSP/7445OnPe1phXLapOc///nZ+hZFdvnud7+bXXvwwQdng/eH2bAMug9SOvDAAzPZvLQ8RsvWfZDBCSeckDzjGc/I7o2dDjro
+                                               
oGxJAGYvnnXWWcnuu+9eeG2M9I53vMPNFhPRFNlW55hi/oIXvCC7lxm3oGl5AN17zTXXZHI32XjjjKSLZP/gBz/Irn3ve9/r6jxoo0cT
+                                               
KD94hjr+nOc8J9OraXrSk57kuGfZsv7CXHWBLnAfHDjIi7VTj4vhZLh5hLc50xSZLknBt0nI4A3L1EfWOdBSjlWQg+IYu+22W2awrbba
+                                               
KnnmM5/pKuV2220XlLiexL2S89a3vnXoGro6z3KSJ598cnbvJptsksndfvvtR+VXJ+2www5O5h577FH60pAtiNxf/vKXZ3o0sUVR4hl2
+                                               
2mknJxMCAmq5KG9eks997nOzfDlqYaN81FIHuo9oFHlPecpT3PElL3lJtg7FYFeU7iG6fd3rXueuJz35yU+OZgvkbLvttslGG2+Uyf/x
+                                               
j3+cfPrTn87+3nzzzV1ebX1A+fH/Jz7xiZl8ojk96yh/SG3yox/9yF274447uuMnP/lJt1YDKPPpUBDVI3PnnXd2R1oJQHJ1pEX66le/
+                                               
2l2zzTbbuKOi+aZ+0QTSZ/ldy5N9993X6UEiqKtbTrpe/kjCDsxuBCHdo0y/Z/0OOA/ui8WjcDLcPAKJsjYui5TESKwGRXOMufE0R7Om
+                                               
Y0GEpIKFQF/4whc6A2HcrbfeOjNY04TRkcX/3/KWtwStNfDDH/7QXU/+RK6Pfexj15MZI9E017rCeV1kC2z4ile8wl2LA8WwRVHSurvS
+                                               
QflTfs973vPcNZtuuqk7Mg0WNK2Iuk/RGqTH8aUvfWm2xGxetv5P947IGVvkK1LMxHMOtlSwe1f5jfzfiMtPZauX5aBviiDoEuK6pz/9
+                                               
6e54yCGHRCNounmQqbpCgAIkV0eCChG0WrjUcdDUL+pCuhCl0gJBh1h+QVnIBrvuumu2rGvRs4nL6K6kFYQd4DzqziAfNk1wMtzcWR80
+                                               
bxbeKigOBh1Jf2OAKVOOdobBQIou9txzT9eM+vCHP5wcfvjhQ9Ohhx2afPCDH3T3vPjFL3YyqHgyOk5eBOlBBM91pDwpvvOd70ze8573
+                                               
uKjqC1/4QnLY4YcV5l+VuO+zn/1scvrppxcu0JP//7e+9S2XL45Hs4v/E03zXB/60IeSww6rn78S937xi190RDkIOSJORhcI+aosYkXQ
+                                               
ImgR/8te9rICgva2oAuE6/K2gNSxxQEHHNDIFtxDedB1s//++ydve9vbnFzptdlmm2WJc0RUlP/73//+5HOf+5y7t0huWVJ++A/57bff
+                                               
fll+IpanPvWp2WJaeV8QQZ9zzjnuOhF0FxG06klZBA1B77XXXu6aLbbYwh1Z2Ac09Yum0AsLneVLtL4ppw984APJoYceWlgWg+kjH/mI
+                                               
8yU9Fy1m2YHvHHquQRvrb7gNjtMCZF2gk1EcgAVY+NBXtp2PHp4mNQbZaKONsiY1EYI+8hFtFuVRlBSZIlMVT5HRq171qsJV7aQHjsl1
+                                               
KiASTRZQR4eqJOT/D/Q3fa004clbLwmcSB9kYuhRBtkhH0GLoGNH0CK/oghaOtKfp2a3iOx973ufiy5AK1v0/pEfMjieddaZTj7E8/jH
+                                               
Pz4jICquVt6LYXtkAFZNQ/7jHve4zN94eYO8jcsi6JgEXSeC3muvfgQ9HgQtPfiOIUJV3aYbU+un1yknlQf9vp/61KecLDgIoub/1AVQ
+                                               
9nxwGxynxaaK8miTQPQIuifaHVkflaUR5eA6L0gB+lryxn7DG96QdUe0AZ399C8hk0rHkXVvgfLWkaiWiIxriNY4nnfeee632FCeeegc
+                                               
fU/kLXJ+5StfmS0cHhNFOsgJJwpBz5t3ubtGZPCiF70oI+cuwAgA8tlm237/Kkl9kV3gpz/9qctD/kbkN9i6mngEPX4RtPTgQ+4TnvAE
+                                               
lz+JbwjaWaUNiILf9KY3OZnygQsuuMD9NmhjcRncBsdVdeO2RWcETf9MCEF/87hvOmPssGP/IxpND8DvSqEgD13PF9DXvva1Tqacj+E3
+                                               
QA6lI8v78Tt9o3pRaJcLvWUH9a+P8vulM0N+yFsvFl4aoIkt6kK2mCgEzRAorpEt9nvXftlvMWyh8nwo3dJLH+JEmPSzKlBAt/71zfNU
+                                               
fvInNmUgHz64yR4a/ihbGEF7KA8+qub1fc1rXtOr67kItkY5uevTBOj2QuaznvUsd/z85z/vzg9CZSmCzobOBuZbB+NO0IokVOgM5QFN
+                                               
H1Zy6c7QG1GFedppp7nfsgqQHlmYnt833WzTrJtFe6ONhfNJZ8ZwkrdI6WMf+1j2W9fQc04UgmbsMdeIMOkDjkVKeShffSCWr2yx5RZB
+                                               
2x7VhfK78qorXT60ltSkViSoa4ygPZQHdTiv7xvf+MZaG3JU4TOf+YyTqfrH9xowirvSvycFQa+5f03yla98xUWufEij7xFQIE2SIhTG
+                                               
7vKBEUNrWJC6Lbguf+SLrd6a9IVzZHcHoGu6hGxB5SBvOd8RRxzhzo8F9JwThaAZL841DIfiyAe67JoBX2oDyWR4XT4/hiPqO0jbip+H
+                                               
8sOm5CMbM7RxsM/TCNpDeVCHyVt1mjquzRfa2oIRVsiULZjMBAblTgqCBnpwSJUvojJ0rALXpAj6qTiGELT6tyYCQfOFfayg55yoBE1z
+                                               
M7umwJeaQjIHCZoPlAoW2lb8PJTfIEEzcsYIuhzKY5CgP/rRjxpB10EdggZlRsUhGN7FVjJsRROayI++PAiWIXIYmmFMHM8//3wnO6sA
+                                               
6fGOO26fkARN5Rkr6DmNoPv5PfvZzx5TgsbmRtDlUB6DBM0oJyPoGqhL0CBfwAuvXeimXO6zzz7OSKTNt9jcOQUf8eokuisYyqSB9fR3
+                                               
g6wCpMeJGkEbQY8jQe9sBJ0/GkF7TCqC1sNj5O985zvOMEp8QJEzNE2PecxjspEZLJACsgqQHo2g/XMaQRtBA8nV0QjaY9IQtB6ccYQa
+                                               
waDZPCQmKBhBjw30nEbQRtBAcnU0gvaYdAT9i1/8whmEj3maSZdPdFfgFP2uC45VyV9rXRzh0HMaQRtBA8nV0QjaY1IQtB6aZfpYdwOD
+                                               
6GMejnjRRRe5D4RMp0RG0QfBosS19pGwPvScRtBG0EBydYSgtViSEXT/70lB0KyqhjE0QYRol1lWMWDD7MKh5xxLgi5aLEm2MILuHceA
+                                               
oAcXSzr5lA0rgrZhdjVRl6AxAsbQjDFmzwmMj6Zg6iSbqNIMek5IQqvZaQW5rgia9aCNoOsT9HgtNyqCHo/lRpXHIEHbRJWaCCVoYXD+
+                                               
OwZvAxmz0VTvTW2qN9ONyXvjjTfOVpFruzC77ps9Z7aTpy4nknaw0DV6XiNof/ze977nrlEQw1rIMUiJe9XKlM/hg/oNSAcWqlK56aP7
+                                               
zJkz3W+6pksoD5vq3RJScjhB9/9mvVyMIYL++Mc/7s5jbKVQkIeux4EfNYslpc9VxxZ1IVvQf0/eRM+KUtTlVNcWuk73sYED8uhy4gXA
+                                               
/7VMpPLXMxpB+6O2IBNBv/nNb14vgq6jn67XPawxjkzVP3Wr6XfpwALy0lWRfH45XtC+XMrvlx7FiyX5l1UdHQZtMakWSwpdbnTmJTOd
+                                               
MUSMr3/962250XFYblTniEZ4SZK/7EcTOwbYoDUv98CDDswWO1f+OhpB+3zZPo5rtKgSe/A13TsvD+qZghhFx3ycB4PlAQmy8QDXqPyI
+                                               
7LtAkb11blIuN4oCMRMIXbCfNzPGyC/Yf/Ahh7jRHYC3c1EeRUlvcmS+/e1vd7JE/E0W7GetapDpwL9cfnWTkP8/0N9lC/bT/wfq2KIs
+                                               
VUG20Oag2EKVgZ0jQLAt0t9VJuzijRwiZ9kYUgTKF3APMIL2+RJAaJcgESndHPg5qOMXKg/ql7o35Gt8G9AekVwrSJ+f/exn7jpspJ1M
+                                               
GBkluVzXy2W9/OomIf9/oL+LFuxnSzvtO9rEFizYr30oH/UL9gv1trya4gxCxZXDQqja8ipkmym2udGWV3x8QgZOJDIoiwKlR9mWV2xR
+                                               
tN6WVw22WeK+NltesdFsrC2v0IWPdUWQHgxXVP+zjiSGLbJtE7tPVNlC+XAd12u4I0kEw1oXRb6h/2MrrluPoNOPZj33dccYUOUbJOjO
+                                               
F0u6fn2CLlosKY9836vIET/HL/D70G2eqE/cQ/1ChiaG8X98TygqE/TT7uIiRxLLMlDOfLxsU0dYsZCoXDsIldldH03ztmBPU56r7pZX
+                                               
1G26SZCRDx4mzJZXtmmsx+CmsXl5sRJfivXmzusiW2DD8dg0VtDfP/nJT9x1RPTYQt1ETRMThujTVgtBk4bK8h+MoMd6uVG6EcYighbB
+                                               
FEXQQHkT8aoJjl/kX5xNE76lOsKONVUvCL0c1RLixUJ5KtqMmT7xiU+sF5UK+j9BTrZp7PZxbEHkLFtMqE1j2dqbpnys7cL5cMBbhX4z
+                                               
MhgGGYAIlo0fZbCtt9ra9XXhjFSakMT1JHWVkNivTM2fsoqm8xCnhrqRcD7JpfAG86uTdtihv2MM0bC6LAb1kS3o22KjWOnB89S1RVHi
+                                               
GVjnGJnaSVoVT5BOHBW1kYgu+DhUxxZcx/X8X5EiiS4U/+zr20DnzzjjDHctkTZHIuhMtw4IGnuQD8TMEZt3uR40KzWSj15YkAJ7aYJB
+                                               
UlAZ8UFVJE1iuBv2dWWyXViZ4ENcnye13Xff3Y1kAoP+UIRzzz03u5euSfqB6/hFWeLjHN0sBARqXQ3aQmWx/K7lyb777pvpgS30bKF6
+                                               
FNmClpO2OguxBdHz/PnzHefBfbF4FE6Gm0fo/F+xckWyctVK1xfTJvFmI+pQ/3EoZHQclJXsNM6yTdpll12S6dOnl5LhILLK3zvOmTMn
+                                               
2XvvvQvltk1EhlWQHowPPv744zuJ5GlOL1261OVTZJf8OT6CKFppm9797ne7yQ15Ww9C5/jwo5caiUgFFN3TBpLHS5yZjcpPI35AzBeC
+                                               
8qPeaaNSEt0L+q0oP/3GS4MgQi/aNokIGh/Ti2EY8raHlNjlpkhu20QrU8Scz1PQOXiGOq6XaptEdyLc0/TjK7rAfXBgETfWSj0uhpPx
+                                               
kc76oEGRccugtxX30AdF5/uRRx7pNvNkaE1VYhEkjhQsfUezZ8/Ooh8w+BYuQ15fPigSyeIADD068cQTs3zqJu476aST3LjRbEhOhW3y
+                                               
+jKKg+c56qijkmOPPbZQfkhCB0iH59Hed1XEk9ePDzO33HKL6xfGFieccMJQW0ybPs1dx/VcS4TG5CEhxDfQc2pPFq2xLpGPUBn7SndH
+                                               
FUG0hWSu6lVE8vr5z39e2KQfRN4v8G+a1vjElGOmuLI9dVpxWWSp9zv1iXrFzuLq6wWhz5m/Dp150dMnzIQXVqNsW0ewRci45rwtIEbG
+                                               
6vNsU6Yc7Wwx1D97v7PvJUNbZ8yY4T6OKr9QW4A61zZBJ6M4SE0QSqR1ENJMyaON/qEIkd+FLeoCPevabxh4rq7t2wRFOnWpZ9P8YpcH
+                                               
aOJrXftniC26KJ+mz4UusRPoNIJugiJFm6Y2KJIXK4Wi6N5YqQ6K7m+a6qDpfU2Rz28s8mye3/r3tU1NUSQrVqqDovubpomGCUfQBoPB
+                                               
YOjDCNpgMBgmKIygDQaDYYKiM4Ju0p8Tuw/I9StVjFQoQxd61EX/nnh69C2x4dqiie5lcNIal0k8NNIh/RcPG7gtJoIekXXIY1JE0HEd
+                                               
ekOH2cLwaMDk8OMRJkTccOMNbslNZq60SchgARG2qqo7WQUwrpLxtkyDRdZNNxXnU5X0HMhgNpLGHdcBY4+ZCs2MoqZ24T7sQNKU4Tpg
+                                               
kDrjgL0t6uuRtwXjVTXtvg4YbxvLFvhGfnx6KNCbiSs8h+QN5jEs5W2BXbFvXVCO8u82tsCW2FSTqOoAf6Ys29qChAzqm8Zg1wH1W/4d
+                                               
wxb5MdmhwBbU8Xa26N+HDNagyY/VDwXLSMi/m9oin5DBhiFw8wgFxCwtBnozy6tNQgbrbzBNkamPmq1WBTUPeMjLZl3mBtAz1bFIfmhi
+                                               
AD+y0IH/11nQmynnDFy/9NJLW9klbwvkYedhkH7MJmJyCks/trUFCRnYgucZXN6zCkwuiWaLud4WWoK2CtKP5QKwY0xbIIvZokULV5WB
+                                               
yosNeQaepY0tsCU2xRZUxmGQfpQdMzvRI6YtOIasVSPcetut3ha9sollC0hpWP5qDTN5ChnowfRo6vmg/Dpp1uxZjnuQpeAyxBa8IGLY
+                                               
Ip9kFzhjBCVY/DtWItpRxIPiIQXP4HAUY8YYbzDuL5JdJyEDh8ZorCFbBenGGwtHYeorb+e2enC/3vLIVSRdZQsckAXyWbs6pi14SVG5
+                                               
r1lQvJKdIN2IaNCZKdAxbcFsPeSGTsFnSjGVjwoZyxaq3MNmKEo3on50RveYtsC2yC1a4rMI7PJDxaUsY9kCH8PXIIVKv0x/g7yo1wRf
+                                               
MW1BncMWLBQEhtli0aJF7iVLHY9pC/lb1YQV6UYgxQuOFhnr38fQI5/Ip7M+aJqQTG0mIi2DHpQuBQpHq2nFBFEgb8aQyHHBggWO0Ic5
+                                               
R13ggLxhaQaVQXnmySA2eCPjUCGRIzvKEFnFnjGG4zGNn8WCyiC9eLmLDGIDmaEBBLqiM7rHBLbFxtq9pwjSizKj7EJaYnWBr2ELdT9V
+                                               
2QIfxpfx6ZggT+rewoUL0jOjIb2oy9RpLfAUE3AQ9U8bZVTZAm6D45p0l4UiJehyJepCD4TSNNNDCJpojZWgtIFolVFCIRlE8jSh1qzp
+                                               
r6xXJZsIhehVpNRWD93PmxXnCyVobKEFbNrqACSDJRSpXCzGAqpkE6EQVa1bF2dzUt1PxSaSDyFoojVssezO/gI2bXUAkoFMZIc0Z9EV
+                                               
nUVKbfXQ/dgWG2PrMuhaojXKTstgttUBSAa+hi1CCRpfxqdBWz10P3WOuqe9QIuga1f36jJ1WjuptNUBSAYchC3UJ14lG26D40TQMfTw
+                                               
6MvqIILuC8aZaSrQdweKRlLogagkRBIhb61QSAbRAU0hdf5XyeZjBVF0XEP3o0YqYlV/o/KkImKL0GZvCCSD6ACHCumTpyLS3IsdQbOk
+                                               
KxUx5MVN/zO20M4hMW2BTGRrSdwq2eiKzlrHOxawLTYOeXFTZpSdWpkxbYGvYQt8D1TJxofx5ditCfKk7lEHyyC9qMvUabUyY9oCDsIW
+                                               
VS9ucRncBsf51kR7PQYRnaClvCKlsj0JgR6evlk657siaBybfkdQJZtIqSuCps8zhKDdx9KeLbpoTdDnifOFdPfwRZo+2i4Imj5PPgiV
+                                               
QXrRrMcWXRE0skO6e9AVnbsgaGyMrcsgvSgzym7Y2uZ1IBn4GrYI6e7Bh/Hlrgg6pGVFXaZOd0XQ2KLqe5G4THsSZi2rAo5rCyPoHCYN
+                                               
Qd8fRtBdRdB1CBp9u4ygV60eZ4KebwQNyNMIejSMoHMwgvYwgvYwgvYwgu6dS7nMCLoFJMMI2sswgvYyjKC9DCNoL8MIOgc9vBG018sI
+                                               
2utlBO31MoL2ehlBt4AR9GgYQXsYQXsYQXuQpxH0aBhB52AE7WEE7WEE7WEE3TuXcpkRdAtIhhG0l2EE7WUYQXsZRtBehhF0Dnp4I2iv
+                                               
lxG018sI2utlBO31MoJuASPo0TCC9jCC9jCC9iBPI+jRMILOwQjawwjawwjawwi6dy7lMiPoFpAMI2gvwwjayzCC9jKMoL0MI+gc9PBG
+                                               
0F4vI2ivlxG018sI2utlBN0CRtCjYQTtYQTtYQTtQZ5G0KNhBJ2DEbSHEbSHEbSHEXTvXMplRtAtIBlG0F6GEbSXYQTtZRhBexmTiqBZ
+                                               
zPrmJYEEPas7gmZx7/Em6NAF+6kkVMRH+4L9IQQ9URbsR9fJsGB/KEF3uWB/KEF3uWA/XBRC0Et63JZfsH+DImi2xMGIIqUqgmarHbbz
+                                               
CdlmJhSSwYat7CcXQtBsPcQC6jHy76MvB2dms8+QXUTYyQFbhG6eGQLJWLZsWbr91/AImopC1NgFQePUIaREBI0tutj+C5nIJg9QJRtd
+                                               
0bkLgsbGIaREmVF2lCGIaQt8DVuEbP+FD+PLnqDb6wHIk7oXsv0XdZk6Td0GMW0BB2GLqu2/xGVwGxyXbf8VyRZ5RCdoAedjSxiRbhXY
+                                               
wmbx4sVZZBcTOB2GDHnj03xUoccEhcxmn+q2qMLatWudLUSiMUGEhGy98asAgXWxWStgF2RFxVXA8dFXJBoTyES2KlcV0BWduwA21guo
+                                               
CpQZ+irKjQl8Ddn43jDgw/hyDFIcBHVPXThVoC5Tp/VCiQk4CFtoi7wqwG1wXOwgxiNJ/h/SrklBEPZHsAAAAABJRU5ErkJggg=="/>
+                       <rect v:rectContext="foreign" x="0" y="608.42" 
width="113.836" height="29.0914" class="st2"/>
+               </g>
+               <g id="shape1007-23" v:mID="1007" v:groupContext="shape" 
transform="translate(289.786,-511.169)">
+                       <title>Sheet.1007</title>
+                       <desc>Accumulo DataSourceV2</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="56.6929" cy="615.392" width="113.39" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="113.386" 
height="44.2404" class="st5"/>
+                       <text x="32.51" y="611.79" class="st6" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Accumulo <tspan
+                                               x="22.11" dy="1.2em" 
class="st8">DataSourceV2</tspan></text>            </g>
+               <g id="shape1008-27" v:mID="1008" v:groupContext="shape" 
transform="translate(289.786,-446.529)">
+                       <title>Sheet.1008</title>
+                       <desc>Spark Dataframe</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="56.6929" cy="615.392" width="113.39" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="113.386" 
height="44.2404" class="st3"/>
+                       <text x="15.71" y="618.99" class="st4" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Spark 
Dataframe</text>                </g>
+               <g id="shape1010-30" v:mID="1010" v:groupContext="shape" 
v:layerMember="0" transform="translate(122.64,-526.202)">
+                       <title>Dynamic connector.1010</title>
+                       <path d="M0 630.43 L160.11 630.43" class="st9"/>
+               </g>
+               <g id="shape1011-36" v:mID="1011" v:groupContext="shape" 
v:layerMember="0" transform="translate(339.393,-511.169)">
+                       <title>Dynamic connector.1011</title>
+                       <path d="M7.09 637.51 L7.09 650.87" class="st9"/>
+               </g>
+               <g id="shape1012-41" v:mID="1012" v:groupContext="shape" 
v:layerMember="0" transform="translate(339.393,-446.529)">
+                       <title>Dynamic connector.1012</title>
+                       <path d="M7.09 637.51 L7.09 650.87" class="st9"/>
+               </g>
+               <g id="shape1014-46" v:mID="1014" v:groupContext="shape" 
transform="translate(289.786,-317.249)">
+                       <title>Sheet.1014</title>
+                       <desc>MLeap Bundle</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="56.6929" cy="615.392" width="113.39" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="113.386" 
height="44.2404" class="st3"/>
+                       <text x="21.59" y="618.99" class="st4" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>MLeap Bundle</text>  
         </g>
+               <g id="shape1020-49" v:mID="1020" v:groupContext="shape" 
transform="translate(289.786,-235.706)">
+                       <title>Sheet.1020</title>
+                       <desc>Accumulo DataSourceV2</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="56.6929" cy="615.392" width="113.39" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="113.386" 
height="44.2404" class="st5"/>
+                       <text x="32.51" y="611.79" class="st6" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Accumulo <tspan
+                                               x="22.11" dy="1.2em" 
class="st8">DataSourceV2</tspan></text>            </g>
+               <g id="shape1021-53" v:mID="1021" v:groupContext="shape" 
transform="translate(9.25393,-115.512)">
+                       <title>Sheet.1021</title>
+                       <desc>AvroIterator</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197" v:verticalAlign="0"/>
+                       <v:textRect cx="56.6929" cy="555.295" width="113.39" 
height="164.434"/>
+                       <rect x="0" y="473.077" width="113.386" 
height="164.434" class="st5"/>
+                       <text x="26.52" y="487.88" class="st6" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>AvroIterator</text>  
         </g>
+               <g id="shape1022-56" v:mID="1022" v:groupContext="shape" 
transform="translate(46.1043,-203.386)">
+                       <title>Sheet.1022</title>
+                       <desc>Pushdown Filter</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="38.2677" cy="615.392" width="76.54" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="76.5354" 
height="44.2404" class="st1"/>
+                       <text x="12.76" y="611.79" class="st7" 
v:langID="1033"><v:paragraph 
v:horizAlign="1"/><v:tabList/>Pushdown<v:newlineChar/><tspan
+                                               x="25.67" dy="1.2em" 
class="st8">Filter</tspan></text>          </g>
+               <g id="shape1023-60" v:mID="1023" v:groupContext="shape" 
transform="translate(46.1043,-159.145)">
+                       <title>Sheet.1023</title>
+                       <desc>MLeap Execution</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="38.2677" cy="615.392" width="76.54" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="76.5354" 
height="44.2404" class="st1"/>
+                       <text x="21.6" y="611.79" class="st7" 
v:langID="1033"><v:paragraph 
v:horizAlign="1"/><v:tabList/>MLeap<v:newlineChar/><tspan
+                                               x="14.36" dy="1.2em" 
class="st8">Execution</tspan></text>               </g>
+               <g id="shape1024-64" v:mID="1024" v:groupContext="shape" 
transform="translate(46.1043,-115.512)">
+                       <title>Sheet.1024</title>
+                       <desc>Pushdown Score Filter</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="38.2677" cy="615.392" width="76.54" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="76.5354" 
height="44.2404" class="st1"/>
+                       <text x="12.76" y="611.79" class="st7" 
v:langID="1033"><v:paragraph 
v:horizAlign="1"/><v:tabList/>Pushdown<v:newlineChar/><tspan
+                                               x="10.78" dy="1.2em" 
class="st8">Score Filter</tspan></text>            </g>
+               <g id="shape1025-68" v:mID="1025" v:groupContext="shape" 
v:layerMember="0" transform="translate(339.393,-381.889)">
+                       <title>Dynamic connector.1025</title>
+                       <path d="M7.09 637.51 L7.09 650.87" class="st9"/>
+               </g>
+               <g id="shape1026-73" v:mID="1026" v:groupContext="shape" 
v:layerMember="0" transform="translate(339.393,-317.249)">
+                       <title>Dynamic connector.1026</title>
+                       <path d="M7.09 637.51 L7.09 667.77" class="st9"/>
+               </g>
+               <g id="shape1027-78" v:mID="1027" v:groupContext="shape" 
v:layerMember="0" transform="translate(122.64,-250.739)">
+                       <title>Dynamic connector.1027</title>
+                       <path d="M0 630.43 L160.11 630.43" class="st9"/>
+               </g>
+               <g id="shape1028-83" v:mID="1028" v:groupContext="shape" 
transform="translate(287.049,-115.512)">
+                       <title>Sheet.1028</title>
+                       <desc>Spark Dataframe</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="56.6929" cy="615.392" width="113.39" 
height="44.2404"/>
+                       <rect x="0" y="593.271" width="113.386" 
height="44.2404" class="st3"/>
+                       <text x="15.71" y="618.99" class="st4" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Spark 
Dataframe</text>                </g>
+               <g id="shape1030-86" v:mID="1030" v:groupContext="shape" 
v:layerMember="0" transform="translate(338.024,-235.706)">
+                       <title>Dynamic connector.1030</title>
+                       <path d="M7.09 637.51 L7.09 706.43" class="st9"/>
+               </g>
+               <g id="shape1032-91" v:mID="1032" v:groupContext="shape" 
transform="translate(167.222,-540.551)">
+                       <title>Sheet.1032</title>
+                       <desc>Training</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="43.2913" cy="627.512" width="86.59" 
height="20"/>
+                       <rect x="0" y="617.512" width="86.5827" height="20" 
class="st2"/>
+                       <text x="23.52" y="631.11" class="st7" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Training</text>      
         </g>
+               <g id="shape1031-94" v:mID="1031" v:groupContext="shape" 
transform="translate(2.16732,-302.598)">
+                       <title>Sheet.1031</title>
+                       <path d="M0 637.51 L403.94 637.51 L403.94 371.62 L0 
371.62 L0 637.51 Z" class="st11"/>
+               </g>
+               <g id="shape1033-96" v:mID="1033" v:groupContext="shape" 
transform="translate(165.159,-265.748)">
+                       <title>Sheet.1033</title>
+                       <desc>Inference</desc>
+                       <v:textBlock v:margins="rect(4,4,4,4)" 
v:tabSpace="42.5197"/>
+                       <v:textRect cx="43.2913" cy="627.512" width="86.59" 
height="20"/>
+                       <rect x="0" y="617.512" width="86.5827" height="20" 
class="st2"/>
+                       <text x="20.06" y="631.11" class="st7" 
v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Inference</text>     
         </g>
+               <g id="shape1034-99" v:mID="1034" v:groupContext="shape" 
transform="translate(2.16732,-111.26)">
+                       <title>Sheet.1034</title>
+                       <path d="M0 637.51 L403.94 637.51 L403.94 456.09 L0 
456.09 L0 637.51 Z" class="st11"/>
+               </g>
+       </g>
+</svg>
diff --git a/output/images/blog/202002_masc/runtime.png 
b/output/images/blog/202002_masc/runtime.png
new file mode 100644
index 0000000..06c0e6f
Binary files /dev/null and b/output/images/blog/202002_masc/runtime.png differ
diff --git a/output/images/blog/202002_masc/sparkml_vs_mleap_accumulo.png 
b/output/images/blog/202002_masc/sparkml_vs_mleap_accumulo.png
new file mode 100644
index 0000000..2a2dafb
Binary files /dev/null and 
b/output/images/blog/202002_masc/sparkml_vs_mleap_accumulo.png differ
diff --git a/output/index.html b/output/index.html
index f9491ee..1f2f10e 100644
--- a/output/index.html
+++ b/output/index.html
@@ -179,6 +179,13 @@
         
         <div class="row latest-news-item">
           <div class="col-sm-12" style="margin-bottom: 5px">
+           <span style="font-size: 12px; margin-right: 5px;">Feb 2020</span>
+           <a href="/blog/2020/02/26/accumulo-spark-connector.html">Microsoft 
MASC, an Apache Spark connector for Apache Accumulo</a>
+          </div>
+        </div>
+        
+        <div class="row latest-news-item">
+          <div class="col-sm-12" style="margin-bottom: 5px">
            <span style="font-size: 12px; margin-right: 5px;">Dec 2019</span>
            <a href="/blog/2019/12/16/accumulo-proxy.html">Accumulo Clients in 
Other Programming Languages</a>
           </div>
@@ -205,13 +212,6 @@
           </div>
         </div>
         
-        <div class="row latest-news-item">
-          <div class="col-sm-12" style="margin-bottom: 5px">
-           <span style="font-size: 12px; margin-right: 5px;">Sep 2019</span>
-           <a href="/blog/2019/09/10/accumulo-S3-notes.html">Using S3 as a 
data store for Accumulo</a>
-          </div>
-        </div>
-        
         <div id="news-archive-link">
          <p>View all posts in the <a href="/news">news archive</a></p>
         </div>
diff --git a/output/news/index.html b/output/news/index.html
index 3e23ea9..785d167 100644
--- a/output/news/index.html
+++ b/output/news/index.html
@@ -143,11 +143,22 @@
           <div>
 
 
-<h3>2019</h3>
+<h3>2020</h3>
 
   
   
   <div class="row" style="margin-top: 15px">
+    <div class="col-md-1">Feb 26</div>
+    <div class="col-md-10"><a 
href="/blog/2020/02/26/accumulo-spark-connector.html">Microsoft MASC, an Apache 
Spark connector for Apache Accumulo</a></div>
+  </div>
+
+  
+  
+    
+    <hr />
+    <h3>2019</h3>
+  
+  <div class="row" style="margin-top: 15px">
     <div class="col-md-1">Dec 16</div>
     <div class="col-md-10"><a 
href="/blog/2019/12/16/accumulo-proxy.html">Accumulo Clients in Other 
Programming Languages</a></div>
   </div>
diff --git a/output/search_data.json b/output/search_data.json
index bbdd783..f5f743b 100644
--- a/output/search_data.json
+++ b/output/search_data.json
@@ -302,6 +302,14 @@
     },
   
   
+    "blog-2020-02-26-accumulo-spark-connector-html": {
+      "title": "Microsoft MASC, an Apache Spark connector for Apache Accumulo",
+      "content"         : "OverviewMASC provides an Apache Spark native 
connector for Apache Accumulo to integrate the rich Spark machine learning 
eco-system with the scalable and secure data storage capabilities of 
Accumulo.Major Features  Simplified Spark DataFrame read/write to Accumulo 
using DataSource v2 API  Speedup of 2-5x over existing approaches for pulling 
key-value data into DataFrame format  Scala and Python support without overhead 
for moving between languages  Process streaming da [...]
+      "url": " /blog/2020/02/26/accumulo-spark-connector.html",
+      "categories": "blog"
+    }
+    ,
+  
     "blog-2019-12-16-accumulo-proxy-html": {
       "title": "Accumulo Clients in Other Programming Languages",
       "content"         : "Apache Accumulo has an Accumulo Proxy that allows 
communication with Accumulo using clients writtenin languages other than Java. 
This blog post shows how to run the Accumulo Proxy process using Unoand 
communicate with Accumulo using a Python client.First, clone the Accumulo Proxy 
repository.git clone https://github.com/apache/accumulo-proxyAssuming you have 
Uno set up on your machine, configure uno.conf to start the Accumulo Proxyby 
setting the configuration below:exp [...]

Reply via email to