<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[5024] sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins: Plugin Directory: Update React client with latest changes.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/5024">5024</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/5024","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>obenland</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2017-03-01 18:08:54 +0000 (Wed, 01 Mar 2017)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Plugin Directory: Update React client with latest changes.

This is largely a cleanup commit with some WIP around switching to node-wpapi.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsbabelrc">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.babelrc</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsGruntfilejs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/Gruntfile.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponents404indexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/404/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsarchivebrowsebrowsejsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/browse.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsarchivebrowseindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentscontentnoneindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/content-none/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpageindexjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/index.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpagepluginsectionindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpagepluginsectionpluginsectionjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/plugin-section.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsindexjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/index.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspageindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspagepagejsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/page.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugindownloadbuttonindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/download-button/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginfavoritebuttonindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginpluginbannerindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin-banner/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginpluginjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionschangelogstylescss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/changelog/style.scss</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsdevelopersindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsdeveloperslistjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/list.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsfaqindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsfaqstylescss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/style.scss</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsreviewsindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/reviews/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsscreenshotsimagegalleryindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/image-gallery/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsscreenshotsindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsstylescss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/style.scss</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugincardindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugincardplugincardjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/plugin-card.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugindirectoryjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-directory.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginiconindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginiconstylescss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/style.scss</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginratingsindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginratingsstarsindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/stars/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchsearchjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/search.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchformindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchformsearchformjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/search-form.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadermainnavigationindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadermainnavigationmenuitemindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/menu-item/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadersitedescriptionindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-description/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadersitetitleindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-title/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssitemainindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-main/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareaindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetsdonatejsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/donate.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetsmetaindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/meta/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetsratingsindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/ratings/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetssupportindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/support/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetstextjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/text.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesapijs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/api.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmoduleslocalstoragejs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/local-storage.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesrouterjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/router.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesstorejs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/store.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstyles_componentsscss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/_components.scss</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstylesmodules_accessibilityscss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/modules/_accessibility.scss</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginscssstylertlcss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style-rtl.css</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginscssstylecss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style.css</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsfunctionsphp">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/functions.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjssectionaccordionjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/section-accordion.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjsthemejs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/theme.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginspackagejson">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/package.json</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginswebpackconfigjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/webpack.config.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginseslintignore">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintignore</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginseslintrcjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintrc.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientbuildjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/build.jsx</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/pagination/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspaginationindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/pagination/index.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheaderindexjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.jsx</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesmiddlewaresbodyclassjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/body-class.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesmiddlewaresindexjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/index.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateactiontypesjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/action-types.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowseactionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/actions.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsereducerjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/reducer.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatefavoritesactionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/actions.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatefavoritesreducerjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/reducer.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepagesactionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/actions.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepagesreducerjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/reducer.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepluginsactionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/actions.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepluginsreducerjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/reducer.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatereducersjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/reducers.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesearchactionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/actions.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesearchreducerjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/reducer.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesectionsactionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/actions.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesectionsreducerjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/reducer.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpageslugjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page-slug.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpagejs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetparamsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-params.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpathjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-path.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpluginjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugin.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpluginsfortermjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins-for-term.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpluginsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsearchresultsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-results.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsearchtermjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-term.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsectionpluginsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section-plugins.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsectionjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetslugjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-slug.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorshassectionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/has-sections.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsindexjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/index.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsisfavoritejs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-favorite.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsisfetchingsectionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-fetching-sections.js</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateuseractionsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/actions.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateuserreducerjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/reducer.js</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjshintignore">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintignore</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjshintrc">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintrc</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/actions/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpagefrontpagejsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/front-page.jsx</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginfavoritebuttonbuttonjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/button.jsx</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/committers/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheaderindexjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadersiteheaderjsx">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-header.jsx</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsebetajs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/beta.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsefavoritesjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/favorites.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsefeaturedjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/featured.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowseindexjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/index.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsepopularjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/popular.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatefavoritesjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateindexjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/index.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepagesjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepluginsjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesearchjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsbabelrc"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.babelrc</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.babelrc        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.babelrc  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,3 +1,15 @@
</span><span class="cx" style="display: block; padding: 0 10px"> {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-  "presets": ["es2015", "react"]
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  "plugins": [
+    [ "transform-imports", {
+      "lodash": {
+        "transform": "lodash/${member}",
+        "preventFullImport": true
+      },
+      "state/selectors": {
+        "transform": "state/selectors/${member}",
+        "kebabCase": true
+      }
+    }]
+  ],
+  "presets": ["es2015", "react", "stage-2"]
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginseslintignore"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintignore</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintignore                           (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintignore     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,3 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/*.js
+/js
+/node_modules
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginseslintrcjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintrc.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintrc.js                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.eslintrc.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,117 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+module.exports = {
+       env: {
+               browser: true,
+               es6: true
+       },
+       globals: {
+               jQuery: false,
+               localeData: false,
+               pluginDirectory: false,
+               process: true,
+               window: false,
+       },
+       parser: 'babel-eslint',
+       parserOptions: {
+               ecmaVersion: 7,
+               ecmaFeatures: {
+                       jsx: true
+               },
+               sourceType: 'module'
+       },
+       plugins: [
+               'react'
+       ],
+       rules: {
+               'array-bracket-spacing': [ 2, 'always' ],
+               'brace-style': [ 2, '1tbs' ],
+               camelcase: 2,
+               'comma-dangle': [ 1, 'always-multiline' ],
+               'comma-spacing': 2,
+               'comma-style': 2,
+               'computed-property-spacing': [ 2, 'always' ],
+               'constructor-super': 2,
+               // Allows returning early as undefined
+               'consistent-return': 0,
+               curly: 2,
+               'dot-notation': 2,
+               eqeqeq: [ 2, 'allow-null' ],
+               'eol-last': 2,
+               'func-call-spacing': 2,
+               indent: [ 2, 'tab', { SwitchCase: 1 } ],
+               'jsx-quotes': [ 2, 'prefer-double' ],
+               'key-spacing': 2,
+               'keyword-spacing': 2,
+               'max-len': [ 2, { code: 120 } ],
+               'new-cap': [ 2, { capIsNew: false, newIsCap: true } ],
+               'no-cond-assign': 2,
+               'no-const-assign': 2,
+               'no-console': 2,
+               'no-debugger': 2,
+               'no-dupe-args': 2,
+               'no-dupe-keys': 2,
+               'no-duplicate-case': 2,
+               'no-else-return': 2,
+               'no-empty': [ 2, { allowEmptyCatch: true } ],
+               'no-extra-semi': 2,
+               'no-fallthrough': 0,
+               'no-lonely-if': 2,
+               'no-mixed-requires': 0,
+               'no-mixed-spaces-and-tabs': 2,
+               'no-multiple-empty-lines': [ 2, { max: 1 } ],
+               'no-multi-spaces': [ 2, { exceptions: { Property: true, VariableDeclarator: true } } ],
+               'no-negated-in-lhs': 2,
+               'no-nested-ternary': 2,
+               'no-new': 2,
+               'no-process-exit': 2,
+               'no-redeclare': 2,
+               'no-shadow': 2,
+               'no-spaced-func': 2,
+               'no-trailing-spaces': 2,
+               'no-undef': 2,
+               'no-underscore-dangle': 0,
+               'no-unreachable': 2,
+               'no-unused-vars': 2,
+               // Allows function use before declaration
+               'no-use-before-define': [ 2, 'nofunc' ],
+               'no-var': 2,
+               'object-curly-spacing': [ 2, 'always' ],
+               'one-var': 0,
+               'operator-linebreak': [ 2, 'after', { overrides: {
+                       '?': 'before',
+                       ':': 'before'
+               } } ],
+               'padded-blocks': [ 2, 'never' ],
+               'prefer-const': 2,
+               'quote-props': [ 2, 'as-needed', { keywords: true } ],
+               quotes: [ 2, 'single', 'avoid-escape' ],
+               'react/jsx-curly-spacing': [ 2, 'always' ],
+               'react/jsx-no-bind': 2,
+               'react/jsx-no-duplicate-props': 2,
+               'react/jsx-no-target-blank': 2,
+               'react/jsx-no-undef': 2,
+               'react/jsx-space-before-closing': 2,
+               'react/jsx-uses-react': 2,
+               'react/jsx-uses-vars': 2,
+               'react/no-did-mount-set-state': 2,
+               'react/no-did-update-set-state': 2,
+               'react/no-is-mounted': 2,
+               'react/prefer-es6-class': 2,
+               'react/react-in-jsx-scope': 2,
+               semi: 2,
+               'semi-spacing': 2,
+               'space-before-blocks': [ 2, 'always' ],
+               'space-before-function-paren': [ 2, 'never' ],
+               'space-in-parens': [ 2, 'always' ],
+               'space-infix-ops': [ 2, { int32Hint: false } ],
+               'space-unary-ops': [ 2, {
+                       overrides: {
+                               '!': true
+                       }
+               } ],
+               // Assumed by default with Babel
+               strict: [ 2, 'never' ],
+               'template-curly-spacing': [ 2, 'always' ],
+               'valid-jsdoc': [ 2, { requireReturn: false } ],
+               yoda: 0
+       }
+};
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjshintignore"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintignore</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintignore   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintignore     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-js/**.min.js
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjshintrc"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintrc</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintrc       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/.jshintrc 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,25 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-{
-  "boss": true,
-  "curly": true,
-  "eqeqeq": true,
-  "eqnull": true,
-  "esversion": 6,
-  "expr": true,
-  "immed": true,
-  "noarg": true,
-  "nonbsp": true,
-  "onevar": true,
-  "quotmark": "single",
-  "trailing": true,
-  "undef": true,
-  "unused": true,
-  "browser": true,
-  "globals": {
-    "_": false,
-    "Backbone": false,
-    "jQuery": false,
-    "JSON": false,
-    "pagenow": false,
-    "wp": false
-  }
-}
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsGruntfilejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/Gruntfile.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/Gruntfile.js    2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/Gruntfile.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -57,14 +57,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                src: 'css/style.css'
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                jshint: {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         eslint: {
</ins><span class="cx" style="display: block; padding: 0 10px">                         files: [
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                'Gruntfile.js',
-                               'js/**/*.js',
</del><span class="cx" style="display: block; padding: 0 10px">                                 'client/**/*.js',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                '!js/theme.js'
-                       ],
-                       options: grunt.file.readJSON('.jshintrc')
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         'client/**/*.jsx',
+
+                               // External library. For now.
+                               '!client/**/**/image-gallery/index.jsx'
+                       ]
</ins><span class="cx" style="display: block; padding: 0 10px">                 },
</span><span class="cx" style="display: block; padding: 0 10px">                sass: {
</span><span class="cx" style="display: block; padding: 0 10px">                        options: {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -85,6 +85,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        },
</span><span class="cx" style="display: block; padding: 0 10px">                        options: { signature: false }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                shell: {
+                       build: {
+                               command: './node_modules/wpapi/lib/data/update-default-routes-json.js --endpoint=https://wordpress.org/plugins-wp/wp-json --output=./client'
+                       }
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 rtlcss: {
</span><span class="cx" style="display: block; padding: 0 10px">                        options: {
</span><span class="cx" style="display: block; padding: 0 10px">                                // rtlcss options
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -147,9 +152,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px">                watch: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        jshint: {
-                               files: ['<%= jshint.files %>'],
-                               tasks: ['jshint']
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 eslint: {
+                               files: ['<%= eslint.files %>'],
+                               tasks: ['eslint']
</ins><span class="cx" style="display: block; padding: 0 10px">                         },
</span><span class="cx" style="display: block; padding: 0 10px">                        css: {
</span><span class="cx" style="display: block; padding: 0 10px">                                files: ['**/*.scss', 'client/components/**/**.scss'],
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -161,11 +166,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">        grunt.loadNpmTasks('grunt-sass');
</span><span class="cx" style="display: block; padding: 0 10px">        grunt.loadNpmTasks('grunt-rtlcss');
</span><span class="cx" style="display: block; padding: 0 10px">        grunt.loadNpmTasks('grunt-webpack');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        grunt.loadNpmTasks('grunt-contrib-jshint');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ grunt.loadNpmTasks('grunt-eslint');
</ins><span class="cx" style="display: block; padding: 0 10px">         grunt.loadNpmTasks('grunt-contrib-watch');
</span><span class="cx" style="display: block; padding: 0 10px">        grunt.loadNpmTasks('grunt-sass-globbing');
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        grunt.loadNpmTasks('grunt-shell');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        grunt.registerTask('default', ['jshint', 'sass_globbing', 'sass', 'rtlcss:dynamic']);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ grunt.registerTask('default', ['eslint', 'sass_globbing', 'sass', 'rtlcss:dynamic']);
</ins><span class="cx" style="display: block; padding: 0 10px">         grunt.registerTask('css', ['sass_globbing', 'sass', 'postcss', 'rtlcss:dynamic']);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        grunt.registerTask('build', ['webpack:build', 'css']);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ grunt.registerTask('build', ['webpack:build', 'css', 'shell:build']);
</ins><span class="cx" style="display: block; padding: 0 10px"> };
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientbuildjsx"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/build.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/build.jsx                                (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/build.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,29 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React from 'react';
+import { render } from 'react-dom';
+
+/**
+ * Internal dependencies.
+ */
+import Screenshots from 'components/plugin/sections/screenshots';
+
+// Temporary hack to use the srceenshot viewer without the full React client
+const elements = document.querySelectorAll( '#screenshots figure' );
+const images = [];
+for ( let i = 0; i < elements.length; i++ ) {
+       const caption = elements[ i ].querySelector( 'figcaption' );
+       const item = {
+               src: elements[ i ].querySelector( 'img.screenshot' ).src,
+               caption: caption ? caption.textContent : '',
+       };
+       images.push( item );
+}
+
+if ( images.length > 0 ) {
+       render(
+               <Screenshots screenshots={ images } />,
+               document.getElementById( 'screenshots' )
+       );
+}
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponents404indexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/404/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/404/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/404/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,23 +1,38 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { identity } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { IndexLink } from 'react-router';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'NotFound',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class NotFound extends Component {
+       static propTypes = {
+               translate: PropTypes.func,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        static defaultProps = {
+               translate: identity,
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentDidMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                setTimeout( function() {
-                       jQuery( '.hinge' ).hide();
-               }, 1800 );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         setTimeout( () => jQuery( '.hinge' ).hide(), 1800 );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><span class="cx" style="display: block; padding: 0 10px">                return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <section className="error-404 not-found">
</span><span class="cx" style="display: block; padding: 0 10px">                                <header className="page-header">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <h1 className="page-title">Oops! That page can&rsquo;t be found.</h1>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <h1 className="page-title">{ this.props.translate( 'Oops! That page can&rsquo;t be found.' ) }</h1>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </header>
</span><span class="cx" style="display: block; padding: 0 10px">                                <div className="page-content">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <p>Try searching from the field above, or go to the <IndexLink to="/">home page</IndexLink>.</p>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <p>
+                                               { this.props.translate(
+                                                       'Try searching from the field above, or go to the {{link}}home page{{/link}}.', {
+                                                               component: { link: <IndexLink to="/" /> },
+                                                       }
+                                               ) }
+                                       </p>
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        <div className="logo-swing">
</span><span class="cx" style="display: block; padding: 0 10px">                                                <img src="http://messislore.com/images/wp-logo-blue-trans-blur.png" className="wp-logo" />
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -25,8 +40,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        </div>
</span><span class="cx" style="display: block; padding: 0 10px">                                </div>
</span><span class="cx" style="display: block; padding: 0 10px">                        </section>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default localize( NotFound );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsarchivebrowsebrowsejsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/browse.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/browse.jsx     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/browse.jsx       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,26 +1,59 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import ContentNone from 'components/content-none';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { getSection, getSectionPlugins } from 'state/selectors';
+import Pagination from 'components/pagination';
</ins><span class="cx" style="display: block; padding: 0 10px"> import PluginCard from 'components/plugin-card';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'ArchiveBrowse',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const ArchiveBrowse = ( { plugins, section, translate } ) => {
+       if ( plugins && plugins.length ) {
+               return (
+                       <div>
+                               <header className="page-header">
+                                       <h1 className="page-title">
+                                               { translate( 'Browse: {{strong}}%(name)s{{/strong}}', {
+                                                       args: { name: section.name },
+                                                       components: { strong: <strong /> },
+                                               } ) }
+                                       </h1>
+                                       { section.description &&
+                                               <div className="taxonomy-description">{ section.description }</div>
+                                       }
+                               </header>
+                               { plugins.map( ( plugin ) => <PluginCard key={ plugin.id } plugin={ plugin } /> ) }
+                               <Pagination current={ 12 } total={ 30 } />
+                       </div>
+               );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               if ( this.props.plugins && this.props.plugins.length ) {
-                       return (
-                               <div>
-                                       <header className="page-header">
-                                               <h1 className="page-title">Browse: <strong>{ this.props.params.type }</strong></h1>
-                                               <div className="taxonomy-description"></div>
-                                       </header>
-                                       { this.props.plugins.map( slug =>
-                                               <PluginCard key={ slug } slug={ slug } />
-                                       ) }
-                               </div>
-                       )
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return <ContentNone />;
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return <ContentNone { ...this.props } />;
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ArchiveBrowse.propTypes = {
+       plugins: PropTypes.arrayOf( PropTypes.object ),
+       section: PropTypes.object,
+       translate: PropTypes.func,
+       type: PropTypes.string.isRequired,
+};
+
+ArchiveBrowse.defaultProps = {
+       plugins: [],
+       section: {},
+       translate: identity,
+};
+
+export default connect(
+       ( state, { type } ) => ( {
+               plugins: getSectionPlugins( state, type ),
+               section: getSection( state, type ),
+       } ),
+)( localize( ArchiveBrowse ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsarchivebrowseindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/index.jsx      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/archive/browse/index.jsx        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,33 +1,55 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { connect } from 'react-redux';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { getBrowse } from 'actions';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { fetchSection, fetchSections } from 'state/sections/actions';
+import { getSection } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> import Browse from './browse';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const BrowseContainer = React.createClass( {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class BrowseContainer extends Component {
+       static propTypes = {
+               fetchSection: PropTypes.func,
+               params: PropTypes.object,
+       };
+
+       static defaultProps = {
+               fetchSection: () => {},
+               params: {},
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentDidMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.getBrowse();
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.fetchSection();
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentDidUpdate( previousProps ) {
-               if ( this.props.params.type !== previousProps.params.type ) {
-                       this.getBrowse();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ componentDidUpdate( { params } ) {
+               if ( this.props.params.type !== params.type ) {
+                       this.fetchSection();
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        getBrowse() {
-               this.props.dispatch( getBrowse( this.props.params.type ) );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ fetchSection() {
+               if ( ! this.props.section ) {
+                       this.props.fetchSections();
+               }
+               this.props.fetchSection( this.props.params.type );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return <Browse { ...this.props } />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return <Browse type={ this.props.params.type } />;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = ( state, ownProps ) => ( {
-       plugins: state.browse[ ownProps.params.type ]
-} );
-
-export default connect( mapStateToProps )( BrowseContainer );
-
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default connect(
+       ( state, { params } ) => ( {
+               section: getSection( state, params.type ),
+       } ),
+       {
+               fetchSection,
+               fetchSections,
+       },
+)( BrowseContainer );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentscontentnoneindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/content-none/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/content-none/index.jsx        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/content-none/index.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,69 +1,97 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { getParams, getPath } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> import SearchForm from 'components/search-form';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default  React.createClass( {
-       displayName: 'ContentNone',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const ContentNone = ( { params, path, translate } ) => {
+       let helpText, userHelp;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               let helpText, userHelp;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( -1 !== path.indexOf( 'search' ) ) {
+               helpText = (
+                       <div className="page-content">
+                               <p>{ translate( 'Sorry, but nothing matched your search terms.' ) }</p>
+                               <p>{ translate( 'Please try again with some different keywords.' ) }</p>
+                               <SearchForm />
+                       </div>
+               );
+       } else if ( -1 !== path.indexOf( 'browse/favorites' ) ) {
+               if ( pluginDirectory.userId > 0 ) {
+                       helpText = <p>{ translate( 'No favorites have been added, yet.' ) }</p>;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( -1 !== this.props.location.pathname.indexOf( 'search' ) ) {
-                       helpText = (
-                               <div className="page-content">
-                                       <p>Sorry, but nothing matched your search terms.</p>
-                                       <p>Please try again with some different keywords.</p>
-                                       <SearchForm searchTerm={ this.props.params.searchTerm } />
-                               </div>
-                       );
-
-               } else if ( -1 !== this.props.location.pathname.indexOf( 'browse/favorites' ) ) {
-                       if ( true /*user_logged_in*/ ) {
-                               helpText = <p>No favorites have been added, yet.</p>;
-
-                               if ( -1 !== this.props.location.pathname.indexOf( 'browse/favorites/' + this.props.params.username ) ) {
-                                       userHelp = (
-                                               <div>
-                                                       <p>Find a plugin and mark it as a favorite to see it here.</p>
-                                                       <p>Your favorite plugins are also shared on <a href={ 'https://profile.wordpress.org/' + this.props.params.username }>your profile</a></p>
-                                               </div>
-                                       );
-                               }
-
-                               helpText = <div className="page-content">{ helpText }{ userHelp }</div>;
-                       } else {
-                               helpText = (
-                                       <div className="page-content">
-                                               <p><a href="https://login.wordpress.org/">Loginto WordPress.org</a> to mark plugins as favorites.</p>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( -1 !== path.indexOf( 'browse/favorites/' + params.username ) ) {
+                               userHelp = (
+                                       <div>
+                                               <p>{ translate( 'Find a plugin and mark it as a favorite to see it here.' ) }</p>
+                                               <p>
+                                                       { translate( 'Your favorite plugins are also shared on {{a}}your profile{{/a}}', {
+                                                               components: { a: <a href={ 'https://profile.wordpress.org/' + params.username } /> },
+                                                       } ) }
+                                               </p>
</ins><span class="cx" style="display: block; padding: 0 10px">                                         </div>
</span><span class="cx" style="display: block; padding: 0 10px">                                );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                       helpText = <div className="page-content">{ helpText }{ userHelp }</div>;
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        helpText = (
</span><span class="cx" style="display: block; padding: 0 10px">                                <div className="page-content">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <p>It seems we can&#8217;t find what you&#8217;re looking for. Perhaps searching can help.</p>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <p>
+                                               { translate( '{{a}}Log into WordPress.org{{/a}} to mark plugins as favorites.', {
+                                                       components: { a: <a href="https://login.wordpress.org/" /> },
+                                               } ) }
+                                       </p>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </div>
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                       helpText = (
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         }
+       } else {
+               helpText = (
+                       <div className="page-content">
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <div className="page-content">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        { helpText }
-                                       <SearchForm searchTerm={ this.props.params.searchTerm } />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <p>
+                                               { translate(
+                                                       'It seems we can&#8217;t find what you&#8217;re looking for. Perhaps searching can help.'
+                                               ) }
+                                       </p>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <SearchForm />
+                       </div>
+               );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return (
+               <section className="no-results not-found">
+                       <header className="page-header">
+                               <h1 className="page-title">{ translate( 'Nothing Found' ) }</h1>
+                       </header>
+                       { helpText }
+               </section>
+       );
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <section className="no-results not-found">
-                               <header className="page-header">
-                                       <h1 className="page-title">Nothing Found</h1>
-                               </header>
-                               { helpText }
-                       </section>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ContentNone.propTypes = {
+       params: PropTypes.object,
+       path: PropTypes.string,
+       translate: PropTypes.func,
+};
+
+ContentNone.defaultProps = {
+       params: {},
+       path: '',
+       translate: identity,
+};
+
+export default connect(
+       ( state ) => ( {
+               params: getParams( state ),
+               path: getPath( state ),
+       } ),
+)( localize( ContentNone ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpagefrontpagejsx"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/front-page.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/front-page.jsx     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/front-page.jsx       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,18 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-
-/**
- * Internal dependencies.
- */
-import PluginSection from './plugin-section/index';
-
-export default React.createClass( {
-       displayName: 'FrontPage',
-
-       render() {
-               return (
-                       <div>
-                               { this.props.sections.map( section => <PluginSection key={ section.path } section={ section } /> ) }
-                       </div>
-               )
-       }
-} );
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpageindexjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/index.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/index.js   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/index.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,28 +1,29 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { connect } from 'react-redux';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import FrontPage from './front-page';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import PluginSection from './plugin-section';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = () => ( {
-       sections: [
-               {
-                       path: 'browse/featured/',
-                       title: 'Featured Plugins',
-                       type: 'featured'
-               },
-               {
-                       path: 'browse/popular/',
-                       title: 'Popular Plugins',
-                       type: 'popular'
-               },
-               {
-                       path: 'browse/beta/',
-                       title: 'Beta Plugins',
-                       type: 'beta'
-               }
-       ]
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+const FrontPage = ( { sections } ) => (
+       <div>
+               { sections.map( ( type ) => <PluginSection key={ type } type={ type } /> ) }
+       </div>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default connect( mapStateToProps )( FrontPage );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+FrontPage.propTypes = {
+       sections: PropTypes.arrayOf( PropTypes.string ),
+       translate: PropTypes.func,
+};
+
+FrontPage.defaultProps = {
+       sections: [ 'featured', 'popular', 'beta' ],
+       translate: identity,
+};
+
+export default localize( FrontPage );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpagepluginsectionindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/index.jsx   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/index.jsx     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,34 +1,49 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React, { Component } from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { connect } from 'react-redux';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { getBrowse } from 'actions';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { fetchSection, fetchSections } from 'state/sections/actions';
</ins><span class="cx" style="display: block; padding: 0 10px"> import PluginSection from './plugin-section';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> class PluginSectionContainer extends Component {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        static propTypes = {
+               fetchSection: PropTypes.func,
+               type: PropTypes.string.isRequired,
+       };
+
+       static defaultProps = {
+               fetchBrowse: () => {},
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentDidMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.getBrowse();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.props.fetchSections();
+               this.fetchSection();
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentDidUpdate( previousProps ) {
-               if ( this.props.section.type !== previousProps.section.type ) {
-                       this.getBrowse();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ componentDidUpdate( { type } ) {
+               if ( this.props.type !== type ) {
+                       this.fetchSection();
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        getBrowse() {
-               this.props.dispatch( getBrowse( this.props.section.type ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ fetchSection() {
+               this.props.fetchSection( this.props.type );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return <PluginSection { ...this.props } />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return <PluginSection type={ this.props.type } />;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = ( state, ownProps ) => ( {
-       plugins: state.browse[ ownProps.section.type ].slice( 0, 4 )
-} );
-
-export default connect( mapStateToProps )( PluginSectionContainer );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default connect(
+       null,
+       {
+               fetchSection,
+               fetchSections,
+       },
+)( PluginSectionContainer );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsfrontpagepluginsectionpluginsectionjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/plugin-section.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/plugin-section.jsx  2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/front-page/plugin-section/plugin-section.jsx    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,29 +1,57 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { Link } from 'react-router';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { getSection, getSectionPlugins } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> import PluginCard from 'components/plugin-card';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'PluginSection',
-
-       render() {
-               if ( ! this.props.plugins ) {
-                       return <div />;
-               }
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Array}       plugins   Plugins
+ * @param {Object}      section   Section
+ * @param {Function}    translate Translation function
+ * @return {(XML|null)}           Component or null.
+ * @constructor
+ */
+export const PluginSection = ( { plugins, section, translate } ) => {
+       if ( plugins ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <section className="plugin-section">
</span><span class="cx" style="display: block; padding: 0 10px">                                <header className="section-header">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <h2 className="section-title">{ this.props.section.title }</h2>
-                                       <Link className="section-link" to={ this.props.section.path }>See all</Link>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <h2 className="section-title">{ section.name }</h2>
+                                       <Link className="section-link" to={ `/browse/${ section.slug }/` }>{ translate( 'See all' ) }</Link>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </header>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                { this.props.plugins.map( slug =>
-                                       <PluginCard key={ slug } slug={ slug } />
-                               ) }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         { plugins.map( ( plugin ) => <PluginCard key={ plugin.id } plugin={ plugin } /> ) }
</ins><span class="cx" style="display: block; padding: 0 10px">                         </section>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return null;
+};
+
+PluginSection.propTypes = {
+       plugins: PropTypes.array,
+       section: PropTypes.object,
+       translate: PropTypes.func,
+};
+
+PluginSection.defaultProps = {
+       plugins: [],
+       section: {},
+       translate: identity,
+};
+
+export default connect(
+       ( state, { type } ) => ( {
+               plugins: getSectionPlugins( state, type ).slice( 0, 4 ),
+               section: getSection( state, type ),
+       } ),
+)( localize( PluginSection ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsindexjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/index.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/index.js      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/index.js        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,23 +1,32 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import { connect } from 'react-redux';
</span><span class="cx" style="display: block; padding: 0 10px"> import { withRouter } from 'react-router';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import PluginDirectory from './plugin-directory';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = () => ( {
-       widgets: [
-               {
-                       title: 'Add Your Plugin',
-                       text: 'The WordPress Plugin Directory is the largest directory of free and open source WordPress plugins. Find out how to host your plugin on WordPress.org.'
-               },
-               {
-                       title: 'Create a Plugin',
-                       text: 'Building a plugin has never been easier. Read through the Plugin Developer Handbook to learn all about WordPress plugin development.'
-               },
-               {
-                       title: 'Stay Up-to-Date',
-                       text: 'Plugin development is constantly changing with each new WordPress release. Keep up with the latest changes by following the Plugin Review Team’s blog.'
-               },
-       ]
-} );
-
-export default withRouter( connect( mapStateToProps )( PluginDirectory ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default withRouter( localize( connect(
+       ( state, { translate } ) => ( {
+               widgets: [
+                       /* eslint-disable max-len */
+                       {
+                               title: translate( 'Add Your Plugin' ),
+                               text: translate( 'The WordPress Plugin Directory is the largest directory of free and open source WordPress plugins. Find out how to host your plugin on WordPress.org.' ),
+                       },
+                       {
+                               title: translate( 'Create a Plugin' ),
+                               text: translate( 'Building a plugin has never been easier. Read through the Plugin Developer Handbook to learn all about WordPress plugin development.' ),
+                       },
+                       {
+                               title: translate( 'Stay Up-to-Date' ),
+                               text: translate( 'Plugin development is constantly changing with each new WordPress release. Keep up with the latest changes by following the Plugin Review Team’s blog.' ),
+                       },
+                       /* eslint-enable max-len */
+               ],
+       } ),
+)( PluginDirectory ) ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspageindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/index.jsx        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/index.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,35 +1,47 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { connect } from 'react-redux';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import find from 'lodash/find';
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> import Page from './page';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { getPage } from 'actions';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { fetchPage } from 'state/pages/actions';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const PageContainer = React.createClass( {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+class PageContainer extends Component {
+       static propTypes = {
+               fetchPage: PropTypes.func,
+               route: PropTypes.object.isRequired,
+       };
+
+       static defaultProps = {
+               fetchPage: () => {},
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentDidMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.getPage();
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.fetchPage();
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentDidUpdate( previousProps ) {
-               if ( this.props.route.path !== previousProps.route.path ) {
-                       this.getPage();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ componentDidUpdate( { route } ) {
+               if ( this.props.route.path !== route.path ) {
+                       this.fetchPage();
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        getPage() {
-               this.props.dispatch( getPage( this.props.route.path ) );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ fetchPage() {
+               this.props.fetchPage( this.props.route.path );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return <Page { ...this.props } />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return <Page />;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = ( state, ownProps ) => ( {
-       page: find( state.pages, { slug: ownProps.route.path } )
-} );
-
-export default connect( mapStateToProps )( PageContainer );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default connect(
+       null,
+       {
+               fetchPage,
+       }
+)( PageContainer );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspagepagejsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/page.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/page.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/page/page.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,35 +1,54 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Page',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPage } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               if ( ! this.props.page ) {
-                       return (
-                               <article className="page type-page">
-                                       <header className="entry-header">
-                                               <h1 className="entry-title"> </h1>
-                                       </header>
-                                       <div className="entry-content">
-                                               <section>
-                                                       <div className="container"> LOADING </div>
-                                               </section>
-                                       </div>
-                               </article>
-                       )
-               }
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+const Page = ( { page } ) => {
+       if ( page && page.title ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <article className="page type-page">
</span><span class="cx" style="display: block; padding: 0 10px">                                <header className="entry-header">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <h1 className="entry-title">{ this.props.page.title.rendered }</h1>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <h1 className="entry-title">{ page.title.rendered }</h1>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </header>
</span><span class="cx" style="display: block; padding: 0 10px">                                <div className="entry-content">
</span><span class="cx" style="display: block; padding: 0 10px">                                        <section>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                <div className="container" dangerouslySetInnerHTML={ { __html: this.props.page.content.rendered } } />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         <div className="container" dangerouslySetInnerHTML={ { __html: page.content.rendered } } />
</ins><span class="cx" style="display: block; padding: 0 10px">                                         </section>
</span><span class="cx" style="display: block; padding: 0 10px">                                </div>
</span><span class="cx" style="display: block; padding: 0 10px">                        </article>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return (
+               <article className="page type-page">
+                       <header className="entry-header">
+                               <h1 className="entry-title"> </h1>
+                       </header>
+                       <div className="entry-content">
+                               <section>
+                                       <div className="container"> LOADING </div>
+                               </section>
+                       </div>
+               </article>
+       );
+};
+
+Page.propTypes = {
+       page: PropTypes.object,
+};
+
+Page.defaultProps = {
+       page: {},
+};
+
+export default connect(
+       ( state ) => ( {
+               page: getPage( state ),
+       } ),
+)( Page );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspaginationindexjsx"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/pagination/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/pagination/index.jsx                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/pagination/index.jsx    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,62 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { Link } from 'react-router';
+
+/**
+ * Internal dependencies.
+ */
+import { getPath } from 'state/selectors';
+
+export const Pagination = ( { current, path, total } ) => {
+       const getLinks = () => {
+               const links = [];
+               let dots = false;
+
+               for ( let index = 1; index <= total; index++ ) {
+                       if ( index === current ) {
+                               links.push( <span key={ index } className="page-numbers current">{ index }</span> );
+                               dots = true;
+                               continue;
+                       }
+                       if ( ( index <= 1 || ( current && index >= current - 1 && index <= current + 1 ) || index > total - 1 ) ) {
+                               links.push(
+                                       <Link key={ index } className="page-numbers" to={ path + 'page/' + index + '/' }>{ index }</Link>
+                               );
+                               dots = true;
+                       } else if ( dots ) {
+                               links.push( <span key={ index } className="page-numbers dots">&hellip;</span> );
+                               dots = false;
+                       }
+               }
+
+               return links;
+       };
+
+       return (
+               <nav className="navigation pagination" role="navigation">
+                       <h2 className="screen-reader-text">Posts navigation</h2>
+                       <div className="nav-links">
+                               { getLinks() }
+                       </div>
+               </nav>
+       );
+};
+
+Pagination.propTypes = {
+       current: PropTypes.number,
+       path: PropTypes.string.isRequired,
+       total: PropTypes.number.isRequired,
+};
+
+Pagination.defaultProps = {
+       current: 1,
+};
+
+export default connect(
+       ( state ) => ( {
+               path: getPath( state ),
+       } ),
+)( Pagination );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugindownloadbuttonindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/download-button/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/download-button/index.jsx      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/download-button/index.jsx        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,17 +1,42 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'DownloadButton',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <span>
-                               <a className="plugin-download button download-button button-large" href={ this.props.plugin.download_link } itemProp="downloadUrl">
-                                       Download
-                               </a>
-                               <meta itemProp="softwareVersion" content={ this.props.plugin.version } />
-                               <meta itemProp="fileFormat" content="application/zip" />
-                       </span>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const DownloadButton = ( { plugin, translate } ) => (
+       <span>
+               <a
+                       className="plugin-download button download-button button-large"
+                       href={ plugin.download_link }
+                       itemProp="downloadUrl"
+               >
+                       { translate( 'Download' ) }
+               </a>
+               <meta itemProp="softwareVersion" content={ plugin.version } />
+               <meta itemProp="fileFormat" content="application/zip" />
+       </span>
+);
+
+DownloadButton.propTypes = {
+       plugin: PropTypes.object,
+       translate: PropTypes.func,
+};
+
+DownloadButton.defaultProps = {
+       plugin: {},
+       translate: identity,
+};
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( localize( DownloadButton ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginfavoritebuttonbuttonjsx"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/button.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/button.jsx     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/button.jsx       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,44 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-import { connect } from 'react-redux';
-import includes from 'lodash/includes';
-
-const FavoriteButton = React.createClass( {
-       displayName: 'FavoriteButton',
-
-       toggleFavorite( event ) {
-               const $button = jQuery( event.target );
-
-               this.props.toggleFavorite( event );
-
-               $button.addClass( 'is-animating' ).one( 'animationend', function() {
-                       $button.toggleClass( 'is-animating favorited' );
-               } );
-       },
-
-       render() {
-               let classNames = [ 'plugin-favorite-heart' ];
-
-               if ( this.props.favorite ) {
-                       classNames.push( 'favorited' );
-               }
-
-               return (
-                       <div className="plugin-favorite">
-                               <button type="button" className={ classNames.join( ' ' ) } onClick={ this.toggleFavorite } >
-                                       <span className="screen-reader-text">
-                                               { this.props.favorite
-                                                       ? `Unfavorite ${ this.props.plugin.name }`
-                                                       : `Favorite ${ this.props.plugin.name }`
-                                               }
-                                       </span>
-                               </button>
-                       </div>
-               )
-       }
-} );
-
-export default connect(
-       ( state, { plugin } ) => ( {
-               favorite: includes( state.favorites, plugin.slug )
-       } ),
-)( FavoriteButton );
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginfavoritebuttonindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/index.jsx      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/favorite-button/index.jsx        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,36 +1,74 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import FavoriteButton from './button';
-import {
-       getFavorites,
-       favoritePlugin,
-       unfavoritePlugin
-} from 'actions/index';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { favoritePlugin } from 'state/favorites/actions';
+import { isFavorite } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       componentDidMount() {
-               this.getFavorites();
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class FavoriteButton extends Component {
+       static propTypes = {
+               favorite: PropTypes.bool,
+               favoritePlugin: PropTypes.func,
+               plugin: PropTypes.object,
+               translate: PropTypes.func,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentDidUpdate( previousProps ) {
-               if ( this.props.plugin.slug !== previousProps.plugin.slug ) {
-                       this.getFavorites();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ static defaultProps = {
+               favorite: false,
+               favoritePlugin: () => {},
+               plugin: {},
+               translate: identity,
+       };
+
+       toggleFavorite = ( event ) => {
+               const $button = jQuery( event.target );
+
+               this.props.favoritePlugin( this.props.plugin );
+
+               $button.addClass( 'is-animating' ).one( 'animationend', () => {
+                       $button.toggleClass( 'is-animating favorited' );
+               } );
+       };
+
+       render() {
+               if ( 0 === pluginDirectory.userId ) {
+                       return null;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        getFavorites() {
-               this.props.dispatch( getFavorites( this.props.plugin.slug ) );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         const { favorite, plugin, translate } = this.props;
+               const classNames = [ 'plugin-favorite-heart' ];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        toggleFavorite( event ) {
-               if ( event.target.classList.contains( 'favorited' ) ) {
-                       this.props.dispatch( unfavoritePlugin( this.props.plugin.slug ) );
-               } else {
-                       this.props.dispatch( favoritePlugin( this.props.plugin.slug ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( favorite ) {
+                       classNames.push( 'favorited' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return <FavoriteButton toggleFavorite={ this.toggleFavorite } />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return (
+                       <div className="plugin-favorite">
+                               <button type="button" className={ classNames.join( ' ' ) } onClick={ this.toggleFavorite } >
+                                       <span className="screen-reader-text">
+                                               { favorite
+                                                       ? translate( 'Unfavorite %(name)s', { components: { name: plugin.name } } )
+                                                       : translate( 'Favorite  %(name)s', { components: { name: plugin.name } } )
+                                               }
+                                       </span>
+                               </button>
+                       </div>
+               );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
+
+export default connect(
+       ( state ) => ( {
+               favorite: isFavorite( state ),
+       } ),
+       {
+               favoritePlugin,
+       },
+)( localize( FavoriteButton ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/index.jsx      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/index.jsx        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,32 +1,48 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { connect } from 'react-redux';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import find from 'lodash/find';
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import Plugin from './plugin';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { getPlugin } from 'actions';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { fetchPlugin } from 'state/plugins/actions';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const PluginContainer = React.createClass( {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+class PluginContainer extends Component {
+       static PropTypes = {
+               fetchPlugin: PropTypes.func,
+               params: PropTypes.object,
+       };
+
+       static defaultProps = {
+               fetchPlugin: () => {},
+               params: {},
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentDidMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.getPlugin();
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.fetchPlugin();
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentDidUpdate( previousProps ) {
-               if ( this.props.route.path !== previousProps.route.path ) {
-                       this.getPlugin();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ componentDidUpdate( { params } ) {
+               if ( this.props.params.slug !== params.slug ) {
+                       this.fetchPlugin();
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        getPlugin() {
-               this.props.dispatch( getPlugin( this.props.params.slug ) );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ fetchPlugin() {
+               this.props.fetchPlugin( this.props.params.slug );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return <Plugin { ...this.props } />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return <Plugin />;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = ( state, ownProps ) => ( {
-       plugin: find( state.plugins, { slug: ownProps.params.slug } )
-} );
-
-export default connect( mapStateToProps )( PluginContainer );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default connect(
+       null,
+       {
+               fetchPlugin,
+       },
+)( PluginContainer );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginpluginbannerindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin-banner/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin-banner/index.jsx        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin-banner/index.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,32 +1,57 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'PluginBanner',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               const { banners, slug } = this.props.plugin;
-               let banner;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Object} plugin Plugin object.
+ * @return {*} React element.
+ * @constructor
+ */
+export const PluginBanner = ( { plugin } ) => {
+       const { banners, slug } = plugin;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( ! banners ) {
-                       return <div />;
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! banners ) {
+               return null;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                banner = banners[ 'low' ] ? banners[ 'low' ] : banners[ 'high' ];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ const banner = banners.low || banners.high;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( ! banner ) {
-                       return <div />;
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! banner ) {
+               return null;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <div className="entry-banner">
-                               <div className="plugin-banner" id={ `plugin-banner-${ slug }` }></div>
-                               <style type='text/css'>
-                                       { `#plugin-banner-${ slug } { background-image: url('${ banner }'); }` }
-                                       { banners[ 'high' ] ?
-                                               `@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { #plugin-banner-${ slug } { background-image: url('${ banners[ 'high' ] }'); } }` : ''
-                                       } }
-                               </style>
-                       </div>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return (
+               <div className="entry-banner">
+                       <div className="plugin-banner" id={ `plugin-banner-${ slug }` } />
+                       <style type="text/css">
+                               { `#plugin-banner-${ slug } { background-image: url('${ banner }'); }` }
+                               { banners.high && '@media ' +
+                                       'only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) ' +
+                                       `{ #plugin-banner-${ slug } { background-image: url('${ banners.high }'); } }`
+                               } }
+                       </style>
+               </div>
+       );
+};
+
+PluginBanner.propTypes = {
+       plugin: PropTypes.object,
+};
+
+PluginBanner.defaultProps = {
+       plugin: {},
+};
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( PluginBanner );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginpluginjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin.jsx     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin.jsx       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,10 +1,21 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
+import { values } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import Developers from './sections/developers';
</span><span class="cx" style="display: block; padding: 0 10px"> import DonateWidget from 'components/widget-area/widgets/donate';
</span><span class="cx" style="display: block; padding: 0 10px"> import DownloadButton from './download-button';
</span><span class="cx" style="display: block; padding: 0 10px"> import FAQ from './sections/faq';
</span><span class="cx" style="display: block; padding: 0 10px"> import FavoriteButton from './favorite-button';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> import MetaWidget from 'components/widget-area/widgets/meta/index';
</span><span class="cx" style="display: block; padding: 0 10px"> import PluginBanner from './plugin-banner';
</span><span class="cx" style="display: block; padding: 0 10px"> import PluginIcon from 'components/plugin-icon';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14,52 +25,71 @@
</span><span class="cx" style="display: block; padding: 0 10px"> import Section from './sections';
</span><span class="cx" style="display: block; padding: 0 10px"> import SupportWidget from 'components/widget-area/widgets/support/index';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Plugin',
-
-       render() {
-               if ( ! this.props.plugin ) {
-                       return (
-                               <article className="plugin type-plugin">
-                                       <header className="entry-header">
-                                               <h1 className="entry-title"> </h1>
-                                       </header>
-                                       <div className="entry-content">
-                                               <section>
-                                                       <div className="container"> LOADING </div>
-                                               </section>
-                                       </div>
-                               </article>
-                       )
-               }
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const Plugin = ( { plugin, translate } ) => {
+       if ( ! plugin ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <article className="plugin type-plugin">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <PluginBanner plugin={ this.props.plugin } />
-                               <header className="plugin-header">
-                                       <PluginIcon plugin={ this.props.plugin } />
-                                       <div className="plugin-actions">
-                                               <FavoriteButton plugin={ this.props.plugin } />
-                                               <DownloadButton plugin={ this.props.plugin } />
-                                       </div>
-                                       <h1 className="plugin-title">{ this.props.plugin.name }</h1>
-                                       <span className="byline">By <span className="author vcard" dangerouslySetInnerHTML={ { __html: this.props.plugin.author } } /></span>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <header className="entry-header">
+                                       <h1 className="entry-title"> </h1>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </header>
</span><span class="cx" style="display: block; padding: 0 10px">                                <div className="entry-content">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <Section slug="description" title="Description" content={ this.props.plugin.sections.description } />
-                                       <Screenshots screenshots={ this.props.plugin.screenshots } />
-                                       <FAQ content={ this.props.plugin.sections.faq } />
-                                       <Reviews slug={ this.props.plugin.slug } content={ this.props.plugin.sections.reviews } numRatings={ this.props.plugin.num_ratings } />
-                                       <Section slug="changelog" title="Changelog" content={ this.props.plugin.sections.changelog } />
-                                       <Developers slug={ this.props.plugin.slug } contributors={ this.props.plugin.contributors } />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <section>
+                                               <div className="container"> LOADING </div>
+                                       </section>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <div className="entry-meta">
-                                       <MetaWidget plugin={ this.props.plugin } />
-                                       <RatingsWidget plugin={ this.props.plugin } />
-                                       <SupportWidget plugin={ this.props.plugin } />
-                                       <DonateWidget plugin={ this.props.plugin } />
-                               </div>
</del><span class="cx" style="display: block; padding: 0 10px">                         </article>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return (
+               <article className="plugin type-plugin">
+                       <PluginBanner />
+                       <header className="plugin-header">
+                               <PluginIcon />
+                               <div className="plugin-actions">
+                                       <FavoriteButton plugin={ plugin } />
+                                       <DownloadButton />
+                               </div>
+                               <h1 className="plugin-title" dangerouslySetInnerHTML={ { __html: plugin.title.rendered } } />
+                               <span className="byline">
+                                       { translate( 'By {{span/}}', { components: {
+                                               span: <span className="author vcard" dangerouslySetInnerHTML={ { __html: plugin.author } } />,
+                                       } } ) }
+                               </span>
+                       </header>
+                       <div className="entry-content">
+                               <Section slug="description" title="Description" content={ plugin.sections.description } />
+                               <Screenshots screenshots={ values( plugin.screenshots ) } />
+                               <FAQ content={ plugin.sections.faq } />
+                               <Reviews
+                                       slug={ plugin.slug }
+                                       content={ plugin.sections.reviews }
+                                       numRatings={ plugin.ratings.length } />
+                               <Section slug="changelog" title="Changelog" content={ plugin.sections.changelog } />
+                               <Developers />
+                       </div>
+                       <div className="entry-meta">
+                               <MetaWidget />
+                               <RatingsWidget />
+                               <SupportWidget />
+                               <DonateWidget />
+                       </div>
+               </article>
+       );
+};
+
+Plugin.propTypes = {
+       plugin: PropTypes.object,
+       translate: PropTypes.func,
+};
+
+Plugin.defaultProps = {
+       plugin: {},
+       translate: identity,
+};
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( localize( Plugin ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionschangelogstylescss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/changelog/style.scss</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/changelog/style.scss  2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/changelog/style.scss    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,12 +1,11 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#changelog {
-       font-size: ms(-2); 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-changelog {
+       font-size: ms( -2 );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        code {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                font-size: ms(-2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         font-size: ms( -2 );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        h4 {
</span><span class="cx" style="display: block; padding: 0 10px">                margin-top: 0;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsdevelopersindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/index.jsx  2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/index.jsx    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,23 +1,59 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import DeveloperList from './list';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Developers',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const Developers = ( { plugin, translate } ) => (
+       <div>
+               <div id="developers" className="section read-more plugin-developers">
+                       <h2>{ translate( 'Contributors & Developers' ) }</h2>
+                       <p>
+                               { translate( 'This is open source software. The following people have contributed to this plugin.' ) }
+                       </p>
+                       <DeveloperList contributors={ plugin.contributors } />
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <div>
-                               <div id="developers" className="read-more">
-                                       <h2>Contributors & Developers</h2>
-                                       <p>This is open source software. The following people have contributed to this plugin.</p>
-                                       <DeveloperList contributors={ this.props.contributors } />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 <h5>{ translate( 'Interested in development?' ) }</h5>
+                       <p>
+                               {
+                                       /* eslint-disable max-len */
+                                       translate( '{{code}}Browse the code{{/code}} or subscribe to the {{log}}development log{{/log}} by {{rss}}RSS{{/rss}}.', {
+                                               components: {
+                                                       code: <a href={ `https://plugins.svn.wordpress.org/${ plugin.slug }/` } rel="nofollow" />,
+                                                       log: <a href={ `https://plugins.trac.wordpress.org/log/${ plugin.slug }/` } rel="nofollow" />,
+                                                       rss: <a href={ `https://plugins.trac.wordpress.org/log/${ plugin.slug }/?limit=100&mode=stop_on_copy&format=rss` } rel="nofollow" />,
+                                               },
+                                       } )
+                                       /* eslint-enable max-len */
+                               }
+                       </p>
+               </div>
+               <button type="button" className="button-link section-toggle" aria-controls="developers" aria-expanded="false">
+                       { translate( 'Read more' ) }
+               </button>
+       </div>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <h5>Interested in development?</h5>
-                                       <p><a href={ `https://plugins.svn.wordpress.org/${ this.props.slug }/` } rel="nofollow">Browse the code</a> or subscribe to the <a href={ `https://plugins.trac.wordpress.org/log/${ this.props.slug }/` } rel="nofollow">development log</a> by <a href={ `https://plugins.trac.wordpress.org/log/${ this.props.slug }/?limit=100&mode=stop_on_copy&format=rss` } rel="nofollow">RSS</a>.</p>
-                               </div>
-                               <button type="button" className="button-link section-toggle" aria-controls="developers" aria-expanded="false">Read more</button>
-                       </div>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+Developers.propTypes = {
+       plugin: PropTypes.object,
+       translate: PropTypes.func,
+};
+
+Developers.defaultProps = {
+       plugin: {},
+       translate: identity,
+};
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( localize( Developers ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsdeveloperslistjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/list.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/list.jsx   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/developers/list.jsx     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,23 +1,40 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-import values from 'lodash/values';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { map } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'DeveloperList',
-
-       render() {
-               if ( ! this.props.contributors ) {
-                       return <div />;
-               }
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Object} contributors Plugin contributors.
+ * @return {*} React Element
+ * @constructor
+ */
+export const DeveloperList = ( { contributors } ) => {
+       if ( contributors ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <ul className="plugin-developers">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                { values( this.props.contributors ).map( ( contributor, index ) =>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         { map( contributors, ( contributor, index ) =>
</ins><span class="cx" style="display: block; padding: 0 10px">                                         <li key={ index }>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                <img className="avatar avatar-32 photo" height="32" width="32" src={ contributor.avatar } />
-                                               <a href={ contributor.profile }>{ contributor.display_name }</a>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         <a href={ contributor.profile }>
+                                                       <img className="avatar avatar-32 photo" height="32" width="32" src={ contributor.avatar } />
+                                                       { contributor.display_name }
+                                               </a>
</ins><span class="cx" style="display: block; padding: 0 10px">                                         </li>
</span><span class="cx" style="display: block; padding: 0 10px">                                ) }
</span><span class="cx" style="display: block; padding: 0 10px">                        </ul>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return null;
+};
+
+DeveloperList.propTypes = {
+       contributors: PropTypes.object,
+};
+
+DeveloperList.defaultProps = {
+       contributors: {},
+};
+
+export default DeveloperList;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsfaqindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,30 +1,47 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'FAQ',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class FAQ extends Component {
+       static propTypes = {
+               content: PropTypes.string,
+               translate: PropTypes.func,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        toggleAnswer( event ) {
-               var $question = jQuery( event.target );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ static defaultProps = {
+               content: null,
+               translate: identity,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        toggleAnswer = ( event ) => {
+               const $question = jQuery( event.target );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $question.is( '.open' ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $question.siblings( '.open' ).toggleClass( 'open' ).attr( 'aria-expanded', false ).next( 'dd' ).slideToggle( 200 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $question.siblings( '.open' ).toggleClass( 'open' ).attr( 'aria-expanded', false )
+                               .next( 'dd' ).slideToggle( 200 );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $question.toggleClass( 'open' ).attr( 'aria-expanded', function( index, attribute ) {
-                       return 'true' !== attribute;
-               } ).next( 'dd' ).slideToggle( 200 );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $question.toggleClass( 'open' ).attr( 'aria-expanded', ( index, attribute ) => ( 'true' !== attribute ) )
+                       .next( 'dd' ).slideToggle( 200 );
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( ! this.props.content ) {
-                       return <div />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         const { content, translate } = this.props;
+
+               if ( content ) {
+                       return (
+                               <div id="faq" className="section plugin-faq">
+                                       <h2>{ translate( 'FAQ' ) }</h2>
+                                       <div onClick={ this.toggleAnswer } dangerouslySetInnerHTML={ { __html: content } } />
+                               </div>
+                       );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <div id="faq">
-                               <h2>FAQ</h2>
-                               <div onClick={ this.toggleAnswer } dangerouslySetInnerHTML={ { __html: this.props.content } } />
-                       </div>
-               )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return null;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
+
+export default localize( FAQ );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsfaqstylescss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/style.scss</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/style.scss        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/faq/style.scss  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,4 +1,4 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq {
</ins><span class="cx" style="display: block; padding: 0 10px">         h2:first-of-type {
</span><span class="cx" style="display: block; padding: 0 10px">                font-size: ms( 2 );
</span><span class="cx" style="display: block; padding: 0 10px">                font-weight: 600;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -39,6 +39,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                display: none;
</span><span class="cx" style="display: block; padding: 0 10px">                margin: 0 0 1rem;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                .no-js & {
+                       display: block;
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 & p {
</span><span class="cx" style="display: block; padding: 0 10px">                        margin: 0;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -48,7 +52,3 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-.no-js #faq dd {
-       display: block;
-}
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/index.jsx     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/index.jsx       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,17 +1,38 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Section',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const Section = ( { content, slug, title, translate } ) => (
+       <div>
+               <div id={ slug } className={ `section read-more plugin-${ slug }` }>
+                       <h2>{ title }</h2>
+                       <div dangerouslySetInnerHTML={ { __html: content } } />
+               </div>
+               <button
+                       type="button"
+                       className="button-link section-toggle"
+                       aria-controls={ slug }
+                       aria-expanded="false"
+                       data-show-less={ translate( 'Show less' ) }
+                       data-read-more={ translate( 'Read more' ) }
+               >
+                       { translate( 'Read more' ) }
+               </button>
+       </div>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <div>
-                               <div id={ this.props.slug } className="section read-more">
-                                       <h2>{ this.props.title }</h2>
-                                       <div dangerouslySetInnerHTML={ { __html: this.props.content } } />
-                               </div>
-                               <button type="button" className="button-link section-toggle" aria-controls={ this.props.slug } aria-expanded="false">Read more</button>
-                       </div>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+Section.propTypes = {
+       content: PropTypes.string.isRequired,
+       slug: PropTypes.string.isRequired,
+       title: PropTypes.string.isRequired,
+       translate: PropTypes.func,
+};
+
+Section.defaultProps = {
+       translate: identity,
+};
+
+export default localize( Section );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsreviewsindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/reviews/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/reviews/index.jsx     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/reviews/index.jsx       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,19 +1,48 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Reviews',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const Reviews = ( { content, numberFormat, numRatings, slug, translate } ) => {
+       if ( ! numRatings ) {
+               return null;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <div>
-                               <div id="reviews" className="read-more">
-                                       <div className="plugin-reviews">
-                                               <h2>Reviews</h2>
-                                               <div dangerouslySetInnerHTML={ { __html: this.props.content } } />
-                                       </div>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return (
+               <div>
+                       <div id="reviews" className="section">
+                               <div className="plugin-reviews">
+                                       <h2>{ translate( 'Reviews' ) }</h2>
+                                       <div dangerouslySetInnerHTML={ { __html: content } }/>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <a className="reviews-link" href={ `https://wordpress.org/support/plugin/${ this.props.slug }/reviews/` } aria-expanded="false">Read all { this.props.numRatings } reviews</a>
</del><span class="cx" style="display: block; padding: 0 10px">                         </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 <a
+                               className="reviews-link"
+                               href={ `https://wordpress.org/support/plugin/${ slug }/reviews/` }
+                               aria-expanded="false"
+                       >
+                               { translate( 'Read all %(numRatings)s reviews', {
+                                       args: { numRatings: numberFormat( numRatings ) },
+                               } ) }
+                       </a>
+               </div>
+       );
+};
+
+Reviews.propTypes = {
+       content: PropTypes.string,
+       numberFormat: PropTypes.func,
+       numRatings: PropTypes.number.isRequired,
+       slug: PropTypes.string.isRequired,
+       translate: PropTypes.func,
+};
+
+Reviews.defaultProps = {
+       content: null,
+       numberFormat: identity,
+       translate: identity,
+};
+
+export default localize( Reviews );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsscreenshotsimagegalleryindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/image-gallery/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/image-gallery/index.jsx   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/image-gallery/index.jsx     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -550,7 +550,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                                                </span>,
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                <div className="image-gallery-slides">{ slides }</div>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                         <div key={ this.state.currentIndex } className="image-gallery-slides">{ slides }</div>
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         ]
</span><span class="cx" style="display: block; padding: 0 10px">                                                        :
</span><span class="cx" style="display: block; padding: 0 10px">                                                        <div className="image-gallery-slides">{ slides }</div>
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsscreenshotsindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/screenshots/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,29 +1,45 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-import values from 'lodash/values';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+//import { localize } from 'i18n-calypso';
+import { identity, map } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import ImageGallery from './image-gallery';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Screenshots',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const Screenshots = ( { screenshots, translate } ) => {
+       const items = map( screenshots, ( { caption, src } ) => ( {
+               original: src,
+               originalAlt: '',
+               thumbnail: src + '&width=100',
+               thumbnailAlt: caption || '',
+               description: caption || false,
+       } ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               const items = values( this.props.screenshots ).map( ( { caption, src } ) => ( {
-                       original: src,
-                       originalAlt: '',
-                       thumbnail: src + '&width=100',
-                       thumbnailAlt: caption || '',
-                       description: caption || false,
-               } ) );
-
-               if ( ! items ) {
-                       return;
-               }
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( items ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div id="screenshots" className="plugin-screenshots">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <h2>Screenshots</h2>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <h2>{ translate( 'Screenshots' ) }</h2>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <ImageGallery items={ items } />
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return null;
+};
+
+Screenshots.propTypes = {
+       screenshots: PropTypes.arrayOf( PropTypes.object ),
+       translate: PropTypes.func,
+};
+
+Screenshots.defaultProps = {
+       screenshots: [],
+       translate: identity,
+};
+
+//export default localize( Screenshots );
+export default Screenshots;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginsectionsstylescss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/style.scss</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/style.scss    2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/style.scss      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,7 +6,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                overflow: hidden;
</span><span class="cx" style="display: block; padding: 0 10px">                padding-bottom: 1px;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                &#description {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         &.plugin-description {
</ins><span class="cx" style="display: block; padding: 0 10px">                         max-height: 400px;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        &.toggled {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18,6 +18,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        max-height: none;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                .no-js & {
+                       max-height: none;
+                       overflow: auto;
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        h1, h2, h3 {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -58,11 +62,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.no-js .read-more {
-       overflow: auto;
-       max-height: none;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .section-toggle {
</span><span class="cx" style="display: block; padding: 0 10px">        color: $color__link;
</span><span class="cx" style="display: block; padding: 0 10px">        cursor: pointer;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -70,6 +69,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">        margin-top: 0.5rem;
</span><span class="cx" style="display: block; padding: 0 10px">        position: relative;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        .no-js & {
+               display: none;
+       }
+
+
</ins><span class="cx" style="display: block; padding: 0 10px">         &:after {
</span><span class="cx" style="display: block; padding: 0 10px">                content: "\f347";
</span><span class="cx" style="display: block; padding: 0 10px">                font-family: dashicons;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -88,7 +92,3 @@
</span><span class="cx" style="display: block; padding: 0 10px">                text-decoration: underline;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-.no-js .section-toggle {
-       display: none;
-}
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugincardindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,37 +1,53 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { connect } from 'react-redux';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import find from 'lodash/find';
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> import PluginCard from './plugin-card';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { getPlugin } from 'actions';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { fetchPlugin } from 'state/plugins/actions';
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const PluginCardContainer = React.createClass( {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class PluginCardContainer extends Component {
+       static propTypes = {
+               fetchPlugin: PropTypes.func,
+               plugin: PropTypes.object,
+               slug: PropTypes.string,
+       };
+
+       static defaultProps = {
+               fetchPlugin: () => {},
+               plugin: {},
+               slug: '',
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentDidMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.getPlugin();
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.fetchPlugin();
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentDidUpdate( previousProps ) {
-               if ( this.props.slug !== previousProps.slug ) {
-                       this.getPlugin();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ componentDidUpdate( { plugin, slug } ) {
+               if ( this.props.slug !== slug || this.props.plugin !== plugin ) {
+                       this.fetchPlugin();
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        getPlugin() {
-               this.props.dispatch( getPlugin( this.props.slug ) );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ fetchPlugin() {
+       //      this.props.fetchPlugin( this.props.slug );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return <PluginCard { ...this.props } />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return <PluginCard plugin={ this.props.plugin } />;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = ( state, ownProps ) => ( {
-       plugin: find( state.plugins, { slug: ownProps.slug } )
-} );
-
-export default connect( mapStateToProps )( PluginCardContainer );
-
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default connect(
+       ( state, { plugin, slug } ) => ( {
+               plugin: plugin || getPlugin( state, slug ),
+       } ),
+       {
+               fetchPlugin,
+       },
+)( PluginCardContainer );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugincardplugincardjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/plugin-card.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/plugin-card.jsx   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-card/plugin-card.jsx     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,4 +1,7 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { Link } from 'react-router';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -7,31 +10,29 @@
</span><span class="cx" style="display: block; padding: 0 10px"> import PluginIcon from 'components/plugin-icon';
</span><span class="cx" style="display: block; padding: 0 10px"> import PluginRatings from 'components/plugin-ratings';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'PluginCard',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const PluginCard = ( { plugin } ) => (
+       <article className="plugin type-plugin plugin-card">
+               <PluginIcon slug={ plugin.slug } />
+               <div className="entry">
+                       <header className="entry-header">
+                               <h2 className="entry-title">
+                                       <Link
+                                               to={ `${ plugin.slug }/` }
+                                               rel="bookmark"
+                                               dangerouslySetInnerHTML={ { __html: plugin.title.rendered } }
+                                       />
+                               </h2>
+                       </header>
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               if ( ! this.props.plugin ) {
-                       return (
-                               <div />
-                       );
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 { plugin.ratings && <PluginRatings rating={ plugin.meta.rating } ratingCount={ plugin.ratings.length } /> }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <article className="plugin type-plugin plugin-card">
-                               <PluginIcon plugin={ this.props.plugin } />
-                               <div className="entry">
-                                       <header className="entry-header">
-                                               <h2 className="entry-title">
-                                                       <Link to={ `${ this.props.plugin.slug }/` } rel="bookmark">{ this.props.plugin.name }</Link>
-                                               </h2>
-                                       </header>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 <div className="entry-excerpt" dangerouslySetInnerHTML={ { __html: plugin.excerpt.rendered } } />
+               </div>
+       </article>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <PluginRatings rating={ this.props.plugin.rating } ratingCount={ this.props.plugin.num_ratings } />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+PluginCard.propTypes = {
+       plugin: PropTypes.object,
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <div className="entry-excerpt">{ this.props.plugin.short_description }</div>
-                               </div>
-                       </article>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default PluginCard;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentsplugindirectoryjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-directory.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-directory.jsx  2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-directory.jsx    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,30 +1,40 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-import { IndexLink } from 'react-router';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import TextWidget from 'components/widget-area/widgets/text';
</span><span class="cx" style="display: block; padding: 0 10px"> import WidgetArea from 'components/widget-area';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'PluginDirectory',
-
-       widgetArea() {
-               return (
-                       <WidgetArea { ...this.props }>
-                               { this.props.widgets.map( widget =>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const PluginDirectory = ( { header, main, router, widgets } ) => (
+       <div>
+               { header }
+               { main }
+               { router.isActive( '/', true ) &&
+                       <WidgetArea>
+                               { widgets.map( ( widget ) =>
</ins><span class="cx" style="display: block; padding: 0 10px">                                         <TextWidget key={ widget.title } widget={ widget } />
</span><span class="cx" style="display: block; padding: 0 10px">                                ) }
</span><span class="cx" style="display: block; padding: 0 10px">                        </WidgetArea>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         }
+       </div>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <div>
-                               { this.props.header }
-                               { this.props.main }
-                               { this.props.router.isActive( '/', true ) ? this.widgetArea() : <div /> }
-                       </div>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+PluginDirectory.propTypes = {
+       header: PropTypes.object,
+       main: PropTypes.object,
+       router: PropTypes.object,
+       widgets: PropTypes.arrayOf( PropTypes.object ),
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+PluginDirectory.defaultProps = {
+       header: {},
+       main: {},
+       router: {},
+       widgets: [],
+};
+
+export default PluginDirectory;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginiconindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,34 +1,63 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'PluginIcon',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               const { icons, slug } = this.props.plugin;
-               let icon;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Object} plugin Plugin object.
+ * @return {*}            React element or null.
+ * @constructor
+ */
+export const PluginIcon = ( { plugin } ) => {
+       const { icons, slug } = plugin;
+       let icon;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( ! icons ) {
-                       return <div />;
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! icons ) {
+               return null;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( icons[ '1x' ] ) {
-                       icon = icons[ '1x' ]
-               } else if ( icons.svg ) {
-                       icon = icons.svg;
-               } else {
-                       icon = icons.default;
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( icons.svg ) {
+               icon = icons.svg;
+       } else if ( icons[ '1x' ] ) {
+               icon = icons[ '1x' ];
+       } else {
+               icon = icons.default;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <div className="entry-thumbnail">
-                               <div className="plugin-icon" id={ `plugin-icon-${ slug }` }></div>
-                               <style type='text/css'>
-                                       { `#plugin-icon-${ slug } { background-image: url('${ icon }'); } .plugin-icon { background-size: contain; height: 128px; width: 128px; }` }
-                                       { icons[ '2x' ] && icon !== icons.default ?
-                                               `@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { #plugin-icon-${ slug } { background-image: url('${ icons[ '2x' ] }'); } }` : ''
-                                       } }
-                               </style>
-                       </div>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return (
+               <div className="entry-thumbnail">
+                       <div className="plugin-icon" id={ `plugin-icon-${ slug }` } />
+                       <style type="text/css">
+                               { `#plugin-icon-${ slug } { background-image: url('${ icon }'); }` }
+                               { icons[ '2x' ] && icon !== icons.default
+                                       // eslint-disable-next-line max-len
+                                       ? `@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) { #plugin-icon-${ slug } { background-image: url('${ icons[ '2x' ] }'); } }`
+                                       : ''
+                               }
+                       </style>
+               </div>
+       );
+};
+
+PluginIcon.propTypes = {
+       plugin: PropTypes.object,
+       slug: PropTypes.string,
+};
+
+PluginIcon.defaultProps = {
+       plugin: {},
+       slug: '',
+};
+
+export default connect(
+       ( state, { slug } ) => ( {
+               plugin: getPlugin( state, slug ),
+       } ),
+)( PluginIcon );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginiconstylescss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/style.scss</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/style.scss        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-icon/style.scss  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2,6 +2,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">        display: none;
</span><span class="cx" style="display: block; padding: 0 10px">        max-width: 128px;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        .plugin-icon {
+               background-size: cover;
+               height: 128px;
+               width: 128px;
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         @media screen and ( min-width: 21em ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        display: inline-block;
</span><span class="cx" style="display: block; padding: 0 10px">                        margin: 0 4% 0 0;
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginratingsindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/index.jsx      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/index.jsx        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,22 +1,42 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { localize } from 'i18n-calypso';
+import { identity } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> import Stars from './stars';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'PluginRatings',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const PluginRatings = ( { numberFormat, rating, ratingCount, translate } ) => (
+       <div className="plugin-rating" itemProp="aggregateRating" itemScope="" itemType="http://schema.org/AggregateRating">
+               <meta itemProp="ratingCount" content={ ratingCount } />
+               <meta itemProp="ratingValue" content={ rating } />
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <div className="plugin-rating" itemProp="aggregateRating" itemScope="" itemType="http://schema.org/AggregateRating">
-                               <meta itemProp="ratingCount" content={ this.props.ratingCount } />
-                               <meta itemProp="ratingValue" content={ this.props.rating } />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         <Stars rating={ rating } />
+               <span className="rating-count">
+                       { translate( '(%(count)s{{span}} total ratings{{/span}})', {
+                               args: { count: numberFormat( ratingCount ) },
+                               components: { span: <span className="screen-reader-text" /> },
+                       } ) }
+               </span>
+       </div>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <Stars rating={ this.props.rating } />
-                               <span className="rating-count">({ this.props.ratingCount }<span className="screen-reader-text"> total ratings</span>)</span>
-                       </div>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+PluginRatings.propTypes = {
+       numberFormat: PropTypes.func,
+       rating: PropTypes.number,
+       ratingCount: PropTypes.number,
+       translate: PropTypes.func,
+};
+
+PluginRatings.defaultProps = {
+       numberFormat: identity,
+       rating: 0,
+       ratingCount: 0,
+       translate: identity,
+};
+
+export default localize( PluginRatings );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentspluginratingsstarsindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/stars/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/stars/index.jsx        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin-ratings/stars/index.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,10 +1,28 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Stars',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class Stars extends Component {
+       static propTypes = {
+               rating: PropTypes.number,
+               translate: PropTypes.func,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        fillStars( rating ) {
-               const template = '<span class="%1$s"></span>';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ static defaultProps = {
+               rating: 0,
+               translate: identity,
+       };
+
+       /**
+        * Returns filled stars representative of rating.
+        *
+        * @param {Number} rating Plugin rating.
+        * @return {String} Rating stars.
+        */
+       fillStars = ( rating ) => {
</ins><span class="cx" style="display: block; padding: 0 10px">                 let counter = rating * 2,
</span><span class="cx" style="display: block; padding: 0 10px">                        output = '',
</span><span class="cx" style="display: block; padding: 0 10px">                        i = 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12,35 +30,35 @@
</span><span class="cx" style="display: block; padding: 0 10px">                for ( i; i < 5; i++ ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        switch ( counter ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                case 0:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        output += template.replace( '%1$s', 'dashicons dashicons-star-empty' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 output += '<span class="dashicons dashicons-star-empty"></span>';
</ins><span class="cx" style="display: block; padding: 0 10px">                                         break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                case 1:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        output += template.replace( '%1$s', 'dashicons dashicons-star-half' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 output += '<span class="dashicons dashicons-star-half"></span>';
</ins><span class="cx" style="display: block; padding: 0 10px">                                         counter--;
</span><span class="cx" style="display: block; padding: 0 10px">                                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                default:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        output += template.replace( '%1$s', 'dashicons dashicons-star-filled' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 output += '<span class="dashicons dashicons-star-filled"></span>';
</ins><span class="cx" style="display: block; padding: 0 10px">                                         counter -= 2;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return output;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                const titleTemplate = '%s out of 5 stars',
-                       title = titleTemplate.replace( '%s', this.props.rating / 20 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         const { rating, translate } = this.props;
+               const stars =  Math.round( rating / 0.5 ) * 0.5;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div
</span><span class="cx" style="display: block; padding: 0 10px">                                className="wporg-ratings"
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                aria-label={ title }
-                               data-title-template={ titleTemplate }
-                               data-rating={ this.props.rating / 20 }
-                               dangerouslySetInnerHTML={ { __html: this.fillStars( Math.round( this.props.rating / 10 ) / 2 ) } }
-                       ></div>
-               )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         aria-label={ translate( '%(stars)s out of 5 stars', { args: { stars } } ) }
+                               dangerouslySetInnerHTML={ { __html: this.fillStars( stars ) } }
+                       />
+               );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
+
+export default localize( Stars );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/index.jsx      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/index.jsx        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,31 +1,48 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { connect } from 'react-redux';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import Search from './search';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { searchPlugins } from 'actions';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { fetchSearch } from 'state/search/actions';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const SearchContainer = React.createClass( {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class SearchContainer extends Component {
+       static propTypes = {
+               fetchSearch: PropTypes.func,
+               params: PropTypes.object,
+       };
+
+       static defaultProps = {
+               fetchSearch: () => {},
+               params: {},
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentDidMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.searchPlugins();
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.fetchSearch();
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentDidUpdate( previousProps ) {
-               if ( this.props.params.searchTerm !== previousProps.params.searchTerm ) {
-                       this.searchPlugins();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ componentDidUpdate( { params } ) {
+               if ( this.props.params.search !== params.search ) {
+                       this.fetchSearch();
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        searchPlugins() {
-               this.props.dispatch( searchPlugins( this.props.params.searchTerm ) );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ fetchSearch() {
+               this.props.fetchSearch( this.props.params.search );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><span class="cx" style="display: block; padding: 0 10px">                return <Search { ...this.props } />;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const mapStateToProps = ( state, ownProps ) => ( {
-       plugins: state.search[ ownProps.params.searchTerm ] || null
-} );
-
-export default connect( mapStateToProps )( SearchContainer );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default connect(
+       null,
+       {
+               fetchSearch,
+       },
+)( SearchContainer );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchsearchjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/search.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/search.jsx     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search/search.jsx       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,30 +1,57 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import ContentNone from 'components/content-none';
</span><span class="cx" style="display: block; padding: 0 10px"> import PluginCard from 'components/plugin-card';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { getSearchResults } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'Search',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const Search = ( { params, plugins, translate } ) => {
+       if ( ! plugins ) {
+               return <div>{ translate( 'Loading&hellip;' ) }</div>;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               if ( ! this.props.plugins ) {
-                       return <div>{ 'Loading...' }</div>;
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( 0 === plugins.length ) {
+               return <ContentNone />;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( 0 === this.props.plugins.length ) {
-                       return <ContentNone { ...this.props } />;
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return (
+               <div>
+                       <header className="page-header">
+                               <h1 className="page-title">
+                                       { translate( 'Search results for: {{strong}}%(search)s{{/strong}}', {
+                                               args: { search: params.search },
+                                               components: { strong: <strong /> },
+                                       } ) }
+                               </h1>
+                               <div className="taxonomy-description" />
+                       </header>
+                       { plugins.map( ( slug ) => <PluginCard key={ slug } slug={ slug } /> ) }
+               </div>
+       );
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <div>
-                               <header className="page-header">
-                                       <h1 className="page-title">Search results for: <strong>{ this.props.params.searchTerm }</strong></h1>
-                                       <div className="taxonomy-description"></div>
-                               </header>
-                               { this.props.plugins.map( slug =>
-                                       <PluginCard key={ slug } slug={ slug } />
-                               ) }
-                       </div>
-               );
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+Search.propTypes = {
+       params: PropTypes.object,
+       plugins: PropTypes.arrayOf( PropTypes.string ),
+       translate: PropTypes.func,
+};
+
+Search.defaultProps = {
+       params: {},
+       plugins: [],
+       translate: identity,
+};
+
+export default connect(
+       ( state ) => ( {
+               plugins: getSearchResults( state ),
+       } ),
+)( localize( Search ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchformindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,44 +1,61 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { withRouter } from 'react-router';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Internal dependencies.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { getSearchTerm } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> import SearchForm from './search-form';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const SearchFormContainer = React.createClass( {
-       getInitialState() {
-               return {
-                       searchTerm: this.props.searchTerm
-               };
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class SearchFormContainer extends Component {
+       static propTypes = {
+               router: PropTypes.object,
+               search: PropTypes.string,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        onChange( searchTerm ) {
-               this.setState( {
-                       searchTerm: searchTerm
-               } );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ static defaultProps = {
+               router: {},
+               search: '',
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        componentWillReceiveProps( nextProps ) {
-               this.setState( {
-                       searchTerm: nextProps.searchTerm
-               } );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ onChange = ( search ) => {
+               this.setState( { search } );
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        onSubmit( event ) {
-               var searchTerm = encodeURIComponent( this.state.searchTerm );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ onSubmit = ( event ) => {
+               const search = encodeURIComponent( this.state.search );
</ins><span class="cx" style="display: block; padding: 0 10px">                 event.preventDefault();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( searchTerm ) {
-                       this.props.router.push( `/search/${ searchTerm }/` );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( search ) {
+                       this.props.router.push( `/search/${ search }/` );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        this.props.router.push( '/' );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        constructor() {
+               super( ...arguments );
+
+               this.state = {
+                       search: this.props.search,
+               };
+       }
+
+       componentWillReceiveProps( { search } ) {
+               this.setState( { search } );
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         render() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return <SearchForm searchTerm={ this.state.searchTerm } onSubmit={ this.onSubmit } onChange={ this.onChange } />;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return <SearchForm onSubmit={ this.onSubmit } onChange={ this.onChange } />;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default withRouter( SearchFormContainer );
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default withRouter( connect(
+       ( state ) => ( {
+               search: getSearchTerm( state ),
+       } ),
+)( SearchFormContainer ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssearchformsearchformjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/search-form.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/search-form.jsx   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/search-form/search-form.jsx     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,16 +1,33 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'SearchForm',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class SearchForm extends Component {
+       static propTypes = {
+               onChange: PropTypes.func,
+               onSubmit: PropTypes.func,
+               search: PropTypes.string,
+               translate: PropTypes.func,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        onChange() {
-               this.props.onChange( this.refs.search.value );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ static defaultProps = {
+               onChange: () => {},
+               onSubmit: () => {},
+               search: '',
+               translate: identity,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        onChange = () => this.props.onChange( this.refs.search.value );
+
</ins><span class="cx" style="display: block; padding: 0 10px">         render() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                const { onSubmit, search, translate } = this.props;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        <form onSubmit={ this.props.onSubmit } role="search" method="get" className="search-form">
-                               <label htmlFor="s" className="screen-reader-text">Search for:</label>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 <form onSubmit={ onSubmit } role="search" method="get" className="search-form">
+                               <label htmlFor="s" className="screen-reader-text">{ translate( 'Search for:' ) }</label>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <input
</span><span class="cx" style="display: block; padding: 0 10px">                                        className="search-field"
</span><span class="cx" style="display: block; padding: 0 10px">                                        id="s"
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -19,13 +36,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        placeholder="Search plugins"
</span><span class="cx" style="display: block; padding: 0 10px">                                        ref="search"
</span><span class="cx" style="display: block; padding: 0 10px">                                        type="search"
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        value={ this.props.searchTerm }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 defaultValue={ search }
</ins><span class="cx" style="display: block; padding: 0 10px">                                 />
</span><span class="cx" style="display: block; padding: 0 10px">                                <button className="button button-primary button-search">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <i className="dashicons dashicons-search"></i>
-                                       <span className="screen-reader-text">Search plugins</span>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <i className="dashicons dashicons-search" />
+                                       <span className="screen-reader-text">{ translate( 'Search plugins' ) }</span>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </button>
</span><span class="cx" style="display: block; padding: 0 10px">                        </form>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
+
+export default localize( SearchForm );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheaderindexjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.js  2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,14 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { connect } from 'react-redux';
-import { withRouter } from 'react-router';
-
-/**
- * Internal dependencies.
- */
-import SiteHeader from './site-header';
-
-const mapStateToProps = ( state, ownProps ) => ( {
-       isHome: ownProps.router.isActive( '/', true ),
-       searchTerm: ownProps.params.searchTerm || ''
-} );
-
-export default withRouter( connect( mapStateToProps )( SiteHeader ) );
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheaderindexjsxfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadersiteheaderjsx"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.jsx (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-header.jsx)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.jsx                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,42 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { withRouter } from 'react-router';
+
+/**
+ * Internal dependencies.
+ */
+import SearchForm from 'components/search-form';
+import SiteDescription from './site-description';
+import SiteTitle from './site-title';
+import MainNavigation from './main-navigation';
+
+export const SiteHeader = ( { router } ) => {
+       const classes = [ 'site-header' ];
+       const isHome = router.isActive( '/', true );
+
+       if ( isHome ) {
+               classes.push( 'home' );
+       }
+
+       return (
+               <header id="masthead" className={ classes.join( ' ' ) } role="banner">
+                       <div className="site-branding">
+                               <SiteTitle />
+                               <SiteDescription />
+                               { isHome ? <SearchForm /> : <MainNavigation /> }
+                       </div>
+               </header>
+       );
+};
+
+SiteHeader.propTypes = {
+       router: PropTypes.object,
+};
+
+SiteHeader.defaultProps = {
+       router: {},
+};
+
+export default withRouter( SiteHeader );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadermainnavigationindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,45 +1,59 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import MenuItem from './menu-item';
</span><span class="cx" style="display: block; padding: 0 10px"> import SearchForm from 'components/search-form';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'MainNavigation',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const MainNavigation = ( { menuItems, translate } ) => (
+       <nav id="site-navigation" className="main-navigation" role="navigation">
+               <button
+                       className="menu-toggle dashicons dashicons-arrow-down-alt2"
+                       aria-controls="primary-menu"
+                       aria-expanded="false"
+                       aria-label={ translate( 'Primary Menu' ) }
+               />
+               <div id="primary-menu" className="menu">
+                       <ul>
+                               { menuItems.map( ( menuItem, key ) => <MenuItem key={ key } item={ menuItem } /> ) }
+                               <li><SearchForm /></li>
+                       </ul>
+               </div>
+       </nav>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        getDefaultProps() {
-               return {
-                       menuItems: [
-                               {
-                                       path: 'browse/favorites/',
-                                       label: 'My Favorites'
-                               },
-                               {
-                                       path: 'browse/beta/',
-                                       label: 'Beta Testing'
-                               },
-                               {
-                                       path: 'developers/',
-                                       label: 'Developers'
-                               }
-                       ]
-               }
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+MainNavigation.propTypes = {
+       menuItems: PropTypes.arrayOf( PropTypes.object ),
+       translate: PropTypes.func,
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               var menuItems = this.props.menuItems.map( ( menuItem, key ) => <MenuItem key={ key } item={ menuItem } /> );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+MainNavigation.defaultProps = {
+       menuItems: [],
+       translate: identity,
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <nav id="site-navigation" className="main-navigation" role="navigation">
-                               <button className="menu-toggle dashicons dashicons-arrow-down-alt2" aria-controls="primary-menu" aria-expanded="false" aria-label="Primary Menu"></button>
-                               <div id="primary-menu" className="menu">
-                                       <ul>
-                                               { menuItems }
-                                               <li>
-                                                       <SearchForm searchTerm={ this.props.searchTerm } />
-                                               </li>
-                                       </ul>
-                               </div>
-                       </nav>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default localize( connect(
+       ( state, { translate } ) => ( {
+               menuItems: [
+                       {
+                               path: 'browse/favorites/',
+                               label: translate( 'My Favorites' ),
+                       },
+                       {
+                               path: 'browse/beta/',
+                               label: translate( 'Beta Testing' ),
+                       },
+                       {
+                               path: 'developers/',
+                               label: translate( 'Developers' ),
+                       },
+               ],
+       } ),
+)( MainNavigation ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadermainnavigationmenuitemindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/menu-item/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/menu-item/index.jsx       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/main-navigation/menu-item/index.jsx 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,14 +1,20 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { Link } from 'react-router';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'MenuItem',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const MenuItem = ( { item } ) => (
+       <li className="page_item">
+               <Link to={ item.path } activeClassName="active">{ item.label }</Link>
+       </li>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <li className="page_item">
-                               <Link to={ this.props.item.path } activeClassName="active">{ this.props.item.label }</Link>
-                       </li>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+MenuItem.propTypes = {
+       params: PropTypes.shape( {
+               label: PropTypes.string,
+               path: PropTypes.string,
+       } ),
+};
+
+export default MenuItem;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadersitedescriptionindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-description/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-description/index.jsx        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-description/index.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,14 +1,38 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-import { IndexLink } from 'react-router';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
+import { withRouter } from 'react-router';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'SiteDescription',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Boolean}  router    Router object.
+ * @param {Function} translate i18n translation function.
+ * @return {*}                 Component or null.
+ * @constructor
+ */
+export const SiteDescription = ( { router, translate } ) => {
+       if ( router.isActive( '/', true ) ) {
+               return (
+                       <p className="site-description">
+                               { translate( 'Extend your WordPress experience with 40,000 plugins.' ) }
+                       </p>
+               );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               if ( this.props.isHome ) {
-                       return <p className="site-description">Extend your WordPress experience with 40,000 plugins.</p>;
-               } else {
-                       return <span />;
-               }
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return null;
+};
+
+SiteDescription.propTypes = {
+       router: PropTypes.object,
+       translate: PropTypes.func,
+};
+
+SiteDescription.defaultProps = {
+       router: {},
+       translate: identity,
+};
+
+export default withRouter( localize( SiteDescription ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadersiteheaderjsx"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-header.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-header.jsx   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-header.jsx     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,25 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-
-import SearchForm from 'components/search-form';
-import SiteDescription from './site-description';
-import SiteTitle from './site-title';
-import MainNavigation from './main-navigation';
-
-export default React.createClass( {
-       displayName: 'SiteHeader',
-
-       render() {
-               const classes = ['site-header'];
-               classes.push( this.props.isHome ? 'home' : '' );
-
-               return (
-                       <header id="masthead" className={ classes.join( ' ' ) } role="banner">
-                               <div className="site-branding">
-                                       <SiteTitle isHome={ this.props.isHome } />
-                                       <SiteDescription isHome={ this.props.isHome } />
-                                       { this.props.isHome ? <SearchForm searchTerm={ this.props.searchTerm } /> : <MainNavigation searchTerm={ this.props.searchTerm } /> }
-                               </div>
-                       </header>
-               )
-       }
-} );
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssiteheadersitetitleindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-title/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-title/index.jsx      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-header/site-title/index.jsx        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,14 +1,26 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { identity } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { IndexLink } from 'react-router';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { localize } from 'i18n-calypso';
+import { withRouter } from 'react-router';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'SiteTitle',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const SiteTitle = ( { router, translate } ) => (
+       router.isActive( '/', true )
+               ? <h1 className="site-title"><IndexLink to="/" rel="home">{ translate( 'Plugins' ) }</IndexLink></h1>
+               : <p className="site-title"><IndexLink to="/" rel="home">{ translate( 'Plugins' ) }</IndexLink></p>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               if ( this.props.isHome ) {
-                       return <h1 className="site-title"><IndexLink to="/" rel="home">Plugins</IndexLink></h1>;
-               } else {
-                       return <p className="site-title"><IndexLink to="/" rel="home">Plugins</IndexLink></p>;
-               }
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+SiteTitle.propTypes = {
+       router: PropTypes.object,
+       translate: PropTypes.func,
+};
+
+SiteTitle.defaultProps = {
+       router: {},
+       translate: identity,
+};
+
+export default withRouter( localize( SiteTitle ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentssitemainindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-main/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-main/index.jsx   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/site-main/index.jsx     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,19 +1,28 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'SiteMain',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const SiteMain = ( { children, params } ) => {
+       const classNames = [ 'site-main' ];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               let classNames = [ 'site-main' ];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( params.slug ) {
+               classNames.push( 'single' );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( this.props.params.slug ) {
-                       classNames.push( 'single' );
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return (
+               <main id="main" className={ classNames.join( ' ' ) } role="main">
+                       { children }
+               </main>
+       );
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <main id="main" className={ classNames.join( ' ' ) } role="main">
-                               { this.props.children }
-                       </main>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+SiteMain.propTypes = {
+       params: PropTypes.object,
+};
+
+SiteMain.defaultProps = {
+       params: {},
+};
+
+export default SiteMain;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareaindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,19 +1,29 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { withRouter } from 'react-router';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'WidgetArea',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const WidgetArea = ( { children, router } ) => {
+       const classNames = [ 'widget-area' ];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               let classNames = [ 'widget-area' ];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( router.isActive( '/', true ) ) {
+               classNames.push( 'home' );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( this.props.router.isActive( '/', true ) ) {
-                       classNames.push( 'home' );
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return (
+               <aside id="secondary" className={ classNames.join( ' ' ) } role="complementary">
+                       { children }
+               </aside>
+       );
+};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return (
-                       <aside id="secondary" className={ classNames.join( ' ' ) } role="complementary">
-                               { this.props.children }
-                       </aside>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+WidgetArea.propTypes = {
+       router: PropTypes.object,
+};
+
+WidgetArea.defaultProps = {
+       router: {},
+};
+
+export default withRouter( WidgetArea );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetsdonatejsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/donate.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/donate.jsx        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/donate.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,23 +1,54 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'DonateWidget',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               if ( ! this.props.plugin.donate_link ) {
-                       return <div />;
-               }
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Donate Widget component.
+ *
+ * @param {Object}   plugin    Plugin object.
+ * @param {Function} translate Translation function.
+ * @return {*}                 Component or null.
+ * @constructor
+ */
+export const DonateWidget = ( { plugin, translate } ) => {
+       if ( plugin.donate_link ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div className="widget plugin-donate">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <h4 className="widget-title">Donate</h4>
-                               <p className="aside">Would you like to support the advancement of this plugin?</p>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <h4 className="widget-title">{ translate( 'Donate' ) }</h4>
+                               <p className="aside">{ translate( 'Would you like to support the advancement of this plugin?' ) }</p>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <p>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <a className="button button-secondary" href={ this.props.plugin.donate_link } rel="nofollow">
-                                               Donate to this plugin
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <a className="button button-secondary" href={ plugin.donate_link } rel="nofollow">
+                                               { translate( 'Donate to this plugin' ) }
</ins><span class="cx" style="display: block; padding: 0 10px">                                         </a>
</span><span class="cx" style="display: block; padding: 0 10px">                                </p>
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return null;
+};
+
+DonateWidget.propTypes = {
+       plugin: PropTypes.object,
+       translate: PropTypes.func,
+};
+
+DonateWidget.defaultProps = {
+       plugin: {},
+       translate: identity,
+};
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( localize( DonateWidget ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetsmetaindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/meta/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/meta/index.jsx    2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/meta/index.jsx      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,21 +1,84 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { Link } from 'react-router';
+import { localize } from 'i18n-calypso';
+import { identity } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'MetaWidget',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class MetaWidget extends Component {
+       static propTypes = {
+               moment: PropTypes.func,
+               numberFormat: PropTypes.func,
+               plugin: PropTypes.object,
+               translate: PropTypes.func,
+       };
+
+       static defaultProps = {
+               moment: identity,
+               numberFormat: identity,
+               plugin: {},
+               translate: identity,
+       };
+
+       /**
+        * Returns a string representing the number of active installs for a plugin.
+        *
+        * @return {String} Active installs.
+        */
+       activeInstalls() {
+               const { numberFormat, translate, plugin } = this.props;
+               let text;
+
+               if ( plugin.meta.active_installs <= 10 ) {
+                       text = translate( 'Less than 10' );
+               } else if ( plugin.meta.active_installs >= 1000000 ) {
+                       text = translate( '1+ million' );
+               } else {
+                       text = numberFormat( plugin.meta.active_installs ) + '+';
+               }
+
+               return text;
+       }
+
+       /**
+        * Returns markup to display tags, if there are any.
+        *
+        * @return {XML} Tags markup.
+        */
</ins><span class="cx" style="display: block; padding: 0 10px">         renderTags() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( this.props.plugin.tags.length ) {
-                       return ( <li>Categories: <div className="tags">{ this.props.plugin.tags.map( tag =>
-                               <a key={ tag } href={ `https://wordpress.org/plugins-wp/category/${ tag }/` } rel="tag">{ tag }</a>
-                       ) }</div></li> );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         const { plugin_tags: tags } = this.props.plugin;
+
+               if ( tags && tags.length ) {
+                       const tagsList = (
+                               <div className="tags">
+                                       { tags.map( ( tag ) => <Link key={ tag } to={ `tags/${ tag }/` } rel="tag">{ tag }</Link> ) }
+                               </div>
+                       );
+
+                       return (
+                               <li>
+                                       { this.props.translate( 'Tag: {{tagsList/}}', 'Tags: {{tagsList/}}', {
+                                               count: tags.length,
+                                               components: { tagsList },
+                                       } ) }
+                               </li>
+                       );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                const { moment, plugin, translate } = this.props;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div className="widget plugin-meta">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <h3 className="screen-reader-text">Meta</h3>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <h3 className="screen-reader-text">{ translate( 'Meta' ) }</h3>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <link itemProp="applicationCategory" href="http://schema.org/OtherApplication" />
</span><span class="cx" style="display: block; padding: 0 10px">                                <span itemProp="offers" itemScope itemType="http://schema.org/Offer">
</span><span class="cx" style="display: block; padding: 0 10px">                                        <meta itemProp="price" content="0.00" />
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -26,13 +89,39 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                </span>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                <ul>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <li>Version: <strong>{ this.props.plugin.version }</strong></li>
-                                       <li>Last updated: <strong><span itemProp="dateModified" content={ this.props.plugin.last_updated }>{ this.props.plugin.last_updated }</span> ago</strong></li>
-                                       <li>Active installs: <strong>{ this.props.plugin.active_installs }</strong></li>
-                                       <li>Tested up to: <strong>{ this.props.plugin.tested }</strong></li>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <li>
+                                               { translate( 'Version: {{strong}}%(version)s{{/strong}}', {
+                                                       args: { version: plugin.meta.version },
+                                                       components: { strong: <strong /> },
+                                               } ) }
+                                       </li>
+                                       <li>
+                                               { translate( 'Last updated: {{strong}}%(updated)s{{/strong}}', {
+                                                       args: { updated: moment( plugin.modified_gmt ).fromNow() },
+                                                       components: { strong: <strong itemProp="dateModified" content={ plugin.modified_gmt } /> },
+                                               } ) }
+                                       </li>
+                                       <li>
+                                               { translate( 'Active installs: {{strong}}%(installs)s{{/strong}}', {
+                                                       args: { installs: this.activeInstalls() },
+                                                       components: { strong: <strong /> },
+                                               } ) }
+                                       </li>
+                                       <li>
+                                               { translate( 'Tested up to: {{strong}}%(tested)s{{/strong}}', {
+                                                       args: { tested: plugin.meta.tested },
+                                                       components: { strong: <strong /> },
+                                               } ) }
+                                       </li>
</ins><span class="cx" style="display: block; padding: 0 10px">                                         { this.renderTags() }
</span><span class="cx" style="display: block; padding: 0 10px">                                </ul>
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( localize( MetaWidget ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetsratingsindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/ratings/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/ratings/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/ratings/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,30 +1,61 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
-import rangeRight from 'lodash/rangeRight';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
+import { rangeRight } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> import PluginRatings from 'components/plugin-ratings';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'RatingsWidget',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class RatingsWidget extends Component {
+       static propTypes = {
+               plugin: PropTypes.object,
+               translate: PropTypes.func,
+       };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        static defaultProps = {
+               plugin: {},
+               translate: identity,
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         ratingsBreakdown() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                const { plugin, translate } = this.props;
+
+               if ( ! plugin.ratings.length ) {
+                       return (
+                               <div className="rating"><p>{ translate( 'This plugin has not been rated yet.' ) }</p></div>
+                       );
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <a className="reviews-link" href={ `https://wordpress.org/support/plugin/${ this.props.plugin.slug }/reviews/` }>See all</a>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <a className="reviews-link" href={ `https://wordpress.org/support/plugin/${ plugin.slug }/reviews/` }>
+                                       { translate( 'See all' ) }
+                               </a>
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <PluginRatings rating={ this.props.plugin.rating } ratingCount={ this.props.plugin.num_ratings } />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <PluginRatings rating={ plugin.meta.rating } ratingCount={ plugin.ratings.length } />
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                <ul className="ratings-list">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        { rangeRight( 1, 6 ).map( stars => {
-                                               const barWidth = this.props.plugin.num_ratings ? 100 * this.props.plugin.ratings[ stars ] / this.props.plugin.num_ratings : 0;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 { rangeRight( 1, 6 ).map( ( stars ) => {
+                                               const barWidth = plugin.ratings.length ? 100 * plugin.ratings[ stars ] / plugin.ratings.length : 0;
+                                               const link = `https://wordpress.org/support/plugin/${ plugin.slug }/reviews/?filter=${ stars }`;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                return (
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        <li className="counter-container">
-                                                               <a href={ `https://wordpress.org/support/plugin/${ this.props.plugin.slug }/reviews/?filter=${ stars }` }>
-                                                                       <span className="counter-label">{ stars > 1 ? `${ stars } stars` : `${ stars } star` }</span>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 <li key={ stars } className="counter-container">
+                                                               <a href={ link }>
+                                                                       <span className="counter-label">
+                                                                               { translate( '1 star', '%(stars)s stars', { count: stars, args: { stars } } ) }
+                                                                       </span>
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         <span className="counter-back">
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                <span className="counter-bar" style={ { width: `${ barWidth }%` } } />
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        </span>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                        <span className="counter-count">{ this.props.plugin.ratings[ stars ] }</span>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                 <span className="counter-count">{ plugin.ratings[ stars ] }</span>
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 </a>
</span><span class="cx" style="display: block; padding: 0 10px">                                                        </li>
</span><span class="cx" style="display: block; padding: 0 10px">                                                );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32,21 +63,33 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                </ul>
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                const { plugin, translate } = this.props;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div className="widget plugin-ratings">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <h4 className="widget-title">Ratings</h4>
-                               <meta itemProp="ratingCount" content={ this.props.plugin.num_ratings } />
-                               { this.props.plugin.num_ratings ?
-                                       this.ratingsBreakdown() :
-                                       <div className="rating"><p>This plugin has not been rated yet.</p></div>
-                               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <h4 className="widget-title">{ translate( 'Ratings' ) }</h4>
+                               <meta itemProp="ratingCount" content={ plugin.ratings.length } />
+
+                               { this.ratingsBreakdown() }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <div className="user-rating">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <a className="button button-secondary" href={ `https://wordpress.org/support/plugin/${ this.props.plugin.slug }/reviews/#new-post` }>Add my review</a>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <a
+                                               className="button button-secondary"
+                                               href={ `https://wordpress.org/support/plugin/${ plugin.slug }/reviews/#new-post` }
+                                       >
+                                               { translate( 'Add my review' ) }
+                                       </a>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </div>
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( localize( RatingsWidget ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetssupportindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/support/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/support/index.jsx 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/support/index.jsx   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,63 +1,98 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { identity } from 'lodash';
+import { localize } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'SupportWidget',
-       resolutions: false,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPlugin } from 'state/selectors';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export class SupportWidget extends Component {
+       resolutions: false;
+
+       static propTypes = {
+               plugin: PropTypes.object,
+               translate: PropTypes.func,
+       };
+
+       static defaultProps = {
+               plugin: {},
+               translate: identity,
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         componentWillMount() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.resolutions = ( this.props.plugin.support_threads || 'buddypress' === this.props.plugin.slug || 'bbpress' === this.props.plugin.slug );
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         const { meta, slug } = this.props.plugin;
+               this.resolutions = ( meta.support_threads || 'buddypress' === slug || 'bbpress' === slug );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        componentDidUpdate() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.resolutions = this.resolutions || this.props.plugin.support_threads;
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.resolutions = this.resolutions || this.props.plugin.meta.support_threads;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        supportBar() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                const { support_threads: threads, support_threads_resolved: resolved } = this.props.plugin;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         const { support_threads: threads, support_threads_resolved: resolved } = this.props.plugin.meta;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if ( ! this.resolutions ) {
+                       return (
+                               <p>{ this.props.translate( 'Got something to say? Need help?' ) }</p>
+                       );
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <p className="aside">Issues resolved in last two months:</p>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <p className="aside">{ this.props.translate( 'Issues resolved in last two months:' ) }</p>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <p className="counter-container">
</span><span class="cx" style="display: block; padding: 0 10px">                                        <span className="counter-back">
</span><span class="cx" style="display: block; padding: 0 10px">                                                <span className="counter-bar" style={ { width: `${ 100 * resolved / threads }%` } } />
</span><span class="cx" style="display: block; padding: 0 10px">                                        </span>
</span><span class="cx" style="display: block; padding: 0 10px">                                        <span className="counter-count">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                { resolved } out of { threads }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         { this.props.translate( '%(resolved)s out of %(threads)s', { args: { resolved, threads } } ) }
</ins><span class="cx" style="display: block; padding: 0 10px">                                         </span>
</span><span class="cx" style="display: block; padding: 0 10px">                                </p>
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
-       },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        getSupportUrl() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                let supportURL = `https://wordpress.org/support/plugin/${ this.props.plugin.slug }/`;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         const { slug } = this.props.plugin;
+               let supportURL = `https://wordpress.org/support/plugin/${ slug }/`;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /*
</span><span class="cx" style="display: block; padding: 0 10px">                 * bbPress and BuddyPress get special treatment here.
</span><span class="cx" style="display: block; padding: 0 10px">                 * In the future we could open this up to all plugins that define a custom support URL.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( 'buddypress' === this.props.plugin.slug ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( 'buddypress' === slug ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         supportURL = 'https://buddypress.org/support/';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                } else if ( 'bbpress' === this.props.plugin.slug ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         } else if ( 'bbpress' === slug ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         supportURL = 'https://bbpress.org/forums/';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return supportURL;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        render() {
</span><span class="cx" style="display: block; padding: 0 10px">                return (
</span><span class="cx" style="display: block; padding: 0 10px">                        <div className="widget plugin-support">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <h4 className="widget-title">Support</h4>
-                               { this.resolutions ?
-                                       this.supportBar() :
-                                       <p>Got something to say? Need help?</p>
-                               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <h4 className="widget-title">{ this.props.translate( 'Support' ) }</h4>
+
+                               { this.supportBar() }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <p>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        <a className="button" href={ this.getSupportUrl() }>View support forum</a>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 <a className="button" href={ this.getSupportUrl() }>
+                                               { this.props.translate( 'View support forum' ) }
+                                       </a>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </p>
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
+
+export default connect(
+       ( state ) => ( {
+               plugin: getPlugin( state ),
+       } ),
+)( localize( SupportWidget ) );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientcomponentswidgetareawidgetstextjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/text.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/text.jsx  2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/widget-area/widgets/text.jsx    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,14 +1,21 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import React from 'react';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import React, { PropTypes } from 'react';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default React.createClass( {
-       displayName: 'TextWidget',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const TextWidget = ( { widget } ) => (
+       <div className="widget widget_text">
+               <h3 className="widget-title">{ widget.title }</h3>
+               <div className="textwidget">{ widget.text }</div>
+       </div>
+);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        render() {
-               return (
-                       <div className="widget widget_text">
-                               <h3 className="widget-title">{ this.props.widget.title }</h3>
-                               <div className="textwidget">{ this.props.widget.text }</div>
-                       </div>
-               )
-       }
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+TextWidget.propTypes = {
+       widget: PropTypes.object,
+};
+
+TextWidget.defaultProps = {
+       widget: {},
+};
+
+export default TextWidget;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientindexjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/index.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/index.jsx        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/index.jsx  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,24 +1,22 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import React from 'react';
</span><span class="cx" style="display: block; padding: 0 10px"> import { render } from 'react-dom';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { Provider } from 'react-redux';
+import { setLocale } from 'i18n-calypso';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import Screenshots from 'components/plugin/sections/screenshots';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import Router from 'modules/router';
+import getStore from 'modules/store';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// Temporary hack to use the srceenshot viewer without the full React client
-var elements = document.querySelectorAll( '#screenshots figure' );
-var images = [];
-for ( var i=0; i < elements.length; i++ ) {
-       var caption = elements[i].querySelector('figcaption');
-       var item = { 
-               src: elements[i].querySelector('img.screenshot').src,
-               caption: caption ? caption.textContent : '',
-       }
-       images.push( item );
-}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+//setLocale( localeData );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-if ( images.length > 0 ) {
-       render(
-               <Screenshots screenshots={images}>
-               </Screenshots>,
-               document.getElementById( 'screenshots' )
-       );
-}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+render(
+       <Provider store={ getStore() }>
+               { Router }
+       </Provider>,
+       document.getElementById( 'content' )
+);
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesapijs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/api.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/api.js   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/api.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,82 +1,12 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/**
- * The API module incorporates code from Feelingrestful WordPress React JS theme, Copyright Human Made
- * Feelingrestful WordPress React JS theme is distributed under the terms of the GNU GPL v3
- */
-/* global app_data:object */
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import WPAPI from 'wpapi';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import $ajax from 'jquery/src/ajax';
-import $xhr from 'jquery/src/ajax/xhr';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import routes from 'default-routes.json';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const $ = Object.assign( {}, $ajax,$xhr );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/** @type {Object} pluginDirectory Config variable */
+const pluginDirectory = window.pluginDirectory || {};
+pluginDirectory.routes = routes;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const API = {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+const api = new WPAPI( pluginDirectory );
+api.sections = api.registerRoute( 'wp/v2', '/plugin_section/(?P<id>)' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        api_url: app_data.api_url,
-
-       lastRequest: null,
-
-       get: function( url, data, callback ) {
-               return this.request( 'GET', url, data, callback );
-       },
-
-       post: function( url, data, callback ) {
-               return this.request( 'POST', url, data, callback );
-       },
-
-       request: function( method, url, data, callback ) {
-
-               this.lastRequest = {
-                       method: method,
-                       url: url,
-                       args: data,
-                       isLoading: true,
-                       data: null
-               };
-
-               var xhr = $.ajax( this.api_url + url, {
-                       data: data,
-                       global: false,
-
-                       success: ( data ) => {
-                               this.lastRequest.isLoading = false;
-                               this.lastRequest.data = data;
-                               if ( ! callback ) {
-                                       return;
-                               }
-                               callback( data, null, xhr.getAllResponseHeaders() );
-                       },
-                       method: method,
-
-                       beforeSend: ( jqxhr ) => {
-                               jqxhr.setRequestHeader( 'X-WP-Nonce', app_data.nonce );
-                       }
-               } );
-
-               xhr.fail( err => {
-                       this.lastRequest.isLoading = false;
-
-                       if ( 0 === xhr.status ) {
-                               if ( 'abort' === xhr.statusText ) {
-                                       // Has been aborted
-                                       return;
-                               } else {
-                                       // Offline mode
-                               }
-                       }
-
-                       if ( err.responseJSON && err.responseJSON[0] ) {
-                               this.lastRequest.data = err.responseJSON[0];
-
-                               if ( callback ) {
-                                       callback( null, err.responseJSON[0] );
-                               }
-                       } else {
-                               window.console.error( err.statusText );
-                       }
-               } );
-
-               return xhr;
-       }
-};
-
-export default API;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export default api;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmoduleslocalstoragejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/local-storage.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/local-storage.js 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/local-storage.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18,5 +18,5 @@
</span><span class="cx" style="display: block; padding: 0 10px">        try {
</span><span class="cx" style="display: block; padding: 0 10px">                const serializedState = JSON.stringify( state );
</span><span class="cx" style="display: block; padding: 0 10px">                localStorage.setItem( storageKey, serializedState );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        } catch( error ) {}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ } catch ( error ) {}
</ins><span class="cx" style="display: block; padding: 0 10px"> };
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesmiddlewaresbodyclassjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/body-class.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/body-class.js                                (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/body-class.js  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,67 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPath, getSearchResults } from 'state/selectors';
+import { SEARCH_RECEIVE } from 'state/action-types';
+
+export const bodyClass = ( { getState } ) => ( next ) => ( action ) => {
+       const prevState = getState();
+       const nextAction = next( action );
+       const nextState = getState();
+       const nextPath = getPath( nextState );
+
+       if (
+               getPath( prevState ) === nextPath &&
+               SEARCH_RECEIVE !== action.type
+       ) {
+               return nextAction;
+       }
+
+       /**
+        * [0] => search, taxonomy, single slug
+        * [1] => term
+        * [2] => username (in /browse/favorites/)
+        */
+       const parts = nextPath.split( '/' );
+       const classes = [ 'js' ];
+
+       if ( pluginDirectory.userId > 0 ) {
+               classes.push( 'logged-in admin-bar' );
+       }
+
+       switch ( parts[ 0 ] ) {
+               case '':
+                       classes.push( 'home' );
+                       break;
+
+               case 'search':
+                       classes.push( 'search' );
+
+                       if ( ! getSearchResults( nextState ).length ) {
+                               classes.push( 'search-no-results' );
+                       }
+                       break;
+
+               case 'author':
+               case 'browse':
+               case 'category':
+               case 'tag':
+                       classes.push( 'archive' );
+                       classes.push( 'term-' + parts[ 1 ] );
+                       break;
+
+               case 'developers':
+                       classes.push( 'single single-page' );
+                       break;
+
+               default:
+                       classes.push( 'single single-plugin' );
+                       break;
+       }
+
+       window.document.body.className = classes.join( ' ' );
+
+       return nextAction;
+};
+
+export default bodyClass;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesmiddlewaresindexjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/index.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/index.js                             (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/middlewares/index.js       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export { bodyClass } from './body-class';
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesrouterjsx"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/router.jsx</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/router.jsx       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/router.jsx 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,9 +1,13 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/* global add_data:object */
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import React from 'react';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { connect } from 'react-redux';
-import { Router, Route, IndexRoute, useRouterHistory } from 'react-router';
-import createBrowserHistory from 'history/lib/createBrowserHistory';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { Route, IndexRoute } from 'react-router';
+import { ReduxRouter } from 'redux-router';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import ArchiveBrowse from 'components/archive/browse';
</span><span class="cx" style="display: block; padding: 0 10px"> import FrontPage from 'components/front-page';
</span><span class="cx" style="display: block; padding: 0 10px"> import NotFound from 'components/404';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14,23 +18,25 @@
</span><span class="cx" style="display: block; padding: 0 10px"> import SiteHeader from 'components/site-header';
</span><span class="cx" style="display: block; padding: 0 10px"> import SiteMain from 'components/site-main';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-const history = useRouterHistory( createBrowserHistory )( {
-       /** @type {object} app_data Description */
-       basename: app_data.base
-} );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+const onUpdate = () => window.scrollTo( 0, 0 );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-export default (
-       <Router history={ history } onUpdate={ () => window.scrollTo( 0, 0 ) }>
-               <Route name="root" component={ PluginDirectory }>
-                       <Route path="/" components={ { header: SiteHeader, main: SiteMain } }>
-                               <IndexRoute component={ FrontPage } />
-                               <Route path="browse/favorites/:username" component={ ArchiveBrowse } />
-                               <Route path="browse/:type" component={ ArchiveBrowse } />
-                               <Route path="developers" component={ Page } />
-                               <Route path="search/:searchTerm" component={ Search } />
-                               <Route path=":slug" component={ Plugin } />
-                               <Route path="*" component={ NotFound } />
-                       </Route>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const routes = (
+       <Route name="root" component={ PluginDirectory }>
+               <Route path="/" components={ { header: SiteHeader, main: SiteMain } }>
+                       <IndexRoute component={ FrontPage } />
+                       <Route path="browse/favorites/:username" component={ ArchiveBrowse } />
+                       <Route path="browse/:type/page/:page" component={ ArchiveBrowse } />
+                       <Route path="browse/:type" component={ ArchiveBrowse } />
+                       <Route path="developers" component={ Page } />
+                       <Route path="search/:search" component={ Search } />
+                       <Route path=":slug" component={ Plugin } />
+                       <Route path="*" component={ NotFound } />
</ins><span class="cx" style="display: block; padding: 0 10px">                 </Route>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        </Router>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ </Route>
</ins><span class="cx" style="display: block; padding: 0 10px"> );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+export default (
+       <ReduxRouter onUpdate={ onUpdate }>
+               { routes }
+       </ReduxRouter>
+);
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientmodulesstorejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/store.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/store.js 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/modules/store.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,20 +1,46 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
</ins><span class="cx" style="display: block; padding: 0 10px"> import { compose, createStore, applyMiddleware } from 'redux';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import createBrowserHistory from 'history/lib/createBrowserHistory';
+import { reduxReactRouter } from 'redux-router';
</ins><span class="cx" style="display: block; padding: 0 10px"> import thunk from 'redux-thunk';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import throttle from 'lodash/throttle';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import { throttle } from 'lodash';
+import { useRouterHistory } from 'react-router';
+import { values } from 'lodash';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import reducers from 'reducers';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { fetchUser } from 'state/user/actions';
</ins><span class="cx" style="display: block; padding: 0 10px"> import { loadState, saveState } from 'modules/local-storage';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import * as middlewares from './middlewares';
+import reducers from 'state/reducers';
+import { routes } from './router';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+const history = useRouterHistory( createBrowserHistory )( {
+       /** @type {object} pluginDirectory Description */
+       basename: pluginDirectory.base,
+} );
+
</ins><span class="cx" style="display: block; padding: 0 10px"> const getStore = () => {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        const store = compose(
-               applyMiddleware( thunk )
-       )( createStore )( reducers, loadState() );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ const composeDev = ( 'production' !== process.env.NODE_ENV && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ );
+       const composeEnhancers = composeDev || compose;
+       const store = createStore( reducers, loadState(), composeEnhancers(
+               reduxReactRouter( { routes, history } ),
+               applyMiddleware( thunk, ...values( middlewares ) ),
+       ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Save state to local storage when the store gets updated.
</span><span class="cx" style="display: block; padding: 0 10px">        store.subscribe( throttle( () => {
</span><span class="cx" style="display: block; padding: 0 10px">                saveState( store.getState() );
</span><span class="cx" style="display: block; padding: 0 10px">        }, 1000 ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        // Set up user object.
+       if ( '0' !== pluginDirectory.userId ) {
+               store.dispatch( fetchUser( pluginDirectory.userId ) );
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         return store;
</span><span class="cx" style="display: block; padding: 0 10px"> };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateactiontypesjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientactionsactiontypesjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/action-types.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/actions/action-types.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/action-types.js                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/action-types.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,36 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const SECTION_RECEIVE = 'SECTION_RECEIVE';
+export const SECTION_REQUEST = 'SECTION_REQUEST';
+export const SECTION_REQUEST_SUCCESS = 'SECTION_REQUEST_SUCCESS';
+export const SECTION_REQUEST_FAILURE = 'SECTION_REQUEST_FAILURE';
+export const SECTIONS_RECEIVE = 'SECTIONS_RECEIVE';
+export const SECTIONS_REQUEST = 'SECTIONS_REQUEST';
+export const SECTIONS_REQUEST_SUCCESS = 'SECTIONS_REQUEST_SUCCESS';
+export const SECTIONS_REQUEST_FAILURE = 'SECTIONS_REQUEST_FAILURE';
+
+export const PAGE_RECEIVE = 'PAGE_RECEIVE';
+export const PAGE_REQUEST = 'PAGE_REQUEST';
+export const PAGE_REQUEST_SUCCESS = 'PAGE_REQUEST_SUCCESS';
+export const PAGE_REQUEST_FAILURE = 'PAGE_REQUEST_FAILURE';
+
+export const PLUGIN_RECEIVE = 'PLUGIN_RECEIVE';
+export const PLUGIN_REQUEST = 'PLUGIN_REQUEST';
+export const PLUGIN_REQUEST_SUCCESS = 'PLUGIN_REQUEST_SUCCESS';
+export const PLUGIN_REQUEST_FAILURE = 'PLUGIN_REQUEST_FAILURE';
+export const PLUGINS_RECEIVE = 'PLUGINS_RECEIVE';
+export const PLUGINS_REQUEST = 'PLUGINS_REQUEST';
+export const PLUGINS_REQUEST_SUCCESS = 'PLUGINS_REQUEST_SUCCESS';
+export const PLUGINS_REQUEST_FAILURE = 'PLUGINS_REQUEST_FAILURE';
+
+export const SEARCH_RECEIVE = 'SEARCH_RECEIVE';
+export const SEARCH_REQUEST = 'SEARCH_REQUEST';
+export const SEARCH_REQUEST_SUCCESS = 'SEARCH_REQUEST_SUCCESS';
+export const SEARCH_REQUEST_FAILURE = 'SEARCH_REQUEST_FAILURE';
+
+export const USER_RECEIVE = 'USER_RECEIVE';
+export const USER_REQUEST = 'USER_REQUEST';
+export const USER_REQUEST_SUCCESS = 'USER_REQUEST_SUCCESS';
+export const USER_REQUEST_FAILURE = 'USER_REQUEST_FAILURE';
+
+export const GET_FAVORITES     = 'GET_FAVORITES';
+export const FAVORITE_PLUGIN   = 'FAVORITE_PLUGIN';
+export const UNFAVORITE_PLUGIN = 'UNFAVORITE_PLUGIN';
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowseactionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/actions.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/beta.js
===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/browse/beta.js     2017-03-01 04:32:40 UTC (rev 5023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/beta.js 2017-03-01 18:08:54 UTC (rev 5024)
</ins><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,21 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import union from 'lodash/union';
-
-/**
- * Internal dependencies.
- */
-import { GET_BROWSE } from 'actions/action-types';
-
-const beta = ( state = [], action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case GET_BROWSE:
-                       if ( 'beta' === action.term ) {
-                               state = union( state, action.plugins );
-                       }
-                       break;
-       }
-
-       return state;
-};
-
-export default beta;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsefavoritesjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/favorites.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/browse/favorites.js     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/favorites.js  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,21 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import union from 'lodash/union';
-
-/**
- * Internal dependencies.
- */
-import { GET_BROWSE } from 'actions/action-types';
-
-const favorites = ( state = [], action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case GET_BROWSE:
-                       if ( 'favorites' === action.term ) {
-                               state = union( state, action.plugins );
-                       }
-                       break;
-       }
-
-       return state;
-};
-
-export default favorites;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsefeaturedjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/featured.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/browse/featured.js      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/featured.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,21 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import union from 'lodash/union';
-
-/**
- * Internal dependencies.
- */
-import { GET_BROWSE } from 'actions/action-types';
-
-const featured = ( state = [], action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case GET_BROWSE:
-                       if ( 'featured' === action.term ) {
-                               state = union( state, action.plugins );
-                       }
-                       break;
-       }
-
-       return state;
-};
-
-export default featured;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowseindexjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/index.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/browse/index.js 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/index.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,16 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { combineReducers } from 'redux';
-
-/**
- * Internal dependencies.
- */
-import beta from './beta';
-import favorites from './favorites';
-import featured from './featured';
-import popular from './popular';
-
-export default combineReducers( {
-       beta,
-       favorites,
-       featured,
-       popular
-} );
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsepopularjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/popular.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/browse/popular.js       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/popular.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,21 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import union from 'lodash/union';
-
-/**
- * Internal dependencies.
- */
-import { GET_BROWSE } from 'actions/action-types';
-
-const popular = ( state = [], action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case GET_BROWSE:
-                       if ( 'popular' === action.term ) {
-                               state = union( state, action.plugins );
-                       }
-                       break;
-       }
-
-       return state;
-};
-
-export default popular;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatebrowsereducerjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientreducersbrowseindexjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/reducer.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/browse/index.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/reducer.js                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/browse/reducer.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,65 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { combineReducers } from 'redux';
+import union from 'lodash/union';
+
+/**
+ * Internal dependencies.
+ */
+import { BROWSE_RECEIVE } from 'state/action-types';
+
+const beta = ( state = [], action ) => { // jshint ignore:line
+       switch ( action.type ) {
+               case BROWSE_RECEIVE:
+                       if ( 'beta' === action.term ) {
+                               state = union( state, action.plugins );
+                       }
+                       break;
+       }
+
+       return state;
+};
+
+const favorites = ( state = [], action ) => { // jshint ignore:line
+       switch ( action.type ) {
+               case BROWSE_RECEIVE:
+                       if ( 'favorites' === action.term ) {
+                               state = union( state, action.plugins );
+                       }
+                       break;
+       }
+
+       return state;
+};
+
+const featured = ( state = [], action ) => { // jshint ignore:line
+       switch ( action.type ) {
+               case BROWSE_RECEIVE:
+                       if ( 'featured' === action.term ) {
+                               state = union( state, action.plugins );
+                       }
+                       break;
+       }
+
+       return state;
+};
+
+const popular = ( state = [], action ) => { // jshint ignore:line
+       switch ( action.type ) {
+               case BROWSE_RECEIVE:
+                       if ( 'popular' === action.term ) {
+                               state = union( state, action.plugins );
+                       }
+                       break;
+       }
+
+       return state;
+};
+
+export default combineReducers( {
+       beta,
+       favorites,
+       featured,
+       popular,
+} );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatefavoritesactionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/actions.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/actions.js                               (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/actions.js 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,32 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+import Api from 'modules/api';
+import {
+       FAVORITE_PLUGIN,
+       GET_FAVORITES,
+       UNFAVORITE_PLUGIN,
+} from 'state/action-types';
+
+export const getFavorites = ( plugin ) => ( dispatch ) => {
+       // TODO: Move to WPAPI
+       Api.get( '/plugins/v1/plugin/' + plugin + '/favorite' )
+               .then( () => dispatch( {
+                       type: GET_FAVORITES,
+                       plugin,
+               } ) );
+};
+
+export const favoritePlugin = ( plugin ) => ( dispatch ) => {
+       Api.plugin().id( plugin.id ).update( { favorite: plugin.slug } )
+               .then( () => dispatch( {
+                       type: FAVORITE_PLUGIN,
+                       plugin,
+               } ) );
+};
+
+export const unfavoritePlugin = ( plugin ) => ( dispatch ) => {
+       // TODO: Move to WPAPI
+       Api.get( '/plugins/v1/plugin/' + plugin + '/favorite', { unfavorite: 1 } )
+               .then( () => dispatch( {
+                       type: UNFAVORITE_PLUGIN,
+                       plugin,
+               } ) );
+};
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatefavoritesreducerjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientreducersfavoritesjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/reducer.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/favorites.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/reducer.js                               (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites/reducer.js 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,30 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { uniq, without } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import {
+       FAVORITE_PLUGIN,
+       GET_FAVORITES,
+       UNFAVORITE_PLUGIN,
+} from 'state/action-types';
+
+const favorites = ( state = [], action ) => {
+       switch ( action.type ) {
+               case FAVORITE_PLUGIN:
+               case GET_FAVORITES:
+                       state = uniq( [ ...state, action.plugin ] );
+                       break;
+
+               case UNFAVORITE_PLUGIN:
+                       state = without( state, action.plugin );
+                       break;
+       }
+
+       return state;
+};
+
+export default favorites;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatefavoritesjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/favorites.js    2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/favorites.js 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,26 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import union from 'lodash/union';
-import without from 'lodash/without';
-
-import {
-       FAVORITE_PLUGIN,
-       GET_FAVORITES,
-       UNFAVORITE_PLUGIN
-} from 'actions/action-types';
-
-const favorites = ( state = [], action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case FAVORITE_PLUGIN:
-               case GET_FAVORITES:
-                       state = union( state, state.concat( [ action.plugin ] ) );
-                       break;
-
-               case UNFAVORITE_PLUGIN:
-                       state = without( state, action.plugin );
-                       break;
-       }
-
-       return state;
-};
-
-export default favorites;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateindexjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/index.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/index.js        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/index.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,17 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import { combineReducers } from 'redux';
-import { routerReducer } from 'react-router-redux';
-
-import browse from './browse/index';
-import favorites from './favorites';
-import pages from './pages';
-import plugins from './plugins';
-import search from './search';
-
-export default combineReducers( {
-       browse,
-       favorites,
-       pages,
-       plugins,
-       search,
-       routing: routerReducer
-} );
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepagesactionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/actions.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/actions.js                           (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/actions.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,34 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import Api from 'modules/api';
+import {
+       PAGE_RECEIVE,
+       PAGE_REQUEST,
+       PAGE_REQUEST_SUCCESS,
+       PAGE_REQUEST_FAILURE,
+} from 'state/action-types';
+
+export const fetchPage = ( slug ) => ( dispatch ) => {
+       dispatch( {
+               type: PAGE_REQUEST,
+               slug,
+       } );
+
+       Api.pages().slug( slug )
+               .then( ( pages ) => {
+                       dispatch( {
+                               type: PAGE_REQUEST_SUCCESS,
+                               slug,
+                       } );
+                       dispatch( {
+                               type: PAGE_RECEIVE,
+                               pages,
+                               slug,
+                       } );
+               } )
+               .catch( () => dispatch( {
+                       type: PAGE_REQUEST_FAILURE,
+                       slug,
+               } ) );
+};
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepagesreducerjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientreducerspagesjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/reducer.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/pages.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/reducer.js                           (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages/reducer.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,24 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { find } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import { PAGE_RECEIVE } from 'state/action-types';
+
+const pages = ( state = {}, action ) => {
+       switch ( action.type ) {
+               case PAGE_RECEIVE:
+                       const page = find( action.pages, { slug: action.slug } );
+                       if ( page ) {
+                               state = { ...state, [ page.slug ]: page };
+                       }
+                       break;
+       }
+
+       return state;
+};
+
+export default pages;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepagesjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/pages.js        2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/pages.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,21 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import find from 'lodash/find';
-
-/**
- * Internal dependencies.
- */
-import { GET_PAGE } from 'actions/action-types';
-
-const pages = ( state = [], action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case GET_PAGE:
-                       if ( ! find( state, { id: action.page.id } ) ) {
-                               state = state.concat( [ action.page ] );
-                       }
-                       break;
-       }
-
-       return state;
-};
-
-export default pages;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepluginsactionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/actions.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/actions.js                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/actions.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,33 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import Api from 'modules/api';
+import {
+       PLUGINS_RECEIVE,
+       PLUGINS_REQUEST,
+       PLUGINS_REQUEST_SUCCESS,
+       PLUGINS_REQUEST_FAILURE,
+} from 'state/action-types';
+
+export const fetchPlugin = ( slug ) => ( dispatch ) => {
+       dispatch( {
+               type: PLUGINS_REQUEST,
+               slug,
+       } );
+
+       Api.plugin().param( 'slug', slug )
+               .then( ( plugins ) => {
+                       dispatch( {
+                               type: PLUGINS_REQUEST_SUCCESS,
+                               slug,
+                       } );
+                       dispatch( {
+                               type: PLUGINS_RECEIVE,
+                               plugins,
+                       } );
+               } )
+               .catch( dispatch( {
+                       type: PLUGINS_REQUEST_FAILURE,
+                       slug,
+               } ) );
+};
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepluginsreducerjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientreducerspluginsjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/reducer.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/plugins.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/reducer.js                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins/reducer.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,28 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { keyBy } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import {
+       PLUGIN_RECEIVE,
+       PLUGINS_RECEIVE,
+} from 'state/action-types';
+
+const plugins = ( state = {}, action ) => {
+       switch ( action.type ) {
+               case PLUGIN_RECEIVE:
+                       state = { ...state, [ action.plugin.slug ]: action.plugin };
+                       break;
+
+               case PLUGINS_RECEIVE:
+                       state = { ...state, ...keyBy( action.plugins, 'slug' ) };
+                       break;
+       }
+
+       return state;
+};
+
+export default plugins;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatepluginsjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/plugins.js      2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/plugins.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,19 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-import union from 'lodash/union';
-
-/**
- * Internal dependencies.
- */
-import { GET_PLUGIN } from 'actions/action-types';
-
-const plugins = ( state = [], action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case GET_PLUGIN:
-                       state = union( state, state.concat( [ action.plugin ] ) );
-                       break;
-       }
-
-       return state;
-};
-
-export default plugins;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatereducersjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientreducersindexjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/reducers.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/index.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/reducers.js                                (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/reducers.js  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,27 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { combineReducers } from 'redux';
+import { routerStateReducer } from 'redux-router';
+
+/**
+ * Internal dependencies.
+ */
+import browse from './browse/reducer';
+import favorites from './favorites/reducer';
+import pages from './pages/reducer';
+import plugins from './plugins/reducer';
+import search from './search/reducer';
+import sections from './sections/reducer';
+import user from './user/reducer';
+
+export default combineReducers( {
+       browse,
+       favorites,
+       pages,
+       plugins,
+       search,
+       sections,
+       router: routerStateReducer,
+       user,
+} );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesearchactionsjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientactionsindexjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/actions.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/actions/index.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/actions.js                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/actions.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,34 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import Api from 'modules/api';
+import {
+       SEARCH_RECEIVE,
+       SEARCH_REQUEST,
+       SEARCH_REQUEST_SUCCESS,
+       SEARCH_REQUEST_FAILURE,
+} from 'state/action-types';
+
+export const fetchSearch = ( search ) => ( dispatch ) => {
+       dispatch( {
+               type: SEARCH_REQUEST,
+               search,
+       } );
+
+       Api.plugin()
+               .then( ( plugins ) => {
+                       dispatch( {
+                               type: SEARCH_REQUEST_SUCCESS,
+                               search,
+                       } );
+                       dispatch( {
+                               type: SEARCH_RECEIVE,
+                               plugins,
+                               search,
+                       } );
+               } )
+               .catch( () => dispatch( {
+                       type: SEARCH_REQUEST_FAILURE,
+                       search,
+               } ) );
+};
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesearchreducerjsfromrev5023sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientreducerssearchjs"></a>
<div class="copfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Copied: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/reducer.js (from rev 5023, sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/search.js)</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/reducer.js                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search/reducer.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,19 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+/**
+ * Internal dependencies.
+ */
+import { SEARCH_RECEIVE } from 'state/action-types';
+
+const search = ( state = {}, action ) => { // jshint ignore:line
+       switch ( action.type ) {
+               case SEARCH_RECEIVE:
+                       state = { ...state,
+                               [ action.search.toLowerCase() ]: action.plugins.map( ( plugin ) => plugin.slug ),
+                       };
+                       break;
+       }
+
+       return state;
+};
+
+export default search;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesearchjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/reducers/search.js       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/search.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,21 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-/**
- * Internal dependencies.
- */
-import { SEARCH_PLUGINS } from 'actions/action-types';
-
-const plugins = ( state = {}, action ) => { // jshint ignore:line
-
-       switch ( action.type ) {
-               case SEARCH_PLUGINS:
-                       state = Object.assign( {}, state, {
-                               [ action.searchTerm.toLowerCase() ] : action.plugins.map( plugin => ( plugin.slug ) )
-                       } );
-
-                       break;
-       }
-
-       return state;
-};
-
-export default plugins;
</del></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesectionsactionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/actions.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/actions.js                                (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/actions.js  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,83 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { isEmpty } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import Api from 'modules/api';
+import {
+       PLUGINS_RECEIVE,
+       PLUGINS_REQUEST,
+       PLUGINS_REQUEST_SUCCESS,
+       PLUGINS_REQUEST_FAILURE,
+       SECTIONS_RECEIVE,
+       SECTIONS_REQUEST,
+       SECTIONS_REQUEST_SUCCESS,
+       SECTIONS_REQUEST_FAILURE,
+} from 'state/action-types';
+import { getSection, hasSections, isFetchingSections } from 'state/selectors';
+
+const pluginsForSections = [];
+
+export const fetchSections = () => ( dispatch, getState ) => {
+       const state = getState();
+       if ( hasSections( state ) || isFetchingSections( state ) ) {
+               return;
+       }
+
+       dispatch( {
+               type: SECTIONS_REQUEST,
+       } );
+
+       Api.sections()
+               .then( ( sections ) => {
+                       dispatch( {
+                               type: SECTIONS_REQUEST_SUCCESS,
+                       } );
+                       dispatch( {
+                               type: SECTIONS_RECEIVE,
+                               sections,
+                       } );
+
+                       // eslint-disable-next-line no-use-before-define
+                       pluginsForSections.map( ( slug ) => dispatch( fetchSection( slug ) ) );
+               } )
+               .catch( ( error ) => dispatch( {
+                       type: SECTIONS_REQUEST_FAILURE,
+                       error,
+               } ) );
+};
+
+export const fetchSection = ( slug ) => ( dispatch, getState ) => {
+       const section = getSection( getState(), slug );
+
+       if ( isEmpty( section ) ) {
+               pluginsForSections.push( slug );
+               return dispatch( fetchSections() );
+       }
+
+       dispatch( {
+               type: PLUGINS_REQUEST,
+               slug,
+       } );
+
+       Api.plugin().param( 'plugin_section', section.id )
+               .then( ( plugins ) => {
+                       dispatch( {
+                               type: PLUGINS_REQUEST_SUCCESS,
+                               slug,
+                       } );
+                       dispatch( {
+                               type: PLUGINS_RECEIVE,
+                               plugins,
+                               slug,
+                       } );
+               } )
+               .catch( ( error ) => dispatch( {
+                       type: PLUGINS_REQUEST_FAILURE,
+                       error,
+                       slug,
+               } ) );
+};
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstatesectionsreducerjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/reducer.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/reducer.js                                (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/sections/reducer.js  2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,45 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { combineReducers } from 'redux';
+import { keyBy } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import {
+       SECTIONS_RECEIVE,
+       SECTIONS_REQUEST,
+       SECTIONS_REQUEST_SUCCESS,
+       SECTIONS_REQUEST_FAILURE,
+} from 'state/action-types';
+
+const isFetching = ( state = false, { type } ) => {
+       switch ( type ) {
+               case SECTIONS_REQUEST:
+                       state = true;
+                       break;
+
+               case SECTIONS_REQUEST_SUCCESS:
+               case SECTIONS_REQUEST_FAILURE:
+                       state = false;
+                       break;
+       }
+
+       return state;
+};
+
+const items = ( state = {}, { type, sections } ) => {
+       switch ( type ) {
+               case SECTIONS_RECEIVE:
+                       state = { ...state, ...keyBy( sections, 'slug' ) };
+                       break;
+       }
+
+       return state;
+};
+
+export default combineReducers( {
+       isFetching,
+       items,
+} );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpageslugjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page-slug.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page-slug.js                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page-slug.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,12 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPath } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @return {String} Page slug.
+ */
+export const getPageSlug = ( state ) => getPath( state ).replace( /\/$/, '' );
+export default getPageSlug;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpagejs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page.js                              (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-page.js        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,13 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getPageSlug } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @param {String} slug Page slug.
+ * @return {Object} Page.
+ */
+export const getPage = ( state, slug = getPageSlug( state ) ) => state.pages[ slug ];
+export default getPage;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetparamsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-params.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-params.js                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-params.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,7 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Object} state Global state object.
+ * @return {String} Params.
+ */
+export const getParams = ( state ) => state.router.params;
+export default getParams;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpathjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-path.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-path.js                              (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-path.js        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,7 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Object} state Global state object.
+ * @return {String} Path.
+ */
+export const getPath = ( state ) => state.router ? state.router.location.pathname : null;
+export default getPath;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpluginjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugin.js                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugin.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,18 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { find } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import { getPlugins, getSlug } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @param {String} slug Plugin slug.
+ * @return {Object} Plugin.
+ */
+export const getPlugin = ( state, slug = getSlug( state ) ) => find( getPlugins( state ), { slug } ) || null;
+export default getPlugin;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpluginsfortermjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins-for-term.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins-for-term.js                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins-for-term.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,17 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { filter, includes } from 'lodash';
+
+/**
+ *
+ * @param {Object} state    Global state object.
+ * @param {String} taxonomy Taxonomy slug
+ * @param {Number} termId   Term Id.
+ * @return {Array} Plugins.
+ */
+export const getPluginsForTerm = ( state, taxonomy, termId ) => (
+       filter( state.plugins, ( plugin ) => includes( plugin[ taxonomy ], termId ) )
+);
+
+export default getPluginsForTerm;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetpluginsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins.js                           (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-plugins.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,7 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Object} state Global state object.
+ * @return {Object} Plugins.
+ */
+export const getPlugins = ( state ) => state.plugins;
+export default getPlugins;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsearchresultsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-results.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-results.js                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-results.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,13 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getSearchTerm } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @param {String} search Search term.
+ * @return {String} Search results.
+ */
+export const getSearchResults = ( state, search = getSearchTerm( state ) ) => state.search[ search ];
+export default getSearchResults;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsearchtermjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-term.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-term.js                               (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-search-term.js 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,12 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getParams } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @return {String} Search term.
+ */
+export const getSearchTerm = ( state ) => getParams( state ).search;
+export default getSearchTerm;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsectionpluginsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section-plugins.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section-plugins.js                           (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section-plugins.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,18 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getSection, getPluginsForTerm } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @param {String} slug  Section slug
+ * @return {Array} Plugins.
+ */
+export const getSectionPlugins = ( state, slug ) => {
+       const { id, taxonomy } = getSection( state, slug );
+
+       return getPluginsForTerm( state, taxonomy, id );
+};
+
+export default getSectionPlugins;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetsectionjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section.js                           (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-section.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,8 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ *
+ * @param {Object} state Global state object.
+ * @param {String} slug  Taxonomy slug.
+ * @return {String} Taxonomy ID.
+ */
+export const getSection = ( state, slug ) => state.sections.items[ slug ] || {};
+export default getSection;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsgetslugjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-slug.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-slug.js                              (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/get-slug.js        2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,12 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import { getParams } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @return {String} Slug.
+ */
+export const getSlug = ( state ) => getParams( state ).slug;
+export default getSlug;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorshassectionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/has-sections.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/has-sections.js                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/has-sections.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,8 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { isEmpty } from 'lodash';
+
+export const hasSections = ( state ) => ! isEmpty( state.sections.items );
+
+export default hasSections;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsindexjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/index.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/index.js                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/index.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,15 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export getPage from './get-page';
+export getPageSlug from './get-page-slug';
+export getParams from './get-params';
+export getPath from './get-path';
+export getPlugin from './get-plugin';
+export getPlugins from './get-plugins';
+export getPluginsForTerm from './get-plugins-for-term';
+export getSearchResults from './get-search-results';
+export getSearchTerm from './get-search-term';
+export getSection from './get-section';
+export getSectionPlugins from './get-section-plugins';
+export getSlug from './get-slug';
+export hasSections from './has-sections';
+export isFavorite from './is-favorite';
+export isFetchingSections from './is-fetching-sections';
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsisfavoritejs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-favorite.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-favorite.js                           (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-favorite.js     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,20 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { includes } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import { getSlug } from 'state/selectors';
+
+/**
+ *
+ * @param {Object} state Global state object.
+ * @param {String} slug Plugin slug.
+ * @return {Boolean} Whether plugin is favorited.
+ */
+export const isFavorite = ( state, slug = getSlug( state ) ) =>
+       pluginDirectory.userid && includes( state.user.items[ pluginDirectory.userid ].favorites, slug );
+
+export default isFavorite;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateselectorsisfetchingsectionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-fetching-sections.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-fetching-sections.js                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/selectors/is-fetching-sections.js    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,2 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+export const isFetchingSections = ( state ) => state.sections.isFetching;
+export default isFetchingSections;
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateuseractionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/actions.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/actions.js                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/actions.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,34 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Internal dependencies.
+ */
+import Api from 'modules/api';
+import {
+       USER_RECEIVE,
+       USER_REQUEST,
+       USER_REQUEST_SUCCESS,
+       USER_REQUEST_FAILURE,
+} from 'state/action-types';
+
+export const fetchUser = ( id ) => ( dispatch ) => {
+       dispatch( {
+               type: USER_REQUEST,
+               id,
+       } );
+
+       Api.users().id( id )
+               .then( ( user ) => {
+                       dispatch( {
+                               type: USER_REQUEST_SUCCESS,
+                               id,
+                       } );
+                       dispatch( {
+                               type: USER_RECEIVE,
+                               user,
+                       } );
+               } )
+               .catch( ( error ) => dispatch( {
+                       type: USER_REQUEST_FAILURE,
+                       error,
+                       id,
+               } ) );
+};
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstateuserreducerjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/reducer.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/reducer.js                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/state/user/reducer.js      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,45 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * External dependencies.
+ */
+import { combineReducers } from 'redux';
+import { keyBy } from 'lodash';
+
+/**
+ * Internal dependencies.
+ */
+import {
+       USER_RECEIVE,
+       USER_REQUEST,
+       USER_REQUEST_SUCCESS,
+       USER_REQUEST_FAILURE,
+} from 'state/action-types';
+
+const isFetching = ( state = {}, { type, id } ) => {
+       switch ( type ) {
+               case USER_REQUEST:
+                       state = { ...state, [ id ]: true };
+                       break;
+
+               case USER_REQUEST_SUCCESS:
+               case USER_REQUEST_FAILURE:
+                       state = { ...state, [ id ]: false };
+                       break;
+       }
+
+       return state;
+};
+
+const items = ( state = {}, { type, user } ) => {
+       switch ( type ) {
+               case USER_RECEIVE:
+                       state = { ...state, [ user.id ]: user };
+                       break;
+       }
+
+       return state;
+};
+
+export default combineReducers( {
+       isFetching,
+       items,
+} );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstyles_componentsscss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/_components.scss</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/_components.scss  2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/_components.scss    2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> @import "../components/plugin/favorite-button/style";
</span><span class="cx" style="display: block; padding: 0 10px"> @import "../components/plugin/plugin-banner/style";
</span><span class="cx" style="display: block; padding: 0 10px"> @import "../components/plugin/sections/changelog/style";
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-@import "../components/plugin/sections/committers/style";
</del><span class="cx" style="display: block; padding: 0 10px"> @import "../components/plugin/sections/developers/style";
</span><span class="cx" style="display: block; padding: 0 10px"> @import "../components/plugin/sections/faq/style";
</span><span class="cx" style="display: block; padding: 0 10px"> @import "../components/plugin/sections/reviews/style";
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsclientstylesmodules_accessibilityscss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/modules/_accessibility.scss</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/modules/_accessibility.scss       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/modules/_accessibility.scss 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -27,7 +27,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /* Do not show the outline on the skip link target. */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#content[tabindex="-1"]:focus {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.site-content[tabindex="-1"]:focus {
</ins><span class="cx" style="display: block; padding: 0 10px">         outline: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginscssstylertlcss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style-rtl.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style-rtl.css       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style-rtl.css 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1407,7 +1407,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /* Do not show the outline on the skip link target. */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#content[tabindex="-1"]:focus {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.site-content[tabindex="-1"]:focus {
</ins><span class="cx" style="display: block; padding: 0 10px">   outline: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1986,6 +1986,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">   max-width: 128px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.entry-thumbnail .plugin-icon {
+  -webkit-background-size: cover;
+  background-size: cover;
+  height: 128px;
+  width: 128px;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> @media screen and (min-width: 21em) {
</span><span class="cx" style="display: block; padding: 0 10px">   .entry-thumbnail {
</span><span class="cx" style="display: block; padding: 0 10px">     display: inline-block;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2218,30 +2225,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">   }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#changelog {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-changelog {
</ins><span class="cx" style="display: block; padding: 0 10px">   font-size: 12.8px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 0.8rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#changelog code {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-changelog code {
</ins><span class="cx" style="display: block; padding: 0 10px">   font-size: 12.8px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 0.8rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#changelog h4 {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-changelog h4 {
</ins><span class="cx" style="display: block; padding: 0 10px">   margin-top: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.contributors-list {
-  list-style: none;
-  margin: 0;
-  font-size: 0.9em;
-}
-
-.contributors-list li {
-  padding-bottom: 0.5em;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .plugin-developers {
</span><span class="cx" style="display: block; padding: 0 10px">   list-style-type: none;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2267,7 +2264,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   float: right;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq h2:first-of-type {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq h2:first-of-type {
</ins><span class="cx" style="display: block; padding: 0 10px">   font-size: 20px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 1.25rem;
</span><span class="cx" style="display: block; padding: 0 10px">   font-weight: 600;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2280,11 +2277,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">   text-transform: inherit;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dl {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dl {
</ins><span class="cx" style="display: block; padding: 0 10px">   border-bottom: 1px solid #eee;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dt {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dt {
</ins><span class="cx" style="display: block; padding: 0 10px">   border-top: 1px solid #eee;
</span><span class="cx" style="display: block; padding: 0 10px">   cursor: pointer;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 16px;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2294,7 +2291,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   padding: 1rem 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dt:before {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dt:before {
</ins><span class="cx" style="display: block; padding: 0 10px">   content: "\f347";
</span><span class="cx" style="display: block; padding: 0 10px">   float: left;
</span><span class="cx" style="display: block; padding: 0 10px">   font-family: dashicons;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2302,29 +2299,29 @@
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0 1rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dt.open:before {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dt.open:before {
</ins><span class="cx" style="display: block; padding: 0 10px">   content: "\f343";
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dd {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dd {
</ins><span class="cx" style="display: block; padding: 0 10px">   display: none;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0 0 16px;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0 0 1rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dd p {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.no-js .plugin-faq dd {
+  display: block;
+}
+
+.plugin-faq dd p {
</ins><span class="cx" style="display: block; padding: 0 10px">   margin: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dd p + p {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dd p + p {
</ins><span class="cx" style="display: block; padding: 0 10px">   margin-top: 16px;
</span><span class="cx" style="display: block; padding: 0 10px">   margin-top: 1rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.no-js #faq dd {
-  display: block;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .plugin-reviews {
</span><span class="cx" style="display: block; padding: 0 10px">   list-style-type: none;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2632,11 +2629,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">   padding-bottom: 1px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.section.read-more#description {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.section.read-more.plugin-description {
</ins><span class="cx" style="display: block; padding: 0 10px">   max-height: 400px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.section.read-more#description.toggled {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.section.read-more.plugin-description.toggled {
</ins><span class="cx" style="display: block; padding: 0 10px">   max-height: none;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2644,6 +2641,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">   max-height: none;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.no-js .section.read-more {
+  max-height: none;
+  overflow: auto;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> .section h1, .section h2, .section h3 {
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 16px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 1rem;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2684,11 +2686,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">   margin-top: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.no-js .read-more {
-  overflow: auto;
-  max-height: none;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .section-toggle {
</span><span class="cx" style="display: block; padding: 0 10px">   color: #0073aa;
</span><span class="cx" style="display: block; padding: 0 10px">   cursor: pointer;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2699,6 +2696,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   position: relative;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.no-js .section-toggle {
+  display: none;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> .section-toggle:after {
</span><span class="cx" style="display: block; padding: 0 10px">   content: "\f347";
</span><span class="cx" style="display: block; padding: 0 10px">   font-family: dashicons;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2717,10 +2718,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">   text-decoration: underline;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.no-js .section-toggle {
-  display: none;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .type-plugin .plugin-notice {
</span><span class="cx" style="display: block; padding: 0 10px">   margin-top: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginscssstylecss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style.css   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/css/style.css     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1407,7 +1407,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /* Do not show the outline on the skip link target. */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#content[tabindex="-1"]:focus {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.site-content[tabindex="-1"]:focus {
</ins><span class="cx" style="display: block; padding: 0 10px">   outline: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1986,6 +1986,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">   max-width: 128px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.entry-thumbnail .plugin-icon {
+  -webkit-background-size: cover;
+  background-size: cover;
+  height: 128px;
+  width: 128px;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> @media screen and (min-width: 21em) {
</span><span class="cx" style="display: block; padding: 0 10px">   .entry-thumbnail {
</span><span class="cx" style="display: block; padding: 0 10px">     display: inline-block;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2218,30 +2225,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">   }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#changelog {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-changelog {
</ins><span class="cx" style="display: block; padding: 0 10px">   font-size: 12.8px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 0.8rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#changelog code {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-changelog code {
</ins><span class="cx" style="display: block; padding: 0 10px">   font-size: 12.8px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 0.8rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#changelog h4 {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-changelog h4 {
</ins><span class="cx" style="display: block; padding: 0 10px">   margin-top: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.contributors-list {
-  list-style: none;
-  margin: 0;
-  font-size: 0.9em;
-}
-
-.contributors-list li {
-  padding-bottom: 0.5em;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .plugin-developers {
</span><span class="cx" style="display: block; padding: 0 10px">   list-style-type: none;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2267,7 +2264,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   float: left;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq h2:first-of-type {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq h2:first-of-type {
</ins><span class="cx" style="display: block; padding: 0 10px">   font-size: 20px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 1.25rem;
</span><span class="cx" style="display: block; padding: 0 10px">   font-weight: 600;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2280,11 +2277,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">   text-transform: inherit;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dl {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dl {
</ins><span class="cx" style="display: block; padding: 0 10px">   border-bottom: 1px solid #eee;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dt {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dt {
</ins><span class="cx" style="display: block; padding: 0 10px">   border-top: 1px solid #eee;
</span><span class="cx" style="display: block; padding: 0 10px">   cursor: pointer;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 16px;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2294,7 +2291,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   padding: 1rem 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dt:before {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dt:before {
</ins><span class="cx" style="display: block; padding: 0 10px">   content: "\f347";
</span><span class="cx" style="display: block; padding: 0 10px">   float: right;
</span><span class="cx" style="display: block; padding: 0 10px">   font-family: dashicons;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2302,29 +2299,29 @@
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0 1rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dt.open:before {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dt.open:before {
</ins><span class="cx" style="display: block; padding: 0 10px">   content: "\f343";
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dd {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dd {
</ins><span class="cx" style="display: block; padding: 0 10px">   display: none;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0 0 16px;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0 0 1rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dd p {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.no-js .plugin-faq dd {
+  display: block;
+}
+
+.plugin-faq dd p {
</ins><span class="cx" style="display: block; padding: 0 10px">   margin: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#faq dd p + p {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.plugin-faq dd p + p {
</ins><span class="cx" style="display: block; padding: 0 10px">   margin-top: 16px;
</span><span class="cx" style="display: block; padding: 0 10px">   margin-top: 1rem;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.no-js #faq dd {
-  display: block;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .plugin-reviews {
</span><span class="cx" style="display: block; padding: 0 10px">   list-style-type: none;
</span><span class="cx" style="display: block; padding: 0 10px">   margin: 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2632,11 +2629,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">   padding-bottom: 1px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.section.read-more#description {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.section.read-more.plugin-description {
</ins><span class="cx" style="display: block; padding: 0 10px">   max-height: 400px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.section.read-more#description.toggled {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.section.read-more.plugin-description.toggled {
</ins><span class="cx" style="display: block; padding: 0 10px">   max-height: none;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2644,6 +2641,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">   max-height: none;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.no-js .section.read-more {
+  max-height: none;
+  overflow: auto;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> .section h1, .section h2, .section h3 {
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 16px;
</span><span class="cx" style="display: block; padding: 0 10px">   font-size: 1rem;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2684,11 +2686,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">   margin-top: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.no-js .read-more {
-  overflow: auto;
-  max-height: none;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .section-toggle {
</span><span class="cx" style="display: block; padding: 0 10px">   color: #0073aa;
</span><span class="cx" style="display: block; padding: 0 10px">   cursor: pointer;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2699,6 +2696,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   position: relative;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.no-js .section-toggle {
+  display: none;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> .section-toggle:after {
</span><span class="cx" style="display: block; padding: 0 10px">   content: "\f347";
</span><span class="cx" style="display: block; padding: 0 10px">   font-family: dashicons;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2717,10 +2718,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">   text-decoration: underline;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.no-js .section-toggle {
-  display: none;
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> .type-plugin .plugin-notice {
</span><span class="cx" style="display: block; padding: 0 10px">   margin-top: 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3414,4 +3411,3 @@
</span><span class="cx" style="display: block; padding: 0 10px">     top: 5px;
</span><span class="cx" style="display: block; padding: 0 10px">   }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/*# sourceMappingURL=style.css.map */
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/functions.php   2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/functions.php     2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -77,7 +77,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                wp_enqueue_script( 'google-jsapi', 'https://www.google.com/jsapi', array(), false, true );
</span><span class="cx" style="display: block; padding: 0 10px">                wp_enqueue_script( 'wporg-plugins-stats', get_template_directory_uri() . '/js/stats.js', array( 'jquery', 'google-jsapi' ), '20161019', true );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><span class="cx" style="display: block; padding: 0 10px">                 wp_localize_script( 'wporg-plugins-stats', 'pluginStats', array(
</span><span class="cx" style="display: block; padding: 0 10px">                        'slug' => is_singular( 'plugin' ) ? get_queried_object()->post_name : '',
</span><span class="cx" style="display: block; padding: 0 10px">                        'l10n' => array(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -90,17 +89,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                'all_time'  => __( 'All Time', 'wporg-plugins' ),
</span><span class="cx" style="display: block; padding: 0 10px">                        ),
</span><span class="cx" style="display: block; padding: 0 10px">                ) );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // React is currently only used on detail pages
</span><span class="cx" style="display: block; padding: 0 10px">        if ( is_single() ) {
</span><span class="cx" style="display: block; padding: 0 10px">                wp_enqueue_script( 'wporg-plugins-client', get_template_directory_uri() . '/js/theme.js', array(), false, true );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                wp_localize_script( 'wporg-plugins-client', 'app_data', array(
-                       'api_url' => untrailingslashit( rest_url() ),
-                       'nonce'   => wp_create_nonce( 'wp_rest' ),
-                       'base'    => get_blog_details()->path,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         wp_localize_script( 'wporg-plugins-client', 'pluginDirectory', array(
+                       'endpoint' => untrailingslashit( rest_url() ), // 'https://wordpress.org/plugins-wp/wp-json',
+                       'nonce'    => wp_create_nonce( 'wp_rest' ),
+                       'base'     => get_blog_details()->path,
+                       'userId'   => get_current_user_id(),
</ins><span class="cx" style="display: block; padding: 0 10px">                 ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                wp_localize_script( 'wporg-plugins-client', 'localeData', array(
+                       '' => array(
+                               'Plural-Forms' => _x( 'nplurals=2; plural=n != 1;', 'plural forms', 'wporg-plugins' ),
+                               'Language'     => _x( 'en', 'language (fr, fr_CA)', 'wporg-plugins' ),
+                               'localeSlug'   => _x( 'en', 'locale slug', 'wporg-plugins' ) ,
+                       ),
+               ) );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjssectionaccordionjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/section-accordion.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/section-accordion.js 2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/section-accordion.js   2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -34,7 +34,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $button.hide();
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // If the description starts with an embed/video, set the min-height to include it.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        if ( 'description' === element.id && $section.children().next( 'p, div' ).first().find( 'video, iframe' ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if ( 'description' === element.id && $section.children().next( 'p, div' ).first().find( 'video, iframe' ).length ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 var height = $section.children().next( 'p,div' ).first().outerHeight( true ) /* embed */ + $section.children().first().outerHeight( true ) /* h2 */;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                if ( height > parseInt( $section.css( 'max-height' ) ) ) {
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginsjsthemejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/theme.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/theme.js     2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/js/theme.js       2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,5 +1,5 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}for(var o=n(2),a=r(o),i=n(30),s=n(162),u=r(s),l=document.querySelectorAll("#screenshots figure"),c=[],p=0;p<l.length;p++){var d=l[p].querySelector("figcaption"),f={src:l[p].querySelector("img.screenshot").src,caption:d?d.textContent:""};c.push(f)}c.length>0&&(0,i.render)(a["default"].createElement(u["default"],{screenshots:c}),document.getElementById("screenshots"))},function(e,t,n){"use strict";e.exports=n(3)},function(e,t,n){"use strict";
 var r=n(4),o=n(5),a=n(17),i=n(20),s=n(25),u=n(9),l=n(27),c=n(28),p=n(29),d=(n(11),u.createElement),f=u.createFactory,h=u.cloneElement,m=r,v={Children:{map:o.map,forEach:o.forEach,count:o.count,toArray:o.toArray,only:p},Component:a,createElement:d,cloneElement:h,isValidElement:u.isValidElement,PropTypes:l,createClass:i.createClass,createFactory:f,createMixin:function(e){return e},DOM:s,version:c,__spread:m};e.exports=v},function(e,t){"use strict";function n(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function r(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(e){return t[e]});if("0123456789"!==r.join(""))return!1;var o={};return"abcdefghijklmnopqrst
 ".split("").forEach(function(e){o[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(a){return!1}}var o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=r()?Object.assign:function(e,t){for(var r,i,s=n(e),u=1;u<arguments.length;u++){r=Object(arguments[u]);for(var l in r)o.call(r,l)&&(s[l]=r[l]);if(Object.getOwnPropertySymbols){i=Object.getOwnPropertySymbols(r);for(var c=0;c<i.length;c++)a.call(r,i[c])&&(s[i[c]]=r[i[c]])}}return s}},function(e,t,n){"use strict";function r(e){return(""+e).replace(_,"$&/")}function o(e,t){this.func=e,this.context=t,this.count=0}function a(e,t,n){var r=e.func,o=e.context;r.call(o,t,e.count++)}function i(e,t,n){if(null==e)return e;var r=o.getPooled(t,n);g(e,a,r),o.release(r)}function s(e,t,n,r){this.result=e,this.keyPrefix=t,this.func=n,this.context=r,this.count=0}function u(e,t,n){var o=e.result,a=e.keyP
 refix,i=e.func,s=e.context,u=i.call(s,t,e.count++);Array.isArray(u)?l(u,o,n,v.thatReturnsArgument):null!=u&&(m.isValidElement(u)&&(u=m.cloneAndReplaceKey(u,a+(!u.key||t&&t.key===u.key?"":r(u.key)+"/")+n)),o.push(u))}function l(e,t,n,o,a){var i="";null!=n&&(i=r(n)+"/");var l=s.getPooled(t,i,o,a);g(e,u,l),s.release(l)}function c(e,t,n){if(null==e)return e;var r=[];return l(e,r,null,t,n),r}function p(e,t,n){return null}function d(e,t){return g(e,p,null)}function f(e){var t=[];return l(e,t,null,v.thatReturnsArgument),t}var h=n(6),m=n(9),v=n(12),g=n(14),y=h.twoArgumentPooler,b=h.fourArgumentPooler,_=/\/+/g;o.prototype.destructor=function(){this.func=null,this.context=null,this.count=0},h.addPoolingTo(o,y),s.prototype.destructor=function(){this.result=null,this.keyPrefix=null,this.func=null,this.context=null,this.count=0},h.addPoolingTo(s,b);var C={forEach:i,map:c,mapIntoWithKeyPrefixInternal:l,count:d,toArray:f};e.ex
 ports=C},function(e,t,n){"use strict";var r=n(7),o=(n(8),function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)}),a=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},i=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},s=function(e,t,n,r){var o=this;if(o.instancePool.length){var a=o.instancePool.pop();return o.call(a,e,t,n,r),a}return new o(e,t,n,r)},u=function(e,t,n,r,o){var a=this;if(a.instancePool.length){var i=a.instancePool.pop();return a.call(i,e,t,n,r,o),i}return new a(e,t,n,r,o)},l=function(e){var t=this;e instanceof t?void 0:r("25"),e.destructor(),t.instancePool.length<t.poolSize&&t.instancePool.push(e)},c=10,p=o,d=function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||p,n.poolSize||(n.poolSize=c),n.release=l,n},f={addPoolingTo:d,oneArgu
 mentPooler:o,twoArgumentPooler:a,threeArgumentPooler:i,fourArgumentPooler:s,fiveArgumentPooler:u};e.exports=f},function(e,t){"use strict";function n(e){for(var t=arguments.length-1,n="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);n+=" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.";var o=new Error(n);throw o.name="Invariant Violation",o.framesToPop=1,o}e.exports=n},function(e,t,n){"use strict";function r(e,t,n,r,o,a,i,s){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,a,i,s],c=0;u=new Error(t.replace(/%s/g,function(){return l[c++]})),u.name="Invariant Violation"}throw u.fr
 amesToPop=1,u}}e.exports=r},function(e,t,n){"use strict";function r(e){return void 0!==e.ref}function o(e){return void 0!==e.key}var a=n(4),i=n(10),s=(n(11),n(13),Object.prototype.hasOwnProperty),u="function"==typeof Symbol&&Symbol["for"]&&Symbol["for"]("react.element")||60103,l={key:!0,ref:!0,__self:!0,__source:!0},c=function(e,t,n,r,o,a,i){var s={$$typeof:u,type:e,key:t,ref:n,props:i,_owner:a};return s};c.createElement=function(e,t,n){var a,u={},p=null,d=null,f=null,h=null;if(null!=t){r(t)&&(d=t.ref),o(t)&&(p=""+t.key),f=void 0===t.__self?null:t.__self,h=void 0===t.__source?null:t.__source;for(a in t)s.call(t,a)&&!l.hasOwnProperty(a)&&(u[a]=t[a])}var m=arguments.length-2;if(1===m)u.children=n;else if(m>1){for(var v=Array(m),g=0;g<m;g++)v[g]=arguments[g+2];u.children=v}if(e&&e.defaultProps){var y=e.defaultProps;for(a in y)void 0===u[a]&&(u[a]=y[a])}retur
 n c(e,p,d,f,h,i.current,u)},c.createFactory=function(e){var t=c.createElement.bind(null,e);return t.type=e,t},c.cloneAndReplaceKey=function(e,t){var n=c(e.type,t,e.ref,e._self,e._source,e._owner,e.props);return n},c.cloneElement=function(e,t,n){var u,p=a({},e.props),d=e.key,f=e.ref,h=e._self,m=e._source,v=e._owner;if(null!=t){r(t)&&(f=t.ref,v=i.current),o(t)&&(d=""+t.key);var g;e.type&&e.type.defaultProps&&(g=e.type.defaultProps);for(u in t)s.call(t,u)&&!l.hasOwnProperty(u)&&(void 0===t[u]&&void 0!==g?p[u]=g[u]:p[u]=t[u])}var y=arguments.length-2;if(1===y)p.children=n;else if(y>1){for(var b=Array(y),_=0;_<y;_++)b[_]=arguments[_+2];p.children=b}return c(e.type,d,f,h,m,v,p)},c.isValidElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===u},c.REACT_ELEMENT_TYPE=u,e.exports=c},function(e,t){"use strict";var n={current:null};e.exports=n},function(e,t,n){"use str
 ict";var r=n(12),o=r;e.exports=o},function(e,t){"use strict";function n(e){return function(){return e}}var r=function(){};r.thatReturns=n,r.thatReturnsFalse=n(!1),r.thatReturnsTrue=n(!0),r.thatReturnsNull=n(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(e){return e},e.exports=r},function(e,t,n){"use strict";var r=!1;e.exports=r},function(e,t,n){"use strict";function r(e,t){return e&&"object"==typeof e&&null!=e.key?l.escape(e.key):t.toString(36)}function o(e,t,n,a){var d=typeof e;if("undefined"!==d&&"boolean"!==d||(e=null),null===e||"string"===d||"number"===d||s.isValidElement(e))return n(a,e,""===t?c+r(e,0):t),1;var f,h,m=0,v=""===t?c:t+p;if(Array.isArray(e))for(var g=0;g<e.length;g++)f=e[g],h=v+r(f,g),m+=o(f,h,n,a);else{var y=u(e);if(y){var b,_=y.call(e);if(y!==e.entries)for(var C=0;!(b=_.next()).done;)f=b.value,h=v+r(f,
 C++),m+=o(f,h,n,a);else for(;!(b=_.next()).done;){var E=b.value;E&&(f=E[1],h=v+l.escape(E[0])+p+r(f,0),m+=o(f,h,n,a))}}else if("object"===d){var x="",T=String(e);i("31","[object Object]"===T?"object with keys {"+Object.keys(e).join(", ")+"}":T,x)}}return m}function a(e,t,n){return null==e?0:o(e,"",t,n)}var i=n(7),s=(n(10),n(9)),u=n(15),l=(n(8),n(16)),c=(n(11),"."),p=":";e.exports=a},function(e,t){"use strict";function n(e){var t=e&&(r&&e[r]||e[o]);if("function"==typeof t)return t}var r="function"==typeof Symbol&&Symbol.iterator,o="@@iterator";e.exports=n},function(e,t){"use strict";function n(e){var t=/[=:]/g,n={"=":"=0",":":"=2"},r=(""+e).replace(t,function(e){return n[e]});return"$"+r}function r(e){var t=/(=0|=2)/g,n={"=0":"=&qu
 ot;,"=2":":"},r="."===e[0]&&"$"===e[1]?e.substring(2):e.substring(1);return(""+r).replace(t,function(e){return n[e]})}var o={escape:n,unescape:r};e.exports=o},function(e,t,n){"use strict";function r(e,t,n){this.props=e,this.context=t,this.refs=i,this.updater=n||a}var o=n(7),a=n(18),i=(n(13),n(19));n(8),n(11);r.prototype.isReactComponent={},r.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e?o("85"):void 0,this.updater.enqueueSetState(this,e),t&&this.updater.enqueueCallback(this,t,"setState")},r.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this),e&&this.updater.enqueueCallback(this,e,"forceUpdate")};e.exports=r},function(e,t,n){"use strict";function r(e,t){}var o=(n(11),{isMounted:function(e){return!1},enqueueCallback:function(e,t){},enqueueForceUpdate:function(e){r(e,&quot
 ;forceUpdate")},enqueueReplaceState:function(e,t){r(e,"replaceState")},enqueueSetState:function(e,t){r(e,"setState")}});e.exports=o},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";function r(e,t){var n=E.hasOwnProperty(t)?E[t]:null;T.hasOwnProperty(t)&&(n!==_.OVERRIDE_BASE?p("73",t):void 0),e&&(n!==_.DEFINE_MANY&&n!==_.DEFINE_MANY_MERGED?p("74",t):void 0)}function o(e,t){if(t){"function"==typeof t?p("75"):void 0,h.isValidElement(t)?p("76"):void 0;var n=e.prototype,o=n.__reactAutoBindPairs;t.hasOwnProperty(b)&&x.mixins(e,t.mixins);for(var a in t)if(t.hasOwnProperty(a)&&a!==b){var i=t[a],l=n.hasOwnProperty(a);if(r(l,a),x.hasOwnProperty(a))x[a](e,i);else{var c=E.hasOwnProperty(a),d="function"==typeof i,f=d&&!c&&!l&&t.autobind!==!1;if(f)o.push(a,i),n[a]=i;else if(l){var m=E[a];!c||m!==_.D
 EFINE_MANY_MERGED&&m!==_.DEFINE_MANY?p("77",m,a):void 0,m===_.DEFINE_MANY_MERGED?n[a]=s(n[a],i):m===_.DEFINE_MANY&&(n[a]=u(n[a],i))}else n[a]=i}}}}function a(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in x;o?p("78",n):void 0;var a=n in e;a?p("79",n):void 0,e[n]=r}}}function i(e,t){e&&t&&"object"==typeof e&&"object"==typeof t?void 0:p("80");for(var n in t)t.hasOwnProperty(n)&&(void 0!==e[n]?p("81",n):void 0,e[n]=t[n]);return e}function s(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return i(o,n),i(o,r),o}}function u(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function l(e,t){var n=t.bind(e);return n}function c(e){for(var t=e.__reactAutoBindPairs,n=0;n<t.length;n+=2){var r=t[n],o=t[n+1];e[r]=l(e,o)}}var p=n(7),d=n(4),f=n(17),h=n(9)
 ,m=(n(21),n(23),n(18)),v=n(19),g=(n(8),n(22)),y=n(24),b=(n(11),y({mixins:null})),_=g({DEFINE_ONCE:null,DEFINE_MANY:null,OVERRIDE_BASE:null,DEFINE_MANY_MERGED:null}),C=[],E={mixins:_.DEFINE_MANY,statics:_.DEFINE_MANY,propTypes:_.DEFINE_MANY,contextTypes:_.DEFINE_MANY,childContextTypes:_.DEFINE_MANY,getDefaultProps:_.DEFINE_MANY_MERGED,getInitialState:_.DEFINE_MANY_MERGED,getChildContext:_.DEFINE_MANY_MERGED,render:_.DEFINE_ONCE,componentWillMount:_.DEFINE_MANY,componentDidMount:_.DEFINE_MANY,componentWillReceiveProps:_.DEFINE_MANY,shouldComponentUpdate:_.DEFINE_ONCE,componentWillUpdate:_.DEFINE_MANY,componentDidUpdate:_.DEFINE_MANY,componentWillUnmount:_.DEFINE_MANY,updateComponent:_.OVERRIDE_BASE},x={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n<t.length;n++)o(e,t[n])},childContextTypes:function(e,t){e.childContextTypes=d({},e.childContextTypes,t)},contextTypes:function(e,t){e.contextTypes=d({},e.contextTypes,t)},getDefaultProps:function(e,t){
 e.getDefaultProps?e.getDefaultProps=s(e.getDefaultProps,t):e.getDefaultProps=t},propTypes:function(e,t){e.propTypes=d({},e.propTypes,t)},statics:function(e,t){a(e,t)},autobind:function(){}},T={replaceState:function(e,t){this.updater.enqueueReplaceState(this,e),t&&this.updater.enqueueCallback(this,t,"replaceState")},isMounted:function(){return this.updater.isMounted(this)}},w=function(){};d(w.prototype,f.prototype,T);var N={createClass:function(e){var t=function(e,n,r){this.__reactAutoBindPairs.length&&c(this),this.props=e,this.context=n,this.refs=v,this.updater=r||m,this.state=null;var o=this.getInitialState?this.getInitialState():null;"object"!=typeof o||Array.isArray(o)?p("82",t.displayName||"ReactCompositeComponent"):void 0,this.state=o};t.prototype=new w,t.prototype.constructor=t,t.prototype.__reactAutoBindPairs=[],C.forEach(o.bind(null,t)),o(t,e),t.getDefaultProps&&(t.defaultProps=t.getDefaultProps()),t.prototype.r
 ender?void 0:p("83");for(var n in E)t.prototype[n]||(t.prototype[n]=null);return t},injection:{injectMixin:function(e){C.push(e)}}};e.exports=N},function(e,t,n){"use strict";var r=n(22),o=r({prop:null,context:null,childContext:null});e.exports=o},function(e,t,n){"use strict";var r=n(8),o=function(e){var t,n={};e instanceof Object&&!Array.isArray(e)?void 0:r(!1);for(t in e)e.hasOwnProperty(t)&&(n[t]=t);return n};e.exports=o},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t){"use strict";var n=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};e.exports=n},function(e,t,n){"use strict";function r(e){return o.createFactory(e)}var o=n(9),a=n(26),i=a({a:"a",abbr:"abbr",address:"address",area:"area",article:"article",aside:"aside",audio:"audio",b:"b",base:"base",bdi:"bdi",bdo:&qu
 ot;bdo",big:"big",blockquote:"blockquote",body:"body",br:"br",button:"button",canvas:"canvas",caption:"caption",cite:"cite",code:"code",col:"col",colgroup:"colgroup",data:"data",datalist:"datalist",dd:"dd",del:"del",details:"details",dfn:"dfn",dialog:"dialog",div:"div",dl:"dl",dt:"dt",em:"em",embed:"embed",fieldset:"fieldset",figcaption:"figcaption",figure:"figure",footer:"footer",form:"form",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",head:"head",header:"header",hgroup:"hgroup",hr:"hr",html:"html",i:"i",iframe:"iframe",img:"img",input:"input",ins:&quo
 t;ins",kbd:"kbd",keygen:"keygen",label:"label",legend:"legend",li:"li",link:"link",main:"main",map:"map",mark:"mark",menu:"menu",menuitem:"menuitem",meta:"meta",meter:"meter",nav:"nav",noscript:"noscript",object:"object",ol:"ol",optgroup:"optgroup",option:"option",output:"output",p:"p",param:"param",picture:"picture",pre:"pre",progress:"progress",q:"q",rp:"rp",rt:"rt",ruby:"ruby",s:"s",samp:"samp",script:"script",section:"section",select:"select",small:"small",source:"source",span:"span",strong:"strong",style:"style",sub:"sub",summary:"summary",sup:"sup",table:&quot
 ;table",tbody:"tbody",td:"td",textarea:"textarea",tfoot:"tfoot",th:"th",thead:"thead",time:"time",title:"title",tr:"tr",track:"track",u:"u",ul:"ul","var":"var",video:"video",wbr:"wbr",circle:"circle",clipPath:"clipPath",defs:"defs",ellipse:"ellipse",g:"g",image:"image",line:"line",linearGradient:"linearGradient",mask:"mask",path:"path",pattern:"pattern",polygon:"polygon",polyline:"polyline",radialGradient:"radialGradient",rect:"rect",stop:"stop",svg:"svg",text:"text",tspan:"tspan"},r);e.exports=i},function(e,t){"use strict";function n(e,t,n){if(!e)return null;var o={};for(var a in e)r.call(e,a)&&(o[a]=t.call(n,e[a],a
 ,e));return o}var r=Object.prototype.hasOwnProperty;e.exports=n},function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function o(e){function t(t,n,r,o,a,i){if(o=o||T,i=i||r,null==n[r]){var s=C[a];return t?new Error("Required "+s+" `"+i+"` was not specified in "+("`"+o+"`.")):null}return e(n,r,o,a,i)}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function a(e){function t(t,n,r,o,a){var i=t[n],s=g(i);if(s!==e){var u=C[o],l=y(i);return new Error("Invalid "+u+" `"+a+"` of type "+("`"+l+"` supplied to `"+r+"`, expected ")+("`"+e+"`."))}return null}return o(t)}function i(){return o(E.thatReturns(null))}function s(e){function t(t,n,r,o,a){if("function"!=typeof e)return new Error("Property `"+a+"` of component `"+r+"` has invalid PropType notation inside arrayOf.&
 quot;);var i=t[n];if(!Array.isArray(i)){var s=C[o],u=g(i);return new Error("Invalid "+s+" `"+a+"` of type "+("`"+u+"` supplied to `"+r+"`, expected an array."))}for(var l=0;l<i.length;l++){var c=e(i,l,r,o,a+"["+l+"]");if(c instanceof Error)return c}return null}return o(t)}function u(){function e(e,t,n,r,o){if(!_.isValidElement(e[t])){var a=C[r];return new Error("Invalid "+a+" `"+o+"` supplied to "+("`"+n+"`, expected a single ReactElement."))}return null}return o(e)}function l(e){function t(t,n,r,o,a){if(!(t[n]instanceof e)){var i=C[o],s=e.name||T,u=b(t[n]);return new Error("Invalid "+i+" `"+a+"` of type "+("`"+u+"` supplied to `"+r+"`, expected ")+("instance of `"+s+"`."))}return null}return o(t)}function c(e){function t(t,n,o,a,i){for(var s=t[n],u=0;u<e.length;u++)if(r
 (s,e[u]))return null;var l=C[a],c=JSON.stringify(e);return new Error("Invalid "+l+" `"+i+"` of value `"+s+"` "+("supplied to `"+o+"`, expected one of "+c+"."))}return o(Array.isArray(e)?t:function(){return new Error("Invalid argument supplied to oneOf, expected an instance of array.")})}function p(e){function t(t,n,r,o,a){if("function"!=typeof e)return new Error("Property `"+a+"` of component `"+r+"` has invalid PropType notation inside objectOf.");var i=t[n],s=g(i);if("object"!==s){var u=C[o];return new Error("Invalid "+u+" `"+a+"` of type "+("`"+s+"` supplied to `"+r+"`, expected an object."))}for(var l in i)if(i.hasOwnProperty(l)){var c=e(i,l,r,o,a+"."+l);if(c instanceof Error)return c}return null}return o(t)}function d(e){function t(t,n,r,o,a){for(var i=0;i<e.length;i++){var s=e[
 i];if(null==s(t,n,r,o,a))return null}var u=C[o];return new Error("Invalid "+u+" `"+a+"` supplied to "+("`"+r+"`."))}return o(Array.isArray(e)?t:function(){return new Error("Invalid argument supplied to oneOfType, expected an instance of array.")})}function f(){function e(e,t,n,r,o){if(!m(e[t])){var a=C[r];return new Error("Invalid "+a+" `"+o+"` supplied to "+("`"+n+"`, expected a ReactNode."))}return null}return o(e)}function h(e){function t(t,n,r,o,a){var i=t[n],s=g(i);if("object"!==s){var u=C[o];return new Error("Invalid "+u+" `"+a+"` of type `"+s+"` "+("supplied to `"+r+"`, expected `object`."))}for(var l in e){var c=e[l];if(c){var p=c(i,l,r,o,a+"."+l);if(p)return p}}return null}return o(t)}function m(e){switch(typeof e){case"number":case"string":case"undefined":r
 eturn!0;case"boolean":return!e;case"object":if(Array.isArray(e))return e.every(m);if(null===e||_.isValidElement(e))return!0;var t=x(e);if(!t)return!1;var n,r=t.call(e);if(t!==e.entries){for(;!(n=r.next()).done;)if(!m(n.value))return!1}else for(;!(n=r.next()).done;){var o=n.value;if(o&&!m(o[1]))return!1}return!0;default:return!1}}function v(e,t){return"symbol"===e||("Symbol"===t["@@toStringTag"]||"function"==typeof Symbol&&t instanceof Symbol)}function g(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":v(t,e)?"symbol":t}function y(e){var t=g(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}function b(e){return e.constructor&&e.constructor.name?e.constructor.name:T}var _=n(9),C=n(23),E=n(12),x=n(15),T="<<anonymous>>",w={array:a("array&q
 uot;),bool:a("boolean"),func:a("function"),number:a("number"),object:a("object"),string:a("string"),symbol:a("symbol"),any:i(),arrayOf:s,element:u(),instanceOf:l,node:f(),objectOf:p,oneOf:c,oneOfType:d,shape:h};e.exports=w},function(e,t){"use strict";e.exports="15.2.1"},function(e,t,n){"use strict";function r(e){return a.isValidElement(e)?void 0:o("23"),e}var o=n(7),a=n(9);n(8);e.exports=r},function(e,t,n){"use strict";e.exports=n(31)},function(e,t,n){"use strict";var r=n(32),o=n(35),a=n(154),i=n(55),s=n(52),u=n(28),l=n(159),c=n(160),p=n(161);n(11);o.inject();var d={findDOMNode:l,render:a.render,unmountComponentAtNode:a.unmountComponentAtNode,version:u,unstable_batchedUpdates:s.batchedUpdates,unstable_renderSubtreeIntoContainer:p};"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject
 &&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ComponentTree:{getClosestInstanceFromNode:r.getClosestInstanceFromNode,getNodeFromInstance:function(e){return e._renderedComponent&&(e=c(e)),e?r.getNodeFromInstance(e):null}},Mount:a,Reconciler:i});e.exports=d},function(e,t,n){"use strict";function r(e){for(var t;t=e._renderedComponent;)e=t;return e}function o(e,t){var n=r(e);n._hostNode=t,t[m]=n}function a(e){var t=e._hostNode;t&&(delete t[m],e._hostNode=null)}function i(e,t){if(!(e._flags&h.hasCachedChildNodes)){var n=e._renderedChildren,a=t.firstChild;e:for(var i in n)if(n.hasOwnProperty(i)){var s=n[i],u=r(s)._domID;if(null!=u){for(;null!==a;a=a.nextSibling)if(1===a.nodeType&&a.getAttribute(f)===String(u)||8===a.nodeType&&a.nodeValue===" react-text: "+u+" "||8===a.nodeType&&a.nodeValue===" react-empty: "+u+" "){o(s,a);continue e}c("32",u)}}e._flags|=h.hasCachedChildNodes}}functio
 n s(e){if(e[m])return e[m];for(var t=[];!e[m];){if(t.push(e),!e.parentNode)return null;e=e.parentNode}for(var n,r;e&&(r=e[m]);e=t.pop())n=r,t.length&&i(r,e);return n}function u(e){var t=s(e);return null!=t&&t._hostNode===e?t:null}function l(e){if(void 0===e._hostNode?c("33"):void 0,e._hostNode)return e._hostNode;for(var t=[];!e._hostNode;)t.push(e),e._hostParent?void 0:c("34"),e=e._hostParent;for(;t.length;e=t.pop())i(e,e._hostNode);return e._hostNode}var c=n(7),p=n(33),d=n(34),f=(n(8),p.ID_ATTRIBUTE_NAME),h=d,m="__reactInternalInstance$"+Math.random().toString(36).slice(2),v={getClosestInstanceFromNode:s,getInstanceFromNode:u,getNodeFromInstance:l,precacheChildNodes:i,precacheNode:o,uncacheNode:a};e.exports=v},function(e,t,n){"use strict";function r(e,t){return(e&t)===t}var o=n(7),a=(n(8),{MUST_USE_PROPERTY:1,HAS_BOOLEAN_VALUE:4,HAS_NUMERIC_VALUE:8,HAS_POSITIVE_NUMERIC_VALUE:24,HAS_OVERLOADED_BOOLEAN_VALUE:32,injec
 tDOMPropertyConfig:function(e){var t=a,n=e.Properties||{},i=e.DOMAttributeNamespaces||{},u=e.DOMAttributeNames||{},l=e.DOMPropertyNames||{},c=e.DOMMutationMethods||{};e.isCustomAttribute&&s._isCustomAttributeFunctions.push(e.isCustomAttribute);for(var p in n){s.properties.hasOwnProperty(p)?o("48",p):void 0;var d=p.toLowerCase(),f=n[p],h={attributeName:d,attributeNamespace:null,propertyName:p,mutationMethod:null,mustUseProperty:r(f,t.MUST_USE_PROPERTY),hasBooleanValue:r(f,t.HAS_BOOLEAN_VALUE),hasNumericValue:r(f,t.HAS_NUMERIC_VALUE),hasPositiveNumericValue:r(f,t.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:r(f,t.HAS_OVERLOADED_BOOLEAN_VALUE)};if(h.hasBooleanValue+h.hasNumericValue+h.hasOverloadedBooleanValue<=1?void 0:o("50",p),u.hasOwnProperty(p)){var m=u[p];h.attributeName=m}i.hasOwnProperty(p)&&(h.attributeNamespace=i[p]),l.hasOwnProperty(p)&&(h.propertyName=l[p]),c.hasOwnProperty(p)&&(h.mutationMethod=c[p]),s.propert
 ies[p]=h}}}),i=":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",s={ID_ATTRIBUTE_NAME:"data-reactid",ROOT_ATTRIBUTE_NAME:"data-reactroot",ATTRIBUTE_NAME_START_CHAR:i,ATTRIBUTE_NAME_CHAR:i+"\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040",properties:{},getPossibleStandardName:null,_isCustomAttributeFunctions:[],isCustomAttribute:function(e){for(var t=0;t<s._isCustomAttributeFunctions.length;t++){var n=s._isCustomAttributeFunctions[t];if(n(e))return!0}return!1},injection:a};e.exports=s},function(e,t){"use strict";var n={hasCachedChildNodes:1};e.exports=n},function(e,t,n){"use strict";function r(){E||(E=!0,g.EventEmitter.injectReactEventListener(v),g.EventPluginHub.injectEventPluginOrder(i),g.EventPluginUtils.injectComponentTree(p),g.EventPluginUtils.injectTreeTraversal(f),g.EventPluginHub.injectEventPl
 uginsByName({SimpleEventPlugin:C,EnterLeaveEventPlugin:s,ChangeEventPlugin:a,SelectEventPlugin:_,BeforeInputEventPlugin:o}),g.HostComponent.injectGenericComponentClass(c),g.HostComponent.injectTextComponentClass(h),g.DOMProperty.injectDOMPropertyConfig(u),g.DOMProperty.injectDOMPropertyConfig(b),g.EmptyComponent.injectEmptyComponentFactory(function(e){return new d(e)}),g.Updates.injectReconcileTransaction(y),g.Updates.injectBatchingStrategy(m),g.Component.injectEnvironment(l))}var o=n(36),a=n(51),i=n(63),s=n(64),u=n(69),l=n(70),c=n(84),p=n(32),d=n(125),f=n(126),h=n(127),m=n(128),v=n(129),g=n(132),y=n(133),b=n(141),_=n(142),C=n(143),E=!1;e.exports={inject:r}},function(e,t,n){"use strict";function r(){var e=window.opera;return"object"==typeof e&&"function"==typeof e.version&&parseInt(e.version(),10)<=12}function o(e){return(e.ctrlKey||e.altKey||e.metaKey)&&!(e.ctrlKey&&e.altKey)}function a(e){switch(e){case P.topComposit
 ionStart:return S.compositionStart;case P.topCompositionEnd:return S.compositionEnd;case P.topCompositionUpdate:return S.compositionUpdate}}function i(e,t){return e===P.topKeyDown&&t.keyCode===C}function s(e,t){switch(e){case P.topKeyUp:return _.indexOf(t.keyCode)!==-1;case P.topKeyDown:return t.keyCode!==C;case P.topKeyPress:case P.topMouseDown:case P.topBlur:return!0;default:return!1}}function u(e){var t=e.detail;return"object"==typeof t&&"data"in t?t.data:null}function l(e,t,n,r){var o,l;if(E?o=a(e):I?s(e,n)&&(o=S.compositionEnd):i(e,n)&&(o=S.compositionStart),!o)return null;w&&(I||o!==S.compositionStart?o===S.compositionEnd&&I&&(l=I.getData()):I=v.getPooled(r));var c=g.getPooled(o,t,n,r);if(l)c.data=l;else{var p=u(n);null!==p&&(c.data=p)}return h.accumulateTwoPhaseDispatches(c),c}function c(e,t){switch(e){case P.topCompositionEnd:return u(t);case P.topKeyPress:var n=t.which;return n!==N?null:(M=!
 0,k);case P.topTextInput:var r=t.data;return r===k&&M?null:r;default:return null}}function p(e,t){if(I){if(e===P.topCompositionEnd||s(e,t)){var n=I.getData();return v.release(I),I=null,n}return null}switch(e){case P.topPaste:return null;case P.topKeyPress:return t.which&&!o(t)?String.fromCharCode(t.which):null;case P.topCompositionEnd:return w?null:t.data;default:return null}}function d(e,t,n,r){var o;if(o=T?c(e,n):p(e,n),!o)return null;var a=y.getPooled(S.beforeInput,t,n,r);return a.data=o,h.accumulateTwoPhaseDispatches(a),a}var f=n(37),h=n(38),m=n(45),v=n(46),g=n(48),y=n(50),b=n(24),_=[9,13,27,32],C=229,E=m.canUseDOM&&"CompositionEvent"in window,x=null;m.canUseDOM&&"documentMode"in document&&(x=document.documentMode);var T=m.canUseDOM&&"TextEvent"in window&&!x&&!r(),w=m.canUseDOM&&(!E||x&&x>8&&x<=11),N=32,k=String.fromCharCode(N),P=f.topLevelTypes,S={beforeIn
 put:{phasedRegistrationNames:{bubbled:b({onBeforeInput:null}),captured:b({onBeforeInputCapture:null})},dependencies:[P.topCompositionEnd,P.topKeyPress,P.topTextInput,P.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:b({onCompositionEnd:null}),captured:b({onCompositionEndCapture:null})},dependencies:[P.topBlur,P.topCompositionEnd,P.topKeyDown,P.topKeyPress,P.topKeyUp,P.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:b({onCompositionStart:null}),captured:b({onCompositionStartCapture:null})},dependencies:[P.topBlur,P.topCompositionStart,P.topKeyDown,P.topKeyPress,P.topKeyUp,P.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:b({onCompositionUpdate:null}),captured:b({onCompositionUpdateCapture:null})},dependencies:[P.topBlur,P.topCompositionUpdate,P.topKeyDown,P.topKeyPress,P.topKeyUp,P.topMouseDown]}},M=!1,I=null,R={eventTypes:S,extractEvents:function(e,t,n,r){return[l(e,t,n,r),d(e,t,n,r)]}};e.exports=R},function(e,t,n){"use strict&qu
 ot;;var r=n(22),o=r({bubbled:null,captured:null}),a=r({topAbort:null,topAnimationEnd:null,topAnimationIteration:null,topAnimationStart:null,topBlur:null,topCanPlay:null,topCanPlayThrough:null,topChange:null,topClick:null,topCompositionEnd:null,topCompositionStart:null,topCompositionUpdate:null,topContextMenu:null,topCopy:null,topCut:null,topDoubleClick:null,topDrag:null,topDragEnd:null,topDragEnter:null,topDragExit:null,topDragLeave:null,topDragOver:null,topDragStart:null,topDrop:null,topDurationChange:null,topEmptied:null,topEncrypted:null,topEnded:null,topError:null,topFocus:null,topInput:null,topInvalid:null,topKeyDown:null,topKeyPress:null,topKeyUp:null,topLoad:null,topLoadedData:null,topLoadedMetadata:null,topLoadStart:null,topMouseDown:null,topMouseMove:null,topMouseOut:null,topMouseOver:null,topMouseUp:null,topPaste:null,topPause:null,topPlay:null,topPlaying:null,topProgress:null,topRateChange:null,topReset:null,topScroll:null,topSeeked:null,topSeeking:null,topSelectionChange
 :null,topStalled:null,topSubmit:null,topSuspend:null,topTextInput:null,topTimeUpdate:null,topTouchCancel:null,topTouchEnd:null,topTouchMove:null,topTouchStart:null,topTransitionEnd:null,topVolumeChange:null,topWaiting:null,topWheel:null}),i={topLevelTypes:a,PropagationPhases:o};e.exports=i},function(e,t,n){"use strict";function r(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return b(e,r)}function o(e,t,n){var o=t?y.bubbled:y.captured,a=r(e,n,o);a&&(n._dispatchListeners=v(n._dispatchListeners,a),n._dispatchInstances=v(n._dispatchInstances,e))}function a(e){e&&e.dispatchConfig.phasedRegistrationNames&&m.traverseTwoPhase(e._targetInst,o,e)}function i(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst,n=t?m.getParentInstance(t):null;m.traverseTwoPhase(n,o,e)}}function s(e,t,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=b(e,r);o&&(n._dispatchListeners=v(n._dis
 patchListeners,o),n._dispatchInstances=v(n._dispatchInstances,e))}}function u(e){e&&e.dispatchConfig.registrationName&&s(e._targetInst,null,e)}function l(e){g(e,a)}function c(e){g(e,i)}function p(e,t,n,r){m.traverseEnterLeave(n,r,s,e,t)}function d(e){g(e,u)}var f=n(37),h=n(39),m=n(41),v=n(43),g=n(44),y=(n(11),f.PropagationPhases),b=h.getListener,_={accumulateTwoPhaseDispatches:l,accumulateTwoPhaseDispatchesSkipTarget:c,accumulateDirectDispatches:d,accumulateEnterLeaveDispatches:p};e.exports=_},function(e,t,n){"use strict";var r=n(7),o=n(40),a=n(41),i=n(42),s=n(43),u=n(44),l=(n(8),{}),c=null,p=function(e,t){e&&(a.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e))},d=function(e){return p(e,!0)},f=function(e){return p(e,!1)},h={injection:{injectEventPluginOrder:o.injectEventPluginOrder,injectEventPluginsByName:o.injectEventPluginsByName},putListener:function(e,t,n){"function"!=typeof n?r("94",t,typeof n):void 
 0;var a=l[t]||(l[t]={});a[e._rootNodeID]=n;var i=o.registrationNameModules[t];i&&i.didPutListener&&i.didPutListener(e,t,n)},getListener:function(e,t){var n=l[t];return n&&n[e._rootNodeID]},deleteListener:function(e,t){var n=o.registrationNameModules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t);var r=l[t];r&&delete r[e._rootNodeID]},deleteAllListeners:function(e){for(var t in l)if(l.hasOwnProperty(t)&&l[t][e._rootNodeID]){var n=o.registrationNameModules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t),delete l[t][e._rootNodeID]}},extractEvents:function(e,t,n,r){for(var a,i=o.plugins,u=0;u<i.length;u++){var l=i[u];if(l){var c=l.extractEvents(e,t,n,r);c&&(a=s(a,c))}}return a},enqueueEvents:function(e){e&&(c=s(c,e))},processEventQueue:function(e){var t=c;c=null,e?u(t,d):u(t,f),c?r("95"):void 0,i.rethrowCaughtError()},__purge:function(){l={}},__getListenerBank:function(){ret
 urn l}};e.exports=h},function(e,t,n){"use strict";function r(){if(s)for(var e in u){var t=u[e],n=s.indexOf(e);if(n>-1?void 0:i("96",e),!l.plugins[n]){t.extractEvents?void 0:i("97",e),l.plugins[n]=t;var r=t.eventTypes;for(var a in r)o(r[a],t,a)?void 0:i("98",a,e);
-}}}function o(e,t,n){l.eventNameDispatchConfigs.hasOwnProperty(n)?i("99",n):void 0,l.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var s=r[o];a(s,t,n)}return!0}return!!e.registrationName&&(a(e.registrationName,t,n),!0)}function a(e,t,n){l.registrationNameModules[e]?i("100",e):void 0,l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var i=n(7),s=(n(8),null),u={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(e){s?i("101"):void 0,s=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];u.hasOwnProperty(n)&&u[n]===o||(u[n]?i("102",n):void 0,u[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.regist
 rationName)return l.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var r=l.registrationNameModules[t.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){s=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};e.exports=l},function(e,t,n){"use strict";function r(e){return e===y.topMouseUp||e===y.topTouchEnd||e===y.topTouchCancel}function o(e){return e===y.topMouseMove||e===y.topTouchMove}function a(e){return e===y.topMouseDown||e===y.topTouchStart}function i(e,t,n,r){var o=e.type||"unknown-event";e.currentTarget=b.getNodeFromInstance(r),t?v.invokeGuardedCallbackWithCatch(o,n,e):v.invokeGuardedCallback(o,n,e),e.currentTarget=null}function s(e,
 t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)i(e,t,n[o],r[o]);else n&&i(e,t,n,r);e._dispatchListeners=null,e._dispatchInstances=null}function u(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t)){for(var r=0;r<t.length&&!e.isPropagationStopped();r++)if(t[r](e,n[r]))return n[r]}else if(t&&t(e,n))return n;return null}function l(e){var t=u(e);return e._dispatchInstances=null,e._dispatchListeners=null,t}function c(e){var t=e._dispatchListeners,n=e._dispatchInstances;Array.isArray(t)?h("103"):void 0,e.currentTarget=t?b.getNodeFromInstance(n):null;var r=t?t(e):null;return e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,r}function p(e){return!!e._dispatchListeners}var d,f,h=n(7),m=n(37),v=n(42),g=(n(8),n(11),{injectComponentTree:function(e){d=e},injectTreeTraversal:function(e){f=e}}),y=m.topLevelTypes,b={isEndish:r,
 isMoveish:o,isStartish:a,executeDirectDispatch:c,executeDispatchesInOrder:s,executeDispatchesInOrderStopAtTrue:l,hasDispatches:p,getInstanceFromNode:function(e){return d.getInstanceFromNode(e)},getNodeFromInstance:function(e){return d.getNodeFromInstance(e)},isAncestor:function(e,t){return f.isAncestor(e,t)},getLowestCommonAncestor:function(e,t){return f.getLowestCommonAncestor(e,t)},getParentInstance:function(e){return f.getParentInstance(e)},traverseTwoPhase:function(e,t,n){return f.traverseTwoPhase(e,t,n)},traverseEnterLeave:function(e,t,n,r,o){return f.traverseEnterLeave(e,t,n,r,o)},injection:g};e.exports=b},function(e,t,n){"use strict";function r(e,t,n,r){try{return t(n,r)}catch(a){return void(null===o&&(o=a))}}var o=null,a={invokeGuardedCallback:r,invokeGuardedCallbackWithCatch:r,rethrowCaughtError:function(){if(o){var e=o;throw o=null,e}}};e.exports=a},function(e,t,n){"use strict";function r(e,t){return null==t?o("30"):void 0,null==e?t:Ar
 ray.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}var o=n(7);n(8);e.exports=r},function(e,t){"use strict";function n(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}e.exports=n},function(e,t){"use strict";var n=!("undefined"==typeof window||!window.document||!window.document.createElement),r={canUseDOM:n,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:n&&!!window.screen,isInWorker:!n};e.exports=r},function(e,t,n){"use strict";function r(e){this._root=e,this._startText=this.getText(),this._fallbackText=null}var o=n(4),a=n(6),i=n(47);o(r.prototype,{destructor:function(){this._root=null,this._startText=null,this._fallbackText=null},getText:function(){return"value"in this._root?this._root.value:this._root[i()]},getData:function(){if(this._fallbackText)retur
 n this._fallbackText;var e,t,n=this._startText,r=n.length,o=this.getText(),a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);var s=t>1?1-t:void 0;return this._fallbackText=o.slice(e,s),this._fallbackText}}),a.addPoolingTo(r),e.exports=r},function(e,t,n){"use strict";function r(){return!a&&o.canUseDOM&&(a="textContent"in document.documentElement?"textContent":"innerText"),a}var o=n(45),a=null;e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(49),a={data:null};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n;var o=this.constructor.Interface;for(var a in o)if(o.hasOwnProperty(a)){var s=o[a];s?this[a]=s(n):"target"===a?this.target=r:this[a]=n[a]}var u=null!=n.defaultPrevented?n.defaultPrevented:n.returnV
 alue===!1;return u?this.isDefaultPrevented=i.thatReturnsTrue:this.isDefaultPrevented=i.thatReturnsFalse,this.isPropagationStopped=i.thatReturnsFalse,this}var o=n(4),a=n(6),i=n(12),s=(n(11),"function"==typeof Proxy,["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"]),u={type:null,target:null,currentTarget:i.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};o(r.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():e.returnValue=!1,this.isDefaultPrevented=i.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,this.isPropagationStopped=i.thatReturnsTrue)},persist:funct
 ion(){this.isPersistent=i.thatReturnsTrue},isPersistent:i.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;for(var n=0;n<s.length;n++)this[s[n]]=null}}),r.Interface=u,r.augmentClass=function(e,t){var n=this,r=function(){};r.prototype=n.prototype;var i=new r;o(i,e.prototype),e.prototype=i,e.prototype.constructor=e,e.Interface=o({},n.Interface,t),e.augmentClass=n.augmentClass,a.addPoolingTo(e,a.fourArgumentPooler)},a.addPoolingTo(r,a.fourArgumentPooler),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(49),a={data:null};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e){var t=e.nodeName&&e.nodeName.toLowerCase();return"select"===t||"input"===t&&"file"===e.type}function o(e){var t=T.getPooled(M.change,R,e,w(e));_.accumulateTwoPhaseDispatches(t),x.batchedUpdates(a,t)}function a(e){b.enqueueEvents(
 e),b.processEventQueue(!1)}function i(e,t){I=e,R=t,I.attachEvent("onchange",o)}function s(){I&&(I.detachEvent("onchange",o),I=null,R=null)}function u(e,t){if(e===S.topChange)return t}function l(e,t,n){e===S.topFocus?(s(),i(t,n)):e===S.topBlur&&s()}function c(e,t){I=e,R=t,O=e.value,D=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(I,"value",U),I.attachEvent?I.attachEvent("onpropertychange",d):I.addEventListener("propertychange",d,!1)}function p(){I&&(delete I.value,I.detachEvent?I.detachEvent("onpropertychange",d):I.removeEventListener("propertychange",d,!1),I=null,R=null,O=null,D=null)}function d(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==O&&(O=t,o(e))}}function f(e,t){if(e===S.topInput)return t}function h(e,t,n){e===S.topFocus?(p(),c(t,n)):e===S.topBlur&&p()}function m(e,t){if((e===S.topSelectionCh
 ange||e===S.topKeyUp||e===S.topKeyDown)&&I&&I.value!==O)return O=I.value,R}function v(e){return e.nodeName&&"input"===e.nodeName.toLowerCase()&&("checkbox"===e.type||"radio"===e.type)}function g(e,t){if(e===S.topClick)return t}var y=n(37),b=n(39),_=n(38),C=n(45),E=n(32),x=n(52),T=n(49),w=n(60),N=n(61),k=n(62),P=n(24),S=y.topLevelTypes,M={change:{phasedRegistrationNames:{bubbled:P({onChange:null}),captured:P({onChangeCapture:null})},dependencies:[S.topBlur,S.topChange,S.topClick,S.topFocus,S.topInput,S.topKeyDown,S.topKeyUp,S.topSelectionChange]}},I=null,R=null,O=null,D=null,A=!1;C.canUseDOM&&(A=N("change")&&(!("documentMode"in document)||document.documentMode>8));var L=!1;C.canUseDOM&&(L=N("input")&&(!("documentMode"in document)||document.documentMode>11));var U={get:function(){return D.get.call(this)},set:function(e){O=""+e,D.set.call
 (this,e)}},F={eventTypes:M,extractEvents:function(e,t,n,o){var a,i,s=t?E.getNodeFromInstance(t):window;if(r(s)?A?a=u:i=l:k(s)?L?a=f:(a=m,i=h):v(s)&&(a=g),a){var c=a(e,t);if(c){var p=T.getPooled(M.change,c,n,o);return p.type="change",_.accumulateTwoPhaseDispatches(p),p}}i&&i(e,s,t)}};e.exports=F},function(e,t,n){"use strict";function r(){k.ReactReconcileTransaction&&C?void 0:c("123")}function o(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=d.getPooled(),this.reconcileTransaction=k.ReactReconcileTransaction.getPooled(!0)}function a(e,t,n,o,a,i){r(),C.batchedUpdates(e,t,n,o,a,i)}function i(e,t){return e._mountOrder-t._mountOrder}function s(e){var t=e.dirtyComponentsLength;t!==g.length?c("124",t,g.length):void 0,g.sort(i),y++;for(var n=0;n<t;n++){var r=g[n],o=r._pendingCallbacks;r._pendingCallbacks=null;var a;if(h.logTopLevelRenders){var s=r;r._currentElement.props===r._renderedCompo
 nent._currentElement&&(s=r._renderedComponent),a="React update: "+s.getName(),console.time(a)}if(m.performUpdateIfNecessary(r,e.reconcileTransaction,y),a&&console.timeEnd(a),o)for(var u=0;u<o.length;u++)e.callbackQueue.enqueue(o[u],r.getPublicInstance())}}function u(e){return r(),C.isBatchingUpdates?(g.push(e),void(null==e._updateBatchNumber&&(e._updateBatchNumber=y+1))):void C.batchedUpdates(u,e)}function l(e,t){C.isBatchingUpdates?void 0:c("125"),b.enqueue(e,t),_=!0}var c=n(7),p=n(4),d=n(53),f=n(6),h=n(54),m=n(55),v=n(59),g=(n(8),[]),y=0,b=d.getPooled(),_=!1,C=null,E={initialize:function(){this.dirtyComponentsLength=g.length},close:function(){this.dirtyComponentsLength!==g.length?(g.splice(0,this.dirtyComponentsLength),w()):g.length=0}},x={initialize:function(){this.callbackQueue.reset()},close:function(){this.callbackQueue.notifyAll()}},T=[E,x];p(o.prototype,v.Mixin,{getTransactionWrappers:function(){return T},destructor:function(){t
 his.dirtyComponentsLength=null,d.release(this.callbackQueue),this.callbackQueue=null,k.ReactReconcileTransaction.release(this.reconcileTransaction),this.reconcileTransaction=null},perform:function(e,t,n){return v.Mixin.perform.call(this,this.reconcileTransaction.perform,this.reconcileTransaction,e,t,n)}}),f.addPoolingTo(o);var w=function(){for(;g.length||_;){if(g.length){var e=o.getPooled();e.perform(s,null,e),o.release(e)}if(_){_=!1;var t=b;b=d.getPooled(),t.notifyAll(),d.release(t)}}},N={injectReconcileTransaction:function(e){e?void 0:c("126"),k.ReactReconcileTransaction=e},injectBatchingStrategy:function(e){e?void 0:c("127"),"function"!=typeof e.batchedUpdates?c("128"):void 0,"boolean"!=typeof e.isBatchingUpdates?c("129"):void 0,C=e}},k={ReactReconcileTransaction:null,batchedUpdates:a,enqueueUpdate:u,flushBatchedUpdates:w,injection:N,asap:l};e.exports=k},function(e,t,n){"use strict";function r(){this._callbacks
 =null,this._contexts=null}var o=n(7),a=n(4),i=n(6);n(8);a(r.prototype,{enqueue:function(e,t){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(e),this._contexts.push(t)},notifyAll:function(){var e=this._callbacks,t=this._contexts;if(e){e.length!==t.length?o("24"):void 0,this._callbacks=null,this._contexts=null;for(var n=0;n<e.length;n++)e[n].call(t[n]);e.length=0,t.length=0}},checkpoint:function(){return this._callbacks?this._callbacks.length:0},rollback:function(e){this._callbacks&&(this._callbacks.length=e,this._contexts.length=e)},reset:function(){this._callbacks=null,this._contexts=null},destructor:function(){this.reset()}}),i.addPoolingTo(r),e.exports=r},function(e,t){"use strict";var n={logTopLevelRenders:!1};e.exports=n},function(e,t,n){"use strict";function r(){a.attachRefs(this,this._currentElement)}var o=n(7),a=n(56),i=(n(58),n(8),{mountComponent:function(e,t,n,o,a){var i=e.mountComponent(t,n
 ,o,a);return e._currentElement&&null!=e._currentElement.ref&&t.getReactMountReady().enqueue(r,e),i},getHostNode:function(e){return e.getHostNode()},unmountComponent:function(e,t){a.detachRefs(e,e._currentElement),e.unmountComponent(t)},receiveComponent:function(e,t,n,o){var i=e._currentElement;if(t!==i||o!==e._context){var s=a.shouldUpdateRefs(i,t);s&&a.detachRefs(e,i),e.receiveComponent(t,n,o),s&&e._currentElement&&null!=e._currentElement.ref&&n.getReactMountReady().enqueue(r,e)}},performUpdateIfNecessary:function(e,t,n){return e._updateBatchNumber!==n?void(null!=e._updateBatchNumber&&e._updateBatchNumber!==n+1?o("121",n,e._updateBatchNumber):void 0):void e.performUpdateIfNecessary(t)}});e.exports=i},function(e,t,n){"use strict";function r(e,t,n){"function"==typeof e?e(t.getPublicInstance()):a.addComponentAsRefTo(t,e,n)}function o(e,t,n){"function"==typeof e?e(null):a.removeComponentAsRe
 fFrom(t,e,n)}var a=n(57),i={};i.attachRefs=function(e,t){if(null!==t&&t!==!1){var n=t.ref;null!=n&&r(n,e,t._owner)}},i.shouldUpdateRefs=function(e,t){var n=null===e||e===!1,r=null===t||t===!1;return n||r||t._owner!==e._owner||t.ref!==e.ref},i.detachRefs=function(e,t){if(null!==t&&t!==!1){var n=t.ref;null!=n&&o(n,e,t._owner)}},e.exports=i},function(e,t,n){"use strict";var r=n(7),o=(n(8),{isValidOwner:function(e){return!(!e||"function"!=typeof e.attachRef||"function"!=typeof e.detachRef)},addComponentAsRefTo:function(e,t,n){o.isValidOwner(n)?void 0:r("119"),n.attachRef(t,e)},removeComponentAsRefFrom:function(e,t,n){o.isValidOwner(n)?void 0:r("120");var a=n.getPublicInstance();a&&a.refs[t]===e.getPublicInstance()&&n.detachRef(t)}});e.exports=o},function(e,t,n){"use strict";var r=null;e.exports={debugTool:r}},function(e,t,n){"use strict";var r=n(7),o=(n(8),{reinitializeT
 ransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,t,n,o,a,i,s,u){this.isInTransaction()?r("27"):void 0;var l,c;try{this._isInTransaction=!0,l=!0,this.initializeAll(0),c=e.call(t,n,o,a,i,s,u),l=!1}finally{try{if(l)try{this.closeAll(0)}catch(p){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return c},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n<t.length;n++){var r=t[n];try{this.wrapperInitData[n]=a.OBSERVED_ERROR,this.wrapperInitData[n]=r.initialize?r.initialize.call(this):null}finally{if(this.wrapperInitData[n]===a.OBSERVED_ERROR)try{this.initializeAll(n+1)}catch(o){}}}},closeAll:function(e){this.isInTransaction()?void 0:r("28");for(var t=this.transactionWrappers,n=e;n<t.length;
 n++){var o,i=t[n],s=this.wrapperInitData[n];try{o=!0,s!==a.OBSERVED_ERROR&&i.close&&i.close.call(this,s),o=!1}finally{if(o)try{this.closeAll(n+1)}catch(u){}}}this.wrapperInitData.length=0}}),a={Mixin:o,OBSERVED_ERROR:{}};e.exports=a},function(e,t){"use strict";function n(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}e.exports=n},function(e,t,n){"use strict";/**
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}(function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))switch(typeof e[t]){case"function":break;case"object":e[t]=function(t){var n=t.slice(1),r=e[t[0]];return function(e,t,o){r.apply(this,[e,t,o].concat(n))}}(e[t]);break;default:e[t]=e[e[t]]}return e}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}for(var o=n(2),i=r(o),a=n(29),s=n(167),u=r(s),l=document.querySelectorAll("#screenshots figure"),c=[],p=0;p<l.length;p++){var d=l[p].querySelector("figcaption"),f={src:l[p].querySelector("img.screenshot").src,caption:d?d.textContent:&quot
 ;"};c.push(f)}c.length>0&&(0,a.render)(i.default.createElement(u.default,{screenshots:c}),document.getElementById("screenshots"))},function(e,t,n){"use strict";e.exports=n(3)},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(18),a=n(21),s=n(22),u=n(24),l=n(9),c=n(25),p=n(27),d=n(28),f=(n(11),l.createElement),h=l.createFactory,v=l.cloneElement,m=r,g={Children:{map:o.map,forEach:o.forEach,count:o.count,toArray:o.toArray,only:d},Component:i,PureComponent:a,createElement:f,cloneElement:v,isValidElement:l.isValidElement,PropTypes:c,createClass:s.createClass,createFactory:h,createMixin:function(e){return e},DOM:u,version:p,__spread:m};e.exports=g},function(e,t){"use strict";function n(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function r(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Obj
 ect.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(e){return t[e]});if("0123456789"!==r.join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(e){o[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(e){return!1}}var o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=r()?Object.assign:function(e,t){for(var r,a,s=n(e),u=1;u<arguments.length;u++){r=Object(arguments[u]);for(var l in r)o.call(r,l)&&(s[l]=r[l]);if(Object.getOwnPropertySymbols){a=Object.getOwnPropertySymbols(r);for(var c=0;c<a.length;c++)i.call(r,a[c])&&(s[a[c]]=r[a[c]])}}return s}},function(e,t,n){"use strict";function r(e){return(""+e).replace(b,"$&/")}function o(e,t){this.func=e,this.context=t,this.count=0}funct
 ion i(e,t,n){var r=e.func,o=e.context;r.call(o,t,e.count++)}function a(e,t,n){if(null==e)return e;var r=o.getPooled(t,n);g(e,i,r),o.release(r)}function s(e,t,n,r){this.result=e,this.keyPrefix=t,this.func=n,this.context=r,this.count=0}function u(e,t,n){var o=e.result,i=e.keyPrefix,a=e.func,s=e.context,u=a.call(s,t,e.count++);Array.isArray(u)?l(u,o,n,m.thatReturnsArgument):null!=u&&(v.isValidElement(u)&&(u=v.cloneAndReplaceKey(u,i+(!u.key||t&&t.key===u.key?"":r(u.key)+"/")+n)),o.push(u))}function l(e,t,n,o,i){var a="";null!=n&&(a=r(n)+"/");var l=s.getPooled(t,a,o,i);g(e,u,l),s.release(l)}function c(e,t,n){if(null==e)return e;var r=[];return l(e,r,null,t,n),r}function p(e,t,n){return null}function d(e,t){return g(e,p,null)}function f(e){var t=[];return l(e,t,null,m.thatReturnsArgument),t}var h=n(6),v=n(9),m=n(12),g=n(15),y=h.twoArgumentPooler,_=h.fourArgumentPooler,b=/\/+/g;o.prototype.destructor=function(){this.fu
 nc=null,this.context=null,this.count=0},h.addPoolingTo(o,y),s.prototype.destructor=function(){this.result=null,this.keyPrefix=null,this.func=null,this.context=null,this.count=0},h.addPoolingTo(s,_);var C={forEach:a,map:c,mapIntoWithKeyPrefixInternal:l,count:d,toArray:f};e.exports=C},[285,7],function(e,t){"use strict";function n(e){for(var t=arguments.length-1,n="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);n+=" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.";var o=new Error(n);throw o.name="Invariant Violation",o.framesToPop=1,o}e.exports=n},function(e,t,n){"use strict";function r(e,t,n,r,i,a,s,u){if(o(t),!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full er
 ror message and additional helpful warnings.");else{var c=[n,r,i,a,s,u],p=0;l=new Error(t.replace(/%s/g,function(){return c[p++]})),l.name="Invariant Violation"}throw l.framesToPop=1,l}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";function r(e){return void 0!==e.ref}function o(e){return void 0!==e.key}var i=n(4),a=n(10),s=(n(11),n(13),Object.prototype.hasOwnProperty),u=n(14),l={key:!0,ref:!0,__self:!0,__source:!0},c=function(e,t,n,r,o,i,a){var s={$$typeof:u,type:e,key:t,ref:n,props:a,_owner:i};return s};c.createElement=function(e,t,n){var i,u={},p=null,d=null,f=null,h=null;if(null!=t){r(t)&&(d=t.ref),o(t)&&(p=""+t.key),f=void 0===t.__self?null:t.__self,h=void 0===t.__source?null:t.__source;for(i in t)s.call(t,i)&&!l.hasOwnProperty(i)&&(u[i]=t[i])}var v=arguments.length-2;if(1===v)u.children=n;else if(v>1){for(var m=Array(v),g=0;g<v;g++)m[g]=arguments[g+2];u.children=m}if(e&&e.defaultPro
 ps){var y=e.defaultProps;for(i in y)void 0===u[i]&&(u[i]=y[i])}return c(e,p,d,f,h,a.current,u)},c.createFactory=function(e){var t=c.createElement.bind(null,e);return t.type=e,t},c.cloneAndReplaceKey=function(e,t){var n=c(e.type,t,e.ref,e._self,e._source,e._owner,e.props);return n},c.cloneElement=function(e,t,n){var u,p=i({},e.props),d=e.key,f=e.ref,h=e._self,v=e._source,m=e._owner;if(null!=t){r(t)&&(f=t.ref,m=a.current),o(t)&&(d=""+t.key);var g;e.type&&e.type.defaultProps&&(g=e.type.defaultProps);for(u in t)s.call(t,u)&&!l.hasOwnProperty(u)&&(void 0===t[u]&&void 0!==g?p[u]=g[u]:p[u]=t[u])}var y=arguments.length-2;if(1===y)p.children=n;else if(y>1){for(var _=Array(y),b=0;b<y;b++)_[b]=arguments[b+2];p.children=_}return c(e.type,d,f,h,v,m,p)},c.isValidElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===u},e.exports=c},function(e,t){"use strict";var n={cur
 rent:null};e.exports=n},function(e,t,n){"use strict";var r=n(12),o=r;e.exports=o},function(e,t){"use strict";function n(e){return function(){return e}}var r=function(){};r.thatReturns=n,r.thatReturnsFalse=n(!1),r.thatReturnsTrue=n(!0),r.thatReturnsNull=n(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(e){return e},e.exports=r},function(e,t,n){"use strict";var r=!1;e.exports=r},function(e,t){"use strict";var n="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103;e.exports=n},function(e,t,n){"use strict";function r(e,t){return e&&"object"==typeof e&&null!=e.key?l.escape(e.key):t.toString(36)}function o(e,t,n,i){var d=typeof e;if("undefined"!==d&&"boolean"!==d||(e=null),null===e||"string"===d||"number"===d||"object"===d&&e.$$typeof===s)return n(i,e,"&quot
 ;===t?c+r(e,0):t),1;var f,h,v=0,m=""===t?c:t+p;if(Array.isArray(e))for(var g=0;g<e.length;g++)f=e[g],h=m+r(f,g),v+=o(f,h,n,i);else{var y=u(e);if(y){var _,b=y.call(e);if(y!==e.entries)for(var C=0;!(_=b.next()).done;)f=_.value,h=m+r(f,C++),v+=o(f,h,n,i);else for(;!(_=b.next()).done;){var x=_.value;x&&(f=x[1],h=m+l.escape(x[0])+p+r(f,0),v+=o(f,h,n,i))}}else if("object"===d){var E="",w=String(e);a("31","[object Object]"===w?"object with keys {"+Object.keys(e).join(", ")+"}":w,E)}}return v}function i(e,t,n){return null==e?0:o(e,"",t,n)}var a=n(7),s=(n(10),n(14)),u=n(16),l=(n(8),n(17)),c=(n(11),"."),p=":";e.exports=i},function(e,t){"use strict";function n(e){var t=e&&(r&&e[r]||e[o]);if("function"==typeof t)return t}var r="function"==typeof Symbol&&Symbol.iterator,o="@@iterator";e.exports=n},function(e,t){&q
 uot;use strict";function n(e){var t=/[=:]/g,n={"=":"=0",":":"=2"},r=(""+e).replace(t,function(e){return n[e]});return"$"+r}function r(e){var t=/(=0|=2)/g,n={"=0":"=","=2":":"},r="."===e[0]&&"$"===e[1]?e.substring(2):e.substring(1);return(""+r).replace(t,function(e){return n[e]})}var o={escape:n,unescape:r};e.exports=o},function(e,t,n){"use strict";function r(e,t,n){this.props=e,this.context=t,this.refs=a,this.updater=n||i}var o=n(7),i=n(19),a=(n(13),n(20));n(8),n(11);r.prototype.isReactComponent={},r.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e?o("85"):void 0,this.updater.enqueueSetState(this,e),t&&this.updater.enqueueCallback(this,t,"setState")},r.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this),e&&th
 is.updater.enqueueCallback(this,e,"forceUpdate")};e.exports=r},function(e,t,n){"use strict";function r(e,t){}var o=(n(11),{isMounted:function(e){return!1},enqueueCallback:function(e,t){},enqueueForceUpdate:function(e){r(e,"forceUpdate")},enqueueReplaceState:function(e,t){r(e,"replaceState")},enqueueSetState:function(e,t){r(e,"setState")}});e.exports=o},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";function r(e,t,n){this.props=e,this.context=t,this.refs=u,this.updater=n||s}function o(){}var i=n(4),a=n(18),s=n(19),u=n(20);o.prototype=a.prototype,r.prototype=new o,r.prototype.constructor=r,i(r.prototype,a.prototype),r.prototype.isPureReactComponent=!0,e.exports=r},function(e,t,n){"use strict";function r(e){return e}function o(e,t){var n=b.hasOwnProperty(t)?b[t]:null;x.hasOwnProperty(t)&&("OVERRIDE_BASE"!==n?d("73",t):void 0),e&&("DEF
 INE_MANY"!==n&&"DEFINE_MANY_MERGED"!==n?d("74",t):void 0)}function i(e,t){if(t){"function"==typeof t?d("75"):void 0,v.isValidElement(t)?d("76"):void 0;var n=e.prototype,r=n.__reactAutoBindPairs;t.hasOwnProperty(y)&&C.mixins(e,t.mixins);for(var i in t)if(t.hasOwnProperty(i)&&i!==y){var a=t[i],s=n.hasOwnProperty(i);if(o(s,i),C.hasOwnProperty(i))C[i](e,a);else{var c=b.hasOwnProperty(i),p="function"==typeof a,f=p&&!c&&!s&&t.autobind!==!1;if(f)r.push(i,a),n[i]=a;else if(s){var h=b[i];!c||"DEFINE_MANY_MERGED"!==h&&"DEFINE_MANY"!==h?d("77",h,i):void 0,"DEFINE_MANY_MERGED"===h?n[i]=u(n[i],a):"DEFINE_MANY"===h&&(n[i]=l(n[i],a))}else n[i]=a}}}else;}function a(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in C;o?d("78",n):void 0;var i=n in e;i?d("79",n):void 0,e[n]=r}}}functi
 on s(e,t){e&&t&&"object"==typeof e&&"object"==typeof t?void 0:d("80");for(var n in t)t.hasOwnProperty(n)&&(void 0!==e[n]?d("81",n):void 0,e[n]=t[n]);return e}function u(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return s(o,n),s(o,r),o}}function l(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function c(e,t){var n=t.bind(e);return n}function p(e){for(var t=e.__reactAutoBindPairs,n=0;n<t.length;n+=2){var r=t[n],o=t[n+1];e[r]=c(e,o)}}var d=n(7),f=n(4),h=n(18),v=n(9),m=(n(23),n(19)),g=n(20),y=(n(8),n(11),"mixins"),_=[],b={mixins:"DEFINE_MANY",statics:"DEFINE_MANY",propTypes:"DEFINE_MANY",contextTypes:"DEFINE_MANY",childContextTypes:"DEFINE_MANY",getDefaultProps:"DEFINE_MANY_MERGED",getInitialState:"DEFINE_MANY_MERGED",getChil
 dContext:"DEFINE_MANY_MERGED",render:"DEFINE_ONCE",componentWillMount:"DEFINE_MANY",componentDidMount:"DEFINE_MANY",componentWillReceiveProps:"DEFINE_MANY",shouldComponentUpdate:"DEFINE_ONCE",componentWillUpdate:"DEFINE_MANY",componentDidUpdate:"DEFINE_MANY",componentWillUnmount:"DEFINE_MANY",updateComponent:"OVERRIDE_BASE"},C={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n<t.length;n++)i(e,t[n])},childContextTypes:function(e,t){e.childContextTypes=f({},e.childContextTypes,t)},contextTypes:function(e,t){e.contextTypes=f({},e.contextTypes,t)},getDefaultProps:function(e,t){e.getDefaultProps?e.getDefaultProps=u(e.getDefaultProps,t):e.getDefaultProps=t},propTypes:function(e,t){e.propTypes=f({},e.propTypes,t)},statics:function(e,t){a(e,t)},autobind:function(){}},x={replaceState:function(e,t){this.updater.enqueueReplaceState(this,e),t&&this.upd
 ater.enqueueCallback(this,t,"replaceState")},isMounted:function(){return this.updater.isMounted(this)}},E=function(){};f(E.prototype,h.prototype,x);var w={createClass:function(e){var t=r(function(e,n,r){this.__reactAutoBindPairs.length&&p(this),this.props=e,this.context=n,this.refs=g,this.updater=r||m,this.state=null;var o=this.getInitialState?this.getInitialState():null;"object"!=typeof o||Array.isArray(o)?d("82",t.displayName||"ReactCompositeComponent"):void 0,this.state=o});t.prototype=new E,t.prototype.constructor=t,t.prototype.__reactAutoBindPairs=[],_.forEach(i.bind(null,t)),i(t,e),t.getDefaultProps&&(t.defaultProps=t.getDefaultProps()),t.prototype.render?void 0:d("83");for(var n in b)t.prototype[n]||(t.prototype[n]=null);return t},injection:{injectMixin:function(e){_.push(e)}}};e.exports=w},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";var r=n(9),o=r.createF
 actory,i={a:o("a"),abbr:o("abbr"),address:o("address"),area:o("area"),article:o("article"),aside:o("aside"),audio:o("audio"),b:o("b"),base:o("base"),bdi:o("bdi"),bdo:o("bdo"),big:o("big"),blockquote:o("blockquote"),body:o("body"),br:o("br"),button:o("button"),canvas:o("canvas"),caption:o("caption"),cite:o("cite"),code:o("code"),col:o("col"),colgroup:o("colgroup"),data:o("data"),datalist:o("datalist"),dd:o("dd"),del:o("del"),details:o("details"),dfn:o("dfn"),dialog:o("dialog"),div:o("div"),dl:o("dl"),dt:o("dt"),em:o("em"),embed:o("embed"),fieldset:o("fieldset"),figcaption:o("figcaption"),figure:o("figure"),footer:o(&quot
 ;footer"),form:o("form"),h1:o("h1"),h2:o("h2"),h3:o("h3"),h4:o("h4"),h5:o("h5"),h6:o("h6"),head:o("head"),header:o("header"),hgroup:o("hgroup"),hr:o("hr"),html:o("html"),i:o("i"),iframe:o("iframe"),img:o("img"),input:o("input"),ins:o("ins"),kbd:o("kbd"),keygen:o("keygen"),label:o("label"),legend:o("legend"),li:o("li"),link:o("link"),main:o("main"),map:o("map"),mark:o("mark"),menu:o("menu"),menuitem:o("menuitem"),meta:o("meta"),meter:o("meter"),nav:o("nav"),noscript:o("noscript"),object:o("object"),ol:o("ol"),optgroup:o("optgroup"),option:o("option"),output:o("output"),p:o("p"),param:o("param"),p
 icture:o("picture"),pre:o("pre"),progress:o("progress"),q:o("q"),rp:o("rp"),rt:o("rt"),ruby:o("ruby"),s:o("s"),samp:o("samp"),script:o("script"),section:o("section"),select:o("select"),small:o("small"),source:o("source"),span:o("span"),strong:o("strong"),style:o("style"),sub:o("sub"),summary:o("summary"),sup:o("sup"),table:o("table"),tbody:o("tbody"),td:o("td"),textarea:o("textarea"),tfoot:o("tfoot"),th:o("th"),thead:o("thead"),time:o("time"),title:o("title"),tr:o("tr"),track:o("track"),u:o("u"),ul:o("ul"),var:o("var"),video:o("video"),wbr:o("wbr"),circle:o("circle"),clipPath:o("clipPath"),defs:o("defs&qu
 ot;),ellipse:o("ellipse"),g:o("g"),image:o("image"),line:o("line"),linearGradient:o("linearGradient"),mask:o("mask"),path:o("path"),pattern:o("pattern"),polygon:o("polygon"),polyline:o("polyline"),radialGradient:o("radialGradient"),rect:o("rect"),stop:o("stop"),svg:o("svg"),text:o("text"),tspan:o("tspan")};e.exports=i},function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function o(e){this.message=e,this.stack=""}function i(e){function t(t,n,r,i,a,s,u){i=i||k,s=s||r;if(null==n[r]){var l=x[a];return t?new o(null===n[r]?"The "+l+" `"+s+"` is marked as required "+("in `"+i+"`, but its value is `null`."):"The "+l+" `"+s+"` is marked as required in "+("`"+i+"`, but its value 
 is `undefined`.")):null}return e(n,r,i,a,s)}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function a(e){function t(t,n,r,i,a,s){var u=t[n],l=y(u);if(l!==e){var c=x[i],p=_(u);return new o("Invalid "+c+" `"+a+"` of type "+("`"+p+"` supplied to `"+r+"`, expected ")+("`"+e+"`."))}return null}return i(t)}function s(){return i(w.thatReturns(null))}function u(e){function t(t,n,r,i,a){if("function"!=typeof e)return new o("Property `"+a+"` of component `"+r+"` has invalid PropType notation inside arrayOf.");var s=t[n];if(!Array.isArray(s)){var u=x[i],l=y(s);return new o("Invalid "+u+" `"+a+"` of type "+("`"+l+"` supplied to `"+r+"`, expected an array."))}for(var c=0;c<s.length;c++){var p=e(s,c,r,i,a+"["+c+"]",E);if(p instanceof Error)return p}return null}return i(t)}functio
 n l(){function e(e,t,n,r,i){var a=e[t];if(!C.isValidElement(a)){var s=x[r],u=y(a);return new o("Invalid "+s+" `"+i+"` of type "+("`"+u+"` supplied to `"+n+"`, expected a single ReactElement."))}return null}return i(e)}function c(e){function t(t,n,r,i,a){if(!(t[n]instanceof e)){var s=x[i],u=e.name||k,l=b(t[n]);return new o("Invalid "+s+" `"+a+"` of type "+("`"+l+"` supplied to `"+r+"`, expected ")+("instance of `"+u+"`."))}return null}return i(t)}function p(e){function t(t,n,i,a,s){for(var u=t[n],l=0;l<e.length;l++)if(r(u,e[l]))return null;var c=x[a],p=JSON.stringify(e);return new o("Invalid "+c+" `"+s+"` of value `"+u+"` "+("supplied to `"+i+"`, expected one of "+p+"."))}return Array.isArray(e)?i(t):w.thatReturnsNull}function d(e){function t(t,n,r,i,a){if("function&quo
 t;!=typeof e)return new o("Property `"+a+"` of component `"+r+"` has invalid PropType notation inside objectOf.");var s=t[n],u=y(s);if("object"!==u){var l=x[i];return new o("Invalid "+l+" `"+a+"` of type "+("`"+u+"` supplied to `"+r+"`, expected an object."))}for(var c in s)if(s.hasOwnProperty(c)){var p=e(s,c,r,i,a+"."+c,E);if(p instanceof Error)return p}return null}return i(t)}function f(e){function t(t,n,r,i,a){for(var s=0;s<e.length;s++){var u=e[s];if(null==u(t,n,r,i,a,E))return null}var l=x[i];return new o("Invalid "+l+" `"+a+"` supplied to "+("`"+r+"`."))}return Array.isArray(e)?i(t):w.thatReturnsNull}function h(){function e(e,t,n,r,i){if(!m(e[t])){var a=x[r];return new o("Invalid "+a+" `"+i+"` supplied to "+("`"+n+"`, expected a ReactNode."))}return null}return i(e)}f
 unction v(e){function t(t,n,r,i,a){var s=t[n],u=y(s);if("object"!==u){var l=x[i];return new o("Invalid "+l+" `"+a+"` of type `"+u+"` "+("supplied to `"+r+"`, expected `object`."))}for(var c in e){var p=e[c];if(p){var d=p(s,c,r,i,a+"."+c,E);if(d)return d}}return null}return i(t)}function m(e){switch(typeof e){case"number":case"string":case"undefined":return!0;case"boolean":return!e;case"object":if(Array.isArray(e))return e.every(m);if(null===e||C.isValidElement(e))return!0;var t=T(e);if(!t)return!1;var n,r=t.call(e);if(t!==e.entries){for(;!(n=r.next()).done;)if(!m(n.value))return!1}else for(;!(n=r.next()).done;){var o=n.value;if(o&&!m(o[1]))return!1}return!0;default:return!1}}function g(e,t){return"symbol"===e||("Symbol"===t["@@toStringTag"]||"function"==typeof Symbol&&t instanceof Symbol)}function y(
 e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":g(t,e)?"symbol":t}function _(e){var t=y(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}function b(e){return e.constructor&&e.constructor.name?e.constructor.name:k}var C=n(9),x=n(23),E=n(26),w=n(12),T=n(16),k=(n(11),"<<anonymous>>"),P={array:a("array"),bool:a("boolean"),func:a("function"),number:a("number"),object:a("object"),string:a("string"),symbol:a("symbol"),any:s(),arrayOf:u,element:l(),instanceOf:c,node:h(),objectOf:d,oneOf:p,oneOfType:f,shape:v};o.prototype=Error.prototype,e.exports=P},function(e,t){"use strict";var n="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";e.exports=n},function(e,t){"use strict";e.exports="15.4.1"},function(e,t,n){"use 
 strict";function r(e){return i.isValidElement(e)?void 0:o("143"),e}var o=n(7),i=n(9);n(8);e.exports=r},function(e,t,n){"use strict";e.exports=n(30)},function(e,t,n){"use strict";var r=n(31),o=n(35),i=n(158),a=n(56),s=n(53),u=n(163),l=n(164),c=n(165),p=n(166);n(11);o.inject();var d={findDOMNode:l,render:i.render,unmountComponentAtNode:i.unmountComponentAtNode,version:u,unstable_batchedUpdates:s.batchedUpdates,unstable_renderSubtreeIntoContainer:p};"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ComponentTree:{getClosestInstanceFromNode:r.getClosestInstanceFromNode,getNodeFromInstance:function(e){return e._renderedComponent&&(e=c(e)),e?r.getNodeFromInstance(e):null}},Mount:i,Reconciler:a});e.exports=d},function(e,t,n){"use strict";function r(e){for(var t;t=e._renderedComponent;)e=t;return e}functio
 n o(e,t){var n=r(e);n._hostNode=t,t[v]=n}function i(e){var t=e._hostNode;t&&(delete t[v],e._hostNode=null)}function a(e,t){if(!(e._flags&h.hasCachedChildNodes)){var n=e._renderedChildren,i=t.firstChild;e:for(var a in n)if(n.hasOwnProperty(a)){var s=n[a],u=r(s)._domID;if(0!==u){for(;null!==i;i=i.nextSibling)if(1===i.nodeType&&i.getAttribute(f)===String(u)||8===i.nodeType&&i.nodeValue===" react-text: "+u+" "||8===i.nodeType&&i.nodeValue===" react-empty: "+u+" "){o(s,i);continue e}c("32",u)}}e._flags|=h.hasCachedChildNodes}}function s(e){if(e[v])return e[v];for(var t=[];!e[v];){if(t.push(e),!e.parentNode)return null;e=e.parentNode}for(var n,r;e&&(r=e[v]);e=t.pop())n=r,t.length&&a(r,e);return n}function u(e){var t=s(e);return null!=t&&t._hostNode===e?t:null}function l(e){if(void 0===e._hostNode?c("33"):void 0,e._hostNode)return e._hostNode;for(var t=[];!e._hostNode;)t.
 push(e),e._hostParent?void 0:c("34"),e=e._hostParent;for(;t.length;e=t.pop())a(e,e._hostNode);return e._hostNode}var c=n(32),p=n(33),d=n(34),f=(n(8),p.ID_ATTRIBUTE_NAME),h=d,v="__reactInternalInstance$"+Math.random().toString(36).slice(2),m={getClosestInstanceFromNode:s,getInstanceFromNode:u,getNodeFromInstance:l,precacheChildNodes:a,precacheNode:o,uncacheNode:i};e.exports=m},7,function(e,t,n){"use strict";function r(e,t){return(e&t)===t}var o=n(32),i=(n(8),{MUST_USE_PROPERTY:1,HAS_BOOLEAN_VALUE:4,HAS_NUMERIC_VALUE:8,HAS_POSITIVE_NUMERIC_VALUE:24,HAS_OVERLOADED_BOOLEAN_VALUE:32,injectDOMPropertyConfig:function(e){var t=i,n=e.Properties||{},a=e.DOMAttributeNamespaces||{},u=e.DOMAttributeNames||{},l=e.DOMPropertyNames||{},c=e.DOMMutationMethods||{};e.isCustomAttribute&&s._isCustomAttributeFunctions.push(e.isCustomAttribute);for(var p in n){s.properties.hasOwnProperty(p)?o("48",p):void 0;var d=p.toLowerCase(),f=n[p],h={attributeName:d
 ,attributeNamespace:null,propertyName:p,mutationMethod:null,mustUseProperty:r(f,t.MUST_USE_PROPERTY),hasBooleanValue:r(f,t.HAS_BOOLEAN_VALUE),hasNumericValue:r(f,t.HAS_NUMERIC_VALUE),hasPositiveNumericValue:r(f,t.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:r(f,t.HAS_OVERLOADED_BOOLEAN_VALUE)};if(h.hasBooleanValue+h.hasNumericValue+h.hasOverloadedBooleanValue<=1?void 0:o("50",p),u.hasOwnProperty(p)){var v=u[p];h.attributeName=v}a.hasOwnProperty(p)&&(h.attributeNamespace=a[p]),l.hasOwnProperty(p)&&(h.propertyName=l[p]),c.hasOwnProperty(p)&&(h.mutationMethod=c[p]),s.properties[p]=h}}}),a=":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",s={ID_ATTRIBUTE_NAME:"data-reactid",ROOT_ATTRIBUTE_NAME:"data-reactroot",ATTRIBUTE_NAME_START_CHAR:a,ATTRIBUTE_NAME_CHAR:a+"\\-.0-9\\u00B7\\u0300-\
 \u036F\\u203F-\\u2040",properties:{},getPossibleStandardName:null,_isCustomAttributeFunctions:[],isCustomAttribute:function(e){for(var t=0;t<s._isCustomAttributeFunctions.length;t++){var n=s._isCustomAttributeFunctions[t];if(n(e))return!0}return!1},injection:i};e.exports=s},function(e,t){"use strict";var n={hasCachedChildNodes:1};e.exports=n},function(e,t,n){"use strict";function r(){E||(E=!0,y.EventEmitter.injectReactEventListener(g),y.EventPluginHub.injectEventPluginOrder(s),y.EventPluginUtils.injectComponentTree(d),y.EventPluginUtils.injectTreeTraversal(h),y.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:x,EnterLeaveEventPlugin:u,ChangeEventPlugin:a,SelectEventPlugin:C,BeforeInputEventPlugin:i}),y.HostComponent.injectGenericComponentClass(p),y.HostComponent.injectTextComponentClass(v),y.DOMProperty.injectDOMPropertyConfig(o),y.DOMProperty.injectDOMPropertyConfig(l),y.DOMProperty.injectDOMPropertyConfig(b),y.EmptyComponent.injectEmptyCompone
 ntFactory(function(e){return new f(e)}),y.Updates.injectReconcileTransaction(_),y.Updates.injectBatchingStrategy(m),y.Component.injectEnvironment(c))}var o=n(36),i=n(37),a=n(52),s=n(64),u=n(65),l=n(70),c=n(71),p=n(84),d=n(31),f=n(129),h=n(130),v=n(131),m=n(132),g=n(133),y=n(136),_=n(137),b=n(145),C=n(146),x=n(147),E=!1;e.exports={inject:r}},function(e,t){"use strict";var n={Properties:{"aria-current":0,"aria-details":0,"aria-disabled":0,"aria-hidden":0,"aria-invalid":0,"aria-keyshortcuts":0,"aria-label":0,"aria-roledescription":0,"aria-autocomplete":0,"aria-checked":0,"aria-expanded":0,"aria-haspopup":0,"aria-level":0,"aria-modal":0,"aria-multiline":0,"aria-multiselectable":0,"aria-orientation":0,"aria-placeholder":0,"aria-pressed":0,"aria-readonly":0,"aria-required"
 :0,"aria-selected":0,"aria-sort":0,"aria-valuemax":0,"aria-valuemin":0,"aria-valuenow":0,"aria-valuetext":0,"aria-atomic":0,"aria-busy":0,"aria-live":0,"aria-relevant":0,"aria-dropeffect":0,"aria-grabbed":0,"aria-activedescendant":0,"aria-colcount":0,"aria-colindex":0,"aria-colspan":0,"aria-controls":0,"aria-describedby":0,"aria-errormessage":0,"aria-flowto":0,"aria-labelledby":0,"aria-owns":0,"aria-posinset":0,"aria-rowcount":0,"aria-rowindex":0,"aria-rowspan":0,"aria-setsize":0},DOMAttributeNames:{},DOMPropertyNames:{}};e.exports=n},function(e,t,n){"use strict";function r(){var e=window.opera;return"object"==typeof e&&"function"==typeof e.version&&parseInt(e.version(),10
 )<=12}function o(e){return(e.ctrlKey||e.altKey||e.metaKey)&&!(e.ctrlKey&&e.altKey)}function i(e){switch(e){case"topCompositionStart":return k.compositionStart;case"topCompositionEnd":return k.compositionEnd;case"topCompositionUpdate":return k.compositionUpdate}}function a(e,t){return"topKeyDown"===e&&t.keyCode===_}function s(e,t){switch(e){case"topKeyUp":return y.indexOf(t.keyCode)!==-1;case"topKeyDown":return t.keyCode!==_;case"topKeyPress":case"topMouseDown":case"topBlur":return!0;default:return!1}}function u(e){var t=e.detail;return"object"==typeof t&&"data"in t?t.data:null}function l(e,t,n,r){var o,l;if(b?o=i(e):S?s(e,n)&&(o=k.compositionEnd):a(e,n)&&(o=k.compositionStart),!o)return null;E&&(S||o!==k.compositionStart?o===k.compositionEnd&&S&&(l=S.getData()):S=v.getPooled(r));var c=m.getPooled(o,t,
 n,r);if(l)c.data=l;else{var p=u(n);null!==p&&(c.data=p)}return f.accumulateTwoPhaseDispatches(c),c}function c(e,t){switch(e){case"topCompositionEnd":return u(t);case"topKeyPress":var n=t.which;return n!==w?null:(P=!0,T);case"topTextInput":var r=t.data;return r===T&&P?null:r;default:return null}}function p(e,t){if(S){if("topCompositionEnd"===e||!b&&s(e,t)){var n=S.getData();return v.release(S),S=null,n}return null}switch(e){case"topPaste":return null;case"topKeyPress":return t.which&&!o(t)?String.fromCharCode(t.which):null;case"topCompositionEnd":return E?null:t.data;default:return null}}function d(e,t,n,r){var o;if(o=x?c(e,n):p(e,n),!o)return null;var i=g.getPooled(k.beforeInput,t,n,r);return i.data=o,f.accumulateTwoPhaseDispatches(i),i}var f=n(38),h=n(45),v=n(46),m=n(49),g=n(51),y=[9,13,27,32],_=229,b=h.canUseDOM&&"CompositionEvent"in window,C=null;h.canUseDOM&amp
 ;&"documentMode"in document&&(C=document.documentMode);var x=h.canUseDOM&&"TextEvent"in window&&!C&&!r(),E=h.canUseDOM&&(!b||C&&C>8&&C<=11),w=32,T=String.fromCharCode(w),k={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:["topBlur","topCompositionEnd","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:["topBlur","topCompositionStart","topKeyDown",&quot
 ;topKeyPress","topKeyUp","topMouseDown"]},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:["topBlur","topCompositionUpdate","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]}},P=!1,S=null,I={eventTypes:k,extractEvents:function(e,t,n,r){return[l(e,t,n,r),d(e,t,n,r)]}};e.exports=I},function(e,t,n){"use strict";function r(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return g(e,r)}function o(e,t,n){var o=r(e,n,t);o&&(n._dispatchListeners=v(n._dispatchListeners,o),n._dispatchInstances=v(n._dispatchInstances,e))}function i(e){e&&e.dispatchConfig.phasedRegistrationNames&&h.traverseTwoPhase(e._targetInst,o,e)}function a(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst,n=t?h.getParentInstance(t):null;h.traverseTwoPhase(n,o,e)}}functi
 on s(e,t,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=g(e,r);o&&(n._dispatchListeners=v(n._dispatchListeners,o),n._dispatchInstances=v(n._dispatchInstances,e))}}function u(e){e&&e.dispatchConfig.registrationName&&s(e._targetInst,null,e)}function l(e){m(e,i)}function c(e){m(e,a)}function p(e,t,n,r){h.traverseEnterLeave(n,r,s,e,t)}function d(e){m(e,u)}var f=n(39),h=n(41),v=n(43),m=n(44),g=(n(11),f.getListener),y={accumulateTwoPhaseDispatches:l,accumulateTwoPhaseDispatchesSkipTarget:c,accumulateDirectDispatches:d,accumulateEnterLeaveDispatches:p};e.exports=y},function(e,t,n){"use strict";function r(e){return"button"===e||"input"===e||"select"===e||"textarea"===e}function o(e,t,n){switch(e){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture
 ":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":return!(!n.disabled||!r(t));default:return!1}}var i=n(32),a=n(40),s=n(41),u=n(42),l=n(43),c=n(44),p=(n(8),{}),d=null,f=function(e,t){e&&(s.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e))},h=function(e){return f(e,!0)},v=function(e){return f(e,!1)},m=function(e){return"."+e._rootNodeID},g={injection:{injectEventPluginOrder:a.injectEventPluginOrder,injectEventPluginsByName:a.injectEventPluginsByName},putListener:function(e,t,n){"function"!=typeof n?i("94",t,typeof n):void 0;var r=m(e),o=p[t]||(p[t]={});o[r]=n;var s=a.registrationNameModules[t];s&&s.didPutListener&&s.didPutListener(e,t,n)},getListener:function(e,t){var n=p[t];if(o(t,e._currentElement.type,e._currentElement.props))return null;var r=m(e);return n&&n[r]},deleteListener:function(e,t){var n=a.registrationNameMo
 dules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t);var r=p[t];if(r){var o=m(e);delete r[o]}},deleteAllListeners:function(e){var t=m(e);for(var n in p)if(p.hasOwnProperty(n)&&p[n][t]){var r=a.registrationNameModules[n];r&&r.willDeleteListener&&r.willDeleteListener(e,n),delete p[n][t]}},extractEvents:function(e,t,n,r){for(var o,i=a.plugins,s=0;s<i.length;s++){var u=i[s];if(u){var c=u.extractEvents(e,t,n,r);c&&(o=l(o,c))}}return o},enqueueEvents:function(e){e&&(d=l(d,e))},processEventQueue:function(e){var t=d;d=null,e?c(t,h):c(t,v),d?i("95"):void 0,u.rethrowCaughtError()},__purge:function(){p={}},__getListenerBank:function(){return p}};e.exports=g},function(e,t,n){"use strict";function r(){if(s)for(var e in u){var t=u[e],n=s.indexOf(e);if(n>-1?void 0:a("96",e),!l.plugins[n]){t.extractEvents?void 0:a("97",e),l.plugins[n]=t;var r=t.eventTypes;for(var i in r)o(r[i],t,i)?void 0:a(
 "98",i,e)}}}function o(e,t,n){l.eventNameDispatchConfigs.hasOwnProperty(n)?a("99",n):void 0,l.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var s=r[o];i(s,t,n)}return!0}return!!e.registrationName&&(i(e.registrationName,t,n),!0)}function i(e,t,n){l.registrationNameModules[e]?a("100",e):void 0,l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var a=n(32),s=(n(8),null),u={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,
+injectEventPluginOrder:function(e){s?a("101"):void 0,s=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];u.hasOwnProperty(n)&&u[n]===o||(u[n]?a("102",n):void 0,u[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;if(void 0!==t.phasedRegistrationNames){var n=t.phasedRegistrationNames;for(var r in n)if(n.hasOwnProperty(r)){var o=l.registrationNameModules[n[r]];if(o)return o}}return null},_resetEventPlugins:function(){s=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};e.exports=l},function(e,t,n){"use strict";function r(e){return"topMouseUp&quo
 t;===e||"topTouchEnd"===e||"topTouchCancel"===e}function o(e){return"topMouseMove"===e||"topTouchMove"===e}function i(e){return"topMouseDown"===e||"topTouchStart"===e}function a(e,t,n,r){var o=e.type||"unknown-event";e.currentTarget=g.getNodeFromInstance(r),t?v.invokeGuardedCallbackWithCatch(o,n,e):v.invokeGuardedCallback(o,n,e),e.currentTarget=null}function s(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)a(e,t,n[o],r[o]);else n&&a(e,t,n,r);e._dispatchListeners=null,e._dispatchInstances=null}function u(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t)){for(var r=0;r<t.length&&!e.isPropagationStopped();r++)if(t[r](e,n[r]))return n[r]}else if(t&&t(e,n))return n;return null}function l(e){var t=u(e);return e._dispatchInstances=null,e._dispatchListeners=null,t}function c(e){var
  t=e._dispatchListeners,n=e._dispatchInstances;Array.isArray(t)?h("103"):void 0,e.currentTarget=t?g.getNodeFromInstance(n):null;var r=t?t(e):null;return e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,r}function p(e){return!!e._dispatchListeners}var d,f,h=n(32),v=n(42),m=(n(8),n(11),{injectComponentTree:function(e){d=e},injectTreeTraversal:function(e){f=e}}),g={isEndish:r,isMoveish:o,isStartish:i,executeDirectDispatch:c,executeDispatchesInOrder:s,executeDispatchesInOrderStopAtTrue:l,hasDispatches:p,getInstanceFromNode:function(e){return d.getInstanceFromNode(e)},getNodeFromInstance:function(e){return d.getNodeFromInstance(e)},isAncestor:function(e,t){return f.isAncestor(e,t)},getLowestCommonAncestor:function(e,t){return f.getLowestCommonAncestor(e,t)},getParentInstance:function(e){return f.getParentInstance(e)},traverseTwoPhase:function(e,t,n){return f.traverseTwoPhase(e,t,n)},traverseEnterLeave:function(e,t,n,r,o){return f.traverseEnterLeave(e,t,n
 ,r,o)},injection:m};e.exports=g},function(e,t,n){"use strict";function r(e,t,n){try{t(n)}catch(e){null===o&&(o=e)}}var o=null,i={invokeGuardedCallback:r,invokeGuardedCallbackWithCatch:r,rethrowCaughtError:function(){if(o){var e=o;throw o=null,e}}};e.exports=i},function(e,t,n){"use strict";function r(e,t){return null==t?o("30"):void 0,null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}var o=n(32);n(8);e.exports=r},function(e,t){"use strict";function n(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}e.exports=n},function(e,t){"use strict";var n=!("undefined"==typeof window||!window.document||!window.document.createElement),r={canUseDOM:n,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:n&&!!window.screen,isInWorker:!n};e.export
 s=r},function(e,t,n){"use strict";function r(e){this._root=e,this._startText=this.getText(),this._fallbackText=null}var o=n(4),i=n(47),a=n(48);o(r.prototype,{destructor:function(){this._root=null,this._startText=null,this._fallbackText=null},getText:function(){return"value"in this._root?this._root.value:this._root[a()]},getData:function(){if(this._fallbackText)return this._fallbackText;var e,t,n=this._startText,r=n.length,o=this.getText(),i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var a=r-e;for(t=1;t<=a&&n[r-t]===o[i-t];t++);var s=t>1?1-t:void 0;return this._fallbackText=o.slice(e,s),this._fallbackText}}),i.addPoolingTo(r),e.exports=r},[285,32],function(e,t,n){"use strict";function r(){return!i&&o.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var o=n(45),i=null;e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(th
 is,e,t,n,r)}var o=n(50),i={data:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n;var o=this.constructor.Interface;for(var i in o)if(o.hasOwnProperty(i)){var s=o[i];s?this[i]=s(n):"target"===i?this.target=r:this[i]=n[i]}var u=null!=n.defaultPrevented?n.defaultPrevented:n.returnValue===!1;return u?this.isDefaultPrevented=a.thatReturnsTrue:this.isDefaultPrevented=a.thatReturnsFalse,this.isPropagationStopped=a.thatReturnsFalse,this}var o=n(4),i=n(47),a=n(12),s=(n(11),"function"==typeof Proxy,["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"]),u={type:null,target:null,currentTarget:a.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevente
 d:null,isTrusted:null};o(r.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=a.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=a.thatReturnsTrue)},persist:function(){this.isPersistent=a.thatReturnsTrue},isPersistent:a.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;for(var n=0;n<s.length;n++)this[s[n]]=null}}),r.Interface=u,r.augmentClass=function(e,t){var n=this,r=function(){};r.prototype=n.prototype;var a=new r;o(a,e.prototype),e.prototype=a,e.prototype.constructor=e,e.Interface=o({},n.Interface,t),e.augmentClass=n.augmentClass,i.addPoolingTo(e,i.fourArgumentPooler)},i.addPoolingTo(r,i.fo
 urArgumentPooler),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(50),i={data:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e){var t=e.nodeName&&e.nodeName.toLowerCase();return"select"===t||"input"===t&&"file"===e.type}function o(e){var t=E.getPooled(P.change,I,e,w(e));_.accumulateTwoPhaseDispatches(t),x.batchedUpdates(i,t)}function i(e){y.enqueueEvents(e),y.processEventQueue(!1)}function a(e,t){S=e,I=t,S.attachEvent("onchange",o)}function s(){S&&(S.detachEvent("onchange",o),S=null,I=null)}function u(e,t){if("topChange"===e)return t}function l(e,t,n){"topFocus"===e?(s(),a(t,n)):"topBlur"===e&&s()}function c(e,t){S=e,I=t,N=e.value,M=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(S,"value",R),S.attachEvent?S.attach
 Event("onpropertychange",d):S.addEventListener("propertychange",d,!1)}function p(){S&&(delete S.value,S.detachEvent?S.detachEvent("onpropertychange",d):S.removeEventListener("propertychange",d,!1),S=null,I=null,N=null,M=null)}function d(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==N&&(N=t,o(e))}}function f(e,t){if("topInput"===e)return t}function h(e,t,n){"topFocus"===e?(p(),c(t,n)):"topBlur"===e&&p()}function v(e,t){if(("topSelectionChange"===e||"topKeyUp"===e||"topKeyDown"===e)&&S&&S.value!==N)return N=S.value,I}function m(e){return e.nodeName&&"input"===e.nodeName.toLowerCase()&&("checkbox"===e.type||"radio"===e.type)}function g(e,t){if("topClick"===e)return t}var y=n(39),_=n(38),b=n(45),C=n(31),x=n(53),E=n(50),w=n(61),T=n(62),k=n(63),P={change:{phasedRegistrati
 onNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:["topBlur","topChange","topClick","topFocus","topInput","topKeyDown","topKeyUp","topSelectionChange"]}},S=null,I=null,N=null,M=null,O=!1;b.canUseDOM&&(O=T("change")&&(!document.documentMode||document.documentMode>8));var A=!1;b.canUseDOM&&(A=T("input")&&(!document.documentMode||document.documentMode>11));var R={get:function(){return M.get.call(this)},set:function(e){N=""+e,M.set.call(this,e)}},D={eventTypes:P,extractEvents:function(e,t,n,o){var i,a,s=t?C.getNodeFromInstance(t):window;if(r(s)?O?i=u:a=l:k(s)?A?i=f:(i=v,a=h):m(s)&&(i=g),i){var c=i(e,t);if(c){var p=E.getPooled(P.change,c,n,o);return p.type="change",_.accumulateTwoPhaseDispatches(p),p}}a&&a(e,s,t)}};e.exports=D},function(e,t,n){"use strict";function r()
 {P.ReactReconcileTransaction&&C?void 0:c("123")}function o(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=d.getPooled(),this.reconcileTransaction=P.ReactReconcileTransaction.getPooled(!0)}function i(e,t,n,o,i,a){return r(),C.batchedUpdates(e,t,n,o,i,a)}function a(e,t){return e._mountOrder-t._mountOrder}function s(e){var t=e.dirtyComponentsLength;t!==g.length?c("124",t,g.length):void 0,g.sort(a),y++;for(var n=0;n<t;n++){var r=g[n],o=r._pendingCallbacks;r._pendingCallbacks=null;var i;if(h.logTopLevelRenders){var s=r;r._currentElement.type.isReactTopLevelWrapper&&(s=r._renderedComponent),i="React update: "+s.getName(),console.time(i)}if(v.performUpdateIfNecessary(r,e.reconcileTransaction,y),i&&console.timeEnd(i),o)for(var u=0;u<o.length;u++)e.callbackQueue.enqueue(o[u],r.getPublicInstance())}}function u(e){return r(),C.isBatchingUpdates?(g.push(e),void(null==e._updateBatchNumber&&(e
 ._updateBatchNumber=y+1))):void C.batchedUpdates(u,e)}function l(e,t){C.isBatchingUpdates?void 0:c("125"),_.enqueue(e,t),b=!0}var c=n(32),p=n(4),d=n(54),f=n(47),h=n(55),v=n(56),m=n(60),g=(n(8),[]),y=0,_=d.getPooled(),b=!1,C=null,x={initialize:function(){this.dirtyComponentsLength=g.length},close:function(){this.dirtyComponentsLength!==g.length?(g.splice(0,this.dirtyComponentsLength),T()):g.length=0}},E={initialize:function(){this.callbackQueue.reset()},close:function(){this.callbackQueue.notifyAll()}},w=[x,E];p(o.prototype,m,{getTransactionWrappers:function(){return w},destructor:function(){this.dirtyComponentsLength=null,d.release(this.callbackQueue),this.callbackQueue=null,P.ReactReconcileTransaction.release(this.reconcileTransaction),this.reconcileTransaction=null},perform:function(e,t,n){return m.perform.call(this,this.reconcileTransaction.perform,this.reconcileTransaction,e,t,n)}}),f.addPoolingTo(o);var T=function(){for(;g.length||b;){if(g.length){var e=o.getPooled();
 e.perform(s,null,e),o.release(e)}if(b){b=!1;var t=_;_=d.getPooled(),t.notifyAll(),d.release(t)}}},k={injectReconcileTransaction:function(e){e?void 0:c("126"),P.ReactReconcileTransaction=e},injectBatchingStrategy:function(e){e?void 0:c("127"),"function"!=typeof e.batchedUpdates?c("128"):void 0,"boolean"!=typeof e.isBatchingUpdates?c("129"):void 0,C=e}},P={ReactReconcileTransaction:null,batchedUpdates:i,enqueueUpdate:u,flushBatchedUpdates:T,injection:k,asap:l};e.exports=P},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=n(32),i=n(47),a=(n(8),function(){function e(t){r(this,e),this._callbacks=null,this._contexts=null,this._arg=t}return e.prototype.enqueue=function(e,t){this._callbacks=this._callbacks||[],this._callbacks.push(e),this._contexts=this._contexts||[],this._contexts.push(t)},e.prototype.notifyAll=function(){var e=this
 ._callbacks,t=this._contexts,n=this._arg;if(e&&t){e.length!==t.length?o("24"):void 0,this._callbacks=null,this._contexts=null;for(var r=0;r<e.length;r++)e[r].call(t[r],n);e.length=0,t.length=0}},e.prototype.checkpoint=function(){return this._callbacks?this._callbacks.length:0},e.prototype.rollback=function(e){this._callbacks&&this._contexts&&(this._callbacks.length=e,this._contexts.length=e)},e.prototype.reset=function(){this._callbacks=null,this._contexts=null},e.prototype.destructor=function(){this.reset()},e}());e.exports=i.addPoolingTo(a)},function(e,t){"use strict";var n={logTopLevelRenders:!1};e.exports=n},function(e,t,n){"use strict";function r(){o.attachRefs(this,this._currentElement)}var o=n(57),i=(n(59),n(11),{mountComponent:function(e,t,n,o,i,a){var s=e.mountComponent(t,n,o,i,a);return e._currentElement&&null!=e._currentElement.ref&&t.getReactMountReady().enqueue(r,e),s},getHostNode:function(e){retur
 n e.getHostNode()},unmountComponent:function(e,t){o.detachRefs(e,e._currentElement),e.unmountComponent(t)},receiveComponent:function(e,t,n,i){var a=e._currentElement;if(t!==a||i!==e._context){var s=o.shouldUpdateRefs(a,t);s&&o.detachRefs(e,a),e.receiveComponent(t,n,i),s&&e._currentElement&&null!=e._currentElement.ref&&n.getReactMountReady().enqueue(r,e)}},performUpdateIfNecessary:function(e,t,n){e._updateBatchNumber===n&&e.performUpdateIfNecessary(t)}});e.exports=i},function(e,t,n){"use strict";function r(e,t,n){"function"==typeof e?e(t.getPublicInstance()):i.addComponentAsRefTo(t,e,n)}function o(e,t,n){"function"==typeof e?e(null):i.removeComponentAsRefFrom(t,e,n)}var i=n(58),a={};a.attachRefs=function(e,t){if(null!==t&&"object"==typeof t){var n=t.ref;null!=n&&r(n,e,t._owner)}},a.shouldUpdateRefs=function(e,t){var n=null,r=null;null!==e&&"object"==typeof e&&(n=e
 .ref,r=e._owner);var o=null,i=null;return null!==t&&"object"==typeof t&&(o=t.ref,i=t._owner),n!==o||"string"==typeof o&&i!==r},a.detachRefs=function(e,t){if(null!==t&&"object"==typeof t){var n=t.ref;null!=n&&o(n,e,t._owner)}},e.exports=a},function(e,t,n){"use strict";function r(e){return!(!e||"function"!=typeof e.attachRef||"function"!=typeof e.detachRef)}var o=n(32),i=(n(8),{addComponentAsRefTo:function(e,t,n){r(n)?void 0:o("119"),n.attachRef(t,e)},removeComponentAsRefFrom:function(e,t,n){r(n)?void 0:o("120");var i=n.getPublicInstance();i&&i.refs[t]===e.getPublicInstance()&&n.detachRef(t)}});e.exports=i},function(e,t,n){"use strict";var r=null;e.exports={debugTool:r}},function(e,t,n){"use strict";var r=n(32),o=(n(8),{}),i={reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitD
 ata?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,t,n,o,i,a,s,u){this.isInTransaction()?r("27"):void 0;var l,c;try{this._isInTransaction=!0,l=!0,this.initializeAll(0),c=e.call(t,n,o,i,a,s,u),l=!1}finally{try{if(l)try{this.closeAll(0)}catch(e){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return c},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n<t.length;n++){var r=t[n];try{this.wrapperInitData[n]=o,this.wrapperInitData[n]=r.initialize?r.initialize.call(this):null}finally{if(this.wrapperInitData[n]===o)try{this.initializeAll(n+1)}catch(e){}}}},closeAll:function(e){this.isInTransaction()?void 0:r("28");for(var t=this.transactionWrappers,n=e;n<t.length;n++){var i,a=t[n],s=this.wrapperInitData[n];try{i=!0,s!==o&&a.close&&a.close.call(this,s),i=!1}finally{if(i)
 try{this.closeAll(n+1)}catch(e){}}}this.wrapperInitData.length=0}};e.exports=i},function(e,t){"use strict";function n(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}e.exports=n},function(e,t,n){"use strict";/**
</ins><span class="cx" style="display: block; padding: 0 10px">          * Checks if an event is supported in the current execution environment.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * NOTE: This will not work correctly for non-generic events such as `change`,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13,7 +13,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @internal
</span><span class="cx" style="display: block; padding: 0 10px">         * @license Modernizr 3.0.0pre (Custom Build) | MIT
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function r(e,t){if(!a.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var i=document.createElement("div");i.setAttribute(n,"return;"),r="function"==typeof i[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,a=n(45);a.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),e.exports=r},function(e,t){"use strict";function n(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!r[e.type]:"textarea"===t}var r={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search
 :!0,tel:!0,text:!0,time:!0,url:!0,week:!0};e.exports=n},function(e,t,n){"use strict";var r=n(24),o=[r({ResponderEventPlugin:null}),r({SimpleEventPlugin:null}),r({TapEventPlugin:null}),r({EnterLeaveEventPlugin:null}),r({ChangeEventPlugin:null}),r({SelectEventPlugin:null}),r({BeforeInputEventPlugin:null})];e.exports=o},function(e,t,n){"use strict";var r=n(37),o=n(38),a=n(32),i=n(65),s=n(24),u=r.topLevelTypes,l={mouseEnter:{registrationName:s({onMouseEnter:null}),dependencies:[u.topMouseOut,u.topMouseOver]},mouseLeave:{registrationName:s({onMouseLeave:null}),dependencies:[u.topMouseOut,u.topMouseOver]}},c={eventTypes:l,extractEvents:function(e,t,n,r){if(e===u.topMouseOver&&(n.relatedTarget||n.fromElement))return null;if(e!==u.topMouseOut&&e!==u.topMouseOver)return null;var s;if(r.window===r)s=r;else{var c=r.ownerDocument;s=c?c.defaultView||c.parentWindow:window}var p,d;if(e===u.topMouseOut){p=t;var f=n.relatedTarget||n.toElement;d=f?a.getClosestInsta
 nceFromNode(f):null}else p=null,d=t;if(p===d)return null;var h=null==p?s:a.getNodeFromInstance(p),m=null==d?s:a.getNodeFromInstance(d),v=i.getPooled(l.mouseLeave,p,n,r);v.type="mouseleave",v.target=h,v.relatedTarget=m;var g=i.getPooled(l.mouseEnter,d,n,r);return g.type="mouseenter",g.target=m,g.relatedTarget=h,o.accumulateEnterLeaveDispatches(v,g,p,d),[v,g]}};e.exports=c},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(66),a=n(67),i=n(68),s={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:i,button:function(e){var t=e.button;return"which"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return"pageX"in e?e.pageX:e.clientX+a.currentScrollLeft},pageY:function(e){return"pageY"in e?e.pageY:e.clientY+a.curren
 tScrollTop}};o.augmentClass(r,s),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(49),a=n(60),i={view:function(e){if(e.view)return e.view;var t=a(e);if(t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};o.augmentClass(r,i),e.exports=r},function(e,t){"use strict";var n={currentScrollLeft:0,currentScrollTop:0,refreshScrollValues:function(e){n.currentScrollLeft=e.x,n.currentScrollTop=e.y}};e.exports=n},function(e,t){"use strict";function n(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=o[e];return!!r&&!!n[r]}function r(e){return n}var o={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};e.exports=r},function(e,t,n){"use strict";var r=n(33),o=r.injection.MUST_USE_PROPERTY,a=r.injection.HAS_BOOLEAN_VALUE,i=r.injection.HAS
 _NUMERIC_VALUE,s=r.injection.HAS_POSITIVE_NUMERIC_VALUE,u=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE,l={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+r.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:a,allowTransparency:0,alt:0,async:a,autoComplete:0,autoPlay:a,capture:a,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:o|a,cite:0,classID:0,className:0,cols:s,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:a,coords:0,crossOrigin:0,data:0,dateTime:0,"default":a,defer:a,dir:0,disabled:a,download:u,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:a,formTarget:0,frameBorder:0,headers:0,height:0,hidden:a,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:a,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGr
 oup:0,method:0,min:0,minLength:0,multiple:o|a,muted:o|a,name:0,nonce:0,noValidate:a,open:a,optimum:0,pattern:0,placeholder:0,poster:0,preload:0,profile:0,radioGroup:0,readOnly:a,rel:0,required:a,reversed:a,role:0,rows:s,rowSpan:i,sandbox:0,scope:0,scoped:a,scrolling:0,seamless:a,selected:o|a,shape:0,size:s,sizes:0,span:s,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:i,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,"typeof":0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:a,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{}};e.exports=l},function(e,t,n){"use strict";var r=n(71),o=n(83),a={processChildrenUpdates:o.dangerouslyProcessChildr
 enUpdates,replaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup,unmountIDFromEnvironment:function(e){}};e.exports=a},function(e,t,n){"use strict";function r(e,t){return Array.isArray(t)&&(t=t[1]),t?t.nextSibling:e.firstChild}function o(e,t,n){c.insertTreeBefore(e,t,n)}function a(e,t,n){Array.isArray(t)?s(e,t[0],t[1],n):v(e,t,n)}function i(e,t){if(Array.isArray(t)){var n=t[1];t=t[0],u(e,t,n),e.removeChild(n)}e.removeChild(t)}function s(e,t,n,r){for(var o=t;;){var a=o.nextSibling;if(v(e,o,r),o===n)break;o=a}}function u(e,t,n){for(;;){var r=t.nextSibling;if(r===n)break;e.removeChild(r)}}function l(e,t,n){var r=e.parentNode,o=e.nextSibling;o===t?n&&v(r,document.createTextNode(n),o):n?(m(o,n),u(r,o,t)):u(r,e,t)}var c=n(72),p=n(78),d=n(82),f=(n(32),n(58),n(75)),h=n(74),m=n(76),v=f(function(e,t,n){e.insertBefore(t,n)}),g=p.dangerouslyReplaceNodeWithMarkup,y={dangerouslyReplaceNodeWithMarkup:g,replaceDelimitedText:l,processUpdates:function(e,t){for(var n=0;n<
 t.length;n++){var s=t[n];switch(s.type){case d.INSERT_MARKUP:o(e,s.content,r(e,s.afterNode));break;case d.MOVE_EXISTING:a(e,s.fromNode,r(e,s.afterNode));break;case d.SET_MARKUP:h(e,s.content);break;case d.TEXT_CONTENT:m(e,s.content);break;case d.REMOVE_NODE:i(e,s.fromNode)}}}};e.exports=y},function(e,t,n){"use strict";function r(e){if(v){var t=e.node,n=e.children;if(n.length)for(var r=0;r<n.length;r++)g(t,n[r],null);else null!=e.html?p(t,e.html):null!=e.text&&f(t,e.text)}}function o(e,t){e.parentNode.replaceChild(t.node,e),r(t)}function a(e,t){v?e.children.push(t):e.node.appendChild(t.node)}function i(e,t){v?e.html=t:p(e.node,t)}function s(e,t){v?e.text=t:f(e.node,t)}function u(){return this.node.nodeName}function l(e){return{node:e,children:[],html:null,text:null,toString:u}}var c=n(73),p=n(74),d=n(75),f=n(76),h=1,m=11,v="undefined"!=typeof document&&"number"==typeof document.documentMode||"undefined"!=typeof navigator&
 &"string"==typeof navigator.userAgent&&/\bEdge\/\d/.test(navigator.userAgent),g=d(function(e,t,n){t.node.nodeType===m||t.node.nodeType===h&&"object"===t.node.nodeName.toLowerCase()&&(null==t.node.namespaceURI||t.node.namespaceURI===c.html)?(r(t),e.insertBefore(t.node,n)):(e.insertBefore(t.node,n),r(t))});l.insertTreeBefore=g,l.replaceChildWithTree=o,l.queueChild=a,l.queueHTML=i,l.queueText=s,e.exports=l},function(e,t){"use strict";var n={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};e.exports=n},function(e,t,n){"use strict";var r,o=n(45),a=n(73),i=/^[ \r\n\t\f]/,s=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,u=n(75),l=u(function(e,t){if(e.namespaceURI!==a.svg||"innerHTML"in e)e.innerHTML=t;else{r=r||document.createElement("div"),r.innerHTML="<svg>"+t+"</svg>
 ";for(var n=r.firstChild.childNodes,o=0;o<n.length;o++)e.appendChild(n[o])}});if(o.canUseDOM){var c=document.createElement("div");c.innerHTML=" ",""===c.innerHTML&&(l=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),i.test(t)||"<"===t[0]&&s.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),c=null}e.exports=l},function(e,t){"use strict";var n=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e};e.exports=n},function(e,t,n){"use strict";var r=n(45),o=n(77),a=n(74),i=function(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t};r.canUseDOM&&("textContent"in document.documentEl
 ement||(i=function(e,t){a(e,o(t))})),e.exports=i},function(e,t){"use strict";function n(e){var t=""+e,n=o.exec(t);if(!n)return t;var r,a="",i=0,s=0;for(i=n.index;i<t.length;i++){switch(t.charCodeAt(i)){case 34:r="&quot;";break;case 38:r="&amp;";break;case 39:r="&#x27;";break;case 60:r="&lt;";break;case 62:r="&gt;";break;default:continue}s!==i&&(a+=t.substring(s,i)),s=i+1,a+=r}return s!==i?a+t.substring(s,i):a}function r(e){return"boolean"==typeof e||"number"==typeof e?""+e:n(e)}var o=/["'&<>]/;e.exports=r},function(e,t,n){"use strict";var r=n(7),o=n(72),a=n(45),i=n(79),s=n(12),u=(n(8),{dangerouslyReplaceNodeWithMarkup:function(e,t){if(a.canUseDOM?void 0:r("56"),t?void 0:r("57"),"HTML"===e.nodeName?r("58"):void 0,"string"==typeof t){var n=i(t,s)[0];e.parentNode.replaceChi
 ld(n,e)}else o.replaceChildWithTree(e,t)}});e.exports=u},function(e,t,n){"use strict";function r(e){var t=e.match(c);return t&&t[1].toLowerCase()}function o(e,t){var n=l;l?void 0:u(!1);var o=r(e),a=o&&s(o);if(a){n.innerHTML=a[1]+e+a[2];for(var c=a[0];c--;)n=n.lastChild}else n.innerHTML=e;var p=n.getElementsByTagName("script");p.length&&(t?void 0:u(!1),i(p).forEach(t));for(var d=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return d}var a=n(45),i=n(80),s=n(81),u=n(8),l=a.canUseDOM?document.createElement("div"):null,c=/^\s*<(\w+)/;e.exports=o},function(e,t,n){"use strict";function r(e){var t=e.length;if(Array.isArray(e)||"object"!=typeof e&&"function"!=typeof e?i(!1):void 0,"number"!=typeof t?i(!1):void 0,0===t||t-1 in e?void 0:i(!1),"function"==typeof e.callee?i(!1):void 0,e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(n){}for(var r=Ar
 ray(t),o=0;o<t;o++)r[o]=e[o];return r}function o(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"length"in e&&!("setInterval"in e)&&"number"!=typeof e.nodeType&&(Array.isArray(e)||"callee"in e||"item"in e)}function a(e){return o(e)?Array.isArray(e)?e.slice():r(e):[e]}var i=n(8);e.exports=a},function(e,t,n){"use strict";function r(e){return i?void 0:a(!1),d.hasOwnProperty(e)||(e="*"),s.hasOwnProperty(e)||("*"===e?i.innerHTML="<link />":i.innerHTML="<"+e+"></"+e+">",s[e]=!i.firstChild),s[e]?d[e]:null}var o=n(45),a=n(8),i=o.canUseDOM?document.createElement("div"):null,s={},u=[1,'<select multiple="true">',"</select>"],l=[1,"<table>","</table>"],c=[3,"<table><tbody><tr>","&l
 t;/tr></tbody></table>"],p=[1,'<svg xmlns="http://www.w3.org/2000/svg">',"</svg>"],d={"*":[1,"?<div>","</div>"],area:[1,"<map>","</map>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],legend:[1,"<fieldset>","</fieldset>"],param:[1,"<object>","</object>"],tr:[2,"<table><tbody>","</tbody></table>"],optgroup:u,option:u,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c},f=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop",&q
 uot;text","tspan"];f.forEach(function(e){d[e]=p,s[e]=!0}),e.exports=r},function(e,t,n){"use strict";var r=n(22),o=r({INSERT_MARKUP:null,MOVE_EXISTING:null,REMOVE_NODE:null,SET_MARKUP:null,TEXT_CONTENT:null});e.exports=o},function(e,t,n){"use strict";var r=n(71),o=n(32),a={dangerouslyProcessChildrenUpdates:function(e,t){var n=o.getNodeFromInstance(e);r.processUpdates(n,t)}};e.exports=a},function(e,t,n){"use strict";function r(e){if(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return" This DOM node was rendered by `"+n+"`."}}return""}function o(e,t){t&&(Z[e._tag]&&(null!=t.children||null!=t.dangerouslySetInnerHTML?m("137",e._tag,e._currentElement._owner?" Check the render method of "+e._currentElement._owner.getName()+".":""):void 0),null!=t.dangerouslySetInnerHTML&&(null!=t.children?m("60"):void 0,"object&quo
 t;==typeof t.dangerouslySetInnerHTML&&z in t.dangerouslySetInnerHTML?void 0:m("61")),null!=t.style&&"object"!=typeof t.style?m("62",r(e)):void 0)}function a(e,t,n,r){if(!(r instanceof L)){var o=e._hostContainerInfo,a=o._node&&o._node.nodeType===X,s=a?o._node:o._ownerDocument;W(t,s),r.getReactMountReady().enqueue(i,{inst:e,registrationName:t,listener:n})}}function i(){var e=this;T.putListener(e.inst,e.registrationName,e.listener)}function s(){var e=this;I.postMountWrapper(e)}function u(){var e=this;D.postMountWrapper(e)}function l(){var e=this;R.postMountWrapper(e)}function c(){var e=this;e._rootNodeID?void 0:m("63");var t=B(e);switch(t?void 0:m("64"),e._tag){case"iframe":case"object":e._wrapperState.listeners=[N.trapBubbledEvent(x.topLevelTypes.topLoad,"load",t)];break;case"video":case"audio":e._wrapperState.listeners=[];for(var n in G)G.hasOwnProperty(n)&&
 amp;e._wrapperState.listeners.push(N.trapBubbledEvent(x.topLevelTypes[n],G[n],t));break;case"source":e._wrapperState.listeners=[N.trapBubbledEvent(x.topLevelTypes.topError,"error",t)];break;case"img":e._wrapperState.listeners=[N.trapBubbledEvent(x.topLevelTypes.topError,"error",t),N.trapBubbledEvent(x.topLevelTypes.topLoad,"load",t)];break;case"form":e._wrapperState.listeners=[N.trapBubbledEvent(x.topLevelTypes.topReset,"reset",t),N.trapBubbledEvent(x.topLevelTypes.topSubmit,"submit",t)];break;case"input":case"select":case"textarea":e._wrapperState.listeners=[N.trapBubbledEvent(x.topLevelTypes.topInvalid,"invalid",t)]}}function p(){O.postUpdateWrapper(this)}function d(e){te.call(ee,e)||(J.test(e)?void 0:m("65",e),ee[e]=!0)}function f(e,t){return e.indexOf("-")>=0||null!=t.is}function h(e){var t=e.type;d(t),this._currentElement=e,this._tag=t.t
 oLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=null,this._domID=null,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var m=n(7),v=n(4),g=n(85),y=n(87),b=n(72),_=n(73),C=n(33),E=n(95),x=n(37),T=n(39),w=n(40),N=n(98),k=n(70),P=n(101),S=n(34),M=n(32),I=n(103),R=n(105),O=n(106),D=n(107),A=(n(58),n(108)),L=n(120),U=(n(12),n(77)),F=(n(8),n(61),n(24)),j=(n(123),n(124),n(11),S),V=T.deleteListener,B=M.getNodeFromInstance,W=N.listenTo,H=w.registrationNameModules,q={string:!0,number:!0},K=F({style:null}),z=F({__html:null}),Y={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},X=11,G={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted&quo
 t;,topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},Q={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},$={listing:!0,pre:!0,textarea:!0},Z=v({menuitem:!0},Q),J=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,ee={},te={}.hasOwnProperty,ne=1;h.displayName="ReactDOMComponent",h.Mixin={mountComponent:function(e,t,n,r){this._rootNodeID=ne++,this._domID=n._idCounter++,this._hostParent=t,this._hostContainerInfo=n;var a=this._cu
 rrentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(c,this);break;case"button":a=P.getHostProps(this,a,t);break;case"input":I.mountWrapper(this,a,t),a=I.getHostProps(this,a),e.getReactMountReady().enqueue(c,this);break;case"option":R.mountWrapper(this,a,t),a=R.getHostProps(this,a);break;case"select":O.mountWrapper(this,a,t),a=O.getHostProps(this,a),e.getReactMountReady().enqueue(c,this);break;case"textarea":D.mountWrapper(this,a,t),a=D.getHostProps(this,a),e.getReactMountReady().enqueue(c,this)}o(this,a);var i,p;null!=t?(i=t._namespaceURI,p=t._tag):n._tag&&(i=n._namespaceURI,p=n._tag),(null==i||i===_.svg&&"foreignobject"===p)&&(i=_.html),i===_.html&&("svg"===t
 his._tag?i=_.svg:"math"===this._tag&&(i=_.mathml)),this._namespaceURI=i;var d;if(e.useCreateElement){var f,h=n._ownerDocument;if(i===_.html)if("script"===this._tag){var m=h.createElement("div"),v=this._currentElement.type;m.innerHTML="<"+v+"></"+v+">",f=m.removeChild(m.firstChild)}else f=a.is?h.createElement(this._currentElement.type,a.is):h.createElement(this._currentElement.type);else f=h.createElementNS(i,this._currentElement.type);M.precacheNode(this,f),this._flags|=j.hasCachedChildNodes,this._hostParent||E.setAttributeForRoot(f),this._updateDOMProperties(null,a,e);var y=b(f);this._createInitialChildren(e,a,r,y),d=y}else{var C=this._createOpenTagMarkupAndPutListeners(e,a),x=this._createContentMarkup(e,a,r);d=!x&&Q[this._tag]?C+"/>":C+">"+x+"</"+this._currentElement.type+">"}switch(this._tag){case"input":e.getReactMountReady().enque
 ue(s,this),a.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"textarea":e.getReactMountReady().enqueue(u,this),a.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"select":a.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"button":a.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"option":e.getReactMountReady().enqueue(l,this)}return d},_createOpenTagMarkupAndPutListeners:function(e,t){var n="<"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var o=t[r];if(null!=o)if(H.hasOwnProperty(r))o&&a(this,r,o,e);else{r===K&&(o&&(o=this._previousStyleCopy=v({},t.style)),o=y.createMarkupForStyles(o,this));var i=null;null!=this._tag&&f(this._tag,t)?Y.hasOwnProperty(r)||(i=E.createMarkupForCustomAttribute(r,o)):i=E.createMarkupForProperty(r,o),i&am
 p;&(n+=" "+i)}}return e.renderToStaticMarkup?n:(this._hostParent||(n+=" "+E.createMarkupForRoot()),n+=" "+E.createMarkupForID(this._domID))},_createContentMarkup:function(e,t,n){var r="",o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&(r=o.__html);else{var a=q[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)r=U(a);else if(null!=i){var s=this.mountChildren(i,e,n);r=s.join("")}}return $[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(e,t,n,r){var o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&b.queueHTML(r,o.__html);else{var a=q[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)b.queueText(r,a);else if(null!=i)for(var s=this.mountChildren(i,e,n),u=0;u<s.length;u++)b.queueChild(r,s[u])}},receiveComponent:function(e,t,n){var r=this._currentElement;this._currentElement=e,this.updateComponent(t,r,e,n)},up
 dateComponent:function(e,t,n,r){var a=t.props,i=this._currentElement.props;switch(this._tag){case"button":a=P.getHostProps(this,a),i=P.getHostProps(this,i);break;case"input":I.updateWrapper(this),a=I.getHostProps(this,a),i=I.getHostProps(this,i);break;case"option":a=R.getHostProps(this,a),i=R.getHostProps(this,i);break;case"select":a=O.getHostProps(this,a),i=O.getHostProps(this,i);break;case"textarea":D.updateWrapper(this),a=D.getHostProps(this,a),i=D.getHostProps(this,i)}o(this,i),this._updateDOMProperties(a,i,e),this._updateDOMChildren(a,i,e,r),"select"===this._tag&&e.getReactMountReady().enqueue(p,this)},_updateDOMProperties:function(e,t,n){var r,o,i;for(r in e)if(!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if(r===K){var s=this._previousStyleCopy;for(o in s)s.hasOwnProperty(o)&&(i=i||{},i[o]="");this._previousStyleCopy=null}else H.hasOwnProperty(r)?e[r]&&V(this,
 r):f(this._tag,e)?Y.hasOwnProperty(r)||E.deleteValueForAttribute(B(this),r):(C.properties[r]||C.isCustomAttribute(r))&&E.deleteValueForProperty(B(this),r);for(r in t){var u=t[r],l=r===K?this._previousStyleCopy:null!=e?e[r]:void 0;if(t.hasOwnProperty(r)&&u!==l&&(null!=u||null!=l))if(r===K)if(u?u=this._previousStyleCopy=v({},u):this._previousStyleCopy=null,l){for(o in l)!l.hasOwnProperty(o)||u&&u.hasOwnProperty(o)||(i=i||{},i[o]="");for(o in u)u.hasOwnProperty(o)&&l[o]!==u[o]&&(i=i||{},i[o]=u[o])}else i=u;else if(H.hasOwnProperty(r))u?a(this,r,u,n):l&&V(this,r);else if(f(this._tag,t))Y.hasOwnProperty(r)||E.setValueForAttribute(B(this),r,u);else if(C.properties[r]||C.isCustomAttribute(r)){var c=B(this);null!=u?E.setValueForProperty(c,r,u):E.deleteValueForProperty(c,r)}}i&&y.setValueForStyles(B(this),i,this)},_updateDOMChildren:function(e,t,n,r){var o=q[typeof e.children]?e.children:null,a=q[typeof t.children]?t.c
 hildren:null,i=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,s=t.dangerouslySetInnerHTML&&t.dangerouslySetInnerHTML.__html,u=null!=o?null:e.children,l=null!=a?null:t.children,c=null!=o||null!=i,p=null!=a||null!=s;null!=u&&null==l?this.updateChildren(null,n,r):c&&!p&&this.updateTextContent(""),null!=a?o!==a&&this.updateTextContent(""+a):null!=s?i!==s&&this.updateMarkup(""+s):null!=l&&this.updateChildren(l,n,r)},getHostNode:function(){return B(this)},unmountComponent:function(e){switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":var t=this._wrapperState.listeners;if(t)for(var n=0;n<t.length;n++)t[n].remove();break;case"html":case"head":case"body":m("66",this._tag)}this.unmountChildren(e),M.uncache
 Node(this),T.deleteAllListeners(this),k.unmountIDFromEnvironment(this._rootNodeID),this._rootNodeID=null,this._domID=null,this._wrapperState=null},getPublicInstance:function(){return B(this)}},v(h.prototype,h.Mixin,A.Mixin),e.exports=h},function(e,t,n){"use strict";var r=n(32),o=n(86),a={focusDOMComponent:function(){o(r.getNodeFromInstance(this))}};e.exports=a},function(e,t){"use strict";function n(e){try{e.focus()}catch(t){}}e.exports=n},function(e,t,n){"use strict";var r=n(88),o=n(45),a=(n(58),n(89),n(91)),i=n(92),s=n(94),u=(n(11),s(function(e){return i(e)})),l=!1,c="cssFloat";if(o.canUseDOM){var p=document.createElement("div").style;try{p.font=""}catch(d){l=!0}void 0===document.documentElement.style.cssFloat&&(c="styleFloat")}var f={createMarkupForStyles:function(e,t){var n="";for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];null!=o&&(n+=u(r)+":",n+=a(r,o,t)+";")}r
 eturn n||null},setValueForStyles:function(e,t,n){var o=e.style;for(var i in t)if(t.hasOwnProperty(i)){var s=a(i,t[i],n);if("float"!==i&&"cssFloat"!==i||(i=c),s)o[i]=s;else{var u=l&&r.shorthandPropertyExpansions[i];if(u)for(var p in u)o[p]="";else o[i]=""}}}};e.exports=f},function(e,t){"use strict";function n(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var r={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},o=["Webkit","ms","Moz",&quo
 t;O"];Object.keys(r).forEach(function(e){o.forEach(function(t){r[n(t,e)]=r[e]})});var a={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},i={isUnitlessNumber:r,shorthandPropertyExpansions:a};e.exports=i},function(e,t,n){"use strict";function r(e){return o(e.replace(a,"ms-"))}var o=n(90),a=/^-ms-/;e.exports=r},function(e,t
 ){"use strict";function n(e){return e.replace(r,function(e,t){return t.toUpperCase()})}var r=/-(.)/g;e.exports=n},function(e,t,n){"use strict";function r(e,t,n){var r=null==t||"boolean"==typeof t||""===t;if(r)return"";var o=isNaN(t);if(o||0===t||a.hasOwnProperty(e)&&a[e])return""+t;if("string"==typeof t){t=t.trim()}return t+"px"}var o=n(88),a=(n(11),o.isUnitlessNumber);e.exports=r},function(e,t,n){"use strict";function r(e){return o(e).replace(a,"-ms-")}var o=n(93),a=/^ms-/;e.exports=r},function(e,t){"use strict";function n(e){return e.replace(r,"-$1").toLowerCase()}var r=/([A-Z])/g;e.exports=n},function(e,t){"use strict";function n(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}e.exports=n},function(e,t,n){"use strict";function r(e){return!!l.hasOwnProperty(e)||!u.hasOwnProperty(e)&&(s.tes
 t(e)?(l[e]=!0,!0):(u[e]=!0,!1))}function o(e,t){return null==t||e.hasBooleanValue&&!t||e.hasNumericValue&&isNaN(t)||e.hasPositiveNumericValue&&t<1||e.hasOverloadedBooleanValue&&t===!1}var a=n(33),i=(n(32),n(96),n(58),n(97)),s=(n(11),new RegExp("^["+a.ATTRIBUTE_NAME_START_CHAR+"]["+a.ATTRIBUTE_NAME_CHAR+"]*$")),u={},l={},c={createMarkupForID:function(e){return a.ID_ATTRIBUTE_NAME+"="+i(e)},setAttributeForID:function(e,t){e.setAttribute(a.ID_ATTRIBUTE_NAME,t)},createMarkupForRoot:function(){return a.ROOT_ATTRIBUTE_NAME+'=""'},setAttributeForRoot:function(e){e.setAttribute(a.ROOT_ATTRIBUTE_NAME,"")},createMarkupForProperty:function(e,t){var n=a.properties.hasOwnProperty(e)?a.properties[e]:null;if(n){if(o(n,t))return"";var r=n.attributeName;return n.hasBooleanValue||n.hasOverloadedBooleanValue&&t===!0?r+'=""':r+"="+i(t)}return a.isCustomAttribute(e)?null==
 t?"":e+"="+i(t):null},createMarkupForCustomAttribute:function(e,t){return r(e)&&null!=t?e+"="+i(t):""},setValueForProperty:function(e,t,n){var r=a.properties.hasOwnProperty(t)?a.properties[t]:null;if(r){var i=r.mutationMethod;if(i)i(e,n);else{if(o(r,n))return void this.deleteValueForProperty(e,t);if(r.mustUseProperty)e[r.propertyName]=n;else{var s=r.attributeName,u=r.attributeNamespace;u?e.setAttributeNS(u,s,""+n):r.hasBooleanValue||r.hasOverloadedBooleanValue&&n===!0?e.setAttribute(s,""):e.setAttribute(s,""+n)}}}else if(a.isCustomAttribute(t))return void c.setValueForAttribute(e,t,n)},setValueForAttribute:function(e,t,n){if(r(t)){null==n?e.removeAttribute(t):e.setAttribute(t,""+n)}},deleteValueForAttribute:function(e,t){e.removeAttribute(t)},deleteValueForProperty:function(e,t){var n=a.properties.hasOwnProperty(t)?a.properties[t]:null;if(n){var r=n.mutationMethod;if(r)r(e,void 0);else if
 (n.mustUseProperty){var o=n.propertyName;n.hasBooleanValue?e[o]=!1:e[o]=""}else e.removeAttribute(n.attributeName)}else a.isCustomAttribute(t)&&e.removeAttribute(t)}};e.exports=c},function(e,t,n){"use strict";var r=null;e.exports={debugTool:r}},function(e,t,n){"use strict";function r(e){return'"'+o(e)+'"'}var o=n(77);e.exports=r},function(e,t,n){"use strict";function r(e){return Object.prototype.hasOwnProperty.call(e,v)||(e[v]=h++,d[e[v]]={}),d[e[v]]}var o,a=n(4),i=n(37),s=n(40),u=n(99),l=n(67),c=n(100),p=n(61),d={},f=!1,h=0,m={topAbort:"abort",topAnimationEnd:c("animationend")||"animationend",topAnimationIteration:c("animationiteration")||"animationiteration",topAnimationStart:c("animationstart")||"animationstart",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:&quot
 ;click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",to
 pMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:c("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},v="_reactListenersID"+String(Math.random()).slice(2),g=a({},u,{ReactEventListener:null,i
 njection:{injectReactEventListener:function(e){e.setHandleTopLevel(g.handleTopLevel),g.ReactEventListener=e}},setEnabled:function(e){g.ReactEventListener&&g.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!g.ReactEventListener||!g.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,o=r(n),a=s.registrationNameDependencies[e],u=i.topLevelTypes,l=0;l<a.length;l++){var c=a[l];o.hasOwnProperty(c)&&o[c]||(c===u.topWheel?p("wheel")?g.ReactEventListener.trapBubbledEvent(u.topWheel,"wheel",n):p("mousewheel")?g.ReactEventListener.trapBubbledEvent(u.topWheel,"mousewheel",n):g.ReactEventListener.trapBubbledEvent(u.topWheel,"DOMMouseScroll",n):c===u.topScroll?p("scroll",!0)?g.ReactEventListener.trapCapturedEvent(u.topScroll,"scroll",n):g.ReactEventListener.trapBubbledEvent(u.topScroll,"scroll",g.ReactEventListener.WINDOW_HANDLE):c===u.topFocus||c===u.topBlur?(p("
 focus",!0)?(g.ReactEventListener.trapCapturedEvent(u.topFocus,"focus",n),g.ReactEventListener.trapCapturedEvent(u.topBlur,"blur",n)):p("focusin")&&(g.ReactEventListener.trapBubbledEvent(u.topFocus,"focusin",n),g.ReactEventListener.trapBubbledEvent(u.topBlur,"focusout",n)),o[u.topBlur]=!0,o[u.topFocus]=!0):m.hasOwnProperty(c)&&g.ReactEventListener.trapBubbledEvent(c,m[c],n),o[c]=!0)}},trapBubbledEvent:function(e,t,n){return g.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return g.ReactEventListener.trapCapturedEvent(e,t,n)},ensureScrollValueMonitoring:function(){if(void 0===o&&(o=document.createEvent&&"pageX"in document.createEvent("MouseEvent")),!o&&!f){var e=l.refreshScrollValues;g.ReactEventListener.monitorScrollValue(e),f=!0}}});e.exports=g},function(e,t,n){"use strict";function r(e){o.enqueueEvents(e),o.processEventQueue(!1)
 }var o=n(39),a={handleTopLevel:function(e,t,n,a){var i=o.extractEvents(e,t,n,a);r(i)}};e.exports=a},function(e,t,n){"use strict";function r(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function o(e){if(s[e])return s[e];if(!i[e])return e;var t=i[e];for(var n in t)if(t.hasOwnProperty(n)&&n in u)return s[e]=t[n];return"";
-}var a=n(45),i={animationend:r("Animation","AnimationEnd"),animationiteration:r("Animation","AnimationIteration"),animationstart:r("Animation","AnimationStart"),transitionend:r("Transition","TransitionEnd")},s={},u={};a.canUseDOM&&(u=document.createElement("div").style,"AnimationEvent"in window||(delete i.animationend.animation,delete i.animationiteration.animation,delete i.animationstart.animation),"TransitionEvent"in window||delete i.transitionend.transition),e.exports=o},function(e,t,n){"use strict";var r=n(102),o={getHostProps:r.getHostProps};e.exports=o},function(e,t){"use strict";var n={onClick:!0,onDoubleClick:!0,onMouseDown:!0,onMouseMove:!0,onMouseUp:!0,onClickCapture:!0,onDoubleClickCapture:!0,onMouseDownCapture:!0,onMouseMoveCapture:!0,onMouseUpCapture:!0},r={getHostProps:function(e,t){if(!t.disabled)return t;var r={};for(var o in t)!n[
 o]&&t.hasOwnProperty(o)&&(r[o]=t[o]);return r}};e.exports=r},function(e,t,n){"use strict";function r(){this._rootNodeID&&d.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=l.executeOnChange(t,e);p.asap(r,this);var o=t.name;if("radio"===t.type&&null!=o){for(var i=c.getNodeFromInstance(this),s=i;s.parentNode;)s=s.parentNode;for(var u=s.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),d=0;d<u.length;d++){var f=u[d];if(f!==i&&f.form===i.form){var h=c.getInstanceFromNode(f);h?void 0:a("90"),p.asap(r,h)}}}return n}var a=n(7),i=n(4),s=n(102),u=n(95),l=n(104),c=n(32),p=n(52),d=(n(8),n(11),{getHostProps:function(e,t){var n=l.getValue(t),r=l.getChecked(t),o=i({type:void 0},s.getHostProps(e,t),{defaultChecked:void 0,defaultValue:void 0,value:null!=n?n:e._wrapperState.initialValue,checked:null!=r?r:e._wrapperState.initialChecked,onChange:e._wrapperStat
 e.onChange});return o},mountWrapper:function(e,t){var n=t.defaultValue;e._wrapperState={initialChecked:null!=t.checked?t.checked:t.defaultChecked,initialValue:null!=t.value?t.value:n,listeners:null,onChange:o.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=t.checked;null!=n&&u.setValueForProperty(c.getNodeFromInstance(e),"checked",n||!1);var r=c.getNodeFromInstance(e),o=l.getValue(t);if(null!=o){var a=""+o;a!==r.value&&(r.value=a)}else null==t.value&&null!=t.defaultValue&&(r.defaultValue=""+t.defaultValue),null==t.checked&&null!=t.defaultChecked&&(r.defaultChecked=!!t.defaultChecked)},postMountWrapper:function(e){var t=e._currentElement.props,n=c.getNodeFromInstance(e);"submit"!==t.type&&"reset"!==t.type&&(n.value=n.value);var r=n.name;""!==r&&(n.name=""),n.defaultChecked=!n.defaultChecked,n.defaultChecked=!n.defaultChecked
 ,""!==r&&(n.name=r)}});e.exports=d},function(e,t,n){"use strict";function r(e){null!=e.checkedLink&&null!=e.valueLink?s("87"):void 0}function o(e){r(e),null!=e.value||null!=e.onChange?s("88"):void 0}function a(e){r(e),null!=e.checked||null!=e.onChange?s("89"):void 0}function i(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}var s=n(7),u=n(27),l=n(21),c=(n(8),n(11),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0}),p={value:function(e,t,n){return!e[t]||c[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You prov
 ided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:u.func},d={},f={checkPropTypes:function(e,t,n){for(var r in p){if(p.hasOwnProperty(r))var o=p[r](t,r,e,l.prop);if(o instanceof Error&&!(o.message in d)){d[o.message]=!0;i(n)}}},getValue:function(e){return e.valueLink?(o(e),e.valueLink.value):e.value},getChecked:function(e){return e.checkedLink?(a(e),e.checkedLink.value):e.checked},executeOnChange:function(e,t){return e.valueLink?(o(e),e.valueLink.requestChange(t.target.value)):e.checkedLink?(a(e),e.checkedLink.requestChange(t.target.checked)):e.onChange?e.onChange.call(void 0,t):void 0}};e.exports=f},function(e,t,n){"use strict";function r(e){var t="";return a.forEach(e,function(e){null!=e&&("string"==typeof e||"number"==typeof e?t+=e:u||(u=!0))}),t}var o=n(4
 ),a=n(5),i=n(32),s=n(106),u=(n(11),!1),l={mountWrapper:function(e,t,n){var o=null;if(null!=n){var a=n;"optgroup"===a._tag&&(a=a._hostParent),null!=a&&"select"===a._tag&&(o=s.getSelectValueContext(a))}var i=null;if(null!=o){var u;if(u=null!=t.value?t.value+"":r(t.children),i=!1,Array.isArray(o)){for(var l=0;l<o.length;l++)if(""+o[l]===u){i=!0;break}}else i=""+o===u}e._wrapperState={selected:i}},postMountWrapper:function(e){var t=e._currentElement.props;if(null!=t.value){var n=i.getNodeFromInstance(e);n.setAttribute("value",t.value)}},getHostProps:function(e,t){var n=o({selected:void 0,children:void 0},t);null!=e._wrapperState.selected&&(n.selected=e._wrapperState.selected);var a=r(t.children);return a&&(n.children=a),n}};e.exports=l},function(e,t,n){"use strict";function r(){if(this._rootNodeID&&this._wrapperState.pendingUpdate){this._wrapperState.pendingUpdate=!1;
 var e=this._currentElement.props,t=u.getValue(e);null!=t&&o(this,Boolean(e.multiple),t)}}function o(e,t,n){var r,o,a=l.getNodeFromInstance(e).options;if(t){for(r={},o=0;o<n.length;o++)r[""+n[o]]=!0;for(o=0;o<a.length;o++){var i=r.hasOwnProperty(a[o].value);a[o].selected!==i&&(a[o].selected=i)}}else{for(r=""+n,o=0;o<a.length;o++)if(a[o].value===r)return void(a[o].selected=!0);a.length&&(a[0].selected=!0)}}function a(e){var t=this._currentElement.props,n=u.executeOnChange(t,e);return this._rootNodeID&&(this._wrapperState.pendingUpdate=!0),c.asap(r,this),n}var i=n(4),s=n(102),u=n(104),l=n(32),c=n(52),p=(n(11),!1),d={getHostProps:function(e,t){return i({},s.getHostProps(e,t),{onChange:e._wrapperState.onChange,value:void 0})},mountWrapper:function(e,t){var n=u.getValue(t);e._wrapperState={pendingUpdate:!1,initialValue:null!=n?n:t.defaultValue,listeners:null,onChange:a.bind(e),wasMultiple:Boolean(t.multiple)},void 0===t.value||v
 oid 0===t.defaultValue||p||(p=!0)},getSelectValueContext:function(e){return e._wrapperState.initialValue},postUpdateWrapper:function(e){var t=e._currentElement.props;e._wrapperState.initialValue=void 0;var n=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=Boolean(t.multiple);var r=u.getValue(t);null!=r?(e._wrapperState.pendingUpdate=!1,o(e,Boolean(t.multiple),r)):n!==Boolean(t.multiple)&&(null!=t.defaultValue?o(e,Boolean(t.multiple),t.defaultValue):o(e,Boolean(t.multiple),t.multiple?[]:""))}};e.exports=d},function(e,t,n){"use strict";function r(){this._rootNodeID&&p.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=u.executeOnChange(t,e);return c.asap(r,this),n}var a=n(7),i=n(4),s=n(102),u=n(104),l=n(32),c=n(52),p=(n(8),n(11),{getHostProps:function(e,t){null!=t.dangerouslySetInnerHTML?a("91"):void 0;var n=i({},s.getHostProps(e,t),{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialVal
 ue,onChange:e._wrapperState.onChange});return n},mountWrapper:function(e,t){var n=u.getValue(t),r=n;if(null==n){var i=t.defaultValue,s=t.children;null!=s&&(null!=i?a("92"):void 0,Array.isArray(s)&&(s.length<=1?void 0:a("93"),s=s[0]),i=""+s),null==i&&(i=""),r=i}e._wrapperState={initialValue:""+r,listeners:null,onChange:o.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=l.getNodeFromInstance(e),r=u.getValue(t);if(null!=r){var o=""+r;o!==n.value&&(n.value=o),null==t.defaultValue&&(n.defaultValue=o)}null!=t.defaultValue&&(n.defaultValue=t.defaultValue)},postMountWrapper:function(e){var t=l.getNodeFromInstance(e);t.value=t.textContent}});e.exports=p},function(e,t,n){"use strict";function r(e,t,n){return{type:d.INSERT_MARKUP,content:e,fromIndex:null,fromNode:null,toIndex:n,afterNode:t}}function o(e,t,n){return{type:d.MOVE_EXISTING,content:null,fromInd
 ex:e._mountIndex,fromNode:f.getHostNode(e),toIndex:n,afterNode:t}}function a(e,t){return{type:d.REMOVE_NODE,content:null,fromIndex:e._mountIndex,fromNode:t,toIndex:null,afterNode:null}}function i(e){return{type:d.SET_MARKUP,content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function s(e){return{type:d.TEXT_CONTENT,content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function u(e,t){return t&&(e=e||[],e.push(t)),e}function l(e,t){p.processChildrenUpdates(e,t)}var c=n(7),p=n(109),d=(n(110),n(58),n(82)),f=(n(10),n(55)),h=n(111),m=(n(12),n(119)),v=(n(8),{Mixin:{_reconcilerInstantiateChildren:function(e,t,n){return h.instantiateChildren(e,t,n)},_reconcilerUpdateChildren:function(e,t,n,r,o){var a;return a=m(t),h.updateChildren(e,a,n,r,o),a},mountChildren:function(e,t,n){var r=this._reconcilerInstantiateChildren(e,t,n);this._renderedChildren=r;var o=[],a=0;for(var i in r)if(r.hasOwnProperty(i)){var s=r[i],u=f.mountComponent(s,t,this,this._hostContain
 erInfo,n);s._mountIndex=a++,o.push(u)}return o},updateTextContent:function(e){var t=this._renderedChildren;h.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&c("118");var r=[s(e)];l(this,r)},updateMarkup:function(e){var t=this._renderedChildren;h.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&c("118");var r=[i(e)];l(this,r)},updateChildren:function(e,t,n){this._updateChildren(e,t,n)},_updateChildren:function(e,t,n){var r=this._renderedChildren,o={},a=this._reconcilerUpdateChildren(r,e,o,t,n);if(a||r){var i,s=null,c=0,p=0,d=null;for(i in a)if(a.hasOwnProperty(i)){var h=r&&r[i],m=a[i];h===m?(s=u(s,this.moveChild(h,d,p,c)),c=Math.max(h._mountIndex,c),h._mountIndex=p):(h&&(c=Math.max(h._mountIndex,c)),s=u(s,this._mountChildAtIndex(m,d,p,t,n))),p++,d=f.getHostNode(m)}for(i in o)o.hasOwnProperty(i)&&(s=u(s,this._unmountChild(r[i],o[i])));s&&l(this,s),this._renderedChildren=a}},unmountChildren:function(
 e){var t=this._renderedChildren;h.unmountChildren(t,e),this._renderedChildren=null},moveChild:function(e,t,n,r){if(e._mountIndex<r)return o(e,t,n)},createChild:function(e,t,n){return r(n,t,e._mountIndex)},removeChild:function(e,t){return a(e,t)},_mountChildAtIndex:function(e,t,n,r,o){var a=f.mountComponent(e,r,this,this._hostContainerInfo,o);return e._mountIndex=n,this.createChild(e,t,a)},_unmountChild:function(e,t){var n=this.removeChild(e,t);return e._mountIndex=null,n}}});e.exports=v},function(e,t,n){"use strict";var r=n(7),o=(n(8),!1),a={unmountIDFromEnvironment:null,replaceNodeWithMarkup:null,processChildrenUpdates:null,injection:{injectEnvironment:function(e){o?r("104"):void 0,a.unmountIDFromEnvironment=e.unmountIDFromEnvironment,a.replaceNodeWithMarkup=e.replaceNodeWithMarkup,a.processChildrenUpdates=e.processChildrenUpdates,o=!0}}};e.exports=a},function(e,t){"use strict";var n={remove:function(e){e._reactInternalInstance=void 0},get:function(
 e){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};e.exports=n},function(e,t,n){"use strict";function r(e,t,n,r){var o=void 0===e[n];null!=t&&o&&(e[n]=a(t,!0))}var o=n(55),a=n(112),i=(n(16),n(116)),s=n(14),u=(n(11),{instantiateChildren:function(e,t,n,o){if(null==e)return null;var a={};return s(e,r,a),a},updateChildren:function(e,t,n,r,s){if(t||e){var u,l;for(u in t)if(t.hasOwnProperty(u)){l=e&&e[u];var c=l&&l._currentElement,p=t[u];if(null!=l&&i(c,p))o.receiveComponent(l,p,r,s),t[u]=l;else{l&&(n[u]=o.getHostNode(l),o.unmountComponent(l,!1));var d=a(p,!0);t[u]=d}}for(u in e)!e.hasOwnProperty(u)||t&&t.hasOwnProperty(u)||(l=e[u],n[u]=o.getHostNode(l),o.unmountComponent(l,!1))}},unmountChildren:function(e,t){for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];o.unmountComponent(r,t)}}});e.exports=u},function(e,t,n){"use strict&quo
 t;;function r(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}function o(e){return"function"==typeof e&&"undefined"!=typeof e.prototype&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function a(e,t){var n;if(null===e||e===!1)n=l.create(a);else if("object"==typeof e){var s=e;!s||"function"!=typeof s.type&&"string"!=typeof s.type?i("130",null==s.type?s.type:typeof s.type,r(s._owner)):void 0,"string"==typeof s.type?n=c.createInternalComponent(s):o(s.type)?(n=new s.type(s),n.getHostNode||(n.getHostNode=n.getNativeNode)):n=new p(s)}else"string"==typeof e||"number"==typeof e?n=c.createInstanceForText(e):i("131",typeof e);n._mountIndex=0,n._mountImage=null;return n}var i=n(7),s=n(4),u=n(113),l=n(117),c=n(118),p=(n(58),n(8),n(
 11),function(e){this.construct(e)});s(p.prototype,u.Mixin,{_instantiateReactComponent:a});e.exports=a},function(e,t,n){"use strict";function r(e){}function o(e,t){}function a(e){return e.prototype&&e.prototype.isReactComponent}var i=n(7),s=n(4),u=n(109),l=n(10),c=n(9),p=n(42),d=n(110),f=(n(58),n(114)),h=(n(21),n(55)),m=n(115),v=n(19),g=(n(8),n(116));n(11);r.prototype.render=function(){var e=d.get(this)._currentElement.type,t=e(this.props,this.context,this.updater);return o(e,t),t};var y=1,b={construct:function(e){this._currentElement=e,this._rootNodeID=null,this._instance=null,this._hostParent=null,this._hostContainerInfo=null,this._updateBatchNumber=null,this._pendingElement=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._renderedNodeType=null,this._renderedComponent=null,this._context=null,this._mountOrder=0,this._topLevelWrapper=null,this._pendingCallbacks=null,this._calledComponentWillUnmount=!1},mountComponent:f
 unction(e,t,n,s){this._context=s,this._mountOrder=y++,this._hostParent=t,this._hostContainerInfo=n;var u,l=this._currentElement.props,p=this._processContext(s),f=this._currentElement.type,h=e.getUpdateQueue(),m=this._constructComponent(l,p,h);a(f)||null!=m&&null!=m.render||(u=m,o(f,u),null===m||m===!1||c.isValidElement(m)?void 0:i("105",f.displayName||f.name||"Component"),m=new r(f));m.props=l,m.context=p,m.refs=v,m.updater=h,this._instance=m,d.set(m,this);var g=m.state;void 0===g&&(m.state=g=null),"object"!=typeof g||Array.isArray(g)?i("106",this.getName()||"ReactCompositeComponent"):void 0,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1;var b;return b=m.unstable_handleError?this.performInitialMountWithErrorHandling(u,t,n,e,s):this.performInitialMount(u,t,n,e,s),m.componentDidMount&&e.getReactMountReady().enqueue(m.componentDidMount,m),b},_constructComponent:function(e,t,
 n){return this._constructComponentWithoutOwner(e,t,n)},_constructComponentWithoutOwner:function(e,t,n){var r,o=this._currentElement.type;return r=a(o)?new o(e,t,n):o(e,t,n)},performInitialMountWithErrorHandling:function(e,t,n,r,o){var a,i=r.checkpoint();try{a=this.performInitialMount(e,t,n,r,o)}catch(s){r.rollback(i),this._instance.unstable_handleError(s),this._pendingStateQueue&&(this._instance.state=this._processPendingState(this._instance.props,this._instance.context)),i=r.checkpoint(),this._renderedComponent.unmountComponent(!0),r.rollback(i),a=this.performInitialMount(e,t,n,r,o)}return a},performInitialMount:function(e,t,n,r,o){var a=this._instance;a.componentWillMount&&(a.componentWillMount(),this._pendingStateQueue&&(a.state=this._processPendingState(a.props,a.context))),void 0===e&&(e=this._renderValidatedComponent());var i=f.getType(e);this._renderedNodeType=i;var s=this._instantiateReactComponent(e,i!==f.EMPTY);this._renderedComponent=s;var 
 u=h.mountComponent(s,r,t,n,this._processChildContext(o));return u},getHostNode:function(){return h.getHostNode(this._renderedComponent)},unmountComponent:function(e){if(this._renderedComponent){var t=this._instance;if(t.componentWillUnmount&&!t._calledComponentWillUnmount)if(t._calledComponentWillUnmount=!0,e){var n=this.getName()+".componentWillUnmount()";p.invokeGuardedCallback(n,t.componentWillUnmount.bind(t))}else t.componentWillUnmount();this._renderedComponent&&(h.unmountComponent(this._renderedComponent,e),this._renderedNodeType=null,this._renderedComponent=null,this._instance=null),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._pendingCallbacks=null,this._pendingElement=null,this._context=null,this._rootNodeID=null,this._topLevelWrapper=null,d.remove(t)}},_maskContext:function(e){var t=this._currentElement.type,n=t.contextTypes;if(!n)return v;var r={};for(var o in n)r[o]=e[o];return r},_processContext:fun
 ction(e){var t=this._maskContext(e);return t},_processChildContext:function(e){var t=this._currentElement.type,n=this._instance,r=n.getChildContext&&n.getChildContext();if(r){"object"!=typeof t.childContextTypes?i("107",this.getName()||"ReactCompositeComponent"):void 0;for(var o in r)o in t.childContextTypes?void 0:i("108",this.getName()||"ReactCompositeComponent",o);return s({},e,r)}return e},_checkContextTypes:function(e,t,n){m(e,t,n,this.getName(),null,this._debugID)},receiveComponent:function(e,t,n){var r=this._currentElement,o=this._context;this._pendingElement=null,this.updateComponent(t,r,e,o,n)},performUpdateIfNecessary:function(e){null!=this._pendingElement?h.receiveComponent(this,this._pendingElement,e,this._context):null!==this._pendingStateQueue||this._pendingForceUpdate?this.updateComponent(e,this._currentElement,this._currentElement,this._context,this._context):this._updateBatchNumber=null},updateComponent:funct
 ion(e,t,n,r,o){var a=this._instance;null==a?i("136",this.getName()||"ReactCompositeComponent"):void 0;var s,u,l=!1;this._context===o?s=a.context:(s=this._processContext(o),l=!0),u=n.props,t!==n&&(l=!0),l&&a.componentWillReceiveProps&&a.componentWillReceiveProps(u,s);var c=this._processPendingState(u,s),p=!0;!this._pendingForceUpdate&&a.shouldComponentUpdate&&(p=a.shouldComponentUpdate(u,c,s)),this._updateBatchNumber=null,p?(this._pendingForceUpdate=!1,this._performComponentUpdate(n,u,c,s,e,o)):(this._currentElement=n,this._context=o,a.props=u,a.state=c,a.context=s)},_processPendingState:function(e,t){var n=this._instance,r=this._pendingStateQueue,o=this._pendingReplaceState;if(this._pendingReplaceState=!1,this._pendingStateQueue=null,!r)return n.state;if(o&&1===r.length)return r[0];for(var a=s({},o?r[0]:n.state),i=o?1:0;i<r.length;i++){var u=r[i];s(a,"function"==typeof u?u.call(n,a,e,t):u)}return a},_pe
 rformComponentUpdate:function(e,t,n,r,o,a){var i,s,u,l=this._instance,c=Boolean(l.componentDidUpdate);c&&(i=l.props,s=l.state,u=l.context),l.componentWillUpdate&&l.componentWillUpdate(t,n,r),this._currentElement=e,this._context=a,l.props=t,l.state=n,l.context=r,this._updateRenderedComponent(o,a),c&&o.getReactMountReady().enqueue(l.componentDidUpdate.bind(l,i,s,u),l)},_updateRenderedComponent:function(e,t){var n=this._renderedComponent,r=n._currentElement,o=this._renderValidatedComponent();if(g(r,o))h.receiveComponent(n,o,e,this._processChildContext(t));else{var a=h.getHostNode(n);h.unmountComponent(n,!1);var i=f.getType(o);this._renderedNodeType=i;var s=this._instantiateReactComponent(o,i!==f.EMPTY);this._renderedComponent=s;var u=h.mountComponent(s,e,this._hostParent,this._hostContainerInfo,this._processChildContext(t));this._replaceNodeWithMarkup(a,u,n)}},_replaceNodeWithMarkup:function(e,t,n){u.replaceNodeWithMarkup(e,t,n)},_renderValidatedComponentWithout
 OwnerOrContext:function(){var e=this._instance,t=e.render();return t},_renderValidatedComponent:function(){var e;l.current=this;try{e=this._renderValidatedComponentWithoutOwnerOrContext()}finally{l.current=null}return null===e||e===!1||c.isValidElement(e)?void 0:i("109",this.getName()||"ReactCompositeComponent"),e},attachRef:function(e,t){var n=this.getPublicInstance();null==n?i("110"):void 0;var r=t.getPublicInstance(),o=n.refs===v?n.refs={}:n.refs;o[e]=r},detachRef:function(e){var t=this.getPublicInstance().refs;delete t[e]},getName:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null},getPublicInstance:function(){var e=this._instance;return e instanceof r?null:e},_instantiateReactComponent:null},_={Mixin:b};e.exports=_},function(e,t,n){"use strict";var r=n(7),o=n(9),a=(n(8),{HOST:0,COMPOSITE:1,EMPTY:2,getType:function(e
 ){return null===e||e===!1?a.EMPTY:o.isValidElement(e)?"function"==typeof e.type?a.COMPOSITE:a.HOST:void r("26",e)}});e.exports=a},function(e,t,n){"use strict";function r(e,t,n,r,s,u){for(var l in e)if(e.hasOwnProperty(l)){var c;try{"function"!=typeof e[l]?o("84",r||"React class",a[n],l):void 0,c=e[l](t,l,r,n)}catch(p){c=p}if(c instanceof Error&&!(c.message in i)){i[c.message]=!0}}}var o=n(7),a=n(23),i=(n(8),n(11),{});e.exports=r},function(e,t){"use strict";function n(e,t){var n=null===e||e===!1,r=null===t||t===!1;if(n||r)return n===r;var o=typeof e,a=typeof t;return"string"===o||"number"===o?"string"===a||"number"===a:"object"===a&&e.type===t.type&&e.key===t.key}e.exports=n},function(e,t){"use strict";var n,r={injectEmptyComponentFactory:function(e){n=e}},o={create:function(e){return n(e)}};o.injection=r,e.exports=o},function(e,t,n
 ){"use strict";function r(e){return u?void 0:i("111",e.type),new u(e)}function o(e){return new c(e)}function a(e){return e instanceof c}var i=n(7),s=n(4),u=(n(8),null),l={},c=null,p={injectGenericComponentClass:function(e){u=e},injectTextComponentClass:function(e){c=e},injectComponentClasses:function(e){s(l,e)}},d={createInternalComponent:r,createInstanceForText:o,isTextComponent:a,injection:p};e.exports=d},function(e,t,n){"use strict";function r(e,t,n,r){if(e&&"object"==typeof e){var o=e,a=void 0===o[n];a&&null!=t&&(o[n]=t)}}function o(e,t){if(null==e)return e;var n={};return a(e,r,n),n}var a=(n(16),n(14));n(11);e.exports=o},function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=e,this.useCreateElement=!1,this.updateQueue=new s(this)}var o=n(4),a=n(6),i=n(59),s=(n(58),n(121)),u=[],l={enqueue:function(){}},c={getTransactionWrappers:function(){return u},getReactMount
 Ready:function(){return l},getUpdateQueue:function(){return this.updateQueue},destructor:function(){},checkpoint:function(){},rollback:function(){}};o(r.prototype,i.Mixin,c),a.addPoolingTo(r),e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){}var a=n(122),i=(n(59),n(11),function(){function e(t){r(this,e),this.transaction=t}return e.prototype.isMounted=function(e){return!1},e.prototype.enqueueCallback=function(e,t,n){this.transaction.isInTransaction()&&a.enqueueCallback(e,t,n)},e.prototype.enqueueForceUpdate=function(e){this.transaction.isInTransaction()?a.enqueueForceUpdate(e):o(e,"forceUpdate")},e.prototype.enqueueReplaceState=function(e,t){this.transaction.isInTransaction()?a.enqueueReplaceState(e,t):o(e,"replaceState")},e.prototype.enqueueSetState=function(e,t){this.transaction.isInTransaction()?a.enqueueSetState(e,t):o(e,"setS
 tate")},e}());e.exports=i},function(e,t,n){"use strict";function r(e){u.enqueueUpdate(e)}function o(e){var t=typeof e;if("object"!==t)return t;var n=e.constructor&&e.constructor.name||t,r=Object.keys(e);return r.length>0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}function a(e,t){var n=s.get(e);return n?n:null}var i=n(7),s=(n(10),n(110)),u=(n(58),n(52)),l=(n(8),n(11),{isMounted:function(e){var t=s.get(e);return!!t&&!!t._renderedComponent},enqueueCallback:function(e,t,n){l.validateCallback(t,n);var o=a(e);return o?(o._pendingCallbacks?o._pendingCallbacks.push(t):o._pendingCallbacks=[t],void r(o)):null},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],r(e)},enqueueForceUpdate:function(e){var t=a(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,r(t))},enqueueReplaceState:function(e,t){var n=a(e,"replaceState");n&
 &(n._pendingStateQueue=[t],n._pendingReplaceState=!0,r(n))},enqueueSetState:function(e,t){var n=a(e,"setState");if(n){var o=n._pendingStateQueue||(n._pendingStateQueue=[]);o.push(t),r(n)}},enqueueElementInternal:function(e,t,n){e._pendingElement=t,e._context=n,r(e)},validateCallback:function(e,t){e&&"function"!=typeof e?i("122",t,o(e)):void 0}});e.exports=l},function(e,t){"use strict";function n(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function r(e,t){if(n(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var r=Object.keys(e),a=Object.keys(t);if(r.length!==a.length)return!1;for(var i=0;i<r.length;i++)if(!o.call(t,r[i])||!n(e[r[i]],t[r[i]]))return!1;return!0}var o=Object.prototype.hasOwnProperty;e.exports=r},function(e,t,n){"use strict";var r=(n(4),n(12)),o=(n(11),r);e.exports=o},function(e,t,n){"use strict";var r=n(4),o=n(72),a=n(32),i=func
 tion(e){this._currentElement=null,this._hostNode=null,this._hostParent=null,this._hostContainerInfo=null,this._domID=null};r(i.prototype,{mountComponent:function(e,t,n,r){var i=n._idCounter++;this._domID=i,this._hostParent=t,this._hostContainerInfo=n;var s=" react-empty: "+this._domID+" ";if(e.useCreateElement){var u=n._ownerDocument,l=u.createComment(s);return a.precacheNode(this,l),o(l)}return e.renderToStaticMarkup?"":"<!--"+s+"-->"},receiveComponent:function(){},getHostNode:function(){return a.getNodeFromInstance(this)},unmountComponent:function(){a.uncacheNode(this)}}),e.exports=i},function(e,t,n){"use strict";function r(e,t){"_hostNode"in e?void 0:u("33"),"_hostNode"in t?void 0:u("33");for(var n=0,r=e;r;r=r._hostParent)n++;for(var o=0,a=t;a;a=a._hostParent)o++;for(;n-o>0;)e=e._hostParent,n--;for(;o-n>0;)t=t._hostParent,o--;for(var i=n;i--;){if(e===t)return e;e=e._hos
 tParent,t=t._hostParent}return null}function o(e,t){"_hostNode"in e?void 0:u("35"),"_hostNode"in t?void 0:u("35");for(;t;){if(t===e)return!0;t=t._hostParent}return!1}function a(e){return"_hostNode"in e?void 0:u("36"),e._hostParent}function i(e,t,n){for(var r=[];e;)r.push(e),e=e._hostParent;var o;for(o=r.length;o-- >0;)t(r[o],!1,n);for(o=0;o<r.length;o++)t(r[o],!0,n)}function s(e,t,n,o,a){for(var i=e&&t?r(e,t):null,s=[];e&&e!==i;)s.push(e),e=e._hostParent;for(var u=[];t&&t!==i;)u.push(t),t=t._hostParent;var l;for(l=0;l<s.length;l++)n(s[l],!0,o);for(l=u.length;l-- >0;)n(u[l],!1,a)}var u=n(7);n(8);e.exports={isAncestor:o,getLowestCommonAncestor:r,getParentInstance:a,traverseTwoPhase:i,traverseEnterLeave:s}},function(e,t,n){"use strict";var r=n(7),o=n(4),a=n(71),i=n(72),s=n(32),u=(n(58),n(77)),l=(n(8),n(124),function(e){this._currentElement=e,this._stringText=""+e,this._ho
 stNode=null,this._hostParent=null,this._domID=null,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});o(l.prototype,{mountComponent:function(e,t,n,r){var o=n._idCounter++,a=" react-text: "+o+" ",l=" /react-text ";if(this._domID=o,this._hostParent=t,e.useCreateElement){var c=n._ownerDocument,p=c.createComment(a),d=c.createComment(l),f=i(c.createDocumentFragment());return i.queueChild(f,i(p)),this._stringText&&i.queueChild(f,i(c.createTextNode(this._stringText))),i.queueChild(f,i(d)),s.precacheNode(this,p),this._closingComment=d,f}var h=u(this._stringText);return e.renderToStaticMarkup?h:"<!--"+a+"-->"+h+"<!--"+l+"-->"},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;if(n!==this._stringText){this._stringText=n;var r=this.getHostNode();a.replaceDelimitedText(r[0],r[1],n)}}},getHostNode:function(){var e=this._commentNodes;i
 f(e)return e;if(!this._closingComment)for(var t=s.getNodeFromInstance(this),n=t.nextSibling;;){if(null==n?r("67",this._domID):void 0,8===n.nodeType&&" /react-text "===n.nodeValue){this._closingComment=n;break}n=n.nextSibling}return e=[this._hostNode,this._closingComment],this._commentNodes=e,e},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,s.uncacheNode(this)}}),e.exports=l},function(e,t,n){"use strict";function r(){this.reinitializeTransaction()}var o=n(4),a=n(52),i=n(59),s=n(12),u={initialize:s,close:function(){d.isBatchingUpdates=!1}},l={initialize:s,close:a.flushBatchedUpdates.bind(a)},c=[l,u];o(r.prototype,i.Mixin,{getTransactionWrappers:function(){return c}});var p=new r,d={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,o,a){var i=d.isBatchingUpdates;d.isBatchingUpdates=!0,i?e(t,n,r,o,a):p.perform(e,null,t,n,r,o,a)}};e.exports=d},function(e,t,n){"use strict";function r(e){for(;e._hostParent;)
 e=e._hostParent;var t=p.getNodeFromInstance(e),n=t.parentNode;return p.getClosestInstanceFromNode(n)}function o(e,t){this.topLevelType=e,this.nativeEvent=t,this.ancestors=[]}function a(e){var t=f(e.nativeEvent),n=p.getClosestInstanceFromNode(t),o=n;do e.ancestors.push(o),o=o&&r(o);while(o);for(var a=0;a<e.ancestors.length;a++)n=e.ancestors[a],m._handleTopLevel(e.topLevelType,n,e.nativeEvent,f(e.nativeEvent))}function i(e){var t=h(window);e(t)}var s=n(4),u=n(130),l=n(45),c=n(6),p=n(32),d=n(52),f=n(60),h=n(131);s(o.prototype,{destructor:function(){this.topLevelType=null,this.nativeEvent=null,this.ancestors.length=0}}),c.addPoolingTo(o,c.twoArgumentPooler);var m={_enabled:!0,_handleTopLevel:null,WINDOW_HANDLE:l.canUseDOM?window:null,setHandleTopLevel:function(e){m._handleTopLevel=e},setEnabled:function(e){m._enabled=!!e},isEnabled:function(){return m._enabled},trapBubbledEvent:function(e,t,n){var r=n;return r?u.listen(r,t,m.dispatchEvent.bind(null,e)):null},trapCapturedEvent
 :function(e,t,n){var r=n;return r?u.capture(r,t,m.dispatchEvent.bind(null,e)):null},monitorScrollValue:function(e){var t=i.bind(null,e);u.listen(window,"scroll",t)},dispatchEvent:function(e,t){if(m._enabled){var n=o.getPooled(e,t);try{d.batchedUpdates(a,n)}finally{o.release(n)}}}};e.exports=m},function(e,t,n){"use strict";var r=n(12),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};e.exports=o},function(e,t){"use strict";function n(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrol
 lTop}}e.exports=n},function(e,t,n){"use strict";var r=n(33),o=n(39),a=n(41),i=n(109),s=n(20),u=n(117),l=n(98),c=n(118),p=n(52),d={Component:i.injection,Class:s.injection,DOMProperty:r.injection,EmptyComponent:u.injection,EventPluginHub:o.injection,EventPluginUtils:a.injection,EventEmitter:l.injection,HostComponent:c.injection,Updates:p.injection};e.exports=d},function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=a.getPooled(null),this.useCreateElement=e}var o=n(4),a=n(53),i=n(6),s=n(98),u=n(134),l=(n(58),n(59)),c=n(122),p={initialize:u.getSelectionInformation,close:u.restoreSelection},d={initialize:function(){var e=s.isEnabled();return s.setEnabled(!1),e},close:function(e){s.setEnabled(e)}},f={initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}},h=[p,d,f],m={getTransactionWrappers:function(){return h},getReactMountReady:function(){return this.r
 eactMountReady},getUpdateQueue:function(){return c},checkpoint:function(){return this.reactMountReady.checkpoint()},rollback:function(e){this.reactMountReady.rollback(e)},destructor:function(){a.release(this.reactMountReady),this.reactMountReady=null}};o(r.prototype,l.Mixin,m),i.addPoolingTo(r),e.exports=r},function(e,t,n){"use strict";function r(e){return a(document.documentElement,e)}var o=n(135),a=n(137),i=n(86),s=n(140),u={hasSelectionCapabilities:function(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&"text"===e.type||"textarea"===t||"true"===e.contentEditable)},getSelectionInformation:function(){var e=s();return{focusedElem:e,selectionRange:u.hasSelectionCapabilities(e)?u.getSelection(e):null
-}},restoreSelection:function(e){var t=s(),n=e.focusedElem,o=e.selectionRange;t!==n&&r(n)&&(u.hasSelectionCapabilities(n)&&u.setSelection(n,o),i(n))},getSelection:function(e){var t;if("selectionStart"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&e.nodeName&&"input"===e.nodeName.toLowerCase()){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart("character",-e.value.length),end:-n.moveEnd("character",-e.value.length)})}else t=o.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,r=t.end;if(void 0===r&&(r=n),"selectionStart"in e)e.selectionStart=n,e.selectionEnd=Math.min(r,e.value.length);else if(document.selection&&e.nodeName&&"input"===e.nodeName.toLowerCase()){var a=e.createTextRange();a.collapse(!0),a.moveStart("character",n),a.moveEnd("charact
 er",r-n),a.select()}else o.setOffsets(e,t)}};e.exports=u},function(e,t,n){"use strict";function r(e,t,n,r){return e===n&&t===r}function o(e){var t=document.selection,n=t.createRange(),r=n.text.length,o=n.duplicate();o.moveToElementText(e),o.setEndPoint("EndToStart",n);var a=o.text.length,i=a+r;return{start:a,end:i}}function a(e){var t=window.getSelection&&window.getSelection();if(!t||0===t.rangeCount)return null;var n=t.anchorNode,o=t.anchorOffset,a=t.focusNode,i=t.focusOffset,s=t.getRangeAt(0);try{s.startContainer.nodeType,s.endContainer.nodeType}catch(u){return null}var l=r(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset),c=l?0:s.toString().length,p=s.cloneRange();p.selectNodeContents(e),p.setEnd(s.startContainer,s.startOffset);var d=r(p.startContainer,p.startOffset,p.endContainer,p.endOffset),f=d?0:p.toString().length,h=f+c,m=document.createRange();m.setStart(n,o),m.setEnd(a,i);var v=m.collapsed;return{start:v?h:f,end:v?f:h}}function
  i(e,t){var n,r,o=document.selection.createRange().duplicate();void 0===t.end?(n=t.start,r=n):t.start>t.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function s(e,t){if(window.getSelection){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),a=void 0===t.end?o:Math.min(t.end,r);if(!n.extend&&o>a){var i=a;a=o,o=i}var s=l(e,o),u=l(e,a);if(s&&u){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>a?(n.addRange(p),n.extend(u.node,u.offset)):(p.setEnd(u.node,u.offset),n.addRange(p))}}}var u=n(45),l=n(136),c=n(47),p=u.canUseDOM&&"selection"in document&&!("getSelection"in window),d={getOffsets:p?o:a,setOffsets:p?i:s};e.exports=d},function(e,t){"use strict";function n(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function r(e)
 {for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function o(e,t){for(var o=n(e),a=0,i=0;o;){if(3===o.nodeType){if(i=a+o.textContent.length,a<=t&&i>=t)return{node:o,offset:t-a};a=i}o=n(r(o))}}e.exports=o},function(e,t,n){"use strict";function r(e,t){return!(!e||!t)&&(e===t||!o(e)&&(o(t)?r(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}var o=n(138);e.exports=r},function(e,t,n){"use strict";function r(e){return o(e)&&3==e.nodeType}var o=n(139);e.exports=r},function(e,t){"use strict";function n(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}e.exports=n},function(e,t){"use strict";function n(){if("undefined"==typeof document)return null;try{return document.
 activeElement||document.body}catch(e){return document.body}}e.exports=n},function(e,t){"use strict";var n={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},r={accentHeight:"accent-height",accumulate:0,additive:0,alignmentBaseline:"alignment-baseline",allowReorder:"allowReorder",alphabetic:0,amplitude:0,arabicForm:"arabic-form",ascent:0,attributeName:"attributeName",attributeType:"attributeType",autoReverse:"autoReverse",azimuth:0,baseFrequency:"baseFrequency",baseProfile:"baseProfile",baselineShift:"baseline-shift",bbox:0,begin:0,bias:0,by:0,calcMode:"calcMode",capHeight:"cap-height",clip:0,clipPath:"clip-path",clipRule:"clip-rule",clipPathUnits:"clipPathUnits",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters&quot
 ;,colorProfile:"color-profile",colorRendering:"color-rendering",contentScriptType:"contentScriptType",contentStyleType:"contentStyleType",cursor:0,cx:0,cy:0,d:0,decelerate:0,descent:0,diffuseConstant:"diffuseConstant",direction:0,display:0,divisor:0,dominantBaseline:"dominant-baseline",dur:0,dx:0,dy:0,edgeMode:"edgeMode",elevation:0,enableBackground:"enable-background",end:0,exponent:0,externalResourcesRequired:"externalResourcesRequired",fill:0,fillOpacity:"fill-opacity",fillRule:"fill-rule",filter:0,filterRes:"filterRes",filterUnits:"filterUnits",floodColor:"flood-color",floodOpacity:"flood-opacity",focusable:0,fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeigh
 t:"font-weight",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",glyphRef:"glyphRef",gradientTransform:"gradientTransform",gradientUnits:"gradientUnits",hanging:0,horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",ideographic:0,imageRendering:"image-rendering","in":0,in2:0,intercept:0,k:0,k1:0,k2:0,k3:0,k4:0,kernelMatrix:"kernelMatrix",kernelUnitLength:"kernelUnitLength",kerning:0,keyPoints:"keyPoints",keySplines:"keySplines",keyTimes:"keyTimes",lengthAdjust:"lengthAdjust",letterSpacing:"letter-spacing",lightingColor:"lighting-color",limitingConeAngle:"limitingConeAngle",local:0,markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"ma
 rker-start",markerHeight:"markerHeight",markerUnits:"markerUnits",markerWidth:"markerWidth",mask:0,maskContentUnits:"maskContentUnits",maskUnits:"maskUnits",mathematical:0,mode:0,numOctaves:"numOctaves",offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pathLength:"pathLength",patternContentUnits:"patternContentUnits",patternTransform:"patternTransform",patternUnits:"patternUnits",pointerEvents:"pointer-events",points:0,pointsAtX:"pointsAtX",pointsAtY:"pointsAtY",pointsAtZ:"pointsAtZ",preserveAlpha:"preserveAlpha",preserveAspectRatio:"preserveAspectRatio",primitiveUnits:"primitiveUnits",r:0,radius:0,refX:"refX",ref
 Y:"refY",renderingIntent:"rendering-intent",repeatCount:"repeatCount",repeatDur:"repeatDur",requiredExtensions:"requiredExtensions",requiredFeatures:"requiredFeatures",restart:0,result:0,rotate:0,rx:0,ry:0,scale:0,seed:0,shapeRendering:"shape-rendering",slope:0,spacing:0,specularConstant:"specularConstant",specularExponent:"specularExponent",speed:0,spreadMethod:"spreadMethod",startOffset:"startOffset",stdDeviation:"stdDeviation",stemh:0,stemv:0,stitchTiles:"stitchTiles",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",string:0,stroke:0,strokeDasharray:"stroke-dasharray",strokeDashoffset:"stroke-dashoffset",strokeLinecap:"stroke-linecap",strokeLinejoin:"stroke-linejoin",strokeMiter
 limit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",surfaceScale:"surfaceScale",systemLanguage:"systemLanguage",tableValues:"tableValues",targetX:"targetX",targetY:"targetY",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",textLength:"textLength",to:0,transform:0,u1:0,u2:0,underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicode:0,unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",values:0,vectorEffect:"vector-effect",version:0,vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y&q
 uot;,viewBox:"viewBox",viewTarget:"viewTarget",visibility:0,widths:0,wordSpacing:"word-spacing",writingMode:"writing-mode",x:0,xHeight:"x-height",x1:0,x2:0,xChannelSelector:"xChannelSelector",xlinkActuate:"xlink:actuate",xlinkArcrole:"xlink:arcrole",xlinkHref:"xlink:href",xlinkRole:"xlink:role",xlinkShow:"xlink:show",xlinkTitle:"xlink:title",xlinkType:"xlink:type",xmlBase:"xml:base",xmlLang:"xml:lang",xmlSpace:"xml:space",y:0,y1:0,y2:0,yChannelSelector:"yChannelSelector",z:0,zoomAndPan:"zoomAndPan"},o={Properties:{},DOMAttributeNamespaces:{xlinkActuate:n.xlink,xlinkArcrole:n.xlink,xlinkHref:n.xlink,xlinkRole:n.xlink,xlinkShow:n.xlink,xlinkTitle:n.xlink,xlinkType:n.xlink,xmlBase:n.xml,xmlLang:n.xml,xmlSpace:n.xml},DOMAttributeNames:{}};Object.keys(r).forEach(function(e){o.Properties[e]=0,r[e]&&(o.DO
 MAttributeNames[e]=r[e])}),e.exports=o},function(e,t,n){"use strict";function r(e){if("selectionStart"in e&&l.hasSelectionCapabilities(e))return{start:e.selectionStart,end:e.selectionEnd};if(window.getSelection){var t=window.getSelection();return{anchorNode:t.anchorNode,anchorOffset:t.anchorOffset,focusNode:t.focusNode,focusOffset:t.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}function o(e,t){if(C||null==y||y!==p())return null;var n=r(y);if(!_||!h(_,n)){_=n;var o=c.getPooled(g.select,b,e,t);return o.type="select",o.target=y,i.accumulateTwoPhaseDispatches(o),o}return null}var a=n(37),i=n(38),s=n(45),u=n(32),l=n(134),c=n(49),p=n(140),d=n(62),f=n(24),h=n(123),m=a.topLevelTypes,v=s.canUseDOM&&"documentMode"in document&&document.documentMode<=11,g={select:{phasedRegistrationNames:{bubbled:f({onSelect:nu
 ll}),captured:f({onSelectCapture:null})},dependencies:[m.topBlur,m.topContextMenu,m.topFocus,m.topKeyDown,m.topMouseDown,m.topMouseUp,m.topSelectionChange]}},y=null,b=null,_=null,C=!1,E=!1,x=f({onSelect:null}),T={eventTypes:g,extractEvents:function(e,t,n,r){if(!E)return null;var a=t?u.getNodeFromInstance(t):window;switch(e){case m.topFocus:(d(a)||"true"===a.contentEditable)&&(y=a,b=t,_=null);break;case m.topBlur:y=null,b=null,_=null;break;case m.topMouseDown:C=!0;break;case m.topContextMenu:case m.topMouseUp:return C=!1,o(n,r);case m.topSelectionChange:if(v)break;case m.topKeyDown:case m.topKeyUp:return o(n,r)}return null},didPutListener:function(e,t,n){t===x&&(E=!0)}};e.exports=T},function(e,t,n){"use strict";var r=n(7),o=n(37),a=n(130),i=n(38),s=n(32),u=n(144),l=n(145),c=n(49),p=n(146),d=n(147),f=n(65),h=n(150),m=n(151),v=n(152),g=n(66),y=n(153),b=n(12),_=n(148),C=(n(8),n(24)),E=o.topLevelTypes,x={abort:{phasedRegistrationNames:{bubbled:C({onAbo
 rt:!0}),captured:C({onAbortCapture:!0})}},animationEnd:{phasedRegistrationNames:{bubbled:C({onAnimationEnd:!0}),captured:C({onAnimationEndCapture:!0})}},animationIteration:{phasedRegistrationNames:{bubbled:C({onAnimationIteration:!0}),captured:C({onAnimationIterationCapture:!0})}},animationStart:{phasedRegistrationNames:{bubbled:C({onAnimationStart:!0}),captured:C({onAnimationStartCapture:!0})}},blur:{phasedRegistrationNames:{bubbled:C({onBlur:!0}),captured:C({onBlurCapture:!0})}},canPlay:{phasedRegistrationNames:{bubbled:C({onCanPlay:!0}),captured:C({onCanPlayCapture:!0})}},canPlayThrough:{phasedRegistrationNames:{bubbled:C({onCanPlayThrough:!0}),captured:C({onCanPlayThroughCapture:!0})}},click:{phasedRegistrationNames:{bubbled:C({onClick:!0}),captured:C({onClickCapture:!0})}},contextMenu:{phasedRegistrationNames:{bubbled:C({onContextMenu:!0}),captured:C({onContextMenuCapture:!0})}},copy:{phasedRegistrationNames:{bubbled:C({onCopy:!0}),captured:C({onCopyCapture:!0})}},cut:{phasedRe
 gistrationNames:{bubbled:C({onCut:!0}),captured:C({onCutCapture:!0})}},doubleClick:{phasedRegistrationNames:{bubbled:C({onDoubleClick:!0}),captured:C({onDoubleClickCapture:!0})}},drag:{phasedRegistrationNames:{bubbled:C({onDrag:!0}),captured:C({onDragCapture:!0})}},dragEnd:{phasedRegistrationNames:{bubbled:C({onDragEnd:!0}),captured:C({onDragEndCapture:!0})}},dragEnter:{phasedRegistrationNames:{bubbled:C({onDragEnter:!0}),captured:C({onDragEnterCapture:!0})}},dragExit:{phasedRegistrationNames:{bubbled:C({onDragExit:!0}),captured:C({onDragExitCapture:!0})}},dragLeave:{phasedRegistrationNames:{bubbled:C({onDragLeave:!0}),captured:C({onDragLeaveCapture:!0})}},dragOver:{phasedRegistrationNames:{bubbled:C({onDragOver:!0}),captured:C({onDragOverCapture:!0})}},dragStart:{phasedRegistrationNames:{bubbled:C({onDragStart:!0}),captured:C({onDragStartCapture:!0})}},drop:{phasedRegistrationNames:{bubbled:C({onDrop:!0}),captured:C({onDropCapture:!0})}},durationChange:{phasedRegistrationNames:{bub
 bled:C({onDurationChange:!0}),captured:C({onDurationChangeCapture:!0})}},emptied:{phasedRegistrationNames:{bubbled:C({onEmptied:!0}),captured:C({onEmptiedCapture:!0})}},encrypted:{phasedRegistrationNames:{bubbled:C({onEncrypted:!0}),captured:C({onEncryptedCapture:!0})}},ended:{phasedRegistrationNames:{bubbled:C({onEnded:!0}),captured:C({onEndedCapture:!0})}},error:{phasedRegistrationNames:{bubbled:C({onError:!0}),captured:C({onErrorCapture:!0})}},focus:{phasedRegistrationNames:{bubbled:C({onFocus:!0}),captured:C({onFocusCapture:!0})}},input:{phasedRegistrationNames:{bubbled:C({onInput:!0}),captured:C({onInputCapture:!0})}},invalid:{phasedRegistrationNames:{bubbled:C({onInvalid:!0}),captured:C({onInvalidCapture:!0})}},keyDown:{phasedRegistrationNames:{bubbled:C({onKeyDown:!0}),captured:C({onKeyDownCapture:!0})}},keyPress:{phasedRegistrationNames:{bubbled:C({onKeyPress:!0}),captured:C({onKeyPressCapture:!0})}},keyUp:{phasedRegistrationNames:{bubbled:C({onKeyUp:!0}),captured:C({onKeyUp
 Capture:!0})}},load:{phasedRegistrationNames:{bubbled:C({onLoad:!0}),captured:C({onLoadCapture:!0})}},loadedData:{phasedRegistrationNames:{bubbled:C({onLoadedData:!0}),captured:C({onLoadedDataCapture:!0})}},loadedMetadata:{phasedRegistrationNames:{bubbled:C({onLoadedMetadata:!0}),captured:C({onLoadedMetadataCapture:!0})}},loadStart:{phasedRegistrationNames:{bubbled:C({onLoadStart:!0}),captured:C({onLoadStartCapture:!0})}},mouseDown:{phasedRegistrationNames:{bubbled:C({onMouseDown:!0}),captured:C({onMouseDownCapture:!0})}},mouseMove:{phasedRegistrationNames:{bubbled:C({onMouseMove:!0}),captured:C({onMouseMoveCapture:!0})}},mouseOut:{phasedRegistrationNames:{bubbled:C({onMouseOut:!0}),captured:C({onMouseOutCapture:!0})}},mouseOver:{phasedRegistrationNames:{bubbled:C({onMouseOver:!0}),captured:C({onMouseOverCapture:!0})}},mouseUp:{phasedRegistrationNames:{bubbled:C({onMouseUp:!0}),captured:C({onMouseUpCapture:!0})}},paste:{phasedRegistrationNames:{bubbled:C({onPaste:!0}),captured:C({on
 PasteCapture:!0})}},pause:{phasedRegistrationNames:{bubbled:C({onPause:!0}),captured:C({onPauseCapture:!0})}},play:{phasedRegistrationNames:{bubbled:C({onPlay:!0}),captured:C({onPlayCapture:!0})}},playing:{phasedRegistrationNames:{bubbled:C({onPlaying:!0}),captured:C({onPlayingCapture:!0})}},progress:{phasedRegistrationNames:{bubbled:C({onProgress:!0}),captured:C({onProgressCapture:!0})}},rateChange:{phasedRegistrationNames:{bubbled:C({onRateChange:!0}),captured:C({onRateChangeCapture:!0})}},reset:{phasedRegistrationNames:{bubbled:C({onReset:!0}),captured:C({onResetCapture:!0})}},scroll:{phasedRegistrationNames:{bubbled:C({onScroll:!0}),captured:C({onScrollCapture:!0})}},seeked:{phasedRegistrationNames:{bubbled:C({onSeeked:!0}),captured:C({onSeekedCapture:!0})}},seeking:{phasedRegistrationNames:{bubbled:C({onSeeking:!0}),captured:C({onSeekingCapture:!0})}},stalled:{phasedRegistrationNames:{bubbled:C({onStalled:!0}),captured:C({onStalledCapture:!0})}},submit:{phasedRegistrationNames:
 {bubbled:C({onSubmit:!0}),captured:C({onSubmitCapture:!0})}},suspend:{phasedRegistrationNames:{bubbled:C({onSuspend:!0}),captured:C({onSuspendCapture:!0})}},timeUpdate:{phasedRegistrationNames:{bubbled:C({onTimeUpdate:!0}),captured:C({onTimeUpdateCapture:!0})}},touchCancel:{phasedRegistrationNames:{bubbled:C({onTouchCancel:!0}),captured:C({onTouchCancelCapture:!0})}},touchEnd:{phasedRegistrationNames:{bubbled:C({onTouchEnd:!0}),captured:C({onTouchEndCapture:!0})}},touchMove:{phasedRegistrationNames:{bubbled:C({onTouchMove:!0}),captured:C({onTouchMoveCapture:!0})}},touchStart:{phasedRegistrationNames:{bubbled:C({onTouchStart:!0}),captured:C({onTouchStartCapture:!0})}},transitionEnd:{phasedRegistrationNames:{bubbled:C({onTransitionEnd:!0}),captured:C({onTransitionEndCapture:!0})}},volumeChange:{phasedRegistrationNames:{bubbled:C({onVolumeChange:!0}),captured:C({onVolumeChangeCapture:!0})}},waiting:{phasedRegistrationNames:{bubbled:C({onWaiting:!0}),captured:C({onWaitingCapture:!0})}},
 wheel:{phasedRegistrationNames:{bubbled:C({onWheel:!0}),captured:C({onWheelCapture:!0})}}},T={topAbort:x.abort,topAnimationEnd:x.animationEnd,topAnimationIteration:x.animationIteration,topAnimationStart:x.animationStart,topBlur:x.blur,topCanPlay:x.canPlay,topCanPlayThrough:x.canPlayThrough,topClick:x.click,topContextMenu:x.contextMenu,topCopy:x.copy,topCut:x.cut,topDoubleClick:x.doubleClick,topDrag:x.drag,topDragEnd:x.dragEnd,topDragEnter:x.dragEnter,topDragExit:x.dragExit,topDragLeave:x.dragLeave,topDragOver:x.dragOver,topDragStart:x.dragStart,topDrop:x.drop,topDurationChange:x.durationChange,topEmptied:x.emptied,topEncrypted:x.encrypted,topEnded:x.ended,topError:x.error,topFocus:x.focus,topInput:x.input,topInvalid:x.invalid,topKeyDown:x.keyDown,topKeyPress:x.keyPress,topKeyUp:x.keyUp,topLoad:x.load,topLoadedData:x.loadedData,topLoadedMetadata:x.loadedMetadata,topLoadStart:x.loadStart,topMouseDown:x.mouseDown,topMouseMove:x.mouseMove,topMouseOut:x.mouseOut,topMouseOver:x.mouseOver,
 topMouseUp:x.mouseUp,topPaste:x.paste,topPause:x.pause,topPlay:x.play,topPlaying:x.playing,topProgress:x.progress,topRateChange:x.rateChange,topReset:x.reset,topScroll:x.scroll,topSeeked:x.seeked,topSeeking:x.seeking,topStalled:x.stalled,topSubmit:x.submit,topSuspend:x.suspend,topTimeUpdate:x.timeUpdate,topTouchCancel:x.touchCancel,topTouchEnd:x.touchEnd,topTouchMove:x.touchMove,topTouchStart:x.touchStart,topTransitionEnd:x.transitionEnd,topVolumeChange:x.volumeChange,topWaiting:x.waiting,topWheel:x.wheel};for(var w in T)T[w].dependencies=[w];var N=C({onClick:null}),k={},P={eventTypes:x,extractEvents:function(e,t,n,o){var a=T[e];if(!a)return null;var s;switch(e){case E.topAbort:case E.topCanPlay:case E.topCanPlayThrough:case E.topDurationChange:case E.topEmptied:case E.topEncrypted:case E.topEnded:case E.topError:case E.topInput:case E.topInvalid:case E.topLoad:case E.topLoadedData:case E.topLoadedMetadata:case E.topLoadStart:case E.topPause:case E.topPlay:case E.topPlaying:case E.t
 opProgress:case E.topRateChange:case E.topReset:case E.topSeeked:case E.topSeeking:case E.topStalled:case E.topSubmit:case E.topSuspend:case E.topTimeUpdate:case E.topVolumeChange:case E.topWaiting:s=c;break;case E.topKeyPress:if(0===_(n))return null;case E.topKeyDown:case E.topKeyUp:s=d;break;case E.topBlur:case E.topFocus:s=p;break;case E.topClick:if(2===n.button)return null;case E.topContextMenu:case E.topDoubleClick:case E.topMouseDown:case E.topMouseMove:case E.topMouseOut:case E.topMouseOver:case E.topMouseUp:s=f;break;case E.topDrag:case E.topDragEnd:case E.topDragEnter:case E.topDragExit:case E.topDragLeave:case E.topDragOver:case E.topDragStart:case E.topDrop:s=h;break;case E.topTouchCancel:case E.topTouchEnd:case E.topTouchMove:case E.topTouchStart:s=m;break;case E.topAnimationEnd:case E.topAnimationIteration:case E.topAnimationStart:s=u;break;case E.topTransitionEnd:s=v;break;case E.topScroll:s=g;break;case E.topWheel:s=y;break;case E.topCopy:case E.topCut:case E.topPaste
 :s=l}s?void 0:r("86",e);var b=s.getPooled(a,t,n,o);return i.accumulateTwoPhaseDispatches(b),b},didPutListener:function(e,t,n){if(t===N){var r=e._rootNodeID,o=s.getNodeFromInstance(e);k[r]||(k[r]=a.listen(o,"click",b))}},willDeleteListener:function(e,t){if(t===N){var n=e._rootNodeID;k[n].remove(),delete k[n]}}};e.exports=P},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(49),a={animationName:null,elapsedTime:null,pseudoElement:null};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(49),a={clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(66),a={relatedTarget:null};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.ca
 ll(this,e,t,n,r)}var o=n(66),a=n(148),i=n(149),s=n(68),u={key:i,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:s,charCode:function(e){return"keypress"===e.type?a(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?a(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}};o.augmentClass(r,u),e.exports=r},function(e,t){"use strict";function n(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}e.exports=n},function(e,t,n){"use strict";function r(e){if(e.key){var t=a[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=o(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?i[e.keyCode]||"
 Unidentified":""}var o=n(148),a={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},i={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F
 9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(65),a={dataTransfer:null};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(66),a=n(68),i={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:a};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(49),a={propertyName:null,elapsedTime:null,pseudoElement:null};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(65),a={deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return&q
 uot;deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;r<n;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}function o(e){return e?e.nodeType===O?e.documentElement:e.firstChild:null}function a(e){return e.getAttribute&&e.getAttribute(M)||""}function i(e,t,n,r,o){var a;if(_.logTopLevelRenders){var i=e._currentElement.props,s=i.type;a="React mount: "+("string"==typeof s?s:s.displayName||s.name),console.time(a)}var u=x.mountComponent(e,n,null,g(e,t),o);a&&console.timeEnd(a),e._renderedComponent._topLevelWrapper=e,F._mountImageIntoNode(u,t,e,r,n)}function s(e,t,n,r){var o=w.ReactReconcileTransaction.getPooled(!n&&y.useCreateElement);o.perform(i,null,e,t,o,n,r),w.ReactReconcileTransaction.re
 lease(o)}function u(e,t,n){for(x.unmountComponent(e,n),t.nodeType===O&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)}function l(e){var t=o(e);if(t){var n=v.getInstanceFromNode(t);return!(!n||!n._hostParent)}}function c(e){var t=o(e),n=t&&v.getInstanceFromNode(t);return n&&!n._hostParent?n:null}function p(e){var t=c(e);return t?t._hostContainerInfo._topLevelWrapper:null}var d=n(7),f=n(72),h=n(33),m=n(98),v=(n(10),n(32)),g=n(155),y=n(156),b=n(9),_=n(54),C=n(110),E=(n(58),n(157)),x=n(55),T=n(122),w=n(52),N=n(19),k=n(112),P=(n(8),n(74)),S=n(116),M=(n(11),h.ID_ATTRIBUTE_NAME),I=h.ROOT_ATTRIBUTE_NAME,R=1,O=9,D=11,A={},L=1,U=function(){this.rootID=L++};U.prototype.isReactComponent={},U.prototype.render=function(){return this.props};var F={TopLevelWrapper:U,_instancesByReactRootID:A,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r,o){return F.scrollMonitor(r,function(){T.enqueueElementInternal(e,t,n),o&&T.enqueueCallbackI
 nternal(e,o)}),e},_renderNewRootComponent:function(e,t,n,r){!t||t.nodeType!==R&&t.nodeType!==O&&t.nodeType!==D?d("37"):void 0,m.ensureScrollValueMonitoring();var o=k(e,!1);w.batchedUpdates(s,o,t,n,r);var a=o._instance.rootID;return A[a]=o,o},renderSubtreeIntoContainer:function(e,t,n,r){return null!=e&&C.has(e)?void 0:d("38"),F._renderSubtreeIntoContainer(e,t,n,r)},_renderSubtreeIntoContainer:function(e,t,n,r){T.validateCallback(r,"ReactDOM.render"),b.isValidElement(t)?void 0:d("39","string"==typeof t?" Instead of passing a string like 'div', pass React.createElement('div') or <div />.":"function"==typeof t?" Instead of passing a class like Foo, pass React.createElement(Foo) or <Foo />.":null!=t&&void 0!==t.props?" This may be caused by unintentionally loading two independent copies of React.":"");var i,s=b(U,null,null,null,null,null,t);if(e)
 {var u=C.get(e);i=u._processChildContext(u._context)}else i=N;var c=p(n);if(c){var f=c._currentElement,h=f.props;if(S(h,t)){var m=c._renderedComponent.getPublicInstance(),v=r&&function(){r.call(m)};return F._updateRootComponent(c,s,i,n,v),m}F.unmountComponentAtNode(n)}var g=o(n),y=g&&!!a(g),_=l(n),E=y&&!c&&!_,x=F._renderNewRootComponent(s,n,E,i)._renderedComponent.getPublicInstance();return r&&r.call(x),x},render:function(e,t,n){return F._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){!e||e.nodeType!==R&&e.nodeType!==O&&e.nodeType!==D?d("40"):void 0;var t=p(e);if(!t){l(e),1===e.nodeType&&e.hasAttribute(I);return!1}return delete A[t._instance.rootID],w.batchedUpdates(u,t,e,!1),!0},_mountImageIntoNode:function(e,t,n,a,i){if(!t||t.nodeType!==R&&t.nodeType!==O&&t.nodeType!==D?d("41"):void 0,a){var s=o(t);if(E.canReuseMarkup(e,s))return void v.precacheNode(n,s);
 var u=s.getAttribute(E.CHECKSUM_ATTR_NAME);s.removeAttribute(E.CHECKSUM_ATTR_NAME);var l=s.outerHTML;s.setAttribute(E.CHECKSUM_ATTR_NAME,u);var c=e,p=r(c,l),h=" (client) "+c.substring(p-20,p+20)+"\n (server) "+l.substring(p-20,p+20);t.nodeType===O?d("42",h):void 0}if(t.nodeType===O?d("43"):void 0,i.useCreateElement){for(;t.lastChild;)t.removeChild(t.lastChild);f.insertTreeBefore(t,e,null)}else P(t,e),v.precacheNode(n,t.firstChild)}};e.exports=F},function(e,t,n){"use strict";function r(e,t){var n={_topLevelWrapper:e,_idCounter:1,_ownerDocument:t?t.nodeType===o?t:t.ownerDocument:null,_node:t,_tag:t?t.nodeName.toLowerCase():null,_namespaceURI:t?t.namespaceURI:null};return n}var o=(n(124),9);e.exports=r},function(e,t){"use strict";var n={useCreateElement:!0};e.exports=n},function(e,t,n){"use strict";var r=n(158),o=/\/?>/,a=/^<\!\-\-/,i={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:funct
 ion(e){var t=r(e);return a.test(e)?e:e.replace(o," "+i.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(i.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var o=r(e);return o===n}};e.exports=i},function(e,t){"use strict";function n(e){for(var t=1,n=0,o=0,a=e.length,i=a&-4;o<i;){for(var s=Math.min(o+4096,i);o<s;o+=4)n+=(t+=e.charCodeAt(o))+(t+=e.charCodeAt(o+1))+(t+=e.charCodeAt(o+2))+(t+=e.charCodeAt(o+3));t%=r,n%=r}for(;o<a;o++)n+=t+=e.charCodeAt(o);return t%=r,n%=r,t|n<<16}var r=65521;e.exports=n},function(e,t,n){"use strict";function r(e){if(null==e)return null;if(1===e.nodeType)return e;var t=i.get(e);return t?(t=s(t),t?a.getNodeFromInstance(t):null):void("function"==typeof e.render?o("44"):o("45",Object.keys(e)))}var o=n(7),a=(n(10),n(32)),i=n(110),s=n(160);n(8),n(11);e.exports=r},function(e,t,n){"use strict";function r(e){for(var t;(t=e._rend
 eredNodeType)===o.COMPOSITE;)e=e._renderedComponent;return t===o.HOST?e._renderedComponent:t===o.EMPTY?null:void 0}var o=n(114);e.exports=r},function(e,t,n){"use strict";var r=n(154);e.exports=r.renderSubtreeIntoContainer},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),a=r(o),i=n(163),s=r(i),u=n(185),l=r(u);t["default"]=a["default"].createClass({displayName:"Screenshots",render:function(){var e=(0,s["default"])(this.props.screenshots).map(function(e){var t=e.caption,n=e.src;return{original:n,originalAlt:"",thumbnail:n+"&width=100",thumbnailAlt:t||"",description:t||!1}});if(e)return a["default"].createElement("div",{id:"screenshots",className:"plugin-screenshots"},a["default"].createElement("h2",null,"Scree
 nshots"),a["default"].createElement(l["default"],{items:e}))}})},function(e,t,n){function r(e){return e?o(e,a(e)):[]}var o=n(164),a=n(166);e.exports=r},function(e,t,n){function r(e,t){return o(t,function(t){return e[t]})}var o=n(165);e.exports=r},function(e,t){function n(e,t){for(var n=-1,r=e?e.length:0,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}e.exports=n},function(e,t,n){function r(e){var t=l(e);if(!t&&!s(e))return a(e);var n=i(e),r=!!n,c=n||[],p=c.length;for(var d in e)!o(e,d)||r&&("length"==d||u(d,p))||t&&"constructor"==d||c.push(d);return c}var o=n(167),a=n(169),i=n(170),s=n(174),u=n(183),l=n(184);e.exports=r},function(e,t,n){function r(e,t){return null!=e&&(i.call(e,t)||"object"==typeof e&&t in e&&null===o(e))}var o=n(168),a=Object.prototype,i=a.hasOwnProperty;e.exports=r},function(e,t){function n(e){return r(Object(e))}var r=Object.getPrototypeOf;e.exports=n},function(e
 ,t){function n(e){return r(Object(e))}var r=Object.keys;e.exports=n},function(e,t,n){function r(e){var t=e?e.length:void 0;return s(t)&&(i(e)||u(e)||a(e))?o(t,String):null}var o=n(171),a=n(172),i=n(181),s=n(179),u=n(182);e.exports=r},function(e,t){function n(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}e.exports=n},function(e,t,n){function r(e){return o(e)&&s.call(e,"callee")&&(!l.call(e,"callee")||u.call(e)==a)}var o=n(173),a="[object Arguments]",i=Object.prototype,s=i.hasOwnProperty,u=i.toString,l=i.propertyIsEnumerable;e.exports=r},function(e,t,n){function r(e){return a(e)&&o(e)}var o=n(174),a=n(180);e.exports=r},function(e,t,n){function r(e){return null!=e&&i(o(e))&&!a(e)}var o=n(175),a=n(177),i=n(179);e.exports=r},function(e,t,n){var r=n(176),o=r("length");e.exports=o},function(e,t){function n(e){return function(t){return null==t?void 0:t[e]}}e.exports=n},function(e,t,n){functio
 n r(e){var t=o(e)?u.call(e):"";return t==a||t==i}var o=n(178),a="[object Function]",i="[object GeneratorFunction]",s=Object.prototype,u=s.toString;e.exports=r},function(e,t){function n(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}e.exports=n},function(e,t){function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r}var r=9007199254740991;e.exports=n},function(e,t){function n(e){return!!e&&"object"==typeof e}e.exports=n},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){function r(e){return"string"==typeof e||!o(e)&&a(e)&&u.call(e)==i}var o=n(181),a=n(180),i="[object String]",s=Object.prototype,u=s.toString;e.exports=r},function(e,t){function n(e,t){return t=null==t?r:t,!!t&&("number"==typeof e||o.test(e))&&e>-1&&e%1==0&&e<t}var r=9007199254740991,o=/^(?:0|[1-9]\
 d*)$/;e.exports=n},function(e,t){function n(e){var t=e&&e.constructor,n="function"==typeof t&&t.prototype||r;return e===n}var r=Object.prototype;
-e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e,t){var n=void 0,r=void 0,o=void 0,a=null,i=0,s=function(){i=(new Date).getTime(),a=null,o=e.apply(n,r),a||(n=r=null)};return function(){var u=(new Date).getTime(),l=t-(u-i);return n=this,r=argument
 s,l<=0||l>t?(a&&(clearTimeout(a),a=null),i=u,o=e.apply(n,r),a||(n=r=null)):a||(a=setTimeout(s,l)),o}}function u(){var e=s.apply(void 0,arguments);return function(t){return t?(t.persist(),e(t)):e()}}Object.defineProperty(t,"__esModule",{value:!0});var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=n(2),p=r(c),d=500,f=function(e){function t(e){o(this,t);var n=a(this,Object.getPrototypeOf(t).call(this,e));return n.state={currentIndex:e.startIndex,thumbsTranslateX:0,offsetPercentage:0,galleryWidth:0,thumbnailWidth:0},n}return i(t,e),l(t,[{key:"componentWillReceiveProps",value:function(e){this.props.disableArrowKeys!==e.disableArrowKeys&&(e.disableArrowKeys?window.removeEventListener("keydown",this._hand
 leKeyDown):window.addEventListener("keydown",this._handleKeyDown))}},{key:"componentDidUpdate",value:function(e,t){t.thumbnailWidth===this.state.thumbnailWidth&&e.showThumbnails===this.props.showThumbnails||this._setThumbsTranslateX(-this._getThumbsTranslateX(this.state.currentIndex>0?1:0)*this.state.currentIndex),t.currentIndex!==this.state.currentIndex&&this._updateThumbnailTranslateX(t)}},{key:"componentWillMount",value:function(){this._slideLeft=u(this._slideLeft.bind(this),d,!0),this._slideRight=u(this._slideRight.bind(this),d,!0),this._handleResize=this._handleResize.bind(this),this._handleKeyDown=this._handleKeyDown.bind(this),this._thumbnailDelay=300}},{key:"componentDidMount",value:function(){var e=this;window.setTimeout(function(){return e._handleResize()},500),this.props.disableArrowKeys||window.addEventListener("keydown",this._handleKeyDown),window.addEventListener("resize",this._handleResize)
 }},{key:"componentWillUnmount",value:function(){this.props.disableArrowKeys||window.removeEventListener("keydown",this._handleKeyDown),window.removeEventListener("resize",this._handleResize),this._intervalId&&(window.clearInterval(this._intervalId),this._intervalId=null)}},{key:"fullScreen",value:function(){var e=this._imageGallery;e.requestFullscreen?e.requestFullscreen():e.msRequestFullscreen?e.msRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullscreen&&e.webkitRequestFullscreen()}},{key:"slideToIndex",value:function(e,t){t&&t.preventDefault();var n=this.props.items.length-1,r=e;e<0?r=n:e>n&&(r=0),this.setState({previousIndex:this.state.currentIndex,currentIndex:r,offsetPercentage:0,style:{transition:"transform 0.45s ease-out"}})}},{key:"getCurrentIndex",value:function(){return this.state.currentIndex}},{key:"_handleResize",valu
 e:function(){this._imageGallery&&this.setState({galleryWidth:this._imageGallery.offsetWidth}),this._imageGalleryThumbnail&&this.setState({thumbnailWidth:this._imageGalleryThumbnail.offsetWidth})}},{key:"_handleKeyDown",value:function(e){var t=37,n=39,r=parseInt(e.keyCode||e.which||0);switch(r){case t:this._canSlideLeft()&&!this._intervalId&&this._slideLeft();break;case n:this._canSlideRight()&&!this._intervalId&&this._slideRight()}}},{key:"_handleMouseOverThumbnails",value:function(e){var t=this;this.props.slideOnThumbnailHover&&(this.setState({hovering:!0}),this._thumbnailTimer&&(window.clearTimeout(this._thumbnailTimer),this._thumbnailTimer=null),this._thumbnailTimer=window.setTimeout(function(){t.slideToIndex(e)},this._thumbnailDelay))}},{key:"_handleMouseLeaveThumbnails",value:function(){this._thumbnailTimer&&(window.clearTimeout(this._thumbnailTimer),this._thumbnailTimer=null),
 this.setState({hovering:!1})}},{key:"_handleMouseOver",value:function(){this.setState({hovering:!0})}},{key:"_handleMouseLeave",value:function(){this.setState({hovering:!1})}},{key:"_handleImageError",value:function(e){this.props.defaultImage&&-1===e.target.src.indexOf(this.props.defaultImage)&&(e.target.src=this.props.defaultImage)}},{key:"_canNavigate",value:function(){return this.props.items.length>=2}},{key:"_canSlideLeft",value:function(){return this.props.infinite||this.state.currentIndex>0}},{key:"_canSlideRight",value:function(){return this.props.infinite||this.state.currentIndex<this.props.items.length-1}},{key:"_updateThumbnailTranslateX",value:function(e){if(0===this.state.currentIndex)this._setThumbsTranslateX(0);else{var t=Math.abs(e.currentIndex-this.state.currentIndex),n=this._getThumbsTranslateX(t);n>0&&(e.currentIndex<this.state.currentIndex?this._setThumbsTr
 anslateX(this.state.thumbsTranslateX-n):e.currentIndex>this.state.currentIndex&&this._setThumbsTranslateX(this.state.thumbsTranslateX+n))}}},{key:"_setThumbsTranslateX",value:function(e){this.setState({thumbsTranslateX:e})}},{key:"_getThumbsTranslateX",value:function(e){if(this.props.disableThumbnailScroll)return 0;var t=this.state.thumbnailWidth;if(this._thumbnails){if(this._thumbnails.scrollWidth<=t)return 0;var n=this._thumbnails.children.length,r=this._thumbnails.scrollWidth-t,o=r/(n-1);return e*o}}},{key:"_getAlignmentClassName",value:function(e){var t=this.state.currentIndex,n="",r="left",o="center",a="right";switch(e){case t-1:n=" "+r;break;case t:n=" "+o;break;case t+1:n=" "+a}return this.props.items.length>=3&&this.props.infinite&&(0===e&&t===this.props.items.length-1?n=" "+a:e===this.props.items.length-1&&0===t&&
 amp;(n=" "+r)),n}},{key:"_getTranslateXForTwoSlide",value:function(e){var t=this.state,n=t.currentIndex,r=t.offsetPercentage,o=t.previousIndex,a=-100*n,i=a+100*e+r;return r>0?this.direction="left":r<0&&(this.direction="right"),0===n&&1===e&&r>0?i=-100+r:1===n&&0===e&&r<0&&(i=100+r),n!==o?0===o&&0===e&&0===r&&"left"===this.direction?i=100:1===o&&1===e&&0===r&&"right"===this.direction&&(i=-100):0===n&&1===e&&0===r&&"left"===this.direction?i=-100:1===n&&0===e&&0===r&&"right"===this.direction&&(i=100),i}},{key:"_getSlideStyle",value:function(e){var t=this.state,n=t.currentIndex,r=t.offsetPercentage,o=this.props,a=o.infinite,i=o.items,s=-100*n,u=i.length-1,l=s+100*e+r,c=1;e===n?c=3:e===this.state.previousIndex&&(c=2),a&amp
 ;&i.length>2&&(0===n&&e===u?l=-100+r:n===u&&0===e&&(l=100+r)),a&&2===i.length&&(l=this._getTranslateXForTwoSlide(e));var p="translate3d("+l+"%, 0, 0)";return{WebkitTransform:p,MozTransform:p,msTransform:p,OTransform:p,transform:p,zIndex:c}}},{key:"_getThumbnailStyle",value:function(){var e="translate3d("+this.state.thumbsTranslateX+"px, 0, 0)";return{WebkitTransform:e,MozTransform:e,msTransform:e,OTransform:e,transform:e}}},{key:"_slideLeft",value:function(e){this.slideToIndex(this.state.currentIndex-1,e)}},{key:"_slideRight",value:function(e){this.slideToIndex(this.state.currentIndex+1,e)}},{key:"_renderItem",value:function(e){return p["default"].createElement("figure",{className:"image-gallery-image"},p["default"].createElement("a",{href:e.original},p["default"].createElement("img&quo
 t;,{src:e.original,alt:e.originalAlt,srcSet:e.srcSet,sizes:e.sizes,onLoad:this.props.onImageLoad,onError:this._handleImageError.bind(this)})),e.description&&p["default"].createElement("figcaption",{className:"image-gallery-description"},e.description))}},{key:"render",value:function(){var e=this,t=this.state.currentIndex,n=this._getThumbnailStyle(),r=this._slideLeft.bind(this),o=this._slideRight.bind(this),a=[],i=[];return this.props.items.map(function(n,r){var o=e._getAlignmentClassName(r),s=n.originalClass?" "+n.originalClass:"",u=n.thumbnailClass?" "+n.thumbnailClass:"",l=n.renderItem||e.props.renderItem||e._renderItem.bind(e),c=p["default"].createElement("div",{key:r,className:"image-gallery-slide"+o+s,style:Object.assign(e._getSlideStyle(r),e.state.style),onClick:e.props.onClick},l(n));e.props.lazyLoad?o&&a.push(c):a.push(c),i.push(p["default"]
 .createElement("button",{type:"button",onMouseOver:e._handleMouseOverThumbnails.bind(e,r),onMouseLeave:e._handleMouseLeaveThumbnails.bind(e,r),key:r,className:"button-link image-gallery-thumbnail"+(t===r?" active":"")+u,onTouchStart:function(t){return e.slideToIndex.call(e,r,t)},onClick:function(t){return e.slideToIndex.call(e,r,t)}},p["default"].createElement("img",{src:n.thumbnail,alt:n.thumbnailAlt,onError:e._handleImageError.bind(e)}),p["default"].createElement("div",{className:"image-gallery-thumbnail-label"},n.thumbnailLabel)))}),p["default"].createElement("section",{ref:function(t){return e._imageGallery=t},className:"image-gallery"},p["default"].createElement("div",{onMouseOver:this._handleMouseOver.bind(this),onMouseLeave:this._handleMouseLeave.bind(this),className:"image-gallery-content"},this._canNavigate()?[this.p
 rops.showNav&&p["default"].createElement("span",{key:"navigation"},this._canSlideLeft()&&p["default"].createElement("button",{type:"button",className:"button-link image-gallery-left-nav",onTouchStart:r,onClick:r}),this._canSlideRight()&&p["default"].createElement("button",{type:"button",className:"button-link image-gallery-right-nav",onTouchStart:o,onClick:o})),p["default"].createElement("div",{className:"image-gallery-slides"},a)]:p["default"].createElement("div",{className:"image-gallery-slides"},a),this.props.showIndex&&p["default"].createElement("div",{className:"image-gallery-index"},p["default"].createElement("span",{className:"image-gallery-index-current"},this.state.currentIndex+1),p["default"].createElement
 ("span",{className:"image-gallery-index-separator"},this.props.indexSeparator),p["default"].createElement("span",{className:"image-gallery-index-total"},this.props.items.length))),p["default"].createElement("div",{className:"image-gallery-thumbnails",ref:function(t){return e._imageGalleryThumbnail=t}},p["default"].createElement("div",{ref:function(t){return e._thumbnails=t},className:"image-gallery-thumbnails-container",style:n},i)))}}]),t}(p["default"].Component);t["default"]=f,f.propTypes={items:p["default"].PropTypes.array.isRequired,showNav:p["default"].PropTypes.bool,lazyLoad:p["default"].PropTypes.bool,infinite:p["default"].PropTypes.bool,showIndex:p["default"].PropTypes.bool,showThumbnails:p["default"].PropTypes.bool,slideOnThumbnailHover:p["default"].PropTypes.bool,disableThumbn
 ailScroll:p["default"].PropTypes.bool,disableArrowKeys:p["default"].PropTypes.bool,defaultImage:p["default"].PropTypes.string,indexSeparator:p["default"].PropTypes.string,startIndex:p["default"].PropTypes.number,slideInterval:p["default"].PropTypes.number,onClick:p["default"].PropTypes.func,onImageLoad:p["default"].PropTypes.func,onImageError:p["default"].PropTypes.func,renderItem:p["default"].PropTypes.func},f.defaultProps={items:[],showNav:!0,lazyLoad:!1,infinite:!0,showIndex:!1,showThumbnails:!0,slideOnThumbnailHover:!1,disableThumbnailScroll:!1,disableArrowKeys:!1,indexSeparator:" / ",startIndex:0,slideInterval:3e3}}]);
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function r(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r="function"==typeof a[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,i=n(45);i.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),e.exports=r},function(e,t){"use strict";function n(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!r[e.type]:"textarea"===t}var r={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search
 :!0,tel:!0,text:!0,time:!0,url:!0,week:!0};e.exports=n},function(e,t){"use strict";var n=["ResponderEventPlugin","SimpleEventPlugin","TapEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin"];e.exports=n},function(e,t,n){"use strict";var r=n(38),o=n(31),i=n(66),a={mouseEnter:{registrationName:"onMouseEnter",dependencies:["topMouseOut","topMouseOver"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["topMouseOut","topMouseOver"]}},s={eventTypes:a,extractEvents:function(e,t,n,s){if("topMouseOver"===e&&(n.relatedTarget||n.fromElement))return null;if("topMouseOut"!==e&&"topMouseOver"!==e)return null;var u;if(s.window===s)u=s;else{var l=s.ownerDocument;u=l?l.defaultView||l.parentWindow:window}var c,p;if("topMouseOut"===e){c=t;va
 r d=n.relatedTarget||n.toElement;p=d?o.getClosestInstanceFromNode(d):null}else c=null,p=t;if(c===p)return null;var f=null==c?u:o.getNodeFromInstance(c),h=null==p?u:o.getNodeFromInstance(p),v=i.getPooled(a.mouseLeave,c,n,s);v.type="mouseleave",v.target=f,v.relatedTarget=h;var m=i.getPooled(a.mouseEnter,p,n,s);return m.type="mouseenter",m.target=h,m.relatedTarget=f,r.accumulateEnterLeaveDispatches(v,m,c,p),[v,m]}};e.exports=s},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(67),i=n(68),a=n(69),s={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:a,button:function(e){var t=e.button;return"which"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return"pageX"in e?e.pageX:e.clientX+i.currentScrollLeft},pageY:function(e){
 return"pageY"in e?e.pageY:e.clientY+i.currentScrollTop}};o.augmentClass(r,s),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(50),i=n(61),a={view:function(e){if(e.view)return e.view;var t=i(e);if(t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};o.augmentClass(r,a),e.exports=r},function(e,t){"use strict";var n={currentScrollLeft:0,currentScrollTop:0,refreshScrollValues:function(e){n.currentScrollLeft=e.x,n.currentScrollTop=e.y}};e.exports=n},function(e,t){"use strict";function n(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=o[e];return!!r&&!!n[r]}function r(e){return n}var o={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};e.exports=r},function(e,t,n){"use strict";var r=n(33),o=r.injection.MUST_USE_PROP
 ERTY,i=r.injection.HAS_BOOLEAN_VALUE,a=r.injection.HAS_NUMERIC_VALUE,s=r.injection.HAS_POSITIVE_NUMERIC_VALUE,u=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE,l={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+r.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:i,allowTransparency:0,alt:0,as:0,async:i,autoComplete:0,autoPlay:i,capture:i,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:o|i,cite:0,classID:0,className:0,cols:s,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:i,coords:0,crossOrigin:0,data:0,dateTime:0,default:i,defer:i,dir:0,disabled:i,download:u,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:i,formTarget:0,frameBorder:0,headers:0,height:0,hidden:i,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:i,low:0,manifest:0,marginHeight:0,
 marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:o|i,muted:o|i,name:0,nonce:0,noValidate:i,open:i,optimum:0,pattern:0,placeholder:0,playsInline:i,poster:0,preload:0,profile:0,radioGroup:0,readOnly:i,referrerPolicy:0,rel:0,required:i,reversed:i,role:0,rows:s,rowSpan:a,sandbox:0,scope:0,scoped:i,scrolling:0,seamless:i,selected:o|i,shape:0,size:s,sizes:0,span:s,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:a,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,typeof:0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:i,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{}};e.exports=l},function(e,t,n){"use strict";var r=
 n(72),o=n(83),i={processChildrenUpdates:o.dangerouslyProcessChildrenUpdates,replaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup};e.exports=i},function(e,t,n){"use strict";function r(e,t){return Array.isArray(t)&&(t=t[1]),t?t.nextSibling:e.firstChild}function o(e,t,n){c.insertTreeBefore(e,t,n)}function i(e,t,n){Array.isArray(t)?s(e,t[0],t[1],n):v(e,t,n)}function a(e,t){if(Array.isArray(t)){var n=t[1];t=t[0],u(e,t,n),e.removeChild(n)}e.removeChild(t)}function s(e,t,n,r){for(var o=t;;){var i=o.nextSibling;if(v(e,o,r),o===n)break;o=i}}function u(e,t,n){for(;;){var r=t.nextSibling;if(r===n)break;e.removeChild(r)}}function l(e,t,n){var r=e.parentNode,o=e.nextSibling;o===t?n&&v(r,document.createTextNode(n),o):n?(h(o,n),u(r,o,t)):u(r,e,t)}var c=n(73),p=n(79),d=(n(31),n(59),n(76)),f=n(75),h=n(77),v=d(function(e,t,n){e.insertBefore(t,n)}),m=p.dangerouslyReplaceNodeWithMarkup,g={dangerouslyReplaceNodeWithMarkup:m,replaceDelimitedText:l,processUpdates:function(e,t
 ){for(var n=0;n<t.length;n++){var s=t[n];switch(s.type){case"INSERT_MARKUP":o(e,s.content,r(e,s.afterNode));break;case"MOVE_EXISTING":i(e,s.fromNode,r(e,s.afterNode));break;case"SET_MARKUP":f(e,s.content);break;case"TEXT_CONTENT":h(e,s.content);break;case"REMOVE_NODE":a(e,s.fromNode)}}}};e.exports=g},function(e,t,n){"use strict";function r(e){if(m){var t=e.node,n=e.children;if(n.length)for(var r=0;r<n.length;r++)g(t,n[r],null);else null!=e.html?p(t,e.html):null!=e.text&&f(t,e.text)}}function o(e,t){e.parentNode.replaceChild(t.node,e),r(t)}function i(e,t){m?e.children.push(t):e.node.appendChild(t.node)}function a(e,t){m?e.html=t:p(e.node,t)}function s(e,t){m?e.text=t:f(e.node,t)}function u(){return this.node.nodeName}function l(e){return{node:e,children:[],html:null,text:null,toString:u}}var c=n(74),p=n(75),d=n(76),f=n(77),h=1,v=11,m="undefined"!=typeof document&&"number"==typeof doc
 ument.documentMode||"undefined"!=typeof navigator&&"string"==typeof navigator.userAgent&&/\bEdge\/\d/.test(navigator.userAgent),g=d(function(e,t,n){t.node.nodeType===v||t.node.nodeType===h&&"object"===t.node.nodeName.toLowerCase()&&(null==t.node.namespaceURI||t.node.namespaceURI===c.html)?(r(t),e.insertBefore(t.node,n)):(e.insertBefore(t.node,n),r(t))});l.insertTreeBefore=g,l.replaceChildWithTree=o,l.queueChild=i,l.queueHTML=a,l.queueText=s,e.exports=l},function(e,t){"use strict";var n={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};e.exports=n},function(e,t,n){"use strict";var r,o=n(45),i=n(74),a=/^[ \r\n\t\f]/,s=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,u=n(76),l=u(function(e,t){if(e.namespaceURI!==i.svg||"innerHTML"in e)e.innerHTML=t;else{r=r||document.createElement("div
 "),r.innerHTML="<svg>"+t+"</svg>";for(var n=r.firstChild;n.firstChild;)e.appendChild(n.firstChild)}});if(o.canUseDOM){var c=document.createElement("div");c.innerHTML=" ",""===c.innerHTML&&(l=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),a.test(t)||"<"===t[0]&&s.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),c=null}e.exports=l},function(e,t){"use strict";var n=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e};e.exports=n},function(e,t,n){"use strict";var r=n(45),o=n(78),i=n(75),a=function(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t};r.canUseDOM&am
 p;&("textContent"in document.documentElement||(a=function(e,t){return 3===e.nodeType?void(e.nodeValue=t):void i(e,o(t))})),e.exports=a},function(e,t){"use strict";function n(e){var t=""+e,n=o.exec(t);if(!n)return t;var r,i="",a=0,s=0;for(a=n.index;a<t.length;a++){switch(t.charCodeAt(a)){case 34:r="&quot;";break;case 38:r="&amp;";break;case 39:r="&#x27;";break;case 60:r="&lt;";break;case 62:r="&gt;";break;default:continue}s!==a&&(i+=t.substring(s,a)),s=a+1,i+=r}return s!==a?i+t.substring(s,a):i}function r(e){return"boolean"==typeof e||"number"==typeof e?""+e:n(e)}var o=/["'&<>]/;e.exports=r},function(e,t,n){"use strict";var r=n(32),o=n(73),i=n(45),a=n(80),s=n(12),u=(n(8),{dangerouslyReplaceNodeWithMarkup:function(e,t){if(i.canUseDOM?void 0:r("56"),t?void 0:r("57"),"HTML"===e.no
 deName?r("58"):void 0,"string"==typeof t){var n=a(t,s)[0];e.parentNode.replaceChild(n,e)}else o.replaceChildWithTree(e,t)}});e.exports=u},function(e,t,n){"use strict";function r(e){var t=e.match(c);return t&&t[1].toLowerCase()}function o(e,t){var n=l;l?void 0:u(!1);var o=r(e),i=o&&s(o);if(i){n.innerHTML=i[1]+e+i[2];for(var c=i[0];c--;)n=n.lastChild}else n.innerHTML=e;var p=n.getElementsByTagName("script");p.length&&(t?void 0:u(!1),a(p).forEach(t));for(var d=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return d}var i=n(45),a=n(81),s=n(82),u=n(8),l=i.canUseDOM?document.createElement("div"):null,c=/^\s*<(\w+)/;e.exports=o},function(e,t,n){"use strict";function r(e){var t=e.length;if(Array.isArray(e)||"object"!=typeof e&&"function"!=typeof e?a(!1):void 0,"number"!=typeof t?a(!1):void 0,0===t||t-1 in e?void 0:a(!1),"function"==typeof e
 .callee?a(!1):void 0,e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(e){}for(var n=Array(t),r=0;r<t;r++)n[r]=e[r];return n}function o(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"length"in e&&!("setInterval"in e)&&"number"!=typeof e.nodeType&&(Array.isArray(e)||"callee"in e||"item"in e)}function i(e){return o(e)?Array.isArray(e)?e.slice():r(e):[e]}var a=n(8);e.exports=i},function(e,t,n){"use strict";function r(e){return a?void 0:i(!1),d.hasOwnProperty(e)||(e="*"),s.hasOwnProperty(e)||("*"===e?a.innerHTML="<link />":a.innerHTML="<"+e+"></"+e+">",s[e]=!a.firstChild),s[e]?d[e]:null}var o=n(45),i=n(8),a=o.canUseDOM?document.createElement("div"):null,s={},u=[1,'<select multiple="true">',"</select>"],l=[1,"<table
 >","</table>"],c=[3,"<table><tbody><tr>","</tr></tbody></table>"],p=[1,'<svg xmlns="http://www.w3.org/2000/svg">',"</svg>"],d={"*":[1,"?<div>","</div>"],area:[1,"<map>","</map>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],legend:[1,"<fieldset>","</fieldset>"],param:[1,"<object>","</object>"],tr:[2,"<table><tbody>","</tbody></table>"],optgroup:u,option:u,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c},f=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern",&qu
 ot;polygon","polyline","radialGradient","rect","stop","text","tspan"];f.forEach(function(e){d[e]=p,s[e]=!0}),e.exports=r},function(e,t,n){"use strict";var r=n(72),o=n(31),i={dangerouslyProcessChildrenUpdates:function(e,t){var n=o.getNodeFromInstance(e);r.processUpdates(n,t)}};e.exports=i},function(e,t,n){"use strict";function r(e){if(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return" This DOM node was rendered by `"+n+"`."}}return""}function o(e,t){t&&(X[e._tag]&&(null!=t.children||null!=t.dangerouslySetInnerHTML?v("137",e._tag,e._currentElement._owner?" Check the render method of "+e._currentElement._owner.getName()+".":""):void 0),null!=t.dangerouslySetInnerHTML&&(null!=t.children?v("60"):void 0,"object"==typeof t.dangerouslySetInnerHTML&&W in t.danger
 ouslySetInnerHTML?void 0:v("61")),null!=t.style&&"object"!=typeof t.style?v("62",r(e)):void 0)}function i(e,t,n,r){if(!(r instanceof A)){var o=e._hostContainerInfo,i=o._node&&o._node.nodeType===q,s=i?o._node:o._ownerDocument;U(t,s),r.getReactMountReady().enqueue(a,{inst:e,registrationName:t,listener:n})}}function a(){var e=this;E.putListener(e.inst,e.registrationName,e.listener)}function s(){var e=this;S.postMountWrapper(e)}function u(){var e=this;M.postMountWrapper(e)}function l(){var e=this;I.postMountWrapper(e)}function c(){var e=this;e._rootNodeID?void 0:v("63");var t=j(e);switch(t?void 0:v("64"),e._tag){case"iframe":case"object":e._wrapperState.listeners=[T.trapBubbledEvent("topLoad","load",t)];break;case"video":case"audio":e._wrapperState.listeners=[];for(var n in z)z.hasOwnProperty(n)&&e._wrapperState.listeners.push(T.trapBubbledEvent(n,z[n],t)
 );break;case"source":e._wrapperState.listeners=[T.trapBubbledEvent("topError","error",t)];break;case"img":e._wrapperState.listeners=[T.trapBubbledEvent("topError","error",t),T.trapBubbledEvent("topLoad","load",t)];break;case"form":e._wrapperState.listeners=[T.trapBubbledEvent("topReset","reset",t),T.trapBubbledEvent("topSubmit","submit",t)];break;case"input":case"select":case"textarea":e._wrapperState.listeners=[T.trapBubbledEvent("topInvalid","invalid",t)]}}function p(){N.postUpdateWrapper(this)}function d(e){Q.call($,e)||(G.test(e)?void 0:v("65",e),$[e]=!0)}function f(e,t){return e.indexOf("-")>=0||null!=t.is}function h(e){var t=e.type;d(t),this._currentElement=e,this._tag=t.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousSty
 leCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var v=n(32),m=n(4),g=n(85),y=n(87),_=n(73),b=n(74),C=n(33),x=n(95),E=n(39),w=n(40),T=n(97),k=n(34),P=n(31),S=n(100),I=n(103),N=n(104),M=n(105),O=(n(59),n(106)),A=n(125),R=(n(12),n(78)),D=(n(8),n(62),n(114),n(128),n(11),k),L=E.deleteListener,j=P.getNodeFromInstance,U=T.listenTo,F=w.registrationNameModules,B={string:!0,number:!0},V="style",W="__html",H={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},q=11,z={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topL
 oadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},K={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},Y={listing:!0,pre:!0,textarea:!0},X=m({menuitem:!0},K),G=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,$={},Q={}.hasOwnProperty,Z=1;h.displayName="ReactDOMComponent",h.Mixin={mountComponent:function(e,t,n,r){this._rootNodeID=Z++,this._domID=n._idCounter++,this._hostParent=t,this._hostContainerInfo=n;var i=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":cas
 e"object":case"source":case"video":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(c,this);break;case"input":S.mountWrapper(this,i,t),i=S.getHostProps(this,i),e.getReactMountReady().enqueue(c,this);break;case"option":I.mountWrapper(this,i,t),i=I.getHostProps(this,i);break;case"select":N.mountWrapper(this,i,t),i=N.getHostProps(this,i),e.getReactMountReady().enqueue(c,this);break;case"textarea":M.mountWrapper(this,i,t),i=M.getHostProps(this,i),e.getReactMountReady().enqueue(c,this)}o(this,i);var a,p;null!=t?(a=t._namespaceURI,p=t._tag):n._tag&&(a=n._namespaceURI,p=n._tag),(null==a||a===b.svg&&"foreignobject"===p)&&(a=b.html),a===b.html&&("svg"===this._tag?a=b.svg:"math"===this._tag&&(a=b.mathml)),this._namespaceURI=a;var d;if(e.useCreateElement){var f,h=n._ownerDocument;if(a===b.html)if("script"===this._tag){var v=h.cr
 eateElement("div"),m=this._currentElement.type;v.innerHTML="<"+m+"></"+m+">",f=v.removeChild(v.firstChild)}else f=i.is?h.createElement(this._currentElement.type,i.is):h.createElement(this._currentElement.type);else f=h.createElementNS(a,this._currentElement.type);P.precacheNode(this,f),this._flags|=D.hasCachedChildNodes,this._hostParent||x.setAttributeForRoot(f),this._updateDOMProperties(null,i,e);var y=_(f);this._createInitialChildren(e,i,r,y),d=y}else{var C=this._createOpenTagMarkupAndPutListeners(e,i),E=this._createContentMarkup(e,i,r);d=!E&&K[this._tag]?C+"/>":C+">"+E+"</"+this._currentElement.type+">"}switch(this._tag){case"input":e.getReactMountReady().enqueue(s,this),i.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"textarea":e.getReactMountReady().enqueue(u,this),i.autoFocus&&e.getReactMountReady().
 enqueue(g.focusDOMComponent,this);break;case"select":i.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"button":i.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"option":e.getReactMountReady().enqueue(l,this)}return d},_createOpenTagMarkupAndPutListeners:function(e,t){var n="<"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var o=t[r];if(null!=o)if(F.hasOwnProperty(r))o&&i(this,r,o,e);else{r===V&&(o&&(o=this._previousStyleCopy=m({},t.style)),o=y.createMarkupForStyles(o,this));var a=null;null!=this._tag&&f(this._tag,t)?H.hasOwnProperty(r)||(a=x.createMarkupForCustomAttribute(r,o)):a=x.createMarkupForProperty(r,o),a&&(n+=" "+a)}}return e.renderToStaticMarkup?n:(this._hostParent||(n+=" "+x.createMarkupForRoot()),n+=" "+x.createMarkupForID(this._domID))},_createContentMarkup:functio
 n(e,t,n){var r="",o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&(r=o.__html);else{var i=B[typeof t.children]?t.children:null,a=null!=i?null:t.children;if(null!=i)r=R(i);else if(null!=a){var s=this.mountChildren(a,e,n);r=s.join("")}}return Y[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(e,t,n,r){var o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&_.queueHTML(r,o.__html);else{var i=B[typeof t.children]?t.children:null,a=null!=i?null:t.children;if(null!=i)_.queueText(r,i);else if(null!=a)for(var s=this.mountChildren(a,e,n),u=0;u<s.length;u++)_.queueChild(r,s[u])}},receiveComponent:function(e,t,n){var r=this._currentElement;this._currentElement=e,this.updateComponent(t,r,e,n)},updateComponent:function(e,t,n,r){var i=t.props,a=this._currentElement.props;switch(this._tag){case"input":i=S.getHostProps(this,i),a=S.getHostProps(this,a);break;case"option":i=I.getHo
 stProps(this,i),a=I.getHostProps(this,a);break;case"select":i=N.getHostProps(this,i),a=N.getHostProps(this,a);break;case"textarea":i=M.getHostProps(this,i),a=M.getHostProps(this,a)}switch(o(this,a),this._updateDOMProperties(i,a,e),this._updateDOMChildren(i,a,e,r),this._tag){case"input":S.updateWrapper(this);break;case"textarea":M.updateWrapper(this);break;case"select":e.getReactMountReady().enqueue(p,this)}},_updateDOMProperties:function(e,t,n){var r,o,a;for(r in e)if(!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if(r===V){var s=this._previousStyleCopy;for(o in s)s.hasOwnProperty(o)&&(a=a||{},a[o]="");this._previousStyleCopy=null}else F.hasOwnProperty(r)?e[r]&&L(this,r):f(this._tag,e)?H.hasOwnProperty(r)||x.deleteValueForAttribute(j(this),r):(C.properties[r]||C.isCustomAttribute(r))&&x.deleteValueForProperty(j(this),r);for(r in t){var u=t[r],l=r===V?this._previousStyleCopy:nul
 l!=e?e[r]:void 0;if(t.hasOwnProperty(r)&&u!==l&&(null!=u||null!=l))if(r===V)if(u?u=this._previousStyleCopy=m({},u):this._previousStyleCopy=null,l){for(o in l)!l.hasOwnProperty(o)||u&&u.hasOwnProperty(o)||(a=a||{},a[o]="");for(o in u)u.hasOwnProperty(o)&&l[o]!==u[o]&&(a=a||{},a[o]=u[o])}else a=u;else if(F.hasOwnProperty(r))u?i(this,r,u,n):l&&L(this,r);else if(f(this._tag,t))H.hasOwnProperty(r)||x.setValueForAttribute(j(this),r,u);else if(C.properties[r]||C.isCustomAttribute(r)){var c=j(this);null!=u?x.setValueForProperty(c,r,u):x.deleteValueForProperty(c,r)}}a&&y.setValueForStyles(j(this),a,this)},_updateDOMChildren:function(e,t,n,r){var o=B[typeof e.children]?e.children:null,i=B[typeof t.children]?t.children:null,a=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,s=t.dangerouslySetInnerHTML&&t.dangerouslySetInnerHTML.__html,u=null!=o?null:e.children,l=null!=i?null:t.children,c=null!=o||null!
 =a,p=null!=i||null!=s;null!=u&&null==l?this.updateChildren(null,n,r):c&&!p&&this.updateTextContent(""),null!=i?o!==i&&this.updateTextContent(""+i):null!=s?a!==s&&this.updateMarkup(""+s):null!=l&&this.updateChildren(l,n,r)},getHostNode:function(){return j(this)},unmountComponent:function(e){switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":var t=this._wrapperState.listeners;if(t)for(var n=0;n<t.length;n++)t[n].remove();break;case"html":case"head":case"body":v("66",this._tag)}this.unmountChildren(e),P.uncacheNode(this),E.deleteAllListeners(this),this._rootNodeID=0,this._domID=0,this._wrapperState=null},getPublicInstance:function(){return j(this)}},m(h.prototype,h.Mixin,O.Mixin),e.exports=h},function(e,t,n){"use strict&qu
 ot;;var r=n(31),o=n(86),i={focusDOMComponent:function(){o(r.getNodeFromInstance(this))}};e.exports=i},function(e,t){"use strict";function n(e){try{e.focus()}catch(e){}}e.exports=n},function(e,t,n){"use strict";var r=n(88),o=n(45),i=(n(59),n(89),n(91)),a=n(92),s=n(94),u=(n(11),s(function(e){return a(e)})),l=!1,c="cssFloat";if(o.canUseDOM){var p=document.createElement("div").style;try{p.font=""}catch(e){l=!0}void 0===document.documentElement.style.cssFloat&&(c="styleFloat")}var d={createMarkupForStyles:function(e,t){var n="";for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];null!=o&&(n+=u(r)+":",n+=i(r,o,t)+";")}return n||null},setValueForStyles:function(e,t,n){var o=e.style;for(var a in t)if(t.hasOwnProperty(a)){var s=i(a,t[a],n);if("float"!==a&&"cssFloat"!==a||(a=c),s)o[a]=s;else{var u=l&&r.shorthandPropertyExpansions[a];if(u)for(var p in u)o[
 p]="";else o[a]=""}}}};e.exports=d},function(e,t){"use strict";function n(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var r={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},o=["Webkit","ms","Moz","O"];Object.keys(r).forEach(function(e){o.forEach(function(t){r[n(t,e)]=r[e]})});var i={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositio
 nX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},a={isUnitlessNumber:r,shorthandPropertyExpansions:i};e.exports=a},function(e,t,n){"use strict";function r(e){return o(e.replace(i,"ms-"))}var o=n(90),i=/^-ms-/;e.exports=r},function(e,t){"use strict";function n(e){return e.replace(r,function(e,t){return t.toUpperCase()})}var r=/-(.)/g;e.exports=n},function(e,t,n){"use strict";function r(e,t,n){var r=null==t||"boolean"==typeof t||""===t;if(r)return"";var 
 o=isNaN(t);if(o||0===t||i.hasOwnProperty(e)&&i[e])return""+t;if("string"==typeof t){t=t.trim()}return t+"px"}var o=n(88),i=(n(11),o.isUnitlessNumber);e.exports=r},function(e,t,n){"use strict";function r(e){return o(e).replace(i,"-ms-")}var o=n(93),i=/^ms-/;e.exports=r},function(e,t){"use strict";function n(e){return e.replace(r,"-$1").toLowerCase()}var r=/([A-Z])/g;e.exports=n},function(e,t){"use strict";function n(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}e.exports=n},function(e,t,n){"use strict";function r(e){return!!l.hasOwnProperty(e)||!u.hasOwnProperty(e)&&(s.test(e)?(l[e]=!0,!0):(u[e]=!0,!1))}function o(e,t){return null==t||e.hasBooleanValue&&!t||e.hasNumericValue&&isNaN(t)||e.hasPositiveNumericValue&&t<1||e.hasOverloadedBooleanValue&&t===!1}var i=n(33),a=(n(31),n(59),n(96)),s=(n(11),new RegExp
 ("^["+i.ATTRIBUTE_NAME_START_CHAR+"]["+i.ATTRIBUTE_NAME_CHAR+"]*$")),u={},l={},c={createMarkupForID:function(e){return i.ID_ATTRIBUTE_NAME+"="+a(e)},setAttributeForID:function(e,t){e.setAttribute(i.ID_ATTRIBUTE_NAME,t)},createMarkupForRoot:function(){return i.ROOT_ATTRIBUTE_NAME+'=""'},setAttributeForRoot:function(e){e.setAttribute(i.ROOT_ATTRIBUTE_NAME,"")},createMarkupForProperty:function(e,t){var n=i.properties.hasOwnProperty(e)?i.properties[e]:null;if(n){if(o(n,t))return"";var r=n.attributeName;return n.hasBooleanValue||n.hasOverloadedBooleanValue&&t===!0?r+'=""':r+"="+a(t)}return i.isCustomAttribute(e)?null==t?"":e+"="+a(t):null},createMarkupForCustomAttribute:function(e,t){return r(e)&&null!=t?e+"="+a(t):""},setValueForProperty:function(e,t,n){var r=i.properties.hasOwnProperty(t)?i.properties[t]:null;if(r){var a=r.mutationMethod;if(a
 )a(e,n);else{if(o(r,n))return void this.deleteValueForProperty(e,t);if(r.mustUseProperty)e[r.propertyName]=n;else{var s=r.attributeName,u=r.attributeNamespace;u?e.setAttributeNS(u,s,""+n):r.hasBooleanValue||r.hasOverloadedBooleanValue&&n===!0?e.setAttribute(s,""):e.setAttribute(s,""+n)}}}else if(i.isCustomAttribute(t))return void c.setValueForAttribute(e,t,n)},setValueForAttribute:function(e,t,n){if(r(t)){null==n?e.removeAttribute(t):e.setAttribute(t,""+n)}},deleteValueForAttribute:function(e,t){e.removeAttribute(t)},deleteValueForProperty:function(e,t){var n=i.properties.hasOwnProperty(t)?i.properties[t]:null;if(n){var r=n.mutationMethod;if(r)r(e,void 0);else if(n.mustUseProperty){var o=n.propertyName;n.hasBooleanValue?e[o]=!1:e[o]=""}else e.removeAttribute(n.attributeName)}else i.isCustomAttribute(t)&&e.removeAttribute(t)}};e.exports=c},function(e,t,n){"use strict";function r(e){return'"'+o(e)+'"
 '}var o=n(78);e.exports=r},function(e,t,n){"use strict";function r(e){return Object.prototype.hasOwnProperty.call(e,v)||(e[v]=f++,p[e[v]]={}),p[e[v]]}var o,i=n(4),a=n(40),s=n(98),u=n(68),l=n(99),c=n(62),p={},d=!1,f=0,h={topAbort:"abort",topAnimationEnd:l("animationend")||"animationend",topAnimationIteration:l("animationiteration")||"animationiteration",topAnimationStart:l("animationstart")||"animationstart",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragen
 ter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeke
 d",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:l("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},v="_reactListenersID"+String(Math.random()).slice(2),m=i({},s,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(m.handleTopLevel),m.ReactEventListener=e}},setEnabled:function(e){m.ReactEventListener&&m.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!m.ReactEventListener||!m.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,o=r(n),i=a.registrationNameDependencies[
 e],s=0;s<i.length;s++){var u=i[s];o.hasOwnProperty(u)&&o[u]||("topWheel"===u?c("wheel")?m.ReactEventListener.trapBubbledEvent("topWheel","wheel",n):c("mousewheel")?m.ReactEventListener.trapBubbledEvent("topWheel","mousewheel",n):m.ReactEventListener.trapBubbledEvent("topWheel","DOMMouseScroll",n):"topScroll"===u?c("scroll",!0)?m.ReactEventListener.trapCapturedEvent("topScroll","scroll",n):m.ReactEventListener.trapBubbledEvent("topScroll","scroll",m.ReactEventListener.WINDOW_HANDLE):"topFocus"===u||"topBlur"===u?(c("focus",!0)?(m.ReactEventListener.trapCapturedEvent("topFocus","focus",n),m.ReactEventListener.trapCapturedEvent("topBlur","blur",n)):c("focusin")&&(m.ReactEventListener.trapBubbledEvent("topFocus","focusin",
 n),m.ReactEventListener.trapBubbledEvent("topBlur","focusout",n)),o.topBlur=!0,o.topFocus=!0):h.hasOwnProperty(u)&&m.ReactEventListener.trapBubbledEvent(u,h[u],n),o[u]=!0)}},trapBubbledEvent:function(e,t,n){return m.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return m.ReactEventListener.trapCapturedEvent(e,t,n)},supportsEventPageXY:function(){if(!document.createEvent)return!1;var e=document.createEvent("MouseEvent");return null!=e&&"pageX"in e},ensureScrollValueMonitoring:function(){if(void 0===o&&(o=m.supportsEventPageXY()),!o&&!d){var e=u.refreshScrollValues;m.ReactEventListener.monitorScrollValue(e),d=!0}}});e.exports=m},function(e,t,n){"use strict";function r(e){o.enqueueEvents(e),o.processEventQueue(!1)}var o=n(39),i={handleTopLevel:function(e,t,n,i){var a=o.extractEvents(e,t,n,i);r(a)}};e.exports=i},function(e,t,n){"use strict";function r(e,t){var n={};
 return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function o(e){if(s[e])return s[e];if(!a[e])return e;var t=a[e];for(var n in t)if(t.hasOwnProperty(n)&&n in u)return s[e]=t[n];return""}var i=n(45),a={animationend:r("Animation","AnimationEnd"),animationiteration:r("Animation","AnimationIteration"),animationstart:r("Animation","AnimationStart"),transitionend:r("Transition","TransitionEnd")},s={},u={};i.canUseDOM&&(u=document.createElement("div").style,"AnimationEvent"in window||(delete a.animationend.animation,delete a.animationiteration.animation,delete a.animationstart.animation),"TransitionEvent"in window||delete a.transitionend.transition),e.exports=o},function(e,t,n){"use strict&q
 uot;;function r(){this._rootNodeID&&p.updateWrapper(this);
+}function o(e){var t=this._currentElement.props,n=u.executeOnChange(t,e);c.asap(r,this);var o=t.name;if("radio"===t.type&&null!=o){for(var a=l.getNodeFromInstance(this),s=a;s.parentNode;)s=s.parentNode;for(var p=s.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),d=0;d<p.length;d++){var f=p[d];if(f!==a&&f.form===a.form){var h=l.getInstanceFromNode(f);h?void 0:i("90"),c.asap(r,h)}}}return n}var i=n(32),a=n(4),s=n(95),u=n(101),l=n(31),c=n(53),p=(n(8),n(11),{getHostProps:function(e,t){var n=u.getValue(t),r=u.getChecked(t),o=a({type:void 0,step:void 0,min:void 0,max:void 0},t,{defaultChecked:void 0,defaultValue:void 0,value:null!=n?n:e._wrapperState.initialValue,checked:null!=r?r:e._wrapperState.initialChecked,onChange:e._wrapperState.onChange});return o},mountWrapper:function(e,t){var n=t.defaultValue;e._wrapperState={initialChecked:null!=t.checked?t.checked:t.defaultChecked,initialValue:null!=t.v
 alue?t.value:n,listeners:null,onChange:o.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=t.checked;null!=n&&s.setValueForProperty(l.getNodeFromInstance(e),"checked",n||!1);var r=l.getNodeFromInstance(e),o=u.getValue(t);if(null!=o){var i=""+o;i!==r.value&&(r.value=i)}else null==t.value&&null!=t.defaultValue&&(r.defaultValue=""+t.defaultValue),null==t.checked&&null!=t.defaultChecked&&(r.defaultChecked=!!t.defaultChecked)},postMountWrapper:function(e){var t=e._currentElement.props,n=l.getNodeFromInstance(e);switch(t.type){case"submit":case"reset":break;case"color":case"date":case"datetime":case"datetime-local":case"month":case"time":case"week":n.value="",n.value=n.defaultValue;break;default:n.value=n.value}var r=n.name;""!==r&&(n.name=""),n.defaultChecked=!n.defau
 ltChecked,n.defaultChecked=!n.defaultChecked,""!==r&&(n.name=r)}});e.exports=p},function(e,t,n){"use strict";function r(e){null!=e.checkedLink&&null!=e.valueLink?s("87"):void 0}function o(e){r(e),null!=e.value||null!=e.onChange?s("88"):void 0}function i(e){r(e),null!=e.checked||null!=e.onChange?s("89"):void 0}function a(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}var s=n(32),u=n(3),l=n(102),c=(n(8),n(11),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0}),p={value:function(e,t,n){return!e[t]||c[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readO
 nly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:u.PropTypes.func},d={},f={checkPropTypes:function(e,t,n){for(var r in p){if(p.hasOwnProperty(r))var o=p[r](t,r,e,"prop",null,l);if(o instanceof Error&&!(o.message in d)){d[o.message]=!0;a(n)}}},getValue:function(e){return e.valueLink?(o(e),e.valueLink.value):e.value},getChecked:function(e){return e.checkedLink?(i(e),e.checkedLink.value):e.checked},executeOnChange:function(e,t){return e.valueLink?(o(e),e.valueLink.requestChange(t.target.value)):e.checkedLink?(i(e),e.checkedLink.requestChange(t.target.checked)):e.onChange?e.onChange.call(void 0,t):void 0}};e.exports=f},26,function(e,t,n){"use strict";function r(e){var t="";return i.Children.forEach(e,function(e){null!=e&&(&quo
 t;string"==typeof e||"number"==typeof e?t+=e:u||(u=!0))}),t}var o=n(4),i=n(3),a=n(31),s=n(104),u=(n(11),!1),l={mountWrapper:function(e,t,n){var o=null;if(null!=n){var i=n;"optgroup"===i._tag&&(i=i._hostParent),null!=i&&"select"===i._tag&&(o=s.getSelectValueContext(i))}var a=null;if(null!=o){var u;if(u=null!=t.value?t.value+"":r(t.children),a=!1,Array.isArray(o)){for(var l=0;l<o.length;l++)if(""+o[l]===u){a=!0;break}}else a=""+o===u}e._wrapperState={selected:a}},postMountWrapper:function(e){var t=e._currentElement.props;if(null!=t.value){var n=a.getNodeFromInstance(e);n.setAttribute("value",t.value)}},getHostProps:function(e,t){var n=o({selected:void 0,children:void 0},t);null!=e._wrapperState.selected&&(n.selected=e._wrapperState.selected);var i=r(t.children);return i&&(n.children=i),n}};e.exports=l},function(e,t,n){"use strict";function r(){if(this._rootNo
 deID&&this._wrapperState.pendingUpdate){this._wrapperState.pendingUpdate=!1;var e=this._currentElement.props,t=s.getValue(e);null!=t&&o(this,Boolean(e.multiple),t)}}function o(e,t,n){var r,o,i=u.getNodeFromInstance(e).options;if(t){for(r={},o=0;o<n.length;o++)r[""+n[o]]=!0;for(o=0;o<i.length;o++){var a=r.hasOwnProperty(i[o].value);i[o].selected!==a&&(i[o].selected=a)}}else{for(r=""+n,o=0;o<i.length;o++)if(i[o].value===r)return void(i[o].selected=!0);i.length&&(i[0].selected=!0)}}function i(e){var t=this._currentElement.props,n=s.executeOnChange(t,e);return this._rootNodeID&&(this._wrapperState.pendingUpdate=!0),l.asap(r,this),n}var a=n(4),s=n(101),u=n(31),l=n(53),c=(n(11),!1),p={getHostProps:function(e,t){return a({},t,{onChange:e._wrapperState.onChange,value:void 0})},mountWrapper:function(e,t){var n=s.getValue(t);e._wrapperState={pendingUpdate:!1,initialValue:null!=n?n:t.defaultValue,listeners:null,onChange:i.bin
 d(e),wasMultiple:Boolean(t.multiple)},void 0===t.value||void 0===t.defaultValue||c||(c=!0)},getSelectValueContext:function(e){return e._wrapperState.initialValue},postUpdateWrapper:function(e){var t=e._currentElement.props;e._wrapperState.initialValue=void 0;var n=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=Boolean(t.multiple);var r=s.getValue(t);null!=r?(e._wrapperState.pendingUpdate=!1,o(e,Boolean(t.multiple),r)):n!==Boolean(t.multiple)&&(null!=t.defaultValue?o(e,Boolean(t.multiple),t.defaultValue):o(e,Boolean(t.multiple),t.multiple?[]:""))}};e.exports=p},function(e,t,n){"use strict";function r(){this._rootNodeID&&c.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=s.executeOnChange(t,e);return l.asap(r,this),n}var i=n(32),a=n(4),s=n(101),u=n(31),l=n(53),c=(n(8),n(11),{getHostProps:function(e,t){null!=t.dangerouslySetInnerHTML?i("91"):void 0;var n=a({},t,{value:void 0,defaultValue:void 0,children:"&q
 uot;+e._wrapperState.initialValue,onChange:e._wrapperState.onChange});return n},mountWrapper:function(e,t){var n=s.getValue(t),r=n;if(null==n){var a=t.defaultValue,u=t.children;null!=u&&(null!=a?i("92"):void 0,Array.isArray(u)&&(u.length<=1?void 0:i("93"),u=u[0]),a=""+u),null==a&&(a=""),r=a}e._wrapperState={initialValue:""+r,listeners:null,onChange:o.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=u.getNodeFromInstance(e),r=s.getValue(t);if(null!=r){var o=""+r;o!==n.value&&(n.value=o),null==t.defaultValue&&(n.defaultValue=o)}null!=t.defaultValue&&(n.defaultValue=t.defaultValue)},postMountWrapper:function(e){var t=u.getNodeFromInstance(e);t.value=t.textContent}});e.exports=c},function(e,t,n){"use strict";function r(e,t,n){return{type:"INSERT_MARKUP",content:e,fromIndex:null,fromNode:null,toIndex:n,afterNode:t}}function o(e,t,n){return{
 type:"MOVE_EXISTING",content:null,fromIndex:e._mountIndex,fromNode:d.getHostNode(e),toIndex:n,afterNode:t}}function i(e,t){return{type:"REMOVE_NODE",content:null,fromIndex:e._mountIndex,fromNode:t,toIndex:null,afterNode:null}}function a(e){return{type:"SET_MARKUP",content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function s(e){return{type:"TEXT_CONTENT",content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function u(e,t){return t&&(e=e||[],e.push(t)),e}function l(e,t){p.processChildrenUpdates(e,t)}var c=n(32),p=n(107),d=(n(108),n(59),n(10),n(56)),f=n(109),h=(n(12),n(124)),v=(n(8),{Mixin:{_reconcilerInstantiateChildren:function(e,t,n){return f.instantiateChildren(e,t,n)},_reconcilerUpdateChildren:function(e,t,n,r,o,i){var a,s=0;return a=h(t,s),f.updateChildren(e,a,n,r,o,this,this._hostContainerInfo,i,s),a},mountChildren:function(e,t,n){var r=this._reconcilerInstantiateChildren(e,t,n);this._renderedChildr
 en=r;var o=[],i=0;for(var a in r)if(r.hasOwnProperty(a)){var s=r[a],u=0,l=d.mountComponent(s,t,this,this._hostContainerInfo,n,u);s._mountIndex=i++,o.push(l)}return o},updateTextContent:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&c("118");var r=[s(e)];l(this,r)},updateMarkup:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&c("118");var r=[a(e)];l(this,r)},updateChildren:function(e,t,n){this._updateChildren(e,t,n)},_updateChildren:function(e,t,n){var r=this._renderedChildren,o={},i=[],a=this._reconcilerUpdateChildren(r,e,i,o,t,n);if(a||r){var s,c=null,p=0,f=0,h=0,v=null;for(s in a)if(a.hasOwnProperty(s)){var m=r&&r[s],g=a[s];m===g?(c=u(c,this.moveChild(m,v,p,f)),f=Math.max(m._mountIndex,f),m._mountIndex=p):(m&&(f=Math.max(m._mountIndex,f)),c=u(c,this._mountChildAtIndex(g,i[h],v,p,t,n)),h++),p++,v=d.getHostNode(g)}for(s in o)o.
 hasOwnProperty(s)&&(c=u(c,this._unmountChild(r[s],o[s])));c&&l(this,c),this._renderedChildren=a}},unmountChildren:function(e){var t=this._renderedChildren;f.unmountChildren(t,e),this._renderedChildren=null},moveChild:function(e,t,n,r){if(e._mountIndex<r)return o(e,t,n)},createChild:function(e,t,n){return r(n,t,e._mountIndex)},removeChild:function(e,t){return i(e,t)},_mountChildAtIndex:function(e,t,n,r,o,i){return e._mountIndex=r,this.createChild(e,n,t)},_unmountChild:function(e,t){var n=this.removeChild(e,t);return e._mountIndex=null,n}}});e.exports=v},function(e,t,n){"use strict";var r=n(32),o=(n(8),!1),i={replaceNodeWithMarkup:null,processChildrenUpdates:null,injection:{injectEnvironment:function(e){o?r("104"):void 0,i.replaceNodeWithMarkup=e.replaceNodeWithMarkup,i.processChildrenUpdates=e.processChildrenUpdates,o=!0}}};e.exports=i},function(e,t){"use strict";var n={remove:function(e){e._reactInternalInstance=void 0},get:function(e
 ){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};e.exports=n},function(e,t,n){(function(t){"use strict";function r(e,t,n,r){var o=void 0===e[n];null!=t&&o&&(e[n]=i(t,!0))}var o=n(56),i=n(111),a=(n(119),n(115)),s=n(120);n(11);"undefined"!=typeof t&&t.env,1;var u={instantiateChildren:function(e,t,n,o){if(null==e)return null;var i={};return s(e,r,i),i},updateChildren:function(e,t,n,r,s,u,l,c,p){if(t||e){var d,f;for(d in t)if(t.hasOwnProperty(d)){f=e&&e[d];var h=f&&f._currentElement,v=t[d];if(null!=f&&a(h,v))o.receiveComponent(f,v,s,c),t[d]=f;else{f&&(r[d]=o.getHostNode(f),o.unmountComponent(f,!1));var m=i(v,!0);t[d]=m;var g=o.mountComponent(m,s,u,l,c,p);n.push(g)}}for(d in e)!e.hasOwnProperty(d)||t&&t.hasOwnProperty(d)||(f=e[d],r[d]=o.getHostNode(f),o.unmountComponent(f,!1))}},unmountChildren:function(e,t){for(var
  n in e)if(e.hasOwnProperty(n)){var r=e[n];o.unmountComponent(r,t)}}};e.exports=u}).call(t,n(110))},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function i(e){if(p===clearTimeout)return clearTimeout(e);if((p===r||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function a(){v&&f&&(v=!1,f.length?h=f.concat(h):m=-1,h.length&&s())}function s(){if(!v){var e=o(a);v=!0;for(var t=h.length;t;){for(f=h,h=[];++m<t;)f&&f[m].run();m=-1,t=h.length}f=null,v=!1,i(e)}}function u(e,t){this.fun=e,this.array=t}function l(){}var c,p,d=e.expor
 ts={};!function(){try{c="function"==typeof setTimeout?setTimeout:n}catch(e){c=n}try{p="function"==typeof clearTimeout?clearTimeout:r}catch(e){p=r}}();var f,h=[],v=!1,m=-1;d.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];h.push(new u(e,t)),1!==h.length||v||o(s)},u.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=l,d.addListener=l,d.once=l,d.off=l,d.removeListener=l,d.removeAllListeners=l,d.emit=l,d.binding=function(e){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(e){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},function(e,t,n){"use strict";function r(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`.
 "}return""}function o(e){return"function"==typeof e&&"undefined"!=typeof e.prototype&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function i(e,t){var n;if(null===e||e===!1)n=l.create(i);else if("object"==typeof e){var s=e;!s||"function"!=typeof s.type&&"string"!=typeof s.type?a("130",null==s.type?s.type:typeof s.type,r(s._owner)):void 0,"string"==typeof s.type?n=c.createInternalComponent(s):o(s.type)?(n=new s.type(s),n.getHostNode||(n.getHostNode=n.getNativeNode)):n=new p(s)}else"string"==typeof e||"number"==typeof e?n=c.createInstanceForText(e):a("131",typeof e);return n._mountIndex=0,n._mountImage=null,n}var a=n(32),s=n(4),u=n(112),l=n(116),c=n(117),p=(n(118),n(8),n(11),function(e){this.construct(e)});s(p.prototype,u,{_instantiateReactComponent:i}),e.exports=i},funct
 ion(e,t,n){"use strict";function r(e){}function o(e,t){}function i(e){return!(!e.prototype||!e.prototype.isReactComponent)}function a(e){return!(!e.prototype||!e.prototype.isPureReactComponent)}var s=n(32),u=n(4),l=n(3),c=n(107),p=n(10),d=n(42),f=n(108),h=(n(59),n(113)),v=n(56),m=n(20),g=(n(8),n(114)),y=n(115),_=(n(11),{ImpureClass:0,PureClass:1,StatelessFunctional:2});r.prototype.render=function(){var e=f.get(this)._currentElement.type,t=e(this.props,this.context,this.updater);return o(e,t),t};var b=1,C={construct:function(e){this._currentElement=e,this._rootNodeID=0,this._compositeType=null,this._instance=null,this._hostParent=null,this._hostContainerInfo=null,this._updateBatchNumber=null,this._pendingElement=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._renderedNodeType=null,this._renderedComponent=null,this._context=null,this._mountOrder=0,this._topLevelWrapper=null,this._pendingCallbacks=null,this._calledComponentWill
 Unmount=!1},mountComponent:function(e,t,n,u){this._context=u,this._mountOrder=b++,this._hostParent=t,this._hostContainerInfo=n;var c,p=this._currentElement.props,d=this._processContext(u),h=this._currentElement.type,v=e.getUpdateQueue(),g=i(h),y=this._constructComponent(g,p,d,v);g||null!=y&&null!=y.render?a(h)?this._compositeType=_.PureClass:this._compositeType=_.ImpureClass:(c=y,o(h,c),null===y||y===!1||l.isValidElement(y)?void 0:s("105",h.displayName||h.name||"Component"),y=new r(h),this._compositeType=_.StatelessFunctional);y.props=p,y.context=d,y.refs=m,y.updater=v,this._instance=y,f.set(y,this);var C=y.state;void 0===C&&(y.state=C=null),"object"!=typeof C||Array.isArray(C)?s("106",this.getName()||"ReactCompositeComponent"):void 0,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1;var x;return x=y.unstable_handleError?this.performInitialMountWithErrorHandling(c,t,n,e,u):this.perf
 ormInitialMount(c,t,n,e,u),y.componentDidMount&&e.getReactMountReady().enqueue(y.componentDidMount,y),x},_constructComponent:function(e,t,n,r){return this._constructComponentWithoutOwner(e,t,n,r)},_constructComponentWithoutOwner:function(e,t,n,r){var o=this._currentElement.type;return e?new o(t,n,r):o(t,n,r)},performInitialMountWithErrorHandling:function(e,t,n,r,o){var i,a=r.checkpoint();try{i=this.performInitialMount(e,t,n,r,o)}catch(s){r.rollback(a),this._instance.unstable_handleError(s),this._pendingStateQueue&&(this._instance.state=this._processPendingState(this._instance.props,this._instance.context)),a=r.checkpoint(),this._renderedComponent.unmountComponent(!0),r.rollback(a),i=this.performInitialMount(e,t,n,r,o)}return i},performInitialMount:function(e,t,n,r,o){var i=this._instance,a=0;i.componentWillMount&&(i.componentWillMount(),this._pendingStateQueue&&(i.state=this._processPendingState(i.props,i.context))),void 0===e&&(e=this._render
 ValidatedComponent());var s=h.getType(e);this._renderedNodeType=s;var u=this._instantiateReactComponent(e,s!==h.EMPTY);this._renderedComponent=u;var l=v.mountComponent(u,r,t,n,this._processChildContext(o),a);return l},getHostNode:function(){return v.getHostNode(this._renderedComponent)},unmountComponent:function(e){if(this._renderedComponent){var t=this._instance;if(t.componentWillUnmount&&!t._calledComponentWillUnmount)if(t._calledComponentWillUnmount=!0,e){var n=this.getName()+".componentWillUnmount()";d.invokeGuardedCallback(n,t.componentWillUnmount.bind(t))}else t.componentWillUnmount();this._renderedComponent&&(v.unmountComponent(this._renderedComponent,e),this._renderedNodeType=null,this._renderedComponent=null,this._instance=null),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._pendingCallbacks=null,this._pendingElement=null,this._context=null,this._rootNodeID=0,this._topLevelWrapper=null,f.remove(t)}},_mas
 kContext:function(e){var t=this._currentElement.type,n=t.contextTypes;if(!n)return m;var r={};for(var o in n)r[o]=e[o];return r},_processContext:function(e){var t=this._maskContext(e);return t},_processChildContext:function(e){var t,n=this._currentElement.type,r=this._instance;if(r.getChildContext&&(t=r.getChildContext()),t){"object"!=typeof n.childContextTypes?s("107",this.getName()||"ReactCompositeComponent"):void 0;for(var o in t)o in n.childContextTypes?void 0:s("108",this.getName()||"ReactCompositeComponent",o);return u({},e,t)}return e},_checkContextTypes:function(e,t,n){},receiveComponent:function(e,t,n){var r=this._currentElement,o=this._context;this._pendingElement=null,this.updateComponent(t,r,e,o,n)},performUpdateIfNecessary:function(e){null!=this._pendingElement?v.receiveComponent(this,this._pendingElement,e,this._context):null!==this._pendingStateQueue||this._pendingForceUpdate?this.updateComponent(e,this._curren
 tElement,this._currentElement,this._context,this._context):this._updateBatchNumber=null},updateComponent:function(e,t,n,r,o){var i=this._instance;null==i?s("136",this.getName()||"ReactCompositeComponent"):void 0;var a,u=!1;this._context===o?a=i.context:(a=this._processContext(o),u=!0);var l=t.props,c=n.props;t!==n&&(u=!0),u&&i.componentWillReceiveProps&&i.componentWillReceiveProps(c,a);var p=this._processPendingState(c,a),d=!0;this._pendingForceUpdate||(i.shouldComponentUpdate?d=i.shouldComponentUpdate(c,p,a):this._compositeType===_.PureClass&&(d=!g(l,c)||!g(i.state,p))),this._updateBatchNumber=null,d?(this._pendingForceUpdate=!1,this._performComponentUpdate(n,c,p,a,e,o)):(this._currentElement=n,this._context=o,i.props=c,i.state=p,i.context=a)},_processPendingState:function(e,t){var n=this._instance,r=this._pendingStateQueue,o=this._pendingReplaceState;if(this._pendingReplaceState=!1,this._pendingStateQueue=null,!r)return n.state;i
 f(o&&1===r.length)return r[0];for(var i=u({},o?r[0]:n.state),a=o?1:0;a<r.length;a++){var s=r[a];u(i,"function"==typeof s?s.call(n,i,e,t):s)}return i},_performComponentUpdate:function(e,t,n,r,o,i){var a,s,u,l=this._instance,c=Boolean(l.componentDidUpdate);c&&(a=l.props,s=l.state,u=l.context),l.componentWillUpdate&&l.componentWillUpdate(t,n,r),this._currentElement=e,this._context=i,l.props=t,l.state=n,l.context=r,this._updateRenderedComponent(o,i),c&&o.getReactMountReady().enqueue(l.componentDidUpdate.bind(l,a,s,u),l)},_updateRenderedComponent:function(e,t){var n=this._renderedComponent,r=n._currentElement,o=this._renderValidatedComponent(),i=0;if(y(r,o))v.receiveComponent(n,o,e,this._processChildContext(t));else{var a=v.getHostNode(n);v.unmountComponent(n,!1);var s=h.getType(o);this._renderedNodeType=s;var u=this._instantiateReactComponent(o,s!==h.EMPTY);this._renderedComponent=u;var l=v.mountComponent(u,e,this._hostParent,this._hostContai
 nerInfo,this._processChildContext(t),i);this._replaceNodeWithMarkup(a,l,n)}},_replaceNodeWithMarkup:function(e,t,n){c.replaceNodeWithMarkup(e,t,n)},_renderValidatedComponentWithoutOwnerOrContext:function(){var e,t=this._instance;return e=t.render()},_renderValidatedComponent:function(){var e;if(this._compositeType!==_.StatelessFunctional){p.current=this;try{e=this._renderValidatedComponentWithoutOwnerOrContext()}finally{p.current=null}}else e=this._renderValidatedComponentWithoutOwnerOrContext();return null===e||e===!1||l.isValidElement(e)?void 0:s("109",this.getName()||"ReactCompositeComponent"),e},attachRef:function(e,t){var n=this.getPublicInstance();null==n?s("110"):void 0;var r=t.getPublicInstance(),o=n.refs===m?n.refs={}:n.refs;o[e]=r},detachRef:function(e){var t=this.getPublicInstance().refs;delete t[e]},getName:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displ
 ayName||e.name||t&&t.name||null},getPublicInstance:function(){var e=this._instance;return this._compositeType===_.StatelessFunctional?null:e},_instantiateReactComponent:null};e.exports=C},function(e,t,n){"use strict";var r=n(32),o=n(3),i=(n(8),{HOST:0,COMPOSITE:1,EMPTY:2,getType:function(e){return null===e||e===!1?i.EMPTY:o.isValidElement(e)?"function"==typeof e.type?i.COMPOSITE:i.HOST:void r("26",e)}});e.exports=i},function(e,t){"use strict";function n(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function r(e,t){if(n(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;for(var a=0;a<r.length;a++)if(!o.call(t,r[a])||!n(e[r[a]],t[r[a]]))return!1;return!0}var o=Object.prototype.hasOwnProperty;e.exports=r},function(e,t){"use strict";function n(e,t){var n=null===e||e===!1,r=null===t||t===!
 1;if(n||r)return n===r;var o=typeof e,i=typeof t;return"string"===o||"number"===o?"string"===i||"number"===i:"object"===i&&e.type===t.type&&e.key===t.key}e.exports=n},function(e,t){"use strict";var n,r={injectEmptyComponentFactory:function(e){n=e}},o={create:function(e){return n(e)}};o.injection=r,e.exports=o},function(e,t,n){"use strict";function r(e){return u?void 0:a("111",e.type),new u(e)}function o(e){return new c(e)}function i(e){return e instanceof c}var a=n(32),s=n(4),u=(n(8),null),l={},c=null,p={injectGenericComponentClass:function(e){u=e},injectTextComponentClass:function(e){c=e},injectComponentClasses:function(e){s(l,e)}},d={createInternalComponent:r,createInstanceForText:o,isTextComponent:i,injection:p};e.exports=d},function(e,t){"use strict";function n(){return r++}var r=1;e.exports=n},17,function(e,t,n){"use strict";function r(e,t){return e&&&quot
 ;object"==typeof e&&null!=e.key?l.escape(e.key):t.toString(36)}function o(e,t,n,i){var d=typeof e;if("undefined"!==d&&"boolean"!==d||(e=null),null===e||"string"===d||"number"===d||"object"===d&&e.$$typeof===s)return n(i,e,""===t?c+r(e,0):t),1;var f,h,v=0,m=""===t?c:t+p;if(Array.isArray(e))for(var g=0;g<e.length;g++)f=e[g],h=m+r(f,g),v+=o(f,h,n,i);else{var y=u(e);if(y){var _,b=y.call(e);if(y!==e.entries)for(var C=0;!(_=b.next()).done;)f=_.value,h=m+r(f,C++),v+=o(f,h,n,i);else for(;!(_=b.next()).done;){var x=_.value;x&&(f=x[1],h=m+l.escape(x[0])+p+r(f,0),v+=o(f,h,n,i))}}else if("object"===d){var E="",w=String(e);a("31","[object Object]"===w?"object with keys {"+Object.keys(e).join(", ")+"}":w,E)}}return v}function i(e,t,n){return null==e?0:o(e,"",t,n)}var a=n(32),s=(n(10),n(121)),u=n(122),l=(n(8),n
 (119)),c=(n(11),"."),p=":";e.exports=i},14,16,function(e,t,n){"use strict";function r(e){var t=Function.prototype.toString,n=Object.prototype.hasOwnProperty,r=RegExp("^"+t.call(n).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");try{var o=t.call(e);return r.test(o)}catch(e){return!1}}function o(e){var t=l(e);if(t){var n=t.childIDs;c(e),n.forEach(o)}}function i(e,t,n){return"\n    in "+(e||"Unknown")+(t?" (at "+t.fileName.replace(/^.*[\\\/]/,"")+":"+t.lineNumber+")":n?" (created by "+n+")":"")}function a(e){return null==e?"#empty":"string"==typeof e||"number"==typeof e?"#text":"string"==typeof e.type?e.type:e.type.displayName||e.type.name||"Unknown"}function s(e){var t,n=T.getDisplayName(e),r=T.ge
 tElement(e),o=T.getOwnerID(e);return o&&(t=T.getDisplayName(o)),i(n,r&&r._source,t)}var u,l,c,p,d,f,h,v=n(7),m=n(10),g=(n(8),n(11),"function"==typeof Array.from&&"function"==typeof Map&&r(Map)&&null!=Map.prototype&&"function"==typeof Map.prototype.keys&&r(Map.prototype.keys)&&"function"==typeof Set&&r(Set)&&null!=Set.prototype&&"function"==typeof Set.prototype.keys&&r(Set.prototype.keys));if(g){var y=new Map,_=new Set;u=function(e,t){y.set(e,t)},l=function(e){return y.get(e)},c=function(e){y.delete(e)},p=function(){return Array.from(y.keys())},d=function(e){_.add(e)},f=function(e){_.delete(e)},h=function(){return Array.from(_.keys())}}else{var b={},C={},x=function(e){return"."+e},E=function(e){return parseInt(e.substr(1),10)};u=function(e,t){var n=x(e);b[n]=t},l=function(e){var t=x(e);return b[t]},c=function(e){var t=x(e);delete 
 b[t]},p=function(){return Object.keys(b).map(E)},d=function(e){var t=x(e);C[t]=!0},f=function(e){var t=x(e);delete C[t]},h=function(){return Object.keys(C).map(E)}}var w=[],T={onSetChildren:function(e,t){var n=l(e);n?void 0:v("144"),n.childIDs=t;for(var r=0;r<t.length;r++){var o=t[r],i=l(o);i?void 0:v("140"),null==i.childIDs&&"object"==typeof i.element&&null!=i.element?v("141"):void 0,i.isMounted?void 0:v("71"),null==i.parentID&&(i.parentID=e),i.parentID!==e?v("142",o,i.parentID,e):void 0}},onBeforeMountComponent:function(e,t,n){var r={element:t,parentID:n,text:null,childIDs:[],isMounted:!1,updateCount:0};u(e,r)},onBeforeUpdateComponent:function(e,t){var n=l(e);n&&n.isMounted&&(n.element=t)},onMountComponent:function(e){var t=l(e);t?void 0:v("144"),t.isMounted=!0;var n=0===t.parentID;n&&d(e)},onUpdateComponent:function(e){var t=l(e);t&&t.isMounted&&amp
 ;t.updateCount++},onUnmountComponent:function(e){var t=l(e);if(t){t.isMounted=!1;var n=0===t.parentID;n&&f(e)}w.push(e)},purgeUnmountedComponents:function(){if(!T._preventPurging){for(var e=0;e<w.length;e++){var t=w[e];o(t)}w.length=0}},isMounted:function(e){var t=l(e);return!!t&&t.isMounted},getCurrentStackAddendum:function(e){var t="";if(e){var n=a(e),r=e._owner;t+=i(n,e._source,r&&r.getName())}var o=m.current,s=o&&o._debugID;return t+=T.getStackAddendumByID(s)},getStackAddendumByID:function(e){for(var t="";e;)t+=s(e),e=T.getParentID(e);return t},getChildIDs:function(e){var t=l(e);return t?t.childIDs:[]},getDisplayName:function(e){var t=T.getElement(e);return t?a(t):null},getElement:function(e){var t=l(e);return t?t.element:null},getOwnerID:function(e){var t=T.getElement(e);return t&&t._owner?t._owner._debugID:null},getParentID:function(e){var t=l(e);return t?t.parentID:null},getSource:function(e){var t=l(e),n=t?t.elem
 ent:null,r=null!=n?n._source:null;return r},getText:function(e){var t=T.getElement(e);return"string"==typeof t?t:"number"==typeof t?""+t:null},getUpdateCount:function(e){var t=l(e);return t?t.updateCount:0},getRootIDs:h,getRegisteredIDs:p};e.exports=T},function(e,t,n){(function(t){"use strict";function r(e,t,n,r){if(e&&"object"==typeof e){var o=e,i=void 0===o[n];i&&null!=t&&(o[n]=t)}}function o(e,t){if(null==e)return e;var n={};return i(e,r,n),n}var i=(n(119),n(120));n(11);"undefined"!=typeof t&&t.env,1,e.exports=o}).call(t,n(110))},function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=e,this.useCreateElement=!1,this.updateQueue=new s(this)}var o=n(4),i=n(47),a=n(60),s=(n(59),n(126)),u=[],l={enqueue:function(){}},c={getTransactionWrappers:function(){return u},getReactMountReady:function(){return l},getUpdateQueue:function(){return this.u
 pdateQueue},destructor:function(){},checkpoint:function(){},rollback:function(){}};o(r.prototype,a,c),i.addPoolingTo(r),e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){}var i=n(127),a=(n(11),function(){function e(t){r(this,e),this.transaction=t}return e.prototype.isMounted=function(e){return!1},e.prototype.enqueueCallback=function(e,t,n){this.transaction.isInTransaction()&&i.enqueueCallback(e,t,n)},e.prototype.enqueueForceUpdate=function(e){this.transaction.isInTransaction()?i.enqueueForceUpdate(e):o(e,"forceUpdate")},e.prototype.enqueueReplaceState=function(e,t){this.transaction.isInTransaction()?i.enqueueReplaceState(e,t):o(e,"replaceState")},e.prototype.enqueueSetState=function(e,t){this.transaction.isInTransaction()?i.enqueueSetState(e,t):o(e,"setState")},e}());e.exports=a},function(e,t,n){"use strict";functio
 n r(e){u.enqueueUpdate(e)}function o(e){var t=typeof e;if("object"!==t)return t;var n=e.constructor&&e.constructor.name||t,r=Object.keys(e);return r.length>0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}function i(e,t){var n=s.get(e);if(!n){return null}return n}var a=n(32),s=(n(10),n(108)),u=(n(59),n(53)),l=(n(8),n(11),{isMounted:function(e){var t=s.get(e);return!!t&&!!t._renderedComponent},enqueueCallback:function(e,t,n){l.validateCallback(t,n);var o=i(e);return o?(o._pendingCallbacks?o._pendingCallbacks.push(t):o._pendingCallbacks=[t],void r(o)):null},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],r(e)},enqueueForceUpdate:function(e){var t=i(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,r(t))},enqueueReplaceState:function(e,t){var n=i(e,"replaceState");n&&(n._pendingStateQueue=[t],n._pendingReplaceState=!0,r(n))},e
 nqueueSetState:function(e,t){var n=i(e,"setState");if(n){var o=n._pendingStateQueue||(n._pendingStateQueue=[]);o.push(t),r(n)}},enqueueElementInternal:function(e,t,n){e._pendingElement=t,e._context=n,r(e)},validateCallback:function(e,t){e&&"function"!=typeof e?a("122",t,o(e)):void 0}});e.exports=l},function(e,t,n){"use strict";var r=(n(4),n(12)),o=(n(11),r);e.exports=o},function(e,t,n){"use strict";var r=n(4),o=n(73),i=n(31),a=function(e){this._currentElement=null,this._hostNode=null,this._hostParent=null,this._hostContainerInfo=null,this._domID=0};r(a.prototype,{mountComponent:function(e,t,n,r){var a=n._idCounter++;this._domID=a,this._hostParent=t,this._hostContainerInfo=n;var s=" react-empty: "+this._domID+" ";if(e.useCreateElement){var u=n._ownerDocument,l=u.createComment(s);return i.precacheNode(this,l),o(l)}return e.renderToStaticMarkup?"":"<!--"+s+"-->"},receiveCom
 ponent:function(){},getHostNode:function(){return i.getNodeFromInstance(this)},unmountComponent:function(){i.uncacheNode(this)}}),e.exports=a},function(e,t,n){"use strict";function r(e,t){"_hostNode"in e?void 0:u("33"),"_hostNode"in t?void 0:u("33");for(var n=0,r=e;r;r=r._hostParent)n++;for(var o=0,i=t;i;i=i._hostParent)o++;for(;n-o>0;)e=e._hostParent,n--;for(;o-n>0;)t=t._hostParent,o--;for(var a=n;a--;){if(e===t)return e;e=e._hostParent,t=t._hostParent}return null}function o(e,t){"_hostNode"in e?void 0:u("35"),"_hostNode"in t?void 0:u("35");for(;t;){if(t===e)return!0;t=t._hostParent}return!1}function i(e){return"_hostNode"in e?void 0:u("36"),e._hostParent}function a(e,t,n){for(var r=[];e;)r.push(e),e=e._hostParent;var o;for(o=r.length;o-- >0;)t(r[o],"captured",n);for(o=0;o<r.length;o++)t(r[o],"bubbled",n)}function s(e,t,n,o,i){for(var a=e&amp
 ;&t?r(e,t):null,s=[];e&&e!==a;)s.push(e),e=e._hostParent;for(var u=[];t&&t!==a;)u.push(t),t=t._hostParent;var l;for(l=0;l<s.length;l++)n(s[l],"bubbled",o);for(l=u.length;l-- >0;)n(u[l],"captured",i)}var u=n(32);n(8);e.exports={isAncestor:o,getLowestCommonAncestor:r,getParentInstance:i,traverseTwoPhase:a,traverseEnterLeave:s}},function(e,t,n){"use strict";var r=n(32),o=n(4),i=n(72),a=n(73),s=n(31),u=n(78),l=(n(8),
+n(128),function(e){this._currentElement=e,this._stringText=""+e,this._hostNode=null,this._hostParent=null,this._domID=0,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});o(l.prototype,{mountComponent:function(e,t,n,r){var o=n._idCounter++,i=" react-text: "+o+" ",l=" /react-text ";if(this._domID=o,this._hostParent=t,e.useCreateElement){var c=n._ownerDocument,p=c.createComment(i),d=c.createComment(l),f=a(c.createDocumentFragment());return a.queueChild(f,a(p)),this._stringText&&a.queueChild(f,a(c.createTextNode(this._stringText))),a.queueChild(f,a(d)),s.precacheNode(this,p),this._closingComment=d,f}var h=u(this._stringText);return e.renderToStaticMarkup?h:"<!--"+i+"-->"+h+"<!--"+l+"-->"},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;if(n!==this._stringText){this._stringText=n;var r=this.getHostNode();i.replace
 DelimitedText(r[0],r[1],n)}}},getHostNode:function(){var e=this._commentNodes;if(e)return e;if(!this._closingComment)for(var t=s.getNodeFromInstance(this),n=t.nextSibling;;){if(null==n?r("67",this._domID):void 0,8===n.nodeType&&" /react-text "===n.nodeValue){this._closingComment=n;break}n=n.nextSibling}return e=[this._hostNode,this._closingComment],this._commentNodes=e,e},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,s.uncacheNode(this)}}),e.exports=l},function(e,t,n){"use strict";function r(){this.reinitializeTransaction()}var o=n(4),i=n(53),a=n(60),s=n(12),u={initialize:s,close:function(){d.isBatchingUpdates=!1}},l={initialize:s,close:i.flushBatchedUpdates.bind(i)},c=[l,u];o(r.prototype,a,{getTransactionWrappers:function(){return c}});var p=new r,d={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,o,i){var a=d.isBatchingUpdates;return d.isBatchingUpdates=!0,a?e(t,n,r,o,i):p.perform(e,null,t,n,r,o,i)}};e.expo
 rts=d},function(e,t,n){"use strict";function r(e){for(;e._hostParent;)e=e._hostParent;var t=p.getNodeFromInstance(e),n=t.parentNode;return p.getClosestInstanceFromNode(n)}function o(e,t){this.topLevelType=e,this.nativeEvent=t,this.ancestors=[]}function i(e){var t=f(e.nativeEvent),n=p.getClosestInstanceFromNode(t),o=n;do e.ancestors.push(o),o=o&&r(o);while(o);for(var i=0;i<e.ancestors.length;i++)n=e.ancestors[i],v._handleTopLevel(e.topLevelType,n,e.nativeEvent,f(e.nativeEvent))}function a(e){var t=h(window);e(t)}var s=n(4),u=n(134),l=n(45),c=n(47),p=n(31),d=n(53),f=n(61),h=n(135);s(o.prototype,{destructor:function(){this.topLevelType=null,this.nativeEvent=null,this.ancestors.length=0}}),c.addPoolingTo(o,c.twoArgumentPooler);var v={_enabled:!0,_handleTopLevel:null,WINDOW_HANDLE:l.canUseDOM?window:null,setHandleTopLevel:function(e){v._handleTopLevel=e},setEnabled:function(e){v._enabled=!!e},isEnabled:function(){return v._enabled},trapBubbledEvent:function(e,t,n){re
 turn n?u.listen(n,t,v.dispatchEvent.bind(null,e)):null},trapCapturedEvent:function(e,t,n){return n?u.capture(n,t,v.dispatchEvent.bind(null,e)):null},monitorScrollValue:function(e){var t=a.bind(null,e);u.listen(window,"scroll",t)},dispatchEvent:function(e,t){if(v._enabled){var n=o.getPooled(e,t);try{d.batchedUpdates(i,n)}finally{o.release(n)}}}};e.exports=v},function(e,t,n){"use strict";var r=n(12),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};e.exports=o},function(e,t){"use strict";function n(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffs
 et||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}e.exports=n},function(e,t,n){"use strict";var r=n(33),o=n(39),i=n(41),a=n(107),s=n(116),u=n(97),l=n(117),c=n(53),p={Component:a.injection,DOMProperty:r.injection,EmptyComponent:s.injection,EventPluginHub:o.injection,EventPluginUtils:i.injection,EventEmitter:u.injection,HostComponent:l.injection,Updates:c.injection};e.exports=p},function(e,t,n){"use strict";function r(e){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=i.getPooled(null),this.useCreateElement=e}var o=n(4),i=n(54),a=n(47),s=n(97),u=n(138),l=(n(59),n(60)),c=n(127),p={initialize:u.getSelectionInformation,close:u.restoreSelection},d={initialize:function(){var e=s.isEnabled();return s.setEnabled(!1),e},close:function(e){s.setEnabled(e)}},f={initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}},h=[p,d,f],v={getTransactionWrappers:function(){return h},get
 ReactMountReady:function(){return this.reactMountReady},getUpdateQueue:function(){return c},checkpoint:function(){return this.reactMountReady.checkpoint()},rollback:function(e){this.reactMountReady.rollback(e)},destructor:function(){i.release(this.reactMountReady),this.reactMountReady=null}};o(r.prototype,l,v),a.addPoolingTo(r),e.exports=r},function(e,t,n){"use strict";function r(e){return i(document.documentElement,e)}var o=n(139),i=n(141),a=n(86),s=n(144),u={hasSelectionCapabilities:function(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&"text"===e.type||"textarea"===t||"true"===e.contentEditable)},getSelectionInformation:function(){var e=s();return{focusedElem:e,selectionRange:u.hasSelectionCapabilities(e)?u.getSelection(e):null}},restoreSelection:function(e){var t=s(),n=e.focusedElem,o=e.selectionRange;t!==n&&r(n)&&(u.hasSelectionCapabilities(n)&&u.
 setSelection(n,o),a(n))},getSelection:function(e){var t;if("selectionStart"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&e.nodeName&&"input"===e.nodeName.toLowerCase()){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart("character",-e.value.length),end:-n.moveEnd("character",-e.value.length)})}else t=o.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,r=t.end;if(void 0===r&&(r=n),"selectionStart"in e)e.selectionStart=n,e.selectionEnd=Math.min(r,e.value.length);else if(document.selection&&e.nodeName&&"input"===e.nodeName.toLowerCase()){var i=e.createTextRange();i.collapse(!0),i.moveStart("character",n),i.moveEnd("character",r-n),i.select()}else o.setOffsets(e,t)}};e.exports=u},function(e,t,n){"use strict";function r(e,t,n,r){return e===n&&t===
 r}function o(e){var t=document.selection,n=t.createRange(),r=n.text.length,o=n.duplicate();o.moveToElementText(e),o.setEndPoint("EndToStart",n);var i=o.text.length,a=i+r;return{start:i,end:a}}function i(e){var t=window.getSelection&&window.getSelection();if(!t||0===t.rangeCount)return null;var n=t.anchorNode,o=t.anchorOffset,i=t.focusNode,a=t.focusOffset,s=t.getRangeAt(0);try{s.startContainer.nodeType,s.endContainer.nodeType}catch(e){return null}var u=r(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset),l=u?0:s.toString().length,c=s.cloneRange();c.selectNodeContents(e),c.setEnd(s.startContainer,s.startOffset);var p=r(c.startContainer,c.startOffset,c.endContainer,c.endOffset),d=p?0:c.toString().length,f=d+l,h=document.createRange();h.setStart(n,o),h.setEnd(i,a);var v=h.collapsed;return{start:v?f:d,end:v?d:f}}function a(e,t){var n,r,o=document.selection.createRange().duplicate();void 0===t.end?(n=t.start,r=n):t.start>t.end?(n=t.end,r=t.start):(n=t.start,r=t.en
 d),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function s(e,t){if(window.getSelection){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),i=void 0===t.end?o:Math.min(t.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var s=l(e,o),u=l(e,i);if(s&&u){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(u.node,u.offset)):(p.setEnd(u.node,u.offset),n.addRange(p))}}}var u=n(45),l=n(140),c=n(48),p=u.canUseDOM&&"selection"in document&&!("getSelection"in window),d={getOffsets:p?o:i,setOffsets:p?a:s};e.exports=d},function(e,t){"use strict";function n(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function r(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function o(e,t){for(var o=n(e),i=0,a=0;o;){if(3===o.nodeType){if(a=i+o.textContent.l
 ength,i<=t&&a>=t)return{node:o,offset:t-i};i=a}o=n(r(o))}}e.exports=o},function(e,t,n){"use strict";function r(e,t){return!(!e||!t)&&(e===t||!o(e)&&(o(t)?r(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}var o=n(142);e.exports=r},function(e,t,n){"use strict";function r(e){return o(e)&&3==e.nodeType}var o=n(143);e.exports=r},function(e,t){"use strict";function n(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}e.exports=n},function(e,t){"use strict";function n(){if("undefined"==typeof document)return null;try{return document.activeElement||document.body}catch(e){return document.body}}e.exports=n},function(e,t){"use strict";var n={xlink:"http://www.w3.org/1
 999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},r={accentHeight:"accent-height",accumulate:0,additive:0,alignmentBaseline:"alignment-baseline",allowReorder:"allowReorder",alphabetic:0,amplitude:0,arabicForm:"arabic-form",ascent:0,attributeName:"attributeName",attributeType:"attributeType",autoReverse:"autoReverse",azimuth:0,baseFrequency:"baseFrequency",baseProfile:"baseProfile",baselineShift:"baseline-shift",bbox:0,begin:0,bias:0,by:0,calcMode:"calcMode",capHeight:"cap-height",clip:0,clipPath:"clip-path",clipRule:"clip-rule",clipPathUnits:"clipPathUnits",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",contentScriptType:"contentScriptType",contentStyleType
 :"contentStyleType",cursor:0,cx:0,cy:0,d:0,decelerate:0,descent:0,diffuseConstant:"diffuseConstant",direction:0,display:0,divisor:0,dominantBaseline:"dominant-baseline",dur:0,dx:0,dy:0,edgeMode:"edgeMode",elevation:0,enableBackground:"enable-background",end:0,exponent:0,externalResourcesRequired:"externalResourcesRequired",fill:0,fillOpacity:"fill-opacity",fillRule:"fill-rule",filter:0,filterRes:"filterRes",filterUnits:"filterUnits",floodColor:"flood-color",floodOpacity:"flood-opacity",focusable:0,fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-ho
 rizontal",glyphOrientationVertical:"glyph-orientation-vertical",glyphRef:"glyphRef",gradientTransform:"gradientTransform",gradientUnits:"gradientUnits",hanging:0,horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",ideographic:0,imageRendering:"image-rendering",in:0,in2:0,intercept:0,k:0,k1:0,k2:0,k3:0,k4:0,kernelMatrix:"kernelMatrix",kernelUnitLength:"kernelUnitLength",kerning:0,keyPoints:"keyPoints",keySplines:"keySplines",keyTimes:"keyTimes",lengthAdjust:"lengthAdjust",letterSpacing:"letter-spacing",lightingColor:"lighting-color",limitingConeAngle:"limitingConeAngle",local:0,markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",markerHeight:"markerHeight",markerUnits:"markerUnits",markerWidth:"markerWidth",mask:0,maskContentUnits:"mas
 kContentUnits",maskUnits:"maskUnits",mathematical:0,mode:0,numOctaves:"numOctaves",offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pathLength:"pathLength",patternContentUnits:"patternContentUnits",patternTransform:"patternTransform",patternUnits:"patternUnits",pointerEvents:"pointer-events",points:0,pointsAtX:"pointsAtX",pointsAtY:"pointsAtY",pointsAtZ:"pointsAtZ",preserveAlpha:"preserveAlpha",preserveAspectRatio:"preserveAspectRatio",primitiveUnits:"primitiveUnits",r:0,radius:0,refX:"refX",refY:"refY",renderingIntent:"rendering-intent",repeatCount:"repeatCount",repeatDur:"repeatDur",requiredExtensions:"req
 uiredExtensions",requiredFeatures:"requiredFeatures",restart:0,result:0,rotate:0,rx:0,ry:0,scale:0,seed:0,shapeRendering:"shape-rendering",slope:0,spacing:0,specularConstant:"specularConstant",specularExponent:"specularExponent",speed:0,spreadMethod:"spreadMethod",startOffset:"startOffset",stdDeviation:"stdDeviation",stemh:0,stemv:0,stitchTiles:"stitchTiles",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",string:0,stroke:0,strokeDasharray:"stroke-dasharray",strokeDashoffset:"stroke-dashoffset",strokeLinecap:"stroke-linecap",strokeLinejoin:"stroke-linejoin",strokeMiterlimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",surfaceScale:"surfaceScale",systemLa
 nguage:"systemLanguage",tableValues:"tableValues",targetX:"targetX",targetY:"targetY",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",textLength:"textLength",to:0,transform:0,u1:0,u2:0,underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicode:0,unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",values:0,vectorEffect:"vector-effect",version:0,vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",viewBox:"viewBox",viewTarget:"viewTarget",visibility:0,widths:0,wordSpacing:"word-spacing",writingMode:"writing-mode&quo
 t;,x:0,xHeight:"x-height",x1:0,x2:0,xChannelSelector:"xChannelSelector",xlinkActuate:"xlink:actuate",xlinkArcrole:"xlink:arcrole",xlinkHref:"xlink:href",xlinkRole:"xlink:role",xlinkShow:"xlink:show",xlinkTitle:"xlink:title",xlinkType:"xlink:type",xmlBase:"xml:base",xmlns:0,xmlnsXlink:"xmlns:xlink",xmlLang:"xml:lang",xmlSpace:"xml:space",y:0,y1:0,y2:0,yChannelSelector:"yChannelSelector",z:0,zoomAndPan:"zoomAndPan"},o={Properties:{},DOMAttributeNamespaces:{xlinkActuate:n.xlink,xlinkArcrole:n.xlink,xlinkHref:n.xlink,xlinkRole:n.xlink,xlinkShow:n.xlink,xlinkTitle:n.xlink,xlinkType:n.xlink,xmlBase:n.xml,xmlLang:n.xml,xmlSpace:n.xml},DOMAttributeNames:{}};Object.keys(r).forEach(function(e){o.Properties[e]=0,r[e]&&(o.DOMAttributeNames[e]=r[e])}),e.exports=o},function(e,t,n){"use strict";function r(e){if("selectionStart&
 quot;in e&&u.hasSelectionCapabilities(e))return{start:e.selectionStart,end:e.selectionEnd};if(window.getSelection){var t=window.getSelection();return{anchorNode:t.anchorNode,anchorOffset:t.anchorOffset,focusNode:t.focusNode,focusOffset:t.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}function o(e,t){if(y||null==v||v!==c())return null;var n=r(v);if(!g||!d(g,n)){g=n;var o=l.getPooled(h.select,m,e,t);return o.type="select",o.target=v,i.accumulateTwoPhaseDispatches(o),o}return null}var i=n(38),a=n(45),s=n(31),u=n(138),l=n(50),c=n(144),p=n(63),d=n(114),f=a.canUseDOM&&"documentMode"in document&&document.documentMode<=11,h={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:["topBlur","topContextMenu","topFocus","topKeyDown",&
 quot;topKeyUp","topMouseDown","topMouseUp","topSelectionChange"]}},v=null,m=null,g=null,y=!1,_=!1,b={eventTypes:h,extractEvents:function(e,t,n,r){if(!_)return null;var i=t?s.getNodeFromInstance(t):window;switch(e){case"topFocus":(p(i)||"true"===i.contentEditable)&&(v=i,m=t,g=null);break;case"topBlur":v=null,m=null,g=null;break;case"topMouseDown":y=!0;break;case"topContextMenu":case"topMouseUp":return y=!1,o(n,r);case"topSelectionChange":if(f)break;case"topKeyDown":case"topKeyUp":return o(n,r)}return null},didPutListener:function(e,t,n){"onSelect"===t&&(_=!0)}};e.exports=b},function(e,t,n){"use strict";function r(e){return"."+e._rootNodeID}function o(e){return"button"===e||"input"===e||"select"===e||"textarea"===e}var i=n(32),a=n(134),s=n(38),u=n(31),l=n(148),c=n(149),p=n(50),
 d=n(150),f=n(151),h=n(66),v=n(154),m=n(155),g=n(156),y=n(67),_=n(157),b=n(12),C=n(152),x=(n(8),{}),E={};["abort","animationEnd","animationIteration","animationStart","blur","canPlay","canPlayThrough","click","contextMenu","copy","cut","doubleClick","drag","dragEnd","dragEnter","dragExit","dragLeave","dragOver","dragStart","drop","durationChange","emptied","encrypted","ended","error","focus","input","invalid","keyDown","keyPress","keyUp","load","loadedData","loadedMetadata","loadStart","mouseDown","mouseMove","mouseOut","mouseOver","mouseUp","paste","pause","play&quo
 t;,"playing","progress","rateChange","reset","scroll","seeked","seeking","stalled","submit","suspend","timeUpdate","touchCancel","touchEnd","touchMove","touchStart","transitionEnd","volumeChange","waiting","wheel"].forEach(function(e){var t=e[0].toUpperCase()+e.slice(1),n="on"+t,r="top"+t,o={phasedRegistrationNames:{bubbled:n,captured:n+"Capture"},dependencies:[r]};x[e]=o,E[r]=o});var w={},T={eventTypes:x,extractEvents:function(e,t,n,r){var o=E[e];if(!o)return null;var a;switch(e){case"topAbort":case"topCanPlay":case"topCanPlayThrough":case"topDurationChange":case"topEmptied":case"topEncrypted":case"topEnded":case"topError":case"topInput":case"topInvalid":case"top
 Load":case"topLoadedData":case"topLoadedMetadata":case"topLoadStart":case"topPause":case"topPlay":case"topPlaying":case"topProgress":case"topRateChange":case"topReset":case"topSeeked":case"topSeeking":case"topStalled":case"topSubmit":case"topSuspend":case"topTimeUpdate":case"topVolumeChange":case"topWaiting":a=p;break;case"topKeyPress":if(0===C(n))return null;case"topKeyDown":case"topKeyUp":a=f;break;case"topBlur":case"topFocus":a=d;break;case"topClick":if(2===n.button)return null;case"topDoubleClick":case"topMouseDown":case"topMouseMove":case"topMouseUp":case"topMouseOut":case"topMouseOver":case"topContextMenu":a=h;break;case"topDrag":case"topDragEnd":case"t
 opDragEnter":case"topDragExit":case"topDragLeave":case"topDragOver":case"topDragStart":case"topDrop":a=v;break;case"topTouchCancel":case"topTouchEnd":case"topTouchMove":case"topTouchStart":a=m;break;case"topAnimationEnd":case"topAnimationIteration":case"topAnimationStart":a=l;break;case"topTransitionEnd":a=g;break;case"topScroll":a=y;break;case"topWheel":a=_;break;case"topCopy":case"topCut":case"topPaste":a=c}a?void 0:i("86",e);var u=a.getPooled(o,t,n,r);return s.accumulateTwoPhaseDispatches(u),u},didPutListener:function(e,t,n){if("onClick"===t&&!o(e._tag)){var i=r(e),s=u.getNodeFromInstance(e);w[i]||(w[i]=a.listen(s,"click",b))}},willDeleteListener:function(e,t){if("onClick"===t&&!o(e._tag)){var n=r(e);w[n].remove(),delete w[n]}}};e.exports=T},f
 unction(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(50),i={animationName:null,elapsedTime:null,pseudoElement:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(50),i={clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(67),i={relatedTarget:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(67),i=n(152),a=n(153),s=n(69),u={key:a,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:s,charCode:function(e){return"keypress"===e.type?i(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:functi
 on(e){return"keypress"===e.type?i(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}};o.augmentClass(r,u),e.exports=r},function(e,t){"use strict";function n(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}e.exports=n},function(e,t,n){"use strict";function r(e){if(e.key){var t=i[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=o(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?a[e.keyCode]||"Unidentified":""}var o=n(152),i={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:
 "Unidentified"},a={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(66),i={dataTransfer:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict"
 ;function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(67),i=n(69),a={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:i};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(50),i={propertyName:null,elapsedTime:null,pseudoElement:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(66),i={deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;r<n;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.le
 ngth?-1:n}function o(e){return e?e.nodeType===R?e.documentElement:e.firstChild:null}function i(e){return e.getAttribute&&e.getAttribute(M)||""}function a(e,t,n,r,o){var i;if(C.logTopLevelRenders){var a=e._currentElement.props.child,s=a.type;i="React mount: "+("string"==typeof s?s:s.displayName||s.name),console.time(i)}var u=w.mountComponent(e,n,null,_(e,t),o,0);i&&console.timeEnd(i),e._renderedComponent._topLevelWrapper=e,F._mountImageIntoNode(u,t,e,r,n)}function s(e,t,n,r){var o=k.ReactReconcileTransaction.getPooled(!n&&b.useCreateElement);o.perform(a,null,e,t,o,n,r),k.ReactReconcileTransaction.release(o)}function u(e,t,n){for(w.unmountComponent(e,n),t.nodeType===R&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)}function l(e){var t=o(e);if(t){var n=y.getInstanceFromNode(t);return!(!n||!n._hostParent)}}function c(e){return!(!e||e.nodeType!==A&&e.nodeType!==R&&e.nodeType!==D)}function p(e){va
 r t=o(e),n=t&&y.getInstanceFromNode(t);return n&&!n._hostParent?n:null}function d(e){var t=p(e);return t?t._hostContainerInfo._topLevelWrapper:null}var f=n(32),h=n(73),v=n(33),m=n(3),g=n(97),y=(n(10),n(31)),_=n(159),b=n(160),C=n(55),x=n(108),E=(n(59),n(161)),w=n(56),T=n(127),k=n(53),P=n(20),S=n(111),I=(n(8),n(75)),N=n(115),M=(n(11),v.ID_ATTRIBUTE_NAME),O=v.ROOT_ATTRIBUTE_NAME,A=1,R=9,D=11,L={},j=1,U=function(){this.rootID=j++};U.prototype.isReactComponent={},U.prototype.render=function(){return this.props.child},U.isReactTopLevelWrapper=!0;var F={TopLevelWrapper:U,_instancesByReactRootID:L,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r,o){return F.scrollMonitor(r,function(){T.enqueueElementInternal(e,t,n),o&&T.enqueueCallbackInternal(e,o)}),e},_renderNewRootComponent:function(e,t,n,r){c(t)?void 0:f("37"),g.ensureScrollValueMonitoring();var o=S(e,!1);k.batchedUpdates(s,o,t,n,r);var i=o._instance.rootID;return L[i]=o,o},renderS
 ubtreeIntoContainer:function(e,t,n,r){return null!=e&&x.has(e)?void 0:f("38"),F._renderSubtreeIntoContainer(e,t,n,r)},_renderSubtreeIntoContainer:function(e,t,n,r){T.validateCallback(r,"ReactDOM.render"),m.isValidElement(t)?void 0:f("39","string"==typeof t?" Instead of passing a string like 'div', pass React.createElement('div') or <div />.":"function"==typeof t?" Instead of passing a class like Foo, pass React.createElement(Foo) or <Foo />.":null!=t&&void 0!==t.props?" This may be caused by unintentionally loading two independent copies of React.":"");var a,s=m.createElement(U,{child:t});if(e){var u=x.get(e);a=u._processChildContext(u._context)}else a=P;var c=d(n);if(c){var p=c._currentElement,h=p.props.child;if(N(h,t)){var v=c._renderedComponent.getPublicInstance(),g=r&&function(){r.call(v)};return F._updateRootComponent(c,s,a,n,g),v}F.unmountComponentAtNod
 e(n)}var y=o(n),_=y&&!!i(y),b=l(n),C=_&&!c&&!b,E=F._renderNewRootComponent(s,n,C,a)._renderedComponent.getPublicInstance();return r&&r.call(E),E},render:function(e,t,n){return F._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){c(e)?void 0:f("40");var t=d(e);if(!t){l(e),1===e.nodeType&&e.hasAttribute(O);return!1}return delete L[t._instance.rootID],k.batchedUpdates(u,t,e,!1),!0},_mountImageIntoNode:function(e,t,n,i,a){if(c(t)?void 0:f("41"),i){var s=o(t);if(E.canReuseMarkup(e,s))return void y.precacheNode(n,s);var u=s.getAttribute(E.CHECKSUM_ATTR_NAME);s.removeAttribute(E.CHECKSUM_ATTR_NAME);var l=s.outerHTML;s.setAttribute(E.CHECKSUM_ATTR_NAME,u);var p=e,d=r(p,l),v=" (client) "+p.substring(d-20,d+20)+"\n (server) "+l.substring(d-20,d+20);t.nodeType===R?f("42",v):void 0}if(t.nodeType===R?f("43"):void 0,a.useCreateElement){for(;t.lastChild;)t.removeChild(t.last
 Child);h.insertTreeBefore(t,e,null)}else I(t,e),y.precacheNode(n,t.firstChild)}};e.exports=F},function(e,t,n){"use strict";function r(e,t){var n={_topLevelWrapper:e,_idCounter:1,_ownerDocument:t?t.nodeType===o?t:t.ownerDocument:null,_node:t,_tag:t?t.nodeName.toLowerCase():null,_namespaceURI:t?t.namespaceURI:null};return n}var o=(n(128),9);e.exports=r},function(e,t){"use strict";var n={useCreateElement:!0,useFiber:!1};e.exports=n},function(e,t,n){"use strict";var r=n(162),o=/\/?>/,i=/^<\!\-\-/,a={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=r(e);return i.test(e)?e:e.replace(o," "+a.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(a.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var o=r(e);return o===n}};e.exports=a},function(e,t){"use strict";function n(e){for(var t=1,n=0,o=0,i=e.length,a=i&-4;o<a;){for(var s=Math.min(o+4096,a);o
 <s;o+=4)n+=(t+=e.charCodeAt(o))+(t+=e.charCodeAt(o+1))+(t+=e.charCodeAt(o+2))+(t+=e.charCodeAt(o+3));t%=r,n%=r}for(;o<i;o++)n+=t+=e.charCodeAt(o);return t%=r,n%=r,t|n<<16}var r=65521;e.exports=n},27,function(e,t,n){"use strict";function r(e){if(null==e)return null;if(1===e.nodeType)return e;var t=a.get(e);return t?(t=s(t),t?i.getNodeFromInstance(t):null):void("function"==typeof e.render?o("44"):o("45",Object.keys(e)))}var o=n(32),i=(n(10),n(31)),a=n(108),s=n(165);n(8),n(11);e.exports=r},function(e,t,n){"use strict";function r(e){for(var t;(t=e._renderedNodeType)===o.COMPOSITE;)e=e._renderedComponent;return t===o.HOST?e._renderedComponent:t===o.EMPTY?null:void 0}var o=n(113);e.exports=r},function(e,t,n){"use strict";var r=n(158);e.exports=r.renderSubtreeIntoContainer},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{v
 alue:!0}),t.Screenshots=void 0;var o=n(2),i=r(o),a=n(168),s=r(a),u=n(169),l=r(u),c=n(284),p=r(c),d=t.Screenshots=function(e){var t=e.screenshots,n=e.translate,r=(0,l.default)(t,function(e){var t=e.caption,n=e.src;return{original:n,originalAlt:"",thumbnail:n+"&width=100",thumbnailAlt:t||"",description:t||!1}});return r?i.default.createElement("div",{id:"screenshots",className:"plugin-screenshots"},i.default.createElement("h2",null,n("Screenshots")),i.default.createElement(p.default,{items:r})):null};d.propTypes={screenshots:o.PropTypes.arrayOf(o.PropTypes.object),translate:o.PropTypes.func},d.defaultProps={screenshots:[],translate:s.default},t.default=d},function(e,t){function n(e){return e}e.exports=n},function(e,t,n){function r(e,t){var n=s(e)?o:a;return n(e,i(t,3))}var o=n(170),i=n(171),a=n(278),s=n(237);e.exports=r},function(e,t){function n(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<
 r;)o[n]=t(e[n],n,e);return o}e.exports=n},function(e,t,n){function r(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?s(e)?i(e[0],e[1]):o(e):u(e)}var o=n(172),i=n(260),a=n(168),s=n(237),u=n(275);e.exports=r},function(e,t,n){function r(e){var t=i(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||o(n,e,t)}}var o=n(173),i=n(257),a=n(259);e.exports=r},function(e,t,n){function r(e,t,n,r){var u=n.length,l=u,c=!r;if(null==e)return!l;for(e=Object(e);u--;){var p=n[u];if(c&&p[2]?p[1]!==e[p[0]]:!(p[0]in e))return!1}for(;++u<l;){p=n[u];var d=p[0],f=e[d],h=p[1];if(c&&p[2]){if(void 0===f&&!(d in e))return!1}else{var v=new o;if(r)var m=r(f,h,d,e,t,v);if(!(void 0===m?i(h,f,a|s,r,v):m))return!1}}return!0}var o=n(174),i=n(218),a=1,s=2;e.exports=r},function(e,t,n){function r(e){var t=this.__data__=new o(e);this.size=t.size}var o=n(175),i=n(183),a=n(184),s=n(185),u=n(186),l=n(187);r.prototype.clear=i,r.prototyp
 e.delete=a,r.prototype.get=s,r.prototype.has=u,r.prototype.set=l,e.exports=r},function(e,t,n){function r(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}var o=n(176),i=n(177),a=n(180),s=n(181),u=n(182);r.prototype.clear=o,r.prototype.delete=i,r.prototype.get=a,r.prototype.has=s,r.prototype.set=u,e.exports=r},function(e,t){function n(){this.__data__=[],this.size=0}e.exports=n},function(e,t,n){function r(e){var t=this.__data__,n=o(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():a.call(t,n,1),--this.size,!0}var o=n(178),i=Array.prototype,a=i.splice;e.exports=r},function(e,t,n){function r(e,t){for(var n=e.length;n--;)if(o(e[n][0],t))return n;return-1}var o=n(179);e.exports=r},function(e,t){function n(e,t){return e===t||e!==e&&t!==t}e.exports=n},function(e,t,n){function r(e){var t=this.__data__,n=o(t,e);return n<0?void 0:t[n][1]}var o=n(178);e.exports=r},function(e,t,n){function r(e){return o(this.__data__,e)>-1}var 
 o=n(178);e.exports=r},function(e,t,n){function r(e,t){var n=this.__data__,r=o(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var o=n(178);e.exports=r},function(e,t,n){function r(){this.__data__=new o,this.size=0}var o=n(175);e.exports=r},function(e,t){function n(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}e.exports=n},function(e,t){function n(e){return this.__data__.get(e)}e.exports=n},function(e,t){function n(e){return this.__data__.has(e)}e.exports=n},function(e,t,n){function r(e,t){var n=this.__data__;if(n instanceof o){var r=n.__data__;if(!i||r.length<s-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(r)}return n.set(e,t),this.size=n.size,this}var o=n(175),i=n(188),a=n(203),s=200;e.exports=r},function(e,t,n){var r=n(189),o=n(194),i=r(o,"Map");e.exports=i},function(e,t,n){function r(e,t){var n=i(e,t);return o(n)?n:void 0}var o=n(190),i=n(202);e.exports=r},function(e,t,n){function r(e){if(!a(e)||i(e))return!1;var t
 =o(e)?h:l;return t.test(s(e))}var o=n(191),i=n(199),a=n(198),s=n(201),u=/[\\^$.*+?()[\]{}|]/g,l=/^\[object .+?Constructor\]$/,c=Function.prototype,p=Object.prototype,d=c.toString,f=p.hasOwnProperty,h=RegExp("^"+d.call(f).replace(u,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=r},function(e,t,n){function r(e){if(!i(e))return!1;var t=o(e);return t==s||t==u||t==a||t==l}var o=n(192),i=n(198),a="[object AsyncFunction]",s="[object Function]",u="[object GeneratorFunction]",l="[object Proxy]";e.exports=r},function(e,t,n){function r(e){return null==e?void 0===e?u:s:(e=Object(e),
+l&&l in e?i(e):a(e))}var o=n(193),i=n(196),a=n(197),s="[object Null]",u="[object Undefined]",l=o?o.toStringTag:void 0;e.exports=r},function(e,t,n){var r=n(194),o=r.Symbol;e.exports=o},function(e,t,n){var r=n(195),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},function(e,t){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(t,function(){return this}())},function(e,t,n){function r(e){var t=a.call(e,u),n=e[u];try{e[u]=void 0;var r=!0}catch(e){}var o=s.call(e);return r&&(t?e[u]=n:delete e[u]),o}var o=n(193),i=Object.prototype,a=i.hasOwnProperty,s=i.toString,u=o?o.toStringTag:void 0;e.exports=r},function(e,t){function n(e){return o.call(e)}var r=Object.prototype,o=r.toString;e.exports=n},function(e,t){function n(e){var t=typeof e;return null!=e&&("object"==t||"funct
 ion"==t)}e.exports=n},function(e,t,n){function r(e){return!!i&&i in e}var o=n(200),i=function(){var e=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();e.exports=r},function(e,t,n){var r=n(194),o=r["__core-js_shared__"];e.exports=o},function(e,t){function n(e){if(null!=e){try{return o.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var r=Function.prototype,o=r.toString;e.exports=n},function(e,t){function n(e,t){return null==e?void 0:e[t]}e.exports=n},function(e,t,n){function r(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}var o=n(204),i=n(212),a=n(215),s=n(216),u=n(217);r.prototype.clear=o,r.prototype.delete=i,r.prototype.get=a,r.prototype.has=s,r.prototype.set=u,e.exports=r},function(e,t,n){function r(){this.size=0,this.__data__={hash:new o,map:new(a||i),string:new o}}var o=n(205),i=n(175),a=n(188);e.exports=r},f
 unction(e,t,n){function r(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}var o=n(206),i=n(208),a=n(209),s=n(210),u=n(211);r.prototype.clear=o,r.prototype.delete=i,r.prototype.get=a,r.prototype.has=s,r.prototype.set=u,e.exports=r},function(e,t,n){function r(){this.__data__=o?o(null):{},this.size=0}var o=n(207);e.exports=r},function(e,t,n){var r=n(189),o=r(Object,"create");e.exports=o},function(e,t){function n(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}e.exports=n},function(e,t,n){function r(e){var t=this.__data__;if(o){var n=t[e];return n===i?void 0:n}return s.call(t,e)?t[e]:void 0}var o=n(207),i="__lodash_hash_undefined__",a=Object.prototype,s=a.hasOwnProperty;e.exports=r},function(e,t,n){function r(e){var t=this.__data__;return o?void 0!==t[e]:a.call(t,e)}var o=n(207),i=Object.prototype,a=i.hasOwnProperty;e.exports=r},function(e,t,n){function r(e,t){var n=this.__data__;return this
 .size+=this.has(e)?0:1,n[e]=o&&void 0===t?i:t,this}var o=n(207),i="__lodash_hash_undefined__";e.exports=r},function(e,t,n){function r(e){var t=o(this,e).delete(e);return this.size-=t?1:0,t}var o=n(213);e.exports=r},function(e,t,n){function r(e,t){var n=e.__data__;return o(t)?n["string"==typeof t?"string":"hash"]:n.map}var o=n(214);e.exports=r},function(e,t){function n(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}e.exports=n},function(e,t,n){function r(e){return o(this,e).get(e)}var o=n(213);e.exports=r},function(e,t,n){function r(e){return o(this,e).has(e)}var o=n(213);e.exports=r},function(e,t,n){function r(e,t){var n=o(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var o=n(213);e.exports=r},function(e,t,n){function r(e,t,n,s,u){return e===t||(null==e||null==t||!i(e)&&!a(t)?e!==e&&t!==t:o(e,t,n,s,
 r,u))}var o=n(219),i=n(198),a=n(236);e.exports=r},function(e,t,n){function r(e,t,n,r,m,y){var _=l(e),b=l(t),C=h,x=h;_||(C=u(e),C=C==f?v:C),b||(x=u(t),x=x==f?v:x);var E=C==v,w=x==v,T=C==x;if(T&&c(e)){if(!c(t))return!1;_=!0,E=!1}if(T&&!E)return y||(y=new o),_||p(e)?i(e,t,n,r,m,y):a(e,t,C,n,r,m,y);if(!(n&d)){var k=E&&g.call(e,"__wrapped__"),P=w&&g.call(t,"__wrapped__");if(k||P){var S=k?e.value():e,I=P?t.value():t;return y||(y=new o),m(S,I,n,r,y)}}return!!T&&(y||(y=new o),s(e,t,n,r,m,y))}var o=n(174),i=n(220),a=n(226),s=n(230),u=n(252),l=n(237),c=n(238),p=n(242),d=1,f="[object Arguments]",h="[object Array]",v="[object Object]",m=Object.prototype,g=m.hasOwnProperty;e.exports=r},function(e,t,n){function r(e,t,n,r,l,c){var p=n&s,d=e.length,f=t.length;if(d!=f&&!(p&&f>d))return!1;var h=c.get(e);if(h&&c.get(t))return h==t;var v=-1,m=!0,g=n&u?new o:void 0;for(c.set(e
 ,t),c.set(t,e);++v<d;){var y=e[v],_=t[v];if(r)var b=p?r(_,y,v,t,e,c):r(y,_,v,e,t,c);if(void 0!==b){if(b)continue;m=!1;break}if(g){if(!i(t,function(e,t){if(!a(g,t)&&(y===e||l(y,e,n,r,c)))return g.push(t)})){m=!1;break}}else if(y!==_&&!l(y,_,n,r,c)){m=!1;break}}return c.delete(e),c.delete(t),m}var o=n(221),i=n(224),a=n(225),s=1,u=2;e.exports=r},function(e,t,n){function r(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new o;++t<n;)this.add(e[t])}var o=n(203),i=n(222),a=n(223);r.prototype.add=r.prototype.push=i,r.prototype.has=a,e.exports=r},function(e,t){function n(e){return this.__data__.set(e,r),this}var r="__lodash_hash_undefined__";e.exports=n},function(e,t){function n(e){return this.__data__.has(e)}e.exports=n},function(e,t){function n(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}e.exports=n},function(e,t){function n(e,t){return e.has(t)}e.exports=n},function(e,t,n){function r(e,t,n,r,o,E,T){switch(n){case x:
 if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case C:return!(e.byteLength!=t.byteLength||!E(new i(e),new i(t)));case d:case f:case m:return a(+e,+t);case h:return e.name==t.name&&e.message==t.message;case g:case _:return e==t+"";case v:var k=u;case y:var P=r&c;if(k||(k=l),e.size!=t.size&&!P)return!1;var S=T.get(e);if(S)return S==t;r|=p,T.set(e,t);var I=s(k(e),k(t),r,o,E,T);return T.delete(e),I;case b:if(w)return w.call(e)==w.call(t)}return!1}var o=n(193),i=n(227),a=n(179),s=n(220),u=n(228),l=n(229),c=1,p=2,d="[object Boolean]",f="[object Date]",h="[object Error]",v="[object Map]",m="[object Number]",g="[object RegExp]",y="[object Set]",_="[object String]",b="[object Symbol]",C="[object ArrayBuffer]",x="[object DataView]",E=o?o.prototype:void 0,w=E?E.valueOf:void 0;e.exports=r},function(e,t,n){var r=n(19
 4),o=r.Uint8Array;e.exports=o},function(e,t){function n(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}e.exports=n},function(e,t){function n(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}e.exports=n},function(e,t,n){function r(e,t,n,r,a,u){var l=n&i,c=o(e),p=c.length,d=o(t),f=d.length;if(p!=f&&!l)return!1;for(var h=p;h--;){var v=c[h];if(!(l?v in t:s.call(t,v)))return!1}var m=u.get(e);if(m&&u.get(t))return m==t;var g=!0;u.set(e,t),u.set(t,e);for(var y=l;++h<p;){v=c[h];var _=e[v],b=t[v];if(r)var C=l?r(b,_,v,t,e,u):r(_,b,v,e,t,u);if(!(void 0===C?_===b||a(_,b,n,r,u):C)){g=!1;break}y||(y="constructor"==v)}if(g&&!y){var x=e.constructor,E=t.constructor;x!=E&&"constructor"in e&&"constructor"in t&&!("function"==typeof x&&x instanceof x&&"function"==typeof E&&E instanceof E)&&(g=!1)}return u.delete(e),u.de
 lete(t),g}var o=n(231),i=1,a=Object.prototype,s=a.hasOwnProperty;e.exports=r},function(e,t,n){function r(e){return a(e)?o(e):i(e)}var o=n(232),i=n(247),a=n(251);e.exports=r},function(e,t,n){function r(e,t){var n=a(e),r=!n&&i(e),c=!n&&!r&&s(e),d=!n&&!r&&!c&&l(e),f=n||r||c||d,h=f?o(e.length,String):[],v=h.length;for(var m in e)!t&&!p.call(e,m)||f&&("length"==m||c&&("offset"==m||"parent"==m)||d&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||u(m,v))||h.push(m);return h}var o=n(233),i=n(234),a=n(237),s=n(238),u=n(241),l=n(242),c=Object.prototype,p=c.hasOwnProperty;e.exports=r},function(e,t){function n(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}e.exports=n},function(e,t,n){var r=n(235),o=n(236),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(
 e,"callee")&&!s.call(e,"callee")};e.exports=u},function(e,t,n){function r(e){return i(e)&&o(e)==a}var o=n(192),i=n(236),a="[object Arguments]";e.exports=r},function(e,t){function n(e){return null!=e&&"object"==typeof e}e.exports=n},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){(function(e){var r=n(194),o=n(240),i="object"==typeof t&&t&&!t.nodeType&&t,a=i&&"object"==typeof e&&e&&!e.nodeType&&e,s=a&&a.exports===i,u=s?r.Buffer:void 0,l=u?u.isBuffer:void 0,c=l||o;e.exports=c}).call(t,n(239)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t){function n(){return!1}e.exports=n},function(e,t){function n(e,t){return t=null==t?r:t,!!t&&("number"==typeof e||o.test(e))&&e>-1&&e%1==0&&
 e<t}var r=9007199254740991,o=/^(?:0|[1-9]\d*)$/;e.exports=n},function(e,t,n){var r=n(243),o=n(245),i=n(246),a=i&&i.isTypedArray,s=a?o(a):r;e.exports=s},function(e,t,n){function r(e){return a(e)&&i(e.length)&&!!M[o(e)]}var o=n(192),i=n(244),a=n(236),s="[object Arguments]",u="[object Array]",l="[object Boolean]",c="[object Date]",p="[object Error]",d="[object Function]",f="[object Map]",h="[object Number]",v="[object Object]",m="[object RegExp]",g="[object Set]",y="[object String]",_="[object WeakMap]",b="[object ArrayBuffer]",C="[object DataView]",x="[object Float32Array]",E="[object Float64Array]",w="[object Int8Array]",T="[object Int16Array]",k="[object Int32Array]",P="[object Uint8Array]",S="[object Uint8ClampedArray]",I="[object Uin
 t16Array]",N="[object Uint32Array]",M={};M[x]=M[E]=M[w]=M[T]=M[k]=M[P]=M[S]=M[I]=M[N]=!0,M[s]=M[u]=M[b]=M[l]=M[C]=M[c]=M[p]=M[d]=M[f]=M[h]=M[v]=M[m]=M[g]=M[y]=M[_]=!1,e.exports=r},function(e,t){function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r}var r=9007199254740991;e.exports=n},function(e,t){function n(e){return function(t){return e(t)}}e.exports=n},function(e,t,n){(function(e){var r=n(195),o="object"==typeof t&&t&&!t.nodeType&&t,i=o&&"object"==typeof e&&e&&!e.nodeType&&e,a=i&&i.exports===o,s=a&&r.process,u=function(){try{return s&&s.binding&&s.binding("util")}catch(e){}}();e.exports=u}).call(t,n(239)(e))},function(e,t,n){function r(e){if(!o(e))return i(e);var t=[];for(var n in Object(e))s.call(e,n)&&"constructor"!=n&&t.push(n);return t}var o=n(248),i=n(249),a=Object.prototype,
 s=a.hasOwnProperty;e.exports=r},function(e,t){function n(e){var t=e&&e.constructor,n="function"==typeof t&&t.prototype||r;return e===n}var r=Object.prototype;e.exports=n},function(e,t,n){var r=n(250),o=r(Object.keys,Object);e.exports=o},function(e,t){function n(e,t){return function(n){return e(t(n))}}e.exports=n},function(e,t,n){function r(e){return null!=e&&i(e.length)&&!o(e)}var o=n(191),i=n(244);e.exports=r},function(e,t,n){var r=n(253),o=n(188),i=n(254),a=n(255),s=n(256),u=n(192),l=n(201),c="[object Map]",p="[object Object]",d="[object Promise]",f="[object Set]",h="[object WeakMap]",v="[object DataView]",m=l(r),g=l(o),y=l(i),_=l(a),b=l(s),C=u;(r&&C(new r(new ArrayBuffer(1)))!=v||o&&C(new o)!=c||i&&C(i.resolve())!=d||a&&C(new a)!=f||s&&C(new s)!=h)&&(C=function(e){var t=u(e),n=t==p?e.constructor:void 0,r=n?l(n):"";if(r)swi
 tch(r){case m:return v;case g:return c;case y:return d;case _:return f;case b:return h}return t}),e.exports=C},function(e,t,n){var r=n(189),o=n(194),i=r(o,"DataView");e.exports=i},function(e,t,n){var r=n(189),o=n(194),i=r(o,"Promise");e.exports=i},function(e,t,n){var r=n(189),o=n(194),i=r(o,"Set");e.exports=i},function(e,t,n){var r=n(189),o=n(194),i=r(o,"WeakMap");e.exports=i},function(e,t,n){function r(e){for(var t=i(e),n=t.length;n--;){var r=t[n],a=e[r];t[n]=[r,a,o(a)]}return t}var o=n(258),i=n(231);e.exports=r},function(e,t,n){function r(e){return e===e&&!o(e)}var o=n(198);e.exports=r},function(e,t){function n(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}e.exports=n},function(e,t,n){function r(e,t){return s(e)&&u(t)?l(c(e),t):function(n){var r=i(n,e);return void 0===r&&r===t?a(n,e):o(t,r,p|d)}}var o=n(218),i=n(261),a=n(272),s=n(264),u=n(258),l=n(259),c=n(271),p=1,d
 =2;e.exports=r},function(e,t,n){function r(e,t,n){var r=null==e?void 0:o(e,t);return void 0===r?n:r}var o=n(262);e.exports=r},function(e,t,n){function r(e,t){t=o(t,e);for(var n=0,r=t.length;null!=e&&n<r;)e=e[i(t[n++])];return n&&n==r?e:void 0}var o=n(263),i=n(271);e.exports=r},function(e,t,n){function r(e,t){return o(e)?e:i(e,t)?[e]:a(s(e))}var o=n(237),i=n(264),a=n(266),s=n(269);e.exports=r},function(e,t,n){function r(e,t){if(o(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(s.test(e)||!a.test(e)||null!=t&&e in Object(t))}var o=n(237),i=n(265),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;e.exports=r},function(e,t,n){function r(e){return"symbol"==typeof e||i(e)&&o(e)==a}var o=n(192),i=n(236),a="[object Symbol]";e.exports=r},function(e,t,n){var r=n(267),o=/^\./,i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|([&quo
 t;'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,s=r(function(e){var t=[];return o.test(e)&&t.push(""),e.replace(i,function(e,n,r,o){t.push(r?o.replace(a,"$1"):n||e)}),t});e.exports=s},function(e,t,n){function r(e){var t=o(e,function(e){return n.size===i&&n.clear(),e}),n=t.cache;return t}var o=n(268),i=500;e.exports=r},function(e,t,n){function r(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(i);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(r.Cache||o),n}var o=n(203),i="Expected a function";r.Cache=o,e.exports=r},function(e,t,n){function r(e){return null==e?"":o(e)}var o=n(270);e.exports=r},function(e,t,n){function r(e){if("string"==typeof e)return e;if(a(e))return i(e,r)+"";if(s(e))return c?c.call(e
 ):"";var t=e+"";return"0"==t&&1/e==-u?"-0":t}var o=n(193),i=n(170),a=n(237),s=n(265),u=1/0,l=o?o.prototype:void 0,c=l?l.toString:void 0;e.exports=r},function(e,t,n){function r(e){if("string"==typeof e||o(e))return e;var t=e+"";return"0"==t&&1/e==-i?"-0":t}var o=n(265),i=1/0;e.exports=r},function(e,t,n){function r(e,t){return null!=e&&i(e,t,o)}var o=n(273),i=n(274);e.exports=r},function(e,t){function n(e,t){return null!=e&&t in Object(e)}e.exports=n},function(e,t,n){function r(e,t,n){t=o(t,e);for(var r=-1,c=t.length,p=!1;++r<c;){var d=l(t[r]);if(!(p=null!=e&&n(e,d)))break;e=e[d]}return p||++r!=c?p:(c=null==e?0:e.length,!!c&&u(c)&&s(d,c)&&(a(e)||i(e)))}var o=n(263),i=n(234),a=n(237),s=n(241),u=n(244),l=n(271);e.exports=r},function(e,t,n){function r(e){return a(e)?o(s(e)):i(e)}var o=n(276),i=n(277),a=n(264),s=n(271);e.exports=r},function(e,t
 ){function n(e){return function(t){return null==t?void 0:t[e]}}e.exports=n},function(e,t,n){function r(e){return function(t){return o(t,e)}}var o=n(262);e.exports=r},function(e,t,n){function r(e,t){var n=-1,r=i(e)?Array(e.length):[];return o(e,function(e,o,i){r[++n]=t(e,o,i)}),r}var o=n(279),i=n(251);e.exports=r},function(e,t,n){var r=n(280),o=n(283),i=o(r);e.exports=i},function(e,t,n){function r(e,t){return e&&o(e,t,i)}var o=n(281),i=n(231);e.exports=r},function(e,t,n){var r=n(282),o=r();e.exports=o},function(e,t){function n(e){return function(t,n,r){for(var o=-1,i=Object(t),a=r(t),s=a.length;s--;){var u=a[e?s:++o];if(n(i[u],u,i)===!1)break}return t}}e.exports=n},function(e,t,n){function r(e,t){return function(n,r){if(null==n)return n;if(!o(n))return e(n,r);for(var i=n.length,a=t?i:-1,s=Object(n);(t?a--:++a<i)&&r(s[a],a,s)!==!1;);return n}}var o=n(251);e.exports=r},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}f
 unction o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e,t){var n=void 0,r=void 0,o=void 0,i=null,a=0,s=function(){a=(new Date).getTime(),i=null,o=e.apply(n,r),i||(n=r=null)};return function(){var u=(new Date).getTime(),l=t-(u-a);return n=this,r=arguments,l<=0||l>t?(i&&(clearTimeout(i),i=null),a=u,o=e.apply(n,r),i||(n=r=null)):i||(i=setTimeout(s,l)),o}}function 
 u(){var e=s.apply(void 0,arguments);return function(t){return t?(t.persist(),e(t)):e()}}Object.defineProperty(t,"__esModule",{value:!0});var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=n(2),p=r(c),d=500,f=function(e){function t(e){o(this,t);var n=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={currentIndex:e.startIndex,thumbsTranslateX:0,offsetPercentage:0,galleryWidth:0,thumbnailWidth:0},n}return a(t,e),l(t,[{key:"componentWillReceiveProps",value:function(e){this.props.disableArrowKeys!==e.disableArrowKeys&&(e.disableArrowKeys?window.removeEventListener("keydown",this._handleKeyDown):window.addEventListener("keydown",this._handleKeyDown))}},{key:"componentDidUpdate&
 quot;,value:function(e,t){t.thumbnailWidth===this.state.thumbnailWidth&&e.showThumbnails===this.props.showThumbnails||this._setThumbsTranslateX(-this._getThumbsTranslateX(this.state.currentIndex>0?1:0)*this.state.currentIndex),t.currentIndex!==this.state.currentIndex&&this._updateThumbnailTranslateX(t)}},{key:"componentWillMount",value:function(){this._slideLeft=u(this._slideLeft.bind(this),d,!0),this._slideRight=u(this._slideRight.bind(this),d,!0),this._handleResize=this._handleResize.bind(this),this._handleKeyDown=this._handleKeyDown.bind(this),this._thumbnailDelay=300}},{key:"componentDidMount",value:function(){var e=this;window.setTimeout(function(){return e._handleResize()},500),this.props.disableArrowKeys||window.addEventListener("keydown",this._handleKeyDown),window.addEventListener("resize",this._handleResize)}},{key:"componentWillUnmount",value:function(){this.props.disableArrowKeys||window.removeEventList
 ener("keydown",this._handleKeyDown),window.removeEventListener("resize",this._handleResize),this._intervalId&&(window.clearInterval(this._intervalId),this._intervalId=null)}},{key:"fullScreen",value:function(){var e=this._imageGallery;e.requestFullscreen?e.requestFullscreen():e.msRequestFullscreen?e.msRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullscreen&&e.webkitRequestFullscreen()}},{key:"slideToIndex",value:function(e,t){t&&t.preventDefault();var n=this.props.items.length-1,r=e;e<0?r=n:e>n&&(r=0),this.setState({previousIndex:this.state.currentIndex,currentIndex:r,offsetPercentage:0,style:{transition:"transform 0.45s ease-out"}})}},{key:"getCurrentIndex",value:function(){return this.state.currentIndex}},{key:"_handleResize",value:function(){this._imageGallery&&this.setState({galleryWidth:this._imageGallery.offsetWidth}),this._i
 mageGalleryThumbnail&&this.setState({thumbnailWidth:this._imageGalleryThumbnail.offsetWidth})}},{key:"_handleKeyDown",value:function(e){var t=37,n=39,r=parseInt(e.keyCode||e.which||0);switch(r){case t:this._canSlideLeft()&&!this._intervalId&&this._slideLeft();break;case n:this._canSlideRight()&&!this._intervalId&&this._slideRight()}}},{key:"_handleMouseOverThumbnails",value:function(e){var t=this;this.props.slideOnThumbnailHover&&(this.setState({hovering:!0}),this._thumbnailTimer&&(window.clearTimeout(this._thumbnailTimer),this._thumbnailTimer=null),this._thumbnailTimer=window.setTimeout(function(){t.slideToIndex(e)},this._thumbnailDelay))}},{key:"_handleMouseLeaveThumbnails",value:function(){this._thumbnailTimer&&(window.clearTimeout(this._thumbnailTimer),this._thumbnailTimer=null),this.setState({hovering:!1})}},{key:"_handleMouseOver",value:function(){this.setState({hovering:!0}
 )}},{key:"_handleMouseLeave",value:function(){this.setState({hovering:!1})}},{key:"_handleImageError",value:function(e){this.props.defaultImage&&-1===e.target.src.indexOf(this.props.defaultImage)&&(e.target.src=this.props.defaultImage)}},{key:"_canNavigate",value:function(){return this.props.items.length>=2}},{key:"_canSlideLeft",value:function(){return this.props.infinite||this.state.currentIndex>0}},{key:"_canSlideRight",value:function(){return this.props.infinite||this.state.currentIndex<this.props.items.length-1}},{key:"_updateThumbnailTranslateX",value:function(e){if(0===this.state.currentIndex)this._setThumbsTranslateX(0);else{var t=Math.abs(e.currentIndex-this.state.currentIndex),n=this._getThumbsTranslateX(t);n>0&&(e.currentIndex<this.state.currentIndex?this._setThumbsTranslateX(this.state.thumbsTranslateX-n):e.currentIndex>this.state.currentIndex&&this._setThumbsTra
 nslateX(this.state.thumbsTranslateX+n))}}},{key:"_setThumbsTranslateX",value:function(e){this.setState({thumbsTranslateX:e})}},{key:"_getThumbsTranslateX",value:function(e){if(this.props.disableThumbnailScroll)return 0;var t=this.state.thumbnailWidth;if(this._thumbnails){if(this._thumbnails.scrollWidth<=t)return 0;var n=this._thumbnails.children.length,r=this._thumbnails.scrollWidth-t,o=r/(n-1);return e*o}}},{key:"_getAlignmentClassName",value:function(e){var t=this.state.currentIndex,n="",r="left",o="center",i="right";switch(e){case t-1:n=" "+r;break;case t:n=" "+o;break;case t+1:n=" "+i}return this.props.items.length>=3&&this.props.infinite&&(0===e&&t===this.props.items.length-1?n=" "+i:e===this.props.items.length-1&&0===t&&(n=" "+r)),n}},{key:"_getTranslateXForTwoSlide",value:function(e){var t=this.state,n=
 t.currentIndex,r=t.offsetPercentage,o=t.previousIndex,i=-100*n,a=i+100*e+r;return r>0?this.direction="left":r<0&&(this.direction="right"),0===n&&1===e&&r>0?a=-100+r:1===n&&0===e&&r<0&&(a=100+r),n!==o?0===o&&0===e&&0===r&&"left"===this.direction?a=100:1===o&&1===e&&0===r&&"right"===this.direction&&(a=-100):0===n&&1===e&&0===r&&"left"===this.direction?a=-100:1===n&&0===e&&0===r&&"right"===this.direction&&(a=100),a}},{key:"_getSlideStyle",value:function(e){var t=this.state,n=t.currentIndex,r=t.offsetPercentage,o=this.props,i=o.infinite,a=o.items,s=-100*n,u=a.length-1,l=s+100*e+r,c=1;e===n?c=3:e===this.state.previousIndex&&(c=2),i&&a.length>2&&(0===n&&e===u?l=-100+r:n===u&&0===e&&(l=100+r)),i&&a
 mp;2===a.length&&(l=this._getTranslateXForTwoSlide(e));var p="translate3d("+l+"%, 0, 0)";return{WebkitTransform:p,MozTransform:p,msTransform:p,OTransform:p,transform:p,zIndex:c}}},{key:"_getThumbnailStyle",value:function(){var e="translate3d("+this.state.thumbsTranslateX+"px, 0, 0)";return{WebkitTransform:e,MozTransform:e,msTransform:e,OTransform:e,transform:e}}},{key:"_slideLeft",value:function(e){this.slideToIndex(this.state.currentIndex-1,e)}},{key:"_slideRight",value:function(e){this.slideToIndex(this.state.currentIndex+1,e)}},{key:"_renderItem",value:function(e){return p.default.createElement("figure",{className:"image-gallery-image"},p.default.createElement("a",{href:e.original},p.default.createElement("img",{src:e.original,alt:e.originalAlt,srcSet:e.srcSet,sizes:e.sizes,onLoad:this.props.onImageLoad,onError:this._handleImageError.bind(this)})),e.desc
 ription&&p.default.createElement("figcaption",{className:"image-gallery-description"},e.description))}},{key:"render",value:function(){var e=this,t=this.state.currentIndex,n=this._getThumbnailStyle(),r=this._slideLeft.bind(this),o=this._slideRight.bind(this),i=[],a=[];return this.props.items.map(function(n,r){var o=e._getAlignmentClassName(r),s=n.originalClass?" "+n.originalClass:"",u=n.thumbnailClass?" "+n.thumbnailClass:"",l=n.renderItem||e.props.renderItem||e._renderItem.bind(e),c=p.default.createElement("div",{key:r,className:"image-gallery-slide"+o+s,style:Object.assign(e._getSlideStyle(r),e.state.style),onClick:e.props.onClick},l(n));e.props.lazyLoad?o&&i.push(c):i.push(c),a.push(p.default.createElement("button",{type:"button",onMouseOver:e._handleMouseOverThumbnails.bind(e,r),onMouseLeave:e._handleMouseLeaveThumbnails.bind(e,r),key:r,className:"bu
 tton-link image-gallery-thumbnail"+(t===r?" active":"")+u,onTouchStart:function(t){return e.slideToIndex.call(e,r,t)},onClick:function(t){return e.slideToIndex.call(e,r,t)}},p.default.createElement("img",{src:n.thumbnail,alt:n.thumbnailAlt,onError:e._handleImageError.bind(e)}),p.default.createElement("div",{className:"image-gallery-thumbnail-label"},n.thumbnailLabel)))}),p.default.createElement("section",{ref:function(t){return e._imageGallery=t},className:"image-gallery"},p.default.createElement("div",{onMouseOver:this._handleMouseOver.bind(this),onMouseLeave:this._handleMouseLeave.bind(this),className:"image-gallery-content"},this._canNavigate()?[this.props.showNav&&p.default.createElement("span",{key:"navigation"},this._canSlideLeft()&&p.default.createElement("button",{type:"button",className:"button-link image-gallery-left-na
 v",onTouchStart:r,onClick:r}),this._canSlideRight()&&p.default.createElement("button",{type:"button",className:"button-link image-gallery-right-nav",onTouchStart:o,onClick:o})),p.default.createElement("div",{key:this.state.currentIndex,className:"image-gallery-slides"},i)]:p.default.createElement("div",{className:"image-gallery-slides"},i),this.props.showIndex&&p.default.createElement("div",{className:"image-gallery-index"},p.default.createElement("span",{className:"image-gallery-index-current"},this.state.currentIndex+1),p.default.createElement("span",{className:"image-gallery-index-separator"},this.props.indexSeparator),p.default.createElement("span",{className:"image-gallery-index-total"},this.props.items.length))),p.default.createElement("div",{className:"image-gallery-thumbnails",ref:functi
 on(t){return e._imageGalleryThumbnail=t}},p.default.createElement("div",{ref:function(t){return e._thumbnails=t},className:"image-gallery-thumbnails-container",style:n},a)))}}]),t}(p.default.Component);t.default=f,f.propTypes={items:p.default.PropTypes.array.isRequired,showNav:p.default.PropTypes.bool,lazyLoad:p.default.PropTypes.bool,infinite:p.default.PropTypes.bool,showIndex:p.default.PropTypes.bool,showThumbnails:p.default.PropTypes.bool,slideOnThumbnailHover:p.default.PropTypes.bool,disableThumbnailScroll:p.default.PropTypes.bool,disableArrowKeys:p.default.PropTypes.bool,defaultImage:p.default.PropTypes.string,indexSeparator:p.default.PropTypes.string,startIndex:p.default.PropTypes.number,slideInterval:p.default.PropTypes.number,onClick:p.default.PropTypes.func,onImageLoad:p.default.PropTypes.func,onImageError:p.default.PropTypes.func,renderItem:p.default.PropTypes.func},f.defaultProps={items:[],showNav:!0,lazyLoad:!1,infinite:!0,showIndex:!1,showThumbnails:
 !0,slideOnThumbnailHover:!1,disableThumbnailScroll:!1,disableArrowKeys:!1,indexSeparator:" / ",startIndex:0,slideInterval:3e3}},function(e,t,n,r){"use strict";var o=n(r),i=(n(8),function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)}),a=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},s=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},u=function(e,t,n,r){var o=this;if(o.instancePool.length){var i=o.instancePool.pop();return o.call(i,e,t,n,r),i}return new o(e,t,n,r)},l=function(e,t,n,r,o){var i=this;if(i.instancePool.length){var a=i.instancePool.pop();return i.call(a,e,t,n,r,o),a}return new i(e,t,n,r,o)},c=function(e){var t=this;e instanceof t?void 0:o("25"),e.destructor(),t.instancePool.length<t.poolSize&&t.instancePool.push(e)},p=10,d=i,f=
 function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||d,n.poolSize||(n.poolSize=p),n.release=c,n},h={addPoolingTo:f,oneArgumentPooler:i,twoArgumentPooler:a,threeArgumentPooler:s,fourArgumentPooler:u,fiveArgumentPooler:l};e.exports=h}]));
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginspackagejson"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/package.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/package.json    2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/package.json      2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14,17 +14,26 @@
</span><span class="cx" style="display: block; padding: 0 10px">   },
</span><span class="cx" style="display: block; padding: 0 10px">   "devDependencies": {
</span><span class="cx" style="display: block; padding: 0 10px">     "autoprefixer": "^6.3.6",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    "babel-cli": "^6.18.0",
</ins><span class="cx" style="display: block; padding: 0 10px">     "babel-core": "^6.10.4",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    "babel-eslint": "^7.1.1",
</ins><span class="cx" style="display: block; padding: 0 10px">     "babel-loader": "^6.2.4",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    "babel-preset-es2015": "^6.9.0",
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    "babel-plugin-lodash": "^3.2.11",
+    "babel-plugin-transform-imports": "^1.1.0",
+    "babel-preset-es2015": "^6.18.0",
</ins><span class="cx" style="display: block; padding: 0 10px">     "babel-preset-react": "^6.11.1",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    "babel-preset-stage-2": "^6.18.0",
+    "eslint": "^3.12.2",
+    "eslint-plugin-react": "^6.8.0",
</ins><span class="cx" style="display: block; padding: 0 10px">     "grunt": "^1.0.1",
</span><span class="cx" style="display: block; padding: 0 10px">     "grunt-contrib-jshint": "^1.0.0",
</span><span class="cx" style="display: block; padding: 0 10px">     "grunt-contrib-watch": "^1.0.0",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    "grunt-eslint": "^19.0.0",
</ins><span class="cx" style="display: block; padding: 0 10px">     "grunt-postcss": "~0.7.2",
</span><span class="cx" style="display: block; padding: 0 10px">     "grunt-rtlcss": "^2.0.1",
</span><span class="cx" style="display: block; padding: 0 10px">     "grunt-sass": "^1.2.0",
</span><span class="cx" style="display: block; padding: 0 10px">     "grunt-sass-globbing": "^1.5.1",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    "grunt-shell": "^2.1.0",
</ins><span class="cx" style="display: block; padding: 0 10px">     "grunt-webpack": "^1.0.11",
</span><span class="cx" style="display: block; padding: 0 10px">     "history": "^2.0.0",
</span><span class="cx" style="display: block; padding: 0 10px">     "jquery": "^3.1.0",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -37,8 +46,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">     "react-router-redux": "^4.0.5",
</span><span class="cx" style="display: block; padding: 0 10px">     "react-router-scroll": "^0.3.2",
</span><span class="cx" style="display: block; padding: 0 10px">     "redux": "^3.5.2",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    "redux-router": "^2.1.2",
</ins><span class="cx" style="display: block; padding: 0 10px">     "redux-thunk": "^2.1.0",
</span><span class="cx" style="display: block; padding: 0 10px">     "webpack": "^1.13.1",
</span><span class="cx" style="display: block; padding: 0 10px">     "webpack-dev-server": "^1.14.1"
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  },
+  "dependencies": {
+    "i18n-calypso": "^1.7.0",
+    "json-loader": "^0.5.4",
+    "wpapi": "^1.0.0"
</ins><span class="cx" style="display: block; padding: 0 10px">   }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgpluginswebpackconfigjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/webpack.config.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/webpack.config.js       2017-03-01 04:32:40 UTC (rev 5023)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/webpack.config.js 2017-03-01 18:08:54 UTC (rev 5024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4,7 +4,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> module.exports = {
</span><span class="cx" style="display: block; padding: 0 10px">        cache: true,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        entry: [ './client/index.jsx' ],
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ entry: [ -1 !== process.argv[2].indexOf( 'build' ) ? './client/build.jsx' : './client/index.jsx' ],
</ins><span class="cx" style="display: block; padding: 0 10px">         output: {
</span><span class="cx" style="display: block; padding: 0 10px">                path: __dirname + '/js',
</span><span class="cx" style="display: block; padding: 0 10px">                filename: 'theme.js'
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15,6 +15,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                test: /\.jsx?$/,
</span><span class="cx" style="display: block; padding: 0 10px">                                exclude: /node_modules/,
</span><span class="cx" style="display: block; padding: 0 10px">                                loader: 'babel-loader'
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        },
+                       {
+                               test: /\.json$/,
+                               loader: 'json'
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                ]
</span><span class="cx" style="display: block; padding: 0 10px">        },
</span></span></pre>
</div>
</div>

</body>
</html>