<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4113082053753185517</id><updated>2026-05-30T14:13:35.483+02:00</updated><category term="Python"/><category term="R"/><category term="ArcGIS"/><category term=".NET"/><category term="geoprocessing"/><category term="javascript"/><category term="raster"/><category term="ArcObjects"/><category term="Python Toolbox"/><category term="SDM"/><category term="book"/><category term="esri rest specification"/><category term="featureclass"/><category term="functional programming"/><category term="projections"/><category term="C#"/><category term="Cursors"/><category term="Fsharp"/><category term="MongoDb"/><category term="PostgreSQL"/><category term="Ubuntu"/><category term="anti-rdbms"/><category term="node.js"/><category term="ogr"/><category term="recommended"/><category term="table"/><category term="BIOMOD"/><category term="GreatCircle"/><category term="Julia"/><category term="NetworkX"/><category term="PostGIS"/><category term="Quantum GIS"/><category term="REPL"/><category term="Rtree"/><category term="Ruby"/><category term="Tokyo Cabinet"/><category term="WhatILearned"/><category term="dismo"/><category term="linux"/><category term="sdmpredictors"/><category term="shortest path"/><category term="spatial filter"/><category term="spatial index"/><category term="transformations"/><category term="AI"/><category term="Clone Digger"/><category term="DatagridView"/><category term="DragDrop"/><category term="GIS"/><category term="GeoJSON"/><category term="GeometryVisualizer"/><category term="Go"/><category term="Jython"/><category term="MarineSPEED"/><category term="Monte Carlo method"/><category term="OBIS"/><category term="OCaml"/><category term="OpenLayers"/><category term="Orchard Game"/><category term="Psyco"/><category term="PyPy"/><category term="SQLite"/><category term="WKT"/><category term="WinForms"/><category term="binary"/><category term="checked"/><category term="clustering"/><category term="code publishing"/><category term="csv"/><category term="document database"/><category term="duplicate code"/><category term="graph"/><category term="groovy"/><category term="gvSIG"/><category term="java"/><category term="logging"/><category term="numpy"/><category term="pscp"/><category term="pyproj"/><category term="roslyn"/><category term="scala"/><category term="shell"/><category term="similar code"/><category term="syntax highlighting"/><category term="tiff"/><category term="tmux"/><category term="uDig"/><category term="unchecked"/><category term="unix"/><category term="youtube"/><title type='text'>Samuel Bosch</title><subtitle type='html'>Programming, data science and more ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>72</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-330462971607006192</id><published>2019-01-08T10:17:00.000+01:00</published><updated>2019-01-08T10:17:11.424+01:00</updated><title type='text'>Updating Drupal Modules with the Update Manager on Windows IIS: Cannot remove file</title><content type='html'>While trying to update the editor_file Drupal module with the web interface I encountered the following error:&lt;br /&gt;
&lt;br /&gt;
Cannot remove file /web/modules/editor_file\config\schema\editor_file.schema.yml&lt;br /&gt;
&lt;br /&gt;
After a long search I remembered that I had changed the application pool user in IIS for my website but the corresponding file permissions where apparently not updated. You can set file permissions for the application pool user b:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;selecting the directory in IIS&lt;/li&gt;
&lt;li&gt;clicking Edit Permissions&lt;/li&gt;
&lt;li&gt;going to the tab Security&lt;/li&gt;
&lt;li&gt;clicking Edit&lt;/li&gt;
&lt;li&gt;clicking Add...&lt;/li&gt;
&lt;li&gt;the object name for app pool users is the name of the application pool prefixed by IIS AppPool\ e.g. IIS AppPool\mywebsite&lt;/li&gt;
&lt;li&gt;I gave Full Control permissions to the module folder and my update procedure worked&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Some system notes:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Drupal 8.6&lt;/li&gt;
&lt;li&gt;Windows Server 2012 R2&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
I&#39;m new to Drupal so if you found a better way let me know.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/330462971607006192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/330462971607006192?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/330462971607006192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/330462971607006192'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2019/01/updating-drupal-modules-with-update.html' title='Updating Drupal Modules with the Update Manager on Windows IIS: Cannot remove file'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-3214731342142426449</id><published>2018-09-11T23:11:00.000+02:00</published><updated>2018-09-11T23:11:12.370+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GreatCircle"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Great circle calculations with numpy</title><content type='html'>&lt;p&gt;In this very short post I want to point you to some code for calculating the centroid and distance to that centroid for a set of points in numpy. As bonus I also included some profiling. Note that I already blogged about the centroid function in a &lt;a href=&quot;https://www.samuelbosch.com/2014/05/working-in-lat-long-great-circle.html&quot;&gt;previous post&lt;/a&gt;.&lt;/p&gt;

&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .1em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;math&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; atan2, sqrt, degrees
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;numpy&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;np&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;math&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; radians, sin, cos

RADIUS &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;6371.009&lt;/span&gt;


&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;get_centroid&lt;/span&gt;(points):
    xy &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;asarray(points)
    xy &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;radians(xy)
    lon, lat &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; xy[:, &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;], xy[:, &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;1&lt;/span&gt;]
    avg_x &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sum(np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;cos(lat) &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;cos(lon)) &lt;span style=&quot;color: #333333&quot;&gt;/&lt;/span&gt; xy&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;shape[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;]
    avg_y &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sum(np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;cos(lat) &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sin(lon)) &lt;span style=&quot;color: #333333&quot;&gt;/&lt;/span&gt; xy&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;shape[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;]
    avg_z &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sum(np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sin(lat)) &lt;span style=&quot;color: #333333&quot;&gt;/&lt;/span&gt; xy&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;shape[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;]
    center_lon &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; atan2(avg_y, avg_x)
    hyp &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; sqrt(avg_x &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; avg_x &lt;span style=&quot;color: #333333&quot;&gt;+&lt;/span&gt; avg_y &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; avg_y)
    center_lat &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; atan2(avg_z, hyp)
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;return&lt;/span&gt; degrees(center_lon), degrees(center_lat)


&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;gc_distance_points&lt;/span&gt;(a, points):
    b &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;asarray(points)
    lat1, lng1 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; radians(a[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;1&lt;/span&gt;]), radians(a[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;])
    lat2, lng2 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;radians(b[:, &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;1&lt;/span&gt;]), np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;radians(b[:, &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;])

    sin_lat1, cos_lat1 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; sin(lat1), cos(lat1)
    sin_lat2, cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sin(lat2), np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;cos(lat2)

    delta_lng &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;subtract(lng2, lng1)
    cos_delta_lng, sin_delta_lng &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;cos(delta_lng), np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sin(delta_lng)

    d &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;arctan2(np&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;sqrt((cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; sin_delta_lng) &lt;span style=&quot;color: #333333&quot;&gt;**&lt;/span&gt; &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #333333&quot;&gt;+&lt;/span&gt;
                 (cos_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; sin_lat2 &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;
                  sin_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_delta_lng) &lt;span style=&quot;color: #333333&quot;&gt;**&lt;/span&gt; &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;2&lt;/span&gt;),
                 sin_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; sin_lat2 &lt;span style=&quot;color: #333333&quot;&gt;+&lt;/span&gt; cos_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_delta_lng)

    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;return&lt;/span&gt; RADIUS &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; d


&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0066BB; font-weight: bold&quot;&gt;gc_dist&lt;/span&gt;(a, b):
        &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;math&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; radians, sin, cos, sqrt, atan2
        lat1, lng1 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; radians(a[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;1&lt;/span&gt;]), radians(a[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;])
        lat2, lng2 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; radians(b[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;1&lt;/span&gt;]), radians(b[&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;0&lt;/span&gt;])

        sin_lat1, cos_lat1 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; sin(lat1), cos(lat1)
        sin_lat2, cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; sin(lat2), cos(lat2)

        delta_lng &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; lng2 &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt; lng1
        cos_delta_lng, sin_delta_lng &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; cos(delta_lng), sin(delta_lng)

        d &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; atan2(sqrt((cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; sin_delta_lng) &lt;span style=&quot;color: #333333&quot;&gt;**&lt;/span&gt; &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #333333&quot;&gt;+&lt;/span&gt;
                       (cos_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; sin_lat2 &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;
                        sin_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_delta_lng) &lt;span style=&quot;color: #333333&quot;&gt;**&lt;/span&gt; &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;2&lt;/span&gt;),
                  sin_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; sin_lat2 &lt;span style=&quot;color: #333333&quot;&gt;+&lt;/span&gt; cos_lat1 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_lat2 &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; cos_delta_lng)

        &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;return&lt;/span&gt; RADIUS &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; d


&lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; __name__ &lt;span style=&quot;color: #333333&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:

    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;random&lt;/span&gt;
    random&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;seed(&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;42&lt;/span&gt;)
    pts &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; [(random&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;uniform(&lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;180&lt;/span&gt;, &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;180&lt;/span&gt;), random&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;uniform(&lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;90&lt;/span&gt;, &lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;90&lt;/span&gt;)) &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;for&lt;/span&gt; _ &lt;span style=&quot;color: #000000; font-weight: bold&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #007020&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #0000DD; font-weight: bold&quot;&gt;1000000&lt;/span&gt;)]
    
    centr &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; get_centroid(pts)

    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold&quot;&gt;cProfile&lt;/span&gt;

    cProfile&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;runctx(&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;#39;gc_distance_points(centr, pts)&amp;#39;&lt;/span&gt;, &lt;span style=&quot;color: #007020&quot;&gt;globals&lt;/span&gt;(), &lt;span style=&quot;color: #007020&quot;&gt;locals&lt;/span&gt;())
    cProfile&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;runctx(&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;#39;dists = [gc_dist(centr, b) for b in pts]&amp;#39;&lt;/span&gt;, &lt;span style=&quot;color: #007020&quot;&gt;globals&lt;/span&gt;(), &lt;span style=&quot;color: #007020&quot;&gt;locals&lt;/span&gt;())
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;All code is also available at &lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/geosrc/numpy_greatcircle.py&quot;&gt;Github&lt;/a&gt;. Feel free to post a comment or email in case you have any questions.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/3214731342142426449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/3214731342142426449?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3214731342142426449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3214731342142426449'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/09/great-circle-calculations-with-numpy.html' title='Great circle calculations with numpy'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-4674396037604582019</id><published>2018-08-23T12:29:00.004+02:00</published><updated>2018-08-23T12:29:51.750+02:00</updated><title type='text'>Adding support for sftp to RCurl</title><content type='html'>While trying to download data from an FTP with the sftp protocol from R I encountered the folllowing error on my mac:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: red;&quot;&gt;Error in function (type, msg, asError = TRUE)  : 
  Protocol &quot;sftp&quot; not supported or disabled in libcurl
&lt;/pre&gt;
&lt;br /&gt;
The easiest way to fix this for me was performing the following steps:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;brew install curl --with-libssh2
&lt;/pre&gt;
&lt;br /&gt;
Then check whether sftp is now among the list of supported protocols:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;/usr/local/opt/curl/bin/curl -V
&lt;/pre&gt;
&lt;br /&gt;
Link to the new version of curl you installed:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;brew link --force curl
&lt;/pre&gt;
&lt;br /&gt;
Re-install RCurl from source:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;install.packages(&quot;RCurl&quot;, type = &quot;source&quot;)
&lt;/pre&gt;
&lt;br /&gt;
And finally check if sftp is now supported:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;RCurl::curlVersion()
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/4674396037604582019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/4674396037604582019?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/4674396037604582019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/4674396037604582019'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/08/adding-support-for-sftp-to-rcurl.html' title='Adding support for sftp to RCurl'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-3616035382055393071</id><published>2018-05-23T20:34:00.002+02:00</published><updated>2018-05-23T20:34:50.954+02:00</updated><title type='text'>A new fizzbuzz: generating sums for kids</title><content type='html'>With my oldest quizzing me for one sum after another for him to solve. I thought about writing a little piece of R code that would generate these for me. The code for doing so was less obvious then I imagined it to be.&lt;br /&gt;
&lt;br /&gt;
Goal:&lt;br /&gt;
&lt;br /&gt;
Generate all possible sums and subtractions for kids of the form&lt;br /&gt;
&lt;br /&gt;
10 - 4 = ?&lt;br /&gt;
4 + 3 = ?&lt;br /&gt;
&lt;br /&gt;
Constraints:&lt;br /&gt;
&lt;br /&gt;
- Only numbers between 0-10&lt;br /&gt;
- Result should be &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;generate_sums &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(maxresult&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;10&lt;/span&gt;) {
  sums &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c()
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;(maxresult&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;-1&lt;/span&gt;)) {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (j &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;(maxresult&lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt;i)) {
      sums &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c(sums, paste0(i, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&#39; + &#39;&lt;/span&gt;, j, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&#39; = ?&#39;&lt;/span&gt;))
    }
  }
  sample(sums[&lt;span style=&quot;color: #333333;&quot;&gt;!&lt;/span&gt;duplicated(sums)])
}
generate_subtractions &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(maxresult&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;10&lt;/span&gt;) {
  substractions &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c()
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;maxresult) {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (j &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; i&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;maxresult) {
      substractions &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c(substractions, paste0(j, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&#39; - &#39;&lt;/span&gt;, i, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&#39; = ?&#39;&lt;/span&gt;))
    }
  }
  sample(substractions[&lt;span style=&quot;color: #333333;&quot;&gt;!&lt;/span&gt;duplicated(substractions)])
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
I still believe that a more elegant approach should be possible but at least it works.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/3616035382055393071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/3616035382055393071?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3616035382055393071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3616035382055393071'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/05/a-new-fizzbuzz-generating-sums-for-kids.html' title='A new fizzbuzz: generating sums for kids'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-6468768180390404018</id><published>2018-02-28T21:21:00.000+01:00</published><updated>2018-02-28T21:21:01.434+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OBIS"/><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Fetching all records for a taxonomic group in OBIS</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/8/87/Berghia_coerulescens_(Laurillard%2C_1830).jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;225&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/8/87/Berghia_coerulescens_(Laurillard%2C_1830).jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
For example, if you want to download the records for all &lt;a href=&quot;https://en.wikipedia.org/wiki/Nudibranch&quot; target=&quot;_blank&quot;&gt;Nudibranchia&lt;/a&gt;&amp;nbsp;then in R it is as simple as doing:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;    install.packages(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;robis&quot;&lt;/span&gt;)

    data &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; robis::occurrence(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;Nudibranchia&quot;&lt;/span&gt;)

    &lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# get species data&lt;/span&gt;
    spdata &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; data[&lt;span style=&quot;color: #666666;&quot;&gt;!&lt;/span&gt;is.na(data&lt;span style=&quot;color: #666666;&quot;&gt;$&lt;/span&gt;taxonRank) &lt;span style=&quot;color: #666666;&quot;&gt;&amp;amp;&lt;/span&gt; data&lt;span style=&quot;color: #666666;&quot;&gt;$&lt;/span&gt;taxonRank &lt;span style=&quot;color: #666666;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;species&quot;&lt;/span&gt;,]
&lt;/pre&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;
&lt;/pre&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;pre style=&quot;line-height: 16.25px;&quot;&gt;    &lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# plot on a map&lt;/span&gt;
    robis::leafletmap(spdata)&lt;/pre&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizGTUe2ayR5oxp8eCuoIwn12ZW8rGjRJkCNf9VP_ix7f5CUD8XUEXYP2dCuYKlOpBLhfvo2LQ20IinQqcDb0P2bNAWTXgHE4Qw1ifb3uSiA6te3a9_z7hGIJUkCZC6lMNyVDCoA-YkysQ/s1600/Screen+Shot+2018-02-26+at+14.04.08.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;740&quot; data-original-width=&quot;1118&quot; height=&quot;263&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizGTUe2ayR5oxp8eCuoIwn12ZW8rGjRJkCNf9VP_ix7f5CUD8XUEXYP2dCuYKlOpBLhfvo2LQ20IinQqcDb0P2bNAWTXgHE4Qw1ifb3uSiA6te3a9_z7hGIJUkCZC6lMNyVDCoA-YkysQ/s400/Screen+Shot+2018-02-26+at+14.04.08.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Alternatively, you can download all data with the new mapper that is being developed:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://iobis.org/mapper2?scientificname=Nudibranchia&amp;amp;download=true&quot;&gt;http://iobis.org/mapper2?scientificname=Nudibranchia&amp;amp;download=true&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/6468768180390404018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/6468768180390404018?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/6468768180390404018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/6468768180390404018'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/02/fetching-all-records-for-taxonomic.html' title='Fetching all records for a taxonomic group in OBIS'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizGTUe2ayR5oxp8eCuoIwn12ZW8rGjRJkCNf9VP_ix7f5CUD8XUEXYP2dCuYKlOpBLhfvo2LQ20IinQqcDb0P2bNAWTXgHE4Qw1ifb3uSiA6te3a9_z7hGIJUkCZC6lMNyVDCoA-YkysQ/s72-c/Screen+Shot+2018-02-26+at+14.04.08.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-2801677145899385796</id><published>2018-02-26T21:21:00.000+01:00</published><updated>2018-02-26T21:21:06.788+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Error in linbin2D: (list) object cannot be coerced to type &#39;double&#39;</title><content type='html'>When calling bkde2D you might encounter the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Error in linbin2D(x, gpoints1, gpoints2) :&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; (list) object cannot be coerced to type &#39;double&#39;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This issue can manifest itself when the passed in data is a &lt;a href=&quot;https://cran.r-project.org/web/packages/tibble/README.html&quot; target=&quot;_blank&quot;&gt;tibble&lt;/a&gt; instead of a data.frame.&lt;br /&gt;
&lt;br /&gt;
Easy fix:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;data &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; as.data.frame(data)
&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/2801677145899385796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/2801677145899385796?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/2801677145899385796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/2801677145899385796'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/02/error-linbin2d-object-cannot-be-coerced.html' title='Error in linbin2D: (list) object cannot be coerced to type &#39;double&#39;'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-4259737332233501504</id><published>2018-02-24T21:21:00.000+01:00</published><updated>2018-02-24T21:21:20.596+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="R"/><category scheme="http://www.blogger.com/atom/ns#" term="raster"/><category scheme="http://www.blogger.com/atom/ns#" term="SDM"/><category scheme="http://www.blogger.com/atom/ns#" term="sdmpredictors"/><title type='text'>Speeding up mean and standard deviation calculation for a stack of rasters in R</title><content type='html'>While modelling the distribution of invasive seaweeds during my PhD I wanted to calculate the mean and standard deviation of a set of SDMs that appeared to be equivalent in for the current climate but who gave different results for the future climate. However, the standard naive approach for calculating the mean and standard deviation of a RasterStack was rather slow. I managed to get a 20 fold speed up by calculating the mean and standard deviation by aggregating them in a stream. This rather obvious for calculating the mean, summing all rasters and then dividing by the number of rasters. For the standard deviation, the formula is only slightly more complicated and can be found both on &lt;a href=&quot;https://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods&quot; target=&quot;_blank&quot;&gt;Wikipedia&lt;/a&gt; and in code on &lt;a href=&quot;https://stackoverflow.com/questions/5543651/computing-standard-deviation-in-a-stream&quot; target=&quot;_blank&quot;&gt;StackOverflow&lt;/a&gt;. If your raster contains very large numbers, you might need to adapt this code to use &lt;a href=&quot;https://stackoverflow.com/a/897463/477367&quot; target=&quot;_blank&quot;&gt;Welford&#39;s method&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# Option 1: shorter but slower&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;pre style=&quot;line-height: 16.25px;&quot;&gt;rasterstack_meansd_slow &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x) {&lt;/pre&gt;
mean &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; raster&lt;span style=&quot;color: #666666;&quot;&gt;::&lt;/span&gt;mean(x)
  sd &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; raster&lt;span style=&quot;color: #666666;&quot;&gt;::&lt;/span&gt;calc(x, sd)&lt;/pre&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;  list(mean=mean, sd=sd)&lt;/pre&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;}

&lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# Option 2: faster but more code&lt;/span&gt;
rasterstack_meansd_fast &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x) {
  s0 &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; nlayers(x)
  s1 &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; raster(x, layer&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;1&lt;/span&gt;)
  s2 &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; s1&lt;span style=&quot;color: #666666;&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;2&lt;/span&gt;
  &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;for&lt;/span&gt;(ri &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;:&lt;/span&gt;s0) {
    r &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; raster(x, layer&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;ri)
    s1 &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; s1 &lt;span style=&quot;color: #666666;&quot;&gt;+&lt;/span&gt; r
    s2 &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; s2 &lt;span style=&quot;color: #666666;&quot;&gt;+&lt;/span&gt; r&lt;span style=&quot;color: #666666;&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;2&lt;/span&gt;
  }
  list(mean&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;s1&lt;span style=&quot;color: #666666;&quot;&gt;/&lt;/span&gt;s0, sd&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;sqrt((s0 &lt;span style=&quot;color: #666666;&quot;&gt;*&lt;/span&gt; s2 &lt;span style=&quot;color: #666666;&quot;&gt;-&lt;/span&gt; s1 &lt;span style=&quot;color: #666666;&quot;&gt;*&lt;/span&gt; s1)&lt;span style=&quot;color: #666666;&quot;&gt;/&lt;/span&gt;(s0 &lt;span style=&quot;color: #666666;&quot;&gt;*&lt;/span&gt; (s0 &lt;span style=&quot;color: #666666;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;1&lt;/span&gt;))))
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
As a small example I calculate the mean and standard deviation of the sea surface temperature for different climate scenarios for 2050. The fast version only takes 10 seconds on my machine while the slow version takes 225 seconds to calculate the mean and standard deviation.&lt;br /&gt;
&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;library(sdmpredictors)

sstfuture &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; load_layers(c(&lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;BO2_RCP26_2050_tempmean_ss&#39;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;BO2_RCP45_2050_tempmean_ss&#39;&lt;/span&gt;, 
                           &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;BO2_RCP60_2050_tempmean_ss&#39;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;BO2_RCP85_2050_tempmean_ss&#39;&lt;/span&gt;))

system.time({ fast &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; rasterstack_meansd_fast(sstfuture) }) &lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# 10 seconds&lt;/span&gt;
system.time({ slow &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; rasterstack_meansd_slow(sstfuture) }) &lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# 225 seconds&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/4259737332233501504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/4259737332233501504?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/4259737332233501504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/4259737332233501504'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/02/speeding-up-mean-and-standard-deviation.html' title='Speeding up mean and standard deviation calculation for a stack of rasters in R'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-725538824240935480</id><published>2018-02-15T21:21:00.000+01:00</published><updated>2018-02-15T21:22:43.701+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PostgreSQL"/><category scheme="http://www.blogger.com/atom/ns#" term="SQLite"/><title type='text'>Selecting comma separated data as multiple rows with SQLite</title><content type='html'>A while back I needed to split data stored in one column as a comma separated string into multiple rows in a SQL query from a SQLite database.&lt;br /&gt;
&lt;br /&gt;
My table looked like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;TABLE&lt;/span&gt; &lt;span style=&quot;color: #517918;&quot;&gt;&quot;predictor_sets&quot;&lt;/span&gt; 
  (&lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt;id&lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;INTEGER&lt;/span&gt;, &lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt;nvar&lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;INTEGER&lt;/span&gt;, &lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt;predictors&lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;TEXT&lt;/span&gt;, 
    &lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt;experiment&lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;TEXT&lt;/span&gt;, &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;PRIMARY&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;KEY&lt;/span&gt;(&lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt;id&lt;span style=&quot;color: #666666;&quot;&gt;`&lt;/span&gt;));
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Insert some sample data:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;INSERT&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;INTO&lt;/span&gt; predictor_sets &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;VALUES&lt;/span&gt;
  (&lt;span style=&quot;color: #40a070;&quot;&gt;1659&lt;/span&gt;, &lt;span style=&quot;color: #40a070;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;BO_bathymax,BO_calcite,BO_parmax,BO_damean,BO_sstrange&#39;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;bathymetry&#39;&lt;/span&gt;),
  (&lt;span style=&quot;color: #40a070;&quot;&gt;1660&lt;/span&gt;, &lt;span style=&quot;color: #40a070;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;BO_bathymin,BO_calcite,BO_parmax,BO_damean,BO_sstrange&#39;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;bathymetry&#39;&lt;/span&gt;),
  (&lt;span style=&quot;color: #40a070;&quot;&gt;1661&lt;/span&gt;, &lt;span style=&quot;color: #40a070;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;BO_bathymean,BO_calcite,BO_parmax,BO_damean,BO_sstrange&#39;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;bathymetry&#39;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Splitting up the different predictors in seperate rows can be done with the following recursive common table expression:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;WITH&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;RECURSIVE&lt;/span&gt; split(predictorset_id, predictor_name, rest) &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;AS&lt;/span&gt; (
  &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; id, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;&#39;&lt;/span&gt;, predictors &lt;span style=&quot;color: #666666;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;,&#39;&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; predictor_sets &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; id
   &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;UNION&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;ALL&lt;/span&gt;
  &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; predictorset_id, 
         substr(rest, &lt;span style=&quot;color: #40a070;&quot;&gt;0&lt;/span&gt;, instr(rest, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;,&#39;&lt;/span&gt;)),
         substr(rest, instr(rest, &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;,&#39;&lt;/span&gt;)&lt;span style=&quot;color: #666666;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;1&lt;/span&gt;)
    &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; split
   &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; rest &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;&#39;&lt;/span&gt;)
&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; predictorset_id, predictor_name 
  &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; split 
 &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; predictor_name &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;&#39;&lt;/span&gt;
 &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;ORDER&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;BY&lt;/span&gt; predictorset_id, predictor_name;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Check out the documentation for more info on writing your own common table expressions in &lt;a href=&quot;https://www.sqlite.org/lang_with.html&quot; target=&quot;_blank&quot;&gt;SQLite&lt;/a&gt;, &lt;a href=&quot;https://www.postgresql.org/docs/current/static/queries-with.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;&amp;nbsp;or your favorite database.</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/725538824240935480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/725538824240935480?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/725538824240935480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/725538824240935480'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/02/split-into-rows-sqlite.html' title='Selecting comma separated data as multiple rows with SQLite'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-9004465342028633000</id><published>2018-01-30T22:11:00.000+01:00</published><updated>2018-02-27T09:36:21.187+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="R"/><category scheme="http://www.blogger.com/atom/ns#" term="raster"/><category scheme="http://www.blogger.com/atom/ns#" term="sdmpredictors"/><title type='text'>Creating a single pixel wide raster along the coastline or another edge </title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
At one point during my PhD I needed a single pixel of raster values along the coastline. In order to get this I used the following code in R:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;library(sdmpredictors)
library(raster)

coast_mask &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;function&lt;/span&gt;(layer) {
  edges &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; raster&lt;span style=&quot;color: #666666;&quot;&gt;::&lt;/span&gt;boundaries(raster(layer, layer&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;1&lt;/span&gt;), type&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;inner&quot;&lt;/span&gt;)
  values &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; getValues(edges)
  is.na(values) &lt;span style=&quot;color: #666666;&quot;&gt;|&lt;/span&gt; values &lt;span style=&quot;color: #666666;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;0&lt;/span&gt;
}

l &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; load_layers(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;BO_sstmean&quot;&lt;/span&gt;, equalarea &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;)

mask &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; coast_mask(l)
l[mask] &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;NA&lt;/span&gt;

plot(l, col&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;rev(heat.colors(&lt;span style=&quot;color: #40a070;&quot;&gt;255&lt;/span&gt;)))&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Source code available on GitHub at &lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/misc/coastalraster.R&quot;&gt;https://github.com/samuelbosch/blogbits/blob/master/misc/coastalraster.R&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Main R Packages used:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.samuelbosch.com/p/sdmpredictors.html&quot; target=&quot;_blank&quot;&gt;sdmpredictors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cran.r-project.org/package=raster&quot; target=&quot;_blank&quot;&gt;raster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJpwrGqs8flpM7AIQ6RvUe2ci1IvZZ0pw05qPhGW-Vg3rfsBatAEpqgYV2zbrJ4u5a3MlIwLOzTN8HY50IYA6G1hFz379O2rgQw2sOaj0dWge7IiPv6JkGora07wHtx6GObKieBcL2MCk/s1600/Screen+Shot+2018-02-27+at+09.34.39.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;705&quot; data-original-width=&quot;1600&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJpwrGqs8flpM7AIQ6RvUe2ci1IvZZ0pw05qPhGW-Vg3rfsBatAEpqgYV2zbrJ4u5a3MlIwLOzTN8HY50IYA6G1hFz379O2rgQw2sOaj0dWge7IiPv6JkGora07wHtx6GObKieBcL2MCk/s640/Screen+Shot+2018-02-27+at+09.34.39.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/9004465342028633000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/9004465342028633000?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/9004465342028633000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/9004465342028633000'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/01/coastal-raster.html' title='Creating a single pixel wide raster along the coastline or another edge '/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJpwrGqs8flpM7AIQ6RvUe2ci1IvZZ0pw05qPhGW-Vg3rfsBatAEpqgYV2zbrJ4u5a3MlIwLOzTN8HY50IYA6G1hFz379O2rgQw2sOaj0dWge7IiPv6JkGora07wHtx6GObKieBcL2MCk/s72-c/Screen+Shot+2018-02-27+at+09.34.39.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-7432331585944726788</id><published>2018-01-23T23:16:00.001+01:00</published><updated>2018-01-23T23:26:42.049+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="R"/><category scheme="http://www.blogger.com/atom/ns#" term="raster"/><title type='text'>Creating a high resolution png from a raster in R</title><content type='html'>In this post I&#39;ll show you two different ways to create a png from an equal-area bathymetry grid in R.&lt;br /&gt;
&lt;h3&gt;
Version 1: using the raster::plot function&lt;/h3&gt;
&lt;div&gt;
The first option for plotting a raster is to use the raster::plot function and write this to a sufficiently large png file. This works reasonably well but the only disadvantage is that both the title and legend are really small. The title is optional but I didn&#39;t find a way to disable the legend. The main trick to get the raster::plot function to output a high resolution png consists in setting the maxpixels parameter. Colors where selected on &lt;a href=&quot;http://colorbrewer2.org/#type=sequential&amp;amp;scheme=Blues&amp;amp;n=9&quot; target=&quot;_blank&quot;&gt;ColorBrewer&lt;/a&gt;&amp;nbsp;but with a small addition that the color range was reverted and that the darkest color is repeated to ensure that rare depths (-6000 to -10000) get the same color.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background: #f0f0f0; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #666666;&quot;&gt;!&lt;/span&gt;requireNamespace(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;sdmpredictors&quot;&lt;/span&gt;)) {
  install.packages(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;sdmpredictors&quot;&lt;/span&gt;)
}
library(raster)
x &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; sdmpredictors&lt;span style=&quot;color: #666666;&quot;&gt;::&lt;/span&gt;load_layers(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;BO_bathymean&quot;&lt;/span&gt;, equalarea &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;)
png(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;bathymetry_plot1.png&quot;&lt;/span&gt;, width&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;ncol(x), height&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;nrow(x))
col &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; rev(c(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#f7fbff&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#deebf7&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#c6dbef&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#9ecae1&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#6baed6&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#4292c6&quot;&lt;/span&gt;,&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#2171b5&quot;&lt;/span&gt;,&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#08519c&quot;&lt;/span&gt;, rep(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#08306b&quot;&lt;/span&gt;,&lt;span style=&quot;color: #40a070;&quot;&gt;7&lt;/span&gt;)))
plot(x, maxpixels &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; ncell(x), col &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; col, colNA &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#818181&quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;     main &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;Bathymetry&quot;&lt;/span&gt;, axes &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;, ylim&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;extent(x)[&lt;span style=&quot;color: #40a070;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;4&lt;/span&gt;])
dev.off()
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA4jDUinAcwWCD4pa2cShpeJcLO1Cp9enHGuk6ltPsZ_Hh-ngVY8IFkOwKCKE93cgSA2wd-Qr6o0KSbZKI7QwjIRURhTzQUP6dTfKEBfj1frlab_jQWWjyFCqPcVf6gFUYVIa6E1E9b3U/s1600/bathymetry_plot1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;679&quot; data-original-width=&quot;1600&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA4jDUinAcwWCD4pa2cShpeJcLO1Cp9enHGuk6ltPsZ_Hh-ngVY8IFkOwKCKE93cgSA2wd-Qr6o0KSbZKI7QwjIRURhTzQUP6dTfKEBfj1frlab_jQWWjyFCqPcVf6gFUYVIa6E1E9b3U/s640/bathymetry_plot1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
Version 2: write to png using leaflet colors&lt;/h3&gt;
&lt;div&gt;
While this version looks and is a bit more complicated, it produces really good looking results. The main gist of this code is that it transforms the values to a range from 0 to 1000 while making sure that extreme values at both extremes will get the same colors as more common values. This is similar to what you general would do when e.g. creating a color scale with QGIS. Once values are mapped to colors they are converted to raw bytes with the right dimensions and written to a png file. Remark that this code was inspired by some of the internal functions in the leaflet package.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #f0f0f0; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #666666;&quot;&gt;!&lt;/span&gt;requireNamespace(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;leaflet&quot;&lt;/span&gt;)) {
  install.packages(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;leaflet&quot;&lt;/span&gt;)
}
&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #666666;&quot;&gt;!&lt;/span&gt;requireNamespace(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;sdmpredictors&quot;&lt;/span&gt;)) {
  install.packages(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;sdmpredictors&quot;&lt;/span&gt;)
}
library(sdmpredictors)
library(raster)

&lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# create colors&lt;/span&gt;
colors &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; leaflet&lt;span style=&quot;color: #666666;&quot;&gt;::&lt;/span&gt;colorNumeric(rev(c(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#f7fbff&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#deebf7&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#c6dbef&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#9ecae1&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#6baed6&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#4292c6&quot;&lt;/span&gt;,&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#2171b5&quot;&lt;/span&gt;,&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#08519c&quot;&lt;/span&gt;, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#08306b&quot;&lt;/span&gt;)),
                                &lt;span style=&quot;color: #40a070;&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;1001&lt;/span&gt;, na.color &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;#818181&quot;&lt;/span&gt;)
cols &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; c(colors(&lt;span style=&quot;color: #40a070;&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #40a070;&quot;&gt;1001&lt;/span&gt;), colors(&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;NA&lt;/span&gt;))
x &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; sdmpredictors&lt;span style=&quot;color: #666666;&quot;&gt;::&lt;/span&gt;load_layers(&lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;BO_bathymean&quot;&lt;/span&gt;, equalarea &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;)
&lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# scale values and remove extreme values from the color range &lt;/span&gt;
vals &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; values(x)
vals &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; scale(vals)
minmax &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; quantile(vals, probs&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;c(&lt;span style=&quot;color: #40a070;&quot;&gt;0.01&lt;/span&gt;, &lt;span style=&quot;color: #40a070;&quot;&gt;0.99&lt;/span&gt;), na.rm &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;)
vals &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; round((((vals &lt;span style=&quot;color: #666666;&quot;&gt;-&lt;/span&gt; minmax[&lt;span style=&quot;color: #40a070;&quot;&gt;1&lt;/span&gt;]) &lt;span style=&quot;color: #666666;&quot;&gt;/&lt;/span&gt; (minmax[&lt;span style=&quot;color: #40a070;&quot;&gt;2&lt;/span&gt;] &lt;span style=&quot;color: #666666;&quot;&gt;-&lt;/span&gt; minmax[&lt;span style=&quot;color: #40a070;&quot;&gt;1&lt;/span&gt;])) &lt;span style=&quot;color: #666666;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;1000&lt;/span&gt;))
vals[vals &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;0&lt;/span&gt;] &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;0&lt;/span&gt;
vals[vals &lt;span style=&quot;color: #666666;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;1000&lt;/span&gt;] &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;1000&lt;/span&gt;
vals[is.na(vals)] &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #40a070;&quot;&gt;1002&lt;/span&gt;

&lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# lookup colors for scaled values, convert to raw and write to file&lt;/span&gt;
valcolors &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; cols[vals&lt;span style=&quot;color: #40a070;&quot;&gt;+2&lt;/span&gt;] &lt;span style=&quot;color: #60a0b0; font-style: italic;&quot;&gt;# +2 because -1 and 0 are in cols (value 0 is at index 2 in cols)&lt;/span&gt;

rgb_data &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; col2rgb(valcolors, alpha &lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;)
raw_data &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; as.raw(rgb_data)
dim(raw_data) &lt;span style=&quot;color: #666666;&quot;&gt;&amp;lt;-&lt;/span&gt; c(&lt;span style=&quot;color: #40a070;&quot;&gt;4&lt;/span&gt;, ncol(x), nrow(x))

png&lt;span style=&quot;color: #666666;&quot;&gt;::&lt;/span&gt;writePNG(raw_data, &lt;span style=&quot;color: #4070a0;&quot;&gt;&quot;bathymetry_plot2.png&quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIzmy3BOwgEDICUz3cLwZy84PKiLE_vkA84lneNJuLEHJqsF3J4uLanDEuG6pEvUElp1rp70kRY9eTiVp7rdO-_rPwIKBT9WpGP7mNKAaaLbhkjV1wXdIwwUwlQzFVad4QLnpuqqSQo/s1600/bathymetry_plot2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;679&quot; data-original-width=&quot;1600&quot; height=&quot;270&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIzmy3BOwgEDICUz3cLwZy84PKiLE_vkA84lneNJuLEHJqsF3J4uLanDEuG6pEvUElp1rp70kRY9eTiVp7rdO-_rPwIKBT9WpGP7mNKAaaLbhkjV1wXdIwwUwlQzFVad4QLnpuqqSQo/s640/bathymetry_plot2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
All source code is available on GitHub at&amp;nbsp;&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/misc/raster2png.R&quot;&gt;https://github.com/samuelbosch/blogbits/blob/master/misc/raster2png.R&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Main R Packages used:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.samuelbosch.com/p/sdmpredictors.html&quot; target=&quot;_blank&quot;&gt;sdmpredictors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cran.r-project.org/package=raster&quot; target=&quot;_blank&quot;&gt;raster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cran.r-project.org/package=leaflet&quot; target=&quot;_blank&quot;&gt;leaflet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/7432331585944726788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/7432331585944726788?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/7432331585944726788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/7432331585944726788'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2018/01/create-png-from-raster.html' title='Creating a high resolution png from a raster in R'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA4jDUinAcwWCD4pa2cShpeJcLO1Cp9enHGuk6ltPsZ_Hh-ngVY8IFkOwKCKE93cgSA2wd-Qr6o0KSbZKI7QwjIRURhTzQUP6dTfKEBfj1frlab_jQWWjyFCqPcVf6gFUYVIa6E1E9b3U/s72-c/bathymetry_plot1.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-3658325510094719109</id><published>2017-01-10T09:59:00.001+01:00</published><updated>2017-01-10T09:59:31.654+01:00</updated><title type='text'>Intersecting a data frame with longitude/latitudes with a polygon shapefile in R</title><content type='html'>I finally cleaned up a little script that I use to get the Spalding marine ecoregions for a set of points in R. The function needs as input a data frame with coordinates in longitude/latitude, the names of the coordinate columns (first the longitude column then the latitude column) and the path to the ecoregions shapefile. You can off course substitude this ecoregions shapefile with any other polygon shapefile (eg.countries, districts, lakes, protected areas, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:..1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;library(sp)
library(rgdal)

get_ecoregions &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;function&lt;/span&gt;(data, xy_cols, meow_path) {
  df &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; data
  row.names(df) &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;:&lt;/span&gt;nrow(df)
  coordinates(data) &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; xy_cols
  data&lt;span style=&quot;color: #333333&quot;&gt;@&lt;/span&gt;proj4string &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt;  CRS(&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0&amp;quot;&lt;/span&gt;)
  layer &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; tools&lt;span style=&quot;color: #333333&quot;&gt;::&lt;/span&gt;file_path_sans_ext(basename(meow_path))
  meow &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; readOGR(dsn &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; meow_path, layer &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; layer,verbose &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;FALSE&lt;/span&gt;, stringsAsFactors &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;FALSE&lt;/span&gt;)
  meow&lt;span style=&quot;color: #333333&quot;&gt;@&lt;/span&gt;proj4string &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; data&lt;span style=&quot;color: #333333&quot;&gt;@&lt;/span&gt;proj4string &lt;span style=&quot;color: #888888&quot;&gt;# set the same, because they are&lt;/span&gt;
  intersect_meow_df &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; gIntersection(meow, data, byid &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;TRUE&lt;/span&gt;)
  id_pairs &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; strsplit(row.names(intersect_meow_df), &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot; &amp;quot;&lt;/span&gt;)
  id_pairs_mat &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(do.call(rbind, id_pairs))
  ecoids &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; id_pairs_mat[,&lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;]
  names(ecoids) &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; id_pairs_mat[,&lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;2&lt;/span&gt;] &lt;span style=&quot;color: #888888&quot;&gt;## store rowname from df.sp in names(ecoids)&lt;/span&gt;
  meow_row_names &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; ecoids[row.names(data)]
  meow_row_names[is.na(meow_row_names)] &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;invalid row name&amp;quot;&lt;/span&gt;
  cbind(df, meow&lt;span style=&quot;color: #333333&quot;&gt;@&lt;/span&gt;data[meow_row_names,])
}

&lt;span style=&quot;color: #888888&quot;&gt;# df &amp;lt;- data.frame(species=rep(&amp;quot;a&amp;quot;, 4), longitude=c(4.087523,3.66044,2.926591, 0), latitude=c(51.671932, 51.55974, 51.234695,0))&lt;/span&gt;
&lt;span style=&quot;color: #888888&quot;&gt;# m &amp;lt;- get_ecoregions(df, c(&amp;quot;longitude&amp;quot;, &amp;quot;latitude&amp;quot;), &amp;quot;D:/a/data/ecoregions/meow_ecos.shp&amp;quot;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/3658325510094719109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/3658325510094719109?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3658325510094719109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3658325510094719109'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2017/01/intersecting-data-frame-with.html' title='Intersecting a data frame with longitude/latitudes with a polygon shapefile in R'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-7169876375127283997</id><published>2016-09-07T23:11:00.000+02:00</published><updated>2016-09-26T20:10:50.142+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="raster"/><category scheme="http://www.blogger.com/atom/ns#" term="tiff"/><title type='text'>Compressing TIFF files in R and Windows</title><content type='html'>Compressing TIFF files is an easy way to save disk space when working with raster files or image outputs for research papers. But this is rarely the default option causing used diskspace to quickly inflate heavily. For instance this figure 7000 by 5000 pixel image as a TIFF uses 136MB.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK1fVXMxXivwxwk9yV3wljYNR5zUWfb-rS0tXqqk8AVZ5PQPuFBmDzBuXnETDMdHZivJryNSEYXmgQ81pnc7Hrbw65lzHWb22Q-HjuMwmq6fdhCz4KfaI-uvUk4AeJwxQIvT2NAu0crqM/s1600/fig3_B_map_sst3_2055_rcp45_reg_within_species.jpg&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;226&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK1fVXMxXivwxwk9yV3wljYNR5zUWfb-rS0tXqqk8AVZ5PQPuFBmDzBuXnETDMdHZivJryNSEYXmgQ81pnc7Hrbw65lzHWb22Q-HjuMwmq6fdhCz4KfaI-uvUk4AeJwxQIvT2NAu0crqM/s320/fig3_B_map_sst3_2055_rcp45_reg_within_species.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
While after lossless compression with the libtiff command tiffcp it is only 8MB. To install libtiff on windows download and run the latest setup from&amp;nbsp;&lt;a href=&quot;http://gnuwin32.sourceforge.net/packages/tiff.htm&quot;&gt;http://gnuwin32.sourceforge.net/packages/tiff.htm&lt;/a&gt;. To compress a tiff file you need to run the following command (assuming that tiffcp is in your path). Make sure to specify a different output file name, otherwise the original will be overwritten with a broken and incomplete copy of the original.&lt;br /&gt;
&lt;pre&gt;tiffcp -c lzw uncompressed_input.tif compressed_output.tif

&lt;/pre&gt;
In R you can also write compressed raster (geo)tiff files by adding extra options to the writeRaster function from the raster package.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;library(raster)

x &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; raster(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;uncompressed_input.tif&quot;&lt;/span&gt;)
tifoptions &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;COMPRESS=DEFLATE&quot;&lt;/span&gt;, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;PREDICTOR=2&quot;&lt;/span&gt;, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;ZLEVEL=6&quot;&lt;/span&gt;)
writeRaster(x, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;compressed_output.tif&quot;&lt;/span&gt;,
            options &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; tifoptions, overwrite &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;)
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/7169876375127283997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/7169876375127283997?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/7169876375127283997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/7169876375127283997'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2016/09/compressing-tiff-files-in-r-and-windows.html' title='Compressing TIFF files in R and Windows'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK1fVXMxXivwxwk9yV3wljYNR5zUWfb-rS0tXqqk8AVZ5PQPuFBmDzBuXnETDMdHZivJryNSEYXmgQ81pnc7Hrbw65lzHWb22Q-HjuMwmq6fdhCz4KfaI-uvUk4AeJwxQIvT2NAu0crqM/s72-c/fig3_B_map_sst3_2055_rcp45_reg_within_species.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>9820 Merelbeke, Belgium</georss:featurename><georss:point>50.9945496 3.7456402000000253</georss:point><georss:box>50.8345976 3.4229167000000253 51.154501599999996 4.0683637000000257</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-5877364009811697362</id><published>2016-09-07T22:22:00.001+02:00</published><updated>2016-09-07T22:22:00.166+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BIOMOD"/><category scheme="http://www.blogger.com/atom/ns#" term="dismo"/><category scheme="http://www.blogger.com/atom/ns#" term="SDM"/><title type='text'>Geographic null models for species distribution modeling: An implementation combining BIOMOD2 and dismo [Code Dump]</title><content type='html'>Warning this is more of a code dump instead of a blogpost but I&#39;m still putting it out there hoping it&#39;s still useful for someone else as it has been sitting in my draft folder for far too long. Anyways the paper by Robert Hijmans is really worth reading if you&#39;re interested in the evaluation of species distribution models. If you have questions, don&#39;t hesitate to contact me.&lt;br /&gt;
&lt;br /&gt;
Geographic null model from paper by Robert Hijsmans (&lt;a href=&quot;http://www.esajournals.org/doi/abs/10.1890/11-0826.1&quot; target=&quot;_blank&quot;&gt;link to paper&lt;/a&gt;).&lt;br /&gt;
package &lt;a href=&quot;http://cran.r-project.org/web/packages/dismo/index.html&quot; target=&quot;_blank&quot;&gt;dismo&lt;/a&gt;&amp;nbsp;(maintained by&amp;nbsp;&lt;span style=&quot;background-color: white;&quot;&gt;Robert J. Hijmans).&lt;/span&gt;&amp;nbsp;and the package &lt;a href=&quot;http://cran.r-project.org/web/packages/biomod2/index.html&quot; target=&quot;_blank&quot;&gt;BIOMOD2&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Load libraries:&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;library(&lt;span style=&quot;color: #bb8844;&quot;&gt;&quot;biomod2&quot;&lt;/span&gt;)
library(&lt;span style=&quot;color: #bb8844;&quot;&gt;&quot;dismo&quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
The null_model_evaluation function takes as input a BIOMOD2 model.&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;null_model_evaluation &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;(models) {
  &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;## flow&lt;/span&gt;
  &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;## 1) create geographic null model from the points used as training data&lt;/span&gt;
  &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;## 2) compare AUC of the model with AUC of the geographic null model (use same presence/absence data)&lt;/span&gt;
  
  &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;## extract test data from models&lt;/span&gt;
  data &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; get_formal_data(models)
  calib.lines &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; get(load(models&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;calib.lines&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;link))
  nbOfRuns &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; (length(calib.lines) &lt;span style=&quot;font-weight: bold;&quot;&gt;/&lt;/span&gt; length(data&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;data.species))
  calib.lines.mat &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(calib.lines, nrow&lt;span style=&quot;font-weight: bold;&quot;&gt;=&lt;/span&gt;length(data&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;data.species), ncol&lt;span style=&quot;font-weight: bold;&quot;&gt;=&lt;/span&gt;nbOfRuns)

  evaluations &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; get_evaluations(models)
  dims &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; dimnames(evaluations)
  rocIndex &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; which(dims[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;][[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;]] &lt;span style=&quot;font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #bb8844;&quot;&gt;&quot;ROC&quot;&lt;/span&gt;)
  testingDataIndex &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; which( dims[&lt;span style=&quot;color: #009999;&quot;&gt;2&lt;/span&gt;][[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;]] &lt;span style=&quot;font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #bb8844;&quot;&gt;&quot;Testing.data&quot;&lt;/span&gt;)
  
  species.data &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; data&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;coord[which(data&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;data.species &lt;span style=&quot;font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;),]
  background.data &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; data&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;coord[is.na(data&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;data.species),]
  
  result &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; array(dim&lt;span style=&quot;font-weight: bold;&quot;&gt;=&lt;/span&gt;c(nbOfRuns, &lt;span style=&quot;color: #009999;&quot;&gt;2&lt;/span&gt;, length(dims[&lt;span style=&quot;color: #009999;&quot;&gt;3&lt;/span&gt;][[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;]])), dimnames&lt;span style=&quot;font-weight: bold;&quot;&gt;=&lt;/span&gt;list(dims[&lt;span style=&quot;color: #009999;&quot;&gt;4&lt;/span&gt;][[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;]],c(&lt;span style=&quot;color: #bb8844;&quot;&gt;&quot;model&quot;&lt;/span&gt;, &lt;span style=&quot;color: #bb8844;&quot;&gt;&quot;geo_null_model&quot;&lt;/span&gt;), dims[&lt;span style=&quot;color: #009999;&quot;&gt;3&lt;/span&gt;][[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;]]))
  
  &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;## calculate geographic null models&lt;/span&gt;
  &lt;span style=&quot;font-weight: bold;&quot;&gt;for&lt;/span&gt;( methodIndex &lt;span style=&quot;font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;:&lt;/span&gt;length(dims[&lt;span style=&quot;color: #009999;&quot;&gt;3&lt;/span&gt;][[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;]])){
    &lt;span style=&quot;font-weight: bold;&quot;&gt;for&lt;/span&gt; (runIndex &lt;span style=&quot;font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;:&lt;/span&gt;nbOfRuns){
      model.auc &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; evaluations[rocIndex, testingDataIndex,methodIndex,runIndex,&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;]
      result[runIndex,&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;,methodIndex] &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; model.auc
      
      train.species.data &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; species.data[calib.lines[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;:&lt;/span&gt;nrow(species.data),runIndex],]
      test.species.data &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; species.data[&lt;span style=&quot;font-weight: bold;&quot;&gt;!&lt;/span&gt;calib.lines[&lt;span style=&quot;color: #009999;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;:&lt;/span&gt;nrow(species.data),runIndex],]
      &lt;span style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt; (nrow(test.species.data) &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #009999;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;!&lt;/span&gt;is.na(model.auc)){
        train.background.data &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; background.data[calib.lines[nrow(species.data)&lt;span style=&quot;color: #009999;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;:&lt;/span&gt;nrow(calib.lines)&lt;span style=&quot;font-weight: bold;&quot;&gt;-&lt;/span&gt;nrow(species.data),runIndex],]
        test.background.data &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; background.data[&lt;span style=&quot;font-weight: bold;&quot;&gt;!&lt;/span&gt;calib.lines[nrow(species.data)&lt;span style=&quot;color: #009999;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;:&lt;/span&gt;nrow(calib.lines)&lt;span style=&quot;font-weight: bold;&quot;&gt;-&lt;/span&gt;nrow(species.data),runIndex],]
        gd &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; geoDist(train.species.data, lonlat&lt;span style=&quot;font-weight: bold;&quot;&gt;=TRUE&lt;/span&gt;)
        &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;#p &amp;lt;- predict(gd, env)&lt;/span&gt;
        &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;#plot(p)&lt;/span&gt;
        &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;#points(train.background.data, pch=16, col=&quot;purple&quot;)&lt;/span&gt;
        &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;#points(test.background.data, pch=16, col=&quot;blue&quot;)&lt;/span&gt;
        &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;#points(train.species.data, pch=16, col=&quot;green&quot;)&lt;/span&gt;
        &lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;#points(test.species.data, pch=16, col=&quot;red&quot;)&lt;/span&gt;
        gd.evaluation &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; evaluate(gd, p&lt;span style=&quot;font-weight: bold;&quot;&gt;=&lt;/span&gt;test.species.data, a&lt;span style=&quot;font-weight: bold;&quot;&gt;=&lt;/span&gt;test.background.data)
        result[runIndex,&lt;span style=&quot;color: #009999;&quot;&gt;2&lt;/span&gt;,methodIndex] &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; gd.evaluation&lt;span style=&quot;font-weight: bold;&quot;&gt;@&lt;/span&gt;auc
      }
    }
  }
  result
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/5877364009811697362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/5877364009811697362?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/5877364009811697362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/5877364009811697362'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2016/09/geographic-null-models-for-species_7.html' title='Geographic null models for species distribution modeling: An implementation combining BIOMOD2 and dismo [Code Dump]'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total><georss:featurename>9820 Merelbeke, Belgium</georss:featurename><georss:point>50.9945496 3.7456402000000253</georss:point><georss:box>50.8345976 3.4229167000000253 51.154501599999996 4.0683637000000257</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-3000309431931039625</id><published>2016-08-31T15:11:00.000+02:00</published><updated>2016-08-31T15:11:57.623+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ogr"/><category scheme="http://www.blogger.com/atom/ns#" term="Quantum GIS"/><title type='text'>Workaround for: SQL Expression Parsing Error: memory exhausted in QGIS or OGR</title><content type='html'>Today I encountered an issue when I was trying to build a query with a lot of ids in an &quot;IN&quot; clause. I was trying to only show the polygons near Europe from the Global Self-consistent Hierarchical High-resolution Geography dataset (GSHHG) but thus wanted to only show more than 5500 id&#39;s.&lt;br /&gt;
&lt;br /&gt;
With some find and replace actions I managed to built the following query:&lt;br /&gt;
&quot;id&quot; IN (&#39;0-E&#39;,&#39;1&#39;,&#39;6&#39;,&#39;14&#39;,&#39;23&#39;,&#39;25&#39;,&#39;38&#39;,&#39;49&#39;,&#39;51&#39;,&#39;61&#39;,&#39;81&#39;,&#39;85&#39;,&#39;90&#39;,&#39;93&#39;,&#39;114&#39;,&#39;138&#39;,&#39;143&#39;,&#39;144&#39;,&#39;148&#39;,&#39;158&#39;,&#39;159&#39;,&#39;168&#39;,&#39;176&#39;,&#39;182&#39;,&#39;185&#39;,&#39;195&#39;,&#39;212&#39;,&#39;220&#39;,&#39;222&#39;,&#39;223&#39;,&#39;227&#39;,&#39;233&#39;,&#39;235&#39;,&#39;246&#39;,&#39;248&#39;,&#39;255&#39;,&#39;261&#39;,&#39;262&#39;,&#39;293&#39;,&#39;295&#39;,&#39;301&#39;,&#39;323&#39;,&#39;328&#39;,&#39;330&#39;,&#39;338&#39;,&#39;341&#39;,&#39;347&#39;,&#39;352&#39;,&#39;361&#39;,&#39;365&#39;,&#39;366&#39;,&#39;371&#39;,&#39;372&#39;,&#39;375&#39;,&#39;382&#39;,&#39;387&#39;,&#39;400&#39;,&#39;404&#39;,&#39;406&#39;,&#39;413&#39;,&#39;421&#39;,&#39;424&#39;,&#39;426&#39;,&#39;428&#39;,&#39;433&#39;,&#39;434&#39;,&#39;436&#39;,&#39;444&#39;,&#39;455&#39;,&#39;471&#39;,&#39;474&#39;,&#39;478&#39;,&#39;485&#39;,&#39;486&#39;,&#39;513&#39;,&#39;529&#39;,&#39;532&#39;,&#39;534&#39;,&#39;538&#39;,&#39;548&#39;,&#39;557&#39;,&#39;560&#39;,&#39;562&#39;,&#39;565&#39;,&#39;571&#39;,&#39;584&#39;,&#39;587&#39;,&#39;589&#39;,&#39;593&#39;,&#39;602&#39;,&#39;604&#39;,&#39;609&#39;,&#39;619&#39;,&#39;631&#39;,&#39;649&#39;,&#39;653&#39;,&#39;668&#39;,&#39;672&#39;,&#39;673&#39;,&#39;681&#39;,&#39;685&#39;,&#39;686&#39;,&#39;694&#39;,&#39;703&#39;,&#39;704&#39;,&#39;706&#39;,&#39;707&#39;,&#39;711&#39;,&#39;716&#39;,&#39;731&#39;,&#39;734&#39;,&#39;741&#39;,&#39;752&#39;,&#39;757&#39;,&#39;765&#39;,&#39;777&#39;,&#39;782&#39;,&#39;786&#39;,&#39;791&#39;,&#39;796&#39;,&#39;799&#39;,&#39;805&#39;,&#39;807&#39;,&#39;814&#39;,&#39;821&#39;,&#39;823&#39;,&#39;831&#39;,&#39;836&#39;,&#39;839&#39;,&#39;849&#39;,&#39;867&#39;,&#39;871&#39;,&#39;884&#39;,&#39;888&#39;,&#39;890&#39;,&#39;892&#39;,&#39;894&#39;,&#39;896&#39;,&#39;914&#39;,&#39;915&#39;,&#39;928&#39;,&#39;935&#39;,&#39;936&#39;,&#39;955&#39;,&#39;961&#39;,&#39;966&#39;,&#39;971&#39;,&#39;972&#39;,&#39;976&#39;,&#39;977&#39;,&#39;1000&#39;,&#39;1014&#39;,&#39;1035&#39;,&#39;1038&#39;,&#39;1046&#39;,&#39;1047&#39;,&#39;1049&#39;,&#39;1097&#39;,&#39;1100&#39;,&#39;1101&#39;,&#39;1105&#39;,&#39;1110&#39;,&#39;1115&#39;,&#39;1117&#39;,&#39;1120&#39;,&#39;1121&#39;,&#39;1122&#39;,&#39;1130&#39;,&#39;1133&#39;,&#39;1160&#39;,&#39;1174&#39;,&#39;1177&#39;,&#39;1187&#39;,&#39;1195&#39;,&#39;1209&#39;,&#39;1223&#39;,&#39;1229&#39;,&#39;1232&#39;,&#39;1243&#39;,&#39;1260&#39;,&#39;1261&#39;,&#39;1262&#39;,&#39;1268&#39;,&#39;1279&#39;,&#39;1291&#39;,&#39;1299&#39;,&#39;1306&#39;,&#39;1307&#39;,&#39;1310&#39;,&#39;1312&#39;,&#39;1315&#39;,&#39;1318&#39;,&#39;1323&#39;,&#39;1326&#39;,&#39;1332&#39;,&#39;1340&#39;,&#39;1351&#39;,&#39;1354&#39;,&#39;1372&#39;,&#39;1381&#39;,&#39;1392&#39;,&#39;1393&#39;,&#39;1396&#39;,&#39;1413&#39;,&#39;1418&#39;,&#39;1428&#39;,&#39;1432&#39;,&#39;1438&#39;,&#39;1445&#39;,&#39;1446&#39;,&#39;1449&#39;,&#39;1453&#39;,&#39;1461&#39;,&#39;1466&#39;,&#39;1482&#39;,&#39;1489&#39;,&#39;1501&#39;,&#39;1502&#39;,&#39;1505&#39;,&#39;1513&#39;,&#39;1520&#39;,&#39;1528&#39;,&#39;1532&#39;,&#39;1537&#39;,&#39;1539&#39;,&#39;1545&#39;,&#39;1547&#39;,&#39;1556&#39;,&#39;1560&#39;,&#39;1561&#39;,&#39;1564&#39;,&#39;1567&#39;,&#39;1570&#39;,&#39;1578&#39;,&#39;1584&#39;,&#39;1587&#39;,&#39;1592&#39;,&#39;1594&#39;,&#39;1595&#39;,&#39;1597&#39;,&#39;1603&#39;,&#39;1614&#39;,&#39;1622&#39;,&#39;1643&#39;,&#39;1655&#39;,&#39;1659&#39;,&#39;1660&#39;,&#39;1667&#39;,&#39;1680&#39;,&#39;1685&#39;,&#39;1687&#39;,&#39;1688&#39;,&#39;1696&#39;,&#39;1697&#39;,&#39;1701&#39;,&#39;1737&#39;,&#39;1756&#39;,&#39;1757&#39;,&#39;1767&#39;,&#39;1777&#39;,&#39;1789&#39;,&#39;1790&#39;,&#39;1797&#39;,&#39;1814&#39;,&#39;1815&#39;,&#39;1826&#39;,&#39;1827&#39;,&#39;1836&#39;,&#39;1840&#39;,&#39;1842&#39;,&#39;1843&#39;,&#39;1844&#39;,&#39;1846&#39;,&#39;1853&#39;,&#39;1863&#39;,&#39;1864&#39;,&#39;1867&#39;,&#39;1878&#39;,&#39;1881&#39;,&#39;1883&#39;,&#39;1889&#39;,&#39;1894&#39;,&#39;1899&#39;,&#39;1903&#39;,&#39;1926&#39;,&#39;1927&#39;,&#39;1928&#39;,&#39;1936&#39;,&#39;1948&#39;,&#39;1957&#39;,&#39;1964&#39;,&#39;1980&#39;,&#39;2003&#39;,&#39;2005&#39;,&#39;2018&#39;,&#39;2025&#39;,&#39;2026&#39;,&#39;2033&#39;,&#39;2043&#39;,&#39;2044&#39;,&#39;2055&#39;,&#39;2057&#39;,&#39;2062&#39;,&#39;2072&#39;,&#39;2073&#39;,&#39;2074&#39;,&#39;2079&#39;,&#39;2088&#39;,&#39;2089&#39;,&#39;2092&#39;,&#39;2095&#39;,&#39;2101&#39;,&#39;2107&#39;,&#39;2119&#39;,&#39;2131&#39;,&#39;2153&#39;,&#39;2156&#39;,&#39;2157&#39;,&#39;2162&#39;,&#39;2171&#39;,&#39;2176&#39;,&#39;2187&#39;,&#39;2190&#39;,&#39;2196&#39;,&#39;2198&#39;,&#39;2209&#39;,&#39;2242&#39;,&#39;2256&#39;,&#39;2265&#39;,&#39;2285&#39;,&#39;2287&#39;,&#39;2288&#39;,&#39;2290&#39;,&#39;2299&#39;,&#39;2318&#39;,&#39;2319&#39;,&#39;2324&#39;,&#39;2340&#39;,&#39;2342&#39;,&#39;2363&#39;,&#39;2365&#39;,&#39;2373&#39;,&#39;2374&#39;,&#39;2377&#39;,&#39;2383&#39;,&#39;2387&#39;,&#39;2395&#39;,&#39;2402&#39;,&#39;2413&#39;,&#39;2414&#39;,&#39;2421&#39;,&#39;2433&#39;,&#39;2441&#39;,&#39;2453&#39;,&#39;2467&#39;,&#39;2478&#39;,&#39;2481&#39;,&#39;2483&#39;,&#39;2487&#39;,&#39;2499&#39;,&#39;2503&#39;,&#39;2514&#39;,&#39;2533&#39;,&#39;2544&#39;,&#39;2546&#39;,&#39;2550&#39;,&#39;2556&#39;,&#39;2565&#39;,&#39;2567&#39;,&#39;2573&#39;,&#39;2574&#39;,&#39;2577&#39;,&#39;2582&#39;,&#39;2588&#39;,&#39;2589&#39;,&#39;2598&#39;,&#39;2603&#39;,&#39;2610&#39;,&#39;2614&#39;,&#39;2615&#39;,&#39;2620&#39;,&#39;2632&#39;,&#39;2640&#39;,&#39;2663&#39;,&#39;2664&#39;,&#39;2684&#39;,&#39;2714&#39;,&#39;2722&#39;,&#39;2725&#39;,&#39;2726&#39;,&#39;2748&#39;,&#39;2750&#39;,&#39;2758&#39;,&#39;2761&#39;,&#39;2764&#39;,&#39;2775&#39;,&#39;2778&#39;,&#39;2786&#39;,&#39;2788&#39;,&#39;2790&#39;,&#39;2806&#39;,&#39;2814&#39;,&#39;2815&#39;,&#39;2817&#39;,&#39;2820&#39;,&#39;2829&#39;,&#39;2834&#39;,&#39;2837&#39;,&#39;2856&#39;,&#39;2875&#39;,&#39;2881&#39;,&#39;2898&#39;,&#39;2902&#39;,&#39;2908&#39;,&#39;2932&#39;,&#39;2948&#39;,&#39;2949&#39;,&#39;2955&#39;,&#39;2959&#39;,&#39;2969&#39;,&#39;2973&#39;,&#39;2979&#39;,&#39;3000&#39;,&#39;3001&#39;,&#39;3003&#39;,&#39;3009&#39;,&#39;3015&#39;,&#39;3018&#39;,&#39;3019&#39;,&#39;3038&#39;,&#39;3055&#39;,&#39;3057&#39;,&#39;3071&#39;,&#39;3081&#39;,&#39;3082&#39;,&#39;3092&#39;,&#39;3093&#39;,&#39;3094&#39;,&#39;3117&#39;,&#39;3119&#39;,&#39;3127&#39;,&#39;3132&#39;,&#39;3133&#39;,&#39;3140&#39;,&#39;3160&#39;,&#39;3165&#39;,&#39;3184&#39;,&#39;3188&#39;,&#39;3195&#39;,&#39;3200&#39;,&#39;3205&#39;,&#39;3215&#39;,&#39;3216&#39;,&#39;3226&#39;,&#39;3229&#39;,&#39;3230&#39;,&#39;3236&#39;,&#39;3255&#39;,&#39;3256&#39;,&#39;3259&#39;,&#39;3260&#39;,&#39;3287&#39;,&#39;3288&#39;,&#39;3297&#39;,&#39;3323&#39;,&#39;3325&#39;,&#39;3329&#39;,&#39;3331&#39;,&#39;3340&#39;,&#39;3345&#39;,&#39;3358&#39;,&#39;3365&#39;,&#39;3372&#39;,&#39;3376&#39;,&#39;3384&#39;,&#39;3388&#39;,&#39;3404&#39;,&#39;3405&#39;,&#39;3421&#39;,&#39;3423&#39;,&#39;3430&#39;,&#39;3450&#39;,&#39;3460&#39;,&#39;3468&#39;,&#39;3476&#39;,&#39;3477&#39;,&#39;3483&#39;,&#39;3487&#39;,&#39;3497&#39;,&#39;3499&#39;,&#39;3500&#39;,&#39;3508&#39;,&#39;3514&#39;,&#39;3515&#39;,&#39;3516&#39;,&#39;3527&#39;,&#39;3532&#39;,&#39;3533&#39;,&#39;3555&#39;,&#39;3576&#39;,&#39;3585&#39;,&#39;3602&#39;,&#39;3603&#39;,&#39;3631&#39;,&#39;3641&#39;,&#39;3643&#39;,&#39;3646&#39;,&#39;3648&#39;,&#39;3649&#39;,&#39;3651&#39;,&#39;3652&#39;,&#39;3658&#39;,&#39;3671&#39;,&#39;3673&#39;,&#39;3681&#39;,&#39;3687&#39;,&#39;3688&#39;,&#39;3693&#39;,&#39;3702&#39;,&#39;3713&#39;,&#39;3716&#39;,&#39;3719&#39;,&#39;3723&#39;,&#39;3762&#39;,&#39;3765&#39;,&#39;3769&#39;,&#39;3777&#39;,&#39;3786&#39;,&#39;3793&#39;,&#39;3802&#39;,&#39;3803&#39;,&#39;3807&#39;,&#39;3808&#39;,&#39;3814&#39;,&#39;3816&#39;,&#39;3821&#39;,&#39;3826&#39;,&#39;3829&#39;,&#39;3831&#39;,&#39;3837&#39;,&#39;3839&#39;,&#39;3841&#39;,&#39;3842&#39;,&#39;3845&#39;,&#39;3852&#39;,&#39;3855&#39;,&#39;3856&#39;,&#39;3860&#39;,&#39;3865&#39;,&#39;3869&#39;,&#39;3872&#39;,&#39;3877&#39;,&#39;3888&#39;,&#39;3889&#39;,&#39;3899&#39;,&#39;3903&#39;,&#39;3905&#39;,&#39;3916&#39;,&#39;3918&#39;,&#39;3926&#39;,&#39;3929&#39;,&#39;3941&#39;,&#39;3947&#39;,&#39;3950&#39;,&#39;3953&#39;,&#39;3962&#39;,&#39;3970&#39;,&#39;3982&#39;,&#39;4015&#39;,&#39;4018&#39;,&#39;4030&#39;,&#39;4031&#39;,&#39;4040&#39;,&#39;4041&#39;,&#39;4044&#39;,&#39;4050&#39;,&#39;4055&#39;,&#39;4069&#39;,&#39;4071&#39;,&#39;4072&#39;,&#39;4076&#39;,&#39;4084&#39;,&#39;4085&#39;,&#39;4087&#39;,&#39;4093&#39;,&#39;4095&#39;,&#39;4106&#39;,&#39;4109&#39;,&#39;4113&#39;,&#39;4118&#39;,&#39;4119&#39;,&#39;4121&#39;,&#39;4124&#39;,&#39;4125&#39;,&#39;4129&#39;,&#39;4153&#39;,&#39;4156&#39;,&#39;4165&#39;,&#39;4174&#39;,&#39;4180&#39;,&#39;4192&#39;,&#39;4208&#39;,&#39;4214&#39;,&#39;4220&#39;,&#39;4225&#39;,&#39;4228&#39;,&#39;4231&#39;,&#39;4240&#39;,&#39;4268&#39;,&#39;4277&#39;,&#39;4281&#39;,&#39;4294&#39;,&#39;4295&#39;,&#39;4297&#39;,&#39;4303&#39;,&#39;4318&#39;,&#39;4324&#39;,&#39;4325&#39;,&#39;4326&#39;,&#39;4327&#39;,&#39;4337&#39;,&#39;4343&#39;,&#39;4345&#39;,&#39;4351&#39;,&#39;4354&#39;,&#39;4359&#39;,&#39;4364&#39;,&#39;4365&#39;,&#39;4388&#39;,&#39;4392&#39;,&#39;4398&#39;,&#39;4404&#39;,&#39;4405&#39;,&#39;4424&#39;,&#39;4431&#39;,&#39;4445&#39;,&#39;4458&#39;,&#39;4466&#39;,&#39;4468&#39;,&#39;4470&#39;,&#39;4472&#39;,&#39;4480&#39;,&#39;4487&#39;,&#39;4492&#39;,&#39;4493&#39;,&#39;4498&#39;,&#39;4499&#39;,&#39;4504&#39;,&#39;4510&#39;,&#39;4513&#39;,&#39;4521&#39;,&#39;4531&#39;,&#39;4543&#39;,&#39;4546&#39;,&#39;4549&#39;,&#39;4552&#39;,&#39;4556&#39;,&#39;4557&#39;,&#39;4558&#39;,&#39;4561&#39;,&#39;4562&#39;,&#39;4576&#39;,&#39;4583&#39;,&#39;4586&#39;,&#39;4597&#39;,&#39;4614&#39;,&#39;4617&#39;,&#39;4627&#39;,&#39;4646&#39;,&#39;4649&#39;,&#39;4654&#39;,&#39;4664&#39;,&#39;4668&#39;,&#39;4714&#39;,&#39;4723&#39;,&#39;4728&#39;,&#39;4752&#39;,&#39;4760&#39;,&#39;4761&#39;,&#39;4763&#39;,&#39;4767&#39;,&#39;4772&#39;,&#39;4791&#39;,&#39;4814&#39;,&#39;4823&#39;,&#39;4825&#39;,&#39;4840&#39;,&#39;4841&#39;,&#39;4847&#39;,&#39;4850&#39;,&#39;4865&#39;,&#39;4873&#39;,&#39;4884&#39;,&#39;4893&#39;,&#39;4895&#39;,&#39;4905&#39;,&#39;4918&#39;,&#39;4920&#39;,&#39;4935&#39;,&#39;4936&#39;,&#39;4943&#39;,&#39;4953&#39;,&#39;4964&#39;,&#39;4969&#39;,&#39;4978&#39;,&#39;4979&#39;,&#39;4980&#39;,&#39;4994&#39;,&#39;5003&#39;,&#39;5015&#39;,&#39;5017&#39;,&#39;5019&#39;,&#39;5021&#39;,&#39;5028&#39;,&#39;5030&#39;,&#39;5033&#39;,&#39;5039&#39;,&#39;5041&#39;,&#39;5042&#39;,&#39;5046&#39;,&#39;5050&#39;,&#39;5052&#39;,&#39;5053&#39;,&#39;5062&#39;,&#39;5064&#39;,&#39;5072&#39;,&#39;5079&#39;,&#39;5083&#39;,&#39;5087&#39;,&#39;5098&#39;,&#39;5111&#39;,&#39;5113&#39;,&#39;5119&#39;,&#39;5121&#39;,&#39;5147&#39;,&#39;5148&#39;,&#39;5154&#39;,&#39;5157&#39;,&#39;5159&#39;,&#39;5178&#39;,&#39;5185&#39;,&#39;5186&#39;,&#39;5192&#39;,&#39;5193&#39;,&#39;5201&#39;,&#39;5223&#39;,&#39;5238&#39;,&#39;5240&#39;,&#39;5251&#39;,&#39;5253&#39;,&#39;5260&#39;,&#39;5280&#39;,&#39;5288&#39;,&#39;5296&#39;,&#39;5297&#39;,&#39;5305&#39;,&#39;5306&#39;,&#39;5310&#39;,&#39;5313&#39;,&#39;5316&#39;,&#39;5319&#39;,&#39;5327&#39;,&#39;5329&#39;,&#39;5346&#39;,&#39;5347&#39;,&#39;5348&#39;,&#39;5362&#39;,&#39;5370&#39;,&#39;5371&#39;,&#39;5372&#39;,&#39;5382&#39;,&#39;5400&#39;,&#39;5411&#39;,&#39;5416&#39;,&#39;5427&#39;,&#39;5433&#39;,&#39;5438&#39;,&#39;5440&#39;,&#39;5444&#39;,&#39;5447&#39;,&#39;5453&#39;,&#39;5458&#39;,&#39;5459&#39;,&#39;5461&#39;,&#39;5465&#39;,&#39;5472&#39;,&#39;5474&#39;,&#39;5475&#39;,&#39;5483&#39;,&#39;5487&#39;,&#39;5494&#39;,&#39;5504&#39;,&#39;5507&#39;,&#39;5527&#39;,&#39;5536&#39;,&#39;5539&#39;,&#39;5542&#39;,&#39;5548&#39;,&#39;5561&#39;,&#39;5563&#39;,&#39;5564&#39;,&#39;5569&#39;,&#39;5571&#39;,&#39;5581&#39;,&#39;5584&#39;,&#39;5587&#39;,&#39;5588&#39;,&#39;5604&#39;,&#39;5609&#39;,&#39;5610&#39;,&#39;5614&#39;,&#39;5635&#39;,&#39;5642&#39;,&#39;5652&#39;,&#39;5653&#39;,&#39;5662&#39;,&#39;5669&#39;,&#39;5673&#39;,&#39;5678&#39;,&#39;5683&#39;,&#39;5691&#39;,&#39;5693&#39;,&#39;5695&#39;,&#39;5699&#39;,&#39;5704&#39;,&#39;5730&#39;,&#39;5732&#39;,&#39;5735&#39;,&#39;5743&#39;,&#39;5748&#39;,&#39;5758&#39;,&#39;5765&#39;,&#39;5766&#39;,&#39;5768&#39;,&#39;5770&#39;,&#39;5774&#39;,&#39;5779&#39;,&#39;5792&#39;,&#39;5811&#39;,&#39;5814&#39;,&#39;5819&#39;,&#39;5829&#39;,&#39;5830&#39;,&#39;5831&#39;,&#39;5856&#39;,&#39;5862&#39;,&#39;5875&#39;,&#39;5876&#39;,&#39;5879&#39;,&#39;5883&#39;,&#39;5885&#39;,&#39;5899&#39;,&#39;5903&#39;,&#39;5907&#39;,&#39;5908&#39;,&#39;5913&#39;,&#39;5921&#39;,&#39;5934&#39;,&#39;5941&#39;,&#39;5948&#39;,&#39;5953&#39;,&#39;5960&#39;,&#39;5964&#39;,&#39;5969&#39;,&#39;5973&#39;,&#39;5981&#39;,&#39;5985&#39;,&#39;5992&#39;,&#39;5993&#39;,&#39;5996&#39;,&#39;5998&#39;,&#39;6002&#39;,&#39;6004&#39;,&#39;6008&#39;,&#39;6015&#39;,&#39;6018&#39;,&#39;6020&#39;,&#39;6028&#39;,&#39;6034&#39;,&#39;6036&#39;,&#39;6048&#39;,&#39;6049&#39;,&#39;6059&#39;,&#39;6067&#39;,&#39;6073&#39;,&#39;6081&#39;,&#39;6084&#39;,&#39;6086&#39;,&#39;6093&#39;,&#39;6114&#39;,&#39;6122&#39;,&#39;6130&#39;,&#39;6137&#39;,&#39;6138&#39;,&#39;6142&#39;,&#39;6143&#39;,&#39;6157&#39;,&#39;6163&#39;,&#39;6165&#39;,&#39;6167&#39;,&#39;6178&#39;,&#39;6187&#39;,&#39;6192&#39;,&#39;6195&#39;,&#39;6201&#39;,&#39;6205&#39;,&#39;6206&#39;,&#39;6209&#39;,&#39;6218&#39;,&#39;6230&#39;,&#39;6245&#39;,&#39;6254&#39;,&#39;6260&#39;,&#39;6264&#39;,&#39;6275&#39;,&#39;6280&#39;,&#39;6281&#39;,&#39;6284&#39;,&#39;6305&#39;,&#39;6308&#39;,&#39;6312&#39;,&#39;6325&#39;,&#39;6326&#39;,&#39;6334&#39;,&#39;6359&#39;,&#39;6360&#39;,&#39;6362&#39;,&#39;6367&#39;,&#39;6373&#39;,&#39;6379&#39;,&#39;6389&#39;,&#39;6390&#39;,&#39;6394&#39;,&#39;6403&#39;,&#39;6417&#39;,&#39;6420&#39;,&#39;6423&#39;,&#39;6438&#39;,&#39;6443&#39;,&#39;6451&#39;,&#39;6459&#39;,&#39;6463&#39;,&#39;6466&#39;,&#39;6468&#39;,&#39;6470&#39;,&#39;6477&#39;,&#39;6482&#39;,&#39;6491&#39;,&#39;6500&#39;,&#39;6505&#39;,&#39;6509&#39;,&#39;6514&#39;,&#39;6518&#39;,&#39;6520&#39;,&#39;6525&#39;,&#39;6528&#39;,&#39;6541&#39;,&#39;6544&#39;,&#39;6547&#39;,&#39;6551&#39;,&#39;6559&#39;,&#39;6574&#39;,&#39;6585&#39;,&#39;6589&#39;,&#39;6594&#39;,&#39;6606&#39;,&#39;6609&#39;,&#39;6619&#39;,&#39;6627&#39;,&#39;6661&#39;,&#39;6668&#39;,&#39;6670&#39;,&#39;6671&#39;,&#39;6674&#39;,&#39;6680&#39;,&#39;6688&#39;,&#39;6696&#39;,&#39;6699&#39;,&#39;6707&#39;,&#39;6713&#39;,&#39;6718&#39;,&#39;6724&#39;,&#39;6745&#39;,&#39;6751&#39;,&#39;6755&#39;,&#39;6773&#39;,&#39;6781&#39;,&#39;6798&#39;,&#39;6810&#39;,&#39;6812&#39;,&#39;6844&#39;,&#39;6859&#39;,&#39;6860&#39;,&#39;6877&#39;,&#39;6878&#39;,&#39;6879&#39;,&#39;6888&#39;,&#39;6889&#39;,&#39;6891&#39;,&#39;6893&#39;,&#39;6901&#39;,&#39;6909&#39;,&#39;6912&#39;,&#39;6925&#39;,&#39;6926&#39;,&#39;6932&#39;,&#39;6935&#39;,&#39;6942&#39;,&#39;6943&#39;,&#39;6950&#39;,&#39;6957&#39;,&#39;6970&#39;,&#39;6976&#39;,&#39;6981&#39;,&#39;6987&#39;,&#39;6989&#39;,&#39;6990&#39;,&#39;6991&#39;,&#39;6997&#39;,&#39;7001&#39;,&#39;7005&#39;,&#39;7026&#39;,&#39;7027&#39;,&#39;7035&#39;,&#39;7048&#39;,&#39;7053&#39;,&#39;7057&#39;,&#39;7059&#39;,&#39;7061&#39;,&#39;7064&#39;,&#39;7080&#39;,&#39;7083&#39;,&#39;7089&#39;,&#39;7090&#39;,&#39;7091&#39;,&#39;7092&#39;,&#39;7094&#39;,&#39;7096&#39;,&#39;7104&#39;,&#39;7106&#39;,&#39;7108&#39;,&#39;7111&#39;,&#39;7112&#39;,&#39;7115&#39;,&#39;7129&#39;,&#39;7137&#39;,&#39;7144&#39;,&#39;7155&#39;,&#39;7157&#39;,&#39;7167&#39;,&#39;7177&#39;,&#39;7180&#39;,&#39;7200&#39;,&#39;7202&#39;,&#39;7214&#39;,&#39;7232&#39;,&#39;7235&#39;,&#39;7238&#39;,&#39;7248&#39;,&#39;7252&#39;,&#39;7256&#39;,&#39;7268&#39;,&#39;7272&#39;,&#39;7287&#39;,&#39;7292&#39;,&#39;7301&#39;,&#39;7322&#39;,&#39;7324&#39;,&#39;7326&#39;,&#39;7331&#39;,&#39;7333&#39;,&#39;7346&#39;,&#39;7349&#39;,&#39;7356&#39;,&#39;7359&#39;,&#39;7361&#39;,&#39;7371&#39;,&#39;7376&#39;,&#39;7377&#39;,&#39;7387&#39;,&#39;7388&#39;,&#39;7394&#39;,&#39;7401&#39;,&#39;7426&#39;,&#39;7427&#39;,&#39;7432&#39;,&#39;7435&#39;,&#39;7437&#39;,&#39;7438&#39;,&#39;7445&#39;,&#39;7446&#39;,&#39;7451&#39;,&#39;7454&#39;,&#39;7468&#39;,&#39;7485&#39;,&#39;7486&#39;,&#39;7514&#39;,&#39;7517&#39;,&#39;7536&#39;,&#39;7540&#39;,&#39;7544&#39;,&#39;7551&#39;,&#39;7555&#39;,&#39;7557&#39;,&#39;7572&#39;,&#39;7577&#39;,&#39;7589&#39;,&#39;7604&#39;,&#39;7606&#39;,&#39;7626&#39;,&#39;7627&#39;,&#39;7633&#39;,&#39;7642&#39;,&#39;7643&#39;,&#39;7652&#39;,&#39;7654&#39;,&#39;7668&#39;,&#39;7690&#39;,&#39;7696&#39;,&#39;7697&#39;,&#39;7702&#39;,&#39;7717&#39;,&#39;7721&#39;,&#39;7743&#39;,&#39;7746&#39;,&#39;7748&#39;,&#39;7749&#39;,&#39;7750&#39;,&#39;7751&#39;,&#39;7760&#39;,&#39;7764&#39;,&#39;7765&#39;,&#39;7772&#39;,&#39;7777&#39;,&#39;7779&#39;,&#39;7808&#39;,&#39;7813&#39;,&#39;7828&#39;,&#39;7863&#39;,&#39;7870&#39;,&#39;7876&#39;,&#39;7884&#39;,&#39;7889&#39;,&#39;7897&#39;,&#39;7898&#39;,&#39;7900&#39;,&#39;7903&#39;,&#39;7911&#39;,&#39;7912&#39;,&#39;7919&#39;,&#39;7922&#39;,&#39;7925&#39;,&#39;7934&#39;,&#39;7936&#39;,&#39;7944&#39;,&#39;7945&#39;,&#39;7947&#39;,&#39;7962&#39;,&#39;7964&#39;,&#39;7969&#39;,&#39;7975&#39;,&#39;7978&#39;,&#39;7990&#39;,&#39;7994&#39;,&#39;8000&#39;,&#39;8015&#39;,&#39;8023&#39;,&#39;8028&#39;,&#39;8035&#39;,&#39;8040&#39;,&#39;8041&#39;,&#39;8048&#39;,&#39;8051&#39;,&#39;8055&#39;,&#39;8056&#39;,&#39;8057&#39;,&#39;8062&#39;,&#39;8071&#39;,&#39;8080&#39;,&#39;8083&#39;,&#39;8086&#39;,&#39;8097&#39;,&#39;8102&#39;,&#39;8106&#39;,&#39;8113&#39;,&#39;8120&#39;,&#39;8135&#39;,&#39;8139&#39;,&#39;8152&#39;,&#39;8164&#39;,&#39;8172&#39;,&#39;8174&#39;,&#39;8175&#39;,&#39;8178&#39;,&#39;8182&#39;,&#39;8191&#39;,&#39;8199&#39;,&#39;8205&#39;,&#39;8210&#39;,&#39;8211&#39;,&#39;8216&#39;,&#39;8221&#39;,&#39;8223&#39;,&#39;8224&#39;,&#39;8232&#39;,&#39;8240&#39;,&#39;8241&#39;,&#39;8252&#39;,&#39;8275&#39;,&#39;8292&#39;,&#39;8303&#39;,&#39;8306&#39;,&#39;8307&#39;,&#39;8321&#39;,&#39;8326&#39;,&#39;8335&#39;,&#39;8350&#39;,&#39;8358&#39;,&#39;8365&#39;,&#39;8374&#39;,&#39;8376&#39;,&#39;8386&#39;,&#39;8387&#39;,&#39;8396&#39;,&#39;8398&#39;,&#39;8404&#39;,&#39;8411&#39;,&#39;8433&#39;,&#39;8443&#39;,&#39;8456&#39;,&#39;8458&#39;,&#39;8479&#39;,&#39;8482&#39;,&#39;8489&#39;,&#39;8496&#39;,&#39;8499&#39;,&#39;8504&#39;,&#39;8511&#39;,&#39;8521&#39;,&#39;8523&#39;,&#39;8524&#39;,&#39;8529&#39;,&#39;8530&#39;,&#39;8534&#39;,&#39;8538&#39;,&#39;8548&#39;,&#39;8549&#39;,&#39;8555&#39;,&#39;8558&#39;,&#39;8561&#39;,&#39;8562&#39;,&#39;8571&#39;,&#39;8579&#39;,&#39;8589&#39;,&#39;8593&#39;,&#39;8606&#39;,&#39;8614&#39;,&#39;8628&#39;,&#39;8629&#39;,&#39;8638&#39;,&#39;8640&#39;,&#39;8653&#39;,&#39;8661&#39;,&#39;8669&#39;,&#39;8676&#39;,&#39;8694&#39;,&#39;8698&#39;,&#39;8720&#39;,&#39;8723&#39;,&#39;8729&#39;,&#39;8733&#39;,&#39;8742&#39;,&#39;8745&#39;,&#39;8752&#39;,&#39;8756&#39;,&#39;8758&#39;,&#39;8763&#39;,&#39;8774&#39;,&#39;8791&#39;,&#39;8795&#39;,&#39;8809&#39;,&#39;8816&#39;,&#39;8820&#39;,&#39;8821&#39;,&#39;8836&#39;,&#39;8837&#39;,&#39;8838&#39;,&#39;8840&#39;,&#39;8845&#39;,&#39;8849&#39;,&#39;8851&#39;,&#39;8853&#39;,&#39;8856&#39;,&#39;8865&#39;,&#39;8867&#39;,&#39;8877&#39;,&#39;8878&#39;,&#39;8892&#39;,&#39;8901&#39;,&#39;8906&#39;,&#39;8912&#39;,&#39;8914&#39;,&#39;8915&#39;,&#39;8923&#39;,&#39;8941&#39;,&#39;8946&#39;,&#39;8956&#39;,&#39;8972&#39;,&#39;8981&#39;,&#39;8986&#39;,&#39;8991&#39;,&#39;8992&#39;,&#39;9007&#39;,&#39;9023&#39;,&#39;9026&#39;,&#39;9039&#39;,&#39;9041&#39;,&#39;9049&#39;,&#39;9074&#39;,&#39;9077&#39;,&#39;9086&#39;,&#39;9096&#39;,&#39;9101&#39;,&#39;9106&#39;,&#39;9114&#39;,&#39;9120&#39;,&#39;9132&#39;,&#39;9135&#39;,&#39;9137&#39;,&#39;9138&#39;,&#39;9159&#39;,&#39;9161&#39;,&#39;9164&#39;,&#39;9183&#39;,&#39;9189&#39;,&#39;9204&#39;,&#39;9210&#39;,&#39;9217&#39;,&#39;9220&#39;,&#39;9226&#39;,&#39;9228&#39;,&#39;9231&#39;,&#39;9236&#39;,&#39;9237&#39;,&#39;9239&#39;,&#39;9243&#39;,&#39;9245&#39;,&#39;9248&#39;,&#39;9250&#39;,&#39;9260&#39;,&#39;9262&#39;,&#39;9264&#39;,&#39;9274&#39;,&#39;9277&#39;,&#39;9299&#39;,&#39;9310&#39;,&#39;9311&#39;,&#39;9314&#39;,&#39;9316&#39;,&#39;9336&#39;,&#39;9356&#39;,&#39;9365&#39;,&#39;9367&#39;,&#39;9368&#39;,&#39;9370&#39;,&#39;9374&#39;,&#39;9378&#39;,&#39;9393&#39;,&#39;9398&#39;,&#39;9411&#39;,&#39;9415&#39;,&#39;9439&#39;,&#39;9440&#39;,&#39;9452&#39;,&#39;9468&#39;,&#39;9470&#39;,&#39;9474&#39;,&#39;9476&#39;,&#39;9477&#39;,&#39;9484&#39;,&#39;9493&#39;,&#39;9507&#39;,&#39;9516&#39;,&#39;9517&#39;,&#39;9534&#39;,&#39;9538&#39;,&#39;9542&#39;,&#39;9554&#39;,&#39;9557&#39;,&#39;9569&#39;,&#39;9570&#39;,&#39;9579&#39;,&#39;9587&#39;,&#39;9602&#39;,&#39;9613&#39;,&#39;9626&#39;,&#39;9636&#39;,&#39;9672&#39;,&#39;9691&#39;,&#39;9713&#39;,&#39;9725&#39;,&#39;9739&#39;,&#39;9744&#39;,&#39;9747&#39;,&#39;9754&#39;,&#39;9758&#39;,&#39;9760&#39;,&#39;9763&#39;,&#39;9765&#39;,&#39;9772&#39;,&#39;9775&#39;,&#39;9778&#39;,&#39;9779&#39;,&#39;9792&#39;,&#39;9801&#39;,&#39;9818&#39;,&#39;9826&#39;,&#39;9864&#39;,&#39;9871&#39;,&#39;9875&#39;,&#39;9876&#39;,&#39;9920&#39;,&#39;9921&#39;,&#39;9923&#39;,&#39;9929&#39;,&#39;9939&#39;,&#39;9943&#39;,&#39;9949&#39;,&#39;9953&#39;,&#39;9957&#39;,&#39;9971&#39;,&#39;9984&#39;,&#39;9991&#39;,&#39;10007&#39;,&#39;10010&#39;,&#39;10017&#39;,&#39;10020&#39;,&#39;10026&#39;,&#39;10027&#39;,&#39;10034&#39;,&#39;10046&#39;,&#39;10053&#39;,&#39;10055&#39;,&#39;10058&#39;,&#39;10060&#39;,&#39;10061&#39;,&#39;10063&#39;,&#39;10067&#39;,&#39;10077&#39;,&#39;10078&#39;,&#39;10095&#39;,&#39;10101&#39;,&#39;10106&#39;,&#39;10132&#39;,&#39;10133&#39;,&#39;10135&#39;,&#39;10140&#39;,&#39;10149&#39;,&#39;10150&#39;,&#39;10157&#39;,&#39;10160&#39;,&#39;10163&#39;,&#39;10181&#39;,&#39;10190&#39;,&#39;10192&#39;,&#39;10208&#39;,&#39;10221&#39;,&#39;10226&#39;,&#39;10243&#39;,&#39;10251&#39;,&#39;10256&#39;,&#39;10271&#39;,&#39;10274&#39;,&#39;10279&#39;,&#39;10289&#39;,&#39;10296&#39;,&#39;10305&#39;,&#39;10314&#39;,&#39;10348&#39;,&#39;10368&#39;,&#39;10372&#39;,&#39;10373&#39;,&#39;10379&#39;,&#39;10388&#39;,&#39;10403&#39;,&#39;10417&#39;,&#39;10428&#39;,&#39;10429&#39;,&#39;10432&#39;,&#39;10433&#39;,&#39;10435&#39;,&#39;10436&#39;,&#39;10442&#39;,&#39;10444&#39;,&#39;10449&#39;,&#39;10452&#39;,&#39;10453&#39;,&#39;10456&#39;,&#39;10460&#39;,&#39;10472&#39;,&#39;10495&#39;,&#39;10504&#39;,&#39;10513&#39;,&#39;10540&#39;,&#39;10546&#39;,&#39;10551&#39;,&#39;10561&#39;,&#39;10580&#39;,&#39;10586&#39;,&#39;10587&#39;,&#39;10589&#39;,&#39;10599&#39;,&#39;10612&#39;,&#39;10632&#39;,&#39;10642&#39;,&#39;10644&#39;,&#39;10645&#39;,&#39;10647&#39;,&#39;10660&#39;,&#39;10679&#39;,&#39;10681&#39;,&#39;10682&#39;,&#39;10684&#39;,&#39;10685&#39;,&#39;10687&#39;,&#39;10692&#39;,&#39;10693&#39;,&#39;10697&#39;,&#39;10709&#39;,&#39;10715&#39;,&#39;10720&#39;,&#39;10738&#39;,&#39;10745&#39;,&#39;10748&#39;,&#39;10751&#39;,&#39;10760&#39;,&#39;10762&#39;,&#39;10773&#39;,&#39;10788&#39;,&#39;10797&#39;,&#39;10798&#39;,&#39;10800&#39;,&#39;10819&#39;,&#39;10820&#39;,&#39;10826&#39;,&#39;10830&#39;,&#39;10859&#39;,&#39;10860&#39;,&#39;10863&#39;,&#39;10867&#39;,&#39;10877&#39;,&#39;10884&#39;,&#39;10895&#39;,&#39;10896&#39;,&#39;10902&#39;,&#39;10909&#39;,&#39;10910&#39;,&#39;10911&#39;,&#39;10912&#39;,&#39;10914&#39;,&#39;10916&#39;,&#39;10918&#39;,&#39;10921&#39;,&#39;10924&#39;,&#39;10937&#39;,&#39;10941&#39;,&#39;10968&#39;,&#39;10980&#39;,&#39;10981&#39;,&#39;10984&#39;,&#39;10987&#39;,&#39;10988&#39;,&#39;10993&#39;,&#39;10997&#39;,&#39;11003&#39;,&#39;11023&#39;,&#39;11026&#39;,&#39;11051&#39;,&#39;11056&#39;,&#39;11066&#39;,&#39;11077&#39;,&#39;11082&#39;,&#39;11086&#39;,&#39;11091&#39;,&#39;11092&#39;,&#39;11102&#39;,&#39;11108&#39;,&#39;11110&#39;,&#39;11118&#39;,&#39;11128&#39;,&#39;11138&#39;,&#39;11141&#39;,&#39;11146&#39;,&#39;11174&#39;,&#39;11177&#39;,&#39;11180&#39;,&#39;11194&#39;,&#39;11195&#39;,&#39;11205&#39;,&#39;11208&#39;,&#39;11213&#39;,&#39;11217&#39;,&#39;11220&#39;,&#39;11224&#39;,&#39;11243&#39;,&#39;11244&#39;,&#39;11253&#39;,&#39;11255&#39;,&#39;11262&#39;,&#39;11270&#39;,&#39;11272&#39;,&#39;11285&#39;,&#39;11287&#39;,&#39;11296&#39;,&#39;11297&#39;,&#39;11301&#39;,&#39;11307&#39;,&#39;11308&#39;,&#39;11318&#39;,&#39;11321&#39;,&#39;11339&#39;,&#39;11346&#39;,&#39;11356&#39;,&#39;11364&#39;,&#39;11366&#39;,&#39;11370&#39;,&#39;11375&#39;,&#39;11377&#39;,&#39;11380&#39;,&#39;11404&#39;,&#39;11405&#39;,&#39;11410&#39;,&#39;11414&#39;,&#39;11417&#39;,&#39;11446&#39;,&#39;11448&#39;,&#39;11451&#39;,&#39;11459&#39;,&#39;11464&#39;,&#39;11476&#39;,&#39;11479&#39;,&#39;11502&#39;,&#39;11512&#39;,&#39;11515&#39;,&#39;11537&#39;,&#39;11541&#39;,&#39;11542&#39;,&#39;11544&#39;,&#39;11551&#39;,&#39;11563&#39;,&#39;11565&#39;,&#39;11578&#39;,&#39;11581&#39;,&#39;11585&#39;,&#39;11592&#39;,&#39;11595&#39;,&#39;11599&#39;,&#39;11600&#39;,&#39;11605&#39;,&#39;11618&#39;,&#39;11630&#39;,&#39;11637&#39;,&#39;11643&#39;,&#39;11648&#39;,&#39;11652&#39;,&#39;11654&#39;,&#39;11657&#39;,&#39;11664&#39;,&#39;11667&#39;,&#39;11671&#39;,&#39;11674&#39;,&#39;11677&#39;,&#39;11678&#39;,&#39;11688&#39;,&#39;11698&#39;,&#39;11699&#39;,&#39;11701&#39;,&#39;11705&#39;,&#39;11707&#39;,&#39;11710&#39;,&#39;11721&#39;,&#39;11724&#39;,&#39;11728&#39;,&#39;11736&#39;,&#39;11751&#39;,&#39;11757&#39;,&#39;11758&#39;,&#39;11762&#39;,&#39;11771&#39;,&#39;11780&#39;,&#39;11783&#39;,&#39;11784&#39;,&#39;11796&#39;,&#39;11798&#39;,&#39;11801&#39;,&#39;11809&#39;,&#39;11813&#39;,&#39;11821&#39;,&#39;11826&#39;,&#39;11844&#39;,&#39;11845&#39;,&#39;11848&#39;,&#39;11854&#39;,&#39;11858&#39;,&#39;11863&#39;,&#39;11864&#39;,&#39;11867&#39;,&#39;11871&#39;,&#39;11874&#39;,&#39;11891&#39;,&#39;11892&#39;,&#39;11894&#39;,&#39;11897&#39;,&#39;11902&#39;,&#39;11907&#39;,&#39;11910&#39;,&#39;11912&#39;,&#39;11914&#39;,&#39;11917&#39;,&#39;11943&#39;,&#39;11947&#39;,&#39;11950&#39;,&#39;11958&#39;,&#39;11967&#39;,&#39;11999&#39;,&#39;12023&#39;,&#39;12028&#39;,&#39;12036&#39;,&#39;12039&#39;,&#39;12060&#39;,&#39;12066&#39;,&#39;12074&#39;,&#39;12076&#39;,&#39;12080&#39;,&#39;12082&#39;,&#39;12086&#39;,&#39;12087&#39;,&#39;12096&#39;,&#39;12106&#39;,&#39;12115&#39;,&#39;12120&#39;,&#39;12126&#39;,&#39;12136&#39;,&#39;12139&#39;,&#39;12143&#39;,&#39;12150&#39;,&#39;12155&#39;,&#39;12159&#39;,&#39;12164&#39;,&#39;12182&#39;,&#39;12193&#39;,&#39;12195&#39;,&#39;12196&#39;,&#39;12205&#39;,&#39;12213&#39;,&#39;12238&#39;,&#39;12242&#39;,&#39;12244&#39;,&#39;12253&#39;,&#39;12257&#39;,&#39;12271&#39;,&#39;12281&#39;,&#39;12284&#39;,&#39;12292&#39;,&#39;12295&#39;,&#39;12301&#39;,&#39;12318&#39;,&#39;12329&#39;,&#39;12337&#39;,&#39;12338&#39;,&#39;12352&#39;,&#39;12360&#39;,&#39;12363&#39;,&#39;12364&#39;,&#39;12374&#39;,&#39;12382&#39;,&#39;12401&#39;,&#39;12432&#39;,&#39;12438&#39;,&#39;12440&#39;,&#39;12443&#39;,&#39;12444&#39;,&#39;12455&#39;,&#39;12459&#39;,&#39;12461&#39;,&#39;12464&#39;,&#39;12486&#39;,&#39;12491&#39;,&#39;12498&#39;,&#39;12510&#39;,&#39;12513&#39;,&#39;12514&#39;,&#39;12534&#39;,&#39;12537&#39;,&#39;12539&#39;,&#39;12540&#39;,&#39;12551&#39;,&#39;12564&#39;,&#39;12567&#39;,&#39;12573&#39;,&#39;12574&#39;,&#39;12581&#39;,&#39;12584&#39;,&#39;12586&#39;,&#39;12600&#39;,&#39;12603&#39;,&#39;12611&#39;,&#39;12615&#39;,&#39;12625&#39;,&#39;12629&#39;,&#39;12638&#39;,&#39;12642&#39;,&#39;12656&#39;,&#39;12659&#39;,&#39;12661&#39;,&#39;12671&#39;,&#39;12677&#39;,&#39;12678&#39;,&#39;12684&#39;,&#39;12692&#39;,&#39;12693&#39;,&#39;12695&#39;,&#39;12697&#39;,&#39;12716&#39;,&#39;12724&#39;,&#39;12735&#39;,&#39;12756&#39;,&#39;12775&#39;,&#39;12787&#39;,&#39;12790&#39;,&#39;12805&#39;,&#39;12809&#39;,&#39;12824&#39;,&#39;12835&#39;,&#39;12837&#39;,&#39;12844&#39;,&#39;12845&#39;,&#39;12857&#39;,&#39;12861&#39;,&#39;12868&#39;,&#39;12876&#39;,&#39;12880&#39;,&#39;12881&#39;,&#39;12884&#39;,&#39;12893&#39;,&#39;12903&#39;,&#39;12908&#39;,&#39;12923&#39;,&#39;12926&#39;,&#39;12935&#39;,&#39;12940&#39;,&#39;12947&#39;,&#39;12953&#39;,&#39;12956&#39;,&#39;12965&#39;,&#39;12977&#39;,&#39;12979&#39;,&#39;12980&#39;,&#39;12984&#39;,&#39;12992&#39;,&#39;12996&#39;,&#39;12998&#39;,&#39;13002&#39;,&#39;13012&#39;,&#39;13027&#39;,&#39;13062&#39;,&#39;13066&#39;,&#39;13081&#39;,&#39;13087&#39;,&#39;13100&#39;,&#39;13103&#39;,&#39;13106&#39;,&#39;13107&#39;,&#39;13117&#39;,&#39;13120&#39;,&#39;13123&#39;,&#39;13131&#39;,&#39;13146&#39;,&#39;13148&#39;,&#39;13149&#39;,&#39;13154&#39;,&#39;13160&#39;,&#39;13162&#39;,&#39;13166&#39;,&#39;13170&#39;,&#39;13184&#39;,&#39;13185&#39;,&#39;13186&#39;,&#39;13190&#39;,&#39;13192&#39;,&#39;13193&#39;,&#39;13196&#39;,&#39;13215&#39;,&#39;13216&#39;,&#39;13218&#39;,&#39;13219&#39;,&#39;13230&#39;,&#39;13238&#39;,&#39;13239&#39;,&#39;13244&#39;,&#39;13247&#39;,&#39;13253&#39;,&#39;13259&#39;,&#39;13265&#39;,&#39;13266&#39;,&#39;13269&#39;,&#39;13282&#39;,&#39;13285&#39;,&#39;13286&#39;,&#39;13289&#39;,&#39;13300&#39;,&#39;13301&#39;,&#39;13307&#39;,&#39;13312&#39;,&#39;13313&#39;,&#39;13318&#39;,&#39;13320&#39;,&#39;13331&#39;,&#39;13332&#39;,&#39;13357&#39;,&#39;13358&#39;,&#39;13366&#39;,&#39;13367&#39;,&#39;13375&#39;,&#39;13389&#39;,&#39;13407&#39;,&#39;13408&#39;,&#39;13409&#39;,&#39;13410&#39;,&#39;13416&#39;,&#39;13429&#39;,&#39;13433&#39;,&#39;13438&#39;,&#39;13440&#39;,&#39;13459&#39;,&#39;13465&#39;,&#39;13470&#39;,&#39;13475&#39;,&#39;13481&#39;,&#39;13482&#39;,&#39;13483&#39;,&#39;13486&#39;,&#39;13487&#39;,&#39;13490&#39;,&#39;13502&#39;,&#39;13505&#39;,&#39;13506&#39;,&#39;13510&#39;,&#39;13514&#39;,&#39;13527&#39;,&#39;13540&#39;,&#39;13545&#39;,&#39;13546&#39;,&#39;13547&#39;,&#39;13564&#39;,&#39;13565&#39;,&#39;13566&#39;,&#39;13570&#39;,&#39;13572&#39;,&#39;13576&#39;,&#39;13578&#39;,&#39;13580&#39;,&#39;13581&#39;,&#39;13583&#39;,&#39;13585&#39;,&#39;13591&#39;,&#39;13593&#39;,&#39;13595&#39;,&#39;13597&#39;,&#39;13601&#39;,&#39;13606&#39;,&#39;13611&#39;,&#39;13619&#39;,&#39;13624&#39;,&#39;13631&#39;,&#39;13635&#39;,&#39;13637&#39;,&#39;13638&#39;,&#39;13639&#39;,&#39;13651&#39;,&#39;13660&#39;,&#39;13678&#39;,&#39;13683&#39;,&#39;13686&#39;,&#39;13726&#39;,&#39;13729&#39;,&#39;13732&#39;,&#39;13737&#39;,&#39;13738&#39;,&#39;13741&#39;,&#39;13742&#39;,&#39;13756&#39;,&#39;13759&#39;,&#39;13762&#39;,&#39;13765&#39;,&#39;13769&#39;,&#39;13770&#39;,&#39;13775&#39;,&#39;13784&#39;,&#39;13792&#39;,&#39;13805&#39;,&#39;13808&#39;,&#39;13820&#39;,&#39;13827&#39;,&#39;13834&#39;,&#39;13841&#39;,&#39;13855&#39;,&#39;13857&#39;,&#39;13862&#39;,&#39;13868&#39;,&#39;13871&#39;,&#39;13881&#39;,&#39;13882&#39;,&#39;13889&#39;,&#39;13891&#39;,&#39;13896&#39;,&#39;13905&#39;,&#39;13911&#39;,&#39;13913&#39;,&#39;13926&#39;,&#39;13929&#39;,&#39;13932&#39;,&#39;13942&#39;,&#39;13962&#39;,&#39;13989&#39;,&#39;13990&#39;,&#39;13994&#39;,&#39;13995&#39;,&#39;13997&#39;,&#39;14003&#39;,&#39;14004&#39;,&#39;14006&#39;,&#39;14007&#39;,&#39;14010&#39;,&#39;14013&#39;,&#39;14015&#39;,&#39;14017&#39;,&#39;14019&#39;,&#39;14024&#39;,&#39;14026&#39;,&#39;14030&#39;,&#39;14033&#39;,&#39;14034&#39;,&#39;14069&#39;,&#39;14075&#39;,&#39;14078&#39;,&#39;14080&#39;,&#39;14081&#39;,&#39;14082&#39;,&#39;14085&#39;,&#39;14089&#39;,&#39;14090&#39;,&#39;14091&#39;,&#39;14093&#39;,&#39;14097&#39;,&#39;14099&#39;,&#39;14106&#39;,&#39;14107&#39;,&#39;14113&#39;,&#39;14116&#39;,&#39;14135&#39;,&#39;14147&#39;,&#39;14149&#39;,&#39;14153&#39;,&#39;14158&#39;,&#39;14160&#39;,&#39;14168&#39;,&#39;14169&#39;,&#39;14175&#39;,&#39;14176&#39;,&#39;14190&#39;,&#39;14192&#39;,&#39;14204&#39;,&#39;14206&#39;,&#39;14207&#39;,&#39;14218&#39;,&#39;14223&#39;,&#39;14231&#39;,&#39;14248&#39;,&#39;14249&#39;,&#39;14252&#39;,&#39;14258&#39;,&#39;14261&#39;,&#39;14266&#39;,&#39;14267&#39;,&#39;14272&#39;,&#39;14274&#39;,&#39;14280&#39;,&#39;14281&#39;,&#39;14286&#39;,&#39;14295&#39;,&#39;14297&#39;,&#39;14308&#39;,&#39;14319&#39;,&#39;14322&#39;,&#39;14324&#39;,&#39;14327&#39;,&#39;14328&#39;,&#39;14330&#39;,&#39;14332&#39;,&#39;14336&#39;,&#39;14337&#39;,&#39;14341&#39;,&#39;14351&#39;,&#39;14363&#39;,&#39;14369&#39;,&#39;14373&#39;,&#39;14376&#39;,&#39;14377&#39;,&#39;14378&#39;,&#39;14380&#39;,&#39;14381&#39;,&#39;14386&#39;,&#39;14390&#39;,&#39;14393&#39;,&#39;14398&#39;,&#39;14410&#39;,&#39;14417&#39;,&#39;14436&#39;,&#39;14438&#39;,&#39;14445&#39;,&#39;14447&#39;,&#39;14450&#39;,&#39;14451&#39;,&#39;14454&#39;,&#39;14457&#39;,&#39;14466&#39;,&#39;14467&#39;,&#39;14469&#39;,&#39;14472&#39;,&#39;14474&#39;,&#39;14480&#39;,&#39;14481&#39;,&#39;14485&#39;,&#39;14486&#39;,&#39;14495&#39;,&#39;14504&#39;,&#39;14509&#39;,&#39;14523&#39;,&#39;14526&#39;,&#39;14538&#39;,&#39;14555&#39;,&#39;14577&#39;,&#39;14595&#39;,&#39;14596&#39;,&#39;14602&#39;,&#39;14610&#39;,&#39;14611&#39;,&#39;14641&#39;,&#39;14646&#39;,&#39;14651&#39;,&#39;14652&#39;,&#39;14657&#39;,&#39;14688&#39;,&#39;14700&#39;,&#39;14707&#39;,&#39;14709&#39;,&#39;14722&#39;,&#39;14726&#39;,&#39;14727&#39;,&#39;14730&#39;,&#39;14735&#39;,&#39;14744&#39;,&#39;14750&#39;,&#39;14761&#39;,&#39;14766&#39;,&#39;14770&#39;,&#39;14778&#39;,&#39;14789&#39;,&#39;14795&#39;,&#39;14803&#39;,&#39;14804&#39;,&#39;14813&#39;,&#39;14820&#39;,&#39;14826&#39;,&#39;14837&#39;,&#39;14842&#39;,&#39;14849&#39;,&#39;14854&#39;,&#39;14856&#39;,&#39;14862&#39;,&#39;14874&#39;,&#39;14878&#39;,&#39;14879&#39;,&#39;14880&#39;,&#39;14909&#39;,&#39;14925&#39;,&#39;14931&#39;,&#39;14936&#39;,&#39;14945&#39;,&#39;14961&#39;,&#39;14966&#39;,&#39;14968&#39;,&#39;14975&#39;,&#39;14989&#39;,&#39;14991&#39;,&#39;14996&#39;,&#39;14999&#39;,&#39;15013&#39;,&#39;15024&#39;,&#39;15025&#39;,&#39;15047&#39;,&#39;15049&#39;,&#39;15060&#39;,&#39;15061&#39;,&#39;15064&#39;,&#39;15074&#39;,&#39;15088&#39;,&#39;15092&#39;,&#39;15105&#39;,&#39;15111&#39;,&#39;15112&#39;,&#39;15118&#39;,&#39;15119&#39;,&#39;15121&#39;,&#39;15123&#39;,&#39;15128&#39;,&#39;15135&#39;,&#39;15143&#39;,&#39;15155&#39;,&#39;15156&#39;,&#39;15164&#39;,&#39;15168&#39;,&#39;15172&#39;,&#39;15173&#39;,&#39;15175&#39;,&#39;15177&#39;,&#39;15181&#39;,&#39;15192&#39;,&#39;15196&#39;,&#39;15201&#39;,&#39;15203&#39;,&#39;15212&#39;,&#39;15213&#39;,&#39;15214&#39;,&#39;15216&#39;,&#39;15224&#39;,&#39;15229&#39;,&#39;15234&#39;,&#39;15235&#39;,&#39;15236&#39;,&#39;15250&#39;,&#39;15253&#39;,&#39;15255&#39;,&#39;15261&#39;,&#39;15262&#39;,&#39;15267&#39;,&#39;15274&#39;,&#39;15277&#39;,&#39;15287&#39;,&#39;15320&#39;,&#39;15321&#39;,&#39;15329&#39;,&#39;15331&#39;,&#39;15332&#39;,&#39;15338&#39;,&#39;15340&#39;,&#39;15341&#39;,&#39;15352&#39;,&#39;15356&#39;,&#39;15359&#39;,&#39;15369&#39;,&#39;15379&#39;,&#39;15381&#39;,&#39;15386&#39;,&#39;15390&#39;,&#39;15394&#39;,&#39;15399&#39;,&#39;15406&#39;,&#39;15412&#39;,&#39;15413&#39;,&#39;15423&#39;,&#39;15428&#39;,&#39;15433&#39;,&#39;15442&#39;,&#39;15448&#39;,&#39;15455&#39;,&#39;15456&#39;,&#39;15460&#39;,&#39;15472&#39;,&#39;15473&#39;,&#39;15491&#39;,&#39;15494&#39;,&#39;15512&#39;,&#39;15529&#39;,&#39;15538&#39;,&#39;15559&#39;,&#39;15570&#39;,&#39;15582&#39;,&#39;15586&#39;,&#39;15588&#39;,&#39;15591&#39;,&#39;15592&#39;,&#39;15599&#39;,&#39;15603&#39;,&#39;15605&#39;,&#39;15606&#39;,&#39;15610&#39;,&#39;15613&#39;,&#39;15631&#39;,&#39;15632&#39;,&#39;15656&#39;,&#39;15664&#39;,&#39;15665&#39;,&#39;15670&#39;,&#39;15671&#39;,&#39;15677&#39;,&#39;15685&#39;,&#39;15697&#39;,&#39;15703&#39;,&#39;15719&#39;,&#39;15725&#39;,&#39;15731&#39;,&#39;15736&#39;,&#39;15739&#39;,&#39;15745&#39;,&#39;15746&#39;,&#39;15752&#39;,&#39;15753&#39;,&#39;15759&#39;,&#39;15770&#39;,&#39;15773&#39;,&#39;15775&#39;,&#39;15778&#39;,&#39;15782&#39;,&#39;15785&#39;,&#39;15786&#39;,&#39;15792&#39;,&#39;15796&#39;,&#39;15801&#39;,&#39;15804&#39;,&#39;15809&#39;,&#39;15810&#39;,&#39;15815&#39;,&#39;15817&#39;,&#39;15821&#39;,&#39;15827&#39;,&#39;15832&#39;,&#39;15833&#39;,&#39;15849&#39;,&#39;15855&#39;,&#39;15858&#39;,&#39;15866&#39;,&#39;15874&#39;,&#39;15879&#39;,&#39;15884&#39;,&#39;15894&#39;,&#39;15896&#39;,&#39;15907&#39;,&#39;15908&#39;,&#39;15915&#39;,&#39;15916&#39;,&#39;15930&#39;,&#39;15943&#39;,&#39;15952&#39;,&#39;15955&#39;,&#39;15960&#39;,&#39;15962&#39;,&#39;15973&#39;,&#39;15976&#39;,&#39;15989&#39;,&#39;15995&#39;,&#39;16002&#39;,&#39;16003&#39;,&#39;16006&#39;,&#39;16007&#39;,&#39;16017&#39;,&#39;16023&#39;,&#39;16029&#39;,&#39;16047&#39;,&#39;16049&#39;,&#39;16058&#39;,&#39;16065&#39;,&#39;16075&#39;,&#39;16092&#39;,&#39;16101&#39;,&#39;16107&#39;,&#39;16108&#39;,&#39;16123&#39;,&#39;16138&#39;,&#39;16141&#39;,&#39;16144&#39;,&#39;16155&#39;,&#39;16159&#39;,&#39;16171&#39;,&#39;16188&#39;,&#39;16192&#39;,&#39;16200&#39;,&#39;16201&#39;,&#39;16205&#39;,&#39;16208&#39;,&#39;16209&#39;,&#39;16214&#39;,&#39;16215&#39;,&#39;16218&#39;,&#39;16220&#39;,&#39;16221&#39;,&#39;16223&#39;,&#39;16224&#39;,&#39;16232&#39;,&#39;16242&#39;,&#39;16243&#39;,&#39;16252&#39;,&#39;16255&#39;,&#39;16261&#39;,&#39;16266&#39;,&#39;16267&#39;,&#39;16270&#39;,&#39;16271&#39;,&#39;16272&#39;,&#39;16276&#39;,&#39;16277&#39;,&#39;16288&#39;,&#39;16290&#39;,&#39;16299&#39;,&#39;16303&#39;,&#39;16305&#39;,&#39;16306&#39;,&#39;16315&#39;,&#39;16336&#39;,&#39;16342&#39;,&#39;16349&#39;,&#39;16355&#39;,&#39;16362&#39;,&#39;16371&#39;,&#39;16377&#39;,&#39;16378&#39;,&#39;16386&#39;,&#39;16390&#39;,&#39;16391&#39;,&#39;16434&#39;,&#39;16442&#39;,&#39;16448&#39;,&#39;16452&#39;,&#39;16462&#39;,&#39;16463&#39;,&#39;16466&#39;,&#39;16468&#39;,&#39;16491&#39;,&#39;16500&#39;,&#39;16502&#39;,&#39;16504&#39;,&#39;16519&#39;,&#39;16524&#39;,&#39;16536&#39;,&#39;16539&#39;,&#39;16542&#39;,&#39;16549&#39;,&#39;16555&#39;,&#39;16561&#39;,&#39;16565&#39;,&#39;16570&#39;,&#39;16576&#39;,&#39;16579&#39;,&#39;16594&#39;,&#39;16599&#39;,&#39;16603&#39;,&#39;16604&#39;,&#39;16605&#39;,&#39;16622&#39;,&#39;16623&#39;,&#39;16629&#39;,&#39;16635&#39;,&#39;16639&#39;,&#39;16640&#39;,&#39;16649&#39;,&#39;16657&#39;,&#39;16659&#39;,&#39;16662&#39;,&#39;16663&#39;,&#39;16666&#39;,&#39;16670&#39;,&#39;16671&#39;,&#39;16679&#39;,&#39;16687&#39;,&#39;16694&#39;,&#39;16696&#39;,&#39;16698&#39;,&#39;16700&#39;,&#39;16715&#39;,&#39;16723&#39;,&#39;16731&#39;,&#39;16733&#39;,&#39;16739&#39;,&#39;16743&#39;,&#39;16754&#39;,&#39;16755&#39;,&#39;16758&#39;,&#39;16762&#39;,&#39;16777&#39;,&#39;16800&#39;,&#39;16803&#39;,&#39;16806&#39;,&#39;16809&#39;,&#39;16828&#39;,&#39;16845&#39;,&#39;16867&#39;,&#39;16870&#39;,&#39;16882&#39;,&#39;16883&#39;,&#39;16891&#39;,&#39;16906&#39;,&#39;16909&#39;,&#39;16912&#39;,&#39;16913&#39;,&#39;16919&#39;,&#39;16922&#39;,&#39;16925&#39;,&#39;16926&#39;,&#39;16945&#39;,&#39;16947&#39;,&#39;16949&#39;,&#39;16967&#39;,&#39;16978&#39;,&#39;16981&#39;,&#39;16987&#39;,&#39;16990&#39;,&#39;16998&#39;,&#39;17001&#39;,&#39;17011&#39;,&#39;17012&#39;,&#39;17022&#39;,&#39;17024&#39;,&#39;17025&#39;,&#39;17028&#39;,&#39;17038&#39;,&#39;17040&#39;,&#39;17041&#39;,&#39;17042&#39;,&#39;17048&#39;,&#39;17050&#39;,&#39;17056&#39;,&#39;17061&#39;,&#39;17067&#39;,&#39;17070&#39;,&#39;17073&#39;,&#39;17093&#39;,&#39;17094&#39;,&#39;17105&#39;,&#39;17107&#39;,&#39;17110&#39;,&#39;17112&#39;,&#39;17114&#39;,&#39;17118&#39;,&#39;17127&#39;,&#39;17135&#39;,&#39;17149&#39;,&#39;17156&#39;,&#39;17165&#39;,&#39;17168&#39;,&#39;17171&#39;,&#39;17175&#39;,&#39;17187&#39;,&#39;17188&#39;,&#39;17193&#39;,&#39;17194&#39;,&#39;17197&#39;,&#39;17207&#39;,&#39;17209&#39;,&#39;17211&#39;,&#39;17218&#39;,&#39;17219&#39;,&#39;17221&#39;,&#39;17222&#39;,&#39;17226&#39;,&#39;17229&#39;,&#39;17240&#39;,&#39;17247&#39;,&#39;17251&#39;,&#39;17253&#39;,&#39;17276&#39;,&#39;17283&#39;,&#39;17292&#39;,&#39;17295&#39;,&#39;17302&#39;,&#39;17304&#39;,&#39;17315&#39;,&#39;17324&#39;,&#39;17326&#39;,&#39;17329&#39;,&#39;17331&#39;,&#39;17336&#39;,&#39;17347&#39;,&#39;17351&#39;,&#39;17353&#39;,&#39;17362&#39;,&#39;17363&#39;,&#39;17370&#39;,&#39;17377&#39;,&#39;17386&#39;,&#39;17388&#39;,&#39;17390&#39;,&#39;17399&#39;,&#39;17403&#39;,&#39;17404&#39;,&#39;17405&#39;,&#39;17407&#39;,&#39;17408&#39;,&#39;17411&#39;,&#39;17419&#39;,&#39;17435&#39;,&#39;17437&#39;,&#39;17441&#39;,&#39;17451&#39;,&#39;17463&#39;,&#39;17475&#39;,&#39;17482&#39;,&#39;17484&#39;,&#39;17485&#39;,&#39;17491&#39;,&#39;17493&#39;,&#39;17496&#39;,&#39;17503&#39;,&#39;17505&#39;,&#39;17507&#39;,&#39;17509&#39;,&#39;17520&#39;,&#39;17521&#39;,&#39;17529&#39;,&#39;17534&#39;,&#39;17535&#39;,&#39;17547&#39;,&#39;17558&#39;,&#39;17560&#39;,&#39;17568&#39;,&#39;17570&#39;,&#39;17579&#39;,&#39;17584&#39;,&#39;17587&#39;,&#39;17596&#39;,&#39;17598&#39;,&#39;17600&#39;,&#39;17601&#39;,&#39;17602&#39;,&#39;17605&#39;,&#39;17616&#39;,&#39;17632&#39;,&#39;17639&#39;,&#39;17648&#39;,&#39;17649&#39;,&#39;17652&#39;,&#39;17656&#39;,&#39;17660&#39;,&#39;17680&#39;,&#39;17681&#39;,&#39;17684&#39;,&#39;17691&#39;,&#39;17700&#39;,&#39;17701&#39;,&#39;17706&#39;,&#39;17710&#39;,&#39;17724&#39;,&#39;17729&#39;,&#39;17741&#39;,&#39;17742&#39;,&#39;17747&#39;,&#39;17750&#39;,&#39;17757&#39;,&#39;17762&#39;,&#39;17774&#39;,&#39;17775&#39;,&#39;17782&#39;,&#39;17786&#39;,&#39;17790&#39;,&#39;17804&#39;,&#39;17813&#39;,&#39;17830&#39;,&#39;17831&#39;,&#39;17832&#39;,&#39;17833&#39;,&#39;17835&#39;,&#39;17837&#39;,&#39;17842&#39;,&#39;17843&#39;,&#39;17845&#39;,&#39;17846&#39;,&#39;17847&#39;,&#39;17851&#39;,&#39;17854&#39;,&#39;17858&#39;,&#39;17861&#39;,&#39;17863&#39;,&#39;17866&#39;,&#39;17887&#39;,&#39;17897&#39;,&#39;17914&#39;,&#39;17919&#39;,&#39;17921&#39;,&#39;17922&#39;,&#39;17933&#39;,&#39;17941&#39;,&#39;17950&#39;,&#39;17961&#39;,&#39;17968&#39;,&#39;17974&#39;,&#39;17983&#39;,&#39;17988&#39;,&#39;17989&#39;,&#39;17998&#39;,&#39;17999&#39;,&#39;18000&#39;,&#39;18006&#39;,&#39;18019&#39;,&#39;18025&#39;,&#39;18035&#39;,&#39;18036&#39;,&#39;18049&#39;,&#39;18050&#39;,&#39;18058&#39;,&#39;18069&#39;,&#39;18077&#39;,&#39;18078&#39;,&#39;18092&#39;,&#39;18098&#39;,&#39;18103&#39;,&#39;18105&#39;,&#39;18114&#39;,&#39;18118&#39;,&#39;18119&#39;,&#39;18125&#39;,&#39;18127&#39;,&#39;18136&#39;,&#39;18138&#39;,&#39;18144&#39;,&#39;18149&#39;,&#39;18153&#39;,&#39;18158&#39;,&#39;18163&#39;,&#39;18166&#39;,&#39;18176&#39;,&#39;18181&#39;,&#39;18184&#39;,&#39;18192&#39;,&#39;18196&#39;,&#39;18209&#39;,&#39;18228&#39;,&#39;18229&#39;,&#39;18235&#39;,&#39;18236&#39;,&#39;18246&#39;,&#39;18269&#39;,&#39;18272&#39;,&#39;18283&#39;,&#39;18288&#39;,&#39;18290&#39;,&#39;18293&#39;,&#39;18295&#39;,&#39;18312&#39;,&#39;18326&#39;,&#39;18332&#39;,&#39;18335&#39;,&#39;18337&#39;,&#39;18343&#39;,&#39;18345&#39;,&#39;18353&#39;,&#39;18358&#39;,&#39;18364&#39;,&#39;18380&#39;,&#39;18382&#39;,&#39;18396&#39;,&#39;18402&#39;,&#39;18403&#39;,&#39;18417&#39;,&#39;18423&#39;,&#39;18427&#39;,&#39;18432&#39;,&#39;18435&#39;,&#39;18441&#39;,&#39;18454&#39;,&#39;18457&#39;,&#39;18461&#39;,&#39;18481&#39;,&#39;18488&#39;,&#39;18489&#39;,&#39;18494&#39;,&#39;18495&#39;,&#39;18502&#39;,&#39;18506&#39;,&#39;18518&#39;,&#39;18535&#39;,&#39;18536&#39;,&#39;18549&#39;,&#39;18554&#39;,&#39;18559&#39;,&#39;18595&#39;,&#39;18596&#39;,&#39;18612&#39;,&#39;18623&#39;,&#39;18625&#39;,&#39;18628&#39;,&#39;18629&#39;,&#39;18634&#39;,&#39;18637&#39;,&#39;18642&#39;,&#39;18645&#39;,&#39;18656&#39;,&#39;18662&#39;,&#39;18664&#39;,&#39;18673&#39;,&#39;18687&#39;,&#39;18693&#39;,&#39;18702&#39;,&#39;18715&#39;,&#39;18716&#39;,&#39;18719&#39;,&#39;18720&#39;,&#39;18725&#39;,&#39;18730&#39;,&#39;18742&#39;,&#39;18743&#39;,&#39;18746&#39;,&#39;18748&#39;,&#39;18755&#39;,&#39;18757&#39;,&#39;18772&#39;,&#39;18775&#39;,&#39;18776&#39;,&#39;18781&#39;,&#39;18787&#39;,&#39;18788&#39;,&#39;18790&#39;,&#39;18797&#39;,&#39;18809&#39;,&#39;18811&#39;,&#39;18813&#39;,&#39;18816&#39;,&#39;18823&#39;,&#39;18825&#39;,&#39;18851&#39;,&#39;18858&#39;,&#39;18871&#39;,&#39;18872&#39;,&#39;18875&#39;,&#39;18891&#39;,&#39;18903&#39;,&#39;18906&#39;,&#39;18907&#39;,&#39;18908&#39;,&#39;18910&#39;,&#39;18913&#39;,&#39;18915&#39;,&#39;18920&#39;,&#39;18937&#39;,&#39;18941&#39;,&#39;18942&#39;,&#39;18943&#39;,&#39;18946&#39;,&#39;18948&#39;,&#39;18949&#39;,&#39;18954&#39;,&#39;18957&#39;,&#39;18958&#39;,&#39;18962&#39;,&#39;18964&#39;,&#39;18968&#39;,&#39;18976&#39;,&#39;18981&#39;,&#39;18988&#39;,&#39;18990&#39;,&#39;18996&#39;,&#39;19005&#39;,&#39;19014&#39;,&#39;19019&#39;,&#39;19023&#39;,&#39;19031&#39;,&#39;19037&#39;,&#39;19040&#39;,&#39;19042&#39;,&#39;19058&#39;,&#39;19068&#39;,&#39;19070&#39;,&#39;19074&#39;,&#39;19079&#39;,&#39;19086&#39;,&#39;19091&#39;,&#39;19094&#39;,&#39;19095&#39;,&#39;19105&#39;,&#39;19110&#39;,&#39;19112&#39;,&#39;19115&#39;,&#39;19121&#39;,&#39;19122&#39;,&#39;19123&#39;,&#39;19136&#39;,&#39;19145&#39;,&#39;19157&#39;,&#39;19165&#39;,&#39;19169&#39;,&#39;19171&#39;,&#39;19176&#39;,&#39;19181&#39;,&#39;19186&#39;,&#39;19189&#39;,&#39;19194&#39;,&#39;19197&#39;,&#39;19199&#39;,&#39;19207&#39;,&#39;19208&#39;,&#39;19214&#39;,&#39;19223&#39;,&#39;19225&#39;,&#39;19228&#39;,&#39;19237&#39;,&#39;19249&#39;,&#39;19252&#39;,&#39;19255&#39;,&#39;19264&#39;,&#39;19268&#39;,&#39;19269&#39;,&#39;19270&#39;,&#39;19274&#39;,&#39;19295&#39;,&#39;19301&#39;,&#39;19307&#39;,&#39;19308&#39;,&#39;19314&#39;,&#39;19317&#39;,&#39;19318&#39;,&#39;19321&#39;,&#39;19323&#39;,&#39;19324&#39;,&#39;19335&#39;,&#39;19337&#39;,&#39;19339&#39;,&#39;19343&#39;,&#39;19348&#39;,&#39;19349&#39;,&#39;19353&#39;,&#39;19358&#39;,&#39;19364&#39;,&#39;19371&#39;,&#39;19382&#39;,&#39;19384&#39;,&#39;19385&#39;,&#39;19395&#39;,&#39;19398&#39;,&#39;19402&#39;,&#39;19405&#39;,&#39;19422&#39;,&#39;19430&#39;,&#39;19447&#39;,&#39;19448&#39;,&#39;19453&#39;,&#39;19454&#39;,&#39;19456&#39;,&#39;19465&#39;,&#39;19466&#39;,&#39;19476&#39;,&#39;19478&#39;,&#39;19484&#39;,&#39;19486&#39;,&#39;19488&#39;,&#39;19490&#39;,&#39;19501&#39;,&#39;19506&#39;,&#39;19514&#39;,&#39;19519&#39;,&#39;19521&#39;,&#39;19522&#39;,&#39;19527&#39;,&#39;19539&#39;,&#39;19540&#39;,&#39;19553&#39;,&#39;19555&#39;,&#39;19557&#39;,&#39;19564&#39;,&#39;19577&#39;,&#39;19579&#39;,&#39;19580&#39;,&#39;19590&#39;,&#39;19604&#39;,&#39;19612&#39;,&#39;19614&#39;,&#39;19623&#39;,&#39;19631&#39;,&#39;19634&#39;,&#39;19642&#39;,&#39;19648&#39;,&#39;19651&#39;,&#39;19654&#39;,&#39;19655&#39;,&#39;19656&#39;,&#39;19668&#39;,&#39;19677&#39;,&#39;19682&#39;,&#39;19686&#39;,&#39;19695&#39;,&#39;19721&#39;,&#39;19724&#39;,&#39;19730&#39;,&#39;19749&#39;,&#39;19751&#39;,&#39;19753&#39;,&#39;19755&#39;,&#39;19759&#39;,&#39;19762&#39;,&#39;19766&#39;,&#39;19767&#39;,&#39;19768&#39;,&#39;19772&#39;,&#39;19778&#39;,&#39;19791&#39;,&#39;19807&#39;,&#39;19812&#39;,&#39;19818&#39;,&#39;19829&#39;,&#39;19836&#39;,&#39;19838&#39;,&#39;19843&#39;,&#39;19847&#39;,&#39;19848&#39;,&#39;19850&#39;,&#39;19852&#39;,&#39;19853&#39;,&#39;19854&#39;,&#39;19858&#39;,&#39;19861&#39;,&#39;19868&#39;,&#39;19870&#39;,&#39;19878&#39;,&#39;19884&#39;,&#39;19910&#39;,&#39;19914&#39;,&#39;19918&#39;,&#39;19921&#39;,&#39;19922&#39;,&#39;19925&#39;,&#39;19928&#39;,&#39;19942&#39;,&#39;19943&#39;,&#39;19947&#39;,&#39;19950&#39;,&#39;19959&#39;,&#39;19971&#39;,&#39;19977&#39;,&#39;19981&#39;,&#39;19985&#39;,&#39;19986&#39;,&#39;19994&#39;,&#39;20000&#39;,&#39;20003&#39;,&#39;20007&#39;,&#39;20008&#39;,&#39;20015&#39;,&#39;20028&#39;,&#39;20029&#39;,&#39;20041&#39;,&#39;20056&#39;,&#39;20063&#39;,&#39;20069&#39;,&#39;20075&#39;,&#39;20078&#39;,&#39;20083&#39;,&#39;20085&#39;,&#39;20089&#39;,&#39;20091&#39;,&#39;20098&#39;,&#39;20105&#39;,&#39;20128&#39;,&#39;20129&#39;,&#39;20143&#39;,&#39;20146&#39;,&#39;20153&#39;,&#39;20154&#39;,&#39;20156&#39;,&#39;20159&#39;,&#39;20170&#39;,&#39;20180&#39;,&#39;20181&#39;,&#39;20182&#39;,&#39;20183&#39;,&#39;20188&#39;,&#39;20189&#39;,&#39;20195&#39;,&#39;20200&#39;,&#39;20204&#39;,&#39;20209&#39;,&#39;20216&#39;,&#39;20218&#39;,&#39;20221&#39;,&#39;20224&#39;,&#39;20229&#39;,&#39;20233&#39;,&#39;20234&#39;,&#39;20237&#39;,&#39;20239&#39;,&#39;20241&#39;,&#39;20253&#39;,&#39;20256&#39;,&#39;20260&#39;,&#39;20263&#39;,&#39;20264&#39;,&#39;20265&#39;,&#39;20268&#39;,&#39;20271&#39;,&#39;20274&#39;,&#39;20289&#39;,&#39;20290&#39;,&#39;20291&#39;,&#39;20304&#39;,&#39;20306&#39;,&#39;20307&#39;,&#39;20308&#39;,&#39;20311&#39;,&#39;20317&#39;,&#39;20324&#39;,&#39;20339&#39;,&#39;20348&#39;,&#39;20350&#39;,&#39;20357&#39;,&#39;20363&#39;,&#39;20369&#39;,&#39;20370&#39;,&#39;20376&#39;,&#39;20379&#39;,&#39;20387&#39;,&#39;20388&#39;,&#39;20403&#39;,&#39;20404&#39;,&#39;20407&#39;,&#39;20413&#39;,&#39;20415&#39;,&#39;20425&#39;,&#39;20433&#39;,&#39;20437&#39;,&#39;20440&#39;,&#39;20442&#39;,&#39;20443&#39;,&#39;20444&#39;,&#39;20446&#39;,&#39;20448&#39;,&#39;20450&#39;,&#39;20458&#39;,&#39;20464&#39;,&#39;20481&#39;,&#39;20489&#39;,&#39;20495&#39;,&#39;20496&#39;,&#39;20511&#39;,&#39;20512&#39;,&#39;20513&#39;,&#39;20514&#39;,&#39;20517&#39;,&#39;20522&#39;,&#39;20534&#39;,&#39;20535&#39;,&#39;20540&#39;,&#39;20541&#39;,&#39;20550&#39;,&#39;20555&#39;,&#39;20556&#39;,&#39;20558&#39;,&#39;20561&#39;,&#39;20569&#39;,&#39;20570&#39;,&#39;20573&#39;,&#39;20582&#39;,&#39;20613&#39;,&#39;20614&#39;,&#39;20623&#39;,&#39;20631&#39;,&#39;20637&#39;,&#39;20643&#39;,&#39;20647&#39;,&#39;20669&#39;,&#39;20686&#39;,&#39;20695&#39;,&#39;20696&#39;,&#39;20705&#39;,&#39;20707&#39;,&#39;20716&#39;,&#39;20718&#39;,&#39;20724&#39;,&#39;20728&#39;,&#39;20729&#39;,&#39;20736&#39;,&#39;20738&#39;,&#39;20742&#39;,&#39;20748&#39;,&#39;20761&#39;,&#39;20779&#39;,&#39;20782&#39;,&#39;20785&#39;,&#39;20793&#39;,&#39;20812&#39;,&#39;20814&#39;,&#39;20840&#39;,&#39;20846&#39;,&#39;20848&#39;,&#39;20853&#39;,&#39;20857&#39;,&#39;20872&#39;,&#39;20875&#39;,&#39;20880&#39;,&#39;20881&#39;,&#39;20885&#39;,&#39;20891&#39;,&#39;20899&#39;,&#39;20914&#39;,&#39;20917&#39;,&#39;20924&#39;,&#39;20937&#39;,&#39;20943&#39;,&#39;20944&#39;,&#39;20947&#39;,&#39;20959&#39;,&#39;20970&#39;,&#39;20974&#39;,&#39;20982&#39;,&#39;20984&#39;,&#39;20985&#39;,&#39;20986&#39;,&#39;21003&#39;,&#39;21006&#39;,&#39;21013&#39;,&#39;21028&#39;,&#39;21032&#39;,&#39;21036&#39;,&#39;21047&#39;,&#39;21054&#39;,&#39;21056&#39;,&#39;21057&#39;,&#39;21058&#39;,&#39;21079&#39;,&#39;21087&#39;,&#39;21094&#39;,&#39;21097&#39;,&#39;21102&#39;,&#39;21111&#39;,&#39;21113&#39;,&#39;21118&#39;,&#39;21120&#39;,&#39;21131&#39;,&#39;21138&#39;,&#39;21153&#39;,&#39;21154&#39;,&#39;21167&#39;,&#39;21168&#39;,&#39;21170&#39;,&#39;21172&#39;,&#39;21186&#39;,&#39;21187&#39;,&#39;21191&#39;,&#39;21202&#39;,&#39;21213&#39;,&#39;21216&#39;,&#39;21217&#39;,&#39;21220&#39;,&#39;21227&#39;,&#39;21238&#39;,&#39;21241&#39;,&#39;21247&#39;,&#39;21249&#39;,&#39;21271&#39;,&#39;21281&#39;,&#39;21290&#39;,&#39;21300&#39;,&#39;21304&#39;,&#39;21306&#39;,&#39;21312&#39;,&#39;21316&#39;,&#39;21318&#39;,&#39;21320&#39;,&#39;21328&#39;,&#39;21334&#39;,&#39;21337&#39;,&#39;21338&#39;,&#39;21348&#39;,&#39;21350&#39;,&#39;21352&#39;,&#39;21356&#39;,&#39;21399&#39;,&#39;21403&#39;,&#39;21423&#39;,&#39;21424&#39;,&#39;21435&#39;,&#39;21441&#39;,&#39;21449&#39;,&#39;21455&#39;,&#39;21463&#39;,&#39;21478&#39;,&#39;21481&#39;,&#39;21482&#39;,&#39;21486&#39;,&#39;21487&#39;,&#39;21491&#39;,&#39;21494&#39;,&#39;21509&#39;,&#39;21510&#39;,&#39;21512&#39;,&#39;21518&#39;,&#39;21521&#39;,&#39;21523&#39;,&#39;21529&#39;,&#39;21530&#39;,&#39;21532&#39;,&#39;21533&#39;,&#39;21535&#39;,&#39;21537&#39;,&#39;21549&#39;,&#39;21577&#39;,&#39;21578&#39;,&#39;21579&#39;,&#39;21583&#39;,&#39;21587&#39;,&#39;21598&#39;,&#39;21604&#39;,&#39;21613&#39;,&#39;21623&#39;,&#39;21632&#39;,&#39;21641&#39;,&#39;21643&#39;,&#39;21652&#39;,&#39;21655&#39;,&#39;21656&#39;,&#39;21659&#39;,&#39;21671&#39;,&#39;21673&#39;,&#39;21674&#39;,&#39;21683&#39;,&#39;21684&#39;,&#39;21690&#39;,&#39;21697&#39;,&#39;21713&#39;,&#39;21716&#39;,&#39;21721&#39;,&#39;21725&#39;,&#39;21727&#39;,&#39;21733&#39;,&#39;21734&#39;,&#39;21735&#39;,&#39;21737&#39;,&#39;21745&#39;,&#39;21746&#39;,&#39;21751&#39;,&#39;21753&#39;,&#39;21758&#39;,&#39;21775&#39;,&#39;21779&#39;,&#39;21788&#39;,&#39;21789&#39;,&#39;21793&#39;,&#39;21795&#39;,&#39;21800&#39;,&#39;21809&#39;,&#39;21813&#39;,&#39;21814&#39;,&#39;21826&#39;,&#39;21831&#39;,&#39;21850&#39;,&#39;21858&#39;,&#39;21862&#39;,&#39;21869&#39;,&#39;21873&#39;,&#39;21875&#39;,&#39;21877&#39;,&#39;21880&#39;,&#39;21886&#39;,&#39;21892&#39;,&#39;21893&#39;,&#39;21896&#39;,&#39;21898&#39;,&#39;21900&#39;,&#39;21903&#39;,&#39;21917&#39;,&#39;21919&#39;,&#39;21923&#39;,&#39;21926&#39;,&#39;21934&#39;,&#39;21936&#39;,&#39;21938&#39;,&#39;21940&#39;,&#39;21950&#39;,&#39;21952&#39;,&#39;21961&#39;,&#39;21968&#39;,&#39;21972&#39;,&#39;21978&#39;,&#39;21985&#39;,&#39;21994&#39;,&#39;22002&#39;,&#39;22008&#39;,&#39;22009&#39;,&#39;22011&#39;,&#39;22014&#39;,&#39;22015&#39;,&#39;22017&#39;,&#39;22019&#39;,&#39;22026&#39;,&#39;22032&#39;,&#39;22045&#39;,&#39;22065&#39;,&#39;22067&#39;,&#39;22079&#39;,&#39;22088&#39;,&#39;22096&#39;,&#39;22105&#39;,&#39;22107&#39;,&#39;22109&#39;,&#39;22111&#39;,&#39;22116&#39;,&#39;22123&#39;,&#39;22136&#39;,&#39;22146&#39;,&#39;22150&#39;,&#39;22161&#39;,&#39;22176&#39;,&#39;22184&#39;,&#39;22196&#39;,&#39;22201&#39;,&#39;22209&#39;,&#39;22212&#39;,&#39;22215&#39;,&#39;22217&#39;,&#39;22223&#39;,&#39;22224&#39;,&#39;22229&#39;,&#39;22232&#39;,&#39;22234&#39;,&#39;22235&#39;,&#39;22236&#39;,&#39;22249&#39;,&#39;22252&#39;,&#39;22255&#39;,&#39;22259&#39;,&#39;22262&#39;,&#39;22268&#39;,&#39;22269&#39;,&#39;22272&#39;,&#39;22276&#39;,&#39;22278&#39;,&#39;22292&#39;,&#39;22308&#39;,&#39;22310&#39;,&#39;22312&#39;,&#39;22315&#39;,&#39;22316&#39;,&#39;22326&#39;,&#39;22338&#39;,&#39;22340&#39;,&#39;22341&#39;,&#39;22342&#39;,&#39;22347&#39;,&#39;22351&#39;,&#39;22368&#39;,&#39;22374&#39;,&#39;22386&#39;,&#39;22389&#39;,&#39;22393&#39;,&#39;22397&#39;,&#39;22399&#39;,&#39;22400&#39;,&#39;22412&#39;,&#39;22414&#39;,&#39;22421&#39;,&#39;22426&#39;,&#39;22441&#39;,&#39;22442&#39;,&#39;22443&#39;,&#39;22446&#39;,&#39;22449&#39;,&#39;22465&#39;,&#39;22467&#39;,&#39;22490&#39;,&#39;22492&#39;,&#39;22494&#39;,&#39;22497&#39;,&#39;22499&#39;,&#39;22506&#39;,&#39;22508&#39;,&#39;22512&#39;,&#39;22516&#39;,&#39;22519&#39;,&#39;22522&#39;,&#39;22527&#39;,&#39;22548&#39;,&#39;22552&#39;,&#39;22554&#39;,&#39;22559&#39;,&#39;22569&#39;,&#39;22574&#39;,&#39;22575&#39;,&#39;22576&#39;,&#39;22581&#39;,&#39;22583&#39;,&#39;22586&#39;,&#39;22593&#39;,&#39;22604&#39;,&#39;22609&#39;,&#39;22610&#39;,&#39;22617&#39;,&#39;22623&#39;,&#39;22625&#39;,&#39;22633&#39;,&#39;22634&#39;,&#39;22637&#39;,&#39;22638&#39;,&#39;22640&#39;,&#39;22642&#39;,&#39;22645&#39;,&#39;22647&#39;,&#39;22651&#39;,&#39;22661&#39;,&#39;22662&#39;,&#39;22665&#39;,&#39;22666&#39;,&#39;22677&#39;,&#39;22678&#39;,&#39;22681&#39;,&#39;22682&#39;,&#39;22683&#39;,&#39;22685&#39;,&#39;22694&#39;,&#39;22695&#39;,&#39;22701&#39;,&#39;22702&#39;,&#39;22708&#39;,&#39;22713&#39;,&#39;22724&#39;,&#39;22726&#39;,&#39;22729&#39;,&#39;22731&#39;,&#39;22741&#39;,&#39;22745&#39;,&#39;22747&#39;,&#39;22748&#39;,&#39;22761&#39;,&#39;22782&#39;,&#39;22784&#39;,&#39;22795&#39;,&#39;22796&#39;,&#39;22798&#39;,&#39;22800&#39;,&#39;22804&#39;,&#39;22823&#39;,&#39;22833&#39;,&#39;22835&#39;,&#39;22844&#39;,&#39;22847&#39;,&#39;22850&#39;,&#39;22854&#39;,&#39;22857&#39;,&#39;22858&#39;,&#39;22864&#39;,&#39;22872&#39;,&#39;22875&#39;,&#39;22883&#39;,&#39;22891&#39;,&#39;22902&#39;,&#39;22904&#39;,&#39;22911&#39;,&#39;22934&#39;,&#39;22954&#39;,&#39;22970&#39;,&#39;22972&#39;,&#39;22974&#39;,&#39;22983&#39;,&#39;22993&#39;,&#39;23007&#39;,&#39;23009&#39;,&#39;23012&#39;,&#39;23013&#39;,&#39;23017&#39;,&#39;23023&#39;,&#39;23037&#39;,&#39;23046&#39;,&#39;23047&#39;,&#39;23048&#39;,&#39;23049&#39;,&#39;23061&#39;,&#39;23072&#39;,&#39;23083&#39;,&#39;23091&#39;,&#39;23109&#39;,&#39;23113&#39;,&#39;23114&#39;,&#39;23115&#39;,&#39;23116&#39;,&#39;23125&#39;,&#39;23127&#39;,&#39;23128&#39;,&#39;23133&#39;,&#39;23140&#39;,&#39;23143&#39;,&#39;23145&#39;,&#39;23147&#39;,&#39;23154&#39;,&#39;23160&#39;,&#39;23173&#39;,&#39;23180&#39;,&#39;23182&#39;,&#39;23186&#39;,&#39;23187&#39;,&#39;23204&#39;,&#39;23207&#39;,&#39;23211&#39;,&#39;23215&#39;,&#39;23217&#39;,&#39;23223&#39;,&#39;23224&#39;,&#39;23239&#39;,&#39;23257&#39;,&#39;23266&#39;,&#39;23268&#39;,&#39;23275&#39;,&#39;23277&#39;,&#39;23282&#39;,&#39;23287&#39;,&#39;23288&#39;,&#39;23289&#39;,&#39;23290&#39;,&#39;23301&#39;,&#39;23302&#39;,&#39;23306&#39;,&#39;23314&#39;,&#39;23315&#39;,&#39;23319&#39;,&#39;23322&#39;,&#39;23331&#39;,&#39;23336&#39;,&#39;23341&#39;,&#39;23344&#39;,&#39;23345&#39;,&#39;23348&#39;,&#39;23350&#39;,&#39;23354&#39;,&#39;23355&#39;,&#39;23365&#39;,&#39;23368&#39;,&#39;23369&#39;,&#39;23371&#39;,&#39;23372&#39;,&#39;23375&#39;,&#39;23381&#39;,&#39;23387&#39;,&#39;23394&#39;,&#39;23395&#39;,&#39;23398&#39;,&#39;23408&#39;,&#39;23415&#39;,&#39;23435&#39;,&#39;23438&#39;,&#39;23448&#39;,&#39;23453&#39;,&#39;23454&#39;,&#39;23462&#39;,&#39;23465&#39;,&#39;23466&#39;,&#39;23478&#39;,&#39;23481&#39;,&#39;23486&#39;,&#39;23490&#39;,&#39;23491&#39;,&#39;23498&#39;,&#39;23516&#39;,&#39;23519&#39;,&#39;23528&#39;,&#39;23536&#39;,&#39;23537&#39;,&#39;23541&#39;,&#39;23544&#39;,&#39;23549&#39;,&#39;23550&#39;,&#39;23553&#39;,&#39;23554&#39;,&#39;23555&#39;,&#39;23557&#39;,&#39;23560&#39;,&#39;23568&#39;,&#39;23569&#39;,&#39;23570&#39;,&#39;23578&#39;,&#39;23587&#39;,&#39;23588&#39;,&#39;23595&#39;,&#39;23597&#39;,&#39;23602&#39;,&#39;23605&#39;,&#39;23613&#39;,&#39;23615&#39;,&#39;23619&#39;,&#39;23620&#39;,&#39;23626&#39;,&#39;23627&#39;,&#39;23631&#39;,&#39;23638&#39;,&#39;23648&#39;,&#39;23654&#39;,&#39;23655&#39;,&#39;23658&#39;,&#39;23665&#39;,&#39;23668&#39;,&#39;23680&#39;,&#39;23700&#39;,&#39;23707&#39;,&#39;23711&#39;,&#39;23718&#39;,&#39;23722&#39;,&#39;23723&#39;,&#39;23725&#39;,&#39;23727&#39;,&#39;23731&#39;,&#39;23734&#39;,&#39;23740&#39;,&#39;23747&#39;,&#39;23759&#39;,&#39;23764&#39;,&#39;23766&#39;,&#39;23784&#39;,&#39;23786&#39;,&#39;23790&#39;,&#39;23794&#39;,&#39;23802&#39;,&#39;23811&#39;,&#39;23814&#39;,&#39;23819&#39;,&#39;23821&#39;,&#39;23827&#39;,&#39;23830&#39;,&#39;23834&#39;,&#39;23843&#39;,&#39;23846&#39;,&#39;23861&#39;,&#39;23863&#39;,&#39;23865&#39;,&#39;23867&#39;,&#39;23870&#39;,&#39;23875&#39;,&#39;23896&#39;,&#39;23898&#39;,&#39;23899&#39;,&#39;23910&#39;,&#39;23911&#39;,&#39;23912&#39;,&#39;23920&#39;,&#39;23938&#39;,&#39;23939&#39;,&#39;23946&#39;,&#39;23949&#39;,&#39;23971&#39;,&#39;23972&#39;,&#39;23975&#39;,&#39;23977&#39;,&#39;23981&#39;,&#39;23984&#39;,&#39;23987&#39;,&#39;23997&#39;,&#39;24002&#39;,&#39;24003&#39;,&#39;24009&#39;,&#39;24012&#39;,&#39;24023&#39;,&#39;24024&#39;,&#39;24031&#39;,&#39;24034&#39;,&#39;24043&#39;,&#39;24048&#39;,&#39;24051&#39;,&#39;24056&#39;,&#39;24062&#39;,&#39;24070&#39;,&#39;24074&#39;,&#39;24077&#39;,&#39;24079&#39;,&#39;24091&#39;,&#39;24094&#39;,&#39;24095&#39;,&#39;24109&#39;,&#39;24110&#39;,&#39;24113&#39;,&#39;24116&#39;,&#39;24122&#39;,&#39;24125&#39;,&#39;24128&#39;,&#39;24129&#39;,&#39;24136&#39;,&#39;24141&#39;,&#39;24148&#39;,&#39;24150&#39;,&#39;24152&#39;,&#39;24160&#39;,&#39;24161&#39;,&#39;24162&#39;,&#39;24163&#39;,&#39;24166&#39;,&#39;24170&#39;,&#39;24171&#39;,&#39;24172&#39;,&#39;24175&#39;,&#39;24179&#39;,&#39;24181&#39;,&#39;24183&#39;,&#39;24196&#39;,&#39;24210&#39;,&#39;24211&#39;,&#39;24225&#39;,&#39;24232&#39;,&#39;24241&#39;,&#39;24244&#39;,&#39;24245&#39;,&#39;24249&#39;,&#39;24250&#39;,&#39;24258&#39;,&#39;24262&#39;,&#39;24267&#39;,&#39;24270&#39;,&#39;24272&#39;,&#39;24274&#39;,&#39;24279&#39;,&#39;24295&#39;,&#39;24303&#39;,&#39;24304&#39;,&#39;24313&#39;,&#39;24320&#39;,&#39;24321&#39;,&#39;24326&#39;,&#39;24328&#39;,&#39;24332&#39;,&#39;24335&#39;,&#39;24340&#39;,&#39;24347&#39;,&#39;24349&#39;,&#39;24354&#39;,&#39;24355&#39;,&#39;24356&#39;,&#39;24358&#39;,&#39;24362&#39;,&#39;24365&#39;,&#39;24367&#39;,&#39;24373&#39;,&#39;24374&#39;,&#39;24377&#39;,&#39;24386&#39;,&#39;24389&#39;,&#39;24405&#39;,&#39;24407&#39;,&#39;24426&#39;,&#39;24430&#39;,&#39;24432&#39;,&#39;24441&#39;,&#39;24445&#39;,&#39;24447&#39;,&#39;24448&#39;,&#39;24473&#39;,&#39;24479&#39;,&#39;24485&#39;,&#39;24486&#39;,&#39;24490&#39;,&#39;24495&#39;,&#39;24496&#39;,&#39;24506&#39;,&#39;24512&#39;,&#39;24514&#39;,&#39;24516&#39;,&#39;24526&#39;,&#39;24536&#39;,&#39;24540&#39;,&#39;24544&#39;,&#39;24546&#39;,&#39;24565&#39;,&#39;24569&#39;,&#39;24576&#39;,&#39;24578&#39;,&#39;24582&#39;,&#39;24583&#39;,&#39;24584&#39;,&#39;24585&#39;,&#39;24587&#39;,&#39;24592&#39;,&#39;24595&#39;,&#39;24599&#39;,&#39;24600&#39;,&#39;24603&#39;,&#39;24608&#39;,&#39;24618&#39;,&#39;24624&#39;,&#39;24625&#39;,&#39;24626&#39;,&#39;24633&#39;,&#39;24639&#39;,&#39;24641&#39;,&#39;24645&#39;,&#39;24649&#39;,&#39;24665&#39;,&#39;24668&#39;,&#39;24673&#39;,&#39;24678&#39;,&#39;24679&#39;,&#39;24687&#39;,&#39;24689&#39;,&#39;24695&#39;,&#39;24696&#39;,&#39;24699&#39;,&#39;24705&#39;,&#39;24708&#39;,&#39;24711&#39;,&#39;24714&#39;,&#39;24715&#39;,&#39;24716&#39;,&#39;24719&#39;,&#39;24720&#39;,&#39;24721&#39;,&#39;24747&#39;,&#39;24751&#39;,&#39;24755&#39;,&#39;24780&#39;,&#39;24784&#39;,&#39;24787&#39;,&#39;24789&#39;,&#39;24792&#39;,&#39;24797&#39;,&#39;24817&#39;,&#39;24824&#39;,&#39;24825&#39;,&#39;24826&#39;,&#39;24827&#39;,&#39;24828&#39;,&#39;24837&#39;,&#39;24845&#39;,&#39;24858&#39;,&#39;24869&#39;,&#39;24875&#39;,&#39;24892&#39;,&#39;24896&#39;,&#39;24899&#39;,&#39;24907&#39;,&#39;24908&#39;,&#39;24909&#39;,&#39;24910&#39;,&#39;24911&#39;,&#39;24913&#39;,&#39;24914&#39;,&#39;24916&#39;,&#39;24921&#39;,&#39;24933&#39;,&#39;24935&#39;,&#39;24953&#39;,&#39;24954&#39;,&#39;24955&#39;,&#39;24958&#39;,&#39;24965&#39;,&#39;24968&#39;,&#39;24994&#39;,&#39;25002&#39;,&#39;25012&#39;,&#39;25014&#39;,&#39;25016&#39;,&#39;25021&#39;,&#39;25028&#39;,&#39;25032&#39;,&#39;25051&#39;,&#39;25054&#39;,&#39;25056&#39;,&#39;25057&#39;,&#39;25061&#39;,&#39;25076&#39;,&#39;25085&#39;,&#39;25089&#39;,&#39;25091&#39;,&#39;25092&#39;,&#39;25097&#39;,&#39;25098&#39;,&#39;25107&#39;,&#39;25112&#39;,&#39;25114&#39;,&#39;25116&#39;,&#39;25117&#39;,&#39;25125&#39;,&#39;25128&#39;,&#39;25133&#39;,&#39;25137&#39;,&#39;25142&#39;,&#39;25144&#39;,&#39;25146&#39;,&#39;25148&#39;,&#39;25159&#39;,&#39;25160&#39;,&#39;25166&#39;,&#39;25167&#39;,&#39;25170&#39;,&#39;25180&#39;,&#39;25181&#39;,&#39;25185&#39;,&#39;25186&#39;,&#39;25197&#39;,&#39;25198&#39;,&#39;25203&#39;,&#39;25204&#39;,&#39;25211&#39;,&#39;25227&#39;,&#39;25229&#39;,&#39;25232&#39;,&#39;25235&#39;,&#39;25239&#39;,&#39;25242&#39;,&#39;25244&#39;,&#39;25245&#39;,&#39;25259&#39;,&#39;25261&#39;,&#39;25263&#39;,&#39;25268&#39;,&#39;25272&#39;,&#39;25282&#39;,&#39;25284&#39;,&#39;25289&#39;,&#39;25290&#39;,&#39;25291&#39;,&#39;25294&#39;,&#39;25297&#39;,&#39;25300&#39;,&#39;25303&#39;,&#39;25306&#39;,&#39;25322&#39;,&#39;25323&#39;,&#39;25326&#39;,&#39;25332&#39;,&#39;25333&#39;,&#39;25337&#39;,&#39;25339&#39;,&#39;25349&#39;,&#39;25351&#39;,&#39;25352&#39;,&#39;25354&#39;,&#39;25358&#39;,&#39;25360&#39;,&#39;25362&#39;,&#39;25394&#39;,&#39;25395&#39;,&#39;25398&#39;,&#39;25401&#39;,&#39;25402&#39;,&#39;25403&#39;,&#39;25408&#39;,&#39;25409&#39;,&#39;25416&#39;,&#39;25429&#39;,&#39;25435&#39;,&#39;25450&#39;,&#39;25451&#39;,&#39;25452&#39;,&#39;25458&#39;,&#39;25459&#39;,&#39;25486&#39;,&#39;25491&#39;,&#39;25495&#39;,&#39;25496&#39;,&#39;25503&#39;,&#39;25505&#39;,&#39;25508&#39;,&#39;25513&#39;,&#39;25514&#39;,&#39;25519&#39;,&#39;25520&#39;,&#39;25522&#39;,&#39;25524&#39;,&#39;25526&#39;,&#39;25528&#39;,&#39;25530&#39;,&#39;25534&#39;,&#39;25535&#39;,&#39;25544&#39;,&#39;25556&#39;,&#39;25558&#39;,&#39;25560&#39;,&#39;25563&#39;,&#39;25571&#39;,&#39;25572&#39;,&#39;25578&#39;,&#39;25581&#39;,&#39;25586&#39;,&#39;25595&#39;,&#39;25598&#39;,&#39;25599&#39;,&#39;25600&#39;,&#39;25601&#39;,&#39;25617&#39;,&#39;25622&#39;,&#39;25631&#39;,&#39;25638&#39;,&#39;25640&#39;,&#39;25641&#39;,&#39;25644&#39;,&#39;25648&#39;,&#39;25649&#39;,&#39;25650&#39;,&#39;25652&#39;,&#39;25654&#39;,&#39;25660&#39;,&#39;25669&#39;,&#39;25673&#39;,&#39;25676&#39;,&#39;25699&#39;,&#39;25700&#39;,&#39;25701&#39;,&#39;25705&#39;,&#39;25708&#39;,&#39;25721&#39;,&#39;25723&#39;,&#39;25730&#39;,&#39;25735&#39;,&#39;25739&#39;,&#39;25745&#39;,&#39;25755&#39;,&#39;25765&#39;,&#39;25770&#39;,&#39;25773&#39;,&#39;25777&#39;,&#39;25782&#39;,&#39;25797&#39;,&#39;25800&#39;,&#39;25803&#39;,&#39;25820&#39;,&#39;25825&#39;,&#39;25829&#39;,&#39;25830&#39;,&#39;25835&#39;,&#39;25848&#39;,&#39;25856&#39;,&#39;25858&#39;,&#39;25859&#39;,&#39;25861&#39;,&#39;25869&#39;,&#39;25875&#39;,&#39;25881&#39;,&#39;25885&#39;,&#39;25890&#39;,&#39;25891&#39;,&#39;25896&#39;,&#39;25897&#39;,&#39;25899&#39;,&#39;25911&#39;,&#39;25913&#39;,&#39;25921&#39;,&#39;25922&#39;,&#39;25923&#39;,&#39;25925&#39;,&#39;25926&#39;,&#39;25932&#39;,&#39;25934&#39;,&#39;25940&#39;,&#39;25942&#39;,&#39;25946&#39;,&#39;25954&#39;,&#39;25959&#39;,&#39;25960&#39;,&#39;25971&#39;,&#39;25983&#39;,&#39;25985&#39;,&#39;26012&#39;,&#39;26015&#39;,&#39;26018&#39;,&#39;26024&#39;,&#39;26034&#39;,&#39;26041&#39;,&#39;26049&#39;,&#39;26053&#39;,&#39;26055&#39;,&#39;26058&#39;,&#39;26062&#39;,&#39;26074&#39;,&#39;26079&#39;,&#39;26090&#39;,&#39;26098&#39;,&#39;26118&#39;,&#39;26123&#39;,&#39;26141&#39;,&#39;26154&#39;,&#39;26155&#39;,&#39;26156&#39;,&#39;26159&#39;,&#39;26163&#39;,&#39;26166&#39;,&#39;26182&#39;,&#39;26184&#39;,&#39;26185&#39;,&#39;26187&#39;,&#39;26190&#39;,&#39;26198&#39;,&#39;26205&#39;,&#39;26212&#39;,&#39;26217&#39;,&#39;26228&#39;,&#39;26229&#39;,&#39;26230&#39;,&#39;26232&#39;,&#39;26237&#39;,&#39;26239&#39;,&#39;26243&#39;,&#39;26252&#39;,&#39;26253&#39;,&#39;26254&#39;,&#39;26255&#39;,&#39;26257&#39;,&#39;26263&#39;,&#39;26264&#39;,&#39;26265&#39;,&#39;26272&#39;,&#39;26273&#39;,&#39;26284&#39;,&#39;26291&#39;,&#39;26297&#39;,&#39;26324&#39;,&#39;26335&#39;,&#39;26338&#39;,&#39;26346&#39;,&#39;26352&#39;,&#39;26361&#39;,&#39;26371&#39;,&#39;26375&#39;,&#39;26376&#39;,&#39;26379&#39;,&#39;26380&#39;,&#39;26384&#39;,&#39;26391&#39;,&#39;26394&#39;,&#39;26395&#39;,&#39;26403&#39;,&#39;26404&#39;,&#39;26412&#39;,&#39;26420&#39;,&#39;26425&#39;,&#39;26432&#39;,&#39;26434&#39;,&#39;26436&#39;,&#39;26438&#39;,&#39;26444&#39;,&#39;26447&#39;,&#39;26449&#39;,&#39;26472&#39;,&#39;26478&#39;,&#39;26481&#39;,&#39;26497&#39;,&#39;26498&#39;,&#39;26500&#39;,&#39;26501&#39;,&#39;26508&#39;,&#39;26513&#39;,&#39;26514&#39;,&#39;26521&#39;,&#39;26523&#39;,&#39;26524&#39;,&#39;26525&#39;,&#39;26533&#39;,&#39;26536&#39;,&#39;26549&#39;,&#39;26555&#39;,&#39;26558&#39;,&#39;26560&#39;,&#39;26583&#39;,&#39;26585&#39;,&#39;26586&#39;,&#39;26598&#39;,&#39;26613&#39;,&#39;26617&#39;,&#39;26623&#39;,&#39;26633&#39;,&#39;26649&#39;,&#39;26652&#39;,&#39;26675&#39;,&#39;26676&#39;,&#39;26678&#39;,&#39;26680&#39;,&#39;26686&#39;,&#39;26692&#39;,&#39;26694&#39;,&#39;26696&#39;,&#39;26700&#39;,&#39;26703&#39;,&#39;26706&#39;,&#39;26710&#39;,&#39;26712&#39;,&#39;26716&#39;,&#39;26717&#39;,&#39;26718&#39;,&#39;26720&#39;,&#39;26721&#39;,&#39;26724&#39;,&#39;26728&#39;,&#39;26730&#39;,&#39;26733&#39;,&#39;26746&#39;,&#39;26754&#39;,&#39;26758&#39;,&#39;26759&#39;,&#39;26766&#39;,&#39;26767&#39;,&#39;26769&#39;,&#39;26781&#39;,&#39;26790&#39;,&#39;26797&#39;,&#39;26802&#39;,&#39;26815&#39;,&#39;26818&#39;,&#39;26824&#39;,&#39;26830&#39;,&#39;26837&#39;,&#39;26842&#39;,&#39;26856&#39;,&#39;26858&#39;,&#39;26864&#39;,&#39;26872&#39;,&#39;26874&#39;,&#39;26875&#39;,&#39;26876&#39;,&#39;26882&#39;,&#39;26883&#39;,&#39;26885&#39;,&#39;26887&#39;,&#39;26889&#39;,&#39;26894&#39;,&#39;26895&#39;,&#39;26930&#39;,&#39;26937&#39;,&#39;26939&#39;,&#39;26945&#39;,&#39;26960&#39;,&#39;26976&#39;,&#39;26979&#39;,&#39;26980&#39;,&#39;26983&#39;,&#39;26985&#39;,&#39;26990&#39;,&#39;27002&#39;,&#39;27011&#39;,&#39;27012&#39;,&#39;27014&#39;,&#39;27034&#39;,&#39;27036&#39;,&#39;27037&#39;,&#39;27046&#39;,&#39;27048&#39;,&#39;27053&#39;,&#39;27058&#39;,&#39;27064&#39;,&#39;27088&#39;,&#39;27094&#39;,&#39;27106&#39;,&#39;27111&#39;,&#39;27118&#39;,&#39;27121&#39;,&#39;27122&#39;,&#39;27127&#39;,&#39;27131&#39;,&#39;27133&#39;,&#39;27137&#39;,&#39;27142&#39;,&#39;27144&#39;,&#39;27145&#39;,&#39;27146&#39;,&#39;27148&#39;,&#39;27150&#39;,&#39;27152&#39;,&#39;27153&#39;,&#39;27154&#39;,&#39;27158&#39;,&#39;27165&#39;,&#39;27166&#39;,&#39;27172&#39;,&#39;27173&#39;,&#39;27175&#39;,&#39;27179&#39;,&#39;27189&#39;,&#39;27194&#39;,&#39;27197&#39;,&#39;27203&#39;,&#39;27206&#39;,&#39;27225&#39;,&#39;27229&#39;,&#39;27242&#39;,&#39;27246&#39;,&#39;27256&#39;,&#39;27272&#39;,&#39;27274&#39;,&#39;27286&#39;,&#39;27288&#39;,&#39;27297&#39;,&#39;27303&#39;,&#39;27313&#39;,&#39;27316&#39;,&#39;27317&#39;,&#39;27319&#39;,&#39;27322&#39;,&#39;27323&#39;,&#39;27324&#39;,&#39;27325&#39;,&#39;27327&#39;,&#39;27330&#39;,&#39;27334&#39;,&#39;27354&#39;,&#39;27359&#39;,&#39;27365&#39;,&#39;27367&#39;,&#39;27381&#39;,&#39;27382&#39;,&#39;27383&#39;,&#39;27388&#39;,&#39;27395&#39;,&#39;27396&#39;,&#39;27400&#39;,&#39;27407&#39;,&#39;27408&#39;,&#39;27411&#39;,&#39;27415&#39;,&#39;27422&#39;,&#39;27428&#39;,&#39;27429&#39;,&#39;27437&#39;,&#39;27442&#39;,&#39;27447&#39;,&#39;27453&#39;,&#39;27455&#39;,&#39;27457&#39;,&#39;27467&#39;,&#39;27470&#39;,&#39;27479&#39;,&#39;27487&#39;,&#39;27489&#39;,&#39;27490&#39;,&#39;27499&#39;,&#39;27506&#39;,&#39;27511&#39;,&#39;27513&#39;,&#39;27516&#39;,&#39;27517&#39;,&#39;27521&#39;,&#39;27525&#39;,&#39;27534&#39;,&#39;27539&#39;,&#39;27546&#39;,&#39;27549&#39;,&#39;27554&#39;,&#39;27555&#39;,&#39;27558&#39;,&#39;27560&#39;,&#39;27566&#39;,&#39;27573&#39;,&#39;27574&#39;,&#39;27582&#39;,&#39;27589&#39;,&#39;27593&#39;,&#39;27595&#39;,&#39;27601&#39;,&#39;27607&#39;,&#39;27612&#39;,&#39;27623&#39;,&#39;27626&#39;,&#39;27630&#39;,&#39;27631&#39;,&#39;27637&#39;,&#39;27638&#39;,&#39;27641&#39;,&#39;27642&#39;,&#39;27644&#39;,&#39;27645&#39;,&#39;27646&#39;,&#39;27653&#39;,&#39;27655&#39;,&#39;27662&#39;,&#39;27663&#39;,&#39;27681&#39;,&#39;27684&#39;,&#39;27693&#39;,&#39;27696&#39;,&#39;27698&#39;,&#39;27707&#39;,&#39;27708&#39;,&#39;27711&#39;,&#39;27715&#39;,&#39;27719&#39;,&#39;27722&#39;,&#39;27724&#39;,&#39;27728&#39;,&#39;27729&#39;,&#39;27739&#39;,&#39;27750&#39;,&#39;27756&#39;,&#39;27768&#39;,&#39;27769&#39;,&#39;27773&#39;,&#39;27777&#39;,&#39;27785&#39;,&#39;27791&#39;,&#39;27800&#39;,&#39;27803&#39;,&#39;27804&#39;,&#39;27808&#39;,&#39;27809&#39;,&#39;27810&#39;,&#39;27813&#39;,&#39;27819&#39;,&#39;27821&#39;,&#39;27824&#39;,&#39;27830&#39;,&#39;27844&#39;,&#39;27845&#39;,&#39;27846&#39;,&#39;27853&#39;,&#39;27857&#39;,&#39;27870&#39;,&#39;27872&#39;,&#39;27882&#39;,&#39;27888&#39;,&#39;27891&#39;,&#39;27900&#39;,&#39;27907&#39;,&#39;27908&#39;,&#39;27914&#39;,&#39;27915&#39;,&#39;27917&#39;,&#39;27925&#39;,&#39;27927&#39;,&#39;27930&#39;,&#39;27932&#39;,&#39;27933&#39;,&#39;27935&#39;,&#39;27936&#39;,&#39;27937&#39;,&#39;27939&#39;,&#39;27940&#39;,&#39;27941&#39;,&#39;27943&#39;,&#39;27949&#39;,&#39;27955&#39;,&#39;27960&#39;,&#39;27962&#39;,&#39;27966&#39;,&#39;27969&#39;,&#39;27976&#39;,&#39;27978&#39;,&#39;27986&#39;,&#39;28009&#39;,&#39;28013&#39;,&#39;28017&#39;,&#39;28026&#39;,&#39;28028&#39;,&#39;28030&#39;,&#39;28032&#39;,&#39;28033&#39;,&#39;28036&#39;,&#39;28041&#39;,&#39;28044&#39;,&#39;28045&#39;,&#39;28047&#39;,&#39;28051&#39;,&#39;28058&#39;,&#39;28063&#39;,&#39;28064&#39;,&#39;28066&#39;,&#39;28068&#39;,&#39;28069&#39;,&#39;28070&#39;,&#39;28073&#39;,&#39;28083&#39;,&#39;28085&#39;,&#39;28090&#39;,&#39;28094&#39;,&#39;28097&#39;,&#39;28100&#39;,&#39;28109&#39;,&#39;28111&#39;,&#39;28118&#39;,&#39;28119&#39;,&#39;28120&#39;,&#39;28132&#39;,&#39;28138&#39;,&#39;28142&#39;,&#39;28143&#39;,&#39;28147&#39;,&#39;28158&#39;,&#39;28162&#39;,&#39;28164&#39;,&#39;28169&#39;,&#39;28174&#39;,&#39;28175&#39;,&#39;28181&#39;,&#39;28186&#39;,&#39;28189&#39;,&#39;28190&#39;,&#39;28192&#39;,&#39;28195&#39;,&#39;28201&#39;,&#39;28214&#39;,&#39;28224&#39;,&#39;28226&#39;,&#39;28227&#39;,&#39;28231&#39;,&#39;28245&#39;,&#39;28251&#39;,&#39;28258&#39;,&#39;28262&#39;,&#39;28270&#39;,&#39;28274&#39;,&#39;28284&#39;,&#39;28290&#39;,&#39;28292&#39;,&#39;28298&#39;,&#39;28307&#39;,&#39;28323&#39;,&#39;28327&#39;,&#39;28330&#39;,&#39;28337&#39;,&#39;28339&#39;,&#39;28340&#39;,&#39;28346&#39;,&#39;28375&#39;,&#39;28376&#39;,&#39;28384&#39;,&#39;28386&#39;,&#39;28389&#39;,&#39;28394&#39;,&#39;28395&#39;,&#39;28398&#39;,&#39;28414&#39;,&#39;28415&#39;,&#39;28421&#39;,&#39;28424&#39;,&#39;28434&#39;,&#39;28444&#39;,&#39;28455&#39;,&#39;28464&#39;,&#39;28473&#39;,&#39;28476&#39;,&#39;28479&#39;,&#39;28481&#39;,&#39;28483&#39;,&#39;28484&#39;,&#39;28485&#39;,&#39;28490&#39;,&#39;28491&#39;,&#39;28494&#39;,&#39;28508&#39;,&#39;28509&#39;,&#39;28523&#39;,&#39;28524&#39;,&#39;28526&#39;,&#39;28545&#39;,&#39;28548&#39;,&#39;28549&#39;,&#39;28556&#39;,&#39;28558&#39;,&#39;28568&#39;,&#39;28572&#39;,&#39;28578&#39;,&#39;28579&#39;,&#39;28582&#39;,&#39;28590&#39;,&#39;28591&#39;,&#39;28596&#39;,&#39;28600&#39;,&#39;28603&#39;,&#39;28613&#39;,&#39;28616&#39;,&#39;28618&#39;,&#39;28620&#39;,&#39;28623&#39;,&#39;28634&#39;,&#39;28635&#39;,&#39;28640&#39;,&#39;28641&#39;,&#39;28643&#39;,&#39;28651&#39;,&#39;28659&#39;,&#39;28660&#39;,&#39;28661&#39;,&#39;28665&#39;,&#39;28668&#39;,&#39;28669&#39;,&#39;28680&#39;,&#39;28686&#39;,&#39;28693&#39;,&#39;28694&#39;,&#39;28695&#39;,&#39;28700&#39;,&#39;28701&#39;,&#39;28703&#39;,&#39;28704&#39;,&#39;28711&#39;,&#39;28712&#39;,&#39;28720&#39;,&#39;28724&#39;,&#39;28736&#39;,&#39;28740&#39;,&#39;28741&#39;,&#39;28742&#39;,&#39;28746&#39;,&#39;28747&#39;,&#39;28751&#39;,&#39;28756&#39;,&#39;28758&#39;,&#39;28767&#39;,&#39;28769&#39;,&#39;28773&#39;,&#39;28775&#39;,&#39;28777&#39;,&#39;28778&#39;,&#39;28791&#39;,&#39;28808&#39;,&#39;28817&#39;,&#39;28819&#39;,&#39;28822&#39;,&#39;28823&#39;,&#39;28831&#39;,&#39;28835&#39;,&#39;28841&#39;,&#39;28845&#39;,&#39;28847&#39;,&#39;28850&#39;,&#39;28852&#39;,&#39;28856&#39;,&#39;28862&#39;,&#39;28865&#39;,&#39;28867&#39;,&#39;28869&#39;,&#39;28872&#39;,&#39;28880&#39;,&#39;28897&#39;,&#39;28899&#39;,&#39;28901&#39;,&#39;28907&#39;,&#39;28908&#39;,&#39;28913&#39;,&#39;28914&#39;,&#39;28915&#39;,&#39;28923&#39;,&#39;28926&#39;,&#39;28934&#39;,&#39;28939&#39;,&#39;28940&#39;,&#39;28945&#39;,&#39;28947&#39;,&#39;28948&#39;,&#39;28949&#39;,&#39;28964&#39;,&#39;28967&#39;,&#39;28972&#39;,&#39;28987&#39;,&#39;28990&#39;,&#39;29002&#39;,&#39;29005&#39;,&#39;29012&#39;,&#39;29018&#39;,&#39;29026&#39;,&#39;29033&#39;,&#39;29035&#39;,&#39;29038&#39;,&#39;29039&#39;,&#39;29040&#39;,&#39;29054&#39;,&#39;29058&#39;,&#39;29065&#39;,&#39;29069&#39;,&#39;29070&#39;,&#39;29079&#39;,&#39;29083&#39;,&#39;29090&#39;,&#39;29095&#39;,&#39;29108&#39;,&#39;29109&#39;,&#39;29112&#39;,&#39;29115&#39;,&#39;29120&#39;,&#39;29125&#39;,&#39;29127&#39;,&#39;29136&#39;,&#39;29139&#39;,&#39;29141&#39;,&#39;29143&#39;,&#39;29145&#39;,&#39;29146&#39;,&#39;29157&#39;,&#39;29162&#39;,&#39;29163&#39;,&#39;29178&#39;,&#39;29190&#39;,&#39;29193&#39;,&#39;29200&#39;,&#39;29207&#39;,&#39;29208&#39;,&#39;29212&#39;,&#39;29222&#39;,&#39;29223&#39;,&#39;29227&#39;,&#39;29229&#39;,&#39;29235&#39;,&#39;29236&#39;,&#39;29238&#39;,&#39;29242&#39;,&#39;29250&#39;,&#39;29252&#39;,&#39;29260&#39;,&#39;29266&#39;,&#39;29271&#39;,&#39;29273&#39;,&#39;29281&#39;,&#39;29282&#39;,&#39;29289&#39;,&#39;29295&#39;,&#39;29296&#39;,&#39;29301&#39;,&#39;29305&#39;,&#39;29306&#39;,&#39;29308&#39;,&#39;29310&#39;,&#39;29314&#39;,&#39;29316&#39;,&#39;29323&#39;,&#39;29329&#39;,&#39;29332&#39;,&#39;29335&#39;,&#39;29336&#39;,&#39;29338&#39;,&#39;29344&#39;,&#39;29346&#39;,&#39;29347&#39;,&#39;29351&#39;,&#39;29352&#39;,&#39;29356&#39;,&#39;29360&#39;,&#39;29364&#39;,&#39;29369&#39;,&#39;29370&#39;,&#39;29375&#39;,&#39;29376&#39;,&#39;29382&#39;,&#39;29391&#39;,&#39;29394&#39;,&#39;29406&#39;,&#39;29407&#39;,&#39;29410&#39;,&#39;29423&#39;,&#39;29437&#39;,&#39;29441&#39;,&#39;29444&#39;,&#39;29446&#39;,&#39;29449&#39;,&#39;29453&#39;,&#39;29454&#39;,&#39;29468&#39;,&#39;29469&#39;,&#39;29471&#39;,&#39;29474&#39;,&#39;29477&#39;,&#39;29479&#39;,&#39;29480&#39;,&#39;29481&#39;,&#39;29487&#39;,&#39;29504&#39;,&#39;29510&#39;,&#39;29516&#39;,&#39;29522&#39;,&#39;29527&#39;,&#39;29537&#39;,&#39;29538&#39;,&#39;29539&#39;,&#39;29543&#39;,&#39;29552&#39;,&#39;29554&#39;,&#39;29555&#39;,&#39;29556&#39;,&#39;29562&#39;,&#39;29569&#39;,&#39;29571&#39;,&#39;29575&#39;,&#39;29576&#39;,&#39;29579&#39;,&#39;29587&#39;,&#39;29592&#39;,&#39;29594&#39;,&#39;29595&#39;,&#39;29615&#39;,&#39;29622&#39;,&#39;29623&#39;,&#39;29624&#39;,&#39;29625&#39;,&#39;29630&#39;,&#39;29631&#39;,&#39;29632&#39;,&#39;29635&#39;,&#39;29640&#39;,&#39;29642&#39;,&#39;29647&#39;,&#39;29648&#39;,&#39;29650&#39;,&#39;29659&#39;,&#39;29663&#39;,&#39;29671&#39;,&#39;29675&#39;,&#39;29684&#39;,&#39;29693&#39;,&#39;29694&#39;,&#39;29700&#39;,&#39;29701&#39;,&#39;29706&#39;,&#39;29722&#39;,&#39;29729&#39;,&#39;29731&#39;,&#39;29732&#39;,&#39;29735&#39;,&#39;29740&#39;,&#39;29751&#39;,&#39;29757&#39;,&#39;29759&#39;,&#39;29761&#39;,&#39;29763&#39;,&#39;29769&#39;,&#39;29770&#39;,&#39;29771&#39;,&#39;29779&#39;,&#39;29780&#39;,&#39;29783&#39;,&#39;29785&#39;,&#39;29787&#39;,&#39;29788&#39;,&#39;29793&#39;,&#39;29794&#39;,&#39;29795&#39;,&#39;29797&#39;,&#39;29808&#39;,&#39;29811&#39;,&#39;29813&#39;,&#39;29831&#39;,&#39;29833&#39;,&#39;29839&#39;,&#39;29842&#39;,&#39;29847&#39;,&#39;29848&#39;,&#39;29851&#39;,&#39;29866&#39;,&#39;29867&#39;,&#39;29870&#39;,&#39;29877&#39;,&#39;29881&#39;,&#39;29883&#39;,&#39;29884&#39;,&#39;29893&#39;,&#39;29898&#39;,&#39;29905&#39;,&#39;29908&#39;,&#39;29911&#39;,&#39;29914&#39;,&#39;29916&#39;,&#39;29918&#39;,&#39;29920&#39;,&#39;29926&#39;,&#39;29939&#39;,&#39;29953&#39;,&#39;29956&#39;,&#39;29965&#39;,&#39;29978&#39;,&#39;29985&#39;,&#39;29992&#39;,&#39;29997&#39;,&#39;30009&#39;,&#39;30011&#39;,&#39;30017&#39;,&#39;30026&#39;,&#39;30027&#39;,&#39;30029&#39;,&#39;30031&#39;,&#39;30034&#39;,&#39;30040&#39;,&#39;30044&#39;,&#39;30045&#39;,&#39;30047&#39;,&#39;30048&#39;,&#39;30054&#39;,&#39;30063&#39;,&#39;30064&#39;,&#39;30068&#39;,&#39;30071&#39;,&#39;30074&#39;,&#39;30077&#39;,&#39;30079&#39;,&#39;30081&#39;,&#39;30096&#39;,&#39;30098&#39;,&#39;30101&#39;,&#39;30104&#39;,&#39;30111&#39;,&#39;30116&#39;,&#39;30129&#39;,&#39;30131&#39;,&#39;30141&#39;,&#39;30147&#39;,&#39;30156&#39;,&#39;30160&#39;,&#39;30162&#39;,&#39;30169&#39;,&#39;30171&#39;,&#39;30175&#39;,&#39;30178&#39;,&#39;30185&#39;,&#39;30186&#39;,&#39;30191&#39;,&#39;30192&#39;,&#39;30193&#39;,&#39;30198&#39;,&#39;30201&#39;,&#39;30203&#39;,&#39;30204&#39;,&#39;30209&#39;,&#39;30220&#39;,&#39;30222&#39;,&#39;30233&#39;,&#39;30239&#39;,&#39;30246&#39;,&#39;30248&#39;,&#39;30249&#39;,&#39;30255&#39;,&#39;30257&#39;,&#39;30258&#39;,&#39;30260&#39;,&#39;30269&#39;,&#39;30271&#39;,&#39;30274&#39;,&#39;30279&#39;,&#39;30280&#39;,&#39;30281&#39;,&#39;30283&#39;,&#39;30287&#39;,&#39;30288&#39;,&#39;30296&#39;,&#39;30300&#39;,&#39;30308&#39;,&#39;30309&#39;,&#39;30324&#39;,&#39;30328&#39;,&#39;30331&#39;,&#39;30333&#39;,&#39;30335&#39;,&#39;30339&#39;,&#39;30341&#39;,&#39;30343&#39;,&#39;30344&#39;,&#39;30346&#39;,&#39;30348&#39;,&#39;30352&#39;,&#39;30356&#39;,&#39;30358&#39;,&#39;30362&#39;,&#39;30372&#39;,&#39;30375&#39;,&#39;30378&#39;,&#39;30379&#39;,&#39;30388&#39;,&#39;30394&#39;,&#39;30400&#39;,&#39;30404&#39;,&#39;30422&#39;,&#39;30435&#39;,&#39;30440&#39;,&#39;30445&#39;,&#39;30447&#39;,&#39;30449&#39;,&#39;30458&#39;,&#39;30462&#39;,&#39;30474&#39;,&#39;30480&#39;,&#39;30488&#39;,&#39;30489&#39;,&#39;30500&#39;,&#39;30501&#39;,&#39;30503&#39;,&#39;30504&#39;,&#39;30506&#39;,&#39;30507&#39;,&#39;30509&#39;,&#39;30516&#39;,&#39;30521&#39;,&#39;30524&#39;,&#39;30528&#39;,&#39;30529&#39;,&#39;30538&#39;,&#39;30540&#39;,&#39;30548&#39;,&#39;30549&#39;,&#39;30558&#39;,&#39;30560&#39;,&#39;30562&#39;,&#39;30575&#39;,&#39;30583&#39;,&#39;30587&#39;,&#39;30591&#39;,&#39;30595&#39;,&#39;30596&#39;,&#39;30598&#39;,&#39;30605&#39;,&#39;30606&#39;,&#39;30609&#39;,&#39;30610&#39;,&#39;30611&#39;,&#39;30613&#39;,&#39;30618&#39;,&#39;30627&#39;,&#39;30628&#39;,&#39;30629&#39;,&#39;30635&#39;,&#39;30641&#39;,&#39;30645&#39;,&#39;30646&#39;,&#39;30659&#39;,&#39;30660&#39;,&#39;30669&#39;,&#39;30670&#39;,&#39;30680&#39;,&#39;30682&#39;,&#39;30683&#39;,&#39;30690&#39;,&#39;30692&#39;,&#39;30696&#39;,&#39;30697&#39;,&#39;30701&#39;,&#39;30703&#39;,&#39;30704&#39;,&#39;30708&#39;,&#39;30715&#39;,&#39;30717&#39;,&#39;30733&#39;,&#39;30740&#39;,&#39;30749&#39;,&#39;30751&#39;,&#39;30754&#39;,&#39;30760&#39;,&#39;30762&#39;,&#39;30765&#39;,&#39;30766&#39;,&#39;30768&#39;,&#39;30770&#39;,&#39;30772&#39;,&#39;30777&#39;,&#39;30784&#39;,&#39;30787&#39;,&#39;30792&#39;,&#39;30799&#39;,&#39;30807&#39;,&#39;30808&#39;,&#39;30811&#39;,&#39;30815&#39;,&#39;30817&#39;,&#39;30818&#39;,&#39;30822&#39;,&#39;30833&#39;,&#39;30836&#39;,&#39;30837&#39;,&#39;30852&#39;,&#39;30853&#39;,&#39;30854&#39;,&#39;30864&#39;,&#39;30870&#39;,&#39;30873&#39;,&#39;30881&#39;,&#39;30883&#39;,&#39;30885&#39;,&#39;30888&#39;,&#39;30890&#39;,&#39;30896&#39;,&#39;30904&#39;,&#39;30905&#39;,&#39;30908&#39;,&#39;30909&#39;,&#39;30916&#39;,&#39;30920&#39;,&#39;30925&#39;,&#39;30926&#39;,&#39;30927&#39;,&#39;30935&#39;,&#39;30936&#39;,&#39;30943&#39;,&#39;30955&#39;,&#39;30956&#39;,&#39;30962&#39;,&#39;30971&#39;,&#39;30974&#39;,&#39;30975&#39;,&#39;30979&#39;,&#39;30981&#39;,&#39;30982&#39;,&#39;30983&#39;,&#39;30988&#39;,&#39;30989&#39;,&#39;31006&#39;,&#39;31010&#39;,&#39;31022&#39;,&#39;31025&#39;,&#39;31032&#39;,&#39;31037&#39;,&#39;31038&#39;,&#39;31042&#39;,&#39;31052&#39;,&#39;31053&#39;,&#39;31056&#39;,&#39;31061&#39;,&#39;31064&#39;,&#39;31066&#39;,&#39;31075&#39;,&#39;31086&#39;,&#39;31091&#39;,&#39;31094&#39;,&#39;31097&#39;,&#39;31098&#39;,&#39;31102&#39;,&#39;31112&#39;,&#39;31120&#39;,&#39;31121&#39;,&#39;31125&#39;,&#39;31133&#39;,&#39;31137&#39;,&#39;31158&#39;,&#39;31165&#39;,&#39;31174&#39;,&#39;31177&#39;,&#39;31183&#39;,&#39;31186&#39;,&#39;31194&#39;,&#39;31195&#39;,&#39;31196&#39;,&#39;31201&#39;,&#39;31204&#39;,&#39;31207&#39;,&#39;31213&#39;,&#39;31214&#39;,&#39;31218&#39;,&#39;31220&#39;,&#39;31221&#39;,&#39;31226&#39;,&#39;31229&#39;,&#39;31231&#39;,&#39;31235&#39;,&#39;31238&#39;,&#39;31245&#39;,&#39;31249&#39;,&#39;31252&#39;,&#39;31253&#39;,&#39;31259&#39;,&#39;31260&#39;,&#39;31269&#39;,&#39;31277&#39;,&#39;31279&#39;,&#39;31280&#39;,&#39;31285&#39;,&#39;31286&#39;,&#39;31288&#39;,&#39;31289&#39;,&#39;31295&#39;,&#39;31297&#39;,&#39;31298&#39;,&#39;31316&#39;,&#39;31327&#39;,&#39;31328&#39;,&#39;31336&#39;,&#39;31343&#39;,&#39;31349&#39;,&#39;31355&#39;,&#39;31359&#39;,&#39;31364&#39;,&#39;31365&#39;,&#39;31368&#39;,&#39;31371&#39;,&#39;31375&#39;,&#39;31381&#39;,&#39;31385&#39;,&#39;31387&#39;,&#39;31392&#39;,&#39;31393&#39;,&#39;31398&#39;,&#39;31400&#39;,&#39;31402&#39;,&#39;31406&#39;,&#39;31413&#39;,&#39;31431&#39;,&#39;31437&#39;,&#39;31441&#39;,&#39;31447&#39;,&#39;31453&#39;,&#39;31458&#39;,&#39;31463&#39;,&#39;31473&#39;,&#39;31493&#39;,&#39;31494&#39;,&#39;31496&#39;,&#39;31497&#39;,&#39;31498&#39;,&#39;31501&#39;,&#39;31504&#39;,&#39;31507&#39;,&#39;31510&#39;,&#39;31520&#39;,&#39;31521&#39;,&#39;31525&#39;,&#39;31526&#39;,&#39;31537&#39;,&#39;31544&#39;,&#39;31545&#39;,&#39;31547&#39;,&#39;31551&#39;,&#39;31554&#39;,&#39;31558&#39;,&#39;31561&#39;,&#39;31562&#39;,&#39;31568&#39;,&#39;31575&#39;,&#39;31579&#39;,&#39;31580&#39;,&#39;31582&#39;,&#39;31583&#39;,&#39;31585&#39;,&#39;31590&#39;,&#39;31608&#39;,&#39;31609&#39;,&#39;31620&#39;,&#39;31621&#39;,&#39;31622&#39;,&#39;31626&#39;,&#39;31628&#39;,&#39;31629&#39;,&#39;31630&#39;,&#39;31633&#39;,&#39;31640&#39;,&#39;31641&#39;,&#39;31643&#39;,&#39;31646&#39;,&#39;31650&#39;,&#39;31653&#39;,&#39;31663&#39;,&#39;31668&#39;,&#39;31684&#39;,&#39;31689&#39;,&#39;31696&#39;,&#39;31701&#39;,&#39;31704&#39;,&#39;31715&#39;,&#39;31728&#39;,&#39;31729&#39;,&#39;31731&#39;,&#39;31735&#39;,&#39;31739&#39;,&#39;31741&#39;,&#39;31742&#39;,&#39;31744&#39;,&#39;31745&#39;,&#39;31747&#39;,&#39;31754&#39;,&#39;31756&#39;,&#39;31762&#39;,&#39;31769&#39;,&#39;31770&#39;,&#39;31773&#39;,&#39;31774&#39;,&#39;31776&#39;,&#39;31777&#39;,&#39;31787&#39;,&#39;31790&#39;,&#39;31795&#39;,&#39;31803&#39;,&#39;31806&#39;,&#39;31817&#39;,&#39;31818&#39;,&#39;31824&#39;,&#39;31825&#39;,&#39;31826&#39;,&#39;31835&#39;,&#39;31840&#39;,&#39;31842&#39;,&#39;31844&#39;,&#39;31847&#39;,&#39;31850&#39;,&#39;31851&#39;,&#39;31860&#39;,&#39;31862&#39;,&#39;31871&#39;,&#39;31872&#39;,&#39;31888&#39;,&#39;31897&#39;,&#39;31911&#39;,&#39;31921&#39;,&#39;31923&#39;,&#39;31933&#39;,&#39;31935&#39;,&#39;31946&#39;,&#39;31949&#39;,&#39;31951&#39;,&#39;31956&#39;,&#39;31961&#39;,&#39;31975&#39;,&#39;31977&#39;,&#39;31983&#39;,&#39;31984&#39;,&#39;31987&#39;,&#39;31991&#39;,&#39;32001&#39;,&#39;32006&#39;,&#39;32014&#39;,&#39;32022&#39;,&#39;32025&#39;,&#39;32033&#39;,&#39;32037&#39;,&#39;32038&#39;,&#39;32045&#39;,&#39;32053&#39;,&#39;32060&#39;,&#39;32065&#39;,&#39;32067&#39;,&#39;32071&#39;,&#39;32072&#39;,&#39;32076&#39;,&#39;32077&#39;,&#39;32081&#39;,&#39;32082&#39;,&#39;32088&#39;,&#39;32092&#39;,&#39;32100&#39;,&#39;32102&#39;,&#39;32103&#39;,&#39;32109&#39;,&#39;32113&#39;,&#39;32118&#39;,&#39;32123&#39;,&#39;32128&#39;,&#39;32132&#39;,&#39;32134&#39;,&#39;32135&#39;,&#39;32138&#39;,&#39;32140&#39;,&#39;32142&#39;,&#39;32143&#39;,&#39;32146&#39;,&#39;32150&#39;,&#39;32151&#39;,&#39;32153&#39;,&#39;32157&#39;,&#39;32160&#39;,&#39;32161&#39;,&#39;32162&#39;,&#39;32166&#39;,&#39;32187&#39;,&#39;32191&#39;,&#39;32192&#39;,&#39;32193&#39;,&#39;32195&#39;,&#39;32202&#39;,&#39;32205&#39;,&#39;32206&#39;,&#39;32211&#39;,&#39;32213&#39;,&#39;32215&#39;,&#39;32217&#39;,&#39;32223&#39;,&#39;32238&#39;,&#39;32240&#39;,&#39;32242&#39;,&#39;32243&#39;,&#39;32247&#39;,&#39;32250&#39;,&#39;32252&#39;,&#39;32276&#39;,&#39;32280&#39;,&#39;32282&#39;,&#39;32283&#39;,&#39;32286&#39;,&#39;32295&#39;,&#39;32301&#39;,&#39;32304&#39;,&#39;32310&#39;,&#39;32311&#39;,&#39;32312&#39;,&#39;32323&#39;,&#39;32324&#39;,&#39;32326&#39;,&#39;32336&#39;,&#39;32343&#39;,&#39;32346&#39;,&#39;32348&#39;,&#39;32351&#39;,&#39;32356&#39;,&#39;32360&#39;,&#39;32361&#39;,&#39;32362&#39;,&#39;32365&#39;,&#39;32368&#39;,&#39;32372&#39;,&#39;32374&#39;,&#39;32376&#39;,&#39;32382&#39;,&#39;32392&#39;,&#39;32399&#39;,&#39;32402&#39;,&#39;32416&#39;,&#39;32417&#39;,&#39;32418&#39;,&#39;32421&#39;,&#39;32426&#39;,&#39;32438&#39;,&#39;32450&#39;,&#39;32455&#39;,&#39;32456&#39;,&#39;32457&#39;,&#39;32459&#39;,&#39;32461&#39;,&#39;32469&#39;,&#39;32470&#39;,&#39;32479&#39;,&#39;32480&#39;,&#39;32485&#39;,&#39;32489&#39;,&#39;32494&#39;,&#39;32501&#39;,&#39;32503&#39;,&#39;32511&#39;,&#39;32512&#39;,&#39;32518&#39;,&#39;32519&#39;,&#39;32520&#39;,&#39;32523&#39;,&#39;32525&#39;,&#39;32529&#39;,&#39;32536&#39;,&#39;32538&#39;,&#39;32542&#39;,&#39;32544&#39;,&#39;32551&#39;,&#39;32580&#39;,&#39;32585&#39;,&#39;32587&#39;,&#39;32592&#39;,&#39;32595&#39;,&#39;32596&#39;,&#39;32604&#39;,&#39;32616&#39;,&#39;32618&#39;,&#39;32622&#39;,&#39;32623&#39;,&#39;32624&#39;,&#39;32626&#39;,&#39;32629&#39;,&#39;32633&#39;,&#39;32636&#39;,&#39;32643&#39;,&#39;32647&#39;,&#39;32650&#39;,&#39;32654&#39;,&#39;32662&#39;,&#39;32683&#39;,&#39;32686&#39;,&#39;32690&#39;,&#39;32699&#39;,&#39;32701&#39;,&#39;32705&#39;,&#39;32707&#39;,&#39;32724&#39;,&#39;32728&#39;,&#39;32733&#39;,&#39;32735&#39;,&#39;32749&#39;,&#39;32772&#39;,&#39;32777&#39;,&#39;32786&#39;,&#39;32789&#39;,&#39;32795&#39;,&#39;32796&#39;,&#39;32800&#39;,&#39;32815&#39;,&#39;32818&#39;,&#39;32819&#39;,&#39;32823&#39;,&#39;32825&#39;,&#39;32829&#39;,&#39;32830&#39;,&#39;32834&#39;,&#39;32835&#39;,&#39;32840&#39;,&#39;32841&#39;,&#39;32855&#39;,&#39;32857&#39;,&#39;32865&#39;,&#39;32868&#39;,&#39;32869&#39;,&#39;32871&#39;,&#39;32873&#39;,&#39;32880&#39;,&#39;32883&#39;,&#39;32889&#39;,&#39;32891&#39;,&#39;32892&#39;,&#39;32893&#39;,&#39;32894&#39;,&#39;32900&#39;,&#39;32931&#39;,&#39;32939&#39;,&#39;32945&#39;,&#39;32946&#39;,&#39;32951&#39;,&#39;32958&#39;,&#39;32964&#39;,&#39;32974&#39;,&#39;32975&#39;,&#39;32976&#39;,&#39;32977&#39;,&#39;32980&#39;,&#39;32982&#39;,&#39;32985&#39;,&#39;33001&#39;,&#39;33002&#39;,&#39;33003&#39;,&#39;33008&#39;,&#39;33009&#39;,&#39;33012&#39;,&#39;33014&#39;,&#39;33015&#39;,&#39;33019&#39;,&#39;33027&#39;,&#39;33031&#39;,&#39;33033&#39;,&#39;33042&#39;,&#39;33044&#39;,&#39;33045&#39;,&#39;33049&#39;,&#39;33055&#39;,&#39;33069&#39;,&#39;33083&#39;,&#39;33089&#39;,&#39;33093&#39;,&#39;33094&#39;,&#39;33109&#39;,&#39;33115&#39;,&#39;33116&#39;,&#39;33124&#39;,&#39;33125&#39;,&#39;33126&#39;,&#39;33135&#39;,&#39;33144&#39;,&#39;33149&#39;,&#39;33165&#39;,&#39;33173&#39;,&#39;33185&#39;,&#39;33210&#39;,&#39;33229&#39;,&#39;33234&#39;,&#39;33235&#39;,&#39;33240&#39;,&#39;33264&#39;,&#39;33271&#39;,&#39;33278&#39;,&#39;33288&#39;,&#39;33289&#39;,&#39;33291&#39;,&#39;33295&#39;,&#39;33303&#39;,&#39;33304&#39;,&#39;33305&#39;,&#39;33333&#39;,&#39;33335&#39;,&#39;33336&#39;,&#39;33346&#39;,&#39;33355&#39;,&#39;33376&#39;,&#39;33384&#39;)
&lt;br /&gt;
&lt;br /&gt;
Which gave the following error:&lt;br /&gt;
&lt;br /&gt;
An error occurred when executing the query.&lt;br /&gt;
The data provider said:&lt;br /&gt;
OGR[3] error 1: SQL Expression Parsing Error: memory exhausted. Occured around :&lt;br /&gt;
&#39;30171&#39;,&#39;30175&#39;,&#39;30178&#39;,&#39;30185&#39;,&#39;30186&#39;,&#39;30191&#39;,&#39;30192&#39;,&#39;30193&#39;,&#39;30198&#39;,&#39;30201&#39;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^&lt;br /&gt;
&lt;br /&gt;
By splitting the IN clause in two parts with an &quot;OR&quot;, by writing &quot;id IN (...) OR &quot;id IN (...), I managed to get my query working:&lt;br /&gt;
&lt;br /&gt;
&quot;id&quot; IN (&#39;0-E&#39;,&#39;1&#39;,&#39;6&#39;,&#39;14&#39;,&#39;23&#39;,&#39;25&#39;,&#39;38&#39;,&#39;49&#39;,&#39;51&#39;,&#39;61&#39;,&#39;81&#39;,&#39;85&#39;,&#39;90&#39;,&#39;93&#39;,&#39;114&#39;,&#39;138&#39;,&#39;143&#39;,&#39;144&#39;,&#39;148&#39;,&#39;158&#39;,&#39;159&#39;,&#39;168&#39;,&#39;176&#39;,&#39;182&#39;,&#39;185&#39;,&#39;195&#39;,&#39;212&#39;,&#39;220&#39;,&#39;222&#39;,&#39;223&#39;,&#39;227&#39;,&#39;233&#39;,&#39;235&#39;,&#39;246&#39;,&#39;248&#39;,&#39;255&#39;,&#39;261&#39;,&#39;262&#39;,&#39;293&#39;,&#39;295&#39;,&#39;301&#39;,&#39;323&#39;,&#39;328&#39;,&#39;330&#39;,&#39;338&#39;,&#39;341&#39;,&#39;347&#39;,&#39;352&#39;,&#39;361&#39;,&#39;365&#39;,&#39;366&#39;,&#39;371&#39;,&#39;372&#39;,&#39;375&#39;,&#39;382&#39;,&#39;387&#39;,&#39;400&#39;,&#39;404&#39;,&#39;406&#39;,&#39;413&#39;,&#39;421&#39;,&#39;424&#39;,&#39;426&#39;,&#39;428&#39;,&#39;433&#39;,&#39;434&#39;,&#39;436&#39;,&#39;444&#39;,&#39;455&#39;,&#39;471&#39;,&#39;474&#39;,&#39;478&#39;,&#39;485&#39;,&#39;486&#39;,&#39;513&#39;,&#39;529&#39;,&#39;532&#39;,&#39;534&#39;,&#39;538&#39;,&#39;548&#39;,&#39;557&#39;,&#39;560&#39;,&#39;562&#39;,&#39;565&#39;,&#39;571&#39;,&#39;584&#39;,&#39;587&#39;,&#39;589&#39;,&#39;593&#39;,&#39;602&#39;,&#39;604&#39;,&#39;609&#39;,&#39;619&#39;,&#39;631&#39;,&#39;649&#39;,&#39;653&#39;,&#39;668&#39;,&#39;672&#39;,&#39;673&#39;,&#39;681&#39;,&#39;685&#39;,&#39;686&#39;,&#39;694&#39;,&#39;703&#39;,&#39;704&#39;,&#39;706&#39;,&#39;707&#39;,&#39;711&#39;,&#39;716&#39;,&#39;731&#39;,&#39;734&#39;,&#39;741&#39;,&#39;752&#39;,&#39;757&#39;,&#39;765&#39;,&#39;777&#39;,&#39;782&#39;,&#39;786&#39;,&#39;791&#39;,&#39;796&#39;,&#39;799&#39;,&#39;805&#39;,&#39;807&#39;,&#39;814&#39;,&#39;821&#39;,&#39;823&#39;,&#39;831&#39;,&#39;836&#39;,&#39;839&#39;,&#39;849&#39;,&#39;867&#39;,&#39;871&#39;,&#39;884&#39;,&#39;888&#39;,&#39;890&#39;,&#39;892&#39;,&#39;894&#39;,&#39;896&#39;,&#39;914&#39;,&#39;915&#39;,&#39;928&#39;,&#39;935&#39;,&#39;936&#39;,&#39;955&#39;,&#39;961&#39;,&#39;966&#39;,&#39;971&#39;,&#39;972&#39;,&#39;976&#39;,&#39;977&#39;,&#39;1000&#39;,&#39;1014&#39;,&#39;1035&#39;,&#39;1038&#39;,&#39;1046&#39;,&#39;1047&#39;,&#39;1049&#39;,&#39;1097&#39;,&#39;1100&#39;,&#39;1101&#39;,&#39;1105&#39;,&#39;1110&#39;,&#39;1115&#39;,&#39;1117&#39;,&#39;1120&#39;,&#39;1121&#39;,&#39;1122&#39;,&#39;1130&#39;,&#39;1133&#39;,&#39;1160&#39;,&#39;1174&#39;,&#39;1177&#39;,&#39;1187&#39;,&#39;1195&#39;,&#39;1209&#39;,&#39;1223&#39;,&#39;1229&#39;,&#39;1232&#39;,&#39;1243&#39;,&#39;1260&#39;,&#39;1261&#39;,&#39;1262&#39;,&#39;1268&#39;,&#39;1279&#39;,&#39;1291&#39;,&#39;1299&#39;,&#39;1306&#39;,&#39;1307&#39;,&#39;1310&#39;,&#39;1312&#39;,&#39;1315&#39;,&#39;1318&#39;,&#39;1323&#39;,&#39;1326&#39;,&#39;1332&#39;,&#39;1340&#39;,&#39;1351&#39;,&#39;1354&#39;,&#39;1372&#39;,&#39;1381&#39;,&#39;1392&#39;,&#39;1393&#39;,&#39;1396&#39;,&#39;1413&#39;,&#39;1418&#39;,&#39;1428&#39;,&#39;1432&#39;,&#39;1438&#39;,&#39;1445&#39;,&#39;1446&#39;,&#39;1449&#39;,&#39;1453&#39;,&#39;1461&#39;,&#39;1466&#39;,&#39;1482&#39;,&#39;1489&#39;,&#39;1501&#39;,&#39;1502&#39;,&#39;1505&#39;,&#39;1513&#39;,&#39;1520&#39;,&#39;1528&#39;,&#39;1532&#39;,&#39;1537&#39;,&#39;1539&#39;,&#39;1545&#39;,&#39;1547&#39;,&#39;1556&#39;,&#39;1560&#39;,&#39;1561&#39;,&#39;1564&#39;,&#39;1567&#39;,&#39;1570&#39;,&#39;1578&#39;,&#39;1584&#39;,&#39;1587&#39;,&#39;1592&#39;,&#39;1594&#39;,&#39;1595&#39;,&#39;1597&#39;,&#39;1603&#39;,&#39;1614&#39;,&#39;1622&#39;,&#39;1643&#39;,&#39;1655&#39;,&#39;1659&#39;,&#39;1660&#39;,&#39;1667&#39;,&#39;1680&#39;,&#39;1685&#39;,&#39;1687&#39;,&#39;1688&#39;,&#39;1696&#39;,&#39;1697&#39;,&#39;1701&#39;,&#39;1737&#39;,&#39;1756&#39;,&#39;1757&#39;,&#39;1767&#39;,&#39;1777&#39;,&#39;1789&#39;,&#39;1790&#39;,&#39;1797&#39;,&#39;1814&#39;,&#39;1815&#39;,&#39;1826&#39;,&#39;1827&#39;,&#39;1836&#39;,&#39;1840&#39;,&#39;1842&#39;,&#39;1843&#39;,&#39;1844&#39;,&#39;1846&#39;,&#39;1853&#39;,&#39;1863&#39;,&#39;1864&#39;,&#39;1867&#39;,&#39;1878&#39;,&#39;1881&#39;,&#39;1883&#39;,&#39;1889&#39;,&#39;1894&#39;,&#39;1899&#39;,&#39;1903&#39;,&#39;1926&#39;,&#39;1927&#39;,&#39;1928&#39;,&#39;1936&#39;,&#39;1948&#39;,&#39;1957&#39;,&#39;1964&#39;,&#39;1980&#39;,&#39;2003&#39;,&#39;2005&#39;,&#39;2018&#39;,&#39;2025&#39;,&#39;2026&#39;,&#39;2033&#39;,&#39;2043&#39;,&#39;2044&#39;,&#39;2055&#39;,&#39;2057&#39;,&#39;2062&#39;,&#39;2072&#39;,&#39;2073&#39;,&#39;2074&#39;,&#39;2079&#39;,&#39;2088&#39;,&#39;2089&#39;,&#39;2092&#39;,&#39;2095&#39;,&#39;2101&#39;,&#39;2107&#39;,&#39;2119&#39;,&#39;2131&#39;,&#39;2153&#39;,&#39;2156&#39;,&#39;2157&#39;,&#39;2162&#39;,&#39;2171&#39;,&#39;2176&#39;,&#39;2187&#39;,&#39;2190&#39;,&#39;2196&#39;,&#39;2198&#39;,&#39;2209&#39;,&#39;2242&#39;,&#39;2256&#39;,&#39;2265&#39;,&#39;2285&#39;,&#39;2287&#39;,&#39;2288&#39;,&#39;2290&#39;,&#39;2299&#39;,&#39;2318&#39;,&#39;2319&#39;,&#39;2324&#39;,&#39;2340&#39;,&#39;2342&#39;,&#39;2363&#39;,&#39;2365&#39;,&#39;2373&#39;,&#39;2374&#39;,&#39;2377&#39;,&#39;2383&#39;,&#39;2387&#39;,&#39;2395&#39;,&#39;2402&#39;,&#39;2413&#39;,&#39;2414&#39;,&#39;2421&#39;,&#39;2433&#39;,&#39;2441&#39;,&#39;2453&#39;,&#39;2467&#39;,&#39;2478&#39;,&#39;2481&#39;,&#39;2483&#39;,&#39;2487&#39;,&#39;2499&#39;,&#39;2503&#39;,&#39;2514&#39;,&#39;2533&#39;,&#39;2544&#39;,&#39;2546&#39;,&#39;2550&#39;,&#39;2556&#39;,&#39;2565&#39;,&#39;2567&#39;,&#39;2573&#39;,&#39;2574&#39;,&#39;2577&#39;,&#39;2582&#39;,&#39;2588&#39;,&#39;2589&#39;,&#39;2598&#39;,&#39;2603&#39;,&#39;2610&#39;,&#39;2614&#39;,&#39;2615&#39;,&#39;2620&#39;,&#39;2632&#39;,&#39;2640&#39;,&#39;2663&#39;,&#39;2664&#39;,&#39;2684&#39;,&#39;2714&#39;,&#39;2722&#39;,&#39;2725&#39;,&#39;2726&#39;,&#39;2748&#39;,&#39;2750&#39;,&#39;2758&#39;,&#39;2761&#39;,&#39;2764&#39;,&#39;2775&#39;,&#39;2778&#39;,&#39;2786&#39;,&#39;2788&#39;,&#39;2790&#39;,&#39;2806&#39;,&#39;2814&#39;,&#39;2815&#39;,&#39;2817&#39;,&#39;2820&#39;,&#39;2829&#39;,&#39;2834&#39;,&#39;2837&#39;,&#39;2856&#39;,&#39;2875&#39;,&#39;2881&#39;,&#39;2898&#39;,&#39;2902&#39;,&#39;2908&#39;,&#39;2932&#39;,&#39;2948&#39;,&#39;2949&#39;,&#39;2955&#39;,&#39;2959&#39;,&#39;2969&#39;,&#39;2973&#39;,&#39;2979&#39;,&#39;3000&#39;,&#39;3001&#39;,&#39;3003&#39;,&#39;3009&#39;,&#39;3015&#39;,&#39;3018&#39;,&#39;3019&#39;,&#39;3038&#39;,&#39;3055&#39;,&#39;3057&#39;,&#39;3071&#39;,&#39;3081&#39;,&#39;3082&#39;,&#39;3092&#39;,&#39;3093&#39;,&#39;3094&#39;,&#39;3117&#39;,&#39;3119&#39;,&#39;3127&#39;,&#39;3132&#39;,&#39;3133&#39;,&#39;3140&#39;,&#39;3160&#39;,&#39;3165&#39;,&#39;3184&#39;,&#39;3188&#39;,&#39;3195&#39;,&#39;3200&#39;,&#39;3205&#39;,&#39;3215&#39;,&#39;3216&#39;,&#39;3226&#39;,&#39;3229&#39;,&#39;3230&#39;,&#39;3236&#39;,&#39;3255&#39;,&#39;3256&#39;,&#39;3259&#39;,&#39;3260&#39;,&#39;3287&#39;,&#39;3288&#39;,&#39;3297&#39;,&#39;3323&#39;,&#39;3325&#39;,&#39;3329&#39;,&#39;3331&#39;,&#39;3340&#39;,&#39;3345&#39;,&#39;3358&#39;,&#39;3365&#39;,&#39;3372&#39;,&#39;3376&#39;,&#39;3384&#39;,&#39;3388&#39;,&#39;3404&#39;,&#39;3405&#39;,&#39;3421&#39;,&#39;3423&#39;,&#39;3430&#39;,&#39;3450&#39;,&#39;3460&#39;,&#39;3468&#39;,&#39;3476&#39;,&#39;3477&#39;,&#39;3483&#39;,&#39;3487&#39;,&#39;3497&#39;,&#39;3499&#39;,&#39;3500&#39;,&#39;3508&#39;,&#39;3514&#39;,&#39;3515&#39;,&#39;3516&#39;,&#39;3527&#39;,&#39;3532&#39;,&#39;3533&#39;,&#39;3555&#39;,&#39;3576&#39;,&#39;3585&#39;,&#39;3602&#39;,&#39;3603&#39;,&#39;3631&#39;,&#39;3641&#39;,&#39;3643&#39;,&#39;3646&#39;,&#39;3648&#39;,&#39;3649&#39;,&#39;3651&#39;,&#39;3652&#39;,&#39;3658&#39;,&#39;3671&#39;,&#39;3673&#39;,&#39;3681&#39;,&#39;3687&#39;,&#39;3688&#39;,&#39;3693&#39;,&#39;3702&#39;,&#39;3713&#39;,&#39;3716&#39;,&#39;3719&#39;,&#39;3723&#39;,&#39;3762&#39;,&#39;3765&#39;,&#39;3769&#39;,&#39;3777&#39;,&#39;3786&#39;,&#39;3793&#39;,&#39;3802&#39;,&#39;3803&#39;,&#39;3807&#39;,&#39;3808&#39;,&#39;3814&#39;,&#39;3816&#39;,&#39;3821&#39;,&#39;3826&#39;,&#39;3829&#39;,&#39;3831&#39;,&#39;3837&#39;,&#39;3839&#39;,&#39;3841&#39;,&#39;3842&#39;,&#39;3845&#39;,&#39;3852&#39;,&#39;3855&#39;,&#39;3856&#39;,&#39;3860&#39;,&#39;3865&#39;,&#39;3869&#39;,&#39;3872&#39;,&#39;3877&#39;,&#39;3888&#39;,&#39;3889&#39;,&#39;3899&#39;,&#39;3903&#39;,&#39;3905&#39;,&#39;3916&#39;,&#39;3918&#39;,&#39;3926&#39;,&#39;3929&#39;,&#39;3941&#39;,&#39;3947&#39;,&#39;3950&#39;,&#39;3953&#39;,&#39;3962&#39;,&#39;3970&#39;,&#39;3982&#39;,&#39;4015&#39;,&#39;4018&#39;,&#39;4030&#39;,&#39;4031&#39;,&#39;4040&#39;,&#39;4041&#39;,&#39;4044&#39;,&#39;4050&#39;,&#39;4055&#39;,&#39;4069&#39;,&#39;4071&#39;,&#39;4072&#39;,&#39;4076&#39;,&#39;4084&#39;,&#39;4085&#39;,&#39;4087&#39;,&#39;4093&#39;,&#39;4095&#39;,&#39;4106&#39;,&#39;4109&#39;,&#39;4113&#39;,&#39;4118&#39;,&#39;4119&#39;,&#39;4121&#39;,&#39;4124&#39;,&#39;4125&#39;,&#39;4129&#39;,&#39;4153&#39;,&#39;4156&#39;,&#39;4165&#39;,&#39;4174&#39;,&#39;4180&#39;,&#39;4192&#39;,&#39;4208&#39;,&#39;4214&#39;,&#39;4220&#39;,&#39;4225&#39;,&#39;4228&#39;,&#39;4231&#39;,&#39;4240&#39;,&#39;4268&#39;,&#39;4277&#39;,&#39;4281&#39;,&#39;4294&#39;,&#39;4295&#39;,&#39;4297&#39;,&#39;4303&#39;,&#39;4318&#39;,&#39;4324&#39;,&#39;4325&#39;,&#39;4326&#39;,&#39;4327&#39;,&#39;4337&#39;,&#39;4343&#39;,&#39;4345&#39;,&#39;4351&#39;,&#39;4354&#39;,&#39;4359&#39;,&#39;4364&#39;,&#39;4365&#39;,&#39;4388&#39;,&#39;4392&#39;,&#39;4398&#39;,&#39;4404&#39;,&#39;4405&#39;,&#39;4424&#39;,&#39;4431&#39;,&#39;4445&#39;,&#39;4458&#39;,&#39;4466&#39;,&#39;4468&#39;,&#39;4470&#39;,&#39;4472&#39;,&#39;4480&#39;,&#39;4487&#39;,&#39;4492&#39;,&#39;4493&#39;,&#39;4498&#39;,&#39;4499&#39;,&#39;4504&#39;,&#39;4510&#39;,&#39;4513&#39;,&#39;4521&#39;,&#39;4531&#39;,&#39;4543&#39;,&#39;4546&#39;,&#39;4549&#39;,&#39;4552&#39;,&#39;4556&#39;,&#39;4557&#39;,&#39;4558&#39;,&#39;4561&#39;,&#39;4562&#39;,&#39;4576&#39;,&#39;4583&#39;,&#39;4586&#39;,&#39;4597&#39;,&#39;4614&#39;,&#39;4617&#39;,&#39;4627&#39;,&#39;4646&#39;,&#39;4649&#39;,&#39;4654&#39;,&#39;4664&#39;,&#39;4668&#39;,&#39;4714&#39;,&#39;4723&#39;,&#39;4728&#39;,&#39;4752&#39;,&#39;4760&#39;,&#39;4761&#39;,&#39;4763&#39;,&#39;4767&#39;,&#39;4772&#39;,&#39;4791&#39;,&#39;4814&#39;,&#39;4823&#39;,&#39;4825&#39;,&#39;4840&#39;,&#39;4841&#39;,&#39;4847&#39;,&#39;4850&#39;,&#39;4865&#39;,&#39;4873&#39;,&#39;4884&#39;,&#39;4893&#39;,&#39;4895&#39;,&#39;4905&#39;,&#39;4918&#39;,&#39;4920&#39;,&#39;4935&#39;,&#39;4936&#39;,&#39;4943&#39;,&#39;4953&#39;,&#39;4964&#39;,&#39;4969&#39;,&#39;4978&#39;,&#39;4979&#39;,&#39;4980&#39;,&#39;4994&#39;,&#39;5003&#39;,&#39;5015&#39;,&#39;5017&#39;,&#39;5019&#39;,&#39;5021&#39;,&#39;5028&#39;,&#39;5030&#39;,&#39;5033&#39;,&#39;5039&#39;,&#39;5041&#39;,&#39;5042&#39;,&#39;5046&#39;,&#39;5050&#39;,&#39;5052&#39;,&#39;5053&#39;,&#39;5062&#39;,&#39;5064&#39;,&#39;5072&#39;,&#39;5079&#39;,&#39;5083&#39;,&#39;5087&#39;,&#39;5098&#39;,&#39;5111&#39;,&#39;5113&#39;,&#39;5119&#39;,&#39;5121&#39;,&#39;5147&#39;,&#39;5148&#39;,&#39;5154&#39;,&#39;5157&#39;,&#39;5159&#39;,&#39;5178&#39;,&#39;5185&#39;,&#39;5186&#39;,&#39;5192&#39;,&#39;5193&#39;,&#39;5201&#39;,&#39;5223&#39;,&#39;5238&#39;,&#39;5240&#39;,&#39;5251&#39;,&#39;5253&#39;,&#39;5260&#39;,&#39;5280&#39;,&#39;5288&#39;,&#39;5296&#39;,&#39;5297&#39;,&#39;5305&#39;,&#39;5306&#39;,&#39;5310&#39;,&#39;5313&#39;,&#39;5316&#39;,&#39;5319&#39;,&#39;5327&#39;,&#39;5329&#39;,&#39;5346&#39;,&#39;5347&#39;,&#39;5348&#39;,&#39;5362&#39;,&#39;5370&#39;,&#39;5371&#39;,&#39;5372&#39;,&#39;5382&#39;,&#39;5400&#39;,&#39;5411&#39;,&#39;5416&#39;,&#39;5427&#39;,&#39;5433&#39;,&#39;5438&#39;,&#39;5440&#39;,&#39;5444&#39;,&#39;5447&#39;,&#39;5453&#39;,&#39;5458&#39;,&#39;5459&#39;,&#39;5461&#39;,&#39;5465&#39;,&#39;5472&#39;,&#39;5474&#39;,&#39;5475&#39;,&#39;5483&#39;,&#39;5487&#39;,&#39;5494&#39;,&#39;5504&#39;,&#39;5507&#39;,&#39;5527&#39;,&#39;5536&#39;,&#39;5539&#39;,&#39;5542&#39;,&#39;5548&#39;,&#39;5561&#39;,&#39;5563&#39;,&#39;5564&#39;,&#39;5569&#39;,&#39;5571&#39;,&#39;5581&#39;,&#39;5584&#39;,&#39;5587&#39;,&#39;5588&#39;,&#39;5604&#39;,&#39;5609&#39;,&#39;5610&#39;,&#39;5614&#39;,&#39;5635&#39;,&#39;5642&#39;,&#39;5652&#39;,&#39;5653&#39;,&#39;5662&#39;,&#39;5669&#39;,&#39;5673&#39;,&#39;5678&#39;,&#39;5683&#39;,&#39;5691&#39;,&#39;5693&#39;,&#39;5695&#39;,&#39;5699&#39;,&#39;5704&#39;,&#39;5730&#39;,&#39;5732&#39;,&#39;5735&#39;,&#39;5743&#39;,&#39;5748&#39;,&#39;5758&#39;,&#39;5765&#39;,&#39;5766&#39;,&#39;5768&#39;,&#39;5770&#39;,&#39;5774&#39;,&#39;5779&#39;,&#39;5792&#39;,&#39;5811&#39;,&#39;5814&#39;,&#39;5819&#39;,&#39;5829&#39;,&#39;5830&#39;,&#39;5831&#39;,&#39;5856&#39;,&#39;5862&#39;,&#39;5875&#39;,&#39;5876&#39;,&#39;5879&#39;,&#39;5883&#39;,&#39;5885&#39;,&#39;5899&#39;,&#39;5903&#39;,&#39;5907&#39;,&#39;5908&#39;,&#39;5913&#39;,&#39;5921&#39;,&#39;5934&#39;,&#39;5941&#39;,&#39;5948&#39;,&#39;5953&#39;,&#39;5960&#39;,&#39;5964&#39;,&#39;5969&#39;,&#39;5973&#39;,&#39;5981&#39;,&#39;5985&#39;,&#39;5992&#39;,&#39;5993&#39;,&#39;5996&#39;,&#39;5998&#39;,&#39;6002&#39;,&#39;6004&#39;,&#39;6008&#39;,&#39;6015&#39;,&#39;6018&#39;,&#39;6020&#39;,&#39;6028&#39;,&#39;6034&#39;,&#39;6036&#39;,&#39;6048&#39;,&#39;6049&#39;,&#39;6059&#39;,&#39;6067&#39;,&#39;6073&#39;,&#39;6081&#39;,&#39;6084&#39;,&#39;6086&#39;,&#39;6093&#39;,&#39;6114&#39;,&#39;6122&#39;,&#39;6130&#39;,&#39;6137&#39;,&#39;6138&#39;,&#39;6142&#39;,&#39;6143&#39;,&#39;6157&#39;,&#39;6163&#39;,&#39;6165&#39;,&#39;6167&#39;,&#39;6178&#39;,&#39;6187&#39;,&#39;6192&#39;,&#39;6195&#39;,&#39;6201&#39;,&#39;6205&#39;,&#39;6206&#39;,&#39;6209&#39;,&#39;6218&#39;,&#39;6230&#39;,&#39;6245&#39;,&#39;6254&#39;,&#39;6260&#39;,&#39;6264&#39;,&#39;6275&#39;,&#39;6280&#39;,&#39;6281&#39;,&#39;6284&#39;,&#39;6305&#39;,&#39;6308&#39;,&#39;6312&#39;,&#39;6325&#39;,&#39;6326&#39;,&#39;6334&#39;,&#39;6359&#39;,&#39;6360&#39;,&#39;6362&#39;,&#39;6367&#39;,&#39;6373&#39;,&#39;6379&#39;,&#39;6389&#39;,&#39;6390&#39;,&#39;6394&#39;,&#39;6403&#39;,&#39;6417&#39;,&#39;6420&#39;,&#39;6423&#39;,&#39;6438&#39;,&#39;6443&#39;,&#39;6451&#39;,&#39;6459&#39;,&#39;6463&#39;,&#39;6466&#39;,&#39;6468&#39;,&#39;6470&#39;,&#39;6477&#39;,&#39;6482&#39;,&#39;6491&#39;,&#39;6500&#39;,&#39;6505&#39;,&#39;6509&#39;,&#39;6514&#39;,&#39;6518&#39;,&#39;6520&#39;,&#39;6525&#39;,&#39;6528&#39;,&#39;6541&#39;,&#39;6544&#39;,&#39;6547&#39;,&#39;6551&#39;,&#39;6559&#39;,&#39;6574&#39;,&#39;6585&#39;,&#39;6589&#39;,&#39;6594&#39;,&#39;6606&#39;,&#39;6609&#39;,&#39;6619&#39;,&#39;6627&#39;,&#39;6661&#39;,&#39;6668&#39;,&#39;6670&#39;,&#39;6671&#39;,&#39;6674&#39;,&#39;6680&#39;,&#39;6688&#39;,&#39;6696&#39;,&#39;6699&#39;,&#39;6707&#39;,&#39;6713&#39;,&#39;6718&#39;,&#39;6724&#39;,&#39;6745&#39;,&#39;6751&#39;,&#39;6755&#39;,&#39;6773&#39;,&#39;6781&#39;,&#39;6798&#39;,&#39;6810&#39;,&#39;6812&#39;,&#39;6844&#39;,&#39;6859&#39;,&#39;6860&#39;,&#39;6877&#39;,&#39;6878&#39;,&#39;6879&#39;,&#39;6888&#39;,&#39;6889&#39;,&#39;6891&#39;,&#39;6893&#39;,&#39;6901&#39;,&#39;6909&#39;,&#39;6912&#39;,&#39;6925&#39;,&#39;6926&#39;,&#39;6932&#39;,&#39;6935&#39;,&#39;6942&#39;,&#39;6943&#39;,&#39;6950&#39;,&#39;6957&#39;,&#39;6970&#39;,&#39;6976&#39;,&#39;6981&#39;,&#39;6987&#39;,&#39;6989&#39;,&#39;6990&#39;,&#39;6991&#39;,&#39;6997&#39;,&#39;7001&#39;,&#39;7005&#39;,&#39;7026&#39;,&#39;7027&#39;,&#39;7035&#39;,&#39;7048&#39;,&#39;7053&#39;,&#39;7057&#39;,&#39;7059&#39;,&#39;7061&#39;,&#39;7064&#39;,&#39;7080&#39;,&#39;7083&#39;,&#39;7089&#39;,&#39;7090&#39;,&#39;7091&#39;,&#39;7092&#39;,&#39;7094&#39;,&#39;7096&#39;,&#39;7104&#39;,&#39;7106&#39;,&#39;7108&#39;,&#39;7111&#39;,&#39;7112&#39;,&#39;7115&#39;,&#39;7129&#39;,&#39;7137&#39;,&#39;7144&#39;,&#39;7155&#39;,&#39;7157&#39;,&#39;7167&#39;,&#39;7177&#39;,&#39;7180&#39;,&#39;7200&#39;,&#39;7202&#39;,&#39;7214&#39;,&#39;7232&#39;,&#39;7235&#39;,&#39;7238&#39;,&#39;7248&#39;,&#39;7252&#39;,&#39;7256&#39;,&#39;7268&#39;,&#39;7272&#39;,&#39;7287&#39;,&#39;7292&#39;,&#39;7301&#39;,&#39;7322&#39;,&#39;7324&#39;,&#39;7326&#39;,&#39;7331&#39;,&#39;7333&#39;,&#39;7346&#39;,&#39;7349&#39;,&#39;7356&#39;,&#39;7359&#39;,&#39;7361&#39;,&#39;7371&#39;,&#39;7376&#39;,&#39;7377&#39;,&#39;7387&#39;,&#39;7388&#39;,&#39;7394&#39;,&#39;7401&#39;,&#39;7426&#39;,&#39;7427&#39;,&#39;7432&#39;,&#39;7435&#39;,&#39;7437&#39;,&#39;7438&#39;,&#39;7445&#39;,&#39;7446&#39;,&#39;7451&#39;,&#39;7454&#39;,&#39;7468&#39;,&#39;7485&#39;,&#39;7486&#39;,&#39;7514&#39;,&#39;7517&#39;,&#39;7536&#39;,&#39;7540&#39;,&#39;7544&#39;,&#39;7551&#39;,&#39;7555&#39;,&#39;7557&#39;,&#39;7572&#39;,&#39;7577&#39;,&#39;7589&#39;,&#39;7604&#39;,&#39;7606&#39;,&#39;7626&#39;,&#39;7627&#39;,&#39;7633&#39;,&#39;7642&#39;,&#39;7643&#39;,&#39;7652&#39;,&#39;7654&#39;,&#39;7668&#39;,&#39;7690&#39;,&#39;7696&#39;,&#39;7697&#39;,&#39;7702&#39;,&#39;7717&#39;,&#39;7721&#39;,&#39;7743&#39;,&#39;7746&#39;,&#39;7748&#39;,&#39;7749&#39;,&#39;7750&#39;,&#39;7751&#39;,&#39;7760&#39;,&#39;7764&#39;,&#39;7765&#39;,&#39;7772&#39;,&#39;7777&#39;,&#39;7779&#39;,&#39;7808&#39;,&#39;7813&#39;,&#39;7828&#39;,&#39;7863&#39;,&#39;7870&#39;,&#39;7876&#39;,&#39;7884&#39;,&#39;7889&#39;,&#39;7897&#39;,&#39;7898&#39;,&#39;7900&#39;,&#39;7903&#39;,&#39;7911&#39;,&#39;7912&#39;,&#39;7919&#39;,&#39;7922&#39;,&#39;7925&#39;,&#39;7934&#39;,&#39;7936&#39;,&#39;7944&#39;,&#39;7945&#39;,&#39;7947&#39;,&#39;7962&#39;,&#39;7964&#39;,&#39;7969&#39;,&#39;7975&#39;,&#39;7978&#39;,&#39;7990&#39;,&#39;7994&#39;,&#39;8000&#39;,&#39;8015&#39;,&#39;8023&#39;,&#39;8028&#39;,&#39;8035&#39;,&#39;8040&#39;,&#39;8041&#39;,&#39;8048&#39;,&#39;8051&#39;,&#39;8055&#39;,&#39;8056&#39;,&#39;8057&#39;,&#39;8062&#39;,&#39;8071&#39;,&#39;8080&#39;,&#39;8083&#39;,&#39;8086&#39;,&#39;8097&#39;,&#39;8102&#39;,&#39;8106&#39;,&#39;8113&#39;,&#39;8120&#39;,&#39;8135&#39;,&#39;8139&#39;,&#39;8152&#39;,&#39;8164&#39;,&#39;8172&#39;,&#39;8174&#39;,&#39;8175&#39;,&#39;8178&#39;,&#39;8182&#39;,&#39;8191&#39;,&#39;8199&#39;,&#39;8205&#39;,&#39;8210&#39;,&#39;8211&#39;,&#39;8216&#39;,&#39;8221&#39;,&#39;8223&#39;,&#39;8224&#39;,&#39;8232&#39;,&#39;8240&#39;,&#39;8241&#39;,&#39;8252&#39;,&#39;8275&#39;,&#39;8292&#39;,&#39;8303&#39;,&#39;8306&#39;,&#39;8307&#39;,&#39;8321&#39;,&#39;8326&#39;,&#39;8335&#39;,&#39;8350&#39;,&#39;8358&#39;,&#39;8365&#39;,&#39;8374&#39;,&#39;8376&#39;,&#39;8386&#39;,&#39;8387&#39;,&#39;8396&#39;,&#39;8398&#39;,&#39;8404&#39;,&#39;8411&#39;,&#39;8433&#39;,&#39;8443&#39;,&#39;8456&#39;,&#39;8458&#39;,&#39;8479&#39;,&#39;8482&#39;,&#39;8489&#39;,&#39;8496&#39;,&#39;8499&#39;,&#39;8504&#39;,&#39;8511&#39;,&#39;8521&#39;,&#39;8523&#39;,&#39;8524&#39;,&#39;8529&#39;,&#39;8530&#39;,&#39;8534&#39;,&#39;8538&#39;,&#39;8548&#39;,&#39;8549&#39;,&#39;8555&#39;,&#39;8558&#39;,&#39;8561&#39;,&#39;8562&#39;,&#39;8571&#39;,&#39;8579&#39;,&#39;8589&#39;,&#39;8593&#39;,&#39;8606&#39;,&#39;8614&#39;,&#39;8628&#39;,&#39;8629&#39;,&#39;8638&#39;,&#39;8640&#39;,&#39;8653&#39;,&#39;8661&#39;,&#39;8669&#39;,&#39;8676&#39;,&#39;8694&#39;,&#39;8698&#39;,&#39;8720&#39;,&#39;8723&#39;,&#39;8729&#39;,&#39;8733&#39;,&#39;8742&#39;,&#39;8745&#39;,&#39;8752&#39;,&#39;8756&#39;,&#39;8758&#39;,&#39;8763&#39;,&#39;8774&#39;,&#39;8791&#39;,&#39;8795&#39;,&#39;8809&#39;,&#39;8816&#39;,&#39;8820&#39;,&#39;8821&#39;,&#39;8836&#39;,&#39;8837&#39;,&#39;8838&#39;,&#39;8840&#39;,&#39;8845&#39;,&#39;8849&#39;,&#39;8851&#39;,&#39;8853&#39;,&#39;8856&#39;,&#39;8865&#39;,&#39;8867&#39;,&#39;8877&#39;,&#39;8878&#39;,&#39;8892&#39;,&#39;8901&#39;,&#39;8906&#39;,&#39;8912&#39;,&#39;8914&#39;,&#39;8915&#39;,&#39;8923&#39;,&#39;8941&#39;,&#39;8946&#39;,&#39;8956&#39;,&#39;8972&#39;,&#39;8981&#39;,&#39;8986&#39;,&#39;8991&#39;,&#39;8992&#39;,&#39;9007&#39;,&#39;9023&#39;,&#39;9026&#39;,&#39;9039&#39;,&#39;9041&#39;,&#39;9049&#39;,&#39;9074&#39;,&#39;9077&#39;,&#39;9086&#39;,&#39;9096&#39;,&#39;9101&#39;,&#39;9106&#39;,&#39;9114&#39;,&#39;9120&#39;,&#39;9132&#39;,&#39;9135&#39;,&#39;9137&#39;,&#39;9138&#39;,&#39;9159&#39;,&#39;9161&#39;,&#39;9164&#39;,&#39;9183&#39;,&#39;9189&#39;,&#39;9204&#39;,&#39;9210&#39;,&#39;9217&#39;,&#39;9220&#39;,&#39;9226&#39;,&#39;9228&#39;,&#39;9231&#39;,&#39;9236&#39;,&#39;9237&#39;,&#39;9239&#39;,&#39;9243&#39;,&#39;9245&#39;,&#39;9248&#39;,&#39;9250&#39;,&#39;9260&#39;,&#39;9262&#39;,&#39;9264&#39;,&#39;9274&#39;,&#39;9277&#39;,&#39;9299&#39;,&#39;9310&#39;,&#39;9311&#39;,&#39;9314&#39;,&#39;9316&#39;,&#39;9336&#39;,&#39;9356&#39;,&#39;9365&#39;,&#39;9367&#39;,&#39;9368&#39;,&#39;9370&#39;,&#39;9374&#39;,&#39;9378&#39;,&#39;9393&#39;,&#39;9398&#39;,&#39;9411&#39;,&#39;9415&#39;,&#39;9439&#39;,&#39;9440&#39;,&#39;9452&#39;,&#39;9468&#39;,&#39;9470&#39;,&#39;9474&#39;,&#39;9476&#39;,&#39;9477&#39;,&#39;9484&#39;,&#39;9493&#39;,&#39;9507&#39;,&#39;9516&#39;,&#39;9517&#39;,&#39;9534&#39;,&#39;9538&#39;,&#39;9542&#39;,&#39;9554&#39;,&#39;9557&#39;,&#39;9569&#39;,&#39;9570&#39;,&#39;9579&#39;,&#39;9587&#39;,&#39;9602&#39;,&#39;9613&#39;,&#39;9626&#39;,&#39;9636&#39;,&#39;9672&#39;,&#39;9691&#39;,&#39;9713&#39;,&#39;9725&#39;,&#39;9739&#39;,&#39;9744&#39;,&#39;9747&#39;,&#39;9754&#39;,&#39;9758&#39;,&#39;9760&#39;,&#39;9763&#39;,&#39;9765&#39;,&#39;9772&#39;,&#39;9775&#39;,&#39;9778&#39;,&#39;9779&#39;,&#39;9792&#39;,&#39;9801&#39;,&#39;9818&#39;,&#39;9826&#39;,&#39;9864&#39;,&#39;9871&#39;,&#39;9875&#39;,&#39;9876&#39;,&#39;9920&#39;,&#39;9921&#39;,&#39;9923&#39;,&#39;9929&#39;,&#39;9939&#39;,&#39;9943&#39;,&#39;9949&#39;,&#39;9953&#39;,&#39;9957&#39;,&#39;9971&#39;,&#39;9984&#39;,&#39;9991&#39;,&#39;10007&#39;,&#39;10010&#39;,&#39;10017&#39;,&#39;10020&#39;,&#39;10026&#39;,&#39;10027&#39;,&#39;10034&#39;,&#39;10046&#39;,&#39;10053&#39;,&#39;10055&#39;,&#39;10058&#39;,&#39;10060&#39;,&#39;10061&#39;,&#39;10063&#39;,&#39;10067&#39;,&#39;10077&#39;,&#39;10078&#39;,&#39;10095&#39;,&#39;10101&#39;,&#39;10106&#39;,&#39;10132&#39;,&#39;10133&#39;,&#39;10135&#39;,&#39;10140&#39;,&#39;10149&#39;,&#39;10150&#39;,&#39;10157&#39;,&#39;10160&#39;,&#39;10163&#39;,&#39;10181&#39;,&#39;10190&#39;,&#39;10192&#39;,&#39;10208&#39;,&#39;10221&#39;,&#39;10226&#39;,&#39;10243&#39;,&#39;10251&#39;,&#39;10256&#39;,&#39;10271&#39;,&#39;10274&#39;,&#39;10279&#39;,&#39;10289&#39;,&#39;10296&#39;,&#39;10305&#39;,&#39;10314&#39;,&#39;10348&#39;,&#39;10368&#39;,&#39;10372&#39;,&#39;10373&#39;,&#39;10379&#39;,&#39;10388&#39;,&#39;10403&#39;,&#39;10417&#39;,&#39;10428&#39;,&#39;10429&#39;,&#39;10432&#39;,&#39;10433&#39;,&#39;10435&#39;,&#39;10436&#39;,&#39;10442&#39;,&#39;10444&#39;,&#39;10449&#39;,&#39;10452&#39;,&#39;10453&#39;,&#39;10456&#39;,&#39;10460&#39;,&#39;10472&#39;,&#39;10495&#39;,&#39;10504&#39;,&#39;10513&#39;,&#39;10540&#39;,&#39;10546&#39;,&#39;10551&#39;,&#39;10561&#39;,&#39;10580&#39;,&#39;10586&#39;,&#39;10587&#39;,&#39;10589&#39;,&#39;10599&#39;,&#39;10612&#39;,&#39;10632&#39;,&#39;10642&#39;,&#39;10644&#39;,&#39;10645&#39;,&#39;10647&#39;,&#39;10660&#39;,&#39;10679&#39;,&#39;10681&#39;,&#39;10682&#39;,&#39;10684&#39;,&#39;10685&#39;,&#39;10687&#39;,&#39;10692&#39;,&#39;10693&#39;,&#39;10697&#39;,&#39;10709&#39;,&#39;10715&#39;,&#39;10720&#39;,&#39;10738&#39;,&#39;10745&#39;,&#39;10748&#39;,&#39;10751&#39;,&#39;10760&#39;,&#39;10762&#39;,&#39;10773&#39;,&#39;10788&#39;,&#39;10797&#39;,&#39;10798&#39;,&#39;10800&#39;,&#39;10819&#39;,&#39;10820&#39;,&#39;10826&#39;,&#39;10830&#39;,&#39;10859&#39;,&#39;10860&#39;,&#39;10863&#39;,&#39;10867&#39;,&#39;10877&#39;,&#39;10884&#39;,&#39;10895&#39;,&#39;10896&#39;,&#39;10902&#39;,&#39;10909&#39;,&#39;10910&#39;,&#39;10911&#39;,&#39;10912&#39;,&#39;10914&#39;,&#39;10916&#39;,&#39;10918&#39;,&#39;10921&#39;,&#39;10924&#39;,&#39;10937&#39;,&#39;10941&#39;,&#39;10968&#39;,&#39;10980&#39;,&#39;10981&#39;,&#39;10984&#39;,&#39;10987&#39;,&#39;10988&#39;,&#39;10993&#39;,&#39;10997&#39;,&#39;11003&#39;,&#39;11023&#39;,&#39;11026&#39;,&#39;11051&#39;,&#39;11056&#39;,&#39;11066&#39;,&#39;11077&#39;,&#39;11082&#39;,&#39;11086&#39;,&#39;11091&#39;,&#39;11092&#39;,&#39;11102&#39;,&#39;11108&#39;,&#39;11110&#39;,&#39;11118&#39;,&#39;11128&#39;,&#39;11138&#39;,&#39;11141&#39;,&#39;11146&#39;,&#39;11174&#39;,&#39;11177&#39;,&#39;11180&#39;,&#39;11194&#39;,&#39;11195&#39;,&#39;11205&#39;,&#39;11208&#39;,&#39;11213&#39;,&#39;11217&#39;,&#39;11220&#39;,&#39;11224&#39;,&#39;11243&#39;,&#39;11244&#39;,&#39;11253&#39;,&#39;11255&#39;,&#39;11262&#39;,&#39;11270&#39;,&#39;11272&#39;,&#39;11285&#39;,&#39;11287&#39;,&#39;11296&#39;,&#39;11297&#39;,&#39;11301&#39;,&#39;11307&#39;,&#39;11308&#39;,&#39;11318&#39;,&#39;11321&#39;,&#39;11339&#39;,&#39;11346&#39;,&#39;11356&#39;,&#39;11364&#39;,&#39;11366&#39;,&#39;11370&#39;,&#39;11375&#39;,&#39;11377&#39;,&#39;11380&#39;,&#39;11404&#39;,&#39;11405&#39;,&#39;11410&#39;,&#39;11414&#39;,&#39;11417&#39;,&#39;11446&#39;,&#39;11448&#39;,&#39;11451&#39;,&#39;11459&#39;,&#39;11464&#39;,&#39;11476&#39;,&#39;11479&#39;,&#39;11502&#39;,&#39;11512&#39;,&#39;11515&#39;,&#39;11537&#39;,&#39;11541&#39;,&#39;11542&#39;,&#39;11544&#39;,&#39;11551&#39;,&#39;11563&#39;,&#39;11565&#39;,&#39;11578&#39;,&#39;11581&#39;,&#39;11585&#39;,&#39;11592&#39;,&#39;11595&#39;,&#39;11599&#39;,&#39;11600&#39;,&#39;11605&#39;,&#39;11618&#39;,&#39;11630&#39;,&#39;11637&#39;,&#39;11643&#39;,&#39;11648&#39;,&#39;11652&#39;,&#39;11654&#39;,&#39;11657&#39;,&#39;11664&#39;,&#39;11667&#39;,&#39;11671&#39;,&#39;11674&#39;,&#39;11677&#39;,&#39;11678&#39;,&#39;11688&#39;,&#39;11698&#39;,&#39;11699&#39;,&#39;11701&#39;,&#39;11705&#39;,&#39;11707&#39;,&#39;11710&#39;,&#39;11721&#39;,&#39;11724&#39;,&#39;11728&#39;,&#39;11736&#39;,&#39;11751&#39;,&#39;11757&#39;,&#39;11758&#39;,&#39;11762&#39;,&#39;11771&#39;,&#39;11780&#39;,&#39;11783&#39;,&#39;11784&#39;,&#39;11796&#39;,&#39;11798&#39;,&#39;11801&#39;,&#39;11809&#39;,&#39;11813&#39;,&#39;11821&#39;,&#39;11826&#39;,&#39;11844&#39;,&#39;11845&#39;,&#39;11848&#39;,&#39;11854&#39;,&#39;11858&#39;,&#39;11863&#39;,&#39;11864&#39;,&#39;11867&#39;,&#39;11871&#39;,&#39;11874&#39;,&#39;11891&#39;,&#39;11892&#39;,&#39;11894&#39;,&#39;11897&#39;,&#39;11902&#39;,&#39;11907&#39;,&#39;11910&#39;,&#39;11912&#39;,&#39;11914&#39;,&#39;11917&#39;,&#39;11943&#39;,&#39;11947&#39;,&#39;11950&#39;,&#39;11958&#39;,&#39;11967&#39;,&#39;11999&#39;,&#39;12023&#39;,&#39;12028&#39;,&#39;12036&#39;,&#39;12039&#39;,&#39;12060&#39;,&#39;12066&#39;,&#39;12074&#39;,&#39;12076&#39;,&#39;12080&#39;,&#39;12082&#39;,&#39;12086&#39;,&#39;12087&#39;,&#39;12096&#39;,&#39;12106&#39;,&#39;12115&#39;,&#39;12120&#39;,&#39;12126&#39;,&#39;12136&#39;,&#39;12139&#39;,&#39;12143&#39;,&#39;12150&#39;,&#39;12155&#39;,&#39;12159&#39;,&#39;12164&#39;,&#39;12182&#39;,&#39;12193&#39;,&#39;12195&#39;,&#39;12196&#39;,&#39;12205&#39;,&#39;12213&#39;,&#39;12238&#39;,&#39;12242&#39;,&#39;12244&#39;,&#39;12253&#39;,&#39;12257&#39;,&#39;12271&#39;,&#39;12281&#39;,&#39;12284&#39;,&#39;12292&#39;,&#39;12295&#39;,&#39;12301&#39;,&#39;12318&#39;,&#39;12329&#39;,&#39;12337&#39;,&#39;12338&#39;,&#39;12352&#39;,&#39;12360&#39;,&#39;12363&#39;,&#39;12364&#39;,&#39;12374&#39;,&#39;12382&#39;,&#39;12401&#39;,&#39;12432&#39;,&#39;12438&#39;,&#39;12440&#39;,&#39;12443&#39;,&#39;12444&#39;,&#39;12455&#39;,&#39;12459&#39;,&#39;12461&#39;,&#39;12464&#39;,&#39;12486&#39;,&#39;12491&#39;,&#39;12498&#39;,&#39;12510&#39;,&#39;12513&#39;,&#39;12514&#39;,&#39;12534&#39;,&#39;12537&#39;,&#39;12539&#39;,&#39;12540&#39;,&#39;12551&#39;,&#39;12564&#39;,&#39;12567&#39;,&#39;12573&#39;,&#39;12574&#39;,&#39;12581&#39;,&#39;12584&#39;,&#39;12586&#39;,&#39;12600&#39;,&#39;12603&#39;,&#39;12611&#39;,&#39;12615&#39;,&#39;12625&#39;,&#39;12629&#39;,&#39;12638&#39;,&#39;12642&#39;,&#39;12656&#39;,&#39;12659&#39;,&#39;12661&#39;,&#39;12671&#39;,&#39;12677&#39;,&#39;12678&#39;,&#39;12684&#39;,&#39;12692&#39;,&#39;12693&#39;,&#39;12695&#39;,&#39;12697&#39;,&#39;12716&#39;,&#39;12724&#39;,&#39;12735&#39;,&#39;12756&#39;,&#39;12775&#39;,&#39;12787&#39;,&#39;12790&#39;,&#39;12805&#39;,&#39;12809&#39;,&#39;12824&#39;,&#39;12835&#39;,&#39;12837&#39;,&#39;12844&#39;,&#39;12845&#39;,&#39;12857&#39;,&#39;12861&#39;,&#39;12868&#39;,&#39;12876&#39;,&#39;12880&#39;,&#39;12881&#39;,&#39;12884&#39;,&#39;12893&#39;,&#39;12903&#39;,&#39;12908&#39;,&#39;12923&#39;,&#39;12926&#39;,&#39;12935&#39;,&#39;12940&#39;,&#39;12947&#39;,&#39;12953&#39;,&#39;12956&#39;,&#39;12965&#39;,&#39;12977&#39;,&#39;12979&#39;,&#39;12980&#39;,&#39;12984&#39;,&#39;12992&#39;,&#39;12996&#39;,&#39;12998&#39;,&#39;13002&#39;,&#39;13012&#39;,&#39;13027&#39;,&#39;13062&#39;,&#39;13066&#39;,&#39;13081&#39;,&#39;13087&#39;,&#39;13100&#39;,&#39;13103&#39;,&#39;13106&#39;,&#39;13107&#39;,&#39;13117&#39;,&#39;13120&#39;,&#39;13123&#39;,&#39;13131&#39;,&#39;13146&#39;,&#39;13148&#39;,&#39;13149&#39;,&#39;13154&#39;,&#39;13160&#39;,&#39;13162&#39;,&#39;13166&#39;,&#39;13170&#39;,&#39;13184&#39;,&#39;13185&#39;,&#39;13186&#39;,&#39;13190&#39;,&#39;13192&#39;,&#39;13193&#39;,&#39;13196&#39;,&#39;13215&#39;,&#39;13216&#39;,&#39;13218&#39;,&#39;13219&#39;,&#39;13230&#39;,&#39;13238&#39;,&#39;13239&#39;,&#39;13244&#39;,&#39;13247&#39;,&#39;13253&#39;,&#39;13259&#39;,&#39;13265&#39;,&#39;13266&#39;,&#39;13269&#39;,&#39;13282&#39;,&#39;13285&#39;,&#39;13286&#39;,&#39;13289&#39;,&#39;13300&#39;,&#39;13301&#39;,&#39;13307&#39;,&#39;13312&#39;,&#39;13313&#39;,&#39;13318&#39;,&#39;13320&#39;,&#39;13331&#39;,&#39;13332&#39;,&#39;13357&#39;,&#39;13358&#39;,&#39;13366&#39;,&#39;13367&#39;,&#39;13375&#39;,&#39;13389&#39;,&#39;13407&#39;,&#39;13408&#39;,&#39;13409&#39;,&#39;13410&#39;,&#39;13416&#39;,&#39;13429&#39;,&#39;13433&#39;,&#39;13438&#39;,&#39;13440&#39;,&#39;13459&#39;,&#39;13465&#39;,&#39;13470&#39;,&#39;13475&#39;,&#39;13481&#39;,&#39;13482&#39;,&#39;13483&#39;,&#39;13486&#39;,&#39;13487&#39;,&#39;13490&#39;,&#39;13502&#39;,&#39;13505&#39;,&#39;13506&#39;,&#39;13510&#39;,&#39;13514&#39;,&#39;13527&#39;,&#39;13540&#39;,&#39;13545&#39;,&#39;13546&#39;,&#39;13547&#39;,&#39;13564&#39;,&#39;13565&#39;,&#39;13566&#39;,&#39;13570&#39;,&#39;13572&#39;,&#39;13576&#39;,&#39;13578&#39;,&#39;13580&#39;,&#39;13581&#39;,&#39;13583&#39;,&#39;13585&#39;,&#39;13591&#39;,&#39;13593&#39;,&#39;13595&#39;,&#39;13597&#39;,&#39;13601&#39;,&#39;13606&#39;,&#39;13611&#39;,&#39;13619&#39;,&#39;13624&#39;,&#39;13631&#39;,&#39;13635&#39;,&#39;13637&#39;,&#39;13638&#39;,&#39;13639&#39;,&#39;13651&#39;,&#39;13660&#39;,&#39;13678&#39;,&#39;13683&#39;,&#39;13686&#39;,&#39;13726&#39;,&#39;13729&#39;,&#39;13732&#39;,&#39;13737&#39;,&#39;13738&#39;,&#39;13741&#39;,&#39;13742&#39;,&#39;13756&#39;,&#39;13759&#39;,&#39;13762&#39;,&#39;13765&#39;,&#39;13769&#39;,&#39;13770&#39;,&#39;13775&#39;,&#39;13784&#39;,&#39;13792&#39;,&#39;13805&#39;,&#39;13808&#39;,&#39;13820&#39;,&#39;13827&#39;,&#39;13834&#39;,&#39;13841&#39;,&#39;13855&#39;,&#39;13857&#39;,&#39;13862&#39;,&#39;13868&#39;,&#39;13871&#39;,&#39;13881&#39;,&#39;13882&#39;,&#39;13889&#39;,&#39;13891&#39;,&#39;13896&#39;,&#39;13905&#39;,&#39;13911&#39;,&#39;13913&#39;,&#39;13926&#39;,&#39;13929&#39;,&#39;13932&#39;,&#39;13942&#39;,&#39;13962&#39;,&#39;13989&#39;,&#39;13990&#39;,&#39;13994&#39;,&#39;13995&#39;,&#39;13997&#39;,&#39;14003&#39;,&#39;14004&#39;,&#39;14006&#39;,&#39;14007&#39;,&#39;14010&#39;,&#39;14013&#39;,&#39;14015&#39;,&#39;14017&#39;,&#39;14019&#39;,&#39;14024&#39;,&#39;14026&#39;,&#39;14030&#39;,&#39;14033&#39;,&#39;14034&#39;,&#39;14069&#39;,&#39;14075&#39;,&#39;14078&#39;,&#39;14080&#39;,&#39;14081&#39;,&#39;14082&#39;,&#39;14085&#39;,&#39;14089&#39;,&#39;14090&#39;,&#39;14091&#39;,&#39;14093&#39;,&#39;14097&#39;,&#39;14099&#39;,&#39;14106&#39;,&#39;14107&#39;,&#39;14113&#39;,&#39;14116&#39;,&#39;14135&#39;,&#39;14147&#39;,&#39;14149&#39;,&#39;14153&#39;,&#39;14158&#39;,&#39;14160&#39;,&#39;14168&#39;,&#39;14169&#39;,&#39;14175&#39;,&#39;14176&#39;,&#39;14190&#39;,&#39;14192&#39;,&#39;14204&#39;,&#39;14206&#39;,&#39;14207&#39;,&#39;14218&#39;,&#39;14223&#39;,&#39;14231&#39;,&#39;14248&#39;,&#39;14249&#39;,&#39;14252&#39;,&#39;14258&#39;,&#39;14261&#39;,&#39;14266&#39;,&#39;14267&#39;,&#39;14272&#39;,&#39;14274&#39;,&#39;14280&#39;,&#39;14281&#39;,&#39;14286&#39;,&#39;14295&#39;,&#39;14297&#39;,&#39;14308&#39;,&#39;14319&#39;,&#39;14322&#39;,&#39;14324&#39;,&#39;14327&#39;,&#39;14328&#39;,&#39;14330&#39;,&#39;14332&#39;,&#39;14336&#39;,&#39;14337&#39;,&#39;14341&#39;,&#39;14351&#39;,&#39;14363&#39;,&#39;14369&#39;,&#39;14373&#39;,&#39;14376&#39;,&#39;14377&#39;,&#39;14378&#39;,&#39;14380&#39;,&#39;14381&#39;,&#39;14386&#39;,&#39;14390&#39;,&#39;14393&#39;,&#39;14398&#39;,&#39;14410&#39;,&#39;14417&#39;,&#39;14436&#39;,&#39;14438&#39;,&#39;14445&#39;,&#39;14447&#39;,&#39;14450&#39;,&#39;14451&#39;,&#39;14454&#39;,&#39;14457&#39;,&#39;14466&#39;,&#39;14467&#39;,&#39;14469&#39;,&#39;14472&#39;,&#39;14474&#39;,&#39;14480&#39;,&#39;14481&#39;,&#39;14485&#39;,&#39;14486&#39;,&#39;14495&#39;,&#39;14504&#39;,&#39;14509&#39;,&#39;14523&#39;,&#39;14526&#39;,&#39;14538&#39;,&#39;14555&#39;,&#39;14577&#39;,&#39;14595&#39;,&#39;14596&#39;,&#39;14602&#39;,&#39;14610&#39;,&#39;14611&#39;,&#39;14641&#39;,&#39;14646&#39;,&#39;14651&#39;,&#39;14652&#39;,&#39;14657&#39;,&#39;14688&#39;,&#39;14700&#39;,&#39;14707&#39;,&#39;14709&#39;,&#39;14722&#39;,&#39;14726&#39;,&#39;14727&#39;,&#39;14730&#39;,&#39;14735&#39;,&#39;14744&#39;,&#39;14750&#39;,&#39;14761&#39;,&#39;14766&#39;,&#39;14770&#39;,&#39;14778&#39;,&#39;14789&#39;,&#39;14795&#39;,&#39;14803&#39;,&#39;14804&#39;,&#39;14813&#39;,&#39;14820&#39;,&#39;14826&#39;,&#39;14837&#39;,&#39;14842&#39;,&#39;14849&#39;,&#39;14854&#39;,&#39;14856&#39;,&#39;14862&#39;,&#39;14874&#39;,&#39;14878&#39;,&#39;14879&#39;,&#39;14880&#39;,&#39;14909&#39;,&#39;14925&#39;,&#39;14931&#39;,&#39;14936&#39;,&#39;14945&#39;,&#39;14961&#39;,&#39;14966&#39;,&#39;14968&#39;,&#39;14975&#39;,&#39;14989&#39;,&#39;14991&#39;,&#39;14996&#39;,&#39;14999&#39;,&#39;15013&#39;,&#39;15024&#39;,&#39;15025&#39;,&#39;15047&#39;,&#39;15049&#39;,&#39;15060&#39;,&#39;15061&#39;,&#39;15064&#39;,&#39;15074&#39;,&#39;15088&#39;,&#39;15092&#39;,&#39;15105&#39;,&#39;15111&#39;,&#39;15112&#39;,&#39;15118&#39;,&#39;15119&#39;,&#39;15121&#39;,&#39;15123&#39;,&#39;15128&#39;,&#39;15135&#39;,&#39;15143&#39;,&#39;15155&#39;,&#39;15156&#39;,&#39;15164&#39;,&#39;15168&#39;,&#39;15172&#39;,&#39;15173&#39;,&#39;15175&#39;,&#39;15177&#39;,&#39;15181&#39;,&#39;15192&#39;,&#39;15196&#39;,&#39;15201&#39;,&#39;15203&#39;,&#39;15212&#39;,&#39;15213&#39;,&#39;15214&#39;,&#39;15216&#39;,&#39;15224&#39;,&#39;15229&#39;,&#39;15234&#39;,&#39;15235&#39;,&#39;15236&#39;,&#39;15250&#39;,&#39;15253&#39;,&#39;15255&#39;,&#39;15261&#39;,&#39;15262&#39;,&#39;15267&#39;,&#39;15274&#39;,&#39;15277&#39;,&#39;15287&#39;,&#39;15320&#39;,&#39;15321&#39;,&#39;15329&#39;,&#39;15331&#39;,&#39;15332&#39;,&#39;15338&#39;,&#39;15340&#39;,&#39;15341&#39;,&#39;15352&#39;,&#39;15356&#39;,&#39;15359&#39;,&#39;15369&#39;,&#39;15379&#39;,&#39;15381&#39;,&#39;15386&#39;,&#39;15390&#39;,&#39;15394&#39;,&#39;15399&#39;,&#39;15406&#39;,&#39;15412&#39;,&#39;15413&#39;,&#39;15423&#39;,&#39;15428&#39;,&#39;15433&#39;,&#39;15442&#39;,&#39;15448&#39;,&#39;15455&#39;,&#39;15456&#39;,&#39;15460&#39;,&#39;15472&#39;,&#39;15473&#39;,&#39;15491&#39;,&#39;15494&#39;,&#39;15512&#39;,&#39;15529&#39;,&#39;15538&#39;,&#39;15559&#39;,&#39;15570&#39;,&#39;15582&#39;,&#39;15586&#39;,&#39;15588&#39;,&#39;15591&#39;,&#39;15592&#39;,&#39;15599&#39;,&#39;15603&#39;,&#39;15605&#39;,&#39;15606&#39;,&#39;15610&#39;,&#39;15613&#39;,&#39;15631&#39;,&#39;15632&#39;,&#39;15656&#39;,&#39;15664&#39;,&#39;15665&#39;,&#39;15670&#39;,&#39;15671&#39;,&#39;15677&#39;,&#39;15685&#39;,&#39;15697&#39;,&#39;15703&#39;,&#39;15719&#39;,&#39;15725&#39;,&#39;15731&#39;,&#39;15736&#39;,&#39;15739&#39;,&#39;15745&#39;,&#39;15746&#39;,&#39;15752&#39;,&#39;15753&#39;,&#39;15759&#39;,&#39;15770&#39;,&#39;15773&#39;,&#39;15775&#39;,&#39;15778&#39;,&#39;15782&#39;,&#39;15785&#39;,&#39;15786&#39;,&#39;15792&#39;,&#39;15796&#39;,&#39;15801&#39;,&#39;15804&#39;,&#39;15809&#39;,&#39;15810&#39;,&#39;15815&#39;,&#39;15817&#39;,&#39;15821&#39;,&#39;15827&#39;,&#39;15832&#39;,&#39;15833&#39;,&#39;15849&#39;,&#39;15855&#39;,&#39;15858&#39;,&#39;15866&#39;,&#39;15874&#39;,&#39;15879&#39;,&#39;15884&#39;,&#39;15894&#39;,&#39;15896&#39;,&#39;15907&#39;,&#39;15908&#39;,&#39;15915&#39;,&#39;15916&#39;,&#39;15930&#39;,&#39;15943&#39;,&#39;15952&#39;,&#39;15955&#39;,&#39;15960&#39;,&#39;15962&#39;,&#39;15973&#39;,&#39;15976&#39;,&#39;15989&#39;,&#39;15995&#39;,&#39;16002&#39;,&#39;16003&#39;,&#39;16006&#39;,&#39;16007&#39;,&#39;16017&#39;,&#39;16023&#39;,&#39;16029&#39;,&#39;16047&#39;,&#39;16049&#39;,&#39;16058&#39;,&#39;16065&#39;,&#39;16075&#39;,&#39;16092&#39;,&#39;16101&#39;,&#39;16107&#39;,&#39;16108&#39;,&#39;16123&#39;,&#39;16138&#39;,&#39;16141&#39;,&#39;16144&#39;,&#39;16155&#39;,&#39;16159&#39;,&#39;16171&#39;,&#39;16188&#39;,&#39;16192&#39;,&#39;16200&#39;,&#39;16201&#39;,&#39;16205&#39;,&#39;16208&#39;,&#39;16209&#39;,&#39;16214&#39;,&#39;16215&#39;,&#39;16218&#39;,&#39;16220&#39;,&#39;16221&#39;,&#39;16223&#39;,&#39;16224&#39;,&#39;16232&#39;,&#39;16242&#39;,&#39;16243&#39;,&#39;16252&#39;,&#39;16255&#39;,&#39;16261&#39;,&#39;16266&#39;,&#39;16267&#39;,&#39;16270&#39;,&#39;16271&#39;,&#39;16272&#39;,&#39;16276&#39;,&#39;16277&#39;,&#39;16288&#39;,&#39;16290&#39;,&#39;16299&#39;,&#39;16303&#39;,&#39;16305&#39;,&#39;16306&#39;,&#39;16315&#39;,&#39;16336&#39;,&#39;16342&#39;,&#39;16349&#39;,&#39;16355&#39;,&#39;16362&#39;,&#39;16371&#39;,&#39;16377&#39;,&#39;16378&#39;,&#39;16386&#39;,&#39;16390&#39;,&#39;16391&#39;,&#39;16434&#39;,&#39;16442&#39;,&#39;16448&#39;,&#39;16452&#39;,&#39;16462&#39;,&#39;16463&#39;,&#39;16466&#39;,&#39;16468&#39;,&#39;16491&#39;,&#39;16500&#39;,&#39;16502&#39;,&#39;16504&#39;,&#39;16519&#39;,&#39;16524&#39;,&#39;16536&#39;,&#39;16539&#39;,&#39;16542&#39;,&#39;16549&#39;,&#39;16555&#39;,&#39;16561&#39;,&#39;16565&#39;,&#39;16570&#39;,&#39;16576&#39;,&#39;16579&#39;,&#39;16594&#39;,&#39;16599&#39;,&#39;16603&#39;,&#39;16604&#39;,&#39;16605&#39;,&#39;16622&#39;,&#39;16623&#39;,&#39;16629&#39;,&#39;16635&#39;,&#39;16639&#39;,&#39;16640&#39;,&#39;16649&#39;,&#39;16657&#39;,&#39;16659&#39;,&#39;16662&#39;,&#39;16663&#39;,&#39;16666&#39;,&#39;16670&#39;,&#39;16671&#39;,&#39;16679&#39;,&#39;16687&#39;,&#39;16694&#39;,&#39;16696&#39;,&#39;16698&#39;,&#39;16700&#39;,&#39;16715&#39;,&#39;16723&#39;,&#39;16731&#39;,&#39;16733&#39;,&#39;16739&#39;,&#39;16743&#39;,&#39;16754&#39;,&#39;16755&#39;,&#39;16758&#39;,&#39;16762&#39;,&#39;16777&#39;,&#39;16800&#39;,&#39;16803&#39;,&#39;16806&#39;,&#39;16809&#39;,&#39;16828&#39;,&#39;16845&#39;,&#39;16867&#39;,&#39;16870&#39;,&#39;16882&#39;,&#39;16883&#39;,&#39;16891&#39;,&#39;16906&#39;,&#39;16909&#39;,&#39;16912&#39;,&#39;16913&#39;,&#39;16919&#39;,&#39;16922&#39;,&#39;16925&#39;,&#39;16926&#39;,&#39;16945&#39;,&#39;16947&#39;,&#39;16949&#39;,&#39;16967&#39;,&#39;16978&#39;,&#39;16981&#39;,&#39;16987&#39;,&#39;16990&#39;,&#39;16998&#39;,&#39;17001&#39;,&#39;17011&#39;,&#39;17012&#39;,&#39;17022&#39;,&#39;17024&#39;,&#39;17025&#39;,&#39;17028&#39;,&#39;17038&#39;,&#39;17040&#39;,&#39;17041&#39;,&#39;17042&#39;,&#39;17048&#39;,&#39;17050&#39;,&#39;17056&#39;,&#39;17061&#39;,&#39;17067&#39;,&#39;17070&#39;,&#39;17073&#39;,&#39;17093&#39;,&#39;17094&#39;,&#39;17105&#39;,&#39;17107&#39;,&#39;17110&#39;,&#39;17112&#39;,&#39;17114&#39;,&#39;17118&#39;,&#39;17127&#39;,&#39;17135&#39;,&#39;17149&#39;,&#39;17156&#39;,&#39;17165&#39;,&#39;17168&#39;,&#39;17171&#39;,&#39;17175&#39;,&#39;17187&#39;,&#39;17188&#39;,&#39;17193&#39;,&#39;17194&#39;,&#39;17197&#39;,&#39;17207&#39;,&#39;17209&#39;,&#39;17211&#39;,&#39;17218&#39;,&#39;17219&#39;,&#39;17221&#39;,&#39;17222&#39;,&#39;17226&#39;,&#39;17229&#39;,&#39;17240&#39;,&#39;17247&#39;,&#39;17251&#39;,&#39;17253&#39;,&#39;17276&#39;,&#39;17283&#39;,&#39;17292&#39;,&#39;17295&#39;,&#39;17302&#39;,&#39;17304&#39;,&#39;17315&#39;,&#39;17324&#39;,&#39;17326&#39;,&#39;17329&#39;,&#39;17331&#39;,&#39;17336&#39;,&#39;17347&#39;,&#39;17351&#39;,&#39;17353&#39;,&#39;17362&#39;,&#39;17363&#39;,&#39;17370&#39;,&#39;17377&#39;,&#39;17386&#39;,&#39;17388&#39;,&#39;17390&#39;,&#39;17399&#39;,&#39;17403&#39;,&#39;17404&#39;,&#39;17405&#39;,&#39;17407&#39;,&#39;17408&#39;,&#39;17411&#39;,&#39;17419&#39;,&#39;17435&#39;,&#39;17437&#39;,&#39;17441&#39;,&#39;17451&#39;,&#39;17463&#39;,&#39;17475&#39;,&#39;17482&#39;,&#39;17484&#39;,&#39;17485&#39;,&#39;17491&#39;,&#39;17493&#39;,&#39;17496&#39;,&#39;17503&#39;,&#39;17505&#39;,&#39;17507&#39;,&#39;17509&#39;,&#39;17520&#39;,&#39;17521&#39;,&#39;17529&#39;,&#39;17534&#39;,&#39;17535&#39;,&#39;17547&#39;,&#39;17558&#39;,&#39;17560&#39;,&#39;17568&#39;,&#39;17570&#39;,&#39;17579&#39;,&#39;17584&#39;,&#39;17587&#39;,&#39;17596&#39;,&#39;17598&#39;,&#39;17600&#39;,&#39;17601&#39;,&#39;17602&#39;,&#39;17605&#39;,&#39;17616&#39;,&#39;17632&#39;,&#39;17639&#39;,&#39;17648&#39;,&#39;17649&#39;,&#39;17652&#39;,&#39;17656&#39;,&#39;17660&#39;,&#39;17680&#39;,&#39;17681&#39;,&#39;17684&#39;,&#39;17691&#39;,&#39;17700&#39;,&#39;17701&#39;,&#39;17706&#39;,&#39;17710&#39;,&#39;17724&#39;,&#39;17729&#39;,&#39;17741&#39;,&#39;17742&#39;,&#39;17747&#39;,&#39;17750&#39;,&#39;17757&#39;,&#39;17762&#39;,&#39;17774&#39;,&#39;17775&#39;,&#39;17782&#39;,&#39;17786&#39;,&#39;17790&#39;,&#39;17804&#39;,&#39;17813&#39;,&#39;17830&#39;,&#39;17831&#39;,&#39;17832&#39;,&#39;17833&#39;,&#39;17835&#39;,&#39;17837&#39;,&#39;17842&#39;,&#39;17843&#39;,&#39;17845&#39;,&#39;17846&#39;,&#39;17847&#39;,&#39;17851&#39;,&#39;17854&#39;,&#39;17858&#39;,&#39;17861&#39;,&#39;17863&#39;,&#39;17866&#39;,&#39;17887&#39;,&#39;17897&#39;,&#39;17914&#39;,&#39;17919&#39;,&#39;17921&#39;,&#39;17922&#39;,&#39;17933&#39;,&#39;17941&#39;,&#39;17950&#39;,&#39;17961&#39;,&#39;17968&#39;,&#39;17974&#39;,&#39;17983&#39;,&#39;17988&#39;,&#39;17989&#39;,&#39;17998&#39;,&#39;17999&#39;,&#39;18000&#39;,&#39;18006&#39;,&#39;18019&#39;,&#39;18025&#39;,&#39;18035&#39;,&#39;18036&#39;,&#39;18049&#39;,&#39;18050&#39;,&#39;18058&#39;,&#39;18069&#39;,&#39;18077&#39;,&#39;18078&#39;,&#39;18092&#39;,&#39;18098&#39;,&#39;18103&#39;,&#39;18105&#39;,&#39;18114&#39;,&#39;18118&#39;,&#39;18119&#39;,&#39;18125&#39;,&#39;18127&#39;,&#39;18136&#39;,&#39;18138&#39;,&#39;18144&#39;,&#39;18149&#39;,&#39;18153&#39;,&#39;18158&#39;,&#39;18163&#39;,&#39;18166&#39;,&#39;18176&#39;,&#39;18181&#39;,&#39;18184&#39;,&#39;18192&#39;,&#39;18196&#39;,&#39;18209&#39;,&#39;18228&#39;,&#39;18229&#39;,&#39;18235&#39;,&#39;18236&#39;,&#39;18246&#39;,&#39;18269&#39;,&#39;18272&#39;,&#39;18283&#39;,&#39;18288&#39;,&#39;18290&#39;,&#39;18293&#39;,&#39;18295&#39;,&#39;18312&#39;,&#39;18326&#39;,&#39;18332&#39;,&#39;18335&#39;,&#39;18337&#39;,&#39;18343&#39;,&#39;18345&#39;,&#39;18353&#39;,&#39;18358&#39;,&#39;18364&#39;,&#39;18380&#39;,&#39;18382&#39;,&#39;18396&#39;,&#39;18402&#39;,&#39;18403&#39;,&#39;18417&#39;,&#39;18423&#39;,&#39;18427&#39;,&#39;18432&#39;,&#39;18435&#39;,&#39;18441&#39;,&#39;18454&#39;,&#39;18457&#39;,&#39;18461&#39;,&#39;18481&#39;,&#39;18488&#39;,&#39;18489&#39;,&#39;18494&#39;,&#39;18495&#39;,&#39;18502&#39;,&#39;18506&#39;,&#39;18518&#39;,&#39;18535&#39;,&#39;18536&#39;,&#39;18549&#39;,&#39;18554&#39;,&#39;18559&#39;,&#39;18595&#39;,&#39;18596&#39;,&#39;18612&#39;,&#39;18623&#39;,&#39;18625&#39;,&#39;18628&#39;,&#39;18629&#39;,&#39;18634&#39;,&#39;18637&#39;,&#39;18642&#39;,&#39;18645&#39;,&#39;18656&#39;,&#39;18662&#39;,&#39;18664&#39;,&#39;18673&#39;,&#39;18687&#39;,&#39;18693&#39;,&#39;18702&#39;,&#39;18715&#39;,&#39;18716&#39;,&#39;18719&#39;,&#39;18720&#39;,&#39;18725&#39;,&#39;18730&#39;,&#39;18742&#39;,&#39;18743&#39;,&#39;18746&#39;,&#39;18748&#39;,&#39;18755&#39;,&#39;18757&#39;,&#39;18772&#39;,&#39;18775&#39;,&#39;18776&#39;,&#39;18781&#39;,&#39;18787&#39;,&#39;18788&#39;,&#39;18790&#39;,&#39;18797&#39;,&#39;18809&#39;,&#39;18811&#39;,&#39;18813&#39;,&#39;18816&#39;,&#39;18823&#39;,&#39;18825&#39;,&#39;18851&#39;,&#39;18858&#39;,&#39;18871&#39;,&#39;18872&#39;,&#39;18875&#39;,&#39;18891&#39;,&#39;18903&#39;,&#39;18906&#39;,&#39;18907&#39;,&#39;18908&#39;,&#39;18910&#39;,&#39;18913&#39;,&#39;18915&#39;,&#39;18920&#39;,&#39;18937&#39;,&#39;18941&#39;,&#39;18942&#39;,&#39;18943&#39;,&#39;18946&#39;,&#39;18948&#39;,&#39;18949&#39;,&#39;18954&#39;,&#39;18957&#39;,&#39;18958&#39;,&#39;18962&#39;,&#39;18964&#39;,&#39;18968&#39;,&#39;18976&#39;,&#39;18981&#39;,&#39;18988&#39;,&#39;18990&#39;,&#39;18996&#39;,&#39;19005&#39;,&#39;19014&#39;,&#39;19019&#39;,&#39;19023&#39;,&#39;19031&#39;,&#39;19037&#39;,&#39;19040&#39;,&#39;19042&#39;,&#39;19058&#39;,&#39;19068&#39;,&#39;19070&#39;,&#39;19074&#39;,&#39;19079&#39;,&#39;19086&#39;,&#39;19091&#39;,&#39;19094&#39;,&#39;19095&#39;,&#39;19105&#39;,&#39;19110&#39;,&#39;19112&#39;,&#39;19115&#39;,&#39;19121&#39;,&#39;19122&#39;,&#39;19123&#39;,&#39;19136&#39;,&#39;19145&#39;,&#39;19157&#39;,&#39;19165&#39;,&#39;19169&#39;,&#39;19171&#39;,&#39;19176&#39;,&#39;19181&#39;,&#39;19186&#39;,&#39;19189&#39;,&#39;19194&#39;,&#39;19197&#39;,&#39;19199&#39;,&#39;19207&#39;,&#39;19208&#39;,&#39;19214&#39;,&#39;19223&#39;,&#39;19225&#39;,&#39;19228&#39;,&#39;19237&#39;,&#39;19249&#39;,&#39;19252&#39;,&#39;19255&#39;,&#39;19264&#39;,&#39;19268&#39;,&#39;19269&#39;,&#39;19270&#39;,&#39;19274&#39;,&#39;19295&#39;,&#39;19301&#39;,&#39;19307&#39;,&#39;19308&#39;,&#39;19314&#39;,&#39;19317&#39;,&#39;19318&#39;,&#39;19321&#39;,&#39;19323&#39;,&#39;19324&#39;,&#39;19335&#39;,&#39;19337&#39;,&#39;19339&#39;,&#39;19343&#39;,&#39;19348&#39;,&#39;19349&#39;,&#39;19353&#39;,&#39;19358&#39;,&#39;19364&#39;,&#39;19371&#39;,&#39;19382&#39;,&#39;19384&#39;,&#39;19385&#39;,&#39;19395&#39;,&#39;19398&#39;,&#39;19402&#39;,&#39;19405&#39;,&#39;19422&#39;,&#39;19430&#39;,&#39;19447&#39;,&#39;19448&#39;,&#39;19453&#39;,&#39;19454&#39;,&#39;19456&#39;,&#39;19465&#39;,&#39;19466&#39;,&#39;19476&#39;,&#39;19478&#39;,&#39;19484&#39;,&#39;19486&#39;,&#39;19488&#39;,&#39;19490&#39;,&#39;19501&#39;,&#39;19506&#39;,&#39;19514&#39;,&#39;19519&#39;,&#39;19521&#39;,&#39;19522&#39;,&#39;19527&#39;,&#39;19539&#39;,&#39;19540&#39;,&#39;19553&#39;,&#39;19555&#39;,&#39;19557&#39;,&#39;19564&#39;,&#39;19577&#39;,&#39;19579&#39;,&#39;19580&#39;,&#39;19590&#39;,&#39;19604&#39;,&#39;19612&#39;,&#39;19614&#39;,&#39;19623&#39;,&#39;19631&#39;,&#39;19634&#39;,&#39;19642&#39;,&#39;19648&#39;,&#39;19651&#39;,&#39;19654&#39;,&#39;19655&#39;,&#39;19656&#39;,&#39;19668&#39;,&#39;19677&#39;,&#39;19682&#39;,&#39;19686&#39;,&#39;19695&#39;,&#39;19721&#39;,&#39;19724&#39;,&#39;19730&#39;,&#39;19749&#39;,&#39;19751&#39;,&#39;19753&#39;,&#39;19755&#39;,&#39;19759&#39;,&#39;19762&#39;,&#39;19766&#39;,&#39;19767&#39;,&#39;19768&#39;,&#39;19772&#39;,&#39;19778&#39;,&#39;19791&#39;,&#39;19807&#39;,&#39;19812&#39;,&#39;19818&#39;,&#39;19829&#39;,&#39;19836&#39;,&#39;19838&#39;,&#39;19843&#39;,&#39;19847&#39;,&#39;19848&#39;,&#39;19850&#39;,&#39;19852&#39;,&#39;19853&#39;,&#39;19854&#39;,&#39;19858&#39;,&#39;19861&#39;,&#39;19868&#39;,&#39;19870&#39;,&#39;19878&#39;,&#39;19884&#39;,&#39;19910&#39;,&#39;19914&#39;,&#39;19918&#39;,&#39;19921&#39;,&#39;19922&#39;,&#39;19925&#39;,&#39;19928&#39;,&#39;19942&#39;,&#39;19943&#39;,&#39;19947&#39;,&#39;19950&#39;,&#39;19959&#39;,&#39;19971&#39;,&#39;19977&#39;,&#39;19981&#39;,&#39;19985&#39;,&#39;19986&#39;,&#39;19994&#39;,&#39;20000&#39;,&#39;20003&#39;,&#39;20007&#39;,&#39;20008&#39;,&#39;20015&#39;,&#39;20028&#39;,&#39;20029&#39;,&#39;20041&#39;,&#39;20056&#39;,&#39;20063&#39;,&#39;20069&#39;,&#39;20075&#39;,&#39;20078&#39;,&#39;20083&#39;,&#39;20085&#39;,&#39;20089&#39;,&#39;20091&#39;,&#39;20098&#39;,&#39;20105&#39;,&#39;20128&#39;,&#39;20129&#39;,&#39;20143&#39;,&#39;20146&#39;,&#39;20153&#39;,&#39;20154&#39;,&#39;20156&#39;,&#39;20159&#39;,&#39;20170&#39;,&#39;20180&#39;,&#39;20181&#39;,&#39;20182&#39;,&#39;20183&#39;,&#39;20188&#39;,&#39;20189&#39;,&#39;20195&#39;,&#39;20200&#39;,&#39;20204&#39;,&#39;20209&#39;,&#39;20216&#39;,&#39;20218&#39;,&#39;20221&#39;,&#39;20224&#39;,&#39;20229&#39;,&#39;20233&#39;,&#39;20234&#39;,&#39;20237&#39;,&#39;20239&#39;,&#39;20241&#39;,&#39;20253&#39;,&#39;20256&#39;,&#39;20260&#39;,&#39;20263&#39;,&#39;20264&#39;,&#39;20265&#39;,&#39;20268&#39;,&#39;20271&#39;,&#39;20274&#39;,&#39;20289&#39;,&#39;20290&#39;,&#39;20291&#39;,&#39;20304&#39;,&#39;20306&#39;,&#39;20307&#39;,&#39;20308&#39;,&#39;20311&#39;,&#39;20317&#39;,&#39;20324&#39;,&#39;20339&#39;,&#39;20348&#39;,&#39;20350&#39;,&#39;20357&#39;,&#39;20363&#39;,&#39;20369&#39;,&#39;20370&#39;,&#39;20376&#39;,&#39;20379&#39;,&#39;20387&#39;,&#39;20388&#39;,&#39;20403&#39;,&#39;20404&#39;,&#39;20407&#39;,&#39;20413&#39;,&#39;20415&#39;,&#39;20425&#39;,&#39;20433&#39;,&#39;20437&#39;,&#39;20440&#39;,&#39;20442&#39;,&#39;20443&#39;,&#39;20444&#39;,&#39;20446&#39;,&#39;20448&#39;,&#39;20450&#39;,&#39;20458&#39;,&#39;20464&#39;,&#39;20481&#39;,&#39;20489&#39;,&#39;20495&#39;,&#39;20496&#39;,&#39;20511&#39;,&#39;20512&#39;,&#39;20513&#39;,&#39;20514&#39;,&#39;20517&#39;,&#39;20522&#39;,&#39;20534&#39;,&#39;20535&#39;,&#39;20540&#39;,&#39;20541&#39;,&#39;20550&#39;,&#39;20555&#39;,&#39;20556&#39;,&#39;20558&#39;,&#39;20561&#39;,&#39;20569&#39;,&#39;20570&#39;,&#39;20573&#39;,&#39;20582&#39;,&#39;20613&#39;,&#39;20614&#39;,&#39;20623&#39;,&#39;20631&#39;,&#39;20637&#39;,&#39;20643&#39;,&#39;20647&#39;,&#39;20669&#39;,&#39;20686&#39;,&#39;20695&#39;,&#39;20696&#39;,&#39;20705&#39;,&#39;20707&#39;,&#39;20716&#39;,&#39;20718&#39;,&#39;20724&#39;,&#39;20728&#39;,&#39;20729&#39;,&#39;20736&#39;,&#39;20738&#39;,&#39;20742&#39;,&#39;20748&#39;,&#39;20761&#39;,&#39;20779&#39;,&#39;20782&#39;,&#39;20785&#39;,&#39;20793&#39;,&#39;20812&#39;,&#39;20814&#39;,&#39;20840&#39;,&#39;20846&#39;,&#39;20848&#39;,&#39;20853&#39;,&#39;20857&#39;,&#39;20872&#39;,&#39;20875&#39;,&#39;20880&#39;,&#39;20881&#39;,&#39;20885&#39;,&#39;20891&#39;,&#39;20899&#39;,&#39;20914&#39;,&#39;20917&#39;,&#39;20924&#39;,&#39;20937&#39;,&#39;20943&#39;,&#39;20944&#39;,&#39;20947&#39;,&#39;20959&#39;,&#39;20970&#39;,&#39;20974&#39;,&#39;20982&#39;,&#39;20984&#39;,&#39;20985&#39;,&#39;20986&#39;,&#39;21003&#39;,&#39;21006&#39;,&#39;21013&#39;,&#39;21028&#39;,&#39;21032&#39;,&#39;21036&#39;,&#39;21047&#39;,&#39;21054&#39;,&#39;21056&#39;,&#39;21057&#39;,&#39;21058&#39;,&#39;21079&#39;,&#39;21087&#39;,&#39;21094&#39;,&#39;21097&#39;,&#39;21102&#39;,&#39;21111&#39;,&#39;21113&#39;,&#39;21118&#39;,&#39;21120&#39;,&#39;21131&#39;,&#39;21138&#39;,&#39;21153&#39;,&#39;21154&#39;,&#39;21167&#39;,&#39;21168&#39;,&#39;21170&#39;,&#39;21172&#39;,&#39;21186&#39;,&#39;21187&#39;,&#39;21191&#39;,&#39;21202&#39;,&#39;21213&#39;,&#39;21216&#39;,&#39;21217&#39;,&#39;21220&#39;,&#39;21227&#39;,&#39;21238&#39;,&#39;21241&#39;,&#39;21247&#39;,&#39;21249&#39;,&#39;21271&#39;,&#39;21281&#39;,&#39;21290&#39;,&#39;21300&#39;,&#39;21304&#39;,&#39;21306&#39;,&#39;21312&#39;,&#39;21316&#39;,&#39;21318&#39;,&#39;21320&#39;,&#39;21328&#39;,&#39;21334&#39;,&#39;21337&#39;,&#39;21338&#39;,&#39;21348&#39;,&#39;21350&#39;,&#39;21352&#39;,&#39;21356&#39;,&#39;21399&#39;,&#39;21403&#39;,&#39;21423&#39;,&#39;21424&#39;,&#39;21435&#39;,&#39;21441&#39;,&#39;21449&#39;,&#39;21455&#39;,&#39;21463&#39;,&#39;21478&#39;,&#39;21481&#39;,&#39;21482&#39;,&#39;21486&#39;,&#39;21487&#39;,&#39;21491&#39;,&#39;21494&#39;,&#39;21509&#39;,&#39;21510&#39;,&#39;21512&#39;,&#39;21518&#39;,&#39;21521&#39;,&#39;21523&#39;,&#39;21529&#39;,&#39;21530&#39;,&#39;21532&#39;,&#39;21533&#39;,&#39;21535&#39;,&#39;21537&#39;,&#39;21549&#39;,&#39;21577&#39;,&#39;21578&#39;,&#39;21579&#39;,&#39;21583&#39;,&#39;21587&#39;,&#39;21598&#39;,&#39;21604&#39;,&#39;21613&#39;,&#39;21623&#39;,&#39;21632&#39;,&#39;21641&#39;,&#39;21643&#39;,&#39;21652&#39;,&#39;21655&#39;,&#39;21656&#39;,&#39;21659&#39;,&#39;21671&#39;,&#39;21673&#39;,&#39;21674&#39;,&#39;21683&#39;,&#39;21684&#39;,&#39;21690&#39;,&#39;21697&#39;,&#39;21713&#39;,&#39;21716&#39;,&#39;21721&#39;,&#39;21725&#39;,&#39;21727&#39;,&#39;21733&#39;,&#39;21734&#39;,&#39;21735&#39;,&#39;21737&#39;,&#39;21745&#39;,&#39;21746&#39;,&#39;21751&#39;,&#39;21753&#39;,&#39;21758&#39;,&#39;21775&#39;,&#39;21779&#39;,&#39;21788&#39;,&#39;21789&#39;,&#39;21793&#39;,&#39;21795&#39;,&#39;21800&#39;,&#39;21809&#39;,&#39;21813&#39;,&#39;21814&#39;,&#39;21826&#39;,&#39;21831&#39;,&#39;21850&#39;,&#39;21858&#39;,&#39;21862&#39;,&#39;21869&#39;,&#39;21873&#39;,&#39;21875&#39;)&lt;br /&gt;
OR &quot;id&quot; IN (&#39;21877&#39;,&#39;21880&#39;,&#39;21886&#39;,&#39;21892&#39;,&#39;21893&#39;,&#39;21896&#39;,&#39;21898&#39;,&#39;21900&#39;,&#39;21903&#39;,&#39;21917&#39;,&#39;21919&#39;,&#39;21923&#39;,&#39;21926&#39;,&#39;21934&#39;,&#39;21936&#39;,&#39;21938&#39;,&#39;21940&#39;,&#39;21950&#39;,&#39;21952&#39;,&#39;21961&#39;,&#39;21968&#39;,&#39;21972&#39;,&#39;21978&#39;,&#39;21985&#39;,&#39;21994&#39;,&#39;22002&#39;,&#39;22008&#39;,&#39;22009&#39;,&#39;22011&#39;,&#39;22014&#39;,&#39;22015&#39;,&#39;22017&#39;,&#39;22019&#39;,&#39;22026&#39;,&#39;22032&#39;,&#39;22045&#39;,&#39;22065&#39;,&#39;22067&#39;,&#39;22079&#39;,&#39;22088&#39;,&#39;22096&#39;,&#39;22105&#39;,&#39;22107&#39;,&#39;22109&#39;,&#39;22111&#39;,&#39;22116&#39;,&#39;22123&#39;,&#39;22136&#39;,&#39;22146&#39;,&#39;22150&#39;,&#39;22161&#39;,&#39;22176&#39;,&#39;22184&#39;,&#39;22196&#39;,&#39;22201&#39;,&#39;22209&#39;,&#39;22212&#39;,&#39;22215&#39;,&#39;22217&#39;,&#39;22223&#39;,&#39;22224&#39;,&#39;22229&#39;,&#39;22232&#39;,&#39;22234&#39;,&#39;22235&#39;,&#39;22236&#39;,&#39;22249&#39;,&#39;22252&#39;,&#39;22255&#39;,&#39;22259&#39;,&#39;22262&#39;,&#39;22268&#39;,&#39;22269&#39;,&#39;22272&#39;,&#39;22276&#39;,&#39;22278&#39;,&#39;22292&#39;,&#39;22308&#39;,&#39;22310&#39;,&#39;22312&#39;,&#39;22315&#39;,&#39;22316&#39;,&#39;22326&#39;,&#39;22338&#39;,&#39;22340&#39;,&#39;22341&#39;,&#39;22342&#39;,&#39;22347&#39;,&#39;22351&#39;,&#39;22368&#39;,&#39;22374&#39;,&#39;22386&#39;,&#39;22389&#39;,&#39;22393&#39;,&#39;22397&#39;,&#39;22399&#39;,&#39;22400&#39;,&#39;22412&#39;,&#39;22414&#39;,&#39;22421&#39;,&#39;22426&#39;,&#39;22441&#39;,&#39;22442&#39;,&#39;22443&#39;,&#39;22446&#39;,&#39;22449&#39;,&#39;22465&#39;,&#39;22467&#39;,&#39;22490&#39;,&#39;22492&#39;,&#39;22494&#39;,&#39;22497&#39;,&#39;22499&#39;,&#39;22506&#39;,&#39;22508&#39;,&#39;22512&#39;,&#39;22516&#39;,&#39;22519&#39;,&#39;22522&#39;,&#39;22527&#39;,&#39;22548&#39;,&#39;22552&#39;,&#39;22554&#39;,&#39;22559&#39;,&#39;22569&#39;,&#39;22574&#39;,&#39;22575&#39;,&#39;22576&#39;,&#39;22581&#39;,&#39;22583&#39;,&#39;22586&#39;,&#39;22593&#39;,&#39;22604&#39;,&#39;22609&#39;,&#39;22610&#39;,&#39;22617&#39;,&#39;22623&#39;,&#39;22625&#39;,&#39;22633&#39;,&#39;22634&#39;,&#39;22637&#39;,&#39;22638&#39;,&#39;22640&#39;,&#39;22642&#39;,&#39;22645&#39;,&#39;22647&#39;,&#39;22651&#39;,&#39;22661&#39;,&#39;22662&#39;,&#39;22665&#39;,&#39;22666&#39;,&#39;22677&#39;,&#39;22678&#39;,&#39;22681&#39;,&#39;22682&#39;,&#39;22683&#39;,&#39;22685&#39;,&#39;22694&#39;,&#39;22695&#39;,&#39;22701&#39;,&#39;22702&#39;,&#39;22708&#39;,&#39;22713&#39;,&#39;22724&#39;,&#39;22726&#39;,&#39;22729&#39;,&#39;22731&#39;,&#39;22741&#39;,&#39;22745&#39;,&#39;22747&#39;,&#39;22748&#39;,&#39;22761&#39;,&#39;22782&#39;,&#39;22784&#39;,&#39;22795&#39;,&#39;22796&#39;,&#39;22798&#39;,&#39;22800&#39;,&#39;22804&#39;,&#39;22823&#39;,&#39;22833&#39;,&#39;22835&#39;,&#39;22844&#39;,&#39;22847&#39;,&#39;22850&#39;,&#39;22854&#39;,&#39;22857&#39;,&#39;22858&#39;,&#39;22864&#39;,&#39;22872&#39;,&#39;22875&#39;,&#39;22883&#39;,&#39;22891&#39;,&#39;22902&#39;,&#39;22904&#39;,&#39;22911&#39;,&#39;22934&#39;,&#39;22954&#39;,&#39;22970&#39;,&#39;22972&#39;,&#39;22974&#39;,&#39;22983&#39;,&#39;22993&#39;,&#39;23007&#39;,&#39;23009&#39;,&#39;23012&#39;,&#39;23013&#39;,&#39;23017&#39;,&#39;23023&#39;,&#39;23037&#39;,&#39;23046&#39;,&#39;23047&#39;,&#39;23048&#39;,&#39;23049&#39;,&#39;23061&#39;,&#39;23072&#39;,&#39;23083&#39;,&#39;23091&#39;,&#39;23109&#39;,&#39;23113&#39;,&#39;23114&#39;,&#39;23115&#39;,&#39;23116&#39;,&#39;23125&#39;,&#39;23127&#39;,&#39;23128&#39;,&#39;23133&#39;,&#39;23140&#39;,&#39;23143&#39;,&#39;23145&#39;,&#39;23147&#39;,&#39;23154&#39;,&#39;23160&#39;,&#39;23173&#39;,&#39;23180&#39;,&#39;23182&#39;,&#39;23186&#39;,&#39;23187&#39;,&#39;23204&#39;,&#39;23207&#39;,&#39;23211&#39;,&#39;23215&#39;,&#39;23217&#39;,&#39;23223&#39;,&#39;23224&#39;,&#39;23239&#39;,&#39;23257&#39;,&#39;23266&#39;,&#39;23268&#39;,&#39;23275&#39;,&#39;23277&#39;,&#39;23282&#39;,&#39;23287&#39;,&#39;23288&#39;,&#39;23289&#39;,&#39;23290&#39;,&#39;23301&#39;,&#39;23302&#39;,&#39;23306&#39;,&#39;23314&#39;,&#39;23315&#39;,&#39;23319&#39;,&#39;23322&#39;,&#39;23331&#39;,&#39;23336&#39;,&#39;23341&#39;,&#39;23344&#39;,&#39;23345&#39;,&#39;23348&#39;,&#39;23350&#39;,&#39;23354&#39;,&#39;23355&#39;,&#39;23365&#39;,&#39;23368&#39;,&#39;23369&#39;,&#39;23371&#39;,&#39;23372&#39;,&#39;23375&#39;,&#39;23381&#39;,&#39;23387&#39;,&#39;23394&#39;,&#39;23395&#39;,&#39;23398&#39;,&#39;23408&#39;,&#39;23415&#39;,&#39;23435&#39;,&#39;23438&#39;,&#39;23448&#39;,&#39;23453&#39;,&#39;23454&#39;,&#39;23462&#39;,&#39;23465&#39;,&#39;23466&#39;,&#39;23478&#39;,&#39;23481&#39;,&#39;23486&#39;,&#39;23490&#39;,&#39;23491&#39;,&#39;23498&#39;,&#39;23516&#39;,&#39;23519&#39;,&#39;23528&#39;,&#39;23536&#39;,&#39;23537&#39;,&#39;23541&#39;,&#39;23544&#39;,&#39;23549&#39;,&#39;23550&#39;,&#39;23553&#39;,&#39;23554&#39;,&#39;23555&#39;,&#39;23557&#39;,&#39;23560&#39;,&#39;23568&#39;,&#39;23569&#39;,&#39;23570&#39;,&#39;23578&#39;,&#39;23587&#39;,&#39;23588&#39;,&#39;23595&#39;,&#39;23597&#39;,&#39;23602&#39;,&#39;23605&#39;,&#39;23613&#39;,&#39;23615&#39;,&#39;23619&#39;,&#39;23620&#39;,&#39;23626&#39;,&#39;23627&#39;,&#39;23631&#39;,&#39;23638&#39;,&#39;23648&#39;,&#39;23654&#39;,&#39;23655&#39;,&#39;23658&#39;,&#39;23665&#39;,&#39;23668&#39;,&#39;23680&#39;,&#39;23700&#39;,&#39;23707&#39;,&#39;23711&#39;,&#39;23718&#39;,&#39;23722&#39;,&#39;23723&#39;,&#39;23725&#39;,&#39;23727&#39;,&#39;23731&#39;,&#39;23734&#39;,&#39;23740&#39;,&#39;23747&#39;,&#39;23759&#39;,&#39;23764&#39;,&#39;23766&#39;,&#39;23784&#39;,&#39;23786&#39;,&#39;23790&#39;,&#39;23794&#39;,&#39;23802&#39;,&#39;23811&#39;,&#39;23814&#39;,&#39;23819&#39;,&#39;23821&#39;,&#39;23827&#39;,&#39;23830&#39;,&#39;23834&#39;,&#39;23843&#39;,&#39;23846&#39;,&#39;23861&#39;,&#39;23863&#39;,&#39;23865&#39;,&#39;23867&#39;,&#39;23870&#39;,&#39;23875&#39;,&#39;23896&#39;,&#39;23898&#39;,&#39;23899&#39;,&#39;23910&#39;,&#39;23911&#39;,&#39;23912&#39;,&#39;23920&#39;,&#39;23938&#39;,&#39;23939&#39;,&#39;23946&#39;,&#39;23949&#39;,&#39;23971&#39;,&#39;23972&#39;,&#39;23975&#39;,&#39;23977&#39;,&#39;23981&#39;,&#39;23984&#39;,&#39;23987&#39;,&#39;23997&#39;,&#39;24002&#39;,&#39;24003&#39;,&#39;24009&#39;,&#39;24012&#39;,&#39;24023&#39;,&#39;24024&#39;,&#39;24031&#39;,&#39;24034&#39;,&#39;24043&#39;,&#39;24048&#39;,&#39;24051&#39;,&#39;24056&#39;,&#39;24062&#39;,&#39;24070&#39;,&#39;24074&#39;,&#39;24077&#39;,&#39;24079&#39;,&#39;24091&#39;,&#39;24094&#39;,&#39;24095&#39;,&#39;24109&#39;,&#39;24110&#39;,&#39;24113&#39;,&#39;24116&#39;,&#39;24122&#39;,&#39;24125&#39;,&#39;24128&#39;,&#39;24129&#39;,&#39;24136&#39;,&#39;24141&#39;,&#39;24148&#39;,&#39;24150&#39;,&#39;24152&#39;,&#39;24160&#39;,&#39;24161&#39;,&#39;24162&#39;,&#39;24163&#39;,&#39;24166&#39;,&#39;24170&#39;,&#39;24171&#39;,&#39;24172&#39;,&#39;24175&#39;,&#39;24179&#39;,&#39;24181&#39;,&#39;24183&#39;,&#39;24196&#39;,&#39;24210&#39;,&#39;24211&#39;,&#39;24225&#39;,&#39;24232&#39;,&#39;24241&#39;,&#39;24244&#39;,&#39;24245&#39;,&#39;24249&#39;,&#39;24250&#39;,&#39;24258&#39;,&#39;24262&#39;,&#39;24267&#39;,&#39;24270&#39;,&#39;24272&#39;,&#39;24274&#39;,&#39;24279&#39;,&#39;24295&#39;,&#39;24303&#39;,&#39;24304&#39;,&#39;24313&#39;,&#39;24320&#39;,&#39;24321&#39;,&#39;24326&#39;,&#39;24328&#39;,&#39;24332&#39;,&#39;24335&#39;,&#39;24340&#39;,&#39;24347&#39;,&#39;24349&#39;,&#39;24354&#39;,&#39;24355&#39;,&#39;24356&#39;,&#39;24358&#39;,&#39;24362&#39;,&#39;24365&#39;,&#39;24367&#39;,&#39;24373&#39;,&#39;24374&#39;,&#39;24377&#39;,&#39;24386&#39;,&#39;24389&#39;,&#39;24405&#39;,&#39;24407&#39;,&#39;24426&#39;,&#39;24430&#39;,&#39;24432&#39;,&#39;24441&#39;,&#39;24445&#39;,&#39;24447&#39;,&#39;24448&#39;,&#39;24473&#39;,&#39;24479&#39;,&#39;24485&#39;,&#39;24486&#39;,&#39;24490&#39;,&#39;24495&#39;,&#39;24496&#39;,&#39;24506&#39;,&#39;24512&#39;,&#39;24514&#39;,&#39;24516&#39;,&#39;24526&#39;,&#39;24536&#39;,&#39;24540&#39;,&#39;24544&#39;,&#39;24546&#39;,&#39;24565&#39;,&#39;24569&#39;,&#39;24576&#39;,&#39;24578&#39;,&#39;24582&#39;,&#39;24583&#39;,&#39;24584&#39;,&#39;24585&#39;,&#39;24587&#39;,&#39;24592&#39;,&#39;24595&#39;,&#39;24599&#39;,&#39;24600&#39;,&#39;24603&#39;,&#39;24608&#39;,&#39;24618&#39;,&#39;24624&#39;,&#39;24625&#39;,&#39;24626&#39;,&#39;24633&#39;,&#39;24639&#39;,&#39;24641&#39;,&#39;24645&#39;,&#39;24649&#39;,&#39;24665&#39;,&#39;24668&#39;,&#39;24673&#39;,&#39;24678&#39;,&#39;24679&#39;,&#39;24687&#39;,&#39;24689&#39;,&#39;24695&#39;,&#39;24696&#39;,&#39;24699&#39;,&#39;24705&#39;,&#39;24708&#39;,&#39;24711&#39;,&#39;24714&#39;,&#39;24715&#39;,&#39;24716&#39;,&#39;24719&#39;,&#39;24720&#39;,&#39;24721&#39;,&#39;24747&#39;,&#39;24751&#39;,&#39;24755&#39;,&#39;24780&#39;,&#39;24784&#39;,&#39;24787&#39;,&#39;24789&#39;,&#39;24792&#39;,&#39;24797&#39;,&#39;24817&#39;,&#39;24824&#39;,&#39;24825&#39;,&#39;24826&#39;,&#39;24827&#39;,&#39;24828&#39;,&#39;24837&#39;,&#39;24845&#39;,&#39;24858&#39;,&#39;24869&#39;,&#39;24875&#39;,&#39;24892&#39;,&#39;24896&#39;,&#39;24899&#39;,&#39;24907&#39;,&#39;24908&#39;,&#39;24909&#39;,&#39;24910&#39;,&#39;24911&#39;,&#39;24913&#39;,&#39;24914&#39;,&#39;24916&#39;,&#39;24921&#39;,&#39;24933&#39;,&#39;24935&#39;,&#39;24953&#39;,&#39;24954&#39;,&#39;24955&#39;,&#39;24958&#39;,&#39;24965&#39;,&#39;24968&#39;,&#39;24994&#39;,&#39;25002&#39;,&#39;25012&#39;,&#39;25014&#39;,&#39;25016&#39;,&#39;25021&#39;,&#39;25028&#39;,&#39;25032&#39;,&#39;25051&#39;,&#39;25054&#39;,&#39;25056&#39;,&#39;25057&#39;,&#39;25061&#39;,&#39;25076&#39;,&#39;25085&#39;,&#39;25089&#39;,&#39;25091&#39;,&#39;25092&#39;,&#39;25097&#39;,&#39;25098&#39;,&#39;25107&#39;,&#39;25112&#39;,&#39;25114&#39;,&#39;25116&#39;,&#39;25117&#39;,&#39;25125&#39;,&#39;25128&#39;,&#39;25133&#39;,&#39;25137&#39;,&#39;25142&#39;,&#39;25144&#39;,&#39;25146&#39;,&#39;25148&#39;,&#39;25159&#39;,&#39;25160&#39;,&#39;25166&#39;,&#39;25167&#39;,&#39;25170&#39;,&#39;25180&#39;,&#39;25181&#39;,&#39;25185&#39;,&#39;25186&#39;,&#39;25197&#39;,&#39;25198&#39;,&#39;25203&#39;,&#39;25204&#39;,&#39;25211&#39;,&#39;25227&#39;,&#39;25229&#39;,&#39;25232&#39;,&#39;25235&#39;,&#39;25239&#39;,&#39;25242&#39;,&#39;25244&#39;,&#39;25245&#39;,&#39;25259&#39;,&#39;25261&#39;,&#39;25263&#39;,&#39;25268&#39;,&#39;25272&#39;,&#39;25282&#39;,&#39;25284&#39;,&#39;25289&#39;,&#39;25290&#39;,&#39;25291&#39;,&#39;25294&#39;,&#39;25297&#39;,&#39;25300&#39;,&#39;25303&#39;,&#39;25306&#39;,&#39;25322&#39;,&#39;25323&#39;,&#39;25326&#39;,&#39;25332&#39;,&#39;25333&#39;,&#39;25337&#39;,&#39;25339&#39;,&#39;25349&#39;,&#39;25351&#39;,&#39;25352&#39;,&#39;25354&#39;,&#39;25358&#39;,&#39;25360&#39;,&#39;25362&#39;,&#39;25394&#39;,&#39;25395&#39;,&#39;25398&#39;,&#39;25401&#39;,&#39;25402&#39;,&#39;25403&#39;,&#39;25408&#39;,&#39;25409&#39;,&#39;25416&#39;,&#39;25429&#39;,&#39;25435&#39;,&#39;25450&#39;,&#39;25451&#39;,&#39;25452&#39;,&#39;25458&#39;,&#39;25459&#39;,&#39;25486&#39;,&#39;25491&#39;,&#39;25495&#39;,&#39;25496&#39;,&#39;25503&#39;,&#39;25505&#39;,&#39;25508&#39;,&#39;25513&#39;,&#39;25514&#39;,&#39;25519&#39;,&#39;25520&#39;,&#39;25522&#39;,&#39;25524&#39;,&#39;25526&#39;,&#39;25528&#39;,&#39;25530&#39;,&#39;25534&#39;,&#39;25535&#39;,&#39;25544&#39;,&#39;25556&#39;,&#39;25558&#39;,&#39;25560&#39;,&#39;25563&#39;,&#39;25571&#39;,&#39;25572&#39;,&#39;25578&#39;,&#39;25581&#39;,&#39;25586&#39;,&#39;25595&#39;,&#39;25598&#39;,&#39;25599&#39;,&#39;25600&#39;,&#39;25601&#39;,&#39;25617&#39;,&#39;25622&#39;,&#39;25631&#39;,&#39;25638&#39;,&#39;25640&#39;,&#39;25641&#39;,&#39;25644&#39;,&#39;25648&#39;,&#39;25649&#39;,&#39;25650&#39;,&#39;25652&#39;,&#39;25654&#39;,&#39;25660&#39;,&#39;25669&#39;,&#39;25673&#39;,&#39;25676&#39;,&#39;25699&#39;,&#39;25700&#39;,&#39;25701&#39;,&#39;25705&#39;,&#39;25708&#39;,&#39;25721&#39;,&#39;25723&#39;,&#39;25730&#39;,&#39;25735&#39;,&#39;25739&#39;,&#39;25745&#39;,&#39;25755&#39;,&#39;25765&#39;,&#39;25770&#39;,&#39;25773&#39;,&#39;25777&#39;,&#39;25782&#39;,&#39;25797&#39;,&#39;25800&#39;,&#39;25803&#39;,&#39;25820&#39;,&#39;25825&#39;,&#39;25829&#39;,&#39;25830&#39;,&#39;25835&#39;,&#39;25848&#39;,&#39;25856&#39;,&#39;25858&#39;,&#39;25859&#39;,&#39;25861&#39;,&#39;25869&#39;,&#39;25875&#39;,&#39;25881&#39;,&#39;25885&#39;,&#39;25890&#39;,&#39;25891&#39;,&#39;25896&#39;,&#39;25897&#39;,&#39;25899&#39;,&#39;25911&#39;,&#39;25913&#39;,&#39;25921&#39;,&#39;25922&#39;,&#39;25923&#39;,&#39;25925&#39;,&#39;25926&#39;,&#39;25932&#39;,&#39;25934&#39;,&#39;25940&#39;,&#39;25942&#39;,&#39;25946&#39;,&#39;25954&#39;,&#39;25959&#39;,&#39;25960&#39;,&#39;25971&#39;,&#39;25983&#39;,&#39;25985&#39;,&#39;26012&#39;,&#39;26015&#39;,&#39;26018&#39;,&#39;26024&#39;,&#39;26034&#39;,&#39;26041&#39;,&#39;26049&#39;,&#39;26053&#39;,&#39;26055&#39;,&#39;26058&#39;,&#39;26062&#39;,&#39;26074&#39;,&#39;26079&#39;,&#39;26090&#39;,&#39;26098&#39;,&#39;26118&#39;,&#39;26123&#39;,&#39;26141&#39;,&#39;26154&#39;,&#39;26155&#39;,&#39;26156&#39;,&#39;26159&#39;,&#39;26163&#39;,&#39;26166&#39;,&#39;26182&#39;,&#39;26184&#39;,&#39;26185&#39;,&#39;26187&#39;,&#39;26190&#39;,&#39;26198&#39;,&#39;26205&#39;,&#39;26212&#39;,&#39;26217&#39;,&#39;26228&#39;,&#39;26229&#39;,&#39;26230&#39;,&#39;26232&#39;,&#39;26237&#39;,&#39;26239&#39;,&#39;26243&#39;,&#39;26252&#39;,&#39;26253&#39;,&#39;26254&#39;,&#39;26255&#39;,&#39;26257&#39;,&#39;26263&#39;,&#39;26264&#39;,&#39;26265&#39;,&#39;26272&#39;,&#39;26273&#39;,&#39;26284&#39;,&#39;26291&#39;,&#39;26297&#39;,&#39;26324&#39;,&#39;26335&#39;,&#39;26338&#39;,&#39;26346&#39;,&#39;26352&#39;,&#39;26361&#39;,&#39;26371&#39;,&#39;26375&#39;,&#39;26376&#39;,&#39;26379&#39;,&#39;26380&#39;,&#39;26384&#39;,&#39;26391&#39;,&#39;26394&#39;,&#39;26395&#39;,&#39;26403&#39;,&#39;26404&#39;,&#39;26412&#39;,&#39;26420&#39;,&#39;26425&#39;,&#39;26432&#39;,&#39;26434&#39;,&#39;26436&#39;,&#39;26438&#39;,&#39;26444&#39;,&#39;26447&#39;,&#39;26449&#39;,&#39;26472&#39;,&#39;26478&#39;,&#39;26481&#39;,&#39;26497&#39;,&#39;26498&#39;,&#39;26500&#39;,&#39;26501&#39;,&#39;26508&#39;,&#39;26513&#39;,&#39;26514&#39;,&#39;26521&#39;,&#39;26523&#39;,&#39;26524&#39;,&#39;26525&#39;,&#39;26533&#39;,&#39;26536&#39;,&#39;26549&#39;,&#39;26555&#39;,&#39;26558&#39;,&#39;26560&#39;,&#39;26583&#39;,&#39;26585&#39;,&#39;26586&#39;,&#39;26598&#39;,&#39;26613&#39;,&#39;26617&#39;,&#39;26623&#39;,&#39;26633&#39;,&#39;26649&#39;,&#39;26652&#39;,&#39;26675&#39;,&#39;26676&#39;,&#39;26678&#39;,&#39;26680&#39;,&#39;26686&#39;,&#39;26692&#39;,&#39;26694&#39;,&#39;26696&#39;,&#39;26700&#39;,&#39;26703&#39;,&#39;26706&#39;,&#39;26710&#39;,&#39;26712&#39;,&#39;26716&#39;,&#39;26717&#39;,&#39;26718&#39;,&#39;26720&#39;,&#39;26721&#39;,&#39;26724&#39;,&#39;26728&#39;,&#39;26730&#39;,&#39;26733&#39;,&#39;26746&#39;,&#39;26754&#39;,&#39;26758&#39;,&#39;26759&#39;,&#39;26766&#39;,&#39;26767&#39;,&#39;26769&#39;,&#39;26781&#39;,&#39;26790&#39;,&#39;26797&#39;,&#39;26802&#39;,&#39;26815&#39;,&#39;26818&#39;,&#39;26824&#39;,&#39;26830&#39;,&#39;26837&#39;,&#39;26842&#39;,&#39;26856&#39;,&#39;26858&#39;,&#39;26864&#39;,&#39;26872&#39;,&#39;26874&#39;,&#39;26875&#39;,&#39;26876&#39;,&#39;26882&#39;,&#39;26883&#39;,&#39;26885&#39;,&#39;26887&#39;,&#39;26889&#39;,&#39;26894&#39;,&#39;26895&#39;,&#39;26930&#39;,&#39;26937&#39;,&#39;26939&#39;,&#39;26945&#39;,&#39;26960&#39;,&#39;26976&#39;,&#39;26979&#39;,&#39;26980&#39;,&#39;26983&#39;,&#39;26985&#39;,&#39;26990&#39;,&#39;27002&#39;,&#39;27011&#39;,&#39;27012&#39;,&#39;27014&#39;,&#39;27034&#39;,&#39;27036&#39;,&#39;27037&#39;,&#39;27046&#39;,&#39;27048&#39;,&#39;27053&#39;,&#39;27058&#39;,&#39;27064&#39;,&#39;27088&#39;,&#39;27094&#39;,&#39;27106&#39;,&#39;27111&#39;,&#39;27118&#39;,&#39;27121&#39;,&#39;27122&#39;,&#39;27127&#39;,&#39;27131&#39;,&#39;27133&#39;,&#39;27137&#39;,&#39;27142&#39;,&#39;27144&#39;,&#39;27145&#39;,&#39;27146&#39;,&#39;27148&#39;,&#39;27150&#39;,&#39;27152&#39;,&#39;27153&#39;,&#39;27154&#39;,&#39;27158&#39;,&#39;27165&#39;,&#39;27166&#39;,&#39;27172&#39;,&#39;27173&#39;,&#39;27175&#39;,&#39;27179&#39;,&#39;27189&#39;,&#39;27194&#39;,&#39;27197&#39;,&#39;27203&#39;,&#39;27206&#39;,&#39;27225&#39;,&#39;27229&#39;,&#39;27242&#39;,&#39;27246&#39;,&#39;27256&#39;,&#39;27272&#39;,&#39;27274&#39;,&#39;27286&#39;,&#39;27288&#39;,&#39;27297&#39;,&#39;27303&#39;,&#39;27313&#39;,&#39;27316&#39;,&#39;27317&#39;,&#39;27319&#39;,&#39;27322&#39;,&#39;27323&#39;,&#39;27324&#39;,&#39;27325&#39;,&#39;27327&#39;,&#39;27330&#39;,&#39;27334&#39;,&#39;27354&#39;,&#39;27359&#39;,&#39;27365&#39;,&#39;27367&#39;,&#39;27381&#39;,&#39;27382&#39;,&#39;27383&#39;,&#39;27388&#39;,&#39;27395&#39;,&#39;27396&#39;,&#39;27400&#39;,&#39;27407&#39;,&#39;27408&#39;,&#39;27411&#39;,&#39;27415&#39;,&#39;27422&#39;,&#39;27428&#39;,&#39;27429&#39;,&#39;27437&#39;,&#39;27442&#39;,&#39;27447&#39;,&#39;27453&#39;,&#39;27455&#39;,&#39;27457&#39;,&#39;27467&#39;,&#39;27470&#39;,&#39;27479&#39;,&#39;27487&#39;,&#39;27489&#39;,&#39;27490&#39;,&#39;27499&#39;,&#39;27506&#39;,&#39;27511&#39;,&#39;27513&#39;,&#39;27516&#39;,&#39;27517&#39;,&#39;27521&#39;,&#39;27525&#39;,&#39;27534&#39;,&#39;27539&#39;,&#39;27546&#39;,&#39;27549&#39;,&#39;27554&#39;,&#39;27555&#39;,&#39;27558&#39;,&#39;27560&#39;,&#39;27566&#39;,&#39;27573&#39;,&#39;27574&#39;,&#39;27582&#39;,&#39;27589&#39;,&#39;27593&#39;,&#39;27595&#39;,&#39;27601&#39;,&#39;27607&#39;,&#39;27612&#39;,&#39;27623&#39;,&#39;27626&#39;,&#39;27630&#39;,&#39;27631&#39;,&#39;27637&#39;,&#39;27638&#39;,&#39;27641&#39;,&#39;27642&#39;,&#39;27644&#39;,&#39;27645&#39;,&#39;27646&#39;,&#39;27653&#39;,&#39;27655&#39;,&#39;27662&#39;,&#39;27663&#39;,&#39;27681&#39;,&#39;27684&#39;,&#39;27693&#39;,&#39;27696&#39;,&#39;27698&#39;,&#39;27707&#39;,&#39;27708&#39;,&#39;27711&#39;,&#39;27715&#39;,&#39;27719&#39;,&#39;27722&#39;,&#39;27724&#39;,&#39;27728&#39;,&#39;27729&#39;,&#39;27739&#39;,&#39;27750&#39;,&#39;27756&#39;,&#39;27768&#39;,&#39;27769&#39;,&#39;27773&#39;,&#39;27777&#39;,&#39;27785&#39;,&#39;27791&#39;,&#39;27800&#39;,&#39;27803&#39;,&#39;27804&#39;,&#39;27808&#39;,&#39;27809&#39;,&#39;27810&#39;,&#39;27813&#39;,&#39;27819&#39;,&#39;27821&#39;,&#39;27824&#39;,&#39;27830&#39;,&#39;27844&#39;,&#39;27845&#39;,&#39;27846&#39;,&#39;27853&#39;,&#39;27857&#39;,&#39;27870&#39;,&#39;27872&#39;,&#39;27882&#39;,&#39;27888&#39;,&#39;27891&#39;,&#39;27900&#39;,&#39;27907&#39;,&#39;27908&#39;,&#39;27914&#39;,&#39;27915&#39;,&#39;27917&#39;,&#39;27925&#39;,&#39;27927&#39;,&#39;27930&#39;,&#39;27932&#39;,&#39;27933&#39;,&#39;27935&#39;,&#39;27936&#39;,&#39;27937&#39;,&#39;27939&#39;,&#39;27940&#39;,&#39;27941&#39;,&#39;27943&#39;,&#39;27949&#39;,&#39;27955&#39;,&#39;27960&#39;,&#39;27962&#39;,&#39;27966&#39;,&#39;27969&#39;,&#39;27976&#39;,&#39;27978&#39;,&#39;27986&#39;,&#39;28009&#39;,&#39;28013&#39;,&#39;28017&#39;,&#39;28026&#39;,&#39;28028&#39;,&#39;28030&#39;,&#39;28032&#39;,&#39;28033&#39;,&#39;28036&#39;,&#39;28041&#39;,&#39;28044&#39;,&#39;28045&#39;,&#39;28047&#39;,&#39;28051&#39;,&#39;28058&#39;,&#39;28063&#39;,&#39;28064&#39;,&#39;28066&#39;,&#39;28068&#39;,&#39;28069&#39;,&#39;28070&#39;,&#39;28073&#39;,&#39;28083&#39;,&#39;28085&#39;,&#39;28090&#39;,&#39;28094&#39;,&#39;28097&#39;,&#39;28100&#39;,&#39;28109&#39;,&#39;28111&#39;,&#39;28118&#39;,&#39;28119&#39;,&#39;28120&#39;,&#39;28132&#39;,&#39;28138&#39;,&#39;28142&#39;,&#39;28143&#39;,&#39;28147&#39;,&#39;28158&#39;,&#39;28162&#39;,&#39;28164&#39;,&#39;28169&#39;,&#39;28174&#39;,&#39;28175&#39;,&#39;28181&#39;,&#39;28186&#39;,&#39;28189&#39;,&#39;28190&#39;,&#39;28192&#39;,&#39;28195&#39;,&#39;28201&#39;,&#39;28214&#39;,&#39;28224&#39;,&#39;28226&#39;,&#39;28227&#39;,&#39;28231&#39;,&#39;28245&#39;,&#39;28251&#39;,&#39;28258&#39;,&#39;28262&#39;,&#39;28270&#39;,&#39;28274&#39;,&#39;28284&#39;,&#39;28290&#39;,&#39;28292&#39;,&#39;28298&#39;,&#39;28307&#39;,&#39;28323&#39;,&#39;28327&#39;,&#39;28330&#39;,&#39;28337&#39;,&#39;28339&#39;,&#39;28340&#39;,&#39;28346&#39;,&#39;28375&#39;,&#39;28376&#39;,&#39;28384&#39;,&#39;28386&#39;,&#39;28389&#39;,&#39;28394&#39;,&#39;28395&#39;,&#39;28398&#39;,&#39;28414&#39;,&#39;28415&#39;,&#39;28421&#39;,&#39;28424&#39;,&#39;28434&#39;,&#39;28444&#39;,&#39;28455&#39;,&#39;28464&#39;,&#39;28473&#39;,&#39;28476&#39;,&#39;28479&#39;,&#39;28481&#39;,&#39;28483&#39;,&#39;28484&#39;,&#39;28485&#39;,&#39;28490&#39;,&#39;28491&#39;,&#39;28494&#39;,&#39;28508&#39;,&#39;28509&#39;,&#39;28523&#39;,&#39;28524&#39;,&#39;28526&#39;,&#39;28545&#39;,&#39;28548&#39;,&#39;28549&#39;,&#39;28556&#39;,&#39;28558&#39;,&#39;28568&#39;,&#39;28572&#39;,&#39;28578&#39;,&#39;28579&#39;,&#39;28582&#39;,&#39;28590&#39;,&#39;28591&#39;,&#39;28596&#39;,&#39;28600&#39;,&#39;28603&#39;,&#39;28613&#39;,&#39;28616&#39;,&#39;28618&#39;,&#39;28620&#39;,&#39;28623&#39;,&#39;28634&#39;,&#39;28635&#39;,&#39;28640&#39;,&#39;28641&#39;,&#39;28643&#39;,&#39;28651&#39;,&#39;28659&#39;,&#39;28660&#39;,&#39;28661&#39;,&#39;28665&#39;,&#39;28668&#39;,&#39;28669&#39;,&#39;28680&#39;,&#39;28686&#39;,&#39;28693&#39;,&#39;28694&#39;,&#39;28695&#39;,&#39;28700&#39;,&#39;28701&#39;,&#39;28703&#39;,&#39;28704&#39;,&#39;28711&#39;,&#39;28712&#39;,&#39;28720&#39;,&#39;28724&#39;,&#39;28736&#39;,&#39;28740&#39;,&#39;28741&#39;,&#39;28742&#39;,&#39;28746&#39;,&#39;28747&#39;,&#39;28751&#39;,&#39;28756&#39;,&#39;28758&#39;,&#39;28767&#39;,&#39;28769&#39;,&#39;28773&#39;,&#39;28775&#39;,&#39;28777&#39;,&#39;28778&#39;,&#39;28791&#39;,&#39;28808&#39;,&#39;28817&#39;,&#39;28819&#39;,&#39;28822&#39;,&#39;28823&#39;,&#39;28831&#39;,&#39;28835&#39;,&#39;28841&#39;,&#39;28845&#39;,&#39;28847&#39;,&#39;28850&#39;,&#39;28852&#39;,&#39;28856&#39;,&#39;28862&#39;,&#39;28865&#39;,&#39;28867&#39;,&#39;28869&#39;,&#39;28872&#39;,&#39;28880&#39;,&#39;28897&#39;,&#39;28899&#39;,&#39;28901&#39;,&#39;28907&#39;,&#39;28908&#39;,&#39;28913&#39;,&#39;28914&#39;,&#39;28915&#39;,&#39;28923&#39;,&#39;28926&#39;,&#39;28934&#39;,&#39;28939&#39;,&#39;28940&#39;,&#39;28945&#39;,&#39;28947&#39;,&#39;28948&#39;,&#39;28949&#39;,&#39;28964&#39;,&#39;28967&#39;,&#39;28972&#39;,&#39;28987&#39;,&#39;28990&#39;,&#39;29002&#39;,&#39;29005&#39;,&#39;29012&#39;,&#39;29018&#39;,&#39;29026&#39;,&#39;29033&#39;,&#39;29035&#39;,&#39;29038&#39;,&#39;29039&#39;,&#39;29040&#39;,&#39;29054&#39;,&#39;29058&#39;,&#39;29065&#39;,&#39;29069&#39;,&#39;29070&#39;,&#39;29079&#39;,&#39;29083&#39;,&#39;29090&#39;,&#39;29095&#39;,&#39;29108&#39;,&#39;29109&#39;,&#39;29112&#39;,&#39;29115&#39;,&#39;29120&#39;,&#39;29125&#39;,&#39;29127&#39;,&#39;29136&#39;,&#39;29139&#39;,&#39;29141&#39;,&#39;29143&#39;,&#39;29145&#39;,&#39;29146&#39;,&#39;29157&#39;,&#39;29162&#39;,&#39;29163&#39;,&#39;29178&#39;,&#39;29190&#39;,&#39;29193&#39;,&#39;29200&#39;,&#39;29207&#39;,&#39;29208&#39;,&#39;29212&#39;,&#39;29222&#39;,&#39;29223&#39;,&#39;29227&#39;,&#39;29229&#39;,&#39;29235&#39;,&#39;29236&#39;,&#39;29238&#39;,&#39;29242&#39;,&#39;29250&#39;,&#39;29252&#39;,&#39;29260&#39;,&#39;29266&#39;,&#39;29271&#39;,&#39;29273&#39;,&#39;29281&#39;,&#39;29282&#39;,&#39;29289&#39;,&#39;29295&#39;,&#39;29296&#39;,&#39;29301&#39;,&#39;29305&#39;,&#39;29306&#39;,&#39;29308&#39;,&#39;29310&#39;,&#39;29314&#39;,&#39;29316&#39;,&#39;29323&#39;,&#39;29329&#39;,&#39;29332&#39;,&#39;29335&#39;,&#39;29336&#39;,&#39;29338&#39;,&#39;29344&#39;,&#39;29346&#39;,&#39;29347&#39;,&#39;29351&#39;,&#39;29352&#39;,&#39;29356&#39;,&#39;29360&#39;,&#39;29364&#39;,&#39;29369&#39;,&#39;29370&#39;,&#39;29375&#39;,&#39;29376&#39;,&#39;29382&#39;,&#39;29391&#39;,&#39;29394&#39;,&#39;29406&#39;,&#39;29407&#39;,&#39;29410&#39;,&#39;29423&#39;,&#39;29437&#39;,&#39;29441&#39;,&#39;29444&#39;,&#39;29446&#39;,&#39;29449&#39;,&#39;29453&#39;,&#39;29454&#39;,&#39;29468&#39;,&#39;29469&#39;,&#39;29471&#39;,&#39;29474&#39;,&#39;29477&#39;,&#39;29479&#39;,&#39;29480&#39;,&#39;29481&#39;,&#39;29487&#39;,&#39;29504&#39;,&#39;29510&#39;,&#39;29516&#39;,&#39;29522&#39;,&#39;29527&#39;,&#39;29537&#39;,&#39;29538&#39;,&#39;29539&#39;,&#39;29543&#39;,&#39;29552&#39;,&#39;29554&#39;,&#39;29555&#39;,&#39;29556&#39;,&#39;29562&#39;,&#39;29569&#39;,&#39;29571&#39;,&#39;29575&#39;,&#39;29576&#39;,&#39;29579&#39;,&#39;29587&#39;,&#39;29592&#39;,&#39;29594&#39;,&#39;29595&#39;,&#39;29615&#39;,&#39;29622&#39;,&#39;29623&#39;,&#39;29624&#39;,&#39;29625&#39;,&#39;29630&#39;,&#39;29631&#39;,&#39;29632&#39;,&#39;29635&#39;,&#39;29640&#39;,&#39;29642&#39;,&#39;29647&#39;,&#39;29648&#39;,&#39;29650&#39;,&#39;29659&#39;,&#39;29663&#39;,&#39;29671&#39;,&#39;29675&#39;,&#39;29684&#39;,&#39;29693&#39;,&#39;29694&#39;,&#39;29700&#39;,&#39;29701&#39;,&#39;29706&#39;,&#39;29722&#39;,&#39;29729&#39;,&#39;29731&#39;,&#39;29732&#39;,&#39;29735&#39;,&#39;29740&#39;,&#39;29751&#39;,&#39;29757&#39;,&#39;29759&#39;,&#39;29761&#39;,&#39;29763&#39;,&#39;29769&#39;,&#39;29770&#39;,&#39;29771&#39;,&#39;29779&#39;,&#39;29780&#39;,&#39;29783&#39;,&#39;29785&#39;,&#39;29787&#39;,&#39;29788&#39;,&#39;29793&#39;,&#39;29794&#39;,&#39;29795&#39;,&#39;29797&#39;,&#39;29808&#39;,&#39;29811&#39;,&#39;29813&#39;,&#39;29831&#39;,&#39;29833&#39;,&#39;29839&#39;,&#39;29842&#39;,&#39;29847&#39;,&#39;29848&#39;,&#39;29851&#39;,&#39;29866&#39;,&#39;29867&#39;,&#39;29870&#39;,&#39;29877&#39;,&#39;29881&#39;,&#39;29883&#39;,&#39;29884&#39;,&#39;29893&#39;,&#39;29898&#39;,&#39;29905&#39;,&#39;29908&#39;,&#39;29911&#39;,&#39;29914&#39;,&#39;29916&#39;,&#39;29918&#39;,&#39;29920&#39;,&#39;29926&#39;,&#39;29939&#39;,&#39;29953&#39;,&#39;29956&#39;,&#39;29965&#39;,&#39;29978&#39;,&#39;29985&#39;,&#39;29992&#39;,&#39;29997&#39;,&#39;30009&#39;,&#39;30011&#39;,&#39;30017&#39;,&#39;30026&#39;,&#39;30027&#39;,&#39;30029&#39;,&#39;30031&#39;,&#39;30034&#39;,&#39;30040&#39;,&#39;30044&#39;,&#39;30045&#39;,&#39;30047&#39;,&#39;30048&#39;,&#39;30054&#39;,&#39;30063&#39;,&#39;30064&#39;,&#39;30068&#39;,&#39;30071&#39;,&#39;30074&#39;,&#39;30077&#39;,&#39;30079&#39;,&#39;30081&#39;,&#39;30096&#39;,&#39;30098&#39;,&#39;30101&#39;,&#39;30104&#39;,&#39;30111&#39;,&#39;30116&#39;,&#39;30129&#39;,&#39;30131&#39;,&#39;30141&#39;,&#39;30147&#39;,&#39;30156&#39;,&#39;30160&#39;,&#39;30162&#39;,&#39;30169&#39;,&#39;30171&#39;,&#39;30175&#39;,&#39;30178&#39;,&#39;30185&#39;,&#39;30186&#39;,&#39;30191&#39;,&#39;30192&#39;,&#39;30193&#39;,&#39;30198&#39;,&#39;30201&#39;,&#39;30203&#39;,&#39;30204&#39;,&#39;30209&#39;,&#39;30220&#39;,&#39;30222&#39;,&#39;30233&#39;,&#39;30239&#39;,&#39;30246&#39;,&#39;30248&#39;,&#39;30249&#39;,&#39;30255&#39;,&#39;30257&#39;,&#39;30258&#39;,&#39;30260&#39;,&#39;30269&#39;,&#39;30271&#39;,&#39;30274&#39;,&#39;30279&#39;,&#39;30280&#39;,&#39;30281&#39;,&#39;30283&#39;,&#39;30287&#39;,&#39;30288&#39;,&#39;30296&#39;,&#39;30300&#39;,&#39;30308&#39;,&#39;30309&#39;,&#39;30324&#39;,&#39;30328&#39;,&#39;30331&#39;,&#39;30333&#39;,&#39;30335&#39;,&#39;30339&#39;,&#39;30341&#39;,&#39;30343&#39;,&#39;30344&#39;,&#39;30346&#39;,&#39;30348&#39;,&#39;30352&#39;,&#39;30356&#39;,&#39;30358&#39;,&#39;30362&#39;,&#39;30372&#39;,&#39;30375&#39;,&#39;30378&#39;,&#39;30379&#39;,&#39;30388&#39;,&#39;30394&#39;,&#39;30400&#39;,&#39;30404&#39;,&#39;30422&#39;,&#39;30435&#39;,&#39;30440&#39;,&#39;30445&#39;,&#39;30447&#39;,&#39;30449&#39;,&#39;30458&#39;,&#39;30462&#39;,&#39;30474&#39;,&#39;30480&#39;,&#39;30488&#39;,&#39;30489&#39;,&#39;30500&#39;,&#39;30501&#39;,&#39;30503&#39;,&#39;30504&#39;,&#39;30506&#39;,&#39;30507&#39;,&#39;30509&#39;,&#39;30516&#39;,&#39;30521&#39;,&#39;30524&#39;,&#39;30528&#39;,&#39;30529&#39;,&#39;30538&#39;,&#39;30540&#39;,&#39;30548&#39;,&#39;30549&#39;,&#39;30558&#39;,&#39;30560&#39;,&#39;30562&#39;,&#39;30575&#39;,&#39;30583&#39;,&#39;30587&#39;,&#39;30591&#39;,&#39;30595&#39;,&#39;30596&#39;,&#39;30598&#39;,&#39;30605&#39;,&#39;30606&#39;,&#39;30609&#39;,&#39;30610&#39;,&#39;30611&#39;,&#39;30613&#39;,&#39;30618&#39;,&#39;30627&#39;,&#39;30628&#39;,&#39;30629&#39;,&#39;30635&#39;,&#39;30641&#39;,&#39;30645&#39;,&#39;30646&#39;,&#39;30659&#39;,&#39;30660&#39;,&#39;30669&#39;,&#39;30670&#39;,&#39;30680&#39;,&#39;30682&#39;,&#39;30683&#39;,&#39;30690&#39;,&#39;30692&#39;,&#39;30696&#39;,&#39;30697&#39;,&#39;30701&#39;,&#39;30703&#39;,&#39;30704&#39;,&#39;30708&#39;,&#39;30715&#39;,&#39;30717&#39;,&#39;30733&#39;,&#39;30740&#39;,&#39;30749&#39;,&#39;30751&#39;,&#39;30754&#39;,&#39;30760&#39;,&#39;30762&#39;,&#39;30765&#39;,&#39;30766&#39;,&#39;30768&#39;,&#39;30770&#39;,&#39;30772&#39;,&#39;30777&#39;,&#39;30784&#39;,&#39;30787&#39;,&#39;30792&#39;,&#39;30799&#39;,&#39;30807&#39;,&#39;30808&#39;,&#39;30811&#39;,&#39;30815&#39;,&#39;30817&#39;,&#39;30818&#39;,&#39;30822&#39;,&#39;30833&#39;,&#39;30836&#39;,&#39;30837&#39;,&#39;30852&#39;,&#39;30853&#39;,&#39;30854&#39;,&#39;30864&#39;,&#39;30870&#39;,&#39;30873&#39;,&#39;30881&#39;,&#39;30883&#39;,&#39;30885&#39;,&#39;30888&#39;,&#39;30890&#39;,&#39;30896&#39;,&#39;30904&#39;,&#39;30905&#39;,&#39;30908&#39;,&#39;30909&#39;,&#39;30916&#39;,&#39;30920&#39;,&#39;30925&#39;,&#39;30926&#39;,&#39;30927&#39;,&#39;30935&#39;,&#39;30936&#39;,&#39;30943&#39;,&#39;30955&#39;,&#39;30956&#39;,&#39;30962&#39;,&#39;30971&#39;,&#39;30974&#39;,&#39;30975&#39;,&#39;30979&#39;,&#39;30981&#39;,&#39;30982&#39;,&#39;30983&#39;,&#39;30988&#39;,&#39;30989&#39;,&#39;31006&#39;,&#39;31010&#39;,&#39;31022&#39;,&#39;31025&#39;,&#39;31032&#39;,&#39;31037&#39;,&#39;31038&#39;,&#39;31042&#39;,&#39;31052&#39;,&#39;31053&#39;,&#39;31056&#39;,&#39;31061&#39;,&#39;31064&#39;,&#39;31066&#39;,&#39;31075&#39;,&#39;31086&#39;,&#39;31091&#39;,&#39;31094&#39;,&#39;31097&#39;,&#39;31098&#39;,&#39;31102&#39;,&#39;31112&#39;,&#39;31120&#39;,&#39;31121&#39;,&#39;31125&#39;,&#39;31133&#39;,&#39;31137&#39;,&#39;31158&#39;,&#39;31165&#39;,&#39;31174&#39;,&#39;31177&#39;,&#39;31183&#39;,&#39;31186&#39;,&#39;31194&#39;,&#39;31195&#39;,&#39;31196&#39;,&#39;31201&#39;,&#39;31204&#39;,&#39;31207&#39;,&#39;31213&#39;,&#39;31214&#39;,&#39;31218&#39;,&#39;31220&#39;,&#39;31221&#39;,&#39;31226&#39;,&#39;31229&#39;,&#39;31231&#39;,&#39;31235&#39;,&#39;31238&#39;,&#39;31245&#39;,&#39;31249&#39;,&#39;31252&#39;,&#39;31253&#39;,&#39;31259&#39;,&#39;31260&#39;,&#39;31269&#39;,&#39;31277&#39;,&#39;31279&#39;,&#39;31280&#39;,&#39;31285&#39;,&#39;31286&#39;,&#39;31288&#39;,&#39;31289&#39;,&#39;31295&#39;,&#39;31297&#39;,&#39;31298&#39;,&#39;31316&#39;,&#39;31327&#39;,&#39;31328&#39;,&#39;31336&#39;,&#39;31343&#39;,&#39;31349&#39;,&#39;31355&#39;,&#39;31359&#39;,&#39;31364&#39;,&#39;31365&#39;,&#39;31368&#39;,&#39;31371&#39;,&#39;31375&#39;,&#39;31381&#39;,&#39;31385&#39;,&#39;31387&#39;,&#39;31392&#39;,&#39;31393&#39;,&#39;31398&#39;,&#39;31400&#39;,&#39;31402&#39;,&#39;31406&#39;,&#39;31413&#39;,&#39;31431&#39;,&#39;31437&#39;,&#39;31441&#39;,&#39;31447&#39;,&#39;31453&#39;,&#39;31458&#39;,&#39;31463&#39;,&#39;31473&#39;,&#39;31493&#39;,&#39;31494&#39;,&#39;31496&#39;,&#39;31497&#39;,&#39;31498&#39;,&#39;31501&#39;,&#39;31504&#39;,&#39;31507&#39;,&#39;31510&#39;,&#39;31520&#39;,&#39;31521&#39;,&#39;31525&#39;,&#39;31526&#39;,&#39;31537&#39;,&#39;31544&#39;,&#39;31545&#39;,&#39;31547&#39;,&#39;31551&#39;,&#39;31554&#39;,&#39;31558&#39;,&#39;31561&#39;,&#39;31562&#39;,&#39;31568&#39;,&#39;31575&#39;,&#39;31579&#39;,&#39;31580&#39;,&#39;31582&#39;,&#39;31583&#39;,&#39;31585&#39;,&#39;31590&#39;,&#39;31608&#39;,&#39;31609&#39;,&#39;31620&#39;,&#39;31621&#39;,&#39;31622&#39;,&#39;31626&#39;,&#39;31628&#39;,&#39;31629&#39;,&#39;31630&#39;,&#39;31633&#39;,&#39;31640&#39;,&#39;31641&#39;,&#39;31643&#39;,&#39;31646&#39;,&#39;31650&#39;,&#39;31653&#39;,&#39;31663&#39;,&#39;31668&#39;,&#39;31684&#39;,&#39;31689&#39;,&#39;31696&#39;,&#39;31701&#39;,&#39;31704&#39;,&#39;31715&#39;,&#39;31728&#39;,&#39;31729&#39;,&#39;31731&#39;,&#39;31735&#39;,&#39;31739&#39;,&#39;31741&#39;,&#39;31742&#39;,&#39;31744&#39;,&#39;31745&#39;,&#39;31747&#39;,&#39;31754&#39;,&#39;31756&#39;,&#39;31762&#39;,&#39;31769&#39;,&#39;31770&#39;,&#39;31773&#39;,&#39;31774&#39;,&#39;31776&#39;,&#39;31777&#39;,&#39;31787&#39;,&#39;31790&#39;,&#39;31795&#39;,&#39;31803&#39;,&#39;31806&#39;,&#39;31817&#39;,&#39;31818&#39;,&#39;31824&#39;,&#39;31825&#39;,&#39;31826&#39;,&#39;31835&#39;,&#39;31840&#39;,&#39;31842&#39;,&#39;31844&#39;,&#39;31847&#39;,&#39;31850&#39;,&#39;31851&#39;,&#39;31860&#39;,&#39;31862&#39;,&#39;31871&#39;,&#39;31872&#39;,&#39;31888&#39;,&#39;31897&#39;,&#39;31911&#39;,&#39;31921&#39;,&#39;31923&#39;,&#39;31933&#39;,&#39;31935&#39;,&#39;31946&#39;,&#39;31949&#39;,&#39;31951&#39;,&#39;31956&#39;,&#39;31961&#39;,&#39;31975&#39;,&#39;31977&#39;,&#39;31983&#39;,&#39;31984&#39;,&#39;31987&#39;,&#39;31991&#39;,&#39;32001&#39;,&#39;32006&#39;,&#39;32014&#39;,&#39;32022&#39;,&#39;32025&#39;,&#39;32033&#39;,&#39;32037&#39;,&#39;32038&#39;,&#39;32045&#39;,&#39;32053&#39;,&#39;32060&#39;,&#39;32065&#39;,&#39;32067&#39;,&#39;32071&#39;,&#39;32072&#39;,&#39;32076&#39;,&#39;32077&#39;,&#39;32081&#39;,&#39;32082&#39;,&#39;32088&#39;,&#39;32092&#39;,&#39;32100&#39;,&#39;32102&#39;,&#39;32103&#39;,&#39;32109&#39;,&#39;32113&#39;,&#39;32118&#39;,&#39;32123&#39;,&#39;32128&#39;,&#39;32132&#39;,&#39;32134&#39;,&#39;32135&#39;,&#39;32138&#39;,&#39;32140&#39;,&#39;32142&#39;,&#39;32143&#39;,&#39;32146&#39;,&#39;32150&#39;,&#39;32151&#39;,&#39;32153&#39;,&#39;32157&#39;,&#39;32160&#39;,&#39;32161&#39;,&#39;32162&#39;,&#39;32166&#39;,&#39;32187&#39;,&#39;32191&#39;,&#39;32192&#39;,&#39;32193&#39;,&#39;32195&#39;,&#39;32202&#39;,&#39;32205&#39;,&#39;32206&#39;,&#39;32211&#39;,&#39;32213&#39;,&#39;32215&#39;,&#39;32217&#39;,&#39;32223&#39;,&#39;32238&#39;,&#39;32240&#39;,&#39;32242&#39;,&#39;32243&#39;,&#39;32247&#39;,&#39;32250&#39;,&#39;32252&#39;,&#39;32276&#39;,&#39;32280&#39;,&#39;32282&#39;,&#39;32283&#39;,&#39;32286&#39;,&#39;32295&#39;,&#39;32301&#39;,&#39;32304&#39;,&#39;32310&#39;,&#39;32311&#39;,&#39;32312&#39;,&#39;32323&#39;,&#39;32324&#39;,&#39;32326&#39;,&#39;32336&#39;,&#39;32343&#39;,&#39;32346&#39;,&#39;32348&#39;,&#39;32351&#39;,&#39;32356&#39;,&#39;32360&#39;,&#39;32361&#39;,&#39;32362&#39;,&#39;32365&#39;,&#39;32368&#39;,&#39;32372&#39;,&#39;32374&#39;,&#39;32376&#39;,&#39;32382&#39;,&#39;32392&#39;,&#39;32399&#39;,&#39;32402&#39;,&#39;32416&#39;,&#39;32417&#39;,&#39;32418&#39;,&#39;32421&#39;,&#39;32426&#39;,&#39;32438&#39;,&#39;32450&#39;,&#39;32455&#39;,&#39;32456&#39;,&#39;32457&#39;,&#39;32459&#39;,&#39;32461&#39;,&#39;32469&#39;,&#39;32470&#39;,&#39;32479&#39;,&#39;32480&#39;,&#39;32485&#39;,&#39;32489&#39;,&#39;32494&#39;,&#39;32501&#39;,&#39;32503&#39;,&#39;32511&#39;,&#39;32512&#39;,&#39;32518&#39;,&#39;32519&#39;,&#39;32520&#39;,&#39;32523&#39;,&#39;32525&#39;,&#39;32529&#39;,&#39;32536&#39;,&#39;32538&#39;,&#39;32542&#39;,&#39;32544&#39;,&#39;32551&#39;,&#39;32580&#39;,&#39;32585&#39;,&#39;32587&#39;,&#39;32592&#39;,&#39;32595&#39;,&#39;32596&#39;,&#39;32604&#39;,&#39;32616&#39;,&#39;32618&#39;,&#39;32622&#39;,&#39;32623&#39;,&#39;32624&#39;,&#39;32626&#39;,&#39;32629&#39;,&#39;32633&#39;,&#39;32636&#39;,&#39;32643&#39;,&#39;32647&#39;,&#39;32650&#39;,&#39;32654&#39;,&#39;32662&#39;,&#39;32683&#39;,&#39;32686&#39;,&#39;32690&#39;,&#39;32699&#39;,&#39;32701&#39;,&#39;32705&#39;,&#39;32707&#39;,&#39;32724&#39;,&#39;32728&#39;,&#39;32733&#39;,&#39;32735&#39;,&#39;32749&#39;,&#39;32772&#39;,&#39;32777&#39;,&#39;32786&#39;,&#39;32789&#39;,&#39;32795&#39;,&#39;32796&#39;,&#39;32800&#39;,&#39;32815&#39;,&#39;32818&#39;,&#39;32819&#39;,&#39;32823&#39;,&#39;32825&#39;,&#39;32829&#39;,&#39;32830&#39;,&#39;32834&#39;,&#39;32835&#39;,&#39;32840&#39;,&#39;32841&#39;,&#39;32855&#39;,&#39;32857&#39;,&#39;32865&#39;,&#39;32868&#39;,&#39;32869&#39;,&#39;32871&#39;,&#39;32873&#39;,&#39;32880&#39;,&#39;32883&#39;,&#39;32889&#39;,&#39;32891&#39;,&#39;32892&#39;,&#39;32893&#39;,&#39;32894&#39;,&#39;32900&#39;,&#39;32931&#39;,&#39;32939&#39;,&#39;32945&#39;,&#39;32946&#39;,&#39;32951&#39;,&#39;32958&#39;,&#39;32964&#39;,&#39;32974&#39;,&#39;32975&#39;,&#39;32976&#39;,&#39;32977&#39;,&#39;32980&#39;,&#39;32982&#39;,&#39;32985&#39;,&#39;33001&#39;,&#39;33002&#39;,&#39;33003&#39;,&#39;33008&#39;,&#39;33009&#39;,&#39;33012&#39;,&#39;33014&#39;,&#39;33015&#39;,&#39;33019&#39;,&#39;33027&#39;,&#39;33031&#39;,&#39;33033&#39;,&#39;33042&#39;,&#39;33044&#39;,&#39;33045&#39;,&#39;33049&#39;,&#39;33055&#39;,&#39;33069&#39;,&#39;33083&#39;,&#39;33089&#39;,&#39;33093&#39;,&#39;33094&#39;,&#39;33109&#39;,&#39;33115&#39;,&#39;33116&#39;,&#39;33124&#39;,&#39;33125&#39;,&#39;33126&#39;,&#39;33135&#39;,&#39;33144&#39;,&#39;33149&#39;,&#39;33165&#39;,&#39;33173&#39;,&#39;33185&#39;,&#39;33210&#39;,&#39;33229&#39;,&#39;33234&#39;,&#39;33235&#39;,&#39;33240&#39;,&#39;33264&#39;,&#39;33271&#39;,&#39;33278&#39;,&#39;33288&#39;,&#39;33289&#39;,&#39;33291&#39;,&#39;33295&#39;,&#39;33303&#39;,&#39;33304&#39;,&#39;33305&#39;,&#39;33333&#39;,&#39;33335&#39;,&#39;33336&#39;,&#39;33346&#39;,&#39;33355&#39;,&#39;33376&#39;,&#39;33384&#39;)&lt;br /&gt;
&lt;br /&gt;
And this is the result :-)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfR3nHi5iQLRCla7AnGo1rB7naADXTfVlvk6Ge_ZczS_6BtVW_c9iVKqHgJdkssD47JEPIly2LWfAL5rTNGuCZyoJFDbLnxybSwgZx6dKUu0_KcuDztLj7tdIlLcfU8E2D1J737W8l23U/s1600/europe_gshhg.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;308&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfR3nHi5iQLRCla7AnGo1rB7naADXTfVlvk6Ge_ZczS_6BtVW_c9iVKqHgJdkssD47JEPIly2LWfAL5rTNGuCZyoJFDbLnxybSwgZx6dKUu0_KcuDztLj7tdIlLcfU8E2D1J737W8l23U/s640/europe_gshhg.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/3000309431931039625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/3000309431931039625?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3000309431931039625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3000309431931039625'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2016/08/workaround-for-sql-expression-parsing.html' title='Workaround for: SQL Expression Parsing Error: memory exhausted in QGIS or OGR'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfR3nHi5iQLRCla7AnGo1rB7naADXTfVlvk6Ge_ZczS_6BtVW_c9iVKqHgJdkssD47JEPIly2LWfAL5rTNGuCZyoJFDbLnxybSwgZx6dKUu0_KcuDztLj7tdIlLcfU8E2D1J737W8l23U/s72-c/europe_gshhg.jpg" height="72" width="72"/><thr:total>1</thr:total><georss:featurename>9820 Merelbeke, Belgium</georss:featurename><georss:point>50.9945496 3.7456402000000253</georss:point><georss:box>50.8345976 3.4229167000000253 51.154501599999996 4.0683637000000257</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-3892756284200146693</id><published>2016-03-21T17:17:00.000+01:00</published><updated>2016-03-21T17:18:10.164+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dismo"/><category scheme="http://www.blogger.com/atom/ns#" term="MarineSPEED"/><category scheme="http://www.blogger.com/atom/ns#" term="R"/><category scheme="http://www.blogger.com/atom/ns#" term="SDM"/><title type='text'>dismo pwdSample and ssb for a large number of species distribution records</title><content type='html'>For my &lt;a href=&quot;http://marinespeed.org/&quot; target=&quot;_blank&quot;&gt;MarineSPEED&lt;/a&gt; dataset of species I&#39;m trying to create non-random cross-validation datasets. In order to do this I was looking at the pwdSample and ssb functions from the dismo package. pwdSample calculates a pair-wise distance sampling and ssb calculates the spatial sorting bias. More information about these functions can be found in the excellent paper by Robert Hijmans (2012): &lt;a href=&quot;http://onlinelibrary.wiley.com/doi/10.1890/11-0826.1/abstract&quot; target=&quot;_blank&quot;&gt;&quot;Cross-validation of species distribution models: removing spatial sorting bias and calibration with a null model&quot;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Problem is that both functions calculate a distance matrix between two sets of points which starts to fail when the number of points is (very) large. To fix this I re-implemented the functions replacing the matrix calculation and subsequent row minimum finding with the same functionality but using a divide and conquer strategy by calculating distance matrices on subsets, taking the min distance and then taking the min distances of these min distances to get row based minima.&lt;br /&gt;
&lt;br /&gt;
In other words I replaced:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #333333; line-height: 16.25px;&quot;&gt;fromd &amp;lt;- apply(distfun(fixed, reference), &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, min)&lt;/pre&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #333333; line-height: 16.25px;&quot;&gt;mindist &amp;lt;- &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(distfun, a, b) {
  partition_count &amp;lt;- (&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt; %/% (&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;100&lt;/span&gt; / NROW(b))) + &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;
  parts &amp;lt;- dismo::kfold(x=b, k=partition_count)
  r &amp;lt;- c()
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt;(i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;:partition_count) {
    mind &amp;lt;- apply(distfun(a, b[parts==i,]), &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, min)
    r &amp;lt;- cbind(r, mind)
  }
  apply(r, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, min)
}
  
fromd &amp;lt;- mindist(distfun, fixed, reference)&lt;/pre&gt;
&lt;br /&gt;
The full pwdSample function then becomes:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;pwdSample_robust &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(fixed, sample, reference, tr &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0.33&lt;/span&gt;, nearest&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;, n&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, lonlat &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;, warn &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;) {
  &lt;span style=&quot;color: #888888;&quot;&gt;## DIVIDE reference, calculate distance matrix, get min, COMBINE: take min of the min, do rest of the pwdSample logic&lt;/span&gt;
  distHaversine &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(p1, p2) {
    r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;6378137&lt;/span&gt;
    toRad &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; pi&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;180&lt;/span&gt;
    p1 &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; p1 &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; toRad
    p2 &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; p2 &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; toRad
    p &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(p1[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;], p1[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;], p2[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;], p2[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;])
    dLat &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; (p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;4&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;])
    dLon &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; (p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;3&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;])
    a &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; sin(dLat&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; sin(dLat&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;) &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; cos(p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; cos(p[, 
                                                         &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;4&lt;/span&gt;]) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; sin(dLon&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; sin(dLon&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;)
    dist &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; atan2(sqrt(a), sqrt(&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; a)) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; r
    as.vector(dist)
  }
  distGeo &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x, y) {
    n &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; nrow(x)
    m &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; nrow(y)
    dm &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; matrix(ncol &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; m, nrow &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; n)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;n) {
      dm[i, ] &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; distHaversine(x[i, , drop &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;], y)
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(dm)
  }
  distPlane &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x, y) {
    dfun &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x, y) {
      sqrt((x[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; y[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;])&lt;span style=&quot;color: #333333;&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; (x[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; y[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;])&lt;span style=&quot;color: #333333;&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;)
    }
    n &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; nrow(x)
    m &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; nrow(y)
    dm &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; matrix(ncol &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; m, nrow &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; n)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;n) {
      dm[i, ] &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; dfun(x[i, , drop &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;], y)
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(dm)
  }
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (lonlat) {
    distfun &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; distGeo
  }
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; {
    distfun &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; distPlane
  }
  stopifnot(tr &lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0&lt;/span&gt;)
  n &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; round(n)
  stopifnot(n &lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;)
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (inherits(fixed, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;SpatialPoints&quot;&lt;/span&gt;)) 
    fixed &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; coordinates(fixed)
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (inherits(sample, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;SpatialPoints&quot;&lt;/span&gt;)) 
    sample &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; coordinates(sample)
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (inherits(reference, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;SpatialPoints&quot;&lt;/span&gt;)) 
    reference &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; coordinates(reference)
  fixed &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(fixed)[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]
  sample &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(sample)[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]
  reference &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(reference)[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (warn) {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (nrow(sample) &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt; nrow(fixed)) {
      warning(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;nrow(sample) &amp;lt; nrow(fixed)&quot;&lt;/span&gt;)
    }
  }
  
  mindist &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(distfun, a, b) {
    partition_count &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; (&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;%/%&lt;/span&gt; (&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;100&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt; NROW(b))) &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;
    parts &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; dismo&lt;span style=&quot;color: #333333;&quot;&gt;::&lt;/span&gt;kfold(x&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;b, k&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;partition_count)
    r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c()
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt;(i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;partition_count) {
      mind &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; apply(distfun(a, b[parts&lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt;i,]), &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, min)
      r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(r, mind)
    }
    apply(r, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, min)
  }
  
  fromd &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; mindist(distfun, fixed, reference) &lt;span style=&quot;color: #888888;&quot;&gt;##apply(distfun(fixed, reference), 1, min)&lt;/span&gt;
  tod &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; mindist(distfun, sample, reference) &lt;span style=&quot;color: #888888;&quot;&gt;##apply(distfun(sample, reference), 1, min)&lt;/span&gt;
  ngb &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; matrix(&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;NA&lt;/span&gt;, nrow &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; length(fromd), ncol &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; n)
  iter &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; sample(&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;nrow(fixed))
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (j &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;n) {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; iter) {
      d &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; abs(tod &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; fromd[i])
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (min(d) &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt; (tr &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; fromd[i])) {
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (nearest) {
          x &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; which.min(d)
        }
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; {
          x &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; sample(which(d &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt; (tr &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; fromd[i])), size &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;)
        }
        ngb[i, j] &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; x
        tod[x] &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;Inf&lt;/span&gt;
      }
    }
  }
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(ngb)
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
and the ssb function then looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;ssb &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(p, a, reference, lonlat &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;, avg &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;) {
  distHaversine &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(p1, p2) {
    r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;6378137&lt;/span&gt;
    toRad &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; pi&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;180&lt;/span&gt;
    p1 &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; p1 &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; toRad
    p2 &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; p2 &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; toRad
    p &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(p1[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;], p1[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;], p2[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;], p2[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;])
    dLat &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; (p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;4&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;])
    dLon &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; (p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;3&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;])
    a &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; sin(dLat&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; sin(dLat&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;) &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; cos(p[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; cos(p[, 
                                                         &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;4&lt;/span&gt;]) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; sin(dLon&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; sin(dLon&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;)
    dist &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; atan2(sqrt(a), sqrt(&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; a)) &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; r
    as.vector(dist)
  }
  distGeo &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x, y) {
    n &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; nrow(x)
    m &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; nrow(y)
    dm &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; matrix(ncol &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; m, nrow &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; n)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;n) {
      dm[i, ] &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; distHaversine(x[i, , drop &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;], y)
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(dm)
  }
  distPlane &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x, y) {
    dfun &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(x, y) {
      sqrt((x[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; y[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;])&lt;span style=&quot;color: #333333;&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; (x[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt; y[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;])&lt;span style=&quot;color: #333333;&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;)
    }
    n &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; nrow(x)
    m &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; nrow(y)
    dm &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; matrix(ncol &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; m, nrow &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; n)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;n) {
      dm[i, ] &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; dfun(x[i, , drop &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;], y)
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(dm)
  }
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (lonlat) {
    distfun &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; distGeo
  }
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; {
    distfun &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; distPlane
  }
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (inherits(p, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;SpatialPoints&quot;&lt;/span&gt;)) 
    p &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; coordinates(p)
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (inherits(a, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;SpatialPoints&quot;&lt;/span&gt;)) 
    a &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; coordinates(a)
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (inherits(reference, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;SpatialPoints&quot;&lt;/span&gt;)) 
    reference &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; coordinates(reference)
  p &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(p)[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]
  a &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(a)[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]
  reference &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(reference)[, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]
  
  mindist &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(distfun, a, b) {
    partition_count &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; (&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;%/%&lt;/span&gt; (&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1000&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt; NROW(b))) &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;
    parts &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; dismo&lt;span style=&quot;color: #333333;&quot;&gt;::&lt;/span&gt;kfold(x&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;b, k&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;partition_count)
    r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c()
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt;(i &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;partition_count) {
      mind &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; apply(distfun(a, b[parts&lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt;i,]), &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, min)
      r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(r, mind)
    }
    apply(r, &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, min)
  }
  pd &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; mindist(distfun, p, reference) &lt;span style=&quot;color: #888888;&quot;&gt;#   pd &amp;lt;- apply(distfun(p, reference), 1, min)&lt;/span&gt;
  ad &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; mindist(distfun, a, reference) &lt;span style=&quot;color: #888888;&quot;&gt;#   ad &amp;lt;- apply(distfun(a, reference), 1, min)&lt;/span&gt;
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (avg) {
    res &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(mean(pd), mean(ad))
    colnames(res) &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;p&quot;&lt;/span&gt;, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;a&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(res)
  }
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(list(pd, ad))
  }
}
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/3892756284200146693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/3892756284200146693?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3892756284200146693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3892756284200146693'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2016/03/dismo-pwdsample-and-ssb-for-large.html' title='dismo pwdSample and ssb for a large number of species distribution records'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-3534712270351111732</id><published>2016-02-23T09:57:00.002+01:00</published><updated>2016-02-23T09:58:54.162+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clustering"/><category scheme="http://www.blogger.com/atom/ns#" term="projections"/><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Spatially partioning lat long data in R with sperrorest partition.kmeans</title><content type='html'>While trying out sperrorest::partition.kmeans I started wondering whether it did handle the date line (180, -180) correctly. A small clustering test confirmed that sperrorest doesn&#39;t take into account the spatial projection of the data and doesn&#39;t cluster together points from the same spatial area. To solve this I decided to convert my lat long data into cartesian coordinates and then call the partition.kmeans function.&lt;br /&gt;
&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;library(sperrorest)

lonlat_xyz &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(data, lonlat_cols) {
   rad_coordinates &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; data[,lonlat_cols] &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; (pi&lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;180&lt;/span&gt;)
   lon &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; rad_coordinates[,lonlat_cols[&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;]]
   lat &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; rad_coordinates[,lonlat_cols[&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;2&lt;/span&gt;]]
   r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(cos(lat)&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;cos(lon), cos(lat)&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;sin(lon), sin(lat))
   colnames(r) &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;x&quot;&lt;/span&gt;, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;y&quot;&lt;/span&gt;, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;z&quot;&lt;/span&gt;)
   &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(r)
}

cartesian &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; lonlat_xyz(data, lonlat) 
partitions &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; sperrorest&lt;span style=&quot;color: #333333;&quot;&gt;::&lt;/span&gt;partition.kmeans(cartesian, coords &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; c(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;x&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;y&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;z&quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/3534712270351111732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/3534712270351111732?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3534712270351111732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3534712270351111732'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2016/02/spatially-partioning-lat-long-data-in-r.html' title='Spatially partioning lat long data in R with sperrorest partition.kmeans'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-2379584456068315252</id><published>2015-11-24T22:22:00.000+01:00</published><updated>2015-11-24T22:22:00.152+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="REPL"/><title type='text'>Simple and lightweight C# REPL with Mono.CSharp</title><content type='html'>Recently I needed a small C# REPL because I wanted to test some code on a computer where I couldn&#39;t install Visual Studio and the code I wanted to test used a lot of (Service) references so I couldn&#39;t use something like &lt;a href=&quot;https://www.linqpad.net/&quot; target=&quot;_blank&quot;&gt;LINQPad&lt;/a&gt;. I first started with Roslyn but had some issues with using it from Visual Studio 2012 and as I didn&#39;t want to spend too much time on this problem I went for Mono.CSharp.Evaluator. Mono.CSharp can be installed with npm: Install-Package Mono.CSharp and only adds one reference which is a nice side-effect of using Mono.CSharp instead of the Roslyn scripting API.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitfMRjYOkj5K0q55_pJFVYPm1ZHUoB8OKAeJ_lbssiR_ip-IHP5NekHX3P0miAroyS8W1OyGf3-uDR4gY3gJcLAoaPLET7rqI2A4ynTHV0XUgq57FvKVbOJ6zEHHqb8i-pRHOzpWc7f7s/s1600/SimpleREPL.jpg&quot; imageanchor=&quot;1&quot;&gt;&lt;img alt=&quot;Simple C# REPL with Mono.CSharp&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitfMRjYOkj5K0q55_pJFVYPm1ZHUoB8OKAeJ_lbssiR_ip-IHP5NekHX3P0miAroyS8W1OyGf3-uDR4gY3gJcLAoaPLET7rqI2A4ynTHV0XUgq57FvKVbOJ6zEHHqb8i-pRHOzpWc7f7s/s1600/SimpleREPL.jpg&quot; title=&quot;Simple REPL&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Here is the full code (&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/misc/SimpleREPL.cs&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;) of my simple REPL. If you end a statement with &#39;;&#39; then it will run without returning an output, use this when you want to create objects . If you omit the &#39;;&#39; then the expression is evaluated and the result printed. Note that I added a reference to my program to the evaluator in order to be able to call the Factorial function. Also fon&#39;t to forget to run the necesssary Using statements.&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #888888;&quot;&gt;// Install-Package Mono.CSharp&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;System&lt;/span&gt;;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;System.Reflection&lt;/span&gt;;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;Mono.CSharp&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;SimpleREPL&lt;/span&gt;
{
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;ExtraMath&lt;/span&gt;
  {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;Factorial&lt;/span&gt;(&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; n)
    {
      &lt;span style=&quot;color: #888888;&quot;&gt;// naive implementation but fast enough for small n&lt;/span&gt;
      &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; result = &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; i = &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;; i &amp;lt;= n; i++)
      {
        result *= i;
      }
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; result;
    }
  }

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;internal&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Program&lt;/span&gt;
  {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;Main&lt;/span&gt;(&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;string&lt;/span&gt;[] args)
    {
      Console.WriteLine(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Starting Simple C# REPL, enter q to quit&quot;&lt;/span&gt;);
      &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;var&lt;/span&gt; evaluator = &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; Evaluator(&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; CompilerContext(
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;CompilerSettings&lt;/span&gt;(),
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;ConsoleReportPrinter&lt;/span&gt;()));
      evaluator.ReferenceAssembly(Assembly.GetExecutingAssembly());
      evaluator.Run(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;using System;&quot;&lt;/span&gt;);
      evaluator.Run(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;using SimpleREPL;&quot;&lt;/span&gt;);
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;while&lt;/span&gt; (&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;true&lt;/span&gt;)
      {
        Console.Write(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&amp;gt; &quot;&lt;/span&gt;);
        &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;var&lt;/span&gt; input = Console.ReadLine();
        input = input.TrimStart(&lt;span style=&quot;color: #0044dd;&quot;&gt;&#39;&amp;gt;&#39;&lt;/span&gt;, &lt;span style=&quot;color: #0044dd;&quot;&gt;&#39; &#39;&lt;/span&gt;);
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (input.ToLower() == &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;q&quot;&lt;/span&gt;)
        {
          &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;;
        }
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;try&lt;/span&gt;
        {
          &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (input.EndsWith(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;;&quot;&lt;/span&gt;))
          {
            evaluator.Run(input);
          }
          &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt;
          {
            &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;var&lt;/span&gt; output = evaluator.Evaluate(input);
            Console.WriteLine(output);
          }
        }
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;catch&lt;/span&gt;
        {
          Console.WriteLine(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Error in input&quot;&lt;/span&gt;);
        }
      }
    }
  }
}&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/2379584456068315252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/2379584456068315252?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/2379584456068315252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/2379584456068315252'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2015/11/simple-lightweight-csharp-repl.html' title='Simple and lightweight C# REPL with Mono.CSharp'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitfMRjYOkj5K0q55_pJFVYPm1ZHUoB8OKAeJ_lbssiR_ip-IHP5NekHX3P0miAroyS8W1OyGf3-uDR4gY3gJcLAoaPLET7rqI2A4ynTHV0XUgq57FvKVbOJ6zEHHqb8i-pRHOzpWc7f7s/s72-c/SimpleREPL.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-456138928896016236</id><published>2015-11-11T11:11:00.000+01:00</published><updated>2015-11-12T10:29:53.802+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="graph"/><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Weighted Relative Neighborhood Graph in R based on cccd::rng</title><content type='html'>The R package &lt;a href=&quot;https://cran.r-project.org/web/packages/cccd/index.html&quot; target=&quot;_blank&quot;&gt;cccd&lt;/a&gt; contains a nice implementation of the Relative Neighborhood Graph (rng) but in the current version 1.5 it returns a non-weighted &lt;a href=&quot;https://cran.r-project.org/web/packages/igraph/index.html&quot;&gt;igraph&lt;/a&gt;. But for one of my experiments I needed the weighted version so I&#39;ve slightly changed the code to get an igraph with weights.&lt;br /&gt;

&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;rng &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;function&lt;/span&gt; (x &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;NULL&lt;/span&gt;, dx &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;NULL&lt;/span&gt;, r &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;, method &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;NULL&lt;/span&gt;, usedeldir &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;TRUE&lt;/span&gt;,
          open &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;TRUE&lt;/span&gt;, k &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;NA&lt;/span&gt;, algorithm &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;cover_tree&amp;quot;&lt;/span&gt;, weighted &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;TRUE&lt;/span&gt;) {
  &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (is.na(k)) {
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (is.null(dx)) {
      &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (is.null(x))
        stop(&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;One of x or dx must be given.&amp;quot;&lt;/span&gt;)
      dx &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; as.matrix(proxy&lt;span style=&quot;color: #333333&quot;&gt;::&lt;/span&gt;dist(x, method &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; method))
    }
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;else&lt;/span&gt; {
      usedeldir &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;FALSE&lt;/span&gt;
    }
    n &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; nrow(dx)
    A &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; matrix(&lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;0&lt;/span&gt;, nrow &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; n, ncol &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; n)
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (is.vector(x))
      x &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; matrix(x, ncol &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;)
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (usedeldir &lt;span style=&quot;color: #333333&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ncol(x) &lt;span style=&quot;color: #333333&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;2&lt;/span&gt;) {
      del &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; deldir&lt;span style=&quot;color: #333333&quot;&gt;::&lt;/span&gt;deldir(x[, &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;], x[, &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;2&lt;/span&gt;])
      &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;for&lt;/span&gt; (edge &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;:&lt;/span&gt;nrow(del&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;delsgs)) {
        i &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; del&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;delsgs[edge, &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;5&lt;/span&gt;]
        j &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; del&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;delsgs[edge, &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;6&lt;/span&gt;]
        d &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; min(apply(cbind(dx[i, &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;c(i, j)], dx[j, &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;c(i, j)]), &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;, max))
        rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; r &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; dx[i, j]
        &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; ((open &lt;span style=&quot;color: #333333&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;&lt;/span&gt; d) &lt;span style=&quot;color: #333333&quot;&gt;||&lt;/span&gt; rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;=&lt;/span&gt; d) {
          A[i, j] &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; A[j, i] &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; rd
        }
      }
    } &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;else&lt;/span&gt; {
      diag(dx) &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;Inf&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;:&lt;/span&gt;n) {
        &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;for&lt;/span&gt; (j &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;in&lt;/span&gt; setdiff(&lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;:&lt;/span&gt;n, i)) {
          d &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; min(apply(cbind(dx[i, &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;c(i, j)], dx[j, &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt;c(i, j)]), &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;, max))
          rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; r &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; dx[i, j]
          &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; ((open &lt;span style=&quot;color: #333333&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;&lt;/span&gt; d) &lt;span style=&quot;color: #333333&quot;&gt;||&lt;/span&gt; rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;=&lt;/span&gt; d) {
            A[i, j] &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; A[j, i] &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; rd
          }
        }
      }
    }
    diag(A) &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;0&lt;/span&gt;
    out &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; graph.adjacency(A, mode &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;undirected&amp;quot;&lt;/span&gt;, weighted &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; weighted)
  } &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;else&lt;/span&gt; {
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (is.null(x))
      stop(&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;x must not be null&amp;quot;&lt;/span&gt;)
    n &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; nrow(x)
    k &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; min(k, n &lt;span style=&quot;color: #333333&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;)
    dx &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; get.knn(x, k &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; k, algorithm &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; algorithm)
    edges &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;NULL&lt;/span&gt;
    weights &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;NULL&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;:&lt;/span&gt;n) {
      i.indices &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; dx&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;nn.index[i, ]
      i.dists &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; dx&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;nn.dist[i, ]
      &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;for&lt;/span&gt; (j &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;:&lt;/span&gt;k) {
        rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; r &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; i.dists[j]&lt;span style=&quot;color: #333333&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;2&lt;/span&gt;
        j.indices &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; dx&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;nn.index[i.indices[j], ]
        j.dists &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; dx&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;nn.dist[i.indices[j], ]
        rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; r &lt;span style=&quot;color: #333333&quot;&gt;*&lt;/span&gt; i.dists[j]
        S &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; setdiff(intersect(i.indices, j.indices),
                     c(i, i.indices[j]))
        &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (length(S) &lt;span style=&quot;color: #333333&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #6600EE; font-weight: bold&quot;&gt;0&lt;/span&gt;) {
          d &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;Inf&lt;/span&gt;
          &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;for&lt;/span&gt; (si &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;in&lt;/span&gt; S) {
            a &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; which(i.indices &lt;span style=&quot;color: #333333&quot;&gt;==&lt;/span&gt; si)
            b &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; which(j.indices &lt;span style=&quot;color: #333333&quot;&gt;==&lt;/span&gt; si)
            d &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; min(d, max(i.dists[a], j.dists[b]))
          }
          &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; ((open &lt;span style=&quot;color: #333333&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;&lt;/span&gt; d) &lt;span style=&quot;color: #333333&quot;&gt;||&lt;/span&gt; rd &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;=&lt;/span&gt; d) {
            edges &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(edges, c(i, i.indices[j]))
            weights &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; cbind(weights, rd)
          }
        }
      }
    }
    g &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; graph(edges, n &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; n, directed &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;FALSE&lt;/span&gt;)
    &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt;( weighted ) {
      edge.attributes(g) &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; list(weight&lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt;weights)
    }
    out &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; simplify(g, edge.attr.comb &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;first&amp;quot;&lt;/span&gt;)
  }
  &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: #333333&quot;&gt;!&lt;/span&gt;is.null(x)) {
    out&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;layout &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; x
  }
  out&lt;span style=&quot;color: #333333&quot;&gt;$&lt;/span&gt;r &lt;span style=&quot;color: #333333&quot;&gt;&amp;lt;-&lt;/span&gt; r
  out
}
&lt;/pre&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/456138928896016236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/456138928896016236?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/456138928896016236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/456138928896016236'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2015/11/weighted-relative-neighborhood-graph-in.html' title='Weighted Relative Neighborhood Graph in R based on cccd::rng'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-3691880518030935318</id><published>2015-10-22T21:12:00.000+02:00</published><updated>2015-10-22T21:12:00.075+02:00</updated><title type='text'>Five Things We Need to Know About Technological Change by Neil Postman</title><content type='html'>What follows are my notes and highlighted sections from an excellent essay from Neil Postman. My comments are in italic.&lt;br /&gt;
Source:&amp;nbsp;&lt;a href=&quot;http://web.cs.ucdavis.edu/~rogaway/classes/188/materials/postman.pdf&quot;&gt;http://web.cs.ucdavis.edu/~rogaway/classes/188/materials/postman.pdf&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;Five Things We Need to Know About Technological Change&lt;/span&gt;&lt;/h2&gt;
&lt;h4&gt;
First Idea&lt;/h4&gt;
The first idea is that all technological change is a trade-off.&lt;br /&gt;
&lt;br /&gt;
This means that for every advantage a new technology offers, there is always a corresponding disadvantage. The disadvantage may exceed in importance the advantage, or the advantage may well be worth the cost.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;u&gt;note&lt;/u&gt;: cost and benefits are different for different persons&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;action&lt;/u&gt;: reflect on cost and benefits of the technology you use (plane, car, computer, smartphone, specific websites, webshops, apps, food tech, health tech, ebooks, &quot;free&quot; books/pdfs, skype, telephone, messenger/sms, ...)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps the best way I can express this idea is to say that the question, “What will a new technology do?” is no more important than the question, “What will a new technology undo?” Indeed, the latter question is more important, precisely because it is asked so infrequently. One might say, then, that a sophisticated perspective on technological change includes one’s being skeptical of Utopian and Messianic visions drawn by those who have no sense of history or of the precarious balances on which culture depends. In fact, if it were up to me, I would forbid anyone from talking about the new information technologies unless the person can demonstrate that he or she knows something about the social and psychic effects of the alphabet, the mechanical clock, the printing press, and telegraphy. In other words, knows something about the costs of great technologies.&lt;br /&gt;
&lt;br /&gt;
Idea Number One, then, is that culture always pays a price for technology.&lt;br /&gt;
&lt;h4&gt;
Second Idea&lt;/h4&gt;
This leads to the second idea, which is that the advantages and disadvantages of new technologies are never distributed evenly among the population. This means that every new technology benefits some and harms others. There are even some who are not affected at all.&lt;br /&gt;
&lt;br /&gt;
The questions, then, that are never far from the mind of a person who is knowledgeable about technological change are these: Who specifically benefits from the development of a new technology? Which groups, what type of person, what kind of industry will be favored? And, of course, which groups of people will thereby be harmed?&lt;br /&gt;
&lt;br /&gt;
That is why it is always necessary for us to ask of those who speak enthusiastically of computer technology, why do you do this? What interests do you represent? To whom are you hoping to give power? From whom will you be withholding power?&lt;br /&gt;
&lt;br /&gt;
I do not mean to attribute unsavory, let alone sinister motives to anyone. I say only that since technology favors some people and harms others, these are questions that must always be asked. And so, that there are always winners and losers in technological change is the second idea.&lt;br /&gt;
&lt;h4&gt;
Third Idea&lt;/h4&gt;
Embedded in every technology there is a powerful idea, sometimes two or three powerful&amp;nbsp;ideas. These ideas are often hidden from our view because they are of a somewhat abstract nature. But this should not be taken to mean that they do not have practical consequences.&lt;br /&gt;
&lt;br /&gt;
Perhaps you are familiar with the old adage that says: To a man with a hammer, everything looks like a nail. We may extend that truism: To a person with a pencil, everything looks like a sentence. To a person with a TV camera, everything looks like an image. To a person with a computer, everything looks like data. I do not think we need to take these aphorisms literally. But what they call to our attention is that every technology has a prejudice. Like language itself, it predisposes us to favor and value certain perspectives and accomplishments. In a culture without writing, human memory is of the greatest importance, as are the proverbs, sayings and songs which contain the accumulated oral wisdom of centuries.... &amp;nbsp;The television person values immediacy, not history. And computer people, what shall we say of them? Perhaps we can say that the computer person values information, not&amp;nbsp;knowledge, certainly not wisdom. Indeed, in the computer age, the concept of wisdom may vanish&amp;nbsp;altogether.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;u&gt;note:&lt;/u&gt; see also Nicolas Carr (impact of Google on thinking/memory)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
The third idea, then, is that every technology has a philosophy which is given expression in how the&amp;nbsp;technology makes people use their minds, in what it makes us do with our bodies, in how it codifies the world, in which of our senses it amplifies, in which of our emotional and intellectual tendencies it&amp;nbsp;disregards. This idea is the sum and substance of what the great Catholic prophet, Marshall McLuhan&amp;nbsp;meant when he coined the famous sentence, “The medium is the message.”&lt;br /&gt;
&lt;h4&gt;
Fourth Idea&lt;/h4&gt;
Technological change is not additive; it is ecological.&lt;br /&gt;
&lt;br /&gt;
A new medium does not add something; it changes everything. In the year 1500, after the printing press was invented, you did not have old Europe plus the printing press. You had a different Europe. After television, America was not America plus television. Television gave a new coloration to every political campaign, to every home, to every school, to every church, to every industry, and so on.&lt;br /&gt;
&lt;br /&gt;
That is why we must be cautious about technological innovation. The consequences of technological change are always vast, often unpredictable and largely irreversible. That is also why we must be suspicious of capitalists. Capitalists are by definition not only personal risk takers but, more to the point, cultural risk takers. The most creative and daring of them hope to exploit new technologies to the fullest, and do not much care what traditions are overthrown in the process or whether or not a culture is prepared to function without such traditions. Capitalists are, in a word, radicals.&lt;br /&gt;
&lt;h4&gt;
Fifth Idea&lt;/h4&gt;
I come now to the fifth and final idea, which is that media tend to become mythic. I use this word in the sense in which it was used by the French literary critic, Roland Barthes. He used the word “myth” to refer to a common tendency to think of our technological creations as if they were God-given, as if they were a part of the natural order of things. I have on occasion asked my students if they know when the alphabet was invented. The question astonishes them. It is as if I asked them when clouds and trees were invented. The alphabet, they believe, was not something that was invented. It just is. It is this way with many products of human culture but with none more consistently than technology. Cars, planes, TV, movies, newspapers—they have achieved mythic status because they are perceived as gifts of nature, not as artifacts produced in a specific political and historical context.&lt;br /&gt;
&lt;br /&gt;
When a technology become mythic, it is always dangerous because it is then accepted as it is, and is&lt;br /&gt;
therefore not easily susceptible to modification or control.&lt;br /&gt;
&lt;br /&gt;
What I am saying is that our enthusiasm for technology can turn into a form of idolatry and our belief in its beneficence can be a false absolute. The best way to view technology is as a strange intruder, to remember that technology is not part of God’s plan but a product of human creativity and hubris, and that its capacity for good or evil rests entirely on human awareness of what it does for us and to us.&lt;br /&gt;
&lt;h4&gt;
Conclusion&lt;/h4&gt;
And so, these are my five ideas about technological change. First, that we always pay a price for&amp;nbsp;technology; the greater the technology, the greater the price. Second, that there are always winners and losers, and that the winners always try to persuade the losers that they are really winners. Third, that there is embedded in every great technology an epistemological, political or social prejudice. Sometimes that bias is greatly to our advantage. Sometimes it is not. The printing press annihilated the oral tradition; telegraphy annihilated space; television has humiliated the word; the computer, perhaps, will degrade community life. And so on. Fourth, technological change is not additive; it is ecological, which means, it changes everything and is, therefore, too important to be left entirely in the hands of Bill Gates. And fifth, technology tends to become mythic; that is, perceived as part of the natural order of things, and therefore tends to control more of our lives than is good for us.&lt;br /&gt;
&lt;br /&gt;
If we had more time, I could supply some additional important things about technological change but I will stand by these for the moment, and will close with this thought. In the past, we experienced technological change in the manner of sleep-walkers. Our unspoken slogan has been “technology über alles,” and we have been willing to shape our lives to fit the requirements of technology, not the requirements of culture. This is a form of stupidity, especially in an age of vast technological change. We need to proceed with our eyes wide open so that we may use technology rather than be used by it.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/3691880518030935318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/3691880518030935318?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3691880518030935318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/3691880518030935318'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2015/10/technological-change.html' title='Five Things We Need to Know About Technological Change by Neil Postman'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-5672459983956378355</id><published>2015-10-06T11:26:00.000+02:00</published><updated>2015-10-06T13:43:26.004+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Workaround object &#39;couleursIn&#39; not found in R package eVenn version 2.2</title><content type='html'>When trying to define a venn diagram with custom colors in the eVenn diagram:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;set.seed(&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;42&lt;/span&gt;)
d &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; data.frame(a &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; sample(rep(c(&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;), &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;20&lt;/span&gt;)), 
                b &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; sample(rep(c(&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;), &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;20&lt;/span&gt;)), 
                c &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; sample(rep(c(&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;), &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;20&lt;/span&gt;)))
evenn(matLists&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;as.matrix(d), display &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;, couleurs &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; c(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#90BA6E&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#956EAD&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#9F5845&quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
I encountered the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Error: object &#39;couleursIn&#39; not found&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
This error only occurs when you pass a vector with multiple colors to &lt;i&gt;couleurs&lt;/i&gt; and you&#39;ve set &lt;i&gt;Solid = TRUE&lt;/i&gt;, which is the default value. First thing to do after getting the error is calling &lt;i&gt;dev.off() &lt;/i&gt;as the error will have left a connection to the png file open. To fix the error you have to define a variable &lt;i&gt;couleursIn &lt;/i&gt;with colors with alpha values if you want to create similar venn diagrams as the default ones but with different colors:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;couleursIn &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; c(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#90BA6E80&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#956EAD80&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#9F584580&quot;&lt;/span&gt;)
evenn(matLists&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;as.matrix(d), display &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;TRUE&lt;/span&gt;, couleurs &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; c(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#90BA6E&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#956EAD&quot;&lt;/span&gt;,&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#9F5845&quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Note the 80 at the end of each color which stands for an alpha value of 128 which is 50%. This can be checked with &lt;i&gt;col2rgb(&quot;#90BA6E80&quot;, alpha = TRUE)&lt;/i&gt;.</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/5672459983956378355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/5672459983956378355?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/5672459983956378355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/5672459983956378355'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2015/10/evenn-couleursin-not-found.html' title='Workaround object &#39;couleursIn&#39; not found in R package eVenn version 2.2'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-9093072692791519206</id><published>2015-09-24T14:58:00.000+02:00</published><updated>2015-10-06T13:43:35.468+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Workaround missing support for as.formula in R package maxlike version 0.1-5</title><content type='html'>Today I noticed that the predict function for maxlike didn&#39;t support models build with formulas from &quot;as.formula&quot;. The error I got was:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Error in predict.maxlikeFit(model, data.frame(p), ...) :&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; at least 1 covariate in the formula is not in rasters.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I send in a pull request but in the mean time you can workaround this problem with the following wrapper for the maxlike function:

&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #888888;&quot;&gt;## workaround missing support for as.formula in maxlike&lt;/span&gt;
maxlike &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(formula, &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;...&lt;/span&gt;) {
  m &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; maxlike&lt;span style=&quot;color: #333333;&quot;&gt;::&lt;/span&gt;maxlike(formula, &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;...&lt;/span&gt;)
  m&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;/span&gt;call&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;/span&gt;formula &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; formula
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt;(m)
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/9093072692791519206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/9093072692791519206?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/9093072692791519206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/9093072692791519206'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2015/09/workaround-missing-support-for.html' title='Workaround missing support for as.formula in R package maxlike version 0.1-5'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-2559516412977873564</id><published>2015-09-24T13:19:00.002+02:00</published><updated>2015-10-06T13:43:18.367+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Workaround &quot;n.trees&quot; is missing in R package gbm version 2.1.1</title><content type='html'>Just short note to anyone encountering following error in the &lt;a href=&quot;https://cran.r-project.org/web/packages/gbm/&quot; target=&quot;_blank&quot;&gt;gbm&lt;/a&gt; package version 2.1.1:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;Error in paste(&quot;Using&quot;, n.trees, &quot;trees...\n&quot;) :&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; argument &quot;n.trees&quot; is missing, with no default&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This issue will be fixed in the next version but in the mean time I&#39;ll post my workaround. If you add following function to your code then everything should work:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #888888;&quot;&gt;## work around bug in gbm 2.1.1&lt;/span&gt;
predict.gbm &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt; (object, newdata, n.trees, type &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;link&quot;&lt;/span&gt;, single.tree &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;, &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;...&lt;/span&gt;) {
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (missing(n.trees)) {
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (object&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;/span&gt;train.fraction &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;) {
      n.trees &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; gbm.perf(object, method &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;test&quot;&lt;/span&gt;, plot.it &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;)
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: #333333;&quot;&gt;!&lt;/span&gt;is.null(object&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;/span&gt;cv.error)) {
      n.trees &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; gbm.perf(object, method &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;cv&quot;&lt;/span&gt;, plot.it &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;)
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; {
      n.trees &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; length(object&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;/span&gt;train.error)
    }
    cat(paste(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Using&quot;&lt;/span&gt;, n.trees, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;trees...\n&quot;&lt;/span&gt;))
    gbm&lt;span style=&quot;color: #333333;&quot;&gt;::&lt;/span&gt;predict.gbm(object, newdata, n.trees, type, single.tree, &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;...&lt;/span&gt;)
  }
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/2559516412977873564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/2559516412977873564?isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/2559516412977873564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/2559516412977873564'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2015/09/workaround-ntrees-is-missing-in-r.html' title='Workaround &quot;n.trees&quot; is missing in R package gbm version 2.1.1'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-882139544699825052</id><published>2015-03-19T20:00:00.000+01:00</published><updated>2015-03-19T20:00:13.090+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><title type='text'>Notes and reflections on From here to human-level AI</title><content type='html'>&lt;p&gt;The &lt;a href=&quot;http://www.meetup.com/ai-gent/&quot;&gt;Ghent strong AI meetup group&lt;/a&gt; will discuss on the 20th of march the 2007 paper from John McCarthy 
&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S0004370207001476&quot;&gt;From here to human-level AI&lt;/a&gt; so I decided to highlight some parts and write-up my notes and thoughts.&lt;/p&gt;
&lt;h3&gt;1. What is human-level AI&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;There are two approaches to human-level AI, but each presents difficulties. It isn’t a question of deciding between them, because each should eventually succeed; it is more a race.  
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If we understood enough about how the human intellect works, we could simulate it.&lt;/li&gt;
&lt;li&gt;To the extent that we understand the problems achieving goals in the world presents to intelligence we can write intelligent programs. That&#39;s what this article is about.&lt;br /&gt;
Much of the public recognition of AI has been for programs with &lt;em&gt;a little bit of AI and a lot of computing&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are some big projects and a lot of researchers attacking the human-level AI problem with one of the two approaches. The first approach, or at least part of it, is used by the American &lt;a href=&quot;http://en.wikipedia.org/wiki/BRAIN_Initiative&quot;&gt;BRAIN Initiative&lt;/a&gt; (Brain Research through Advancing Innovative Neurotechnologies) and the European &lt;a href=&quot;https://www.humanbrainproject.eu/&quot;&gt;Human Brain Project&lt;/a&gt;. The second approach and especially everything related to deep learning has recently had a fair amount of publicity due to human-level and super-human results on some pattern recognition tasks (&lt;a href=&quot;http://arxiv.org/abs/1502.01852&quot;&gt;image classification&lt;/a&gt;, &lt;a href=&quot;http://arxiv.org/abs/1404.3840&quot;&gt;face verification&lt;/a&gt;) and games (&lt;a href=&quot;http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html&quot;&gt;human-level performance on 29 Atari games&lt;/a&gt;). For an overview and history of deep learning you can check out the &lt;a href=&quot;http://people.idsia.ch/~juergen/deep-learning-overview.html&quot;&gt;88 page overview article&lt;/a&gt; from Jürgen Schmidhuber. As a side note Jürgen Schmidhuber recently did an interesting &lt;a href=&quot;http://www.reddit.com/r/MachineLearning/comments/2xcyrl/i_am_j%C3%BCrgen_schmidhuber_ama/&quot;&gt;AMA (ask me anything) on Reddit&lt;/a&gt; (&lt;a href=&quot;http://fastml.com/juergen-schmidhuber-s-answers-from-the-reddit-ama/&quot;&gt;summary from FastML&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;2. The common sense informatic situation&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The key to reaching human-level AI is making systems that operate successfully in the common sense informatic situation.&lt;/em&gt;&lt;br /&gt;
In general a thinking human is in what we call the &lt;em&gt;common sense informatic situation&lt;/em&gt;. It is more general than any &lt;em&gt;bounded informatic situation&lt;/em&gt;. The known facts are incomplete, and there is no &lt;em&gt;a priori&lt;/em&gt; limitation on what facts are relevant. It may not even be decided in advance what phenomena are to be taken into account. The consequences of actions cannot be fully determined. The &lt;em&gt;common sense informatic situation&lt;/em&gt; necessitates the use of approximate concepts that cannot be fully defined and the use of &lt;em&gt;approximate theories&lt;/em&gt; involving them. It also requires &lt;em&gt;nonmonotonic&lt;/em&gt; reasoning in reaching conclusions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nonmonotonic reasoning = a logic is non-monotonic if some conclusions can be invalidated by adding more knowledge (&lt;a href=&quot;http://artint.info/html/ArtInt_129.html&quot;&gt;source&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Common sense facts and common sense reasoning are necessarily imprecise. The imprecision necessitated by the common sense informatic situation applies to computer programs as well as to people.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;3. The use of mathematical logic&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Mathematical logic was devised to formalize precise facts and correct reasoning. Its founders, Leibniz, Boole and Frege, hoped to use it for common sense facts and reasoning, not realizing that the imprecision of concepts used in common sense language was often a necessary feature and not always a bug. The biggest success of mathematical logic was in formalizing purely mathematical theories for which imprecise concepts are unneeded. Since the common sense informatic situation requires using imprecise facts and imprecise reasoning, the use of mathematical logic for common sense has had limited success. This has caused many people to give up. Others devise extended logical languages and even extended forms of mathematical logic.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Further on he notes that using different concepts and different predicate and function symbols in a new mathematical logic language might still make mathematical logic adequate for expressing common sense. But he is not very optimistic.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Success so far has been moderate, and it isn’t clear whether greater success can be obtained by changing the concepts and their representation by predicate and function symbols or by varying the nonmonotonic formalism.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;4. Approximate concepts and approximate theories&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Other kinds of imprecision are more fundamental for intelligence than numerical imprecision. Many phenomena in the world are appropriately described in terms of &lt;em&gt;approximate concepts&lt;/em&gt;. Although the concepts are imprecise, many statements using them have precise truth values&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He follows up with two clarifying examples, one about the concept Mount Everest, the other about the concept welfare of a chicken. Mount Everest is an approximate concept because the exact pieces of rock and ice that constitute it are unclear. But it is still possible to infer solid conclusions based on a foundation built on a quicksand of approximate concepts without definite extensions e.g. if you haven&#39;t been to Asia then you&#39;ve never climbed Mount Everest. The core of the welfare of a chicken problem is: is it better to raise a chicken with care and nice food and then slaughter it or would it have a better life in the wild, risking starvation and foxes ? McCarthy concludes from this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is no &lt;em&gt;truth of the matter&lt;/em&gt; to be determined by careful investigation of chickens. &lt;em&gt;When a concept is inherently approximate, it is a waste of time to try to give it a precise definition&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In order to reach human-level AI we&#39;ll have to be able to approximate concepts in a way that the computer can reason about them.&lt;/p&gt;
&lt;h3&gt;5. Nonmonotonic reasoning&lt;/h3&gt;
&lt;h3&gt;6. Elaboration tolerance&lt;/h3&gt;
&lt;h3&gt;7. Formalization of context&lt;/h3&gt;
&lt;h3&gt;8. Reasoning about events - especially action&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Human level intelligence requires reasoning about strategies of action, i.e. action programs. It also requires considering multiple actors and also concurrent events and continuous events. Clearly we have a long way to go.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;9. Introspection and self-awareness&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;People have a limited ability to observe their own mental processes. For many intellectual tasks introspection is irrelevant. However, it is at least relevant for evaluating how one is using one’s own thinking time. Human-level AI will require introspective ability. In fact programs can have more than humans do, because they can examine themselves, both in source and compiled form and also reason about the current values of the variables in the program.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;10. Heuristics&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The largest qualitative gap between human performance and computer performance is in the area of heuristics, even though the gap is disguised in many applications by the millions-fold speed advantage of computers. The general purpose theorem proving programs run very slowly, and the special purpose programs are very specialized in their
heuristics.&lt;br /&gt;
I think the problem lies in our present inability to give programs domain and problem dependent heuristic advice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;McCarthy advocates the usage of declarative heuristics and explains the concept of postponable variables in constraint satisfaction problems.  
&lt;/p&gt;
&lt;h3&gt;11. Psychological, social and political obstacles&lt;/h3&gt;
&lt;p&gt;In this article, McCarthy states that although the main problems in reaching human-level AI lay in the inherent difficulty of the scientific problems, research is hampered by the focus of the computer science world to connecting the basic research to applied problems. The artificial intelligence has encountered philosophical and ideological (religious) objections but the attacks on AI have been fairly limited.&lt;/p&gt;
&lt;p&gt;As the general public gets more and more acquainted with the potential dangers, of human-level AI and especially super-human level AI, I believe, that the pressure against AI research will increase. &lt;/p&gt;
&lt;p&gt;An interesting book by Nick Bostrom covering the dangers of AI is &lt;a href=&quot;http://www.amazon.com/gp/product/0199678111/?tag=giso0d-20&quot;&gt;Superintelligence: Paths, Dangers, Strategies&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;12. Conclusion&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Between us and human-level intelligence lie many problems. They can be summarized as that of succeeding in the &lt;em&gt;common sense informatic situation&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you want to read more about the road to human-level AI and superintelligence and its possible consequences then I can recommend this &lt;a href=&quot;http://waitbutwhy.com/2015/01/artificial-intelligence-revolution-1.html&quot;&gt;2 part article&lt;/a&gt; by Tim Urban on his blog Wait But Why.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/882139544699825052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/882139544699825052?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/882139544699825052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/882139544699825052'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2015/03/from-here-to-human-level-ai.html' title='Notes and reflections on From here to human-level AI'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-7993434466088984544</id><published>2014-07-22T21:51:00.000+02:00</published><updated>2014-07-22T21:51:31.359+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="binary"/><category scheme="http://www.blogger.com/atom/ns#" term="Fsharp"/><category scheme="http://www.blogger.com/atom/ns#" term="Go"/><category scheme="http://www.blogger.com/atom/ns#" term="Julia"/><category scheme="http://www.blogger.com/atom/ns#" term="OCaml"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>Benchmarking reading binary values from a file with F#, Python, Julia, R, Go and OCaml</title><content type='html'>In one of my recent posts I showed some F# code for &lt;a href=&quot;http://www.samuelbosch.com/2014/06/storing-and-fetching-raster-values-in-f.html&quot;&gt;storing and reading integers as binary data&lt;/a&gt;. Since then I&#39;ve created different versions of the reading part in &lt;a href=&quot;http://python.org/&quot;&gt;Python&lt;/a&gt;, &lt;a href=&quot;http://julialang.org/&quot;&gt;Julia&lt;/a&gt;, &lt;a href=&quot;http://golang.org/&quot;&gt;Go&lt;/a&gt;, &lt;a href=&quot;http://ocaml.org/&quot;&gt;OCaml&lt;/a&gt; and &lt;a href=&quot;http://www.r-project.org/&quot;&gt;R&lt;/a&gt; to be able to compare the performance of the different languages on this simple task and to get a feeling on what it&#39;s like to program in Julia, Go and OCaml as I hadn&#39;t created any programs in these languages yet.&lt;br /&gt;
&lt;br /&gt;
Below table shows the benchmark results for reading 10 times 10000 values and 10000 times 10 values with links to the source code files in the different programming languages:&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;10 times 10000 values&lt;/th&gt;
&lt;th&gt;10000 times 10 values&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/geosrc/binreaders/binreader.fsx&quot;&gt;F#&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;6 seconds&lt;/td&gt;
&lt;td&gt;20 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/geosrc/binreaders/binreader.py&quot;&gt;Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;26 seconds&lt;/td&gt;
&lt;td&gt;40 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/geosrc/binreaders/binreader.jl&quot;&gt;Julia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;45 seconds&lt;/td&gt;
&lt;td&gt;72 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/geosrc/binreaders/binreader.go&quot;&gt;Go&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;8 seconds&lt;/td&gt;
&lt;td&gt;25 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/geosrc/binreaders/binreader.ml&quot;&gt;OCaml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;2.5 seconds&lt;/td&gt;
&lt;td&gt;48 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/samuelbosch/blogbits/blob/master/geosrc/binreaders/binreader.R&quot;&gt;R&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;110 seconds&lt;/td&gt;
&lt;td&gt;NA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
The overall fastest version is the one written in F# but note that it&#39;s also the version I have tweaked the most. As I&#39;m not very experienced in most of the languages so any performance tips are welcome. Note that I tried using memory mapped files in .NET and Python this improved performance when querying lots of values from the same file but also made it worse in other cases.&lt;br /&gt;
&lt;br /&gt;
The implementation of the functionality is most of the times rather similar in the different languages. Some notable differences where:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Julia apparently doesn&#39;t have a null value so I refrained from checking whether the read integer value was equal to the int32 minimum value (-2147483648).&lt;/li&gt;
&lt;li&gt;In Go converting the bytes to integers was faster with a custom function.&lt;/li&gt;
&lt;li&gt;I didn&#39;t find a function in the OCaml Core library to convert bytes to a 32-bit integer, but luckily I found one on &lt;a href=&quot;http://stackoverflow.com/a/6031286/477367&quot; target=&quot;_blank&quot;&gt;Stack Overflow&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
F#:&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;open&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;System&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;open&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;IO&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; readValue &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;reader&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;BinaryReader&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; cellIndex &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; 
    reader&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;BaseStream&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Seek&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int64&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;cellIndex&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;),&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;SeekOrigin&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Begin&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;|&amp;gt;&lt;/span&gt; ignore
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;match&lt;/span&gt; reader&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;ReadInt32&lt;/span&gt;&lt;span style=&quot;color: #007020;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;with&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;Int32&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;MinValue&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;None&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;|&lt;/span&gt; v &lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Some&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
        
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; readValues indices fileName &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; 
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;use&lt;/span&gt; reader &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;BinaryReader&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;File&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Open&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;fileName&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;FileMode&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Open&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;FileAccess&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Read&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;FileShare&lt;/span&gt;.&lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Read&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; values &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;Array&lt;/span&gt;.map &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;readValue reader&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; indices
    values
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Python:&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;read_values&lt;/span&gt;(filename, indices):
    &lt;span style=&quot;color: #888888;&quot;&gt;# indices are sorted and unique&lt;/span&gt;
    values &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; []
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;with&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;open&lt;/span&gt;(filename, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&#39;rb&#39;&lt;/span&gt;) &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;as&lt;/span&gt; f:
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; index &lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;in&lt;/span&gt; indices:
            f&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;seek(index&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4L&lt;/span&gt;, os&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;SEEK_SET)
            b &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; f&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;read(&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;)
            v &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; struct&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;unpack(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;@i&quot;&lt;/span&gt;, b)[&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;]
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; v &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2147483648&lt;/span&gt;:
                v &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;None&lt;/span&gt;
            values&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;append(v)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; values
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Julia:&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt; readvalue&lt;/span&gt;(stream, position)
    seek(stream, position)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; read(stream, &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;Int32&lt;/span&gt;)
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;end&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt; readvalues&lt;/span&gt;(filename::String, indices)
    stream &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; open(filename, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;r&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;try&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;Int32&lt;/span&gt;[readvalue(stream, index&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;) &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; index &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt; indices]
    finally
        close(stream)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;end&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Go:&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; (&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;os&quot;&lt;/span&gt;)
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;func&lt;/span&gt; bytes2int(b []&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;byte&lt;/span&gt;) &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int32&lt;/span&gt; {
    v &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;int32&lt;/span&gt;(&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt;  i &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;; i&lt;span style=&quot;color: #333333;&quot;&gt;++&lt;/span&gt; {
        v = v | (&lt;span style=&quot;color: #007020;&quot;&gt;int32&lt;/span&gt;(b[i]) &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; (&lt;span style=&quot;color: #007020;&quot;&gt;uint&lt;/span&gt;(&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;i)))
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; v
}

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;func&lt;/span&gt; readValues(indices []&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt;, filename &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;string&lt;/span&gt;) []&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int32&lt;/span&gt; {
    results &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;make&lt;/span&gt;([]&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int32&lt;/span&gt;, &lt;span style=&quot;color: #007020;&quot;&gt;len&lt;/span&gt;(indices))
    b &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: #007020;&quot;&gt;make&lt;/span&gt;([]&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;byte&lt;/span&gt;, &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;)
    f,_ &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; os.Open(filename)
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; i, cellIndex &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;range&lt;/span&gt; indices {
        f.Seek(&lt;span style=&quot;color: #007020;&quot;&gt;int64&lt;/span&gt;(cellIndex&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;), os.SEEK_SET)
        f.Read(b)
        value &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; bytes2int(b) &lt;span style=&quot;color: #888888;&quot;&gt;// around 10-20% faster then binary.Read&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; value &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2147483648&lt;/span&gt; {
            results[i] = value
        } &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; {
            results[i] = &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;99999&lt;/span&gt;
        }
    }
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; results
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
OCaml:&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; input_le_int32 inchannel &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #888888;&quot;&gt;(* http://stackoverflow.com/a/6031286/477367 *)&lt;/span&gt;
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; res &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; ref &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;l &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;to&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;3&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; byte &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; input_byte inchannel &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt;
        res &lt;span style=&quot;color: #333333;&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;Int32&lt;/span&gt;.logor &lt;span style=&quot;color: #333333;&quot;&gt;!&lt;/span&gt;res &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;Int32&lt;/span&gt;.shift_left &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;Int32&lt;/span&gt;.of_int byte&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;i&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;done&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;match&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;!&lt;/span&gt;res &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;with&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2147483648&lt;/span&gt;l &lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;None&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;|&lt;/span&gt; v &lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;Some&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; readvalue inchannel index &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;
  seek_in inchannel &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;index&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
  input_le_int32 inchannel

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; readvalues &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;indices&lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; filename &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;
  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; inchannel &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; open_in_bin filename &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;try&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;let&lt;/span&gt; result &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;Array&lt;/span&gt;.map &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;readvalue inchannel&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; indices &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;in&lt;/span&gt;
        close_in inchannel&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        result
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;with&lt;/span&gt; e &lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt;
      close_in_noerr inchannel&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;raise&lt;/span&gt; e
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
R:&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;read.values &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(filename, indices) {
  conn &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; file(filename, &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;rb&quot;&lt;/span&gt;)
  read.value &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;function&lt;/span&gt;(index) {
    seek(conn, where&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;index&lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;4&lt;/span&gt;)
    readBin(conn, integer(), size &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;4&lt;/span&gt;, n &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;1&lt;/span&gt;, endian &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;little&quot;&lt;/span&gt;)
  }
  r &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; sapply(indices,read.value)
  close(conn)
  r[r&lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;-2147483648&lt;/span&gt;] &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;NA&lt;/span&gt;
  r
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Any suggestions for improving the implementation in one of the above programming languages ? Which language would you like to compare my results with ? Which other language(s) do you expect to be faster than my benchmark results ? Can you help me out with a version in your favorite language or in C, fortran, Common Lisp, Scheme, Clojure, Java or J ?</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/7993434466088984544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/7993434466088984544?isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/7993434466088984544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/7993434466088984544'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2014/07/benchmarking-reading-binary-values-from.html' title='Benchmarking reading binary values from a file with F#, Python, Julia, R, Go and OCaml'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4113082053753185517.post-1359936719071344872</id><published>2014-07-11T15:00:00.000+02:00</published><updated>2014-07-11T15:11:33.836+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="functional programming"/><category scheme="http://www.blogger.com/atom/ns#" term="groovy"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Becoming Functional</title><content type='html'>Here is my first book review from the O&#39;Reilly Reader Review Program. I picked &lt;a href=&quot;http://www.amazon.com/Becoming-Functional-Joshua-Backfield/dp/1449368174/?tag=giso0d-20&quot;&gt;Becoming Functional&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/jbackfield&quot;&gt;Joshua Backfield&lt;/a&gt; because I thought it would be nice to compare it to the latest book I&#39;ve read on&amp;nbsp;&lt;a href=&quot;http://www.samuelbosch.com/2014/05/functional-programming-in-javascript.html&quot;&gt;Functional Programming in JavaScript&lt;/a&gt; by Michael Fogus (accidentally also published by O&#39;Reilly).&lt;br /&gt;
&lt;br /&gt;
A step by step introduction to some basic concepts of functional programming like higher order functions (passing a function to a method), pure functions (for the same input always return the same output without side effects), immutable variables, recursion and lazy evaluation.&lt;br /&gt;
&lt;br /&gt;
The first chapters are in Java but starting from chapter 4 the book switches to Groovy and the latest chapters are in Scala. The Java code is not very complicated and is probably understandable for anyone with knowledge of statically typed object-oriented programming languages. Note that all Java samples use Java 7 which is rather verbose for functional programming which is one of the reasons the book switches to Groovy and Scala. The other reason is off course is that these languages support functional concepts out of the box.&lt;br /&gt;
&lt;br /&gt;
Content wise the books starts with an introduction to functional programming then makes the transition from first-class functions to higher order functions and pure functions. Next are immutable variables and recursion, with a nice introduction to tail recursion. Followed by small side steps to laziness and statements. To conclude with pattern matching functional object-oriented programming. The last chapter is surprisingly as it first gives advice on transitioning into functional programming then talks about new design patterns and ends with a full implementation of a simplistic database in Scala.&lt;br /&gt;
&lt;br /&gt;
It&#39;s not a bad book in the sense that it teaches incorrect material but it&#39;s not a very good book neither. It&#39;s a book written for Java developers that have never heard of the basic concepts of functional programming but personally I prefer a different approach to achieve this goal. Instead of refactoring code from the imperative style into the functional style and along the way introducing concepts, I think it&#39;s faster and easier to learn functional programming by clearly explaining and showing the concepts directly.  Only then you should elaborate on how to migrate from the original code to the functional style and explain why this is a good thing to do. Although it&#39;s a rather short book (an estimated 140 pages) it is not very dense but it gives semi-real world example based on requirements from a fictional company XXY. Only the most common functional programming concepts are introduced.&lt;br /&gt;
&lt;br /&gt;
My advice is to buy this book if you&#39;re a Java developer who has no experience in functional programming.&lt;br /&gt;
&lt;br /&gt;
Otherwise I would skip this book and instead read:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.com/Real-World-Functional-Programming-With-Examples/dp/1933988924/?tag=giso0d-20&quot;&gt;Real World Functional Programming&lt;/a&gt;: examples in C# (which is a better version of Java, at least for functional programming) and F# (programming language from the ML-family)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.samuelbosch.com/2014/05/functional-programming-in-javascript.html&quot;&gt;Functional Programming in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;or any book on Erlang, Haskell, Clojure (e.g. &lt;a href=&quot;http://www.amazon.com/The-Joy-Clojure-Michael-Fogus/dp/1617291412/?tag=giso0d-20&quot;&gt;Joy of Clojure&lt;/a&gt;), Common Lisp, F#, OCaml, Scala, ...&lt;/li&gt;
&lt;/ul&gt;
Or take a look at my page of &lt;a href=&quot;http://www.samuelbosch.com/p/recommended.html&quot;&gt;recommendations&lt;/a&gt;.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.samuelbosch.com/feeds/1359936719071344872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4113082053753185517/1359936719071344872?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/1359936719071344872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4113082053753185517/posts/default/1359936719071344872'/><link rel='alternate' type='text/html' href='http://www.samuelbosch.com/2014/07/becoming-functional.html' title='Becoming Functional'/><author><name>Samuel Bosch</name><uri>http://www.blogger.com/profile/00902576471871535529</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Ghent, Belgium</georss:featurename><georss:point>51.0543422 3.7174242999999478</georss:point><georss:box>50.7351412 3.071977299999948 51.3735432 4.3628712999999477</georss:box></entry></feed>