summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--application/basilisk/app/profile/basilisk.js6
-rw-r--r--application/basilisk/base/content/newtab/alternativeDefaultSites.json50
-rw-r--r--application/basilisk/base/content/newtab/customize.js8
-rw-r--r--application/basilisk/base/content/newtab/grid.js15
-rw-r--r--application/basilisk/base/content/newtab/newTab.css112
-rw-r--r--application/basilisk/base/content/newtab/newTab.inadjacent.json3209
-rw-r--r--application/basilisk/base/content/newtab/newTab.js1
-rw-r--r--application/basilisk/base/content/newtab/newTab.xhtml1
-rw-r--r--application/basilisk/base/content/newtab/page.js61
-rw-r--r--application/basilisk/base/content/newtab/sites.js105
-rw-r--r--application/basilisk/base/jar.mn2
-rw-r--r--application/basilisk/components/newtab/NewTabPrefsProvider.jsm2
-rw-r--r--application/basilisk/components/nsBrowserGlue.js3
-rw-r--r--application/basilisk/locales/en-US/chrome/browser/newTab.dtd3
-rw-r--r--application/basilisk/locales/en-US/chrome/browser/newTab.properties39
-rw-r--r--application/basilisk/modules/AboutNewTab.jsm1
-rw-r--r--application/basilisk/modules/DirectoryLinksProvider.jsm1251
-rw-r--r--application/basilisk/modules/moz.build1
-rw-r--r--application/basilisk/themes/shared/newtab/newTab.inc.css100
-rw-r--r--application/palemoon/app/profile/palemoon.js3
-rw-r--r--application/palemoon/components/newtab/grid.js4
-rw-r--r--application/palemoon/components/newtab/page.js50
-rw-r--r--application/palemoon/components/newtab/sites.js14
-rw-r--r--toolkit/modules/NewTabUtils.jsm42
24 files changed, 16 insertions, 5067 deletions
diff --git a/application/basilisk/app/profile/basilisk.js b/application/basilisk/app/profile/basilisk.js
index c7b2852dd..c229f3523 100644
--- a/application/basilisk/app/profile/basilisk.js
+++ b/application/basilisk/app/profile/basilisk.js
@@ -1040,12 +1040,6 @@ pref("browser.newtabpage.introShown", false);
// Toggles the content of 'about:newtab'. Shows the grid when enabled.
pref("browser.newtabpage.enabled", true);
-// Toggles the enhanced content of 'about:newtab'. Shows sponsored tiles.
-sticky_pref("browser.newtabpage.enhanced", false);
-
-// enables Activity Stream inspired layout
-pref("browser.newtabpage.compact", false);
-
// Disables capturing of page thumbnails
pref("browser.pagethumbnails.capturing_disabled", false);
diff --git a/application/basilisk/base/content/newtab/alternativeDefaultSites.json b/application/basilisk/base/content/newtab/alternativeDefaultSites.json
deleted file mode 100644
index 018d3edcc..000000000
--- a/application/basilisk/base/content/newtab/alternativeDefaultSites.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "directory": [
- {
- "bgColor": "#ffffff",
- "directoryId": 10000000,
- "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAIX0lEQVR4nO1afXDbZh1+sxbWsbGvsrLbuBt36766sR3sOEgiuU4kx2vTpFGKm0SKsyyOlI8laUZTulLojQEHx4CyAaNnt72yrivklo1YSpxcW7YVbKXHgCvduCvroDt6o6OtLSWN1MRWX/5I4imyJMu2bPNHnrvfSZbf6P09z+/jfV+3ACxhCUsoAEouNWGlMRLri5GuZwUSe1Ug8bcFEjsjUPgHAoX/UyCxkyKJjQoU/iOhCd8WJSvW/8vpXFFsx7PGeaJsVaytul+g8KMiic+IFA7NTNB/rggk/jeRcu26RGFris3JEqIUtkFsdo2KFK6kI52pCSR2UmirZgY9YFmxeaYg1uyqFSj8lMXI5mofRb3rOwEAJcXmDS72ex8QvO43skjv3MeT2DtRX2150cgLzVUDIonF8xBh64KQ2FWRwncPejyFK4tYq/Nmoa1mPE/pnZ1ILe4TFxpdd+SdvOhxrhabXaeLTVjfsHfzSj5K4V8QKfyjnGs3P2UiCt/v/1LeyAsNlXebkbeRSOZ/Q+JCrBH/Yt7IX+qlbhS96dM+Y+dJLC6S+BWRwmazFizf5AEAQPRtHLEhukqMwo8KTfg2oamy8t+e0uvUczwDwDWxhopHBBLvElrc+wUSm/r/IN9a3ZtrbYqUe9eHTc7PZDLvoAcsi/lq2wQSO1M88k93r7ayjzdI76sxEv/5hdryT+foRknM696q9qMg5AEAQHx83WhWtU5i56PtG1E7fYkO+B4SKNd7AoWLBSEv9G3Asol8zOs+ddFTeWc+fDrXgq2MNmEP5+PdKZB/XR4RvRnWe8tjJ8+1ECsL4mA+EQ+vcCg8gHHuPjjZvc5S6guU6/3/POG5rdi+24IEv+KwEgFQ4QFU/rAKTu90pal5fCY60PlQsf22BefHwfUKD2YVfl6ACIAKfx2UX0QNBYj6arqL7bdtSIQBnYy+2iIAzg49Cid9bm3qv11sn21FggeHUwSILGQCgIljd8Kpreq+4Koqts+2QuGBmBL9FLsFSj+sgAKFnyq2v7ZCDoO7dKOvvc7fS3vcW4rts61I8OBxXdI6/UCJADgVvmGVHfMSAelgfUA6VBeQDqmv2nuzZ3rf6Y2r3SM7DB1RwmCnOsLaiGuenbWD/JwAcqI+IEPCL8H6gAwX7omADIn5z/Wqe0Iz1sgI3edSv6EjcR78OEk4jQiJCNhnlwD1ATlBmDqdCUHzcYRf3mXoSCIMXjdK95SeEAbfslUAk4iaEc1EsLnx0vNmAhw3q3mNAFvtFCBd2i8i4bdWAgYCDBkLwIMJw8antTDos12ARSTNM8JK5Amd8URAPmosQAS8Zdr41N/lIQOS0Z2/pkZe0iWoS35+rIY8rPfLvzcWgAdDljMgAr5tlwCEWgArjUxnnJXSmX8eMnQkPrH8OasCJMJgfyEE0KZxMrJ+i2WgyZq6gHTQ0BGFv+abujs//ab4gV0CqEvAar1n0gQXizj9PUNHEmHgTSFt1At4O3eCH+8D0tW2YUmoMkKvfyQzwC/vMHREegN8Tpe4zjIY55fD14+X9tgiwC8mV2ZrHS/LGOGXRd3y8aeKVee/3GrqjBIGMcMsmL/GJu6AW4+1QZRl/mKHADmipD4gz1jJHCIgw9oXJ+8zfVsi/ImXU7bDquvfI2ugZ7wHoiwDUY6BTrbTWRie+ti0d7rGrHTU5UD45StpX5iILPMZrQTD4Q0QG+2GKMckzcF28AXgaYiv7ZNesdokCb90PO0LP2TBpxQezKpFkPmb4Q/ebFlEHOWYZBY8FtriKwDXFDAHhLvr/bJi9TzQtPeycQNUI3HihkML5M9NfB4+caRTl/jHRsvtb333gTzzTUHDPonNZFkkfjVl7Zfr+MRtiMID+McICqtDvfrE2cWfHRxz2j321K155pxE84HLLWb7BK0odX75TEYTBI43hB1ch0HE554h7GJhKrkn/4wPMjfliXMSO4alcsIvx/UanZE17pcGMppkU2iL2zDt9QSZtwqu66/Okdbb88Qd7PydVFYfkGVthLWHHk1JyOteuHRjxpNh3JNjRtE3EgDlGIiwzLlqrq/MbvKtLwkewi/PalPc8PyQPDdIP8lqQvdw92qEZWbNyBqJgnD0VTTI7H74Je/1uRL/8mDr7VWjfYeJkecgdfC/6c8JavPL0+6fitn3JtdIzxbdqLPqiNMmwtAxR7BzZ+mgL2MnHGzHPQhL/wzlmCsLc64PbYPU4Xd1zwN6WdCwT/p61uQXsH6sL5TS/dOUgY4QCZRlxsuD9EDZsM/x4KDnk5ppSsqGfHehw3QjytHfQVj6HaP+U8F1wZbhMf1Dkerzpr3Sn4Ad/5/Yc2T7TQ6OOW2YBWZimAsVRzlaRoL0DMLRV/WW19SVh05+v5nbAxsPCPpZ4Jclwj95b87kF+BgO+5Bg8yFFHKZZkO68XqimoyvGd0FqUNnU/pA1yvTdbaRXwDCtj2CsszFjFLfSjZoRbEiqEqoqtE+6H2VT5LfvPfydtvJJ0V4jb537QhzxjLRdMSsimIhq5q538DNgSnbfqs0FoHrusUd6j2ScdTNyGZTNovfHa8Z6/fmnbwaTq5r+1wj0ziZrjlmvIKYP3ew9Hvk+NOPFpT8AjxHd6ypGOl607Z+YDUL5s4iChpkdq8b7b22KOTVQIPtGxet3bmQtVA6eKhnyBP6hvnPW8UAwvpq1nIdoeS6bpWY0fK3aMfJTCMc/csqtuf+YvNMi68Mt38WDTJPoSx9DGHpmaxLI8hcqBzpCiDB9ibnM87lxeaVLUrKg+1fRVimby3LPItw9G9Rlj6Bssw/EI4+i3DM+0iQPomy9JiD69hdztI7SoPtTWWvddry7w5LWIIx/gdCuvcjoZqlLQAAAABJRU5ErkJggg==",
- "type": "affiliate",
- "title": "Google",
- "url": "https://www.google.com/"
- },
- {
- "bgColor": "#E62117",
- "directoryId": 10000001,
- "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACd0lEQVR4nO3av0tVYRzH8WOIBEVDUUIGCa32FwQ5OrS42NKeRUOTdGmoqUGiLVBqa5UG+7WUREGiEqhTDkVJEA2iYZBkxKvhHumo96o3uM9z0ucNZ7zn834+XO59znm+WZZIJBKJRCKRSGwCx3AWfbiIaxjEPYzgOd7gLWbwIb8WsFjjWrU9q3U+u1C4/0yeOZ47jOROg6jkrn25e3uji27NbzC9A9n/hWnVNbVut/hOTMZ1bSqT6Ky3+A58jOsXhE/o2Lj4FryILBaSF2gpFtAT2ygCPcUCHse2icDTtcW3YSW2TQRW0JahK7ZJRLoy9Ma2iEhvhoHYFhEZyDAU2yIiwxkeBgj6FSDjXxjN8CpA0A1cxucAWY0wkeFdgKBK/pe7H1fxNUDmTpjLMB8gqLJh631A9dF6IUD2Vsxn+BYgaF0BhSIO4WYgh1osZVgOEFSzgEIRh3EL3wO4FFnOAgVtWUChiKO4gx+BvJSqgEIRx3EXP5stVsoCCkWcxH1N3EeUuoBCEafwshlipS8AJzTxW1DaAnAEtzX5B7F0BeAgrmMphFhpClB9M3UFXwI5oQQFYB8u4H0gl3VE3QninOoxVyyWozwL4AxeB8jdjqWgT4M4jUcB8nbKfKj3AUN4gN8BshphLtQbobIyEeqdYFkZzTAc2yIiw+lcQDoZSmeDe/t0ON+gPIltE4Fnxa3pnp8QacFYbKOAjCnOCOUldKhOUO12Nk+JFUroxFRkwWYypd6cYKGEVvTbfZOil2w3KVqjjHZ047xqKRWbZ4XHVed2Z/2d5a0167vYgHC9z6/df9bWs8L9uXO3RmeFE4lEIpFIJPYKfwAcall+TY3q/wAAAABJRU5ErkJggg==",
- "type": "affiliate",
- "title": "YouTube",
- "url": "https://www.youtube.com/"
- },
- {
- "directoryId": 10000002,
- "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACT0lEQVR4nO3bzWsTQRgG8PlPHMVLqRVMoQiFehJyUBAFtRCFHspExaaSoFg8CMGPSg+R3kQhh3osIbOlMVrbGKtrsbYESTbB0gqNVGu1WCkWutnXg+ihQjqxi7Oz8w481533+V32iyGEEEIZ76Rho0SZ4ewOG+D3UMatXSx9nPwqb5ySPZC0dPMzhDJelD6IrDCjQijjtvRBJIWGeY3IHkJ2EED2ALKDALIHkB2lAJoujkIwnoNQwoQL96aha3AKQgkTTtyZhKM383D4+gQEoll/AQRiWbg1XILZ+VWwaw6IrE3bgZbejNoAe8+PwEC6DOsbm0Klt679lxQGCESzMD335Z+KKw+wrzcDpcVvOyqvNMCwubjj8soCnBx44Up5ZQGeFZf1BWi7/BhqjthtzpcAseRsQwVrjgNzS9/hZWUFJq3Pf6U5MqoWQHJ8Qbh8aqoKB688cWVfzwBMvP0kVN6srMCec+7t6xmAmfmvQgCRBzOu7usZgHJ1TQjgyI283gCHrj3VG6C9bwwBEAABEEAtgAPRR9A3VKibpdUfQgD9KWvba529+8pbAMF4TqicW+th/r3eAP0pS2+Anvtv9AY4dvu53gCtMfGfI74DWN+wG5rNdwDl6preAGOFj3oDJMcXvAfQHMlAKGHWTeWD2KPw1aFC3et0NPi9wDPvAq/fif0LDMZzru6LALKLIwACIAACIAACIAACIAACIAACIAACIAACIMD/BvDKwUkZAJRx2zNHZyUBFAntTp+WXV4iQCf5c3yecUsXAMq49bv8Txsl6ZCTabOAAAAAAElFTkSuQmCC",
- "title": "Facebook",
- "type": "affiliate",
- "url": "https://www.facebook.com/"
- },
- {
- "bgColor": "#ffffff",
- "directoryId": 10000003,
- "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA/CAYAAABQHc7KAAAEyUlEQVRoge2abYhVRRjHf7veVqSFhIQwa7E3ojXNpSiNgl0S+tAHKUjohbQohUgqKKwMSXpbsATdqOgFU4zKpAzMioploxI/WFBZmhRlL/S2lbpsudvd24dzjve5c58558ycey9B84MB95x5/vM/d+bMzDNHCAQCgUAgEAgE/rf0AOd6lJmKVrdDfI8SfxawIKNcEscfa8TOzBFrlj6Aimd5XnmAbx01TD5xiL3IiH3Y8zm4DXgaGALGMip/DDwHDACXKQ9wA/AiMJyi8T3wAnCvEr841t9tiR2JY/uB443YC4BHgA3ApyntTxD90FuAlaaBU4EfLIHvKIZtnAT8ZtE5O6fGCiNuFJiTM7YNWKe0PQScmRV8ncX4+zkbT1hq0bkyZ/wyI+5ux/bPM+I/ACbnCSyhv8tloMvBQAnYr+h8mDP+PRHzGXCMQ9sA14j4ceAMl+A70HtvjaMJ22jqy4i70Kh/sWO7AO+K+Jdcg6cCh6k3/gfQ6aBTAr5UdN7OiHtL1H3NxXhMN9Fkl2jM89BgPXrv3eKoc71Fx2ZqvqhTJv+kKRkQGjs94gE4PTZgGt9DNMvmpQR8pehst9R/Q9TZ5OG7EzgkNK720DjKNvTeu9RRZ4miMUH9bnCeuH8EOMXD881C40egw0PjKL3oP8Cbjjq2FWGrUW+HuDfg6XmP0NA2W060GYKy97odtbQVoQzMiu+fL66PACd4+O0VGqPANA+NOm5CHwVPOeqUgH2Kzub4/uvi2gOeXrcU8GdlCtG7ZBr/C5juqHWtojMOXCX+HgaO8/B5YqyV6GjZpjf3oI+C+x11JgF7FZ1/xL/v9PS4WmgMempYsW2MfsdtYwTRsqT9mBXgANGIc6WD2lG60EMjk0fRTS931GkHPrdo3ejpbZHQ2B+30XC6iNZm0/Q3RBOcC7Yc4WRPb0NC43ZPjVxsRDe+yFHHHLJJWevhabaIP0z0ujaNWdQmGUn5yEPrPkVnBPe1+0kRv97DhzPb0UdBr6OObZv9kIOGnJzLRPlL0+lFN+6yPe5BH0kV4E/yD+PlIm6bQ/uF2Um98Qlgbs74V5V4WVbl0GgDvsB/BBbiCnTj2lG5yVyqvX+QaOSYOsNk7y8WiPo+c1Ah2tFPesbJTmFfEfX7qU2BZVmRoSPnkMU+D1EUW5L0WErMHKq9P0o149NeqZ+w7wq7qO77f02p11Qmo6/laWnoVlFvnbh+uaJTAW616Dwo6rjmIw3lLnTjminZ+38DM8Q92yv1HfUnOh3AL/H9I7hnpA1lKrXnb0nRkqSXxf0nFC3bK7XMqCdT6o2NeIiirEE3Lvfks6kesI6hf1m2nTt8TW2uIeeLhub8vsxAT5IOUB2+8qTm2RStlYqOnOV7xLXBRj5EUWxJ0hKic/2k98dJ367azh32Es0Tz4hrTcn5fZE9I8s+ajc6m20CgrUWrdVEK0yFJub8RRhEN56UMjk+TVO7xtuK6yFMS1hIuuk82+SETSk6h3A/hmsJ7egfPypEh555ej/hHOzZYktyfl9keiqLzzc+LUlqWc7vSyfRJ3Rpegw4zUOrj/ofoKU5vy/91Jp+vIDWLkPL/J9h/0mmAT9TXa58vvIkzKe6ydpQ3FogEAgEAoFAIBCI+Rf5q90lTPZHIwAAAABJRU5ErkJggg==",
- "title": "Wikipedia",
- "type": "affiliate",
- "url": "https://www.wikipedia.org/"
- },
- {
- "bgColor": "#400090",
- "directoryId": 10000004,
- "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAD3ElEQVR4nO3bS4xecxjH8WmLBVVEx63JBIkEISkhJqURpAsZQioWqpeNSxraYlKpSwiDIRY0aSakqgS9qHRBIhKxYdFFFxWXIGkilYZEUCKj4zLzsfi/LN55zpiZc/lr+/6Ss3nfc57ze77n9r88/y7swxaswgLM7jpMhTlYiNWtnPd1Ga9RfIVtuB+L0J3b/FSFeejDQ9iBvRhrTzYCUKTv8RFewlrcgAtxQsYk5+Ii3IQHsBm78ONkk5oKgIn0Mz7BO3gBA7gHS3EtLsXZre1UnITj2pI5vvV7D85BL67DCvRjEJvwHj7HcBXGqwJwyKoDILeB3OoAyG0gt8oAGMYj0qdnJ17DY3i2vK1CPYmn8Cq2YwgP4rfpBix7BwwE3+aZ2F0ybqQPMSM439NlgpYFMILzAlO9glZXCf2F+cF5LsafZQJX8Q4oujKbK4j9j4aC+EdhT9nAVb0Ebw8MduNABbF/wMlB/LUVxK4MwE84JTC5uoLYK4O48/BrBbEr/Qy+XnCbfloi5h7MCuJurcSxagGMYWFg9qr/SbxQVTeEiq7Ym9OI9UYQ52ipJ1iZ6mgJ3h0Y7zG17usvOC2I01+12ToAHBCMIGHdFGKsCo4/QwJTqerqC2wMEjgGX0zi2KLH6JU6jNYFYBSXBElc/R/HjaE3OO4y1bYs/1WdvcFd4hbilgmOie6cGa1Ytaju7vDSIKHTxc9yUYtvWZ0G6wawH8cGSa0J9r0t2G92K0ZtamJA5PEgsfaOTNHjMlC3uSYADKMnSG6B9GIr6uqehYN1m2tqSGxre4KtJDdhfcF/O5ow1hSAMVweJNmNOcHvlbb3J1KTg6K7MTO62m3Jz1LBQMdk1fSo8IpJALizSUNNA/jWBNPvOFGahG1MOeYFnpgAwHNNm8kB4CDODJI/F380bSbXzNAzAYD1OYzkAjAYABjKYaQDIMdJxQDqnFMsVC4A6wIAgzmMdADkOKkYwKM5jOQCcFcAYCqjxpUpF4Bovu+IB3BfDiO5AIzrFWJlDiO5ACzpABgP4I4cRnIBWBwAWJLDSC4AfR0A4wHcksNILgCLAgB9OYzkAnDFkQ5gDZbj3ta2XCp5bVydYuncBnKrAyC3gdzqAMhtILfqBDCCb6SZ3velatGXsUFa5NC+vdjatrf2/QAfSyUyv9dlsgyAEXyGt/G8VBl+PS7A3PaGTllJCy7n40Zp8GQD3sWXSgCaDIBRqcBxGx7GYmll57hixlySaojPx83SuqW3pLXC0wKwX7oF+3GloILjUJE03X6NtAh8J76LAOzFRtwqKGY63CStX14mLen5+m9Vgqdbrd+9cgAAAABJRU5ErkJggg==",
- "title": "Yahoo!",
- "type": "affiliate",
- "url": "https://www.yahoo.com/"
- },
- {
- "directoryId": 10000005,
- "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJdklEQVR4nO1ba1QTZwL9iCY8hCDxDUpYOIUDBOVZAlJ5NQXRFlEQ8YGiRaqESlhxeRQ3FAWURRC6FYglqBHTEaI8Eg+CRMRatfKwLNL6oqer1h57XEWYbwJK9sdKixiSmRCCbrnn3D8w351770wy3zd8ADCJSUxiPMHhcPS3bdv2/tq1a9MWL16MODs7t5iamt4zMjLq0dfX76VSqU8sLCzueHt7S+3t7QtjYmLWJyYmzp1o32NGSUmJd0BAQLmRkVEPAEBOhCQS6bm3t7c0MjIyHACgMyEB1AGCILTY2NgUOzu7fwGCoUfj/Pnz/x0XF/fXgoICXW3nIYTs7Owlpqam94CGgo+ktbX1j4mJiY7azIQbMTExu3V0dF6AcQo/RF1dXYggSIj2kuFAfHx8Lhjn4ODVElCxWOygpXjKkZWVxQZaDD9EOp3eXV9fb6yVkKOho6Njgb6+fp8ig9pgfHx8gjZyjgYdX1/fhtHMqSKJRHpOJpNl6o4HAMidnJxatJJUEWpraz3xmBxOExOT30JDQ/+elpZmD14+26uqqubExcVFzJs3T53H5uCJEydMtZN4BKKiovKJmA0KChLu3bt3zmh6Bw4c0F+3bl0BEU0AgLygoCByXAKqgq2tbSdek0FBQTV4dZlM5kW8ugAAOZPJ/IeGIuHH9evXp+no6DzHa7K+vt4Lr3ZiYuIOvLoAALmnp6dQQ7HwIzc31xqvQRsbmy5AYC6fnJzsjlcbACD38/M7p5lUBBEeHp5lbm7+E4lEUnonREdHpxPRLSwsNFWmN5Kurq5XNZNITfj4+EwtLCw0dXFxcebz+UFhYWFbmExm6qZNm/IjIiKyampqDIjonTp1ajp4mwrQNP70BfD5/D9PAcXFxQZcLteOwWCw9u/f/3FwcHC6paVlOfg/K4CUlpbmEB0dvSEkJCTLxsamwtnZuXXmzJmPAACDgEBYRXxjC8jJyfFYtmzZYWNj48dgjCGV8Y0qICsryyQiIiKVTqf/BMYxNHgTC8jPz/+ISqU+AVoKDt6kAnbs2MGeMmXKANByePAmFBAbG5utyJi2OKEFJCcnx+MxqYizZs361d/fvyw9PX0bg8FgZWRk2FZVVc1pampaQERnwgoQi8VLVK0DRpJMJstWrlx5hMPhvMflckmKdN+amSDRdbuenl5fRkaGnyrdt6KAsrKyD4iYpFKpTy9cuPAuHu23ogAmk9lIxGRCQsLneLVLS0tnEdHWegFisXgu0b8ANTc3W+LVT0pKsiSirfUCDh06tJyIQSsrq5tE9PPy8jyI6Gu9gMDAQA5Bg9VE9Hfu3BlFRJ/BYHSMPRUBsNnsfUQMksnkciL6q1ev5hHRNzQ07AHa3D9A9N19QEAA7lfiAAAdOp3eTUQfACBHEMR87MlwgmgBZmZm9wHOK1RUVLSFiPYQd+/eHaOheKrB4XCyiBrk8XguqnTb29vNDAwMeolqAwDkCxcuvKbBiMoREhLyKVGDy5cvr1Cm2d3dPd3Ly+sCUd3h3LNnT7xGg46GoqKiQHUMbt68uZjL5VJG6qWkpPjS6fS76miO4Ivm5maVd9qYUV5ePlPdtb+FhUV3cHBwkbm5efrGjRvz7O3tr2og+O90dHRslUqlUxX5lkq5U7HmJEtUsnTxwG0kEJ7b4Cer32ArlXIVHq8ULBarVpPGNcng4GDP4V6xloxArNq3oq+M9hTlUeSvsfwvPxMuoKGhwWO8N0RRKBSM6Bg6nf4jgiC0zk6Egl3czsYQhxsKQ48g4QIAAMDf3//0eIWn0WiPjh075jx79uyHeMfY2dl1IAgyFwAAZA1rjqE8ihw9rPscrXRp7xO5lckaN6X0t+dt7m/LiYanPI+iPPLgmApoa2t75+W7fY2GX7RoUcvx48fpAAAgEom88NwJLBbr65ycnGlD3gZuli15VhfC6JZy9Ubzj1W6to6pAAAAEAgEDsbGxv/RVHh3d/ezEomEOvwcqamp6crGsNns/NHeLg0HPPOhV98Pf2ynQRHG+ZcFDKpdAAAAFBcX+6qzF3gkly5dqjCIVCrVs7e3v6RozKpVqw6q8idrybCFonfrUB5FDqsWfzv0c1jh2IHyKHIotL0J+lsyY7CqJXmyO4hamw/Ly8vnhIeH51Op1KdEQtNotN9WrFjxpVAodFOmv337dkMmk1k9NI5CoWCZmZk7EQSZouj4bilfT/ZtUjhW4yNCDxv0ozyKHJaZ9Mq+S1sDAACdnQgF8o1RlEeRy5picsDA3dPv9QnMHqI88iAUudYNdJV4q1NEXFyc7q5duzZ4eXmdtLKyukUikV6ZL1Cp1CeOjo6tHh4eRVwudwWfzx/1MzoSXC53alRUVCaLxapjs9kBio55fC3bGPvm0wRUQL/3yjc9n9Yz0HX090zolTSP//2OPIjdEVkDAAB42nmYJjsbWjo0CEMcfoCNkXvR5lh3BAlT2LQqhIWFTZFIJFSJRELdunUrWR0NVXhc/zdj9MxHa6B4qRAemfHasx6rYUnQjn8uGD5G9k3CHpRHkcvqQk+8Joh1lX2AHl9wf+RkAWtYvx9eSvaWSn2Iz5w0jId1O6fJLn8Wila6iVCe/oCiZ3sff8YT7CLnE6BgJQoRhxtoqcmz3l8vK9629+xW6Sx4dnUmLJv55DXxo3MeQ8ThDKxlfS77Pm8F1pxkqegkmsItSZxu75nAhf1NMZFY47ov4MlFzejLz69ClhrB/vObc3uuZM5QpIf9fM4K5VHk/W25sSpP3tdaaArPrBSgJbovlM6m+LQeWO13HqtwO4i1Zn0CRZ5+2Hf7bB5cK8a9P6hbytfDOgqsMJErC7vyWRw87VUERR5X0VJDiGc2h/IocljL+rr3Klfpv9pg9xttsLOrVIcfDtltEQOtcP0CFZg/wGvmjysyvQ8VmP8ChTa3McThBiZya8NEbm3YSUYXFNrcRgXmv8Ay2jOUp0tMd9gdidWHFsiuH2QQCqUOuFwuSXY5ZT1a6dyullkNEiKMLky6NaYTeX2JrRXILqcslIkDk2GFYyP6lSE27oGPzHiKVTiJZdV+qf2dh50mJPRo6Jby9bBLycvRSpcCeNLpe7SEovw7Aw+/MpDBUx5XsNqAbHgp2buzc4KutDp4dHGXEVq3xh02fbwFq2Htg5WuQljlcwFWLOqAJ97p7hOYPewTmD2EQuu76Emn67DauxmtdEawap8ceH5TNFofznxQs5XQBstJTGISk1AX/wUPVWOeSpK50AAAAABJRU5ErkJggg==",
- "title": "Amazon",
- "type": "affiliate",
- "url": "https://www.amazon.com/"
- }
- ]
-}
diff --git a/application/basilisk/base/content/newtab/customize.js b/application/basilisk/base/content/newtab/customize.js
index 39724fa91..bc4903f6c 100644
--- a/application/basilisk/base/content/newtab/customize.js
+++ b/application/basilisk/base/content/newtab/customize.js
@@ -9,7 +9,6 @@ var gCustomize = {
"blank",
"button",
"classic",
- "enhanced",
"panel",
"overlay",
"learn"
@@ -83,13 +82,10 @@ var gCustomize = {
}
switch (event.currentTarget.id) {
case "newtab-customize-blank":
- sendAsyncMessage("NewTab:Customize", {enabled: false, enhanced: false});
+ sendAsyncMessage("NewTab:Customize", {enabled: false});
break;
case "newtab-customize-classic":
- sendAsyncMessage("NewTab:Customize", {enabled: true, enhanced: false});
- break;
- case "newtab-customize-enhanced":
- sendAsyncMessage("NewTab:Customize", {enabled: true, enhanced: !gAllPages.enhanced});
+ sendAsyncMessage("NewTab:Customize", {enabled: true});
break;
case "newtab-customize-learn":
this.showLearn();
diff --git a/application/basilisk/base/content/newtab/grid.js b/application/basilisk/base/content/newtab/grid.js
index b6f98fa17..726150a6c 100644
--- a/application/basilisk/base/content/newtab/grid.js
+++ b/application/basilisk/base/content/newtab/grid.js
@@ -9,7 +9,6 @@
*/
const GRID_BOTTOM_EXTRA = 7; // title's line-height extends 7px past the margin
const GRID_WIDTH_EXTRA = 1; // provide 1px buffer to allow for rounding error
-const SPONSORED_TAG_BUFFER = 2; // 2px buffer to clip off top of sponsored tag
/**
* This singleton represents the grid that contains all sites.
@@ -142,13 +141,9 @@ var gGrid = {
// Create sites.
let numLinks = Math.min(links.length, cells.length);
- let hasHistoryTiles = false;
for (let i = 0; i < numLinks; i++) {
if (links[i]) {
this.createSite(links[i], cells[i]);
- if (links[i].type == "history") {
- hasHistoryTiles = true;
- }
}
}
@@ -157,9 +152,6 @@ var gGrid = {
this._gridDefaultContent.nextSibling.remove();
}
this._node.appendChild(fragment);
-
- document.getElementById("topsites-heading").textContent =
- hasHistoryTiles ? "Your Top Sites" : "Top Sites";
},
/**
@@ -182,18 +174,15 @@ var gGrid = {
// Create the site's inner HTML code.
site.innerHTML =
- '<span class="newtab-sponsored">' + newTabString("sponsored.button") + '</span>' +
'<a class="newtab-link">' +
' <span class="newtab-thumbnail placeholder"/>' +
' <span class="newtab-thumbnail thumbnail"/>' +
- ' <span class="newtab-thumbnail enhanced-content"/>' +
' <span class="newtab-title"/>' +
'</a>' +
'<input type="button" title="' + newTabString("pin") + '"' +
' class="newtab-control newtab-control-pin"/>' +
'<input type="button" title="' + newTabString("block") + '"' +
- ' class="newtab-control newtab-control-block"/>' +
- '<span class="newtab-suggested"/>';
+ ' class="newtab-control newtab-control-block"/>';
this._siteFragment = document.createDocumentFragment();
this._siteFragment.appendChild(site);
@@ -274,6 +263,6 @@ var gGrid = {
this._node.style.maxWidth = gGridPrefs.gridColumns * this._cellWidth +
GRID_WIDTH_EXTRA + "px";
this._node.style.height = this._computeHeight() + "px";
- this._node.style.maxHeight = this._computeHeight(gridRows) - SPONSORED_TAG_BUFFER + "px";
+ this._node.style.maxHeight = this._computeHeight(gridRows) + "px";
}
};
diff --git a/application/basilisk/base/content/newtab/newTab.css b/application/basilisk/base/content/newtab/newTab.css
index 658ad2ed3..64b3ed7ef 100644
--- a/application/basilisk/base/content/newtab/newTab.css
+++ b/application/basilisk/base/content/newtab/newTab.css
@@ -122,10 +122,6 @@ input[type=button] {
pointer-events: none;
}
-body:not(.compact) #topsites-heading {
- display: none;
-}
-
/*
* If you change the sizes here, make sure you
* change the preferences:
@@ -140,12 +136,6 @@ body:not(.compact) #topsites-heading {
width: 290px;
}
-body.compact .newtab-cell {
- width: 110px;
- height: 110px;
- margin: 12px;
-}
-
/* SITES */
.newtab-site {
position: relative;
@@ -175,16 +165,13 @@ body.compact .newtab-cell {
}
/* TITLES */
-.newtab-sponsored,
-.newtab-title,
-.newtab-suggested {
+.newtab-title {
overflow: hidden;
position: absolute;
right: 0;
text-align: center;
}
-.newtab-sponsored,
.newtab-title {
bottom: 0;
white-space: nowrap;
@@ -192,103 +179,11 @@ body.compact .newtab-cell {
vertical-align: middle;
}
-.newtab-suggested {
- border: 1px solid transparent;
- border-radius: 2px;
- font-size: 12px;
- height: 17px;
- line-height: 17px;
- margin-bottom: -1px;
- padding: 2px 8px;
- display: none;
- margin-left: auto;
- margin-right: auto;
- left: 0;
- top: 215px;
- -moz-user-select: none;
-}
-
-.newtab-suggested-bounds {
- max-height: 34px; /* 34 / 17 = 2 lines maximum */
-}
-
.newtab-title {
left: 0;
padding: 0 4px;
}
-.newtab-sponsored {
- background-color: #FFFFFF;
- border: 1px solid #E2E2E2;
- border-radius: 3px;
- color: #4A4A4A;
- cursor: pointer;
- display: none;
- font-family: Arial;
- font-size: 9px;
- height: 17px;
- left: 0;
- line-height: 6px;
- padding: 4px;
- right: auto;
- top: -15px;
-}
-
-.newtab-site[suggested=true] > .newtab-sponsored {
- background-color: #E2E2E2;
- border: none;
-}
-
-.newtab-site > .newtab-sponsored:-moz-any(:hover, [active]) {
- background-color: #4A90E2;
- border: 0;
- color: white;
-}
-
-.newtab-site > .newtab-sponsored[active] {
- background-color: #000000;
-}
-
-.newtab-sponsored:dir(rtl) {
- right: 0;
- left: auto;
-}
-
-.newtab-site:-moz-any([type=enhanced], [type=sponsored], [suggested]) .newtab-sponsored {
- display: block;
-}
-
-.newtab-site[suggested] .newtab-suggested {
- display: table;
-}
-
-.sponsored-explain,
-.sponsored-explain a,
-.suggested-explain,
-.suggested-explain a {
- color: white;
-}
-
-.sponsored-explain,
-.suggested-explain {
- background-color: rgba(51, 51, 51, 0.95);
- bottom: 30px;
- line-height: 20px;
- padding: 15px 10px;
- position: absolute;
- text-align: start;
-}
-
-.sponsored-explain input,
-.suggested-explain input {
- background-size: 18px;
- height: 18px;
- opacity: 1;
- pointer-events: none;
- position: static;
- width: 18px;
-}
-
/* CONTROLS */
.newtab-control {
position: absolute;
@@ -333,11 +228,6 @@ body.compact .newtab-cell {
margin: 40px 0 15px;
}
-body.compact #newtab-search-container {
- margin-top: 0;
- margin-bottom: 80px;
-}
-
#newtab-search-container[page-disabled] {
opacity: 0;
pointer-events: none;
diff --git a/application/basilisk/base/content/newtab/newTab.inadjacent.json b/application/basilisk/base/content/newtab/newTab.inadjacent.json
deleted file mode 100644
index 53fb542af..000000000
--- a/application/basilisk/base/content/newtab/newTab.inadjacent.json
+++ /dev/null
@@ -1,3209 +0,0 @@
-{
- "domains": [
- "rp5slFCxq/e7hYhXJCd0vQ==",
- "2rEimAJDNX5g8HPZehOrGg==",
- "nvLEpj6ZZF3LWH3wUB6lKg==",
- "9Cqd4Lm3VvXuJxz79Bbqyg==",
- "vNRy4LR+7TOKTixqsr5ybw==",
- "N4zSgsZCo6Z4XRwZ4fu8WQ==",
- "jsDtRfVbMsFg3KkEl2UiZQ==",
- "TckkKpiq0a6J6NTw7uOZqw==",
- "9Or7IAYuuIgZA370w9rNIg==",
- "ul8WvOjCkxTz9LjT4RqTHg==",
- "ZGJrbwb5878Nsqm0z+A7nQ==",
- "5iT64HTeeG5SIFXG7A9o3w==",
- "YSeSEghPe1kV6g8ghFcNAA==",
- "0jIUl1NDmJZQkDY12VDeIQ==",
- "aos6UyDyIw0R1nTK5wTawA==",
- "G1xxubsq65ugK06UT2DO5A==",
- "lbhavoDrDPP/8m0onwo63w==",
- "ObcLsjW0SkdvY0nkZmiTGQ==",
- "FHZ5084LC0nTAzZlnSKN3Q==",
- "cdEr+0Fv5iaVZzalZToseg==",
- "Co8WbNYbCPTFPcHpeK3hRQ==",
- "qXSzhCEhByLQq9N84tqV+Q==",
- "h3ufhRk5IEFaNH11rIACtQ==",
- "fQ1PJ/JwazIaYoy/zy49QQ==",
- "zAJqfbn54Nsm2ddGtkb59A==",
- "ixPM9T8ik/gWGZ7BRIcaig==",
- "/E9pwA3E3hVAZoYq3FmCyw==",
- "U6ygonI8CxpruhpGB2+Q6A==",
- "Igi4voB8oVMVw6WUeDSjZg==",
- "jtuHIJhwoTGzavFpM7ilNw==",
- "eBvTV27n6Gs+ZsBkpVynvw==",
- "sFbzw0AUOGG0NEzkaSxVDg==",
- "yAkIS+Ezj6woEff9YvdO7Q==",
- "IP1+BwG6q60QzDADi8j7oA==",
- "Q/teQEBFepHtwZ7UHa2TEA==",
- "B1vDep5a1Gok5Gnth39+LA==",
- "cyEIyQ2MZaPGf+K1x9Bbkg==",
- "aaM+oEJnF4/nwMWyXJU8rA==",
- "qpDNIpxah8FUiqXm5IRaUg==",
- "ZTeJ35gMPqIv2WWbeNyIEg==",
- "nzoAGQAnC/Xgg5PmOgXqkA==",
- "J5pJDuNi3cqQiyaRJAJk4g==",
- "2vqN53BXhXzPrKYsh6QH1A==",
- "QlrzHNYxCwCBMVENvbXjQA==",
- "Ou2HGn43nmsL3RWSNvMdXw==",
- "3qk9lsvGTMqVMAZW+xihfw==",
- "RncMe42RB2bhmUbYtGVnKQ==",
- "hzNXR6dqPq1+vf4Qh5ByWA==",
- "sRq3S2ZRs3H39cEQHv4Vig==",
- "B4ThUBTVJOUPyOsHxikHXA==",
- "A2lU9GkAdSibLO1JJfFnIA==",
- "ef3HNkSvuWQrAzkuty2iqg==",
- "yKDiRM6bf2xc0QXIwHYuaA==",
- "AdCk4ccJuhA0bIT/61J+RQ==",
- "UXvAZ7ULCVz2f505K0Wkvg==",
- "ueKWblrOwVJNgiOvkXKLBQ==",
- "s8u/jPuBAxu1d18HfV5Z0g==",
- "hUT0Uc5YMUdNZQEGLz4hJw==",
- "6jo/phmMTrEXKrNRsionGQ==",
- "s/Ea/3fkyJ9honzPJkgEQQ==",
- "hgu2/Jf+WrQAHfO+asW2zw==",
- "kiVuTNwZ1r2lqYEZxIHyiQ==",
- "24T5KVrVE2mYwJ5Goj3xJw==",
- "fiWBVlfj97GGjEvf/Q9Spg==",
- "5VWdlvJe7eoXMGkTtHzCUg==",
- "+cFQxKa5RWVtc1z00Jujew==",
- "nVa+rLH5p+yXBksLwQsjRQ==",
- "5tyI6bMdb3tMIi4ewvr/SQ==",
- "S6Roj31yS5bZbSFcd3f4Hg==",
- "uW1Zl8iuEF8ZT/gwCBEqwA==",
- "YwL+FJgxlZ8JVig+9iP5Cw==",
- "ThIYK/mQsp9cMf8+rws/4Q==",
- "w0oSxOhRG6kE9B868aoYVQ==",
- "DJUDGQ0J32dF1kfItyxALg==",
- "34/ab69lPkuAKt6WBxJPpA==",
- "25jH4C9apgqWZGZP15lM6Q==",
- "GxvwleSaSwILD1pG9k9buA==",
- "YRAMt2ArEINo83ms6AqJ0A==",
- "15HyTJNoMYzi3XCkeU5Z7A==",
- "/SqjXGD+TKC90uz1vsjqUw==",
- "karhKOknkhtg/LSFo9BGRA==",
- "+tD1d0t3vfJvc1hUAvTT4Q==",
- "rkaKbtlnyVr53D0rexLqdQ==",
- "fAugw4rtnXzzRXfC1wRgOQ==",
- "RgxoepF/XOwIsGat5r5HpQ==",
- "Y49/EnzVz3ugXCYxFjFN7g==",
- "tHMyzBm/2wNDw7TeNeujbg==",
- "LlqzYV4uZpiJy4ORWPSekA==",
- "M3Huar7/ded9OGgDwJhZgw==",
- "QkNNATSx/PJ1XjgZyTtkUQ==",
- "skVw0v6Wx00sfHAScPK1Bw==",
- "v1gsIvg+C68T9wixMzL2sQ==",
- "hDL75EXhl7BaYnAxkoGwbw==",
- "tReG97snx2ESpXbfllCL7Q==",
- "EiZBXR15dT1TMrkgkzmkvw==",
- "5hRHirfD90/sdp0ILJQU8A==",
- "rabElvtYtG0jW6dxAOHofg==",
- "JpxoTRKWN+SEeBQ453R1YQ==",
- "Faz4Lm0cpjvF0IjVkHiZMg==",
- "jGErFAIoXx+50KFpVIGZiA==",
- "5GzBkduKpUX7u1uwtYIFug==",
- "cRBe0J9/KWRX19N2vPkCiw==",
- "t/7g8t4Kr3/+SCnOn3XFWQ==",
- "sd08c6jUXs5/hxND0fBkPA==",
- "nTxKpqIdnHNdpDk7Dx3TEg==",
- "5l+RALcce+lTDnmXI+Wqqg==",
- "pzJ4QmEBGRNiiX6z0xHh8g==",
- "Vfl3YbqR6JRR7SIdsUA/vA==",
- "cgfhOdB376a4GAcuACADvA==",
- "inAefsQM6tiIhQCMtcPcyA==",
- "FTSULGL8CMhmcc7Cyf/X8A==",
- "9XSWpaZyHEy7V/tuw5uZEw==",
- "+VtM1opKlgb/jrCwc4YjFA==",
- "oF46xheuI/NUxUOnOttzvA==",
- "Qy+lvhDbJCumr6kiPLd1oA==",
- "swps7UEKpIbVBJ9SnPK3zQ==",
- "b7wyIiJvJs+29QePxsdWtQ==",
- "x3iDZxYyuHtG/9rNW5HMYg==",
- "r1dx1g5UOksywvOaQTamfA==",
- "KvVF3Si/fr4JQtr7jCJiog==",
- "spvZ7hhtG5QY7JXs96lBUg==",
- "ECL8mA5B6CswyDH6yJ4hVw==",
- "7Uu+YsdS69dMSDYUr6vTag==",
- "Rnm9pSvQRRbkHpOijraLZw==",
- "aQJqpnXdzqNSFhMn3EJA2Q==",
- "TctnXpd7Wd5ZXKMnOFHAQA==",
- "+lPqG8l6mf2FWVGWflyF/g==",
- "mPmnmL2oRRJmKYjQ6TfN3g==",
- "fyXFcT5ZCawDBg74n1WSpg==",
- "uq5Zrxq10pO1HoPxReT5og==",
- "3eoCsOKXY8RDrHSdlXqmrA==",
- "9nQv2BFG56xsHViN5UpHYw==",
- "RtP/nJgy/ItyuDrpBbAotg==",
- "5E/drRptfHmBhJ7qplujGg==",
- "cUxyZvoqXbQ0a/0I9s6Zbg==",
- "womzqSigwEF30V422YmxKw==",
- "FPvZqDfN8dTFHLVOuYEbUA==",
- "YZMXx+scKXp/v9GaJjb1bA==",
- "bjURu5MRsNIZavG5HV0eZw==",
- "iY0C9uSMEOn8ikT+J7+/Eg==",
- "aXkD6BzsdkMEv7A+eYqQQQ==",
- "dOcOfEDGHYG2kgmrglDkPw==",
- "c7GjtY05Mh+cp6SNuWY3Ig==",
- "lM1uY1oVncHXNzKs/cCEtQ==",
- "7jXnQJkutLsi+r9aYmrMxw==",
- "NgrugWWduj2qdWnEQf9dLA==",
- "faYjmy/yn5iXdS28QCIdWw==",
- "68XbaOvIZpCGb4G1gaKErA==",
- "Yi67HkOLtGYXeL7WD4GPrA==",
- "Puo8gXuUkwcoQViaXwkdSQ==",
- "L202Et5aZh60Vl20LTKNFg==",
- "4agAzQ5+dnTmLZEjsZs26g==",
- "LegGM1ft8Y7Ka3CUxpObvg==",
- "KRdILc1QDOpow5im/qY+Kw==",
- "peMW+rpwmXrSwplVuB/gTA==",
- "Pic1ncr+Zn6wv75zjAdzQA==",
- "ilSPlWYbiPzIC13vQUBlOw==",
- "GUlDufLoTalBqrG/h3mZ6w==",
- "5twANNlT57T9BG4r2D9+Hw==",
- "ENrnM8HlMi+5y8Hsu4Pn4A==",
- "K/DzpLEbz1MpRjA6qyYn4Q==",
- "yN1cHJRHDXoFxFZacL6wsw==",
- "Rc6r+KqIePH+dnj1aNYCsQ==",
- "8u/z5htgqXVU5Dqwd9whJQ==",
- "jV575O42EYoqDNxCm9643Q==",
- "xCxGo0h3lS8N6X+ivKfpjA==",
- "us+2nfpj2gjI7s14Hw0gmA==",
- "bp90A/rbESwVU7eh9xRTfQ==",
- "5QtMXzbTafvKDQOWZP7M8w==",
- "1gFCxPLjQlQGKmSGmHwmJQ==",
- "m+/dnOIe6SaIFhfvg+ybDg==",
- "9Dcg87+RPq9U+swRg4dH3Q==",
- "mnjbL7WFmrWp0RUqS8AMGA==",
- "/0e0E+NFmq8GeE5+y2Gekw==",
- "y11mbpHHtka9Ep8cr2nEvQ==",
- "GdmjRyliw+W21Q+dHO4CWA==",
- "X65wWQTpkg756V/Nfn92kQ==",
- "xj06KvacQOxRSofbhzBNgA==",
- "nVDxVhaa2o38gd1XJgE3aw==",
- "4IV+JOGXrltpkQamBRXMgA==",
- "jIfp8LqaYXT88r/K3a8gNw==",
- "vhT4dDtbMFVyevS6yCGy0g==",
- "zMs7/x8hDt8xj2FFc5+6vA==",
- "1J7u2N62JGb2VrnCRlJIrw==",
- "3hJs9P/RRxB0CO4q0Icb+g==",
- "ZpuVY1ZyoKD3hqosdsfT6Q==",
- "6KIM7C7eWgxZtqZboiJvZQ==",
- "vtb6fdqirkuUkqITAmXTlw==",
- "C/rEVr22mw2u/1dwUx9VTg==",
- "NrY4Q5C67haCWLK8HXHq9g==",
- "X9qvEftCEFWX3gBU5hXy+Q==",
- "0zgw7xNB3xVGaH48TyxaNQ==",
- "g7J9Jy/PJrAGRgVdvA+bEg==",
- "9zb+anAyZVBzuU9rW4cJtg==",
- "6Zc5FzT/m0YIjxEPYA6zDQ==",
- "R2YPNlvCbVK0EodTR7czIw==",
- "gsI6EGgXMtDu+1u364A8mw==",
- "Bg2wBFb1/xaxeEiHfBHX+A==",
- "64aapfVI6dV3LpTK56KZlg==",
- "HdgcJU0W3yVnH69VYStmug==",
- "qTDCcv+LK3JPFB/++t66IQ==",
- "P0HEIXMnAmbvq+QYREwFzw==",
- "aaU7CAmtyE35jNKTkyXOkg==",
- "r9G97WKDiQ48qJHP9LBRNg==",
- "8mPgQhYVDn8KshDDvvf5SA==",
- "GCQiiOLDguXLiYwuLcFPsA==",
- "R2Use39If2C0FVBP7KDerA==",
- "23C4eh3yBb5n/RNZeTyJkA==",
- "2QQtKtBAm2AjJ5c0WQ6BQA==",
- "Qc+XYy2qyWJ5VVwd2PExbw==",
- "zJ7ScHNxr2leCDNNcuDApA==",
- "vFtC0B2oe1gck28JOM1dyg==",
- "bLEntCrCHFy9pg3T3gbBzg==",
- "G3PmmPGHaWHpPW30xQgm3Q==",
- "me61ST+JrXM5k3/a11gRAA==",
- "+LJYVZl1iPrdMU3L5+nxZw==",
- "CLPzjXKGGpJ0VrkSJp7wPQ==",
- "Pc+u0MAzp4lndTz4m6oQ5w==",
- "cwBNvZc0u4bGABo88YUsVQ==",
- "q7m/EtZySBjZNBjQ5m1hKw==",
- "8ZBiwr842ZMKphlqmNngHw==",
- "LMCZqd3UoF/kHHwzTdj7Tw==",
- "0ODJyWKJSfObo+FNdRQkkA==",
- "ViweSJuNWbx5Lc49ETEs/A==",
- "x+8rwkqKCv0juoT5m1A4eg==",
- "pxuSWn1u+bHtRjyh2Z8veA==",
- "GKzs8mlnQQc58CyOBTlfIg==",
- "Owg8qCpjZa+PmbhZew6/sw==",
- "YLz+HA6qIneP+4naavq44Q==",
- "9ajIS45NTicqRANzRhDWFA==",
- "DjeSrUoWW2QAZOAybeLGJg==",
- "qxALQrqHoDq9d91nU0DckA==",
- "yPIeWcW8+3HjDagegrN8bw==",
- "ocpLRASvTgqfkY20YlVFHQ==",
- "RuLeQHP1wHsxhdmYMcgtrQ==",
- "3WwITQML938W9+MUM56a3A==",
- "ZbLVNTQSVZQWTNgC4ZGfQg==",
- "X6Ln4si8G5aKar52ZH/FEQ==",
- "+gbitI/gpxebN/rK7qj8Fw==",
- "7cnUHeaPO8txZGGWHL9tKg==",
- "epY+dsm5EMoXnZCnO4WSHw==",
- "nf8x+F03kOpMhsCSUWEhVg==",
- "VE4sLM5bKlLdk85sslxiLQ==",
- "Hs3vUOOs2TWQdQZHs+FaQQ==",
- "hkOBNoHbno2iNR7t3/d4vg==",
- "Ar9N1VYgE7riwmcrM3bA2Q==",
- "SbMjjI8/P8B9a9H2G0wHEQ==",
- "tU31r8zla146sqczdKXufg==",
- "tFmWYH82I3zb+ymk5dhepA==",
- "XHjrTLXkm/bBY/BewmJcCQ==",
- "FV/D5uSco+Iz8L+5t7E8SA==",
- "yKLLiqzxfrCsr6+Rm6kx1Q==",
- "B6reUwMkQFaCHb9BYZExpw==",
- "5jyuDp82Fux+B0+zlx8EXw==",
- "WGKFTWJac8uehn3N59yHJw==",
- "JQf9UmutPh3tAnu7FDk3nA==",
- "hv5GrLEIjPb4bGOi8RSO0w==",
- "p3V7NfveB6cNxFW7+XQNeQ==",
- "DinJuuBX9OKsK5fUtcaTcQ==",
- "UEMwF4kwgIGxGT4jrBhMPQ==",
- "Y78dviyBS3Jq9zoRD5sZtQ==",
- "zbjXhZaeyMfdTb2zxvmRMg==",
- "kydoXVaNcx1peR5g6i588g==",
- "M2suCoFHJ5fh9oKEpUG3xA==",
- "/VnKh/NDv7y/bfO6CWsLaQ==",
- "S+b37XhKRm8cDwRb1gSsKQ==",
- "jz7QlwxCIzysP39Cgro8jg==",
- "IjmLaf3stWDAwvjzNbJpQA==",
- "cHSj5dpQ04h/WyefjABfmQ==",
- "+gO0bg8LY+py2dLM1sM7Ag==",
- "fSANOaHD0Koaqg7AoieY9A==",
- "vqYHQ3MnHrAIAr1QHwfIag==",
- "Uh1mvZNGehK1AaI4a1auKQ==",
- "HCbHUfsTDl6+bxPjT57lrA==",
- "S7Vjy/gOWp0HozPP1RUOZw==",
- "KPh6TwYpspne4KZA6NyMbw==",
- "cfh5VZFmIqJH/bKboDvtlA==",
- "H1zH9I8RwfEy5DGz3z+dHw==",
- "2ksediOVrh4asSBxKcudTg==",
- "+jVN/3ASc2O44sX6ab8/cg==",
- "uvKYnKE01D5r7kR9UQyo5A==",
- "BB9PTlwKAWkExt3kKC/Wog==",
- "yqQPU4jT9XvRABZgNQXjgg==",
- "6v3eTZtPYBfKFSjfOo2UaA==",
- "49z/15Nx9Og7dN9ebVqIzg==",
- "VjclDY8HN4fSpB263jsEiQ==",
- "vSKsa0JhLCe9QFZKkcj58Q==",
- "PolhKCedOsplEcaX4hQ0YQ==",
- "D0Qt9sRlMaPnOv1xaq+XUg==",
- "gBgJF0PiGEfcUnXF0RO7/w==",
- "sC11Rf/mau3FG5SnON4+vQ==",
- "rKb3TBM4EPx/RErFOFVCnQ==",
- "+n0K7OB2ItzhySZ4rhUrMg==",
- "Epm0d/DvXkOFeM4hoPCBrg==",
- "K8PVQhEJCEH1ghwOdztjRw==",
- "xjA21QjNdThLW3VV7SCnrg==",
- "nE72uQToQFVLOzcu/nMjww==",
- "2Hc5oyl0AYRy2VzcDKy+VA==",
- "Y7XpxIwsGK3Lm/7jX/rRmg==",
- "MK7AqlJIGqK2+K5mCvMXRQ==",
- "mXycPfF5zOvcj1p4hnikWw==",
- "V1fvtnJ0L3sluj9nI5KzRw==",
- "TahqPgS7kEg+y6Df0HBASw==",
- "EKU3OVlT4b/8j3MTBqpMNg==",
- "EdvIAKdRAXj7e42mMlFOGQ==",
- "uPm+cF4Jq08S5pQhYFjU8A==",
- "CnIwpRVC2URVfoiymnsdYQ==",
- "wyx5mnUMgP5wjykjAfTO7w==",
- "OwIGvTh8FPFqa4ijNkguAw==",
- "4ID0PHTzIMZz2rQqDGBVfA==",
- "rlXt6zKE7DswUl0oWGOQUQ==",
- "4NP8EFFJyPcuQKnBSxzKgQ==",
- "bJgsuw29cO2WozqsGZxl7w==",
- "b3q8kjHJPj9DWrz3yNgwjQ==",
- "QGYFMpkv37CS2wmyp42ppg==",
- "Kzs+/IZJO8v4uIv9mlyJ2Q==",
- "ZJY+hujfd58mTKTdsmHoQQ==",
- "R8FxgXWKBpEVbnl41+tWEw==",
- "+CvLiih/gf2ugXAF+LgWqw==",
- "BDbfe/xa9Mz1lVD82ZYRGA==",
- "Dz90OhYEjpaJ/pxwg1Qxhg==",
- "MLHt6Ak288G0RGhCVaOeqA==",
- "r0QffVKB9OD9yGsOtqzlhA==",
- "hK8KhTFcR06onlIJjTji/Q==",
- "wMum67lfk5E1ohUObJgrOg==",
- "JKmZqz9cUnj6eTsWnFaB0A==",
- "rtJdfki8fG6CB36CADp0QA==",
- "cUyqCa7Oue934riyC17F8g==",
- "y4Y4mSSTw/WrIdRpktc5Hw==",
- "r36kVMpF+9J+sfI3GeGqow==",
- "ydVj2odhergi+2zGUwK4/A==",
- "J2NFyb8cXEpZyxWDthYQiA==",
- "qYuo5vY8V3tZx41Kh9/4Dw==",
- "jrfRznO0nAz6tZM1mHOKIA==",
- "JSr/lqDej81xqUvd/O2s7w==",
- "vHGjRRSlZHJIliCwIkCAmQ==",
- "sQAxqWXeiu/Su0pnnXgI9A==",
- "xPe76nHyHmald6kmMQsKdg==",
- "50jASqzGm4VyHJbFv8qVRA==",
- "uuiJ+yB7JLDh2ulthM0mjg==",
- "TI90EuS/bHq/CAlX32UFXg==",
- "JgxNrUlL8wutG04ogKFPvw==",
- "aMa1yVA71/w6Uf1Szc9rMA==",
- "k/Aou2Jmyh8Bu3k8/+ndsQ==",
- "iANKiuMqWzrHSk9nbPe3bQ==",
- "7GgNLBppgAKcgJCDSsRqOQ==",
- "bzVeU2qM9zHuzf7cVIsSZw==",
- "rkeLYwMZ1/pW2EmIibALfA==",
- "91+Yms6Oy/rP0rVjha5z9w==",
- "JgXSPXDqaS1G9NqmJXZG0A==",
- "ZzduJxTnXLD9EPKMn1LI4Q==",
- "6W79FmpUN1ByNtv5IEXY4w==",
- "Y1Nm3omeWX2MXaCjDDYnWQ==",
- "ejfikwrSPMqEHjZAk3DMkA==",
- "WNfDNaWUOqABQ6c6kR+eyw==",
- "4BkqgraeXY7yaI1FE07Evw==",
- "AjHz9GkRTFPjrqBokCDzFw==",
- "T/6gSz2HwWJDFIVrmcm8Ug==",
- "VWy9lB5t4fNCp4O/4n8S4w==",
- "/FdZzSprPnNDPwbhV1C0Cg==",
- "LUWxfy4lfgB5wUrqCOUisw==",
- "r1VGXWeqGeGbfKjigaAS+Q==",
- "ztULoqHvCOE6qV7ocqa4/w==",
- "QCpzCTReHxGm5lcLsgwPCA==",
- "Hst3yfyTB7yBUinvVzYROQ==",
- "gf1Ypna/Tt+TZ08Y+GcvGg==",
- "3rbml1D0gfXnwOs5jRZ3gA==",
- "2vm7g3rk1ACJOTCXkLB3zA==",
- "11FE2kknwYi2Qu0JUKMn3A==",
- "1b2uf+CdVjufqiVpUShvHw==",
- "0a4SafpDIe8V4FlFWYkMHw==",
- "7btpMFgeGkUsiTtsmNxGQA==",
- "dUx1REyXKiDFAABooqrKEA==",
- "knYKU74onR6NkGVjQLezZg==",
- "Scto+9TWxj1eZgvNKo+a9A==",
- "cvZT1pvNbIL8TWg+SoTZdA==",
- "1nXByug2eKq0kR3H3VjnWQ==",
- "tG+rpfJBXlyGXxTmkceiKA==",
- "7W9aF7dxnL+E8lbS/F7brg==",
- "8vr+ERVrM99dp+IGnCWDGQ==",
- "oFNMOKbQXcydxnp8fUNOHw==",
- "uJZGw3IY2nCcdVeWW1geNQ==",
- "q6LG0VzO1oxiogAAU63hyg==",
- "f0H/AFSx2KLZi9kVx5BAZg==",
- "1RQZ2pWSxT+RKyhBigtSFg==",
- "scCQPl0em2Zmv/RQYar60g==",
- "A2ODff+ImIkreJtDPUVrlg==",
- "vRgkZZGVN7YZrlml0vxrKA==",
- "68jPYo3znYoU4uWI7FH3/g==",
- "iJ2nT8w8LuK11IXYqBK+YA==",
- "54XELlPm8gBvx8D5bN3aUg==",
- "PTAm/jGkie7OlgVOvPKpaA==",
- "v7BrkRmK0FfWSHunTRHQFQ==",
- "dVh/XMTUIx1nYN4q1iH1bA==",
- "TSGL3iQYUgVg/O9SBKP9EA==",
- "wTO49YX/ePHMWtcoxUAHpw==",
- "bMb1ia0rElr2ZpZVhva0Jw==",
- "sNmW2b2Ud7dZi3qOF8O8EQ==",
- "3djRJvkZk9O2bZeUTe+7xQ==",
- "I9KNZC1tijiG1T72C4cVqQ==",
- "sQzCwNDlRsSH7iB9cTbBcg==",
- "mk1CKDah7EzDJEdhL22B7w==",
- "lON3WM0uMJ30F8poBMvAjQ==",
- "88PNi9+yn3Bp4/upgxtWGA==",
- "C+Ssp+v1r+00+qiTy2d7kA==",
- "11U5XEwfMI7avx014LfC8g==",
- "xsf0m31Am0W9eLhopAkfnA==",
- "d13Rj3NJdcat0K/kxlHLFw==",
- "UP7NXAE0uxHRXUAWPhto0w==",
- "ZKXxq9yr7NGBOHidht34uQ==",
- "Fd2fYFs8vtjws2kx1gf6Rw==",
- "ojf6uL85EuEYgLvHoGhUrw==",
- "KjnL3x+56r3M2pDj1pPihA==",
- "WdCWezJU4JK43EOZ9YHVdg==",
- "/jH6imhTPZ/tHI4gYz2+HA==",
- "+OLntmlsMBBYPREPnS6iVw==",
- "5lfLJAk1L3QzGMML3fOuSw==",
- "AZs3v4KJYxdi8T1gjVjI2Q==",
- "7pkUY2UzSbGnwLvyRrbxfA==",
- "BjfOelfc1IBgmUxMJFjlbQ==",
- "TcGhAJHRr7eMwGeFgpFBhg==",
- "Y7iDCWYrO1coopM3RZWIPg==",
- "mnalaO6xJucSiZ0+99r3Cg==",
- "plXHHzA8X9QGwWzlJxhLRw==",
- "Zqd6+81TwYuiIgLrToFOTQ==",
- "1Pmnur6TbZ9cmemvu0+dSA==",
- "OaNpzwshdHUZMphQXa6i8w==",
- "WKehT4nGF2T7aKuzABDMlA==",
- "4LvQSicqsgxQFWauqlcEjw==",
- "BMZB1FwvAuEqyrd0rZrEzw==",
- "YfbfE3WyYOW7083Y8sGfwQ==",
- "46FCwqh+eMkf+czjhjworw==",
- "734u4Y1R3u7UNUnD+wWUoA==",
- "yf06Slv9l3IZEjVqvxP2aA==",
- "bIk7Fa6SW7X18hfDjTKowg==",
- "DnF6TYSJxlc+cwdfevLYng==",
- "ionqS0piAOY2LeSReAz4zg==",
- "hlMumZ7RJFpILuKs09ABtw==",
- "NjeDgQ1nzH1XGRnLNqCmSg==",
- "o7y4zQXQAryST2cak4gVbw==",
- "29EybnMEO95Ng4l/qK4NWQ==",
- "udU65VtsvJspYmamiOsgXw==",
- "v1AWe5qb5y3vSKFb7ADeEw==",
- "wK6Srd83eLigZ11Q20XGrg==",
- "GmC+0rNDMIR+YbUudoNUXw==",
- "W4utAK3ws0zjiba/3i91YA==",
- "MlKWxeEh8404vXenBLq4bw==",
- "Gdf4VEDLBrKJNQ8qzDsIyw==",
- "Z9bDWIgcq6XwMoU2ECDR5Q==",
- "VIkS30v268x+M1GCcq/A8A==",
- "iPwX3SbbG9ez9HoHsrHbKw==",
- "yKrsKX4/1B1C0TyvciNz5w==",
- "BophnnMszW5o+ywgb+3Qbw==",
- "eJLrGwPRa6NgWiOrw1pA7w==",
- "eV+RwWPiGEB+76bqvw+hbA==",
- "oad5SwflzN0vfNcyEyF4EA==",
- "Uw6Iw+TP9ZdZGm2b/DAmkg==",
- "9qWLbRLXWIBJUXYjYhY2pg==",
- "dxWv00FN/2Cgmgq9U3NVDQ==",
- "AX1HxQKXD12Yv5HWi39aPQ==",
- "J0NauydfKsACUUEpMhQg8A==",
- "mxug34EekabLz0JynutfBg==",
- "bNq/hj0Cjt4lkLQeVxDVdQ==",
- "nW3zZshjZEoM8KVJoVfnuQ==",
- "ghp8sWGKWw20S/z1tbTxFg==",
- "S4rFuiKLFKZ+cL7ldiTwpg==",
- "8ZqmPJDnQSOFXvNMRQYG2Q==",
- "6XYqR2WvDzx4fWO7BIOTjA==",
- "Uo+FIhw1mfjF6/M8cE1c/Q==",
- "bsHIShcLS134C+dTxFQHyA==",
- "19yQHaBemtlgo2QkU5M6jQ==",
- "sWLcS+m4aWk31BiBF+vfJQ==",
- "BlCgDd7EYDIqnoAiKOXX6Q==",
- "MrxR3cJaDHp0t3jQNThEyg==",
- "cMo6l1EQESx1rIo+R4Vogg==",
- "VOvrzqiZ1EHw+ZzzTWtpsw==",
- "1/ZheMsbojazxt31j/l3iA==",
- "0QxPAqRF8inBuFEEzNmLjA==",
- "UXUNYEOffgW3AdBs7zTMFA==",
- "lOPJhHqCtMRFZfWMX/vFZQ==",
- "rXSbbRABEf4Ymtda45w8Fw==",
- "jfegbZSZWkDoPulFomVntA==",
- "hfcH5Az2M7rp+EjtVpPwsg==",
- "VsXEBIaMkVftkxt1kIh7TA==",
- "M20iX2sUfw5SXaZLZYlTaA==",
- "VUDsc9RMS1fSM43c+Jo9dQ==",
- "itPtn+JaO4i7wz2wOPOmDQ==",
- "rCxoo4TP/+fupXMuIM0sDA==",
- "cSHSg9xJz/3F6kc+hKXkwg==",
- "b4BoZmzVErvuynxirLxn0w==",
- "e4B3HmWjW+6hQzcOLru6Xg==",
- "lTE6u9G/RzvmbuAzq2J2/Q==",
- "897ptlztTjr7yk+pk8MT0Q==",
- "jd6IpPJwOJW1otHKtKZ5Gw==",
- "b4aFwwcWMXsSdgS1AdFOXA==",
- "FltEN+7NKvzt+XAktHpfHA==",
- "ZyDh3vCQWzS5DI1zSasXWA==",
- "kcJ1acgBv6FtUhV8KuWoow==",
- "zgEyxj/sCs63O98sZS94Yw==",
- "/kGxvyEokQsVz0xlKzCn2A==",
- "cxqHS4UbPolcYUwMMzgoOA==",
- "62RHCbpGU8Hb+Ubn+SCTBg==",
- "ePlsM/iOMme2jEUYwi15ng==",
- "0fN+eHlbRS6mVZBbH/B9FQ==",
- "k0XIjxp2vFG7sTrKcfAihA==",
- "0rfG4gRugAwVP0i3AGVxxg==",
- "M98hjSxCwvZ27aBaJTGozQ==",
- "kzGNkWh3fz27cZer4BspUQ==",
- "3CJbrUdW68E3Drhe4ahUnQ==",
- "NGApiVkDSwzO45GT57GDQw==",
- "lMjip5hbCjkD9JQjuhewDg==",
- "GrSbnecYAC3j5gtoKntL0A==",
- "9dbn0Kzwr9adCEfBJh78uQ==",
- "64QzHOYX0A9++FqRzZRHlQ==",
- "YZt6HwCvdI5DRQqndA/hBQ==",
- "6GXHGF62/+jZ7PfIBlMxZw==",
- "PBULPuFXb6V3Di713n3Gug==",
- "8Cm19vJW8ivhFPy0oQXVNA==",
- "zDSQ3NJuUGkVOlvVCATRwA==",
- "6QAtjOK9enNLRhcVa2iaTg==",
- "v/PshI6JjkL9nojLlMNfhg==",
- "yTgN5xFIdz1MzFS6xMl5uQ==",
- "SCO9nQncEcyVXGCtx30Jdg==",
- "7b0oo4+qphu6HRvJq6qkHQ==",
- "ol9xhVTG9e1wNo50JdZbOA==",
- "hIABph+vhtSF5kkZQtOCTA==",
- "k+IBS52XdOe5/hLp28ufnA==",
- "6HnWgYNKohqhoa1tnjjU3A==",
- "HDxGhvdQwGh0aLRYEGFqnw==",
- "LDuBcL5r3PUuzKKZ9x6Kfw==",
- "HPvYV94ufwiNHEImu4OYvQ==",
- "h2cnQQF2/R3Mq2hWdDdrTg==",
- "nqpKfidczdgrNaAyPi7BOQ==",
- "2ywo4t5PPSVUCWDwUlOVwQ==",
- "jZMDIu95ITTjaUX0pk4V5g==",
- "bA2kaTpeXflTElTnQRp6GQ==",
- "lwYQm2ynA3ik2gE1m11IEg==",
- "5ugVOraop5P5z5XLlYPJyQ==",
- "l2NppPcweAtmA1V2CNdk2Q==",
- "DbWQI3H2tcJsVJThszfHGA==",
- "H6HPFAcdHFbQUNrYnB74dA==",
- "H1NJEI+fvOQbI51kaNQQjQ==",
- "53UccFNzMi9mKmdeD82vAw==",
- "lffapwUUgaQOIqLz2QPbAg==",
- "rSvhrHyIlnIBlfNJqemEbw==",
- "BLJk9wA88z6e0IQNrWJIVw==",
- "5m1ijXEW+4RTNGZsDA/rxQ==",
- "GG8a3BlwGrYIwZH9j3cnPA==",
- "HhBHt5lQauNl7EZXpsDHJA==",
- "/XjB6c5fxFGcKVAQ4o+OMw==",
- "+tuUmnRDRWVLA+1k0dcUvg==",
- "SM7E98MyViSSS9G0Pwzwyw==",
- "c5q/8n7Oeffv3B1snHM/lA==",
- "kwlAQhR2jPMmfLTAwcmoxw==",
- "0b/xj6fd0x+aB8EB0LC4SA==",
- "S8jlvuYuankCnvIvMVMzmg==",
- "kZkmDatUOdIqs7GzH3nI1A==",
- "obW3kzv2KBvuckU7F+tfjA==",
- "pa8nkpAAzDKUldWjIvYMYg==",
- "m+eh+ZqS74w2q0vejBkjaw==",
- "LcoJBEPTlSsQwfuoKQUxEw==",
- "KO2XVYyNZadcQv8aCNn5JA==",
- "uvzmRcvgepW6mZbMfYgcNw==",
- "KhUT2buOXavGCpcDOcbOYg==",
- "fo3JL+2kPgDWfP+CCrFlFw==",
- "wIfvvLKC61gOpsddUFjVog==",
- "SPHU6ES1WVm0Mu2LB+YjrA==",
- "LWWfRqgtph1XrpxF4N64TA==",
- "LCvz/h9hbouXCmdWDPGWqg==",
- "PXC6ZpdMH0ATis/jGW12iA==",
- "z920R8eahJPiTsifrPYdxA==",
- "GIHKW6plyLra0BmMOurFgA==",
- "k6OmSlaSZ5CB0i7SD9LczQ==",
- "YZ39RIXpeLAhyMgmW2vfkQ==",
- "bs2QG8yYWxPzhtyMqO6u3A==",
- "pKaTI+TfcV3p/sxbd2e7YQ==",
- "xWYecfzAtXT9WyQ8NYY/hw==",
- "Fz8EI+ZpYlbcttSHs5PfpA==",
- "wfwuxn+Vja1DNwiDwL2pcQ==",
- "wux5Y8AipBnc5tJapTzgEQ==",
- "U+oTpcjhc0E+6UjP11OE/Q==",
- "yTVJKBn72RjakMBXDoBKHg==",
- "0TxcYwG72dT7Tg+eG8pP1w==",
- "imZ+mwiT22sW2M9alcUFfg==",
- "CkDIoAFLlIRXra78bxT/ZA==",
- "4qMSNAxichi3ori/pR+o0w==",
- "zNLlWGW/aKBhUwQZ4DZWoQ==",
- "D31ZticrjGWAO45l5hFh7A==",
- "HdXg64DBy5WcL5fRRiUVOg==",
- "yhI5jHlfFJxu4eV5VJO2zQ==",
- "e9GqAEnk8XI5ix6kJuieNQ==",
- "EC0+iUdSZvmIEzipXgj7Gg==",
- "chwv4+xbEAa93PHg8q9zgQ==",
- "B1VVUbl8pU0Phyl1RYrmBg==",
- "A+DLpIlYyCb9DaarpLN76g==",
- "wHA+D5cObfV3kGORCdEknw==",
- "+Mp+JIyO0XC5urvMyi3wvQ==",
- "vUE8Iw3NyWXURpXyoNJdaw==",
- "ParhxI6RtLETBSwB0vwChQ==",
- "NxSdT2+MUkQN49pyNO2bJw==",
- "JSyhTcHLTfzHsPrxJyiVrA==",
- "PAlx9+U+yQCAc5Fi0BOG0w==",
- "W/0s1x3Qm+wN8DhROk6FrQ==",
- "L3Jt5dHQpWQk74IAuDOL8g==",
- "VWb8U4jF/Ic0+wpoXi/y/g==",
- "1wBuHqS1ciup31WTfm3NPg==",
- "BDNM1u/9mefjuW1YM2DuBg==",
- "SDi5+FoP9bMyKYp+vVv1XA==",
- "23d9B9Gz5kUOi1I//EYsSQ==",
- "/a9O7kWeXa0le45ab3+nVw==",
- "PcoVtZrS1x1Q+6nfm4f80w==",
- "A6TLWhipfymkjPYq8kaoDQ==",
- "lzUQ1o7JAbdJYpmEqi6KnQ==",
- "/2jGyMekNu7U136K+2N3Jg==",
- "ZItMIn1vhGqAlpDHclg0Ig==",
- "Ee4A3lTMLQ7iDQ7b8QP8Qg==",
- "bO55S58bqDiRWXSAIUGJKw==",
- "zeHF6fdeqcOId3fRUGscRw==",
- "BxsDnI8jXr4lBwDbyHaYXw==",
- "ylA6sU7Kaf9fMNIx1+sIlw==",
- "ZWXfE3uGU91WpPMGyknmqw==",
- "f1+fHgR5rDPsCZOzqrHM7Q==",
- "8VqeoQELbCs232+Mu+HblA==",
- "beSrliUu0BOadCWmx+yZyA==",
- "NQVQfN3nIg9ipHiFh4BvfQ==",
- "4wnUAbPT3AHRJrPwTTEjyw==",
- "/cdR1i5TuQvO+u3Ov3b0KQ==",
- "wtyAZIfhomcHe9dLbYoSvA==",
- "ulpDxLeQnIRPnq6oaah2AA==",
- "pdPwUHauXOowaq9hpL2yFw==",
- "1+A9FCGP3bZhk6gU3LQtNg==",
- "raYifKqev8pASjjuV+UTKQ==",
- "+OERSmo7OQUUjudkccSMOA==",
- "FeRovookFQIsXmHXUJhGOw==",
- "USCvrMEm/Wqeu9oX6FrgcQ==",
- "kly/2kE4/7ffbO34WTgoGg==",
- "IindlAnepkazs5DssBCPhA==",
- "Bq82MoMcDjIo/exqd/6UoA==",
- "ocvA1/NbyxM0hanwwY6EiA==",
- "rtd6mqFgGe98mqO0pFGbSw==",
- "nvLEpj6ZZF3LWH3wUB6lKg==",
- "AGd0rcLnQ0n+meYyJur1Pw==",
- "wI7JrSPQwYHpv2lRsQu9nQ==",
- "OnmvXbyT2BYsSDJYZhLScA==",
- "CmBf5qchS1V3C2mS6Rl4bw==",
- "TafM7nTE5d+tBpRCsb8TjQ==",
- "wxkb8evGEaGf/rg/1XUWiA==",
- "y1J+o6DC2sETFsySgpDZyA==",
- "SVLHWPCCH7GPVCF7QApPbw==",
- "HMWOlMmzocOIiJ7yG1YaDQ==",
- "DJmrmNRKARzsTCKSMLmcNA==",
- "/XC/FmMIOdhMTPqmy4DfUA==",
- "63OTPaKM0xCfJOy9EDto+Q==",
- "PxReytUUn/BbxYTFMu1r2Q==",
- "WjDqf1LyFyhdd8qkwWk+MA==",
- "/DiUApY7cVp5W9o24rkgRA==",
- "alJtvTAD7dH/zss/Ek1DMQ==",
- "xLm/bJBonpTs0PwsF0DvRg==",
- "eAOEgF5N80A/oDVnlZYRAw==",
- "LqgzKxbI6WTMz0AMIDJR5w==",
- "MJ1FuK8PXcmnBAG9meU84A==",
- "JLq/DrW2f26NaRwfpDXIEA==",
- "fsrX00onlGvfsuiCc35pGg==",
- "tXVb5f90k9l3e1oK2NGXog==",
- "1JRgSHnfAQFQtSkFTttkqQ==",
- "B0TaUQ6dKhPfSc5V/MjLEQ==",
- "nkbLVLvh3ClKED97+nH+7Q==",
- "avFTp3rS6z5zxQUZQuaBHQ==",
- "lNF8PvUIN02NattcGi5u4g==",
- "bBEndaOStXBpAK79FrgHaw==",
- "dM9up4vKQV5LeX82j//1jQ==",
- "4WO6eT0Rh6sokb29zSJQnQ==",
- "RHKCMAqrPjvUYt13BVcmvw==",
- "Ju4YwtPw+MKzpbC0wJsZow==",
- "tzV7ixFH37ze4zuLILTlfA==",
- "oPlhC4ebXdkIDazeMSn1fQ==",
- "5pje7qyz8BRsa8U4a4rmoA==",
- "7E6V6/zSjbtqraG7Umj+Jw==",
- "8QK7emHS6rAcAF5QQemW/A==",
- "LhqRc9oewY4XaaXTcnXIHQ==",
- "p/7qM5+Lwzw1/lIPY91YxQ==",
- "fy54Milpa7KZH/zgrDmMXQ==",
- "LyPXOoOPMieqINtX8C9Zag==",
- "aD4QvtMlr8Lk/zZgZ6zIMg==",
- "dsueq9eygFXILDC7ZpamuA==",
- "+mJLK+6qq8xFv7O/mbILTw==",
- "nHUpYmfV59fe3RWaXhPs3Q==",
- "VbCoGr8apEcN7xfdaVwVXw==",
- "/2Chaw2M9DzsadFFkCu6WQ==",
- "rKAQxu80Q8g1EEhW5Wh8tg==",
- "RJJqFMeiCZHdsqs72J17MQ==",
- "GF2yvI9UWf1WY7V7HXmKPA==",
- "JyIDGL1m/w+pQDOyyeYupA==",
- "wR2Gxb07nkaPcZHlEjr8iA==",
- "PbDVq2Iw1eeM8c2o/XYdTA==",
- "BL3buzSCV78rCXNEhUhuKQ==",
- "i42XumprV/aDT5R0HcmfIQ==",
- "DuEKxykezAvyaFO2/5ZmKQ==",
- "6ACvJNfryPSjGOK39ov8Qg==",
- "YaUKOTyByjUvp1XaoLiW5Q==",
- "jNcMS2zX1iSZN9uYnb2EIg==",
- "VRnx+kd6VdxChwsfbo1oeQ==",
- "4Qinl7cWmVeLJgah8bcNkw==",
- "Fiy3hkcGZQjNKSQP9vRqyA==",
- "HaSc7MZphCMysTy2JbTJkw==",
- "VhYGC8KYe5Up+UJ2OTLKUw==",
- "K2gk9zWGd0lJFRMQ1AjQ/Q==",
- "NfxVYc3RNWZwzh2RmfXpiA==",
- "JGeqHRQpf4No74aCs+YTfA==",
- "7VHlLw20dWck+I8tCEZilA==",
- "V5HKdaTHjA8IzvHNd9C51g==",
- "9TalxEyFgy6hFCM73hgb7Q==",
- "R/y6+JJP8rzz1KITJ4qWBw==",
- "7bM/pn4G7g7Zl6Xf1r62Lg==",
- "CHsFJfsvZkPWDXkA6ZMsDQ==",
- "uXuPA/2KJbb7ZX+NymN3dw==",
- "o+nYS4TqJc6XOiuUzEpC3A==",
- "8N3mhHt29FZDHn1P2WH1wQ==",
- "uZ2gUA74/7Q33tI2TcGQlg==",
- "8B12CamjOGzJDnQ+RkUf4w==",
- "9FdpxlIFu11qIPdO7WC5nw==",
- "G+sGF13VXPH4Ih6XgFEXxg==",
- "y+1I05LDAYJ09tKMs3zW6g==",
- "gnkadeCgjdmLdlu/AjBZJg==",
- "1I+UVx3krrD4NhzO7dgfHQ==",
- "8LNNoHe6rEQyJ0ebl151Mw==",
- "yOE90OHQdyOfrAgwDvn2gA==",
- "ayBGGPEy++biljvGcwIjXA==",
- "o/Y4U6rWfsUCXJ72p5CUGw==",
- "5kvyy902llnYGQdn2Py04w==",
- "6k2cuk0McTThSMW/QRHfjA==",
- "2XrR2hjDEvx8MQpHk9dnjw==",
- "fv/PW8oexJYWf5De30fdLQ==",
- "861mBNvjIkVgkBiocCUj/Q==",
- "NKGY0ANVZ0gnUtzVx1pKSw==",
- "4DIPP/yWRgRuFqVeqIyxMQ==",
- "cgSEbLqqvDsNUyeA3ryJ6Q==",
- "xbBxUP9JyY0wDgHDipBHeg==",
- "c3WVxyC5ZFtzGeQlH5Gw+w==",
- "ZKeTDCboOgCptrjSfgu0xw==",
- "DjHszpS8Dgocv3oQkW/VZQ==",
- "Iqszlv4R49UevjGxIPMhIA==",
- "uChFnF0oCwARhAOz/d47eA==",
- "0egBaMnAf0CQEXf1pCIKnA==",
- "FnVNxl5AFH1AieYru2ZG+A==",
- "2Ct+pLXrK6Ku1f4qehjurQ==",
- "x2nSgcTjA3oGgI8mMgiqjw==",
- "AUGmvZkpkKBry5bHZn4DJA==",
- "x8kRVzohTdhkryvYeMvkMw==",
- "rXfWkabSPN+23Ei1bdxfmQ==",
- "ElTNyMR4Rg8ApKrPw88WPg==",
- "9jxA/t3TQx8dQ+FBsn/YCg==",
- "I07W2eDQwe6DVsm1zHKM8A==",
- "0p1jMr06OyBoXQuSLYN4aQ==",
- "odGhKtO4bDW5R8SYiI5yCg==",
- "5Q/Y2V0iSVTK8HE8JerEig==",
- "Ily2MKoFI1zr5LxBy93EmQ==",
- "8dUcSkd2qnX5lD9B+fUe+Q==",
- "80UE+Ivby3nwplO/HA7cPw==",
- "sS6QcitMPdvUBLiMXkWQkw==",
- "5VY++KiWgo7jXSdFJsPN3A==",
- "aY6B28XdPnuYnbOy9uSP8A==",
- "ZfRlID+pC1Rr4IY14jolMw==",
- "/YuQw7oAF08KDptxJEBS9g==",
- "16d+fhFlgayu3ttKVV/pbg==",
- "8dBIsHMEAk7aoArLZKDZtg==",
- "wRqaDZVHHurp5whOQ1kDbQ==",
- "lFUq6PGk9dBRtUuiEW7Cug==",
- "FoJZ61VrU8i084pAuoWhDQ==",
- "4mig4AMLUw+T/ect9p4CfA==",
- "Po0lhBfiMaXhl+vYh1D8gA==",
- "z9cd+Qj+ueX34Zf3997MNQ==",
- "1dsKN1nG6upj7kKTKuJWsQ==",
- "UtLYUlQJ02oKcjNR3l+ktg==",
- "O538ibsrI4gkE5tfwjxjmg==",
- "G736AX070whraDxChqUrqw==",
- "THs1r8ZEPChSGrrhrNTlsA==",
- "pVG1hL96/+hQ+58rJJy6/A==",
- "1BjsijOzgHt/0i36ZGffoQ==",
- "6rIWazDEWU5WPZHLkqznuQ==",
- "cdWUm6uLNzR/knuj2x75eA==",
- "nsnX3tKkN1elr18E31tXDw==",
- "0fnruVOCxEczscBuv4yL9A==",
- "SVuEYfQ9FGyVMo1672n0Yg==",
- "ZRWyfXyXqAaOEjkzWl949Q==",
- "S2MAIYeDQeJ1pl9vhtYtUg==",
- "vsRNZx4thFFFPneubKq1Fw==",
- "kuWGANwzNRpG4XmY7KjjNg==",
- "i6r+mZfyhZyqlYv56o0H+w==",
- "wqWqe0KRjZlUIrGgEOG9Mg==",
- "t5wh9JGSkQO78QoQoEqvXA==",
- "AGoVLd0QPcXnTedT5T95JQ==",
- "aRrcmH+Ud3mF1vEXcpEm4w==",
- "C65PZm8rZxJ6tTEb6d08Eg==",
- "oAHVGBSJ2cf4dVnb/KEYmw==",
- "BuDVDLl0OGdomEcr+73XhQ==",
- "bLsStF0DDebpO+xulqGNtg==",
- "xukOAM0QVsA72qEy0yku9A==",
- "LpoayYsTO8WLFLCSh2kf2w==",
- "LEVYAE54618FrlXkDN01Kw==",
- "Jm862vBTCYbv/V4T1t46+Q==",
- "X4kdXUuhcUqMSduqhfLpxA==",
- "cLR0Ry4/N5swqga1R6QDMw==",
- "0klouNfZRHFFpdHi4ZR2hA==",
- "JGx8sTyvr4bLREIhSqpFkw==",
- "ZiJ/kJ9GneF3TIEm08lfvQ==",
- "hP7dSa8lLn9KTE/Z0s4GVQ==",
- "600bwlyhcy754W1E6tuyYg==",
- "U49SfOBeqQV9wzsNkboi8Q==",
- "5DDb7fFJQEb3XTc3YyOTjg==",
- "6uT7LZiWjLnnqnnSEW4e/Q==",
- "tq5xUJt8GtjDIh1b48SthQ==",
- "eJFIQh/TR7JriMzYiTw4Sg==",
- "jdRzkUJrWxrqoyNH9paHfQ==",
- "RKVDdE1AkILTFndYWi9wFg==",
- "AEpTVUQhIEJGlXJB6rS26A==",
- "PD+yHtJxZJ2XEvjIPIJHsQ==",
- "dOS+mVCy3rFX9FvpkTxGXA==",
- "lz+SeifYXxamOLs1FsFmSQ==",
- "QTz21WkhpPjfK8YoBrpo+w==",
- "9wUIeSgNN36SFxy8v2unVg==",
- "ash1r2J6B0PUxJe8P0otVQ==",
- "y7yS9x3yshVhMpDbQtfYOQ==",
- "f07bdNVAe9x+cAMdF1bByQ==",
- "N2KovXW14hN/6+iWa1Yv3g==",
- "2DNbXVgesUa7PgYQ4zX5Lw==",
- "WQznrwqvMhUlM3CzmbhAOQ==",
- "FpWDTLTDmkUhH/Sgo+g1Gg==",
- "OVHqwV8oQMC5KSMzd5VemA==",
- "Bv4mNIC72KppYw/nHQxfpQ==",
- "MI+HSMRh8KTW+Afiaxd/Fw==",
- "10OltdxPXOvfatJuwPVKbQ==",
- "y4/HohCJxtt+cT7nLJB08w==",
- "RhcqXY4OsZlVVF7ZlkTeRw==",
- "/mrqas0eDX+sFUNJvCQY8g==",
- "ZIZx4MehWTVXPN9cVQBmyA==",
- "z20AAnvj7WsfJeOu3vemlA==",
- "dL6n/JsK+Iq6UTbQuo/GOw==",
- "rMm9bHK69h0fcMkMdGgeeA==",
- "ftsf2qztw3NC78ep/CZXWQ==",
- "/n1RLTTVpygre1dl36PDwQ==",
- "/FsJYFNe+7UvsSkiotNJEQ==",
- "Yy2pPhITTmkEwoudXizHqQ==",
- "lizovLQxu6L9sbafNQuShQ==",
- "XV5MYe0Q7YMtoBD6/iMdSw==",
- "5jHgQF4SfO/zy9xy9t+9dw==",
- "16iT/jCcPDrJEfi2bE5F+Q==",
- "syeBfQBUmkXNWCZ1GV8xSA==",
- "sr3UXbMg5zzkRduFx/as7g==",
- "xUXEE7OBBCudsQnuj5ycOA==",
- "ojZY7Gi2QJXE/fp6Wy31iA==",
- "RlNPyhgYOIn28R4vKCVtYA==",
- "KOm8PTa+ICgDrgK9QxCJZw==",
- "DJoy1NSZZw87oxWGlNHhfg==",
- "jEdanvXKyZdZJG6mj/3FWw==",
- "Omr+zPWVucPCSfkgOzLmSQ==",
- "71w3aSvuh2mBLtdqJCN3wA==",
- "xjTMO2mvtpvwQrounD4e8g==",
- "Zz/5VMbw1TqwazReplvsEg==",
- "hIjgi20+km+Ks23NJ4VQ6Q==",
- "00TVKawojyqrJkC7YqT41Q==",
- "YgVpC5d5V6K/BpOD663yQA==",
- "wX70jKLKJApHnhyK0r6t3A==",
- "lacCCRiWdquNm4YRO7FoKA==",
- "cWdlhVZD7NWHUGte24tMjg==",
- "t5U+VMsTtlWAAWSW+00SfQ==",
- "AMfL0rH+g8c0VqOUSgNzQw==",
- "0G93AxGPVwmr66ZOleM90A==",
- "9tiibT8V9VwnPOErWGNT3w==",
- "+dBv88reDrjEz6a2xX3Hzw==",
- "xX6atcCApI08oVLjjLteLg==",
- "+YrqTEJlJCv0A2RHQ8tr1A==",
- "aqcOby9QyEbizPsgO3g0yw==",
- "s/BZAhh1cTV3JCDUQsV8mA==",
- "x9VwDdFPp/rJ+SF16ooWYg==",
- "k/OVIllJvW6BefaLEPq7DA==",
- "rIMXaCaozDvrdpvpWvyZOQ==",
- "qQQwJ/aF87BbnLu3okXxaw==",
- "TIWSM78m0RprwgPGK/e0JA==",
- "r/b5px/UImGNjT/X5sYjuA==",
- "7K8l6KoP0BH82/WMLntfrg==",
- "gEHGeR2F82OgBeAlnYhRSw==",
- "1/SGIab+NnizimUmNDC4wA==",
- "WADmxH7R6B4LR+W6HqQQ6A==",
- "pcoBh5ic7baSD4TZWb3BSw==",
- "es/L9iW8wsyLeC5S4Q8t+g==",
- "D175i+2bZ7aWa4quSSkQpA==",
- "WQMffxULFKJ+bun6NrCURA==",
- "82hTTe1Nr4N2g7zwgGjxkw==",
- "oyYtf08AkWLR52bXm5+sKw==",
- "8uP4HUnSodw88yoiWXOIcw==",
- "x2NpqNnqRihktNzpxmepkQ==",
- "x5zMDuW66467ofgL3spLUQ==",
- "OMO4pqzfcbQ11YO4nkTXfg==",
- "N4/mQFyhDpPzmihjFJJn6w==",
- "NN/ymVQNa17JOTGr6ki3eQ==",
- "htDbVu1xGhCRd8qoMlBoMg==",
- "S47hklz3Ow+n5aY6+qsCoA==",
- "ji+1YHlRvzevs3q5Uw1gfA==",
- "3Y4w0nETru3SiSVUMcWXqw==",
- "XfBOCJwi2dezYzLe316ivw==",
- "kMUdiwM7WR8KGOucLK4Brw==",
- "V/xG5QFyx1pihimKmAo8ZA==",
- "sQskMBELEq86o1SJGQqfzg==",
- "6+jhreeBLfw64tJ+Nhyipw==",
- "8iYdEleTXGM+Wc85/7vU9w==",
- "D7piVoB2NJlBxK5owyo4+g==",
- "hDGa2yLwNvgBd/v6mxmQaQ==",
- "WLsh3UF4WXdHwgnbKEwRlQ==",
- "D5jaV+HtXkSpSxJPmaBDXg==",
- "jCgdKXsBCgf7giUKnr6paQ==",
- "XqW7UBTobbV4lt1yfh0LZw==",
- "EbGG4X18upaiVQmPfwKytg==",
- "dXDPnL1ggEoBqR13aaW9HA==",
- "Vik8tGNxO0xfdV0pFmmFDw==",
- "Swjn3YkWgj0uxbZ1Idtk+A==",
- "JPxEncA4IkfBDvpjHsQzig==",
- "F5FcNti7lUa9DyF2iEpBug==",
- "HJYgUxFZ66fRT8Ka73RaUg==",
- "Jbxl8Nw1vlHO9rtu0q/Fpg==",
- "fmC+85h5WBuk8fDEUWPjtQ==",
- "dZgMquvZmfLqP4EcFaWCiA==",
- "XF/yncdoT4ruPeXCxEhl9Q==",
- "QJEbr3+42P9yiAfrekKdRQ==",
- "Sr9c0ReRpkDYGAiqSy683g==",
- "Nr4zGo5VUrjXbI8Lr4YVWQ==",
- "NDZWIhhixq7NT8baJUR4VQ==",
- "GFRJoPcXlkKSvJRuBOAYHQ==",
- "WHutPin+uUEqtrA7L8878A==",
- "2rhjiY0O0Lo36wTHjmlNyw==",
- "XsF7R12agx/KkRWl0TyXRA==",
- "R6cO8GzYfOGTIi773jtkXw==",
- "zrZWcqQsUE3ocWE0fG+SOA==",
- "uNzpptKjihEfKRo5A1nWmw==",
- "gICaI06E9scnisonpvqCsA==",
- "TA9WjiLAFgJubLN4StPwLw==",
- "sBpytpE38xz0zYeT+0qc2A==",
- "Ej7W3+67kCIng3yulXGpRQ==",
- "nR3ACzeVF5YcLX6Gj6AGyQ==",
- "b0vZfEyuTja2JYMa20Rtbg==",
- "f1h+Vp+xmdZsZIziHrB2+g==",
- "WzjvUJ4jZAEK7sBqw+m07A==",
- "OzMR5D2LriC5yrVd5hchnA==",
- "cw1gBLtxH/m4H7dSM7yvFg==",
- "CZbd+UoTz0Qu1kkCS3k8Xg==",
- "WtT0QAERZSiIt2SFDiAizg==",
- "QsquNcCZL9wv7oZFqm64vQ==",
- "FXzaxi3nAXBc8WZfFElQeA==",
- "Ml3mi1lGS1IspHp3dYYClg==",
- "XGAXhUFjORwKmAq9gGEcRg==",
- "wOhbpTzmFla8R0kI9OiHaA==",
- "qoK2keBg3hdbn7Q24kkVXg==",
- "ZAQHWU6RMg4IadOxuaukyw==",
- "RiahBXX2JbPzt8baPiP/8g==",
- "Qx6rVv9Xj8CBjqikWI9KFA==",
- "ZRnR6i+5WKMRfs3BDRBCJg==",
- "91LQuW6bMSxl10J/UDX23A==",
- "0dIeIM5Zvm5nSVWLy94LWg==",
- "Ja3ECL7ClwDrWMTdcSQ6Ug==",
- "f6iLrMpxKhFxIlfRsFAuew==",
- "iSeH0JFSGK73F470Rhtesw==",
- "DwOTyyCoUfaSShHZx9u6xg==",
- "rdeftHE7gwAT67wwhCmkYQ==",
- "kUhyc3G8Zvx8+q5q5nVEhw==",
- "W8bATujVUT80v2XGJTKXDg==",
- "dMRx4Mf6LrN64tiJuyWmDw==",
- "9cvHJmim9e0pOaoUEtiM6A==",
- "RHToSGASrwEmvzjX6VPvNQ==",
- "V7eji28JSg3vTi30BCS7gw==",
- "4+htiqjEz9oq0YcI/ErBVg==",
- "jKJn4czwUl/6wtZklcMsSg==",
- "bvyB6OEwhwCIfJ6KRhjnRw==",
- "59ipbMH7cKBsF9bNf4PLeQ==",
- "M/cQja3uIk1im9++brbBOA==",
- "AChOz8avRYsvxlbWcorQ3w==",
- "FcKjlHKfQAGoovtpf+DxWQ==",
- "y+cl1/Knb9MZPz8nBB0M+w==",
- "b8BZV1NfBdLi70ir4vYvZg==",
- "aFJuE/s+Kbge4ppn+wulkA==",
- "CWBGcRFYwZ0va6115vV/oQ==",
- "glnqaRfwm6NxivtB2nySzw==",
- "mPk1IsU5DmDFA/Ym5+1ojw==",
- "LGwcvetzQ3QqKjNh5vA8vw==",
- "yctId8ltkl3+xqi9bj+RqA==",
- "spJI3xFUlpCDqzg0XCxopA==",
- "V8m51xgUgywRoV6BGKUrgg==",
- "rgcXxjx3pDLotH7TTfAoZw==",
- "/TSsi/AwKHtP6kQaeReI3w==",
- "8dbyfox/isKLsnVjQNsEXg==",
- "MOrAbuJTyGKPC6MgYJlx5Q==",
- "uNWFZlP7DA96sf+LWiAhtQ==",
- "hNHqznsrIVRSQdII6crkww==",
- "GT6WUDXiheKAM7tPg3he9A==",
- "JC8Q+8yOJ52NvtVeyHo68w==",
- "HMQarkPWOUDIg5+5ja2dBQ==",
- "nknBKPgb7US42v8A0fTl/w==",
- "fDOUzPTU2ndpbH0vgkgrJQ==",
- "GTNttXfMniNhrbhn92Aykg==",
- "D2JcY4zWwqaCKebLM8lPiQ==",
- "/c34NtdUZAHWIwGl3JM8Tw==",
- "/G26n5Xoviqldr5sg/Jl3w==",
- "GF0lY77rx1NQzAsZpFtXIQ==",
- "BMOi5JmFUg5sCkbTTffXHw==",
- "R+beucURp/H5jLs4kW6wmg==",
- "xfYZ6qhWNBqqJ0PdWRjOwA==",
- "Ahpi9+nl13kPTdzL+jgqMw==",
- "oIU19xAvLJwQSZzIH577aA==",
- "50xwiYvGQytEDyVgeeOnMg==",
- "M0ESOGwJ4WZ4Ons1ljP0bQ==",
- "fS471/rN4K2m10mUwGFuLg==",
- "RrE3B3X/SJi3CqCUlTYwaw==",
- "oDca3JEdRb4vONT9GUUsaQ==",
- "pHo1O5zrCHCiLvopP2xaWw==",
- "7sCJ4RxbxRqVnF4MBoKfuQ==",
- "7R5rFaXCxM3moIUtoCfM2g==",
- "4rrSL6N0wyucuxeRELfAmw==",
- "9Gkw+hvsR/tFY1cO89topg==",
- "aw4CzX8pYbPVMuNrGCEcWg==",
- "KyLQxi5UP+qOiyZl0PoHNQ==",
- "T1pMWdoNDpIsHF8nKuOn2A==",
- "Qv6wWP4PpycDGxe7EZNSCw==",
- "ZJc7GV0Yb6MrXkpDVIuc8g==",
- "aXrbsro7KLV8s4I4NMi4Eg==",
- "7k5rBuh8FbTTI4TP87wBPQ==",
- "NRyFx6jqO/oo9ojvbYzsAg==",
- "P7eMlOz9YUcJO+pJy0Kpkw==",
- "jpjpNjL1IKzJdGqWujhxCw==",
- "9k1u/5TgPmXrsx3/NsYUhg==",
- "c1wbFbN7AdUERO/xVPJlgw==",
- "Yw4ztKv6yqxK9U1L0noFXg==",
- "GnJKlRzmgKN9vWyGfMq3aA==",
- "91VcAVv7YDzkC1XtluPigw==",
- "h1NNwMy0RjQmLloSw1hvdg==",
- "pzC8Y0Vj9MPBy3YXR32z6w==",
- "UTmTgvl+vGiCDQpLXyVgOg==",
- "CzWhuxwYbNB/Ffj/uSCtbw==",
- "VOB+9Bcfu8aHKGdNO0iMRw==",
- "X2Tawm2Cra6H7WtXi1Z4Qw==",
- "6cTETZ9iebhWl+4W5CB+YQ==",
- "X4hrgqMIcApsjA9qOWBoCw==",
- "1buQEv2YlH/ljTgH0uJEtw==",
- "FH5Z60RXXUiDk+dSZBxD3g==",
- "FI2WhaSMb3guFLe3e9il8Q==",
- "O/EizzJSuFY8MpusBRn7Tg==",
- "b6rrRA0W247O+FfvDHbVCQ==",
- "ng1Q0A7ljho3TUWWYl46sw==",
- "1Ym0lyBJ9aFjhJb/GdUPvQ==",
- "+OXdvbTxHtSoLg7bZMho4w==",
- "cuQslgfqD2VOMhAdnApHrA==",
- "pCQmlnn3BxhsV2GwqjRhXg==",
- "6PzjncEw2wHZg7SP7SQk9w==",
- "nqtQI1bSM7DCO9P1jGV97Q==",
- "O1ckWUwuhD44MswpaD6/rw==",
- "RUmhye56tQu9xXs4SRJpOQ==",
- "llujnWE17U8MIHmx4SbrSA==",
- "UwqBVd4Wfias4ElOjk2BzQ==",
- "kBAB2PSjXwqoQOXNrv80AA==",
- "w1zN28mSrI/gqHsgs4ME3A==",
- "301utVPZ93AnPLYbsiJggw==",
- "qIFpKKwUmztsBpJgMaVvSg==",
- "QmcURiMzmVeUNaYPSOtTTg==",
- "x/MpsQvziUpW40nNUHDS5Q==",
- "t1O9jSNjg4DTIv/Za4NbtA==",
- "1B5gxGQSGzVKoNd5Ol4N7g==",
- "81iQLU+YwxNwq4of6e9z7A==",
- "x0eIHCvQLd2jdDaXwSWTYQ==",
- "96ORaz1JRHY1Gk8H74+C2g==",
- "bNDKcFu8T5Y6OoLSV+o/Sw==",
- "WrJMOuXSLKKzgmIDALkyNw==",
- "+gpHnUj2GWocP74t5XWz4w==",
- "z5DveTu377UW8IHnsiUGZg==",
- "irnD9K8bsT+up/JUrxPw6A==",
- "ginkFyNVMwkZLE49AbfqfA==",
- "2hEzujfG3mR5uQJXbvOPTQ==",
- "E9yeifEZtpqlD0N3pomnGw==",
- "OpC/sL320wl5anx6AVEL+A==",
- "D7wN7b5u5PKkMaLJBP9Ksw==",
- "83WGpQGWyt6mCV+emaomog==",
- "X6ulLp4noBgefQTsbuIbYQ==",
- "BH+rkZWQjTp7au6vtll/CQ==",
- "Ex3x5HeDPhgO2S9jjCFy4g==",
- "YNqIHCmBp/EbCgaPKJ7phw==",
- "312g8iTB9oJgk/OqcgR7Cw==",
- "LcF0OqPWrcpHby8RwXz1Yg==",
- "gaEtlJtD6ZjF5Ftx0IFt0A==",
- "bvbMJZMHScwjJALxEyGIyg==",
- "StoXC7TBzyRViPzytAlzyQ==",
- "XqFSbgvgZn0CpaZoZiRauQ==",
- "AqHVaj3JcR44hnMzUPvVYg==",
- "jTg9Y6EfpON4CRFOq0QovA==",
- "q/siBRjx6wNu+OTvpFKDwA==",
- "goSgZ8N5UbT5NMnW3PjIlQ==",
- "9onh6QKp70glZk9cX3s34A==",
- "o5XVEpdP4OXH0NEO4Yfc/A==",
- "a5gZ5uuRrXEAjgaoh7PXAg==",
- "PaROi5U16Tk35p0EKX5JpA==",
- "dtnE401dC0zRWU0S/QOTAg==",
- "7J3FoFGuTIW36q0PZkgBiw==",
- "hiYg+aVzdBUDCG0CXz9kCw==",
- "vhdFtKVH4bVatb4n8KzeXw==",
- "DWKsPfKDAtfuwgmc2dKUNg==",
- "M2JMnViESVHTZaru6LDM6w==",
- "G/PA+kt0N+jXDVKjR/054A==",
- "6rqK8sjLPJUIp7ohkEwfZg==",
- "wajwXfWz2J+O+NVaj6j2UQ==",
- "C4QEzQKGxyRi2rjwioHttA==",
- "N/HgDydvaXuJvTCBhG/KtA==",
- "6erpZS36qZRXeZ9RN9L+kw==",
- "bbBsi6tXMVWyq3SDVTIXUg==",
- "aySnrShOW4/xRSzl/dtSKQ==",
- "rxfACPLtKXbYua18l3WlUw==",
- "L4+C6I7ausPl6JbIbmozAg==",
- "R3ijnutzvK6IKV3AKHQZSA==",
- "leDlMcM+B1mDE8k5SWtUeg==",
- "KGI/cXVz6v6CfL8H6akcUQ==",
- "NtwqUO3SKZE/9MXLbTJo/g==",
- "dJHKDkfMFJeoULg7U4wwDQ==",
- "IEz72W2/W8xBx5aCobUFOQ==",
- "wUYhs4j3W9nIywu1HIv2JA==",
- "GzbeM7snhe+M+J7X+gAsQw==",
- "3/1puZTGSrD9qNKPGaUZww==",
- "eKQCVzLuzoCLcB4im8147A==",
- "CCK+6Dr72G3WlNCzV7nmqw==",
- "CJoZn5wdTXbhrWO5LkiW0g==",
- "bJ1cZW7KsXmoLw0BcoppJg==",
- "OlpA9HsF8MBh7b45WZSSlg==",
- "JZRjdJLgZ+S0ieWVDj8IJg==",
- "uhT12XY79CtbwhcSfAmAXQ==",
- "isep9d+Q7DEUf0W7CJJYzw==",
- "K9A87aMlJC8XB9LuFM913g==",
- "uqe3rFveJ2JIkcZQ3ZMXHQ==",
- "0e8hM3E5tnABRyy29A8yFw==",
- "4iiCq+HhC+hPMldNQMt0NA==",
- "X4o0OkTz0ec70mzgwRfltA==",
- "1E3pMgAHOnHx3ALdNoHr8Q==",
- "xNilc7UOu1kyP0+nK5MrLw==",
- "DQlZWBgdTCoYB1tJrNS5YQ==",
- "iruDC5MeywV4yA8o1tw/KQ==",
- "z+1oDVy8GJ5u/UDF+bIQdA==",
- "uExgqZkkJnZj252l5dKAGg==",
- "ZgdpqFrVGiaHkh9o3rDszg==",
- "5N2oi2pB69NxeNt08yPLhw==",
- "G37U8XTFyshfCs7qzFxATg==",
- "0ZEC3hy411LkOhKblvTcqg==",
- "ITZ3P47ALS0JguFms6/cDA==",
- "WWN44lbUnEdHmxSfMCZc6w==",
- "r2f2MyT+ww1g9uEBzdYI1w==",
- "ZvvxwDd0I6MsYd7aobjLUA==",
- "uQs79rbD/wEakMUxqMI48A==",
- "022B0oiRMx8Xb4Af98mTvQ==",
- "afMd/Hr3rYz/l7a3CfdDjg==",
- "xmsYnsJq78/f9xuKuQ2pBQ==",
- "dFetwmFw+D6bPMAZodUMZQ==",
- "TBQpcKq2huNC5OmI2wzRQw==",
- "skrQRB9xbOsiSA19YgAdIQ==",
- "anyANMnNkUqr3JuPJz5Qzw==",
- "6QUGE2S8oFYx4T4nW56cCw==",
- "rwtF86ZAbWyKI6kLn4+KBw==",
- "6txm8z4/LGCH0cpaet/Hsg==",
- "wdRyYjaM11VmqkkxV/5bsA==",
- "+k5lDb+QdNc9iZ01hL5yBg==",
- "k/pBSWE2BvUsvJhA9Zl5uw==",
- "jQjyjWCEo9nWFjP4O8lehw==",
- "R6Me6sSGP5xpNI8R0xGOWw==",
- "9+hjTVMQUsvVKs7Tmp52tg==",
- "VQIpquUqmeyt/q6OgxzduQ==",
- "KXvdjZ3rRKn60djPTCENGA==",
- "5HovoyHtul8lXh+z8ywq9A==",
- "1+XWdu4qCqLLVjqkKz3nmA==",
- "LCj4hI520tA685Sscq6uLw==",
- "b53qqLnrTBthRXmmnuXWvw==",
- "WTr3q/gDkmB4Zyj7Ly20+w==",
- "FbxScyuRacAQkdQ034ShTA==",
- "qaTdVEeZ6S8NMOxfm+wOMA==",
- "ZNrjP1fLdQpGykFXoLBNPw==",
- "/Bwpt5fllzDHq2Ul6v86fA==",
- "/mFp3GFkGNLhx2CiDvJv4A==",
- "RppDe/WGt1Ed6Vqg1+cCkQ==",
- "6M6QapJ5xtMXfiD3bMaiLA==",
- "Ghuj9hAyfehmYgebBktfgA==",
- "GncGQgmWpI/fZyb/6zaFCg==",
- "R1TCCfgltnXBvt5AiUnCtQ==",
- "5NEP7Xt7ynj6xCzWzt21hQ==",
- "4yEkKp2FYZ09mAhw2IcrrA==",
- "y2Tn2gmhKs5WKc01ce74rg==",
- "wnfYUctNK+UPwefX5y4/Rw==",
- "BV1moliPL15M14xkL+H1zw==",
- "80C9TB9/XT1gGFfQDJxRoA==",
- "yL1DwlIIREPuyuCFULi0uw==",
- "D09afzGpwCEH0EgZUSmIZA==",
- "eCy/T+a8kXggn1L8SQwgvA==",
- "+dIEf5FBrHpkjmwUmGS6eg==",
- "kzXsrxWRnWhkA82LsLRYog==",
- "Nf9fbRHm844KZ2sqUjNgkA==",
- "XAq/C+XyR6m3uzzLlMWO5Q==",
- "jiV+b/1EFMnHG6J0hHpzBg==",
- "HK0yf7F97bkf1VYCrEFoWA==",
- "Cz1G77hsDtAjpe0WzEgQog==",
- "xdCCdP8SNBOK3IsX6PiPQA==",
- "8snljTGo/uICl9q0Hxy7/A==",
- "sLdxIKap0ZfC3GpUk3gjog==",
- "IA1jmtfpYkz/E2wD0+27WA==",
- "PPa7BDMpRdxJdBxkuWCxKA==",
- "CuGIxWhRLN7AalafBZLCKQ==",
- "MWcV03ULc0vSt/pFPYPvFA==",
- "QVwuN66yPajcjiRnVk/V8g==",
- "aLY2pCT0WfFO5EJyinLpPg==",
- "dGrf9SWJ13+eWS6BtmKCNw==",
- "YtZ8CYfnIpMd2FFA5fJ+1Q==",
- "Umd+5fTcxa3mzRFDL9Z8Ww==",
- "Al8+d/dlOA5BXsUc5GL8Tg==",
- "/KYZdUWrkfxSsIrp46xxow==",
- "kr8tw1+3NxoPExnAtTmfxg==",
- "PwvPBc+4L73xK22S9kTrdA==",
- "VWNDBOtjiiI4uVNntOlu/A==",
- "lJFPmPWcDzDp5B2S8Ad8AA==",
- "Mofqu40zMRrlcGRLS42eBw==",
- "BuENxPg7JNrWXcCxBltOPg==",
- "nmD7fEU4u7/4+W/pkC4/0Q==",
- "axEl7xXt/bwlvxKhI7hx4g==",
- "W04GeDh+Tk/I1S85KlozRA==",
- "tVw8U1AsslIFmQs4H1xshg==",
- "TSPFvkgw6uLsJh66Ou0H9w==",
- "IYIbEaErHoFBn8sTT9ICIQ==",
- "WBu0gJmmjVdVbjDmQOkU6w==",
- "ZgjifTVKmxOieco81gnccQ==",
- "ZrCnZB/U/vcqEtI1cSvnww==",
- "2D6yhuABiaFFoXz0Lh0C+w==",
- "SfwnYZCKP1iUJyU1yq4eKg==",
- "tsiqwelcBAMU/HpLGBtMGw==",
- "S9L29U2P5K8wNW+sWbiH7w==",
- "sGLPmr568+SalaQr8SE/PA==",
- "Hm6MG6BXbAGURVJKWRM6ZA==",
- "euxzbIq4vfGYoY3s1QmLcw==",
- "/FchS2nPezycB8Bcqc2dbg==",
- "ZKvox7BaQg4/p5jIX69Umw==",
- "HkbdaMuDTPBDnt3wAn5RpQ==",
- "eddhS+FkXxiUnbPoCd5JJw==",
- "Muf2Eafcf9G3U2ZvQ9OgtQ==",
- "a7Pv1SOWYnkhIUC22dhdDA==",
- "O839JUrR+JS30/nOp428QA==",
- "2qK2ZEY9LgdKSTaLf6VnLA==",
- "BTiGLT6XdZIpFBc91IJY6g==",
- "EqYq2aVOrdX5r7hBqUJP7g==",
- "SIuKH/Qediq0TyvqUF93HQ==",
- "c5ymZKqx/td1MiS2ERiz9A==",
- "rqucO37p86LpzehR/asCSQ==",
- "1tpM0qgdo7JDFwvT0TD78g==",
- "Ar1Eb/f/LtuIjXnnVPYQlA==",
- "V8q+xz4ljszLZMrOMOngug==",
- "P5WPQc5NOaK7WQiRtFabkw==",
- "Xo8ZjXOIoXlBjFCGdlPuZw==",
- "jTmPbq+wh30+yJ/dRXk1cA==",
- "KSumhnbKxMXQDkZIpDSWmQ==",
- "Kh/J1NpDBGoyDU+Mrnnxkg==",
- "3BjLFon1Il0SsjxHE2A1LQ==",
- "dml2gqLPsKpbIZ93zTXwCQ==",
- "ZyoaR1cMiKAsElmYZqKjLA==",
- "vnOJ3e9Zd4wPx8PX7QgZzQ==",
- "2melaInV0wnhBpiI3da6/A==",
- "mUek9NkXm8HiVhQ6YXiyzA==",
- "RZTpYKxOAH9JgF1QFGN+hw==",
- "a/Y6IAVFv0ykRs9WD+ming==",
- "yhRi5M9Etuu9HSu4d24i3w==",
- "+1gcqAqaRZwCj5BGiZp3CA==",
- "o1zeXHJEKevURAAbUE/Vog==",
- "cvOg7N4DmTM+ok1NBLyBiQ==",
- "uPdjKJIGzN7pbGZDZdCGaA==",
- "REnDNe9mGfqVGZt+GdsmjQ==",
- "XqTK/2QuGWj50tGmiDxysA==",
- "bL2FuwsPT7a7oserJQnPcw==",
- "uO+uK1DntCxVRr1KttfUIw==",
- "Xconi1dtldH90Wou9swggw==",
- "HRF3WL/ue3/QlYyu7NUTrA==",
- "5LuFDNKzMd2BzpWEIYO2Ww==",
- "dNTU+/2DdZyGGTdc+3KMhQ==",
- "H+NHjk/GJDh/GaNzMQSzjg==",
- "/Ph/6l/lFNVqxAje1+PgFA==",
- "4WRdAjiUmOQg2MahsunjAg==",
- "j+lDhAnWAyso+1N8cm85hQ==",
- "nFBXCPeiwxK9mLXPScXzTA==",
- "vGKknndb4j6VTV8DxeT4fQ==",
- "fdqt93OrpG13KAJ5cASvkg==",
- "1MIn73MLroxXirrb+vyg2Q==",
- "Q7teXmTHAC5qBy+t7ugf0w==",
- "bWwtTFlhO3xEh/pdw0uWaQ==",
- "Omi2ZB9kdR1HrVP2nueQkA==",
- "+ZozWaPWw8ws1cE5DJACeg==",
- "3FH4D31nKV13sC9RpRZFIg==",
- "4kXlJNuT79XXf1HuuFOlHw==",
- "36XDmX6j542q+Oei1/x0gw==",
- "MqqDg9Iyt4k3vYVW5F+LDw==",
- "cvrGmub2LoJ+FaM5HTPt9A==",
- "uC2lzm7HaMAoczJO6Z/IhQ==",
- "MnStiFQAr3QlaRZ02SYGaQ==",
- "ZuayB6IpbeITokKGVi9R5w==",
- "FtxpWdhEmC6MT61qQv4DGA==",
- "KujFdhhgB9q4oJfjYMSsLg==",
- "ZV8mEgJweIYk0/l0BFKetA==",
- "gDLjxT7vm07arF4SRX5/Vg==",
- "/MEOgAhwb7F0nBnV4tIRZA==",
- "k2KP9oPMnHmFlZO6u6tgyw==",
- "fbTm027Ms0/tEzbGnKZMDA==",
- "HOi+vsGAae4vhr+lJ5ATnQ==",
- "9Bet5waJF5/ZvsYaHUVEjQ==",
- "Wd0dOs7eIMqW5wnILTQBtg==",
- "z/e5M2lE9qh3bzB97jZCKA==",
- "b16O4LF7sVqB7aLU2f3F1A==",
- "lsBTMnse2BgPS6wvPbe7JA==",
- "0nOg18ZJ/NicqVUz5Jr0Hg==",
- "MFeXfNZy6Q9wBfZmPQy3xg==",
- "ksOFI9C7IrDNk4OP6SpPgw==",
- "NquRbPn8fFQhBrUCQeRRoQ==",
- "ccmy4GVuX967KaQyycmO0w==",
- "DY0IolKTYlW+jbKLPAlYjQ==",
- "aJFbBhYtMbTyMFBFIz/dTA==",
- "9pdeedz1UZUlv8jPfPeZ1g==",
- "qZ2q5j2gH3O56xqxkNhlIA==",
- "N7fHwb397tuQHtBz1P80ZQ==",
- "uOkMpYy/7DYYoethJdixfQ==",
- "E9ajQQMe02gyUiW3YLjO/A==",
- "dFSavcNwGd8OaLUdWq3sng==",
- "TAD0Lk95CD86vbwrcRogaQ==",
- "jLI3XpVfjJ6IzrwOc4g9Pw==",
- "CzP13PM/mNpJcJg8JD3s6w==",
- "GSWncBq4nwomZCBoxCULww==",
- "9k17UqdR1HzlF7OBAjpREA==",
- "TrWS+reCJ0vbrDNT5HDR9w==",
- "CXMKIdGvm60bgfsNc+Imvg==",
- "6NP81geiL14BeQW6TpLnUA==",
- "hW9DJA1YCxHmVUAF7rhSmQ==",
- "8M0kSvjn5KN8bjsMdUqKZQ==",
- "eS/vTdSlMUnpmnl1PbHjyw==",
- "h2B0ty0GobQhDnFqmKOpKQ==",
- "n7KL1Kv027TSxBVwzt9qeA==",
- "yYmnM/WOgi+48Rw7foGyXA==",
- "FhthAO5IkMyW4dFwpFS7RA==",
- "81ZH3SO0NrOO+xoR/Ngw1g==",
- "t7HaNlXL16fVwjgSXmeOAQ==",
- "N+K1ibXAOyMWdfYctNDSZQ==",
- "yQCLV9IoPyXEOaj3IdFMWw==",
- "3+zsjCi7TnJhti//YXK35w==",
- "600mjiWke4u0CDaSQKLOOg==",
- "K4VS+DDkTdBblG93l2eNkA==",
- "5KOgetfZR+O2wHQSKt41BQ==",
- "kj5WqpRCjWAfjM7ULMcuPQ==",
- "AxEjImKz4tMFieSo7m60Sg==",
- "jp5Em/0Ml4Txr1ptTUQjpg==",
- "jQVlDU+HjZ2OHSDBidxX5A==",
- "4NHQwbb3zWq2klqbT/pG6g==",
- "PeJS+mXnAA6jQ0WxybRQ8w==",
- "l6Ssc04/CnsqUua9ELu2iQ==",
- "nFPDZGZowr3XXLmDVpo7hg==",
- "yYBIS9PZbKo7Gram7IXWPA==",
- "/HU2+fBqfWTEuqINc0UZSA==",
- "adT+OjEB2kqpeYi4kQ6FPg==",
- "GW1Uaq622QamiiF24QUA0g==",
- "rTwJggSxTbwIYdp07ly0LA==",
- "4yrFNgqWq17zVCyffULocA==",
- "vvh9vAIrXjIwLVkuJb5oDQ==",
- "C7UaoIEXsVRxjeA0u99Qmw==",
- "x1A74vg/hwwjAx6GrkU8zw==",
- "7XRiYvytcwscemlxd9iXIQ==",
- "64AA4jLHXc1Dp15aMaGVcA==",
- "u/QxrP1NOM/bOJlJlsi/jQ==",
- "5M3dFrAOemzQ0MAbA8bI5w==",
- "wyqmQGB6vgRVrYtmB2vB7w==",
- "8vLA9MOdmLTo3Qg+/2GzLA==",
- "/u5W2Gab4GgCMIc4KTp2mg==",
- "lhAOM81Ej6YZYBu45pQYgg==",
- "MArbGuIAGnw4+fw6mZIxaw==",
- "ZZImGypBWwYOAW43xDRWCQ==",
- "L2IeUnATZHqOPcrnW2APbA==",
- "bQKkL+/KUCsAXlwwIH0N3w==",
- "f09F7+1LRolRL5nZTcfKGA==",
- "hPnPQOhz4QKhZi02KD6C+A==",
- "78b8sDBp28zUlYPV5UTnYw==",
- "iVDd2Zk7vwmEh97LkOONpQ==",
- "LHQETSI5zsejvDaPpsO29g==",
- "Yjm5tSq1ejZn3aWqqysNvA==",
- "gkrg0NR0iCaL7edq0vtewA==",
- "Lo1xTCEWSxVuIGEbBEkVxA==",
- "8GyPup4QAiolFJ9v80/Nkw==",
- "3L3KEBHhgDwH615w4OvgZA==",
- "hJSP7CostefBkJrwVEjKHA==",
- "9oQ/SVNJ4Ye9lq8AaguGAQ==",
- "n7Bns42aTungqxKkRfQ5OQ==",
- "K5lhaAIZkGeP5rH2ebSJFw==",
- "ZaPsR9X77SNt7dLjMJUh8A==",
- "18ndtDM9UaNfBR1cr3SHdA==",
- "0QbH4oI8IjZ9BRcqRyvvDQ==",
- "J/eAtAPswMELIj8K2ai+Xg==",
- "qenHZKKlTUiEFv6goKM/Mw==",
- "vjrSYGUpeKOtJ2cNgLFg2g==",
- "DA+3fjr7mgpwf6BZcExj0w==",
- "rh7bzsTQ1UZjG7amysr0Gg==",
- "tFMJRXfWE9g78O1uBUxeqQ==",
- "e/nWuo5YalCAFKsoJmFyFA==",
- "gqehq46BhFX2YLknuMv02w==",
- "Uudn69Kcv2CGz2FbfJSSEA==",
- "Otz/PgYOEZ1CQDW54FWJIQ==",
- "IwfeA6d0cT4nDTCCRhK+pA==",
- "jgNijyoj2JrQNSlUv4gk4A==",
- "KzWdWPP2gH0DoMYV4ndJRg==",
- "pv/m2mA/RJiEQu2Qyfv9RA==",
- "ATmMzriwGLl+M3ppkfcZNA==",
- "tVvWdA+JqH0HR2OlNVRoag==",
- "n6QVaozMGniCO0PCwGQZ6w==",
- "gU3gu8Y5CYVPqHrZmLYHbQ==",
- "cBBOQn7ZjxDku0CUrxq2ng==",
- "w+jzM0I5DRzoUiLS/9QIMQ==",
- "MLlVniZ08FHAS5xe+ZKRaA==",
- "wMyJLQJdmrC2TSeFkIuSvQ==",
- "dG98w8MynOoX7aWmkvt+jg==",
- "zm+z+OOyHhljV2TjA3U9zw==",
- "Tk5MAqd1gyHpkYi8ErlbWg==",
- "g6zSo8BvLuKqdmBFM1ejLA==",
- "d0VAZLbLcDUgLgIfT1GmVQ==",
- "SNPYH4r/J9vpciGN2ybP5Q==",
- "XA2hUgq3GVPpxtRYiqnclg==",
- "fVCRaPsTCKEVLkoF4y3zEw==",
- "FpgdsQ2OG+bVEy3AeuLXFQ==",
- "JquDByOmaQEpFb47ZJ4+JA==",
- "e369ZIQjxMZJtopA//G55Q==",
- "Nsd+DfRX6L54xs+iWeMjCQ==",
- "+/UCpAhZhz368iGioEO8aQ==",
- "e5l9ZiNWXglpw6nVCtO8JQ==",
- "Cl1u5nGyXaoGyDmNdt38Bw==",
- "6sNP0rzCCm3w976I2q2s/w==",
- "qcpeZWUlPllQYZU6mHVwUw==",
- "kzYddqiMsY3EYrpxve2/CQ==",
- "3iC21ByW/YVL+pSyppanWw==",
- "3HPOzIZxoaQAmWRy9OkoSg==",
- "xsCZVhCk2qJmOqvUjK3Y8Q==",
- "i2sSvrTh/RdLJX0uKhbrew==",
- "7Y87wVJok20UfuwkGbXxLg==",
- "ibsb1ncaLZXAYgGkMO7tjQ==",
- "+VfRcTBQ80KSeJRdg0cDfw==",
- "kgKWQJJQKLUuD2VYKIKvxA==",
- "ARKIvf4+zRF8eCvUITWPng==",
- "1fztTtQWNMIMSAc5Hr6jMQ==",
- "md6zNd7ZBn3qArYqQz7/fw==",
- "kvAaIJb+aRAfKK104dxFAA==",
- "UIXytIHyVODxlrg+eQoARA==",
- "Dk0L/lQizPEb3Qud6VHb1Q==",
- "64YsV2qeDxk2Q6WK/h7OqA==",
- "90dtIMq0ozJXezT2r79vMQ==",
- "wy/Z8505o4sVovk4UuBp1A==",
- "ytDXLDBqWiU1w3sTurYmaw==",
- "9pk75mBzhmcdT+koHvgDlw==",
- "DQeib845UqBMEl96sqsaSg==",
- "UPYR575ASaBSZIR3aX1IgQ==",
- "swsVVsPi/5aPFBGP+jmPIw==",
- "1cj1Fpd3+UiBAOahEhsluA==",
- "ifuJCv9ZA84Vz1FYAPsyEA==",
- "uu+ncs63SdQIvG6z4r7Q3Q==",
- "UvC1WADanMrhT+gPp/yVqA==",
- "llOvGOUDVfX68jKnAlvVRA==",
- "SusSOsWNoAerAIMBVWHtfA==",
- "VznvTPAAwAev+yhl9oZT0w==",
- "luR/kvHLwA6tSdLeTM4TzA==",
- "PcdBtV8pfKU0YbDpsjPgwg==",
- "5l6kDfjtZjkTZPJvNNOVFw==",
- "4FBBtWPvqJ3dv4w25tRHiQ==",
- "JJbzQ/trOeqQomsKXKwUpQ==",
- "0bj069wXgEJbw7dpiPr8Tg==",
- "tejpAZp7y32SO2+o4OGvwQ==",
- "kq26VyDyJTH/eM6QvS2cMw==",
- "+zBkeHF4P8vLzk1iO1Zn3Q==",
- "BzkNYH03gF/mQY71RwO3VA==",
- "RnxOYPSQdHS6fw4KkDJtrA==",
- "65KhGKUBFQubRRIEdh9SwQ==",
- "k1DPiH6NkOFXP/r3N12GyA==",
- "DqzWt1gfyu/e7RQl5zWnuQ==",
- "gnez1VrH+UHT8C/SB9qGdA==",
- "vZtL0yWpSIA+9v8i23bZSg==",
- "FNvQqYoe0s/SogpAB7Hr1Q==",
- "6nwR+e9Qw0qp8qIwH9S/Mg==",
- "BPT4PQxeQcsZsUQl33VGmg==",
- "rOYeIcB+Rg5V6JG2k4zS2w==",
- "Je1UESovkBa9T6wS0hevLw==",
- "HFHMGgfOeO0UPrray1G+Zw==",
- "NBmB/cQfS+ipERd7j9+oVg==",
- "iIm8c9uDotr87Aij+4vnMw==",
- "S3VQa6DH+BdlSrxT/g6B5g==",
- "BwRA+tMtwEvth28IwpZx+w==",
- "vg3jozLXEmAnmJwdfcEN0g==",
- "gW0oKhtQQ7BxozxUWw5XvQ==",
- "Q6vGRQiNwoyz7bDETGvi5g==",
- "Ak3rlzEOds6ykivfg39xmw==",
- "G4qzBI1sFP2faN+tlRL/Bw==",
- "ND9l4JWcncRaSLATsq0LVw==",
- "yQmNZnp/JZywbBiZs3gecA==",
- "ZoNSxARrRiKZF5Wvpg7bew==",
- "GhpJfRSWZigLg/azTssyVA==",
- "QyyiJ5I/OZC50o89fa5EmQ==",
- "4kj0S8XlmhHXoUP7dQItUw==",
- "Dt8Q5ORzTmpPR2Wdk0k+Aw==",
- "/hFhjFGJx2wRfz6hyrIpvA==",
- "eFimq+LuHi42byKnBeqnZQ==",
- "JrKGKAKdjfAaYeQH8Y2ZRQ==",
- "JFFeXsFsMA59iNtZey7LAA==",
- "91SdBFJEZ65M+ixGaprY/A==",
- "+S+WXgVDSU1oGmCzGwuT3g==",
- "1X14kHeKwGmLeYqpe60XEA==",
- "4xojeUxTFmMLGm6jiMYh/Q==",
- "+1e7jvUo8f2/2l0TFrQqfA==",
- "8WU1vLKV1GhrL7oS9PpABg==",
- "DYWCPUq/hpjr6puBE7KBHg==",
- "birqO8GOwGEI97zYaHyAuw==",
- "6e8boFcyc8iF0/tHVje4eQ==",
- "FLvED9nB9FEl9LqPn7OOrA==",
- "ji306HRiq965zb8EZD2uig==",
- "AklOdt9/2//3ylUhWebHRw==",
- "VGRCSrgGTkBNb8sve0fYnQ==",
- "oqlkgrYe9aCOwHXddxuyag==",
- "KXuFON8tMBizNkCC48ICLA==",
- "9aKH1u5+4lgYhhLztQ4KWA==",
- "3hVslsq98QCDIiO40JNOuA==",
- "OOS6wQCJsXH8CsWEidB35A==",
- "YXHQ3JI9+oca8pc/jMH6mA==",
- "V9vkAanK+Pkc4FGAokJsTA==",
- "OFLn4wun6lq484I7f6yEwg==",
- "3WVBP9fyAiBPZAq3DpMwOQ==",
- "5gGoDPTc/sOIDLngmlEq4A==",
- "E2lvMXqHdTw0x+KCKVnblg==",
- "f1Gs++Iilgq9GHukcnBG3w==",
- "uIkVijg7RPi/1j7c18G1qA==",
- "9T7gB0ZkdWB0VpbKIXiujQ==",
- "KCJJfgLe00+tjSfP6EBcUg==",
- "WbAdlac/PhYUq7J2+n5f+w==",
- "GLnS9wDCje7TOMvBX9jJVA==",
- "VAg/aU5nl72O+cdNuPRO4g==",
- "kzTl7WH/JXsX1fqgnuTOgw==",
- "1HDgfU7xU7LWO/BXsODZAQ==",
- "D0W5F7gKMljoG5rlue1jrg==",
- "9reBKZ1Rp6xcdH1pFQacjw==",
- "SSKhl2L3Mvy93DcZulADtA==",
- "hlu7os0KtAkpBTBV6D2jyQ==",
- "sfte/o9vVNyida/yLvqADA==",
- "gYGQBLo5TdMyXks0LsZhsQ==",
- "dNq2InSVDGnYXjkxPNPRxA==",
- "fiv0DJivQeqUkrzDNlluRw==",
- "msstzxq++XO0AqNTmA7Bmg==",
- "DCjgaGV5hgSVtFY5tcwkuA==",
- "aMmrAzoRWLOMPHhBuxczKg==",
- "qNOSm15bdkIDSc/iUr+UTQ==",
- "2nSTEYzLK77h5Rgyti+ULQ==",
- "BhKO1s1O693Fjy1LItR/Jw==",
- "kRnBEH6ILR5GNSmjHYOclw==",
- "R97chlspND/sE9/HMScXjQ==",
- "1Oykse0jQVbuR3MvW5ot4A==",
- "Dmyb+a7/QFsU4d2cVQsxDw==",
- "W5now3RWSzzMDAxsHSl++Q==",
- "IrDuBrVu1HWm0BthAHyOLQ==",
- "V6zyoX6MERIybGhhULnZiw==",
- "ZQSDYgpsimK+lYGdXBWE/w==",
- "lV70RNlE++04G1KFB3BMXA==",
- "QmSBVvdk0tqH9RAicXq2zA==",
- "qNyy6Fc0b8oOMWqqaliZ/w==",
- "xvipmmwKdYt4eoKvvRnjEg==",
- "Q7Df6zGwvb4rC+EtIKfaSw==",
- "n1M2dgFPpmaICP+JwxHUug==",
- "1k8tL2xmGFVYMgKUcmDcEw==",
- "fFvXa1dbMoOOoWZdHxPGjw==",
- "UP9mmAKzeQqGhod7NCqzhg==",
- "PMCWKgog/G+GFZcIruSONw==",
- "dnvatwSEcl73ROwcZ4bbIQ==",
- "hY82j+sUQQRpCi6CCGea5A==",
- "QoUC9nyK1BAzoUVnBLV2zw==",
- "+aF4ilbjQbLpAuFXQEYMWQ==",
- "XTCcsVfEvqxnjc0K5PLcyw==",
- "ML7ipnY/g8mA1PUIju1j8Q==",
- "tOkYq1BZY152/7IJ6ZYKUg==",
- "2bsIpvnGcFhTCSrK9EW1FQ==",
- "Af9j1naGtnZf0u1LyYmK1w==",
- "ZmblZauRqO5tGysY3/0kDw==",
- "PF0lpolQQXlpc3qTLMBk8w==",
- "emVLJVzha7ui5OFHPJzeRQ==",
- "gR0sgItXIH8hE4FVs9Q07w==",
- "PTW+fhZq/ErxHqpM0DZwHQ==",
- "g0kHTNRI7x/lAsr92EEppw==",
- "24H9q+E8pgCEdFS7JO5kzQ==",
- "HtDXgMuF8PJ1haWk88S0Ew==",
- "pulldyBt2sw6QDvTrCh6zw==",
- "ehwc2vvwNUAI7MxU4MWQZw==",
- "enj9VEzLbmeOyYugTmdGfQ==",
- "auvG6kWMnhCMi7c7e9eHrw==",
- "R36O31Pj8jn0AWSuqI7X2Q==",
- "3AVYtcIv7A5mVbVnQMaCeA==",
- "T9WoUJNwp8h4Yydixbx6nA==",
- "t0WN8TwMLgi8UVEImoFXKg==",
- "mS99D+CXhwyfVt8xJ+dJZA==",
- "AFdelaqvxRj6T3YdLgCFyg==",
- "Lu02ic/E94s42A14m7NGCA==",
- "7w3b73nN/fIBvuLuGZDCYQ==",
- "O209ftgvu0vSr0UZywRFXA==",
- "MQvAr+OOfnYnr/Il/2Ubkg==",
- "e5txnNRcGs2a9+mBFcF1Qg==",
- "YA0kMTJ82PYuLA4pkn4rfw==",
- "QIKjir/ppRyS63BwUcHWmw==",
- "P3y5MoXrkRTSLhCdLlnc4A==",
- "WY7mCUGvpXrC8gkBB46euw==",
- "g0GbRp2hFVIdc7ct7Ky7ag==",
- "Cv079ZF55RnbsDT27MOQIA==",
- "cvMJ714elj/HUh89a9lzOQ==",
- "9inw7xzbqAnZDKOl/MfCqA==",
- "F58ktE4O0f7C9HdsXYm+lw==",
- "CsPkyTZADMnKcgSuNu1qxg==",
- "mAzsVkijuqihhmhNTTz65g==",
- "FxnbKnuDct4OWcnFMT/a5w==",
- "P5wS+xB8srW4a5KDp/JVkA==",
- "ctJYJegZhG42i+vnPFWAWw==",
- "OrqJKjRndcZ8OjE3cSQv7g==",
- "aXqiibI6BpW3qilV6izHaQ==",
- "BA18GEAOOyVXO2yZt2U35w==",
- "saEpnDGBSZWqeXSJm34eOA==",
- "CUEueo8QXRxkfVdfNIk/gg==",
- "H0UMAUfHFQH92A2AXRCBKA==",
- "CT9g8mKsIN/VeHLSTFJcNQ==",
- "E4NtzxQruLcetC23zKVIng==",
- "203EqmJI9Q4tWxTJaBdSzA==",
- "Do3aqbRKtmlQI2fXtSZfxQ==",
- "JaYQXntiyznQzrTlEeZMIw==",
- "VK95g27ws2C6J2h/7rC2qA==",
- "CQ0PPwgdG3N6Ohfwx1C8xA==",
- "/MeHciFhvFzQsCIw39xIZA==",
- "u5cUPxM6/spLIV8VidPrAA==",
- "OwArFF1hpdBupCkanpwT+Q==",
- "PdBgXFq5mBqNxgCiqaRnkw==",
- "lC5EumoIcctvxYqwELqIqw==",
- "xoPSM86Se+1hHX0y3hhdkw==",
- "F5bs0GGWBx9eBwcJJpXbqg==",
- "1mw6LfTiirFyfjejf8QNGA==",
- "daBhAvmE9shDgmciDAC5eg==",
- "AvdeYb9XNOUFWiiz+XGfng==",
- "JJJkp1TpuDx5wrua2Wml7g==",
- "3y5Xk65ShGvWFbQxcZaQAQ==",
- "l6QHU5JsJExNoOnqxBPVbw==",
- "X2YfnPXgF2VHVX95ZcBaxQ==",
- "g6udffWh7qUnSIo1Ldn3eA==",
- "V2P75JFB4Se9h7TCUMfeNA==",
- "IUZ5aGpkJ9rLgSg6oAmMlw==",
- "pyrUqiZ98gVXxlXQNXv5fA==",
- "83ERX2XJV3ST4XwvN7YWCg==",
- "eJDUejE/Ez/7kV+S74PDYg==",
- "M9oqlPb63e0kZE0zWOm+JQ==",
- "0rTYcuVYdilO7zEfKrxY3A==",
- "rfPTskbnoh3hRJH6ZAzQRg==",
- "QtD35QhE8sAccPrDnhtQmQ==",
- "jpNUgFnanr9Sxvj2xbBXZw==",
- "nykEOLL/o7h0cs0yvdeT2g==",
- "wX2URK6eDDHeEOF3cgPgHA==",
- "jqPQ0aOuvOJte/ghI1RVng==",
- "nHTsDl0xeQPC5zNRnoa0Rw==",
- "mNv2Q67zePjk/jbQuvkAFA==",
- "HjlPM2FQWdILUXHalIhQ5w==",
- "cHkOsVd80Rgwepeweq4S1g==",
- "kTCHqcb3Cos51o8cL+MXcg==",
- "nvmBgp0YlUrdZ05INsEE8Q==",
- "kFrRjz7Cf2KvLtz9X6oD+w==",
- "Tmx0suRHzlUK4FdBivwOwA==",
- "bG+P+p34t/IJ1ubRiWg6IA==",
- "uESeJe/nYrHCq4RQbrNpGA==",
- "ehfPlu6YctzzpQmFiQDxGA==",
- "ZH5Es/4lJ+D5KEkF1BVSGg==",
- "HHxn4iIQ7m0tF1rSd+BZBg==",
- "DQJRsUwO1fOuGlkgJavcwQ==",
- "HITIVoFoWNg04NExe13dNA==",
- "MeKXnEfxeuQu9t3r/qWvcw==",
- "Y7OofF9eUvp7qlpgdrzvkg==",
- "XSb71ae0v+yDxNF5HJXGbQ==",
- "p8W1LgFuW6JSOKjHkx3+aA==",
- "y2JOIoIiT9cV1VxplZPraQ==",
- "MN94B0r5CNAF9sl3Kccdbw==",
- "Q1pdQadt12anX1QRmU2Y/A==",
- "JIC8R48jGVqro6wmG2KXIw==",
- "eWgLAqJOU+fdn8raHb9HCw==",
- "5CMadLqS2KWwwMCpzlDmLw==",
- "H1y2iXVaQYwP0SakN6sa+Q==",
- "CUCjG2UaEBmiYWQc6+AS1Q==",
- "yV3IbbTWAbHMhMGVvgb/ZQ==",
- "80PCwYh4llIKAplcDvMj4g==",
- "fgdUFvQPb5h+Rqz8pzLsmw==",
- "2SI4F7Vvde2yjzMLAwxOog==",
- "kJdY3XEdJS/hyHdR+IN0GA==",
- "IKgNa2oPaFVGYnOsL+GC5Q==",
- "eXFOya6x5inTdGwJx/xtUQ==",
- "uTA0XbiH3fTeVV7u5z0b3w==",
- "onFcHOO1c3pDdfCb5N4WkQ==",
- "Slu3z535ijcs5kzDnR7kfA==",
- "SElc2+YVi3afE1eG1MI7dQ==",
- "ND2hYtAIQGMxBF7o7+u7nQ==",
- "Pv9FWQEDLKnG/9K9EIz4Gw==",
- "6CjtF1S2Y6RCbhl7hMsD+g==",
- "rs2QrN4qzAHCHhkcrAvIfA==",
- "eTMPXa60OTGjSPmvR4IgGw==",
- "pvXHwJ3dwf9GDzfDD9JI3g==",
- "CRmAj3JcasAb4iZ9ZbNIbw==",
- "rcY4Ot40678ByCfqvGOGdg==",
- "l4ddTxbTCW5UmZW+KRmx6A==",
- "NKRzJndo2uXNiNppVnqy1g==",
- "0NrvBuyjcJ2q6yaHpz/FOA==",
- "3YXp1PmMldUjBz3hC6ItbA==",
- "CmVD6nh8b/04/6JV9SovlA==",
- "HjyxyL0db2hGDq2ZjwOOhg==",
- "4PBaoeEwUj79njftnYYqLg==",
- "vFFzkWgGyw6OPADONtEojQ==",
- "czBWiYsQtNFrksWwoQxlOw==",
- "9iB7+VwXRbi6HLkWyh9/kg==",
- "zwY6tCjjya/bgrYaCncaag==",
- "mW6TCje9Zg2Ep7nzmDjSYQ==",
- "5LJqHFRyIwQKA4HbtqAYQQ==",
- "INNBBin5ePwTyhPIyndHHg==",
- "dChBe9QR29ObPFu/9PusLg==",
- "1dhq3ozNCx0o4dV1syLVDA==",
- "nyaekSYTKzfSeSfPrB114Q==",
- "TfNHjSTV8w6Pg6+FaGlxvA==",
- "m/Lp4U75AQyk9c8cX14HJg==",
- "uU1TX5DoDg6EcFKgFcn0GA==",
- "B+TsxQZf0IiQrU8X9S4dsQ==",
- "6b7ue29cBDsvmj1VSa5njw==",
- "RvXWAFwM+mUAPW1MjPBaHA==",
- "pdaY6kZ8+QqkMOInvvACNA==",
- "7nr3zyWL+HHtJhRrCPhYZA==",
- "BXGlq54wIH6R3OdYfSSDRw==",
- "b06KGv5zDYsTxyTbQ9/eyA==",
- "8ylI1AS3QJpAi3I/NLMYdg==",
- "0fpe9E6m3eLp/5j5rLrz2Q==",
- "Qrh7OEHjp80IW+YzQwzlJg==",
- "lqhgbgEqROAdfzEnJ17eXA==",
- "Dulw855DfgIwiK7hr3X8vg==",
- "wsp+vmW8sEqXYVURd/gjHA==",
- "VoPth5hDHhkQcrQTxHXbuw==",
- "TgWe70YalDPyyUz6n88ujg==",
- "9lLhHcrPWI4EsA4fHIIXuw==",
- "UymZUnEEQWVnLDdRemv+Tw==",
- "qnkFUlJ8QT322JuCI3LQgg==",
- "/p/aCTIhi1bU0/liuO/a2Q==",
- "hWoxz5HhE50oYBNRoPp1JQ==",
- "88tB/HgUIUnqWXEX++b5Aw==",
- "Z8T1b9RsUWf59D06MUrXCQ==",
- "BZTzHJGhzhs3mCXHDqMjnQ==",
- "XfY+QUriCAA1+3QAsswdgg==",
- "TZ3ATPOFjNqFGSKY3vP2Hw==",
- "cl4t9FXabQg7tbh1g7a0OA==",
- "9SgfpAY0UhNC6sYGus9GgQ==",
- "d/Wd3Ma1xYyoMByPQnA9Cw==",
- "DDitrRSvovaiXe2nfAtp4g==",
- "s+eHg5K9zZ2Jozu5Oya9ZQ==",
- "z3L2BNjQOMOfTVBUxcpnRA==",
- "v4xIYrfPGILEbD/LwVDDzA==",
- "HoaBBw2aPCyhh0f5GxF+/Q==",
- "i9IRqAqKjBTppsxtPB7rdw==",
- "cWUg7AfqhiiEmBIu+ryImA==",
- "E+02smwQGBIxv42LIF2Y4Q==",
- "W4CfeVp9mXgk04flryL7iA==",
- "9SUOfKtfKmkGICJnvbIDMg==",
- "xweGAZf+Yb3TtwR/sGmGIA==",
- "EJgedRYsZPc4cT9rlwaZhg==",
- "wv4NC9CIpwuGf/nOQYe/oA==",
- "ZXeMG5eqQpZO/SGKC4WQkA==",
- "bzXXzQGZs8ustv0K4leklA==",
- "RkQK9S1ezo+dFYHQP57qrw==",
- "mrinv7KooPQPrLCNTRWCFg==",
- "qIUJPanWmGzTD1XxvHp+6w==",
- "Js7g8Dr6XsnGURA4UNF0Ug==",
- "dpSTNOCPFHN5yGoMpl1EUA==",
- "ugY8rTtJkN4CXWMVcRZiZw==",
- "rqHKB91H3qVuQAm+Ym5cUA==",
- "UjmDFO7uzjl4RZDPeMeNyg==",
- "cu4ZluwohhfIYLkWp72pqA==",
- "ZydKlOpn2ySBW0G3uAqwuw==",
- "LWd0+N3M94n81qd346LfJQ==",
- "VbHoWmtiiPdABvkbt+3XKQ==",
- "J4MC9He6oqjOWsYQh9nl3Q==",
- "ahAbmGJZvUOXrcK6OydNGQ==",
- "Byhi4ymFqqH8uIeoMRvPug==",
- "LSN9GmT6LUHlCAMFqpuPIA==",
- "IAMInfSYb76GxDlAr1dsTg==",
- "qYHdgFAXhF/XcW4lxqfvWQ==",
- "26+yXbqI+fmIZsYl4UhUzw==",
- "AwPTZpC28NJQhf5fNiJuLA==",
- "SESKbGF35rjO64gktmLTWA==",
- "YVlRQHQglkbj3J2nHiP/Hw==",
- "DdaT4JLC7U0EkF50LzIj9w==",
- "G0LChrb0OE5YFqsfTpIL1Q==",
- "5Yrj6uevT8wHRyqqgnSfeg==",
- "NmWmDxwK5FpKlZbo0Rt8RA==",
- "iUsUCB0mfRsE9KPEQctIzw==",
- "Tm4zk2Lmg8w4ITMI31NfTA==",
- "Vu0E+IJXBnc25x4n41kQig==",
- "6wkfN8hyKmKU6tG3YetCmw==",
- "trjM81KANPZrg9iSThWx6Q==",
- "iGuY4VxcotHvMFXuXum7KA==",
- "ICPdBCdONUqPwD5BXU5lrw==",
- "alqHQBz8V446EdzuVfeY5Q==",
- "74FW/QYTzr/P1k6QwVHMcw==",
- "avZp5K7zJvRvJvpLSldNAw==",
- "TIKadc6FAaRWSQUg5OATgg==",
- "PfkWkSbAxIt1Iso0znW0+Q==",
- "Z+bsbVP91KrJvxrujBLrrQ==",
- "mrxlFD3FBqpSZr1kuuwxGg==",
- "nUgYO7/oVNSX8fJqP2dbdg==",
- "tVhXk9Ff3wAg56FbdNtcFg==",
- "DdiNGiOSoIZxrMrGNvqkXw==",
- "CDsanJz7e3r/eQe+ZYFeVQ==",
- "wVfSZYjMjbTsD2gaSbwuqQ==",
- "6c0iuya20Ys8BsvoI4iQaQ==",
- "qCPfJTR8ecTw6u6b1yHibA==",
- "fZrj3wGQSt8RXv0ykJROcQ==",
- "gR3B8usSEb0NLos51BmJQg==",
- "vTAmgfq3GxL4+ubXpzwk5w==",
- "jLkmUZ6fV56GfhC0nkh4GA==",
- "3v09RHCPTLUztqapThYaHg==",
- "nULSbtw2dXbfVjZh33pDiA==",
- "IHhyR6+5sZXTH+/NrghIPg==",
- "tnUtJ/DQX9WaVJyTgemsUA==",
- "7xTKFcog69nTmMfr5qFUTA==",
- "IshzWega6zr3979khNVFQQ==",
- "Ng5v/B9Z10TTfsDFQ/XrXQ==",
- "hnCUnoxofUiqQvrxl73M8w==",
- "VPa7DG6v7KnzMvtJPb88LQ==",
- "4LtQrahKXVtsbXrEzYU1zQ==",
- "Ev/xjTi7akYBI7IeZJ4Igw==",
- "41WEjhYUlG6jp2UPGj11eQ==",
- "JvXTdChcE3AqMbFYTT3/wg==",
- "2rOkEVl90EPqfHOF5q2FYw==",
- "mjFBVRJ7TgnJx+Q74xllPg==",
- "Uy4QI8D2y1bq/HDNItCtAw==",
- "wMOE/pEKVIklE75xjt6b6w==",
- "ZcuIvc8fDI+2uF0I0uLiVA==",
- "CX/N/lHckmAtHKysYtGdZA==",
- "j8to4gtSIRYpCogv2TESuQ==",
- "iS9wumBV5ktCTefFzKYfkA==",
- "ewPT4dM12nDWEDoRfiZZnA==",
- "vWn9OPnrJgfPavg4D6T/HQ==",
- "J/PNYu4y6ZMWFFXsAhaoow==",
- "catI+QUNk3uJ+mUBY3bY8Q==",
- "F8tEIT5EhcvLNRU5f0zlXQ==",
- "zyA9f5J7mw5InjhcfeumAQ==",
- "MlOOZOwcRGIkifaktEq0aQ==",
- "Pt3i49uweYVgWze3OjkjJA==",
- "sfIClgTMtZo9CM9MHaoqhQ==",
- "HeQbUuBM9sqfXFXRBDISSw==",
- "SFn78uklZfMtKoz2N0xDaQ==",
- "H6j2nPbBaxHecXruxiWYkA==",
- "fU32wmMeD44UsFSqFY0wBA==",
- "hDILjSpTLqJpiSSSGu445A==",
- "ieEAgvK9LsWh2t6DsQOpWA==",
- "xfjBQk3CrNjhufdPIhr91A==",
- "j+8/VARfbQSYhHzj0KPurQ==",
- "/zFLRvi75UL8qvg+a6zqGg==",
- "U0KmEI6e5zJkaI4YJyA5Ew==",
- "uXvr6vi5kazZ9BCg2PWPJA==",
- "jEqP0dyHKHiUjZ9dNNGTlQ==",
- "1xWx5V3G9murZP7srljFmA==",
- "OIwtfdq37eQ0qoXuB2j7Hw==",
- "fUAy3f9bAglLvZWvkO2Lug==",
- "duRFqmvqF93uf/vWn8aOmg==",
- "ysRQ+7Aq7eVLOp88KnFVMA==",
- "CkZUmKBAGu0FLpgPDrybpw==",
- "TrLmfgwaNATh24eSrOT+pw==",
- "83wtvSoSP9FVBsdWaiWfpA==",
- "pUfWmRXo70yGkUD/x5oIvA==",
- "PybPZhJErbRTuAafrrkb3g==",
- "8hsfXqi4uiuL+bV1VrHqCw==",
- "TVlHoi8J7sOZ2Ti7Dm92cQ==",
- "za4rzveYVMFe3Gw531DQJQ==",
- "JKphO0UYjFqcbPr6EeBuqg==",
- "hqeSvwu8eqA072iidlJBAw==",
- "bUF0JIfS4uKd3JZj2xotLQ==",
- "hKOsXOBoFTl/K4xE+RNHDA==",
- "JHBjKpCgSgrNNACZW1W+1w==",
- "Rrq0ak9YexLqqbSD4SSXlw==",
- "+NmjwjsPhGJh9bM10SFkLw==",
- "xMIHeno2qj3V8q9H1xezeg==",
- "TcFinyBrUoAEcLzWdFymow==",
- "Rvchz/xjcY9uKiDAkRBMmA==",
- "TYlnrwgyeZoRgOpBYneRAg==",
- "PbnxuVerGwHyshkumqAARg==",
- "iFtadcw8v6betKka9yaJfg==",
- "7wgT9WIiMVcrj48PVAMIgw==",
- "2HHqeGRMfzf3RXwVybx+ZQ==",
- "tdgI9v7cqJsgCAeW1Fii1A==",
- "4ZFYKa7ZgvHyZLS6WpM8gA==",
- "gB8wkuIzvuDAIhDtNT1gyA==",
- "g1ELwsk6hQ+RAY1BH640Pg==",
- "UZoibx+y1YJy/uRSa9Oa2w==",
- "yS/yMnJDHW0iaOsbj4oPTg==",
- "JzW+yhrjXW1ivKu3mUXPXg==",
- "/wIZAye9h1TUiZmDW0ZmYA==",
- "YK+q7uJObkQZvOwQ9hplMg==",
- "Rs8deApkoosIJSfX7NXtAA==",
- "MsCloSmTFoBpm7XWYb+ueQ==",
- "3ltw31yJuAl4VT6MieEXXw==",
- "1+qmrbC8c7MJ6pxmDMcKuA==",
- "AYxGETZs477n2sa1Ulu/RQ==",
- "Q0TJZxpn3jk67L7N+YDaNA==",
- "OGpsXRHlaN8BvZftxh1e7A==",
- "UbABE6ECnjB+9YvblE9CYw==",
- "kZ0D191c/uv4YMG15yVLDw==",
- "QWURrsEgxbJ8MWcaRmOWqw==",
- "xiFlcSfa/gnPiO+LwbixcQ==",
- "Szko0IPE7RX2+mfsWczrMg==",
- "Ugt8HVC/aUzyWpiHd0gCOQ==",
- "8j9GVPiFdfIRm/+ho7hpoA==",
- "KR401XBdgCrtVDSaXqPEiA==",
- "d0NBFiwGlQNclKObRtGVMQ==",
- "XEwOJG24eaEtAuBWtMxhwg==",
- "0Y6iiZjCwPDwD/CwJzfioQ==",
- "MvMbvZNKbXFe2XdN+HtnpQ==",
- "fsoXIbq0T0nmSpW8b+bj+g==",
- "Uje3Ild84sN41JEg3PEHDg==",
- "i6ZYpFwsyWyMJNgqUMSV1A==",
- "+P5q4YD1Rr5SX26Xr+tzlw==",
- "z4oKy2wKH+sbNSgGjbdHGw==",
- "XwKWd03sAz8MmvJEuN08xA==",
- "Xv0mNYedaBc57RrcbHr9OA==",
- "9oUawSwUGOmb0sDn3XS6og==",
- "9RGIQ2qyevNbSSEF36xk/A==",
- "q8YF9G2jqydAxSqwyyys5Q==",
- "m5JIUETVXcRza4VL4xlJbg==",
- "aRpdnrOyu5mWB1P5YMbvOA==",
- "rM/BOovNgnvebKMxZQdk7g==",
- "fQS0jnQMnHBn7+JZWkiE/g==",
- "gAoV4BZYdW1Wm712YXOhWQ==",
- "hCzsi1yDv9ja5/o7t94j9Q==",
- "CoLvjQDQGldGDqRxfQo+WQ==",
- "pfGcaa49SM3S6yJIPk/EJQ==",
- "yYp4iuI5f/y/l1AEJxYolQ==",
- "Jj4IrSVpqQnhFrzNvylSzA==",
- "4jeOFKuKpCmMXUVJSh9y0g==",
- "+NMUaQ7XPsAi0rk7tTT9wQ==",
- "Jt4Eg6MJn8O4Ph/K2LeSUA==",
- "CiiUeJ0LeWfm7+gmEmYXtg==",
- "c5Tc7rTFXNJqYyc0ppW+Iw==",
- "4KJZPCE9NKTfzFxl76GWjg==",
- "aXs9qTEXLTkN956ch3pnOA==",
- "f5Xo7F1uaiM760Qbt978iw==",
- "wpZqFkKafFpLcykN2IISqg==",
- "vIORTYSHFIXk5E2NyIvWcQ==",
- "prOsOG0adI4o+oz50moipw==",
- "blygTgAHZJ3NzyAT33Bfww==",
- "rBt6L/KLT7eybxKt5wtFdg==",
- "vMuaLvAntJB5o7lmt/kVXA==",
- "iujlt9fXcUXEYc+T2s5UjA==",
- "LyYPOZKm8bBegMr5NTSBfg==",
- "ZtWvgitOSRDWq7LAKYYd4Q==",
- "kh51WUI5TRnKhur6ZEpRTQ==",
- "VzQ1NwNv9btxUzxwVqvHQg==",
- "8fJLQeIHaTnJ8wGqUiKU6g==",
- "vvEH5A39TTe1AOC11rRCLA==",
- "dihDsG7+6aocG6M9BWrCzQ==",
- "3jqsY8/xTWELmu/az3Daug==",
- "mpOtwBvle+nyY6lUBwTemw==",
- "E1CvxFbuu9AYW604mnpGTw==",
- "1LPC0BzhJbepHTSAiZ3QTw==",
- "XpGXh76RDgXC4qnTCsnNHA==",
- "3Gg9N7vjAfQEYOtQKuF/Eg==",
- "+WpF8+poKmHPUBB4UYh/ig==",
- "UNt7CNMtltJWq8giDciGyA==",
- "RIZYDgXqsIdTf9o2Tp/S7g==",
- "0QCQORCYfLuSbq94Sbt0bQ==",
- "hvsZ5JmVevK1zclFYmxHaw==",
- "3+9nURtBK3FKn0J9DQDa3g==",
- "jdVMQqApseHH3fd91NFhxg==",
- "VX+cVXV8p9i5EBTMoiQOQQ==",
- "I5qDndyelK4Njv4YrX7S6w==",
- "rWliqgfZ3/uCRBOZ9sMmdA==",
- "vwno3vugCvt6ooT3CD4qIQ==",
- "cffrYrBX3UQhfX1TbAF+GQ==",
- "nOiwBFnXxCBfPCHYITgqNg==",
- "LQttmX92SI94+hDNVd8Gtw==",
- "iCF+GWw9/YGQXsOOPAnPHQ==",
- "nwtCsN1xEYaHvEOPzBv+qQ==",
- "CQpJFrpOvcQhsTXIlJli+Q==",
- "tYeIZjIm0tVEsYxH1iIiUQ==",
- "iCnm5fPmSmxsIzuRK6osrA==",
- "tX8X8KoxUQ8atFSCxgwE1Q==",
- "hZlX6qOfwxW5SPfqtRqaMw==",
- "2aIx9UdMxxZWvrfeJ+DcTw==",
- "TlJizlASbPtShZhkPww4UA==",
- "p+bx+/WQWALXEBCTnIMr4w==",
- "4VR5LiXLew6Nyn91zH9L4w==",
- "bfUD03N2PRDT+MZ+WFVtow==",
- "cTvDd8okNUx0RCMer6O8sw==",
- "49jZr/mEW6fvnyzskyN40w==",
- "vHmQUl4WHXs1E/Shh+TeyA==",
- "fgXfRuqFfAu8qxbTi4bmhA==",
- "Wn+Vj4eiWx0WPUHr3nFbyA==",
- "2SwIiUwT4vRZPrg7+vZqDA==",
- "nkedTagkmf6YE4tEY+0fKw==",
- "8nOTDhFyZ8YUA4b6M5p84w==",
- "qnzWszsyJhYtx8wkMN6b1g==",
- "ka7pMp8eSiv92WgAsz2vdA==",
- "pGQEWJ38hb/ZYy2P1+FIuw==",
- "cVhdRFuZaW/09CYPmtNv5g==",
- "prCOYlboBnzmLEBG/OeVrQ==",
- "oIWwTbkVS5DDL47mY9/1KQ==",
- "PKtXc4x4DEjM45dnmPWzyg==",
- "f9ywiGXsz+PuEsLTV3zIbQ==",
- "6G2bD3Y7qbGmfPqH9TqLFA==",
- "DMHmyn2U2n+UXxkqdvKpnA==",
- "XOG1PYgqoG8gVLIbVLTQgg==",
- "1FSrgkUXgZot2CsmbAtkPw==",
- "BxFP+4o6PSlGN78eSVT1pA==",
- "EZVQGsXTZvht1qedRLF8bQ==",
- "eYAQWuWZX2346VMCD6s7/A==",
- "jkUpkLoIXuu7aSH8ZghIAQ==",
- "mXPtbPaoNAAlGmUMmJEWBQ==",
- "HLesnV3DL+FhWF3h6RXe8g==",
- "nDAsSla+9XfAlQSPsXtzPA==",
- "RAECgYZmcF4WxcFcZ4A0Ww==",
- "W+M4BcYNmjj7xAximDGWsA==",
- "ueODvMv/f9ZD8O0aIHn4sg==",
- "cszpMdGbsbe6BygqMlnC9Q==",
- "siHwJx6EgeB1gBT9z/vTyw==",
- "FN7oLGBQGHXXn5dLnr/ElA==",
- "Tud+AMyuFkWYYZ73yoJGpQ==",
- "TuaG3wRdM9BWKAxh2UmAsg==",
- "8CjmgWQSAAGcXX9kz3kssw==",
- "ays5/F7JANIgPHN0vp2dqQ==",
- "PCOGl7GIqbizAKj/sZmlwQ==",
- "rZKD8oJnIj5fSNGiccfcvA==",
- "gFEnTI8os2BfRGqx9p5x8w==",
- "5r1ZsGkrzNQEpgt/gENibw==",
- "1YO9G8qAhLIu2rShvekedw==",
- "6ZKmm7IW7IdWuVytLr68CQ==",
- "mMfn8OaKBxtetweulho+xQ==",
- "GQJxu1SoMBH14KPV/G/KrQ==",
- "IYIP2UBRyWetVfYLRsi1SQ==",
- "Jit0X0srSNFnn8Ymi1EY+g==",
- "ARCWkHAnVgBOIkCDQ19ZuA==",
- "qA0sTaeNPNIiQbjIe1bOgQ==",
- "iGI9uqMoBBAjPszpxjZBWQ==",
- "+L1FDsr5VQtuYc2Is5QGjw==",
- "4XNUmgwxsqDYsNmPkgNQYQ==",
- "Yig+Wh18VIqdsmwtwfoUQw==",
- "uqp92lAqjec8UQYfyjaEZw==",
- "QiozlNcQCbqXtwItWExqJQ==",
- "JFHutgSe1/SlcYKIbNNYwQ==",
- "Y26jxXvl79RcffH8O8b9Ew==",
- "bQ7J5mebp38rfP/fuqQOsg==",
- "HI4ZIE5s8ez8Rb+Mv39FxA==",
- "OzH7jTcyeM7RPVFtBdakpQ==",
- "HLxROy6fx/mLXFTDSX4eLA==",
- "s5RUHVRNAoKMuPR/Jkfc2Q==",
- "X9QAaNjgiOeAWSphrGtyVw==",
- "ALJWKUImVE40MbEooqsrng==",
- "9MDG0WeBPpjGJLEmUJgBWg==",
- "9RXymE9kCkDvBzWGyMgIWA==",
- "vFox1d3llOeBeCUZGvTy0A==",
- "r3lQAYOYhwlLnDWQIunKqg==",
- "2os5s7j7Tl46ZmoZJH8FjA==",
- "O5N2yd+QQggPBinQ+zIhtQ==",
- "ZygAjaN62XhW5smlLkks+Q==",
- "AgDJsaW0LkpGE65Kxk5+IA==",
- "omAjyj1l6gyQAlBGfdxJTw==",
- "fY9VATklOvceDfHZDDk57A==",
- "StpQm/cQF8cT0LFzKUhC5w==",
- "CYJB3qy5GalPLAv1KGFEZA==",
- "coGEgMVs2b314qrXMjNumQ==",
- "DQQB/l55iPN9XcySieNX3A==",
- "6dshA8knH5qqD+KmR/kdSQ==",
- "qyRmvxh8p4j4f+61c10ZFQ==",
- "apWEPWUvMC24Y+2vTSLXoA==",
- "RzX2OfSFEd//LhZwRwzBVw==",
- "NdULoUDGhIolzw1PyYKV0A==",
- "5w/c9WkI/FA+4lOtdPxoww==",
- "bV9r7j2kNJpDCEM5E2339Q==",
- "vbyiKeDCQ4q9dDRI1Q0Ong==",
- "9xIgKpZGqq0/OU6wM5ZSHw==",
- "RYkDwwng6eeffPHxt8iD9A==",
- "w5N/aHbtOIKzcvG3GlMjGA==",
- "3P2aJxV8Trll2GH9ptElYA==",
- "yteeQr3ub2lDXgLziZV+DQ==",
- "yqtj8GfLaUHYv/BsdjxIVw==",
- "NyF+4VRog7etp90B9FuEjA==",
- "uwA6N5LptSXqIBkTO0Jd7Q==",
- "6lVSzYUQ/r0ep4W2eCzFpg==",
- "1d7RPHdZ9qzAbG3Vi9BdFA==",
- "7br49X11xc2GxQLSpZWjKQ==",
- "peMW+rpwmXrSwplVuB/gTA==",
- "RqYpA5AY7mKPaSxoQfI1CA==",
- "dqVw2q2nhCvTcW82MT7z0g==",
- "5S5/asYfWjOwnzYpbK6JDw==",
- "NvkR0inSzAdetpI4SOXGhw==",
- "tIqwBotg052wGBL65DZ+yA==",
- "S4RvORcJ3m6WhnAgV4YfYA==",
- "UAqf4owQ+EmrE45hBcUMEw==",
- "4aPU6053cfMLHgLwAZJRNg==",
- "3Y6/HqS1trYc9Dh778sefg==",
- "ck86G8HsbXflyrK7MBntLg==",
- "GLmWLXURlUOJ+PMjpWEXVA==",
- "jNJQ6otieHBYIXA9LjXprg==",
- "AsAHrIkMgc3RRWnklY9lJw==",
- "FCLQocqxxhJeleARZ6kSPg==",
- "3Leu2Sc+YOntJFlrvhaXeg==",
- "hSkY45CeB6Ilvh0Io4W6cg==",
- "DwrNdmU5VFFf3TwCCcptPA==",
- "u2WQlcMxOACy6VbJXK4FwA==",
- "E9IlDyULLdeaVUzN6eky8g==",
- "EXveRXjzsjh8zbbQY2pM9g==",
- "5VO1inwXMvLDBQSOahT6rg==",
- "HaHTsLzx7V3G1SFknXpGxA==",
- "MMaegl2Md9s/wOx5o9564w==",
- "mpWNaUH9kn4WY26DWNAh3Q==",
- "w3G+qXXqqKi8F5s+qvkBUg==",
- "wM8tnXO4PDlLVHspZFcjYw==",
- "LFcpCtnSnsCPD2gT/RA+Zg==",
- "bhVbgJ4Do4v56D9mBuR/EA==",
- "yU3N0HMSP5etuHPNrVkZtg==",
- "FzqIpOcTsckSNHExrl+9jg==",
- "BYz52gYI/Z6AbYbjWefcEA==",
- "h3vYYI9yhpSZV2MQMJtwFQ==",
- "adJAjAFyR2ne1puEgRiH+g==",
- "eDcyiPaB954q5cPXcuxAQw==",
- "40gCrW4YWi+2lkqMSPKBPg==",
- "ulLuTZqhEDkX0EJ3xwRP9A==",
- "y4iBxAMn/KzMmaWShdYiIw==",
- "ilBBNK/IV69xKTShvI94fQ==",
- "0HN6MIGtkdzNPsrGs611xA==",
- "twPn6wTGqI0aR//0wP3xtA==",
- "3UNJ37f+gnNyYk9yLFeoYA==",
- "4SdHWowXgCpCDL28jEFpAw==",
- "Mr5mCtC53+wwmwujOU/fWw==",
- "81pAhreEPxcKse+++h1qBg==",
- "KmcGEE0pacQ/HDUgjlt7Pg==",
- "Gt4/MMrLBErhbFjGbiNqQQ==",
- "lf1fwA0YoWUZaEybE+LyMQ==",
- "RIVYGO2smx9rmRoDVYMPXw==",
- "rJ9qVn8/2nOxexWzqIHlcQ==",
- "lfOLLyZNbsWQgHRhicr4ag==",
- "wgH1GlUxWi6/yLLFzE76uQ==",
- "Qg1ubGl+orphvT990e5ZPA==",
- "Z5B+uOmPZbpbFWHpI9WhPw==",
- "snGTzo540cCqgBjxrfNpKw==",
- "ZqkmoGB0p5uT5J6XBGh7Tw==",
- "uPi8TsGY3vQsMVo/nsbgVQ==",
- "Y5XR8Igvau/h+c1pRgKayg==",
- "ZmVpw1TUVuT13Zw/MNI5hQ==",
- "60suecbWRfexSh7C67RENA==",
- "kZ/mZZg9YSDmk2rCGChYAg==",
- "OpL+vHwPasW30s2E1TYgpA==",
- "ZVnErH1Si4u51QoT0OT7pA==",
- "3pi3aNVq1QNJmu1j0iyL0g==",
- "tb5+2dmYALJibez1W4zXgA==",
- "jOPdd330tB6+7C29a9wn0Q==",
- "5oD/aGqoakxaezq43x0Tvw==",
- "HdB7Se47cWjPgpJN0pZuiA==",
- "6WhHPWlqEUqXC52rHGRHjA==",
- "WLwpjgr9KzevuogoHZaVUw==",
- "E8yMPK7W0SIGTK6gIqhxiQ==",
- "1/Hxu8M9N/oNwk8bCj4FNQ==",
- "Uo1ebgsOxc3eDRds1ah3ag==",
- "5pqqzC/YmRIMA9tMFPi7rg==",
- "ri4AOITPdB1YHyXV+5S51g==",
- "HfvsiCQN/3mT0FabCU5ygQ==",
- "UQTQk5rrs6lEb1a+nkLwfg==",
- "VH70dN82yPCRctmAHMfCig==",
- "yD3Dd4ToRrl53k/2NSCJiw==",
- "fO0+6TsjL+45p9mSsMRiIg==",
- "fM5uYpkvJFArnYiQ3MrQnA==",
- "V+QzdKh5gxTPp2yPC9ZNEg==",
- "XHHEg/8KZioW/4/wgSEkbQ==",
- "2abfl3N46tznOpr+94VONQ==",
- "gxwbqZDHLbQVqXjaq42BCg==",
- "WnHK5ZQDR6Da5cGODXeo0A==",
- "SChDh/Np1HyTPWfICfE1uA==",
- "yhexr/OFKfZl0o3lS70e4w==",
- "N65PqIWiQeS082D6qpfrAg==",
- "RM5CpIiB94Sqxi462G7caA==",
- "CBAGa5l95f3hVzNi6MPWeQ==",
- "OHJBT2SEv5b5NxBpiAf7oQ==",
- "p48i7AfSSAyTdJSyHvOONw==",
- "/SP6pOdYFzcAl2OL05z4uQ==",
- "N8dXCawxSBX40fgRRSDqlQ==",
- "bMWFvjM8eVezU1ZXKmdgqw==",
- "Um1ftRBycvb+363a90Osog==",
- "QAz7FA+jpz9GgLvwdoNTEQ==",
- "qO4HlyHMK5ygX+6HbwQe8w==",
- "UgvtdE2eBZBUCAJG/6c0og==",
- "q5g3c8tnQTW2EjNfb2sukw==",
- "gsC/mWD8KFblxB0JxNuqJw==",
- "SVFbcjXbV7HRg+7jUrzpwg==",
- "bz294kSG4egZnH2dJ8HwEg==",
- "ybpTgPr3SjJ12Rj5lC/IMA==",
- "yDrAd1ot38soBk7zKdnT8A==",
- "BB/R8oQOcoE4j63Hrh8ifg==",
- "GNrMvNXQkW7PydlyJa+f1w==",
- "w0PKdssv+Zc5J/BbphoxpA==",
- "D5ibbo8UJMfFZ48RffuhgQ==",
- "MdvhC1cuXqni/0mtQlSOCw==",
- "wQKL8Ga6JQkpZ7yymDkC3w==",
- "o1uhaQg5/zfne84BFAINUQ==",
- "Ft2wXUokFdUf6d2Y/lwriw==",
- "sLJrshdEANp0qk2xOUtTnQ==",
- "jx7rpxbm1NaUMcE2ktg5sA==",
- "ZQ0ZnTsZKWxbRj7Tilh24Q==",
- "KhrIIHfqXl9zGE9aGrkRVg==",
- "jS0JuioLGAVaHdo/96JFoQ==",
- "tr+U/vt+MIGXPRQYYWJfRg==",
- "TXab/hqNGWaSK+fXAoB2bg==",
- "0K4NBxqEa3RYpnrkrD/XjQ==",
- "3oMTbWf7Bv83KRlfjNWQZA==",
- "yLAhLNezvqVHmN1SfMRrPw==",
- "ZYW30FfgwHmW6nAbUGmwzA==",
- "CZNoTy26VUQirvYxSPc/5A==",
- "CF1sAlhjDQY/KWOBnSSveA==",
- "+CLf5witKkuOvPCulTlkqw==",
- "1m1yD4L9A7Q1Ot+wCsrxJQ==",
- "2E41e0MgM3WhFx2oasIQeA==",
- "mDXHuOmI4ayjy2kLSHku1Q==",
- "sCLMrLjEUQ6P1L8tz90Kxg==",
- "zDUZCzQesFjO1JI3PwDjfg==",
- "x/BIDm6TKMhqu/gtb3kGyw==",
- "DEaZD/8aWV6+zkiLSVN/gA==",
- "7dz+W494zwU5sg63v5flCg==",
- "Y5iDQySR2c3MK7RPMCgSrw==",
- "GglPoW5fvr4JSM3Zv99oiA==",
- "myzvc+2MfxGD9uuvZYdnqQ==",
- "V9G1we3DOIQGKXjjPqIppQ==",
- "gYvdNJCDDQmNhtJ6NKSuTA==",
- "rXtGpN17Onx8LnccJnXwJQ==",
- "/a+bLXOq02sa/s8h7PhUTg==",
- "htNVAogFakQkTX6GHoCVXg==",
- "eshD40tvOA6bXb0Fs/cH3A==",
- "K1CGbMfhlhIuS0YHLG30PQ==",
- "aOeJZUIZM9YWjIEokFPnzQ==",
- "r0hAwlS0mPZVfCSB+2G6uQ==",
- "0q+erphtrB+6HBnnYg7O6w==",
- "bkRdUHAksJZGzE1gugizYQ==",
- "J8v2f6hWFu8oLuwhOeoQjA==",
- "qkvEep4vvXhc2ZJ6R449Mg==",
- "6HGeEPyTAu9oiKhNVLjQnA==",
- "JoATsk/aJH0UcDchFMksWA==",
- "QozQL0DTtr+PXNKifv6l6g==",
- "HiAgt86AyznvbI2pnLalVQ==",
- "lY+tivtsfvU0LJzBQ6itYQ==",
- "EfXDc6h69aBPE6qsB+6+Ig==",
- "gnAIpoCyl3mQytLFgBEgGA==",
- "p2JPOX8yDQ0agG+tUyyT/g==",
- "zeELfk015D5krExLKRUYtg==",
- "wDiGoFEfIVEDyyc4VpwhWQ==",
- "7Ephy+mklG2Y3MFdqmXqlA==",
- "8ZFPMJJYVJHsfRpU4DigSg==",
- "ocRh5LR1ZIN9Johnht8fhQ==",
- "l5f3I6osM9oxLRAwnUnc5A==",
- "yxCyBXqGWA735JEyljDP7Q==",
- "qE/h/Z+6buZWf+cmPdhxog==",
- "HCu4ZMrcLMZbPXbTlWuvvQ==",
- "TDrq23VUdzEU/8L5i8jRJQ==",
- "L+N/6geuokiLPPSDXM9Qkg==",
- "v6jZicMNM3ysm3U5xu0HoQ==",
- "b85nxzs8xiHxaqezuDVWvg==",
- "ca+kx+kf7JuZ3pfYKDwFlg==",
- "KlY5TGg0pR/57TVX+ik1KQ==",
- "3jmCreW5ytSuGfmeLv7NfQ==",
- "ucLMWnNDSqE4NOCGWvcGWw==",
- "NSrzwNlB0bde3ph8k6ZQcQ==",
- "nL4iEd3b5v4Y9fHWDs+Lrw==",
- "W2x0SBzSIsTRgyWUCOZ/lg==",
- "ifZM0gBm9g9L09YlL+vXBg==",
- "4WcFEswYU/HHQPw77DYnyA==",
- "TLJbasOoVO435E5NE5JDcA==",
- "WyCFB4+6lVtlzu3ExHAGbQ==",
- "BW0A06zoQw7S+YMGaegT7g==",
- "qP1cCE4zsKGTPhjbcpczMw==",
- "UVEZPoH9cysC+17MKHFraw==",
- "eQ45Mvf5in9xKrP6/qjYbg==",
- "fOARCnIg/foF/6tm7m9+3w==",
- "lK2xe+OuPutp4os0ZAZx5w==",
- "Tug3eh+28ttyf+U7jfpg5w==",
- "ENFfP93LA257G6pXQkmIdg==",
- "FuWspiqu5g8Eeli5Az+BkA==",
- "kIGxCUxSlNgsKZ45Al1lWw==",
- "RzeH+G3gvuK1z+nJGYqARQ==",
- "0ofMbUCA3/v5L8lHnX4S5w==",
- "VI8pgqBZeGWNaxkuqQVe7g==",
- "x6lNRGgJcRxgKTlzhc1WPg==",
- "La0gzdbDyXUq6YAXeKPuJA==",
- "dAq8/1JSQf1f4QPLUitp0g==",
- "WN7lFJfw4lSnTCcbmt5nsg==",
- "2aDK0tGNgMLyxT+BQPDE8Q==",
- "9W57pTzc572EvSURqwrRhw==",
- "37Nkh06O979nt7xzspOFyQ==",
- "4TQkMnRsXBobbtnBmfPKnA==",
- "f/BjtP5fmFw2dRHgocbFlg==",
- "9vEgJVJLEfed6wJ7hBUGgQ==",
- "HRWYX2XOdsOqYzCcqkwIyw==",
- "StDtLMlCI75g4XC59mESEQ==",
- "99+SBN45LwKCPfrjUKRPmw==",
- "HbT6W1Ssd3W7ApKzrmsbcg==",
- "l8/KMItWaW3n4g1Yot/rcQ==",
- "s7iW1M6gkAMp+D/3jHY58w==",
- "GWwJ32SZqD5wldrXUdNTLA==",
- "YhLEPsi/TNyeUJw69SPYzQ==",
- "g0aTR8aJ0uVy3YvGYu5xrw==",
- "m6get5wjq5j1i5abnpXuZQ==",
- "ymtA8EMPMgmMcimWZZ0A1Q==",
- "HEcOaEd9zCoOVbEmroSvJg==",
- "F8l+Qd9TZgzV+r8G584lKA==",
- "3yDD+xT8iRfUVdxcc7RxKw==",
- "1eRUCdIJe3YGD5jOMbkkOg==",
- "DO1/jfP/xBI9N0RJNqB2Rw==",
- "SiSlasZ+6U2IZYogqr2UPg==",
- "tBQDfy48FnIOZI04rxfdcA==",
- "HEghmKg3GN60K7otpeNhaA==",
- "mTLBkP+yGHsdk5g7zLjVUw==",
- "RgtwfY5pTolKrUGT+6Pp6g==",
- "EyIsYQxgFa4huyo/Lomv7g==",
- "HwLSUie8bzH+pOJT3XQFyg==",
- "7Tauesu7bgs5lJmQROVFiQ==",
- "ojugpLIfzflgU2lonfdGxA==",
- "ZqjnqxZE/BjOUY0CMdVl0g==",
- "oQjugfjraFziga1BcwRLRA==",
- "JXCYeWjFqcdSf6QwB54G+A==",
- "TeBGJCqSqbzvljIh9viAqA==",
- "1Gpj4TPXhdPEI4zfQFsOCg==",
- "asouSfUjJa8yfMG7BBe+fA==",
- "ccy3Ke2k4+evIw0agHlh3w==",
- "CzSumIcYrZlxOUwUnLR2Zw==",
- "9QFYrCXsGsInUb4SClS3cQ==",
- "3RTtSaMp1TZegJo5gFtwwA==",
- "aTWiWjyeSDVY/q8y9xc2zg==",
- "UK+R+hAoVeZ4xvsoZjdWpw==",
- "rHagXw+CkF3uEWPWDKXvog==",
- "MfkyURTBfkNZwB+wZKjP4g==",
- "Qf7JFJJuuacSzl6djUT2EQ==",
- "K1RL+tLjICBvMupe7QppIQ==",
- "R2OOV18CV/YpWL1xzr/VQg==",
- "o+areESiXgSO0Lby56cBeg==",
- "VPqyIomYm7HbK5biVDvlpw==",
- "pw1jplCdTC+b0ThX0FXOjw==",
- "gTnsH3IzALFscTZ1JkA9pw==",
- "JYJvOZ4CHktLrYJyAbdOnA==",
- "P8lUiLFoL100c9YSQWYqDA==",
- "LATQEY7f47i77M6p11wjWA==",
- "U9kE50Wq5/EHO03c5hE4Ug==",
- "pFKzcRHSUBqSMtkEJvrR1Q==",
- "vHVXsAMQqc0qp7HA5Q+YkA==",
- "3XyoREdvhmSbyvAbgw2y/A==",
- "qOEIUWtGm5vx/+fg4tuazg==",
- "a6IszND1m+6w+W+CvseC7g==",
- "KuNY8qAJBce+yUIluW8AYw==",
- "5Wcq+6hgnWsQZ/bojERpUw==",
- "l2ZB9TvT68rn8AAN4MdxWw==",
- "h5HsEsObPuPFqREfynVblw==",
- "fvm0IQfnbfZFETg9v3z/Fg==",
- "QV0OG5bpjrjku4AzDvp9yw==",
- "nMuMtK/Zkb3Xr34oFuX/Lg==",
- "jMZKSMP2THqwpWqJNJRWdw==",
- "fX4G68hFL7DmEmjbWlCBJQ==",
- "ZlBNHAiYsfaEEiPQ1z+rCA==",
- "ckugAisBNX18eQz+EnEjjw==",
- "Dt6hvhPJu94CJpiyJ5uUkg==",
- "eYE9No9sN5kUZ5ePEyS3+Q==",
- "Tp52d1NndiC9w3crFqFm9g==",
- "MBjMU/17AXBK0tqyARZP5w==",
- "1EI9aa955ejNo1dJepcZJw==",
- "FqWLkhWl0iiD/u2cp+XK9A==",
- "j8nMH8mK/0Aae7ZkqyPgdg==",
- "ZtmnX24AwYAXHb2ZDC6MeQ==",
- "who8uUamlHWHXnBf7dwy4A==",
- "CmkmWcMK4eqPBcRbdnQvhw==",
- "61V74uIjaSfZM8au1dxr1A==",
- "778O1hdVKHLG2q9dycUS0Q==",
- "IdadoCPmSgHDHzn1zyf8Jw==",
- "Z2rwGmVEMCY6nCfHO3qOzw==",
- "Q3TpCE+wnmH/1h/EPWsBtQ==",
- "HnVfyqgJ+1xSsN4deTXcIA==",
- "XgPHx2+ULpm14IOZU2lrDg==",
- "IbN736G1Px5bsYqE5gW1JQ==",
- "nY/H7vThZ+dDxoPRyql+Cg==",
- "wlWxtQDJ+siGhN2fJn3qtw==",
- "MrbEUlTagbesBNg0OemHpw==",
- "LJtRcR70ug6UHiuqbT6NGw==",
- "hSNZWNKUtDtMo6otkXA/DA==",
- "LawT9ZygiVtBk0XJ+KkQgQ==",
- "DLzHkTjjuH6LpWHo2ITD0Q==",
- "i8XXN7jcrmhnrOVDV8a2Hw==",
- "ogcuGHUZJkmv+vCz567a2g==",
- "rUp5Mfc57+A8Q29SPcvH/Q==",
- "6706ncrH1OANFnaK6DUMqQ==",
- "gK7dhke5ChQzlYc/bcIkcg==",
- "t3Txxjq43e/CtQmfQTKwWg==",
- "6ZMs9vCzK9lsbS6eyzZlIA==",
- "uTHBqApdKOAgdwX3cjrCYQ==",
- "zirOtGUXeRL22ezfotZfQg==",
- "iK0dWKHjVVexuXvMWJV9pg==",
- "uzEgwx1iAXAvWPKSVwYSeQ==",
- "FHvI0IVNvih8tC7JgzvCOw==",
- "jjNMPXbmpFNsCpWY0cv3eg==",
- "/cJ0Nn5YbXeUpOHMfWXNHQ==",
- "WkSJpxBa45XJRWWZFee7hw==",
- "edlXkskLx287vOBZ9+gVYg==",
- "+Pl0bSMBAdXpRIA+zE02JA==",
- "3xw8+0/WU51Yz4TWIMK8mw==",
- "GdTanUprpE3X/YjJDPpkhQ==",
- "qnsBdl050y9cUaWxbCczRw==",
- "pnJnBzAJlO4j3IRqcfmhkQ==",
- "USq1iF90eUv41QBebs3bhw==",
- "QH3lAwOYBAJ0Fd5pULAZqw==",
- "gvvyX5ATi4q9NhnwxRxC8w==",
- "7xDIG/80SnhgxAYPL9YJtg==",
- "WVhfn2yJZ43qCTu0TVWJwA==",
- "twjiDKJM7528oIu/el4Zbg==",
- "6sBemZt4qY/TBwqk3YcLOQ==",
- "m3XYojKO+I6PXlVRUQBC3w==",
- "gUNP5w7ANJm257qjFxSJrA==",
- "mMLhjdWNnZ8zts9q+a2v3g==",
- "kjWYVC7Eok2w2YT4rrI+IA==",
- "ZzT5b0dYQXkQHTXySpWEaA==",
- "YzTV0esAxBFVls3e0qRsnA==",
- "9xmtuClkFlpz/X5E9JBWBA==",
- "nhAnHuCGXcYlqzOxrrEe1g==",
- "cbBXgB1WQ/i8Xul0bYY2fg==",
- "AkAes5oErTaJiGD2I4A1Pw==",
- "Wx9jh/teM0LJHrvTScssyQ==",
- "fU5ZZ1bIVsV+eXxOpGWo/Q==",
- "k8eZxqwxiN/ievXdLSEL/w==",
- "E2LR1aZ3DcdCBuVT7BhReA==",
- "1eCHcz4swFH+uRhiilOinQ==",
- "JipruVZx4ban3Zo5nNM37g==",
- "IPLD9nT5EEYG9ioaSIYuuA==",
- "pHozgRyMiEmyzThtJnY4MQ==",
- "p0eNK7zJd7D/HEGaVOrtrQ==",
- "dGjcKAOGBd4gIjJq7fL+qQ==",
- "uMq8cDVWFD+tpn8aeP8Pqg==",
- "gC7gUwGumN7GNlWwfIOjJQ==",
- "It+K/RCYMOfNrDZxo7lbcA==",
- "4CfEP8TeMKX33ktwgifGgA==",
- "nxDGRpePV3H4NChn4eLwag==",
- "300hoYyMR/mk1mfWJxS8/w==",
- "DmxgZsQg+Qy1GP0fPkW3VA==",
- "1vqRt79ukuvdJNyIlIag8Q==",
- "RWI0HfpP7643OSEZR8kxzw==",
- "zZtYkKU50PPEj6qSbO5/Sw==",
- "UNRlg6+CYVOt68NwgufGNA==",
- "kkbX+a00dfiTgbMI+aJpMg==",
- "VIC7inSiqzM6v9VqtXDyCw==",
- "l+x2QhxG8wb5AQbcRxXlmA==",
- "GUiinC3vgBjbQC2ybMrMNQ==",
- "6uMF5i0b/xsk55DlPumT7A==",
- "aK9nybtiIBUvxgs1iQFgsw==",
- "BLbTFLSb4mkxMaq4/B2khg==",
- "mTAqtg6oi0iytHQCaSVUsA==",
- "eBapvE+hdyFTsZ0y5yrahg==",
- "lHN2dn2cUKJ8ocVL3vEhUQ==",
- "Mj87ajJ/yR41XwAbFzJbcA==",
- "FA+nK6mpFWdD0kLFcEdhxA==",
- "FrTgaF5YZCNkyfR1kVzTLQ==",
- "5eHStFN7wEmIE+uuRwIlPQ==",
- "AyWlT+EGzIXc395zTlEU5Q==",
- "I+wVQA+jpPTJ6xEsAlYucg==",
- "Y1flEyZZAYxauMo4cmtJ1w==",
- "1AeReq55UQotRQVKJ66pmg==",
- "xzGzN5Hhbh0m/KezjNvXbQ==",
- "meHzY9dIF7llDpFQo1gyMg==",
- "RnOXOygwJFqrD+DlM3R5Ew==",
- "JKg64m6mU7C/CkTwVn4ASg==",
- "gGLz3Ss+amU7y6JF09jq7A==",
- "Pu9pEf+Tek3J+3jmQNqrKw==",
- "EATnlYm0p3h04cLAL95JgA==",
- "o64LDtKq/Fulf1PkVfFcyg==",
- "hUWqqG1QwYgGC5uXJpCvJw==",
- "RfSwpO/ywQx4lfgeYlBr2w==",
- "VaJc9vtYlqJbRPGb5Tf0ow==",
- "9JKIJrlQjhNSC46H3Cstcw==",
- "6Z9myGCF5ylWljgIYAmhqw==",
- "9bAWYElyRN1oJ6eJwPtCtQ==",
- "ohK6EftXOqBzIMI+5XnESw==",
- "AVjwqrTBQH1VREuBlOyUOg==",
- "G2UponGde3/Z+9b2m9abpQ==",
- "DoiItHSms0B9gYmunVbRkQ==",
- "vUC0HlTTHj6qNHwfviDtAw==",
- "hq35Fjgvrcx6I9e6egWS4w==",
- "sw+bmpzqsM4gEQtnqocQLQ==",
- "ApiuEPWr8UjuRyJjsYZQBw==",
- "VXu4ARjq7DS2IR/gT24Pfw==",
- "3TbRZtFtsh9ez8hqZuTDeA==",
- "CazLJMJjQMeHhYLwXW7YNg==",
- "ROSt+NlEoiPFtpRqKtDUrQ==",
- "IUwVHH6+8/0c+nOrjclOWA==",
- "lkzFdvtBx5bV6xZO0cxK7g==",
- "4ekt4m38G9m599xJCmhlug==",
- "fzkmVWKhJsxyCwiqB/ULnQ==",
- "LZAKplVoNjeQgfaHqkyEJA==",
- "91vfsZ7Lx9x5gqWTOdM4sg==",
- "MVoxyIA+emaulH8Oks8Weg==",
- "oGH7SMLI2/qjd9Vnhi3s0A==",
- "vmqfGJE6r4yDahtU/HLrxw==",
- "Y5KKN7t/v9JSxG/m1GMPSA==",
- "gXlb7bbRqHXusTE5deolGA==",
- "/2c4oNniwhL3z5IOngfggg==",
- "HgIFX42oUdRPu7sKAXhNWg==",
- "A3dX2ShyL9+WOi6MNJBoYQ==",
- "hN9bmMHfmnVBVr+7Ibd2Ng==",
- "DB706G73NpBSRS8TKQOVZw==",
- "JSyq2MIuObPnEgEUDyALjQ==",
- "kSUectNPXpXNg+tIveTFRw==",
- "XVVy3e6dTnO3HpgD6BtwQw==",
- "td7nDgTDmKPSODRusMcupw==",
- "Lt/pVD4TFRoiikmgAxEWEw==",
- "mmRob7iyTkTLDu8ObmTPow==",
- "Fd0c8f2eykUp9GYhqOcKoA==",
- "18RKixTv12q3xoBLz6eKiA==",
- "RClzwwKh51rbB4ekl99EZA==",
- "oONlXCW4aAqGczQ/bUllBw==",
- "foPAmiABJ3IXBoed2EgQXA==",
- "wEJDulZafLuXCvcqBYioFQ==",
- "K1RgR6HR5uDEQgZ32TAFgA==",
- "SEIZhyguLoyH7So0p1KY0A==",
- "ggIfX1J4dX3xQoHnHUI7VA==",
- "HBRzLacCVYfwUVGzrefZYg==",
- "aWZRql2IUPVe9hS3dxgVfQ==",
- "Err1mbWJud80JNsDEmXcYg==",
- "Z2MkqmpQXdlctCTCUDPyzw==",
- "JnE6BK0vpWIhNkaeaYNUzw==",
- "5dUry23poD+0wxZ3hH6WmA==",
- "DwP0MQf71VsqvAbAMtC3QQ==",
- "kHcBZXoxnFJ+GMwBZ/xhfQ==",
- "SUAwMWLMml8uGqagz5oqhQ==",
- "79uTykH43voFC3XhHHUzKg==",
- "P5fucOJhtcRIoElFJS4ffg==",
- "s8NpalwgPdHPla7Zi9FJ3w==",
- "8cXqZub6rjgJXmh1CYJBOg==",
- "tY916jrSySzrL+YTcVmYKQ==",
- "DRiFNojs7wM8sfkWcmLnhQ==",
- "wqUJ1Gq1Yz2cXFkbcCmzHQ==",
- "0u+0WHr7WI6IlVBBgiRi6w==",
- "GCYI9Dn1h3gOuueKc7pdKA==",
- "nVDxVhaa2o38gd1XJgE3aw==",
- "5I/heFSQG/UpWGx0uhAqGQ==",
- "1PvTn90xwZJPoVfyT5/uIQ==",
- "jHOoSl3ldFYr9YErEBnD3w==",
- "swJhrPwllq5JORWiP5EkDA==",
- "tj2rWvF2Fl+XIccctj8Mhw==",
- "QvYZxsLdu+3nV/WhY1DsYg==",
- "fKalNdhsyxTt1w08bv9fJA==",
- "CHLHizLruvCrVi9chj9sXA==",
- "sa2DECaqYH1z1/AFhpHi+g==",
- "LbPp1oL0t3K2BAlIN+l8DA==",
- "5SbwLDNT6sBOy6nONtUcTg==",
- "AfVPdxD3FyfwwNrQnVNQ7A==",
- "jt9Ocr9D8EwGRgrXVz//aQ==",
- "KkwQL0DeUM3nPFfHb2ej+A==",
- "WwraoO97OTalvavjUsqhxQ==",
- "fAKFfwlCOyhtdBK6yNnsNg==",
- "EqMlrz1to7HG4GIFTPaehQ==",
- "YmjZJyNfHN5FaTL/HAm8ww==",
- "L2D7G0btrwxl9V4dP3XM5Q==",
- "oUqO4HrBvkpSL781qAC9+w==",
- "c6Yhwy/q3j7skXq52l36Ww==",
- "FWphIPZMumqnXr1glnbK4w==",
- "AcKwfS8FRVqb72uSkDNY/Q==",
- "uSIiF1r9F18avZczmlEuMQ==",
- "XrFDomoH2qFjQ2jJ2yp9lA==",
- "N2X7KWekNN+fMmwyXgKD5w==",
- "IdmcpJXyVDajzeiGZixhSA==",
- "Wf2olJCYZRGTTZxZoBePuQ==",
- "oVlG+0rjrg2tdFImxIeVBA==",
- "7w4PDRJxptG8HMe/ijL6cQ==",
- "rueNryrchijjmWaA3kljYg==",
- "ZybIEGf1Rn/26vlHmuMxhw==",
- "yYVW07lOZHdgtX42xJONIA==",
- "4ifNsmjYf1iOn2YpMfzihg==",
- "KTjwL+qswa+Bid8xLdjMTg==",
- "THfzE2G2NVKKfO+A2TjeFw==",
- "QoqHzpHDHTwQD5UF30NruQ==",
- "dTMoNd6DDr1Tu8tuZWLudw==",
- "wOc4TbwQGUwOC1B3BEZ4OQ==",
- "gfhkPuMvjoC3CGcnOvki3Q==",
- "vljJciS+uuIvL7XXm5688g==",
- "EGLOaMe6Nvzs/cmb7pNpbg==",
- "oLWWIn/2AbKRHnddr2og9g==",
- "7l0RMKbONGS/goW/M+gnMQ==",
- "eFkXKRd2dwu/KWI5ZFpEzw==",
- "jWsC7kdp2YmIZpfXGUimiA==",
- "Jcxjli2tcIAjCe+5LyvqdQ==",
- "MUkRa/PjeWMhbCTq43g6Aw==",
- "g2nh2xENCFOpHZfdEXnoQA==",
- "x6M66krXSi0EhppwmDmsxA==",
- "26Wmdp6SkKN74W0/XPcnmA==",
- "ycjv4XkS5O7zcF3sqq9MwQ==",
- "gfnbviaVhKvv1UvlRGznww==",
- "aIPde9CtyZrhbHLK740bfw==",
- "0p8YbEMxeb73HbAfvPLQRw==",
- "Is3uxoSNqoIo5I15z6Z2UQ==",
- "NZtcY8fIpSKPso/KA6ZfzA==",
- "iQ304I1hmLZktA1d1cuOJA==",
- "0QB0OUW5x2JLHfrtmpZQ+w==",
- "kgyUtd8MFe0tuuxDEUZA9w==",
- "AcbG0e6xN8pZfYAv7QJe1Q==",
- "bb/U8UynPHwczew/hxLQxw==",
- "NuBYjwlxadAH+vLWYRZ3bg==",
- "Ao1Zc0h5AdSHtYt1caWZnQ==",
- "FL/j3GJBuXdAo54JYiWklQ==",
- "E2v8Kk60qVpQ232YzjS2ow==",
- "zVupSPz7cD0v/mD/eUIIjg==",
- "sEeblUmISi1HK4omrWuPTA==",
- "xQpYjaAmrQudWgsdu24J0A==",
- "vCekQ2nOQKiN/q8Be/qwZg==",
- "8g08gjG/QtvAYer32xgNAg==",
- "miiOqnhtef1ODjFzMHnxjA==",
- "sXlFMSTBFnq0STHj6cS/8w==",
- "+SclwwY8R2RPrnX54Z+A6w==",
- "g8TcogVxHpw7uhgNFt5VCQ==",
- "9viAzLFGYYudBYFu7kFamg==",
- "BAJ+/jbk2HyobezZyB9LiQ==",
- "/DJgKE9ouibewuZ2QEnk6w==",
- "fxg/vQq9WPpmQsqQ4RFYaA==",
- "lM/EhwTsbivA7MDecaVTPw==",
- "pVgjGg4TeTNhKimyOu3AAw==",
- "gYnznEt9r97haD/j2Cko7g==",
- "/ngbFuKIAVpdSwsA3VxvNw==",
- "VCL3xfPVCL5RjihQM59fgg==",
- "eDWsx4isnr2xPveBOGc7Hw==",
- "FIOCTEbzb2+KMCnEdJ7jZw==",
- "40HzgVKYnqIb6NJhpSIF0A==",
- "ccK42Lm8Tsv73YMVZRwL6A==",
- "MpAwWMt7bcs4eL7hCSLudQ==",
- "zxsSqovedB3HT99jVblCnQ==",
- "4erEA42TqGA9K4iFKkxMMA==",
- "BaRwTrc5ulyKbW4+QqD0dw==",
- "CT3ldhWpS1SEEmPtjejR/Q==",
- "lkl6XkrTMUpXi46dPxTPxg==",
- "3EhLkC9NqD3A6ApV6idmgg==",
- "fsW2DaKYTCC7gswCT+ByQQ==",
- "pW4gDKtVLj48gNz6V17QdA==",
- "KjfL7YyVqmCJGBGDFdJ0gw==",
- "bGGUhiG9SqJMHQWitXTcYQ==",
- "8RtLlzkGEiisy1v9Xo0sbw==",
- "R81DX/5a7DYKkS4CU+TL+w==",
- "Tu6w6DtX2RJJ3Ym3o3QAWw==",
- "nx/U4Tode5ILux4DSR+QMg==",
- "mjQS8CpyGnsZIDOIEdYUxg==",
- "wJpepvmtQQ3sz3tVFDnFqw==",
- "a4rPqbDWiMivVzaRxvAj7g==",
- "6o5g9JfKLKQ2vBPqKs6kjg==",
- "UzPPFSXgeV7KW4CN5GIQXA==",
- "NdVyHoTbBhX6Umz/9vbi0g==",
- "Fzuq+Wg7clo6DTujNrxsSA==",
- "XXFr0WUuGsH5nXPas7hR3Q==",
- "JVSLiwurnCelNBiG2nflpQ==",
- "NiawWuMBDo0Q3P2xK/vnLQ==",
- "nNaGqigseHw30DaAhjBU3g==",
- "+edqJYGvcy1AH2mEjJtSIg==",
- "1WIi4I62GqkjDXOYqHWJfQ==",
- "rwplpbNJz0ADUHTmzAj15Q==",
- "iWNlSnwrtCmVF89B+DZqOQ==",
- "tHDbi43e6k6uBgO0hA+Uiw==",
- "fHNpW230mNib08aB7IM3XQ==",
- "OChiB4BzcRE8Qxilu6TgJg==",
- "d+ctfXU0j07rpRRzb5/HDA==",
- "GDMqfhPQN0PxfJPnK1Bb9A==",
- "bLd38ZNkVeuhf0joEAxnBQ==",
- "nvUKoKfC6j8fz3gEDQrc/w==",
- "fhcbn9xE/6zobqQ2niSBgA==",
- "HGxe+5/kkh6R9GXzEOOFHA==",
- "mPwCyD0yrIDonVi+fhXyEQ==",
- "5PfGtbH9fmVuNnq83xIIgQ==",
- "XePy/hhnQwHXFeXUQQ55Vg==",
- "yfAaL0MMtSXPQ37pBdmHxQ==",
- "NiQ/m4DZXUbpca9aZdzWAw==",
- "uT6WRh5UpVdeABssoP2VTg==",
- "oxoZP897lgMg/KLcZAtkAg==",
- "oKt57TPe4PogmsGssc3Cbg==",
- "RxmdoO8ak8y/HzMSIm+yBQ==",
- "6leyDVmC5jglAa98NQ3+Hg==",
- "+QosBAnSM2h4lsKuBlqEZw==",
- "hy303iin+Wm7JA6MeelwiQ==",
- "m9iuy4UtsjmyPzy6FTTZvw==",
- "f6Ye5F0Lkn34uLVDCzogFQ==",
- "iGykaF+h4p46HhrWqL8Ffg==",
- "LPYFDbTEp5nGtG6uO8epSw==",
- "t2vWMIh2BvfDSQaz5T1TZw==",
- "OONAvFS/kmH7+vPhAGTNSg==",
- "g/z9yk94XaeBRFj4hqPzdw==",
- "2wesXiib76wM9sqRZ7JYwQ==",
- "n7h9v2N1gOcvMuBEf8uThw==",
- "ITYL3tDwddEdWSD6J6ULaA==",
- "inrUwXyKikpOW0y2Kl1wGw==",
- "iwKBOGDTFzV4aXgDGfyUkw==",
- "+fcjH2kZKNj8quOytUk4nQ==",
- "Srl4HivgHMxMOUHyM3jvNw==",
- "qngzBJbiTB4fivrdnE5gOg==",
- "G0MlFNCbRjXk4ekcPO/chQ==",
- "t+bYn9UqrzKiuxAYGF7RLA==",
- "RVD3Ij6sRwwxTUDAxwELtA==",
- "RNdyt6ZRGvwYG5Ws3QTuEA==",
- "9DRHdyX8ECKHUoEsGuqR4Q==",
- "oMJLQTH1wW7LvOV0KRx/dw==",
- "bjLZ7ot/X/vWSVx4EYwMCg==",
- "+p8pofUlwn8vV6Rp6+sz9g==",
- "cchuqe+CWCJpoakjHLvUfA==",
- "NvurnIHin4O+wNP7MnrZ1w==",
- "RBMv0IxXEO3o7MnV47Bzow==",
- "xTizUioizbMQxD0T6fy/EQ==",
- "ZCdad3AwhVArttapWFwT/Q==",
- "Hy1nqC40l5ItxumkIC2LAA==",
- "W/5ThNLu43uT1O+fg0Fzwg==",
- "b3BQG9/9qDNC/bNSTBY/sQ==",
- "neQoa8pvETr07blVMN3pgA==",
- "oR8rvIZoeoaZ/ufpo0htfQ==",
- "zEzWZ6l7EKoVUxvk/l78Mw==",
- "IHyIeMad23fSDisblwyfpA==",
- "m6srF+pMehggHB1tdoxlPg==",
- "kggaIvN2tlbZdZRI8S5Apw==",
- "2RFaMPlSbVuoEqKXgkIa5A==",
- "//eHwmDOQRSrv+k9C/k3ZQ==",
- "X/Gha4Ajjm/GStp/tv+Jvw==",
- "+H0Rglt/HnhZwdty2hsDHg==",
- "a1aL8zQ+ie3YPogE3hyFFg==",
- "HxEU37uBMeiR5y8q/pM42g==",
- "68nqDtXOuxF7DSw6muEZvg==",
- "s5+78jS4hQYrFtxqTW3g1Q==",
- "drfODfDI6GyMW7hzkmzQvA==",
- "pT1raq2fChffFSIBX3fRiA==",
- "sfowXUMdN2mCoBVrUzulZg==",
- "AV/YJfdoDUdRcrXVwinhQg==",
- "3AKEYQqpkfW7CZMFQZoxOw==",
- "PHwJ5ZAqqftZ4ypr8H1qiQ==",
- "AoN/pnK4KEUaGw4V9SFjpg==",
- "soBA65OmZdfBGJkBmY/4Iw==",
- "mSstwJq7IkJ0JBJ5T8xDKg==",
- "h13Xuonj+0dD1xH86IhSyQ==",
- "HK9xG03FjgCy8vSR+hx8+Q==",
- "oFanDWdePmmZN0xqwpUukA==",
- "zCRZgVsHbQZcVMHd9pGD3A==",
- "EvSB+rCggob2RBeXyDQRvQ==",
- "tXuu7YpZOuMLTv87NjKerA==",
- "DJ+a37tCaGF5OgUhG+T0NA==",
- "KkXlgPJPen6HLxbNn5llBw==",
- "2W6lz1Z7PhkvObEAg2XKJw==",
- "n+xYzfKmMoB3lWkdZ+D3rg==",
- "CPDs+We/1wvsGdaiqxzeCQ==",
- "2Wvk/kouEEOY0evUkQLhOQ==",
- "ezsm4aFd6+DO9FUxz0A8Pg==",
- "9sYLg75/hudZaBA3FrzKHw==",
- "Pp1ZMxJ8yajdbfKM4HAQxA==",
- "xiyRfVG0EfBA+rCk+tgWRQ==",
- "/IarsLzJB8bf0AupJJ+/Eg==",
- "LJeLdqmriyAQp+QjZGFkdQ==",
- "IhHyHbHGyQS+VawxteLP0w==",
- "nGzPc0kI/EduVjiK7bzM6Q==",
- "m06wctjNc3o7iyBHDMZs2w==",
- "mSJF9dJnxZ15lTC6ilbJ2A==",
- "xdmY+qyoxxuRZa9kuNpDEg==",
- "oNOI17POQCAkDwj6lJsYOA==",
- "p73gSu4d+4T/ZNNkIv9Nlw==",
- "vOJ55zFdgPPauPyFYBf01w==",
- "4A+RHIw+aDzw0rSRYfbc7g==",
- "/gi3UZmunVOIXhZSktZ8zQ==",
- "a6vem8n6WmRZAalDrHNP0g==",
- "kGeXrHEN6o7h5qJYcThCPw==",
- "wrewZ0hoHODf7qmoGcOd7g==",
- "Z0sjccxzKylgEiPCFBqPSA==",
- "LKyOFgUKKGUU/PxpFYMILw==",
- "L2RofFWDO0fVgSz4D2mtdw==",
- "KI7tQFYW38zYHOzkKp9/lQ==",
- "ewe/P3pJLYu/kMb5tpvVog==",
- "IADk81pIu8NIL/+9Fi94pA==",
- "0L0FVcH5Dlj3oL8+e9Na7g==",
- "tdiTXKrkqxstDasT0D5BPA==",
- "R906Kxp2VFVR3VD+o6Vxcw==",
- "wc+8ohFWgOF4VlSYiZIGwQ==",
- "wJKFMqh6MGctWfasjHrPEg==",
- "UHpge5Bldt9oPGo2oxnYvQ==",
- "vX7RIhatQeXAMr1+OjzhZw==",
- "s2AKVTwrY65/SWqQxDGJQg==",
- "Q4bfQslDSqU64MOQbBQEUw==",
- "mVT74Eht+gAowINoMKV7IQ==",
- "EuGWtIbyKToOe6DN3NkVpQ==",
- "ALlGgVDO8So71ccX0D6u2g==",
- "Rww3qkF3kWSd+AaMT0kfdw==",
- "hlvtFGW8r0PkbUAYXEM+Hw==",
- "Oc3BqTF3ZBW3xE0QsnFn/A==",
- "3j0kFUZ6g+yeeEljx+WXGg==",
- "8BLkvEkfnOizJq0OTCYGzw==",
- "Lqel4GdU0ZkfoJVXI5WC/Q==",
- "rvE64KQGkVkbl07y7JwBqw==",
- "HbXv8InyZqFT7i3VrllBgg==",
- "zwQ/3MzTJ9rfBmrANIh14w==",
- "gglLMohmJDPRGMY1XKndjQ==",
- "lyfqic/AbEJbCiw+wA01FA==",
- "XqUO7ULEYhDOuT/I2J8BOA==",
- "wPhJcp7U7IVX83szbIOOxQ==",
- "1gA65t5FiBTEgMELTQFUPQ==",
- "ll2M0QQzBsj5OFi02fv3Yg==",
- "wt+qDLU38kzNU75ZYi3Hbw==",
- "a4EYNljinYTx9vb1VvUA6A==",
- "T6LA+daQqRI38iDKZTdg1A==",
- "gwyVIrTk5o0YMKQq4lpJ+Q==",
- "bPRX2zl+K1S0iWAWUn1DZw==",
- "KQw25X4LnQ9is+qdqfxo0w==",
- "6tfM6dx3R5TiVKaqYQjnCg==",
- "OlwHO6Sg2zIwsCOCRu0HiQ==",
- "mr1qjhliRfl87wPOrJbFQg==",
- "8c+lvG5sZNimvx9NKNH3ug==",
- "5Nk2Z94DhlIdfG5HNgvBbQ==",
- "F50iXjRo1aSTr37GQQXuJA==",
- "tfgO55QqUyayjDfQh+Zo1Q==",
- "h7Fc+eT/GuC8iWI+YTD0UQ==",
- "3TjntNWtpG7VqBt3729L6Q==",
- "+DWs0vvFGt6d3mzdcsdsyA==",
- "VJt2kPVBLEBpGpgvuv1oUw==",
- "XLq/nWX8lQqjxsK9jlCqUg==",
- "9s3ar9q32Y5A3tla5GW/2Q==",
- "51yLpfEdvqXmtB6+q27/AQ==",
- "AiMtfedwGcddA+XYNc+21g==",
- "p/48hurJ1kh2FFPpyChzJg==",
- "CRiL6zpjfznhGXhCIbz8pQ==",
- "/jDVt9dRIn+o4IQ1DPwbsg==",
- "UNdKik7Vy23LjjPzEdzNsg==",
- "Koiog/hpN7ew5kgJbty34A==",
- "4itEKfbRCJvqlgKnyEdIOQ==",
- "zi04Yc01ZheuFAQc59E45A==",
- "etRjRvfL/IwceY/IJ1tgzQ==",
- "3sNJJIx1NnjYcgJhjOLJOg==",
- "4yVqq66iHYQjiTSxGgX2oA==",
- "Q8RVI/kRbKuXa8HAQD7zUA==",
- "OERGn45uzfDfglzFFn6JAg==",
- "JGEy6VP3sz3LHiyT2UwNHQ==",
- "1zDfWw5LdG20ClNP1HYxgw==",
- "TGB+FIzzKnouLh5bAiVOQg==",
- "n5GA+pA9mO/f4RN9NL9lNg==",
- "bUxQBaqKyvlSHcuRL9whjg==",
- "tOdlnsE3L3XCBDJRmb/OqA==",
- "XdkxmYYooeDKzy7PXVigBQ==",
- "PMvG4NqJP76kMRAup6TSZA==",
- "qpFJZqzkklby+u1UT3c1iA==",
- "fW3QZyq5UixIA1mP6eWgqQ==",
- "9nMltdrrBmM5ESBY2FRjGA==",
- "1Vtrv6QUAfiYQjlLTpNovg==",
- "ur9JDCVNwzSH4q4ngDlHNQ==",
- "4u3eyKc+y3uRnkASrgBVUw==",
- "XddlSluOH6VkR7spFIFmdQ==",
- "NOmu8oZc6CcKLu+Wfz2YOQ==",
- "3Ejtsqw3Iep/UQd0tXnSlg==",
- "y/e3HSdg7T19FanRpJ7+7Q==",
- "YodhkayN5wsgPZEYN7/KNA==",
- "pZfn6IiG+V28fN8E2hawDQ==",
- "jGHMJqbj6X1NdTDyWmXYAQ==",
- "olTSlmirL9MFhKORiOKYkQ==",
- "CrJDgdfzOea2M2hVedTrIg==",
- "fpXijBOM3Ai1RkmHven5Ww==",
- "eLYKLr4labZeLiRrDJ9mnA==",
- "9vmJUS7WIVOlhMqwipAknQ==",
- "G7J/za99BFbAZH+Q+/B8WA==",
- "Hb+pdSavvJ9lUXkSVZW8Og==",
- "gTB2zM3RPm27mUQRXc/YRg==",
- "e5KCqQ/1GAyVMRNgQpYf6g==",
- "1ApqwW7pE+XUB2Cs2M6y7g==",
- "/wiA2ltAuWyBhIvQAYBTQw==",
- "HFCQEiZf7/SNc+oNSkkwlA==",
- "JFi6N1PlrpKaYECOnI7GFg==",
- "E4ojRDwGsIiyuxBuXHsKBA==",
- "+25t/2lo0FUEtWYK8LdQZQ==",
- "up2MVDi9ve+s83/nwNtZ7Q==",
- "cXpfd6Io6Glj2/QzrDMCvA==",
- "DCvI9byhw0wOFwF1uP6xIQ==",
- "PibGJQNw7VHPTgqeCzGUGA==",
- "0ZRGz+oj2infCAkuKKuHiQ==",
- "2QS/6OBA1T01NlIbfkTYJg==",
- "P14k+fyz0TG9yIPdojp52w==",
- "g5EzTJ0KA4sO3+Opss3LMg==",
- "R5oOM58zdbVxFSDQnNWqeA==",
- "Vg2E5qEDfC+QxZTZDCu9yQ==",
- "YPgMthbpcBN2CMkugV60hQ==",
- "gZWTFt5CuLqMz6OhWL+hqQ==",
- "YrEP9z2WPQ8l7TY1qWncDA==",
- "7p4NpnoNSQR7ISg+w+4yFg==",
- "9L6yLO93sRN70+3qq3ObfA==",
- "QH36wzyIhh6I56Vnx79hRA==",
- "9DtM1vls4rFTdrSnQ7uWXw==",
- "ZlOAnCLV1PkR0kb3E+Nfuw==",
- "9UhKmKtr4vMzXTEn74BEhg==",
- "Ndx5LDiVyyTz/Fh3oBTgvA==",
- "mXZ4JeBwT2WJQL4a/Tm4jQ==",
- "N9nD7BGEM7LDwWIMDB+rEQ==",
- "dmAfbd9F0OJHRAhNMEkRsA==",
- "jV/D2B11NLXZRH77sG9lBw==",
- "1C50kisi9nvyVJNfq2hOEQ==",
- "NMbAjbnuK7EkVeY3CQI5VA==",
- "J1nYqJ7tIQK1+a/3sMXI/Q==",
- "m416yrrAlv+YPClGvGh+qQ==",
- "rLZII1R6EGus+tYCiUtm6g==",
- "xktOghh1S9nIX6fXWnT+Ug==",
- "FcFcn4qmPse5mJCX5yNlsA==",
- "xAAipGfHTGTjp9Qk1MR8RQ==",
- "RQOlmzHwQKFpafKPJj0D8w==",
- "WRjYdKdtnd1G9e/vFXCt0g==",
- "z0BU//aSjYHAkGGk3ZSGNg==",
- "M55eersiJuN9v61r8DoAjQ==",
- "l2mAbuFF3QBIUILDODiUHQ==",
- "IhpXs1TK7itQ3uTzZPRP5Q==",
- "t2EkpUsLOEOsrnep0nZSmA==",
- "lMaO8Yf+6YNowGyhDkPhQA==",
- "UbSFw5jtyLk5MealqJw++A==",
- "5u2PdDcIY3RQgtchSGDCGg==",
- "MQYM3BT77i35LG9HcqxY2Q==",
- "8AfCSZC0uasVON9Y/0P2Pw==",
- "evaWFoxZNQcRszIRnxqB+A==",
- "+8PiQt6O7pJI/nIvQpDaAg==",
- "eRwaYiog2DdlGQyaltCMJg==",
- "JyUJEnU6hJu8x2NCnGrYFw==",
- "l0E0U/CJsyCVSTsXW4Fp+w==",
- "XV13yK0QypJXmgI+dj4KYw==",
- "jrRH0aTUYCOpPLZwzwPRfQ==",
- "N3YDSkBUqSmrmNvZZx4a1Q==",
- "0yJ7TQYzcp3DXVSvwavr+w==",
- "rhgtLQh0F9bRA6IllM7AGw==",
- "IWZnTJ3Hb9qw9HAK/M9gTw==",
- "izeyFvXOumNgVyLrbKW45g==",
- "xYD8jrCDmuQna+p1ebnKDQ==",
- "SOdpdrk2ayeyv0xWdNuy9g==",
- "HYylUirJRqLm+dkp39fSOQ==",
- "q4z6A4l3nhX3smTmXr+Sig==",
- "Zyo0fzewcqXiKe2mAwKx5g==",
- "LMEtzh0+J27+4zORfcjITw==",
- "LoUv/f2lcWpjftzpdivMww==",
- "mXBfDUt/sBW5OUZs2sihvw==",
- "PggVPQL5YKqSU/1asihcrg==",
- "mI0eT4Rlr7QerMIngcu/ng==",
- "NmQrsmb8PVP05qnSulPe5Q==",
- "TcyyXrSsQsnz0gJ36w4Dxw==",
- "y4mfEDerrhaqApDdhP5vjA==",
- "ynaj4XjU27b7XbqPyxI8Ig==",
- "Ua6aO6HwM+rY4sPR19CNFA==",
- "3go7bJ9WqH/PPUTjNP3q/Q==",
- "n1ixvP7SfwYT3L2iWpJg6A==",
- "W8y32OLHihfeV0XFw7LmOg==",
- "uzkNhmo2d08tv5AmnyqkoQ==",
- "hJ8leLNuJ6DK5V8scnDaZQ==",
- "KodYHHN62zESrXUye7M01g==",
- "H+yPRiooEh5J7lAJB4RZ7Q==",
- "dZg5w8rFETMp9SgW7m0gfg==",
- "LsmsPokAwWNCuC74MaqFCQ==",
- "1QGhj9NONF2rC44UdO+Izw==",
- "uwGivY3/C9WK+dirRPJZ4A==",
- "rXGWY/Gq+ZEsmvBHUfFMmQ==",
- "j4FBMnNfdBwx0VsDeTvhFg==",
- "81nkjWtpBhqhvOp6K8dcWg==",
- "dCDaYYrgASXPMGFRV0RCGg==",
- "Kj1QI+s9261S3lTtPKd9eg==",
- "LblwOqNiciHmt2NXjd89tg==",
- "46piyANQVvvLqcoMq5G8tQ==",
- "XJihma9zSRrXLC+T+VcFDA==",
- "K3NBEG8jJTJbSrYSOC3FKw==",
- "cT3PwwS6ALZA/na9NjtdzA==",
- "wJ4uCrl4DPg70ltw1dZO3w==",
- "JATLdpQm//SQnkyCfI5x7Q==",
- "X1PaCfEDScclLtOTiF5JUw==",
- "444F9T6Y7J67Y9sULG81qg==",
- "8JVHFRwAd/SCLU0CRJYofg==",
- "aLh1XEUrfR9W82gzusKcOg==",
- "U+bB5NjFIuQr/Y5UpXHwxA==",
- "Egs14xVbRWjfBBX7X5Z60g==",
- "KSorNz/PLR/YYkxaj1fuqw==",
- "RDgGGxTtcPvRg/5KRRlz4w==",
- "5T39s5CtSrK5awMPUcEWJg==",
- "+PUVXkoTqHxJHO18z4KMfw==",
- "Bvk8NX4l6WktLcRDRKsK/A==",
- "kNGIV3+jQmJlZDTXy1pnyA==",
- "E3jMjAgXwvwR8PA53g4+PQ==",
- "MbI04HlTGCoc/6WDejwtaQ==",
- "aEnHUfn7UE/Euh6jsMuZ7g==",
- "z4Bft++f72QeDh4PWGr/sw==",
- "1lCcQWGDePPYco4vYrA5vw==",
- "iu5csar0IQQBOTgw5OvJwQ==",
- "raKMXnnX6PFFsbloDqyVzQ==",
- "uPnL9tboMZo0Kl2fe24CmA==",
- "8OFxXwnPmrogpNoueZlC4Q==",
- "V6CRKrKezPwsRdbm0DJ2Yg==",
- "xmGgK3W5y+oCd0K2u8XjZQ==",
- "Ry3zgZ6KHrpNyb7+Tt2Pkw==",
- "IwLbkL33z+LdTjaFYh93kg==",
- "caepyBOAFu0MxbcXrGf6TA==",
- "iIWxFdolLcnXqIjPMg+5kQ==",
- "P430CeF2MDkuq11YdjvV8A==",
- "yCu+DVU/ceMTOZ5h/7wQTg==",
- "4mQVNv7FHj+/O6XFqWFt/Q==",
- "OEJ40VmMDYzc2ESEMontRA==",
- "D66Suu3tWBD+eurBpPXfjA==",
- "RNK9G1hfuz3ETY/RmA9+aA==",
- "BYpHADmEnzBsegdYTv8B5Q==",
- "DBKrdpCE0awppxST4o/zzg==",
- "KOmdvm+wJuZ/nT/o1+xOuw==",
- "gDxqUdxxeXDYhJk9zcrNyA==",
- "UPzS4LR3p/h0u69+7YemrQ==",
- "hf9HFxWRNX2ucH8FLS7ytA==",
- "ozVqYsmUueKifb4lDyVyrg==",
- "TfHvdbl2M4deg65QKBTPng==",
- "SzCGM8ypE58FLaR1+1ccxQ==",
- "3nthUmLZ30HxQrzr2d7xFA==",
- "1jBaRO8Bg5l6TH7qJ8EPiw==",
- "eJlcN+gJnqAnctbWSIO9uA==",
- "G8LFBop8u6IIng+gQuVg3w==",
- "3JhnM6G4L06NHt31lR0zXA==",
- "342VOUOxoLHUqtHANt83Hw==",
- "hRxbdeniAVFgKUgB9Q3Y+g==",
- "cFFE2R4GztNoftYkqalqUQ==",
- "YmaksRzoU+OwlpiEaBDYaQ==",
- "jon1y9yMEGfiIBjsDeeJdA==",
- "oSnrpW4UmmVXtUGWqLq+tQ==",
- "zaqyy3GaJ7cp8qDoLJWcTw==",
- "luO1R8dUM9gy1E2lojRQoA==",
- "YHM6NNHjmodv+G0mRLK7kw==",
- "ZSmN8mmI9lDEHkJqBBg0Nw==",
- "520wTzrysiRi2Td92Zq0HQ==",
- "RAAw14BA1ws5Wu/rU7oegw==",
- "vb6Agwzk4JG0Nn7qRPPFMQ==",
- "joDXdLpXvRjOqkRiYaD/Sw==",
- "dK2DU3t1ns+DWDwfBvH3SQ==",
- "gZNJ1Qq6OcnwXqc+jXzMLQ==",
- "R8ULpSNu9FcCwXZM0QedSg==",
- "mc45FSMtzdw2PTcEBwHWPw==",
- "d0qvm3bl38rRCpYdWqolCQ==",
- "o9tdzmIu+3J/EYU4YWyTkA==",
- "5eXpiczlRdmqMYSaodOUiQ==",
- "KYuUNrkTvjUWQovw9dNakA==",
- "02im2RooJQ/9UfUrh5LO+A==",
- "kWPUUi7x9kKKa6nJ+FDR5Q==",
- "6z8CRivao3IMyV4p4gMh7g==",
- "SmRWEzqddY9ucGAP5jXjAg==",
- "DJscTYNFPyPmTb57g/1w+Q==",
- "uOHrw37yF9oLLVd16nUpeg==",
- "HaIRV9SNPRTPDOSX9sK/bg==",
- "K4yZNVoqHjXNhrZzz2gTew==",
- "bTNRjJm+FfSQVfd56nNNqQ==",
- "x5lyMArsv1MuJmEFlWCnNw==",
- "cxpZ4bloGv734LBf4NpVhA==",
- "kUudvRfA33uJDzHIShQd3Q==",
- "3Wfj05vCLFAB9vII5AU9tw==",
- "FUQySDFodnRhr+NUsWt0KA==",
- "eC/RcoCVQBlXdE9WtcgXIw==",
- "NoX8lkY+kd2GPuGjp+s0tQ==",
- "EzjbinBHx3Wr08eXpH3HXA==",
- "0VsaJHR0Ms8zegsCpAKoyg==",
- "e2xLFVavnZIUUtxJx+qa1g==",
- "Kt6BTG1zdeBZ3nlVk+BZKQ==",
- "EUXQZwLgnDG+C8qxVoBNdw==",
- "0SkC/4PtnX1bMYgD6r6CLA==",
- "rzj6mjHCcMEouL66083BAg==",
- "V5HEaY3v9agOhsbYOAZgJA==",
- "tJt6VDdAPEemBUvnoc4viA==",
- "g0lWrzEYMntVIahC7i0O2g==",
- "zCpibjrZOA3FQ4lYt0WoVA==",
- "4Xh/B3C16rrjbES+FM1W8g==",
- "GHEdXgGWOeOa6RuPMF0xXg==",
- "3kREs/qaMX0AwFXN0LO5ow==",
- "GLDNTSwygNBmuFwCIm7HtA==",
- "JBkbaBiorCtFq9M9lSUdMg==",
- "rJCuanCy51ydVD4nInf9IQ==",
- "OzFRv+PzPqTNmOnvZGoo5g==",
- "7mxU5fJl/c6dXss9H3vGcQ==",
- "9J53kk+InE3CKa7cPyCXMw==",
- "x9TIZ9Ua++3BX+MpjgTuWA==",
- "h0MH5NGFfChgmRJ3E/R3HQ==",
- "25w3ZRUzCvJwAVHYCIO5uw==",
- "1Wc8jQlDSB4Dp32wkL2odw==",
- "ipPPjxpXHS1tcykXmrHPMQ==",
- "r95wJtP5rsTExKMS7QhHcw==",
- "TZT86wXfzFffjt0f95UF5w==",
- "VpmBstwR7qPVqPgKYQTA3g==",
- "3++dZXzZ6AFEz7hK+i5hww==",
- "mAiD16zf+rCc7Qzxjd5buA==",
- "1JI9bT92UzxI8txjhst9LQ==",
- "TNyvLixb03aP2f8cDozzfA==",
- "spHVvA/pc7nF9Q4ON020+w==",
- "GA8k6GQ20DGduVoC+gieRA==",
- "T7waQc3PvTFr0yWGKmFQdQ==",
- "P0Pc8owrqt6spdf7FgBFSw==",
- "DKApp/alXiaPSRNm3MfSuA==",
- "UreSZCIdDgloih8KLeX7gg==",
- "xJi0T+psHOXMivSOVpMWeQ==",
- "cNsC9bH30eM1EZS6IdEdtQ==",
- "XjjrIpsmATV/lyln4tPb+g==",
- "qt5CsMts2aD4lw/4Q6bHYQ==",
- "h+KRDKIvyVUBmRjv1LcCyg==",
- "2j83jrPwPfYlpJJ2clEBYQ==",
- "ZrCezGLz38xKmzAom6yCTQ==",
- "SEGu+cSbeeeZg4xWwsSErQ==",
- "Duz/8Ebbd0w6oHwOs0Wnwg==",
- "Ci7sS7Yi1+IwAM3VMAB4ew==",
- "DG2Qe2DqPs5MkZPOqX363Q==",
- "v0Bvws1WYVoEgDt8xmVKew==",
- "CtDj/h2Q/lRey20G8dzSgA==",
- "WRoJMO0BCJyn5V6qnpUi4Q==",
- "RQywrOLZEKw9+kG6qTzr3g==",
- "mU4CqbAwpwqegxJaOz9ofQ==",
- "aN5x46Gw1VihRalwCt1CGg==",
- "U6VQghxOXsydh3Naa5Nz4A==",
- "YA+zdEC+yEgFWRIgS1Eiqw==",
- "oPcxgoismve6+jXyIKK6AQ==",
- "PqLCd/pwc+q5GkL6MB0jTg==",
- "fHL+fHtDxhALZFb9W/uHuw==",
- "dhTevyxTYAuKbdLWhG47Kw==",
- "VllbOAjeW3Dpbj5lp2OSmA==",
- "3itfXtlLPRmPCSYaSvc39Q==",
- "GNak/LFeoHWlTdLW1iU4eg==",
- "HuDuxs2KiGqmeyY1s1PjpQ==",
- "xs8J3cesq7lDhP/dNltqOw==",
- "foXSDEUwMhfHWJSmSejsQg==",
- "6fWom3YoKvW6NIg6y9o9CQ==",
- "NhZbSq0CjDNOAIvBHBM9zA==",
- "5w4FbRhWACP7k2WnNitiHg==",
- "0UeRwDID2RBIikInqFI7uw==",
- "/y/jHHEpUu5TR+R2o96kXA==",
- "voO3krg4sdy4Iu+MZEr8+g==",
- "hdzol5dk//Q6tCm4+OndIA==",
- "Nc5kiwXCAyjpzt43G5RF1A==",
- "3UBYBMejKInSbCHRoJJ7dg==",
- "dRFCIbVu0Y8XbjG5i+UFCQ==",
- "t8pjhdyNJirkvYgWIO/eKg==",
- "FAXzjjIr8l1nsQFPpgxM/g==",
- "SPGpjEJrpflv1hF0qsFlPw==",
- "9Y1ZmfiHJd9vCiZ6KfO1xQ==",
- "7Eqzyb+Kep+dIahYJWNNxQ==",
- "9rL8nC/VbSqrvnUtH9WsxQ==",
- "H4FZ5Wcnb40hQM1DMGGe8A==",
- "AjoXWGb/l9xH/hscgEc6kQ==",
- "6nzFl41uutgDdC30oOeCqg==",
- "3jo1jRy3MybXtoLR+JIbJw==",
- "mXdE08dv+OlIhlcqMBH2Gg==",
- "Ifd7DI6o8N5gnyAKqZTlRw==",
- "JNUvg/kxL3rdcZnD4IqUxw==",
- "ry8B+sAHNeFIZHCCDynFyw==",
- "TXaEd5lIKhzjcncfNcBgSg==",
- "Mr3ehuDMUimOSn+FlkchdA==",
- "cwiGhjmX9v8I7E/ekQ0h+g==",
- "I/r5+1jnqumCPprKC/2BqA==",
- "S4V3MfGYk8I4fd3WH09yYw==",
- "A+crVyUeynAkEMYKbnFjZw==",
- "vtyHcNQPcUTRuZcQvRUX4Q==",
- "UNKx1ZVv3HNp21zrUSm6ew==",
- "rsAlvGLv2D0swd6ol3WlvA==",
- "2qwqb8ENAR2fpQnw55sPDw==",
- "xBJJuYYnsTJOeFggZSKC4Q==",
- "omvtZZKruPiEt6fV0YXTdg==",
- "JZEgKUhUN+USJsvtF4HZOg==",
- "euG/kpJ5elSDOGNbWWDfNQ==",
- "DiiVmM6/WNcp0MUjSaFq6w==",
- "QCNS8gAml1M2pJ+MxZsueg==",
- "M6+pggFsHfM3alFxcMOFNQ==",
- "YLoWpDTwXnszEQm8FA164Q==",
- "N08oUZtlXbQvO9t3vXnGog==",
- "jkjuJowWuOa4CLY+RZiErQ==",
- "mPf+S+6oAoVIYEVveaiNFA==",
- "R0iVyo5qreP/68uZlZphDA==",
- "GYlqhQgp03B0mXpUhQ+ZCA==",
- "lQNbmWD7PhwNGye+zbc3GQ==",
- "cNeaOJEOzUSDdRmenPQyuw==",
- "Gp66/Txv6ebv5bn85TuQtA==",
- "xAda6DVkcvvqhI8vWZeGyA==",
- "Ggk1Qa0lEdAgCXG6SmCkBA==",
- "MYuO7ZURXtyaf56q7hH4Zw==",
- "RUIdZRTgJBudWUZQFgiFaQ==",
- "bgFJxLirUom2zT0h7LdOpw==",
- "A2gaOpIlrS7TKVQgy9XMSw==",
- "zevXp0lqqnXv9X6Bgmjtqg==",
- "a5iuFqWAdFFsRgp7SFYwNg==",
- "TxTy0TaDsWTcRH3wdBEQLQ==",
- "jephVdKDeJIhXPrdMOJ4qA==",
- "C4KdamfqUPuJ3RGFdpIEdw==",
- "zl6l2Ioz1qovRUIWrSyxVA==",
- "+gGaDxUe0UnNrf3PPg1qQQ==",
- "1HgbrlaLMHS6Qj/0kkaJxg==",
- "eGxTly6Pnu7eV/MKYMmuYw==",
- "RAMKfnlrzNjpyh2BWt6JHg==",
- "4pZQm9ogCZ/EAR9pjJm1eA==",
- "l1zv3erwXIegQFd02NlCag==",
- "uHGyRZchuA4ulmuD5LqquQ==",
- "/vFu89tsV+lbcoiqM/XWog==",
- "63SUgqfQimrmjvy/bEDQ0w==",
- "JLHuf+FlChFDa9LYfTQ4Eg==",
- "I+ZnPePTFX8ZODe14bxgyA==",
- "CtoK1k3U82BkvzuPfQ4pjQ==",
- "6nqQm4C7y+wZ+qX0kVjwmA==",
- "+C3kBxRXIjqBk0EJxe3Xfg==",
- "qVu748pIxEZtiywg4/4qhw==",
- "07o+sKjjRCYkwy/ACyoYhg==",
- "CiLF4dkbLURekBcQbwPUVA==",
- "W/N5/nkp4iQIPYfAagVV7A==",
- "3PJOphhEjw0E4arTfVVwdg==",
- "YdMbARHwB+bSOd0PlTlXiA==",
- "41hbx5Yr7UWxsV6+bWUYUA==",
- "SqJHXD0MorNwHtHL9TbWLg==",
- "pWKGUzm/muwOiBtzkRMnRg==",
- "az9zZ7HTa4FJGRQMcamvEw==",
- "zavAAN8C9Wo8oBLyztp63Q==",
- "yBAnPmwrMJ8kpPP292S/Lw==",
- "E6szQhjuUAz2e0h9ffQfEQ==",
- "Fs3cQxQyS9kM4T8j5R7rWw==",
- "GB5fRLZxnjRUfEe0SwcePQ==",
- "+9OY8xkT9dM/rb2T6ACtOQ==",
- "If2xFBD1p91iDD7ZrsfgjA==",
- "QCFfoMhy8EleZAOpfRY88w==",
- "NobWPk1Z6bHt5s9NHXt/pg==",
- "nK6T4vV4384OIcqO5tQMhA==",
- "Zov1EzK+VomiuwT1+ulQ8g==",
- "pF98OKDvLUlnTzo7wmlpOw==",
- "Wrq9YDsieAMC3Y2DSY5Rcg=="
- ]
-}
diff --git a/application/basilisk/base/content/newtab/newTab.js b/application/basilisk/base/content/newtab/newTab.js
index bbd2ef39d..1731edadc 100644
--- a/application/basilisk/base/content/newtab/newTab.js
+++ b/application/basilisk/base/content/newtab/newTab.js
@@ -11,7 +11,6 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/PageThumbs.jsm");
Cu.import("resource://gre/modules/BackgroundPageThumbs.jsm");
-Cu.import("resource:///modules/DirectoryLinksProvider.jsm");
Cu.import("resource://gre/modules/NewTabUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Rect",
diff --git a/application/basilisk/base/content/newtab/newTab.xhtml b/application/basilisk/base/content/newtab/newTab.xhtml
index eef51b4b2..7de1ff3d4 100644
--- a/application/basilisk/base/content/newtab/newTab.xhtml
+++ b/application/basilisk/base/content/newtab/newTab.xhtml
@@ -73,7 +73,6 @@
<div id="newtab-horizontal-margin">
<div class="newtab-side-margin"/>
<div id="newtab-grid">
- <h1 id="topsites-heading"/>
</div>
<div class="newtab-side-margin"/>
</div>
diff --git a/application/basilisk/base/content/newtab/page.js b/application/basilisk/base/content/newtab/page.js
index f7626ced2..7c19a9827 100644
--- a/application/basilisk/base/content/newtab/page.js
+++ b/application/basilisk/base/content/newtab/page.js
@@ -48,11 +48,6 @@ var gPage = {
let enabled = gAllPages.enabled;
this._updateAttributes(enabled);
- // Update thumbnails to the new enhanced setting
- if (aData == "browser.newtabpage.enhanced") {
- this.update();
- }
-
// Initialize the whole page if we haven't done that, yet.
if (enabled) {
this._init();
@@ -79,10 +74,7 @@ var gPage = {
update(reason = "") {
// Update immediately if we're visible.
if (!document.hidden) {
- // Ignore updates where reason=links-changed as those signal that the
- // provider's set of links changed. We don't want to update visible pages
- // in that case, it is ok to wait until the user opens the next tab.
- if (reason != "links-changed" && gGrid.ready) {
+ if (gGrid.ready) {
gGrid.refresh();
}
@@ -119,10 +111,6 @@ var gPage = {
document.getElementById("newtab-search-submit").value =
document.body.getAttribute("dir") == "ltr" ? "\u25B6" : "\u25C0";
- if (Services.prefs.getBoolPref("browser.newtabpage.compact")) {
- document.body.classList.add("compact");
- }
-
// Initialize search.
gSearch.init();
@@ -174,16 +162,6 @@ var gPage = {
*/
_handleUnloadEvent: function Page_handleUnloadEvent() {
gAllPages.unregister(this);
- // compute page life-span and send telemetry probe: using milli-seconds will leave
- // many low buckets empty. Instead we use half-second precision to make low end
- // of histogram linear and not lose the change in user attention
- let delta = Math.round((Date.now() - this._firstVisibleTime) / 500);
- if (this._suggestedTilePresent) {
- Services.telemetry.getHistogramById("NEWTAB_PAGE_LIFE_SPAN_SUGGESTED").add(delta);
- }
- else {
- Services.telemetry.getHistogramById("NEWTAB_PAGE_LIFE_SPAN").add(delta);
- }
},
/**
@@ -258,40 +236,5 @@ var gPage = {
},
onPageVisibleAndLoaded() {
- // Send the index of the last visible tile.
- this.reportLastVisibleTileIndex();
- // Maybe tell the user they can undo an initial automigration
- this.maybeShowAutoMigrationUndoNotification();
- },
-
- reportLastVisibleTileIndex() {
- let cwu = window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils);
-
- let rect = cwu.getBoundsWithoutFlushing(gGrid.node);
- let nodes = cwu.nodesFromRect(rect.left, rect.top, 0, rect.width,
- rect.height, 0, true, false);
-
- let i = -1;
- let lastIndex = -1;
- let sites = gGrid.sites;
-
- for (let node of nodes) {
- if (node.classList && node.classList.contains("newtab-cell")) {
- if (sites[++i]) {
- lastIndex = i;
- if (sites[i].link.targetedSite) {
- // record that suggested tile is shown to use suggested-tiles-histogram
- this._suggestedTilePresent = true;
- }
- }
- }
- }
-
- DirectoryLinksProvider.reportSitesAction(sites, "view", lastIndex);
- },
-
- maybeShowAutoMigrationUndoNotification() {
- sendAsyncMessage("NewTab:MaybeShowAutoMigrationUndoNotification");
- },
+ }
};
diff --git a/application/basilisk/base/content/newtab/sites.js b/application/basilisk/base/content/newtab/sites.js
index 9d103ce9b..00f81869a 100644
--- a/application/basilisk/base/content/newtab/sites.js
+++ b/application/basilisk/base/content/newtab/sites.js
@@ -62,7 +62,7 @@ Site.prototype = {
this._updateAttributes(true);
let changed = gPinnedLinks.pin(this._link, aIndex);
if (changed) {
- // render site again to remove suggested/sponsored tags
+ // render site again
this._render();
}
return changed;
@@ -136,15 +136,6 @@ Site.prototype = {
return str;
},
- _getSuggestedTileExplanation: function() {
- let targetedName = `<strong> ${this.link.targetedName} </strong>`;
- let targetedSite = `<strong> ${this.link.targetedSite} </strong>`;
- if (this.link.explanation) {
- return this._newTabString(this.link.explanation, [targetedName, targetedSite]);
- }
- return newTabString("suggested.button", [targetedName]);
- },
-
/**
* Checks for and modifies link at campaign end time
*/
@@ -155,11 +146,8 @@ Site.prototype = {
this.link.url = Services.io.newURI(this.url, null, null).resolve("/");
// clear supplied images - this triggers thumbnail download for new url
delete this.link.imageURI;
- delete this.link.enhancedImageURI;
// remove endTime to avoid further time checks
delete this.link.endTime;
- // clear enhanced-content image that may still exist in preloaded page
- this._querySelector(".enhanced-content").style.backgroundImage = "";
gPinnedLinks.replace(oldUrl, this.link);
}
},
@@ -171,11 +159,8 @@ Site.prototype = {
// first check for end time, as it may modify the link
this._checkLinkEndTime();
// setup display variables
- let enhanced = gAllPages.enhanced && DirectoryLinksProvider.getEnhancedLink(this.link);
let url = this.url;
- let title = enhanced && enhanced.title ? enhanced.title :
- this.link.type == "history" ? this.link.baseDomain :
- this.title;
+ let title = this.link.type == "history" ? this.link.baseDomain : this.title;
let tooltip = (this.title == url ? this.title : this.title + "\n" + url);
let link = this._querySelector(".newtab-link");
@@ -189,22 +174,6 @@ Site.prototype = {
titleNode.style.backgroundColor = this.link.titleBgColor;
}
- // remove "suggested" attribute to avoid showing "suggested" tag
- // after site was pinned or dropped
- this.node.removeAttribute("suggested");
-
- if (this.link.targetedSite) {
- if (this.node.getAttribute("type") != "sponsored") {
- this._querySelector(".newtab-sponsored").textContent =
- newTabString("suggested.tag");
- }
-
- this.node.setAttribute("suggested", true);
- let explanation = this._getSuggestedTileExplanation();
- this._querySelector(".newtab-suggested").innerHTML =
- `<div class='newtab-suggested-bounds'> ${explanation} </div>`;
- }
-
if (this.isPinned())
this._updateAttributes(true);
// Capture the page if the thumbnail is missing, which will cause page.js
@@ -244,8 +213,7 @@ Site.prototype = {
*/
refreshThumbnail: function Site_refreshThumbnail() {
// Only enhance tiles if that feature is turned on
- let link = gAllPages.enhanced && DirectoryLinksProvider.getEnhancedLink(this.link) ||
- this.link;
+ let link = this.link;
let thumbnail = this._querySelector(".newtab-thumbnail.thumbnail");
if (link.bgColor) {
@@ -267,16 +235,6 @@ Site.prototype = {
placeholder.style.backgroundColor = "hsl(" + hue + ",80%,40%)";
placeholder.textContent = link.baseDomain.substr(0,1).toUpperCase();
}
-
- if (link.enhancedImageURI) {
- let enhanced = this._querySelector(".enhanced-content");
- enhanced.style.backgroundImage = 'url("' + link.enhancedImageURI + '")';
-
- if (this.link.type != link.type) {
- this.node.setAttribute("type", "enhanced");
- this.enhancedId = link.directoryId;
- }
- }
},
_ignoreHoverEvents: function(element) {
@@ -296,13 +254,6 @@ Site.prototype = {
this._node.addEventListener("dragstart", this, false);
this._node.addEventListener("dragend", this, false);
this._node.addEventListener("mouseover", this, false);
-
- // Specially treat the sponsored icon & suggested explanation
- // text to prevent regular hover effects
- let sponsored = this._querySelector(".newtab-sponsored");
- let suggested = this._querySelector(".newtab-suggested");
- this._ignoreHoverEvents(sponsored);
- this._ignoreHoverEvents(suggested);
},
/**
@@ -333,31 +284,6 @@ Site.prototype = {
.add(aIndex);
},
- _toggleLegalText: function(buttonClass, explanationTextClass) {
- let button = this._querySelector(buttonClass);
- if (button.hasAttribute("active")) {
- let explain = this._querySelector(explanationTextClass);
- explain.parentNode.removeChild(explain);
-
- button.removeAttribute("active");
- }
- else {
- let explain = document.createElementNS(HTML_NAMESPACE, "div");
- explain.className = explanationTextClass.slice(1); // Slice off the first character, '.'
- this.node.appendChild(explain);
-
- let link = '<a href="' + TILES_EXPLAIN_LINK + '">' +
- newTabString("learn.link") + "</a>";
- let type = (this.node.getAttribute("suggested") && this.node.getAttribute("type") == "affiliate") ?
- "suggested" : this.node.getAttribute("type");
- let icon = '<input type="button" class="newtab-control newtab-' +
- (type == "enhanced" ? "customize" : "control-block") + '"/>';
- explain.innerHTML = newTabString(type + (type == "sponsored" ? ".explain2" : ".explain"), [icon, link]);
-
- button.setAttribute("active", "true");
- }
- },
-
/**
* Handles site click events.
*/
@@ -376,48 +302,25 @@ Site.prototype = {
action = "click";
}
}
- // Handle sponsored explanation link click
- else if (target.parentElement.classList.contains("sponsored-explain")) {
- action = "sponsored_link";
- }
- else if (target.parentElement.classList.contains("suggested-explain")) {
- action = "suggested_link";
- }
// Only handle primary clicks for the remaining targets
else if (button == 0) {
aEvent.preventDefault();
if (target.classList.contains("newtab-control-block")) {
- // Notify DirectoryLinksProvider of suggested tile block, this may
- // affect if and how suggested tiles are recommended and needs to
- // be reported before pages are updated inside block() call
- if (this.link.targetedSite) {
- DirectoryLinksProvider.handleSuggestedTileBlock();
- }
this.block();
action = "block";
}
- else if (target.classList.contains("sponsored-explain") ||
- target.classList.contains("newtab-sponsored")) {
- this._toggleLegalText(".newtab-sponsored", ".sponsored-explain");
- action = "sponsored";
- }
else if (pinned && target.classList.contains("newtab-control-pin")) {
this.unpin();
action = "unpin";
}
else if (!pinned && target.classList.contains("newtab-control-pin")) {
if (this.pin()) {
- // suggested link has changed - update rest of the pages
+ // link has changed - update rest of the pages
gAllPages.update(gPage);
}
action = "pin";
}
}
-
- // Report all link click actions
- if (action) {
- DirectoryLinksProvider.reportSitesAction(gGrid.sites, action, tileIndex);
- }
},
/**
diff --git a/application/basilisk/base/jar.mn b/application/basilisk/base/jar.mn
index 72061a622..76727731b 100644
--- a/application/basilisk/base/jar.mn
+++ b/application/basilisk/base/jar.mn
@@ -114,8 +114,6 @@ browser.jar:
content/browser/newtab/newTab.xhtml (content/newtab/newTab.xhtml)
* content/browser/newtab/newTab.js (content/newtab/newTab.js)
content/browser/newtab/newTab.css (content/newtab/newTab.css)
- content/browser/newtab/newTab.inadjacent.json (content/newtab/newTab.inadjacent.json)
- content/browser/newtab/alternativeDefaultSites.json (content/newtab/alternativeDefaultSites.json)
* content/browser/pageinfo/pageInfo.xul (content/pageinfo/pageInfo.xul)
content/browser/pageinfo/pageInfo.js (content/pageinfo/pageInfo.js)
content/browser/pageinfo/pageInfo.css (content/pageinfo/pageInfo.css)
diff --git a/application/basilisk/components/newtab/NewTabPrefsProvider.jsm b/application/basilisk/components/newtab/NewTabPrefsProvider.jsm
index c1d8b4149..ad0d1e581 100644
--- a/application/basilisk/components/newtab/NewTabPrefsProvider.jsm
+++ b/application/basilisk/components/newtab/NewTabPrefsProvider.jsm
@@ -21,7 +21,6 @@ const gPrefsMap = new Map([
["browser.newtabpage.remote.mode", "str"],
["browser.newtabpage.remote.version", "str"],
["browser.newtabpage.enabled", "bool"],
- ["browser.newtabpage.enhanced", "bool"],
["browser.newtabpage.introShown", "bool"],
["browser.newtabpage.updateIntroShown", "bool"],
["browser.newtabpage.pinned", "str"],
@@ -34,7 +33,6 @@ const gPrefsMap = new Map([
// prefs that are important for the newtab page
const gNewtabPagePrefs = new Set([
"browser.newtabpage.enabled",
- "browser.newtabpage.enhanced",
"browser.newtabpage.pinned",
"browser.newtabpage.blocked",
"browser.newtabpage.introShown",
diff --git a/application/basilisk/components/nsBrowserGlue.js b/application/basilisk/components/nsBrowserGlue.js
index b4256523f..d29009b13 100644
--- a/application/basilisk/components/nsBrowserGlue.js
+++ b/application/basilisk/components/nsBrowserGlue.js
@@ -32,7 +32,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "AlertsService", "@mozilla.org/alerts-s
["ContentPrefServiceParent", "resource://gre/modules/ContentPrefServiceParent.jsm"],
["ContentSearch", "resource:///modules/ContentSearch.jsm"],
["DateTimePickerHelper", "resource://gre/modules/DateTimePickerHelper.jsm"],
- ["DirectoryLinksProvider", "resource:///modules/DirectoryLinksProvider.jsm"],
["Feeds", "resource:///modules/Feeds.jsm"],
["FileUtils", "resource://gre/modules/FileUtils.jsm"],
["FormValidationHandler", "resource:///modules/FormValidationHandler.jsm"],
@@ -655,9 +654,7 @@ BrowserGlue.prototype = {
webrtcUI.init();
AboutHome.init();
- DirectoryLinksProvider.init();
NewTabUtils.init();
- NewTabUtils.links.addProvider(DirectoryLinksProvider);
AboutNewTab.init();
NewTabMessages.init();
diff --git a/application/basilisk/locales/en-US/chrome/browser/newTab.dtd b/application/basilisk/locales/en-US/chrome/browser/newTab.dtd
index 392aeb957..32a3ad70d 100644
--- a/application/basilisk/locales/en-US/chrome/browser/newTab.dtd
+++ b/application/basilisk/locales/en-US/chrome/browser/newTab.dtd
@@ -5,12 +5,9 @@
<!-- These strings are used in the about:newtab page -->
<!ENTITY newtab.pageTitle "New Tab">
<!ENTITY newtab.customize.classic "Show your top sites">
-<!ENTITY newtab.customize.cog.enhanced "Include suggested sites">
<!ENTITY newtab.customize.cog.title2 "NEW TAB CONTROLS">
<!ENTITY newtab.customize.cog.learn "Learn about New Tab">
<!ENTITY newtab.customize.title "Customize your New Tab page">
-<!ENTITY newtab.customize.suggested "Show suggested and your top sites">
-<!ENTITY newtab.customize.topsites "Show your top sites">
<!ENTITY newtab.customize.blank2 "Show blank page">
<!ENTITY newtab.undo.removedLabel "Thumbnail removed.">
<!ENTITY newtab.undo.undoButton "Undo.">
diff --git a/application/basilisk/locales/en-US/chrome/browser/newTab.properties b/application/basilisk/locales/en-US/chrome/browser/newTab.properties
index 7b3fe248e..922aa5847 100644
--- a/application/basilisk/locales/en-US/chrome/browser/newTab.properties
+++ b/application/basilisk/locales/en-US/chrome/browser/newTab.properties
@@ -5,42 +5,3 @@
newtab.pin=Pin this site at its current position
newtab.unpin=Unpin this site
newtab.block=Remove this site
-# LOCALIZATION NOTE(newtab.sponsored.button): This text appears for sponsored
-# and enhanced tiles on the same line as the tile's title, so prefer short
-# strings to avoid overlap. This string should be uppercase.
-newtab.sponsored.button=SPONSORED
-# LOCALIZATION NOTE(newtab.suggested.button): This text appears for sponsored
-# and suggested tiles on the same line as the tile's title, so prefer short
-# strings to avoid overlap. This string should be uppercase.
-newtab.suggested.tag=SUGGESTED
-# LOCALIZATION NOTE(newtab.suggested.button): %1$S will be replaced inline by
-# one of the user's top 100 sites that triggered this suggested tile.
-# This text appears for suggested tiles under the tile's title, so prefer short
-# strings to avoid truncating important text.
-newtab.suggested.button=Suggested for %1$S visitors
-# LOCALIZATION NOTE(newtab.sponsored.explain): %1$S will be replaced inline by
-# the (X) block icon. %2$S will be replaced by an active link using string
-# newtab.learn.link as text.
-newtab.sponsored.explain=This tile is being shown to you on behalf of a Mozilla partner. You can remove it at any time by clicking the %1$S button. %2$S
-# LOCALIZATION NOTE(newtab.sponsored.explain2): %1$S will be replaced inline by
-# the (X) block icon. %2$S will be replaced by an active link using string
-# newtab.learn.link as text.
-newtab.sponsored.explain2=This site is suggested to you on behalf of a Mozilla partner. You can remove it at any time by clicking the %1$S button. %2$S
-# LOCALIZATION NOTE(newtab.suggested.explain): %1$S will be replaced inline by
-# the (X) block icon. %2$S will be replaced by an active link using string
-# newtab.learn.link as text.
-newtab.suggested.explain=This site is suggested to you by Mozilla. You can remove it at any time by clicking the %1$S button. %2$S
-# LOCALIZATION NOTE(newtab.enhanced.explain): %1$S will be replaced inline by
-# the gear icon used to customize the new tab window. %2$S will be replaced by
-# an active link using string newtab.learn.link as text.
-newtab.enhanced.explain=A Mozilla partner has visually enhanced this tile, replacing the screenshot. You can turn off enhanced tiles by clicking the %1$S button for your preferences. %2$S
-newtab.intro1.paragraph1=Now when you open New Tab, you’ll also see sites we think might be interesting to you. Some may be suggested by Mozilla or sponsored by one of our partners.
-# LOCALIZATION NOTE(newtab.intro1.paragraph2): %1$S will be replaced inline by
-# an active link using string newtab.privacy.link as text. %2$S will be replaced
-# inline by the gear icon used to customize the new tab window.
-newtab.intro1.paragraph2=In order to provide this service, some data is automatically sent back to us in accordance with our %1$S. You can turn this off by unchecking the option under the gear icon (%2$S).
-newtab.learn.link=Learn more…
-newtab.privacy.link=Privacy Notice
-newtab.learn.link2=More about New Tab
-newtab.intro.header.update=New Tab got an update!
-newtab.intro.gotit=Got it!
diff --git a/application/basilisk/modules/AboutNewTab.jsm b/application/basilisk/modules/AboutNewTab.jsm
index 4337c5a2d..e170e9c8a 100644
--- a/application/basilisk/modules/AboutNewTab.jsm
+++ b/application/basilisk/modules/AboutNewTab.jsm
@@ -33,7 +33,6 @@ var AboutNewTab = {
customize: function(message) {
NewTabUtils.allPages.enabled = message.data.enabled;
- NewTabUtils.allPages.enhanced = message.data.enhanced;
},
uninit: function() {
diff --git a/application/basilisk/modules/DirectoryLinksProvider.jsm b/application/basilisk/modules/DirectoryLinksProvider.jsm
deleted file mode 100644
index 85d8b296b..000000000
--- a/application/basilisk/modules/DirectoryLinksProvider.jsm
+++ /dev/null
@@ -1,1251 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-this.EXPORTED_SYMBOLS = ["DirectoryLinksProvider"];
-
-const Ci = Components.interfaces;
-const Cc = Components.classes;
-const Cu = Components.utils;
-const ParserUtils = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
-
-Cu.importGlobalProperties(["XMLHttpRequest"]);
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/Task.jsm");
-Cu.import("resource://gre/modules/Timer.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
- "resource://gre/modules/NetUtil.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "NewTabUtils",
- "resource://gre/modules/NewTabUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "OS",
- "resource://gre/modules/osfile.jsm")
-XPCOMUtils.defineLazyModuleGetter(this, "Promise",
- "resource://gre/modules/Promise.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "UpdateUtils",
- "resource://gre/modules/UpdateUtils.jsm");
-XPCOMUtils.defineLazyServiceGetter(this, "eTLD",
- "@mozilla.org/network/effective-tld-service;1",
- "nsIEffectiveTLDService");
-XPCOMUtils.defineLazyGetter(this, "gTextDecoder", () => {
- return new TextDecoder();
-});
-XPCOMUtils.defineLazyGetter(this, "gCryptoHash", function () {
- return Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
-});
-XPCOMUtils.defineLazyGetter(this, "gUnicodeConverter", function () {
- let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
- .createInstance(Ci.nsIScriptableUnicodeConverter);
- converter.charset = 'utf8';
- return converter;
-});
-
-
-// The filename where directory links are stored locally
-const DIRECTORY_LINKS_FILE = "directoryLinks.json";
-const DIRECTORY_LINKS_TYPE = "application/json";
-
-// The preference that tells whether to match the OS locale
-const PREF_MATCH_OS_LOCALE = "intl.locale.matchOS";
-
-// The preference that tells what locale the user selected
-const PREF_SELECTED_LOCALE = "general.useragent.locale";
-
-// The preference that tells where to obtain directory links
-const PREF_DIRECTORY_SOURCE = "browser.newtabpage.directory.source";
-
-// The preference that tells where to send click/view pings
-const PREF_DIRECTORY_PING = "browser.newtabpage.directory.ping";
-
-// The preference that tells if newtab is enhanced
-const PREF_NEWTAB_ENHANCED = "browser.newtabpage.enhanced";
-
-// Only allow link urls that are http(s)
-const ALLOWED_LINK_SCHEMES = new Set(["http", "https"]);
-
-// Only allow link image urls that are https or data
-const ALLOWED_IMAGE_SCHEMES = new Set(["https", "data"]);
-
-// Only allow urls to Mozilla's CDN or empty (for data URIs)
-const ALLOWED_URL_BASE = new Set(["mozilla.net", ""]);
-
-// The frecency of a directory link
-const DIRECTORY_FRECENCY = 1000;
-
-// The frecency of a suggested link
-const SUGGESTED_FRECENCY = Infinity;
-
-// The filename where frequency cap data stored locally
-const FREQUENCY_CAP_FILE = "frequencyCap.json";
-
-// Default settings for daily and total frequency caps
-const DEFAULT_DAILY_FREQUENCY_CAP = 3;
-const DEFAULT_TOTAL_FREQUENCY_CAP = 10;
-
-// Default timeDelta to prune unused frequency cap objects
-// currently set to 10 days in milliseconds
-const DEFAULT_PRUNE_TIME_DELTA = 10*24*60*60*1000;
-
-// The min number of visible (not blocked) history tiles to have before showing suggested tiles
-const MIN_VISIBLE_HISTORY_TILES = 8;
-
-// The max number of visible (not blocked) history tiles to test for inadjacency
-const MAX_VISIBLE_HISTORY_TILES = 15;
-
-// Allowed ping actions remotely stored as columns: case-insensitive [a-z0-9_]
-const PING_ACTIONS = ["block", "click", "pin", "sponsored", "sponsored_link", "unpin", "view"];
-
-// Location of inadjacent sites json
-const INADJACENCY_SOURCE = "chrome://browser/content/newtab/newTab.inadjacent.json";
-
-// Fake URL to keep track of last block of a suggested tile in the frequency cap object
-const FAKE_SUGGESTED_BLOCK_URL = "ignore://suggested_block";
-
-// Time before suggested tile is allowed to play again after block - default to 1 day
-const AFTER_SUGGESTED_BLOCK_DECAY_TIME = 24*60*60*1000;
-
-/**
- * Singleton that serves as the provider of directory links.
- * Directory links are a hard-coded set of links shown if a user's link
- * inventory is empty.
- */
-var DirectoryLinksProvider = {
-
- __linksURL: null,
-
- _observers: new Set(),
-
- // links download deferred, resolved upon download completion
- _downloadDeferred: null,
-
- // download default interval is 24 hours in milliseconds
- _downloadIntervalMS: 86400000,
-
- /**
- * A mapping from eTLD+1 to an enhanced link objects
- */
- _enhancedLinks: new Map(),
-
- /**
- * A mapping from site to a list of suggested link objects
- */
- _suggestedLinks: new Map(),
-
- /**
- * Frequency Cap object - maintains daily and total tile counts, and frequency cap settings
- */
- _frequencyCaps: {},
-
- /**
- * A set of top sites that we can provide suggested links for
- */
- _topSitesWithSuggestedLinks: new Set(),
-
- /**
- * lookup Set of inadjacent domains
- */
- _inadjacentSites: new Set(),
-
- /**
- * This flag is set if there is a suggested tile configured to avoid
- * inadjacent sites in new tab
- */
- _avoidInadjacentSites: false,
-
- /**
- * This flag is set if _avoidInadjacentSites is true and there is
- * an inadjacent site in the new tab
- */
- _newTabHasInadjacentSite: false,
-
- get _observedPrefs() {
- return Object.freeze({
- enhanced: PREF_NEWTAB_ENHANCED,
- linksURL: PREF_DIRECTORY_SOURCE,
- matchOSLocale: PREF_MATCH_OS_LOCALE,
- prefSelectedLocale: PREF_SELECTED_LOCALE,
- });
- },
-
- get _linksURL() {
- if (!this.__linksURL) {
- try {
- this.__linksURL = Services.prefs.getCharPref(this._observedPrefs["linksURL"]);
- this.__linksURLModified = Services.prefs.prefHasUserValue(this._observedPrefs["linksURL"]);
- }
- catch (e) {
- Cu.reportError("Error fetching directory links url from prefs: " + e);
- }
- }
- return this.__linksURL;
- },
-
- /**
- * Gets the currently selected locale for display.
- * @return the selected locale or "en-US" if none is selected
- */
- get locale() {
- let matchOS = Services.prefs.getBoolPref(PREF_MATCH_OS_LOCALE, false);
-
- if (matchOS) {
- return Services.locale.getLocaleComponentForUserAgent();
- }
-
- try {
- let locale = Services.prefs.getComplexValue(PREF_SELECTED_LOCALE,
- Ci.nsIPrefLocalizedString);
- if (locale) {
- return locale.data;
- }
- }
- catch (e) {}
-
- try {
- return Services.prefs.getCharPref(PREF_SELECTED_LOCALE);
- }
- catch (e) {}
-
- return "en-US";
- },
-
- /**
- * Set appropriate default ping behavior controlled by enhanced pref
- */
- _setDefaultEnhanced: function DirectoryLinksProvider_setDefaultEnhanced() {
- if (!Services.prefs.prefHasUserValue(PREF_NEWTAB_ENHANCED)) {
- let enhanced = Services.prefs.getBoolPref(PREF_NEWTAB_ENHANCED);
- try {
- // Default to not enhanced if DNT is set to tell websites to not track
- if (Services.prefs.getBoolPref("privacy.donottrackheader.enabled")) {
- enhanced = false;
- }
- }
- catch (ex) {}
- Services.prefs.setBoolPref(PREF_NEWTAB_ENHANCED, enhanced);
- }
- },
-
- observe: function DirectoryLinksProvider_observe(aSubject, aTopic, aData) {
- if (aTopic == "nsPref:changed") {
- switch (aData) {
- // Re-set the default in case the user clears the pref
- case this._observedPrefs.enhanced:
- this._setDefaultEnhanced();
- break;
-
- case this._observedPrefs.linksURL:
- delete this.__linksURL;
- // fallthrough
-
- // Force directory download on changes to fetch related prefs
- case this._observedPrefs.matchOSLocale:
- case this._observedPrefs.prefSelectedLocale:
- this._fetchAndCacheLinksIfNecessary(true);
- break;
- }
- }
- },
-
- _addPrefsObserver: function DirectoryLinksProvider_addObserver() {
- for (let pref in this._observedPrefs) {
- let prefName = this._observedPrefs[pref];
- Services.prefs.addObserver(prefName, this, false);
- }
- },
-
- _removePrefsObserver: function DirectoryLinksProvider_removeObserver() {
- for (let pref in this._observedPrefs) {
- let prefName = this._observedPrefs[pref];
- Services.prefs.removeObserver(prefName, this);
- }
- },
-
- _cacheSuggestedLinks: function(link) {
- // Don't cache links that don't have the expected 'frecent_sites'
- if (!link.frecent_sites) {
- return;
- }
-
- for (let suggestedSite of link.frecent_sites) {
- let suggestedMap = this._suggestedLinks.get(suggestedSite) || new Map();
- suggestedMap.set(link.url, link);
- this._setupStartEndTime(link);
- this._suggestedLinks.set(suggestedSite, suggestedMap);
- }
- },
-
- _fetchAndCacheLinks: function DirectoryLinksProvider_fetchAndCacheLinks(uri) {
- // Replace with the same display locale used for selecting links data
- uri = uri.replace("%LOCALE%", this.locale);
- uri = uri.replace("%CHANNEL%", UpdateUtils.UpdateChannel);
-
- return this._downloadJsonData(uri).then(json => {
- return OS.File.writeAtomic(this._directoryFilePath, json, {tmpPath: this._directoryFilePath + ".tmp"});
- });
- },
-
- /**
- * Downloads a links with json content
- * @param download uri
- * @return promise resolved to json string, "{}" returned if status != 200
- */
- _downloadJsonData: function DirectoryLinksProvider__downloadJsonData(uri) {
- let deferred = Promise.defer();
- let xmlHttp = this._newXHR();
-
- xmlHttp.onload = function(aResponse) {
- let json = this.responseText;
- if (this.status && this.status != 200) {
- json = "{}";
- }
- deferred.resolve(json);
- };
-
- xmlHttp.onerror = function(e) {
- deferred.reject("Fetching " + uri + " results in error code: " + e.target.status);
- };
-
- try {
- xmlHttp.open("GET", uri);
- // Override the type so XHR doesn't complain about not well-formed XML
- xmlHttp.overrideMimeType(DIRECTORY_LINKS_TYPE);
- // Set the appropriate request type for servers that require correct types
- xmlHttp.setRequestHeader("Content-Type", DIRECTORY_LINKS_TYPE);
- xmlHttp.send();
- } catch (e) {
- deferred.reject("Error fetching " + uri);
- Cu.reportError(e);
- }
- return deferred.promise;
- },
-
- /**
- * Downloads directory links if needed
- * @return promise resolved immediately if no download needed, or upon completion
- */
- _fetchAndCacheLinksIfNecessary: function DirectoryLinksProvider_fetchAndCacheLinksIfNecessary(forceDownload=false) {
- if (this._downloadDeferred) {
- // fetching links already - just return the promise
- return this._downloadDeferred.promise;
- }
-
- if (forceDownload || this._needsDownload) {
- this._downloadDeferred = Promise.defer();
- this._fetchAndCacheLinks(this._linksURL).then(() => {
- // the new file was successfully downloaded and cached, so update a timestamp
- this._lastDownloadMS = Date.now();
- this._downloadDeferred.resolve();
- this._downloadDeferred = null;
- this._callObservers("onManyLinksChanged")
- },
- error => {
- this._downloadDeferred.resolve();
- this._downloadDeferred = null;
- this._callObservers("onDownloadFail");
- });
- return this._downloadDeferred.promise;
- }
-
- // download is not needed
- return Promise.resolve();
- },
-
- /**
- * @return true if download is needed, false otherwise
- */
- get _needsDownload () {
- // fail if last download occured less then 24 hours ago
- if ((Date.now() - this._lastDownloadMS) > this._downloadIntervalMS) {
- return true;
- }
- return false;
- },
-
- /**
- * Create a new XMLHttpRequest that is anonymous, i.e., doesn't send cookies
- */
- _newXHR() {
- return new XMLHttpRequest({mozAnon: true});
- },
-
- /**
- * Reads directory links file and parses its content
- * @return a promise resolved to an object with keys 'directory' and 'suggested',
- * each containing a valid list of links,
- * or {'directory': [], 'suggested': []} if read or parse fails.
- */
- _readDirectoryLinksFile: function DirectoryLinksProvider_readDirectoryLinksFile() {
- let emptyOutput = {directory: [], suggested: [], enhanced: []};
- return OS.File.read(this._directoryFilePath).then(binaryData => {
- let output;
- try {
- let json = gTextDecoder.decode(binaryData);
- let linksObj = JSON.parse(json);
- output = {directory: linksObj.directory || [],
- suggested: linksObj.suggested || [],
- enhanced: linksObj.enhanced || []};
- }
- catch (e) {
- Cu.reportError(e);
- }
- return output || emptyOutput;
- },
- error => {
- Cu.reportError(error);
- return emptyOutput;
- });
- },
-
- /**
- * Translates link.time_limits to UTC miliseconds and sets
- * link.startTime and link.endTime properties in link object
- */
- _setupStartEndTime: function DirectoryLinksProvider_setupStartEndTime(link) {
- // set start/end limits. Use ISO_8601 format: '2014-01-10T20:20:20.600Z'
- // (details here http://en.wikipedia.org/wiki/ISO_8601)
- // Note that if timezone is missing, FX will interpret as local time
- // meaning that the server can sepecify any time, but if the capmaign
- // needs to start at same time across multiple timezones, the server
- // omits timezone indicator
- if (!link.time_limits) {
- return;
- }
-
- let parsedTime;
- if (link.time_limits.start) {
- parsedTime = Date.parse(link.time_limits.start);
- if (parsedTime && !isNaN(parsedTime)) {
- link.startTime = parsedTime;
- }
- }
- if (link.time_limits.end) {
- parsedTime = Date.parse(link.time_limits.end);
- if (parsedTime && !isNaN(parsedTime)) {
- link.endTime = parsedTime;
- }
- }
- },
-
- /*
- * Handles campaign timeout
- */
- _onCampaignTimeout: function DirectoryLinksProvider_onCampaignTimeout() {
- // _campaignTimeoutID is invalid here, so just set it to null
- this._campaignTimeoutID = null;
- this._updateSuggestedTile();
- },
-
- /*
- * Clears capmpaign timeout
- */
- _clearCampaignTimeout: function DirectoryLinksProvider_clearCampaignTimeout() {
- if (this._campaignTimeoutID) {
- clearTimeout(this._campaignTimeoutID);
- this._campaignTimeoutID = null;
- }
- },
-
- /**
- * Setup capmpaign timeout to recompute suggested tiles upon
- * reaching soonest start or end time for the campaign
- * @param timeout in milliseconds
- */
- _setupCampaignTimeCheck: function DirectoryLinksProvider_setupCampaignTimeCheck(timeout) {
- // sanity check
- if (!timeout || timeout <= 0) {
- return;
- }
- this._clearCampaignTimeout();
- // setup next timeout
- this._campaignTimeoutID = setTimeout(this._onCampaignTimeout.bind(this), timeout);
- },
-
- /**
- * Test link for campaign time limits: checks if link falls within start/end time
- * and returns an object containing a use flag and the timeoutDate milliseconds
- * when the link has to be re-checked for campaign start-ready or end-reach
- * @param link
- * @return object {use: true or false, timeoutDate: milliseconds or null}
- */
- _testLinkForCampaignTimeLimits: function DirectoryLinksProvider_testLinkForCampaignTimeLimits(link) {
- let currentTime = Date.now();
- // test for start time first
- if (link.startTime && link.startTime > currentTime) {
- // not yet ready for start
- return {use: false, timeoutDate: link.startTime};
- }
- // otherwise check for end time
- if (link.endTime) {
- // passed end time
- if (link.endTime <= currentTime) {
- return {use: false};
- }
- // otherwise link is still ok, but we need to set timeoutDate
- return {use: true, timeoutDate: link.endTime};
- }
- // if we are here, the link is ok and no timeoutDate needed
- return {use: true};
- },
-
- /**
- * Handles block on suggested tile: updates fake block url with current timestamp
- */
- handleSuggestedTileBlock: function DirectoryLinksProvider_handleSuggestedTileBlock() {
- this._updateFrequencyCapSettings({url: FAKE_SUGGESTED_BLOCK_URL});
- this._writeFrequencyCapFile();
- this._updateSuggestedTile();
- },
-
- /**
- * Checks if suggested tile is being blocked for the rest of "decay time"
- * @return True if blocked, false otherwise
- */
- _isSuggestedTileBlocked: function DirectoryLinksProvider__isSuggestedTileBlocked() {
- let capObject = this._frequencyCaps[FAKE_SUGGESTED_BLOCK_URL];
- if (!capObject || !capObject.lastUpdated) {
- // user never blocked suggested tile or lastUpdated is missing
- return false;
- }
- // otherwise, make sure that enough time passed after suggested tile was blocked
- return (capObject.lastUpdated + AFTER_SUGGESTED_BLOCK_DECAY_TIME) > Date.now();
- },
-
- /**
- * Report some action on a newtab page (view, click)
- * @param sites Array of sites shown on newtab page
- * @param action String of the behavior to report
- * @param triggeringSiteIndex optional Int index of the site triggering action
- * @return download promise
- */
- reportSitesAction: function DirectoryLinksProvider_reportSitesAction(sites, action, triggeringSiteIndex) {
- // Check if the suggested tile was shown
- if (action == "view") {
- sites.slice(0, triggeringSiteIndex + 1).filter(s => s).forEach(site => {
- let {targetedSite, url} = site.link;
- if (targetedSite) {
- this._addFrequencyCapView(url);
- }
- });
- }
- // any click action on a suggested tile should stop that tile suggestion
- // click/block - user either removed a tile or went to a landing page
- // pin - tile turned into history tile, should no longer be suggested
- // unpin - the tile was pinned before, should not matter
- else {
- // suggested tile has targetedSite, or frecent_sites if it was pinned
- let {frecent_sites, targetedSite, url} = sites[triggeringSiteIndex].link;
- if (frecent_sites || targetedSite) {
- this._setFrequencyCapClick(url);
- }
- }
-
- let newtabEnhanced = false;
- let pingEndPoint = "";
- try {
- newtabEnhanced = Services.prefs.getBoolPref(PREF_NEWTAB_ENHANCED);
- pingEndPoint = Services.prefs.getCharPref(PREF_DIRECTORY_PING);
- }
- catch (ex) {}
-
- // Bug 1240245 - We no longer send pings, but frequency capping and fetching
- // tests depend on the following actions, so references to PING remain.
- let invalidAction = PING_ACTIONS.indexOf(action) == -1;
- if (!newtabEnhanced || pingEndPoint == "" || invalidAction) {
- return Promise.resolve();
- }
-
- return Task.spawn(function* () {
- // since we updated views/clicks we need write _frequencyCaps to disk
- yield this._writeFrequencyCapFile();
- // Use this as an opportunity to potentially fetch new links
- yield this._fetchAndCacheLinksIfNecessary();
- }.bind(this));
- },
-
- /**
- * Get the enhanced link object for a link (whether history or directory)
- */
- getEnhancedLink: function DirectoryLinksProvider_getEnhancedLink(link) {
- // Use the provided link if it's already enhanced
- return link.enhancedImageURI && link ? link :
- this._enhancedLinks.get(NewTabUtils.extractSite(link.url));
- },
-
- /**
- * Check if a url's scheme is in a Set of allowed schemes and if the base
- * domain is allowed.
- * @param url to check
- * @param allowed Set of allowed schemes
- * @param checkBase boolean to check the base domain
- */
- isURLAllowed(url, allowed, checkBase) {
- // Assume no url is an allowed url
- if (!url) {
- return true;
- }
-
- let scheme = "", base = "";
- try {
- // A malformed url will not be allowed
- let uri = Services.io.newURI(url, null, null);
- scheme = uri.scheme;
-
- // URIs without base domains will be allowed
- base = Services.eTLD.getBaseDomain(uri);
- }
- catch (ex) {}
- // Require a scheme match and the base only if desired
- return allowed.has(scheme) && (!checkBase || ALLOWED_URL_BASE.has(base));
- },
-
- _escapeChars(text) {
- let charMap = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- '"': '&quot;',
- "'": '&#039;'
- };
-
- return text.replace(/[&<>"']/g, (character) => charMap[character]);
- },
-
- /**
- * Gets the current set of directory links.
- * @param aCallback The function that the array of links is passed to.
- */
- getLinks: function DirectoryLinksProvider_getLinks(aCallback) {
- this._readDirectoryLinksFile().then(rawLinks => {
- // Reset the cache of suggested tiles and enhanced images for this new set of links
- this._enhancedLinks.clear();
- this._suggestedLinks.clear();
- this._clearCampaignTimeout();
- this._avoidInadjacentSites = false;
-
- // Only check base domain for images when using the default pref
- let checkBase = !this.__linksURLModified;
- let validityFilter = function(link) {
- // Make sure the link url is allowed and images too if they exist
- return this.isURLAllowed(link.url, ALLOWED_LINK_SCHEMES, false) &&
- (!link.imageURI ||
- this.isURLAllowed(link.imageURI, ALLOWED_IMAGE_SCHEMES, checkBase)) &&
- (!link.enhancedImageURI ||
- this.isURLAllowed(link.enhancedImageURI, ALLOWED_IMAGE_SCHEMES, checkBase));
- }.bind(this);
-
- rawLinks.suggested.filter(validityFilter).forEach((link, position) => {
- // Suggested sites must have an adgroup name.
- if (!link.adgroup_name) {
- return;
- }
-
- let sanitizeFlags = ParserUtils.SanitizerCidEmbedsOnly |
- ParserUtils.SanitizerDropForms |
- ParserUtils.SanitizerDropNonCSSPresentation;
-
- link.explanation = this._escapeChars(link.explanation ? ParserUtils.convertToPlainText(link.explanation, sanitizeFlags, 0) : "");
- link.targetedName = this._escapeChars(ParserUtils.convertToPlainText(link.adgroup_name, sanitizeFlags, 0));
- link.lastVisitDate = rawLinks.suggested.length - position;
- // check if link wants to avoid inadjacent sites
- if (link.check_inadjacency) {
- this._avoidInadjacentSites = true;
- }
-
- // We cache suggested tiles here but do not push any of them in the links list yet.
- // The decision for which suggested tile to include will be made separately.
- this._cacheSuggestedLinks(link);
- this._updateFrequencyCapSettings(link);
- });
-
- rawLinks.enhanced.filter(validityFilter).forEach((link, position) => {
- link.lastVisitDate = rawLinks.enhanced.length - position;
-
- // Stash the enhanced image for the site
- if (link.enhancedImageURI) {
- this._enhancedLinks.set(NewTabUtils.extractSite(link.url), link);
- }
- });
-
- let links = rawLinks.directory.filter(validityFilter).map((link, position) => {
- link.lastVisitDate = rawLinks.directory.length - position;
- link.frecency = DIRECTORY_FRECENCY;
- return link;
- });
-
- // Allow for one link suggestion on top of the default directory links
- this.maxNumLinks = links.length + 1;
-
- // prune frequency caps of outdated urls
- this._pruneFrequencyCapUrls();
- // write frequency caps object to disk asynchronously
- this._writeFrequencyCapFile();
-
- return links;
- }).catch(ex => {
- Cu.reportError(ex);
- return [];
- }).then(links => {
- aCallback(links);
- this._populatePlacesLinks();
- });
- },
-
- init: function DirectoryLinksProvider_init() {
- this._setDefaultEnhanced();
- this._addPrefsObserver();
- // setup directory file path and last download timestamp
- this._directoryFilePath = OS.Path.join(OS.Constants.Path.localProfileDir, DIRECTORY_LINKS_FILE);
- this._lastDownloadMS = 0;
-
- // setup frequency cap file path
- this._frequencyCapFilePath = OS.Path.join(OS.Constants.Path.localProfileDir, FREQUENCY_CAP_FILE);
- // setup inadjacent sites URL
- this._inadjacentSitesUrl = INADJACENCY_SOURCE;
-
- NewTabUtils.placesProvider.addObserver(this);
- NewTabUtils.links.addObserver(this);
-
- return Task.spawn(function*() {
- // get the last modified time of the links file if it exists
- let doesFileExists = yield OS.File.exists(this._directoryFilePath);
- if (doesFileExists) {
- let fileInfo = yield OS.File.stat(this._directoryFilePath);
- this._lastDownloadMS = Date.parse(fileInfo.lastModificationDate);
- }
- // read frequency cap file
- yield this._readFrequencyCapFile();
- // fetch directory on startup without force
- yield this._fetchAndCacheLinksIfNecessary();
- // fecth inadjacent sites on startup
- yield this._loadInadjacentSites();
- }.bind(this));
- },
-
- _handleManyLinksChanged: function() {
- this._topSitesWithSuggestedLinks.clear();
- this._suggestedLinks.forEach((suggestedLinks, site) => {
- if (NewTabUtils.isTopPlacesSite(site)) {
- this._topSitesWithSuggestedLinks.add(site);
- }
- });
- this._updateSuggestedTile();
- },
-
- /**
- * Updates _topSitesWithSuggestedLinks based on the link that was changed.
- *
- * @return true if _topSitesWithSuggestedLinks was modified, false otherwise.
- */
- _handleLinkChanged: function(aLink) {
- let changedLinkSite = NewTabUtils.extractSite(aLink.url);
- let linkStored = this._topSitesWithSuggestedLinks.has(changedLinkSite);
-
- if (!NewTabUtils.isTopPlacesSite(changedLinkSite) && linkStored) {
- this._topSitesWithSuggestedLinks.delete(changedLinkSite);
- return true;
- }
-
- if (this._suggestedLinks.has(changedLinkSite) &&
- NewTabUtils.isTopPlacesSite(changedLinkSite) && !linkStored) {
- this._topSitesWithSuggestedLinks.add(changedLinkSite);
- return true;
- }
-
- // always run _updateSuggestedTile if aLink is inadjacent
- // and there are tiles configured to avoid it
- if (this._avoidInadjacentSites && this._isInadjacentLink(aLink)) {
- return true;
- }
-
- return false;
- },
-
- _populatePlacesLinks: function () {
- NewTabUtils.links.populateProviderCache(NewTabUtils.placesProvider, () => {
- this._handleManyLinksChanged();
- });
- },
-
- onDeleteURI: function(aProvider, aLink) {
- let {url} = aLink;
- // remove clicked flag for that url and
- // call observer upon disk write completion
- this._removeTileClick(url).then(() => {
- this._callObservers("onDeleteURI", url);
- });
- },
-
- onClearHistory: function() {
- // remove all clicked flags and call observers upon file write
- this._removeAllTileClicks().then(() => {
- this._callObservers("onClearHistory");
- });
- },
-
- onLinkChanged: function (aProvider, aLink) {
- // Make sure NewTabUtils.links handles the notification first.
- setTimeout(() => {
- if (this._handleLinkChanged(aLink) || this._shouldUpdateSuggestedTile()) {
- this._updateSuggestedTile();
- }
- }, 0);
- },
-
- onManyLinksChanged: function () {
- // Make sure NewTabUtils.links handles the notification first.
- setTimeout(() => {
- this._handleManyLinksChanged();
- }, 0);
- },
-
- _getCurrentTopSiteCount: function() {
- let visibleTopSiteCount = 0;
- let newTabLinks = NewTabUtils.links.getLinks();
- for (let link of newTabLinks.slice(0, MIN_VISIBLE_HISTORY_TILES)) {
- // compute visibleTopSiteCount for suggested tiles
- if (link && (link.type == "history" || link.type == "enhanced")) {
- visibleTopSiteCount++;
- }
- }
- // since newTabLinks are available, set _newTabHasInadjacentSite here
- // note that _shouldUpdateSuggestedTile is called by _updateSuggestedTile
- this._newTabHasInadjacentSite = this._avoidInadjacentSites && this._checkForInadjacentSites(newTabLinks);
-
- return visibleTopSiteCount;
- },
-
- _shouldUpdateSuggestedTile: function() {
- let sortedLinks = NewTabUtils.getProviderLinks(this);
-
- let mostFrecentLink = {};
- if (sortedLinks && sortedLinks.length) {
- mostFrecentLink = sortedLinks[0]
- }
-
- let currTopSiteCount = this._getCurrentTopSiteCount();
- if ((!mostFrecentLink.targetedSite && currTopSiteCount >= MIN_VISIBLE_HISTORY_TILES) ||
- (mostFrecentLink.targetedSite && currTopSiteCount < MIN_VISIBLE_HISTORY_TILES)) {
- // If mostFrecentLink has a targetedSite then mostFrecentLink is a suggested link.
- // If we have enough history links (8+) to show a suggested tile and we are not
- // already showing one, then we should update (to *attempt* to add a suggested tile).
- // OR if we don't have enough history to show a suggested tile (<8) and we are
- // currently showing one, we should update (to remove it).
- return true;
- }
-
- return false;
- },
-
- /**
- * Chooses and returns a suggested tile based on a user's top sites
- * that we have an available suggested tile for.
- *
- * @return the chosen suggested tile, or undefined if there isn't one
- */
- _updateSuggestedTile: function() {
- let sortedLinks = NewTabUtils.getProviderLinks(this);
-
- if (!sortedLinks) {
- // If NewTabUtils.links.resetCache() is called before getting here,
- // sortedLinks may be undefined.
- return undefined;
- }
-
- // Delete the current suggested tile, if one exists.
- let initialLength = sortedLinks.length;
- if (initialLength) {
- let mostFrecentLink = sortedLinks[0];
- if (mostFrecentLink.targetedSite) {
- this._callObservers("onLinkChanged", {
- url: mostFrecentLink.url,
- frecency: SUGGESTED_FRECENCY,
- lastVisitDate: mostFrecentLink.lastVisitDate,
- type: mostFrecentLink.type,
- }, 0, true);
- }
- }
-
- if (this._topSitesWithSuggestedLinks.size == 0 ||
- !this._shouldUpdateSuggestedTile() ||
- this._isSuggestedTileBlocked()) {
- // There are no potential suggested links we can show or not
- // enough history for a suggested tile, or suggested tile was
- // recently blocked and wait time interval has not decayed yet
- return undefined;
- }
-
- // Create a flat list of all possible links we can show as suggested.
- // Note that many top sites may map to the same suggested links, but we only
- // want to count each suggested link once (based on url), thus possibleLinks is a map
- // from url to suggestedLink. Thus, each link has an equal chance of being chosen at
- // random from flattenedLinks if it appears only once.
- let nextTimeout;
- let possibleLinks = new Map();
- let targetedSites = new Map();
- this._topSitesWithSuggestedLinks.forEach(topSiteWithSuggestedLink => {
- let suggestedLinksMap = this._suggestedLinks.get(topSiteWithSuggestedLink);
- suggestedLinksMap.forEach((suggestedLink, url) => {
- // Skip this link if we've shown it too many times already
- if (!this._testFrequencyCapLimits(url)) {
- return;
- }
-
- // as we iterate suggestedLinks, check for campaign start/end
- // time limits, and set nextTimeout to the closest timestamp
- let {use, timeoutDate} = this._testLinkForCampaignTimeLimits(suggestedLink);
- // update nextTimeout is necessary
- if (timeoutDate && (!nextTimeout || nextTimeout > timeoutDate)) {
- nextTimeout = timeoutDate;
- }
- // Skip link if it falls outside campaign time limits
- if (!use) {
- return;
- }
-
- // Skip link if it avoids inadjacent sites and newtab has one
- if (suggestedLink.check_inadjacency && this._newTabHasInadjacentSite) {
- return;
- }
-
- possibleLinks.set(url, suggestedLink);
-
- // Keep a map of URL to targeted sites. We later use this to show the user
- // what site they visited to trigger this suggestion.
- if (!targetedSites.get(url)) {
- targetedSites.set(url, []);
- }
- targetedSites.get(url).push(topSiteWithSuggestedLink);
- })
- });
-
- // setup timeout check for starting or ending campaigns
- if (nextTimeout) {
- this._setupCampaignTimeCheck(nextTimeout - Date.now());
- }
-
- // We might have run out of possible links to show
- let numLinks = possibleLinks.size;
- if (numLinks == 0) {
- return undefined;
- }
-
- let flattenedLinks = [...possibleLinks.values()];
-
- // Choose our suggested link at random
- let suggestedIndex = Math.floor(Math.random() * numLinks);
- let chosenSuggestedLink = flattenedLinks[suggestedIndex];
-
- // Add the suggested link to the front with some extra values
- this._callObservers("onLinkChanged", Object.assign({
- frecency: SUGGESTED_FRECENCY,
-
- // Choose the first site a user has visited as the target. In the future,
- // this should be the site with the highest frecency. However, we currently
- // store frecency by URL not by site.
- targetedSite: targetedSites.get(chosenSuggestedLink.url).length ?
- targetedSites.get(chosenSuggestedLink.url)[0] : null
- }, chosenSuggestedLink));
- return chosenSuggestedLink;
- },
-
- /**
- * Loads inadjacent sites
- * @return a promise resolved when lookup Set for sites is built
- */
- _loadInadjacentSites: function DirectoryLinksProvider_loadInadjacentSites() {
- return this._downloadJsonData(this._inadjacentSitesUrl).then(jsonString => {
- let jsonObject = {};
- try {
- jsonObject = JSON.parse(jsonString);
- }
- catch (e) {
- Cu.reportError(e);
- }
-
- this._inadjacentSites = new Set(jsonObject.domains);
- });
- },
-
- /**
- * Genegrates hash suitable for looking up inadjacent site
- * @param value to hsh
- * @return hased value, base64-ed
- */
- _generateHash: function DirectoryLinksProvider_generateHash(value) {
- let byteArr = gUnicodeConverter.convertToByteArray(value);
- gCryptoHash.init(gCryptoHash.MD5);
- gCryptoHash.update(byteArr, byteArr.length);
- return gCryptoHash.finish(true);
- },
-
- /**
- * Checks if link belongs to inadjacent domain
- * @param link to check
- * @return true for inadjacent domains, false otherwise
- */
- _isInadjacentLink: function DirectoryLinksProvider_isInadjacentLink(link) {
- let baseDomain = link.baseDomain || NewTabUtils.extractSite(link.url || "");
- if (!baseDomain) {
- return false;
- }
- // check if hashed domain is inadjacent
- return this._inadjacentSites.has(this._generateHash(baseDomain));
- },
-
- /**
- * Checks if new tab has inadjacent site
- * @param new tab links (or nothing, in which case NewTabUtils.links.getLinks() is called
- * @return true if new tab shows has inadjacent site
- */
- _checkForInadjacentSites: function DirectoryLinksProvider_checkForInadjacentSites(newTabLink) {
- let links = newTabLink || NewTabUtils.links.getLinks();
- for (let link of links.slice(0, MAX_VISIBLE_HISTORY_TILES)) {
- // check links against inadjacent list - specifically include ALL link types
- if (this._isInadjacentLink(link)) {
- return true;
- }
- }
- return false;
- },
-
- /**
- * Reads json file, parses its content, and returns resulting object
- * @param json file path
- * @param json object to return in case file read or parse fails
- * @return a promise resolved to a valid object or undefined upon error
- */
- _readJsonFile: Task.async(function* (filePath, nullObject) {
- let jsonObj;
- try {
- let binaryData = yield OS.File.read(filePath);
- let json = gTextDecoder.decode(binaryData);
- jsonObj = JSON.parse(json);
- }
- catch (e) {}
- return jsonObj || nullObject;
- }),
-
- /**
- * Loads frequency cap object from file and parses its content
- * @return a promise resolved upon load completion
- * on error or non-exstent file _frequencyCaps is set to empty object
- */
- _readFrequencyCapFile: Task.async(function* () {
- // set _frequencyCaps object to file's content or empty object
- this._frequencyCaps = yield this._readJsonFile(this._frequencyCapFilePath, {});
- }),
-
- /**
- * Saves frequency cap object to file
- * @return a promise resolved upon file i/o completion
- */
- _writeFrequencyCapFile: function DirectoryLinksProvider_writeFrequencyCapFile() {
- let json = JSON.stringify(this._frequencyCaps || {});
- return OS.File.writeAtomic(this._frequencyCapFilePath, json, {tmpPath: this._frequencyCapFilePath + ".tmp"});
- },
-
- /**
- * Clears frequency cap object and writes empty json to file
- * @return a promise resolved upon file i/o completion
- */
- _clearFrequencyCap: function DirectoryLinksProvider_clearFrequencyCap() {
- this._frequencyCaps = {};
- return this._writeFrequencyCapFile();
- },
-
- /**
- * updates frequency cap configuration for a link
- */
- _updateFrequencyCapSettings: function DirectoryLinksProvider_updateFrequencyCapSettings(link) {
- let capsObject = this._frequencyCaps[link.url];
- if (!capsObject) {
- // create an object with empty counts
- capsObject = {
- dailyViews: 0,
- totalViews: 0,
- lastShownDate: 0,
- };
- this._frequencyCaps[link.url] = capsObject;
- }
- // set last updated timestamp
- capsObject.lastUpdated = Date.now();
- // check for link configuration
- if (link.frequency_caps) {
- capsObject.dailyCap = link.frequency_caps.daily || DEFAULT_DAILY_FREQUENCY_CAP;
- capsObject.totalCap = link.frequency_caps.total || DEFAULT_TOTAL_FREQUENCY_CAP;
- }
- else {
- // fallback to defaults
- capsObject.dailyCap = DEFAULT_DAILY_FREQUENCY_CAP;
- capsObject.totalCap = DEFAULT_TOTAL_FREQUENCY_CAP;
- }
- },
-
- /**
- * Prunes frequency cap objects for outdated links
- * @param timeDetla milliseconds
- * all cap objects with lastUpdated less than (now() - timeDelta)
- * will be removed. This is done to remove frequency cap objects
- * for unused tile urls
- */
- _pruneFrequencyCapUrls: function DirectoryLinksProvider_pruneFrequencyCapUrls(timeDelta = DEFAULT_PRUNE_TIME_DELTA) {
- let timeThreshold = Date.now() - timeDelta;
- Object.keys(this._frequencyCaps).forEach(url => {
- // remove url if it is not ignorable and wasn't updated for a while
- if (!url.startsWith("ignore") && this._frequencyCaps[url].lastUpdated <= timeThreshold) {
- delete this._frequencyCaps[url];
- }
- });
- },
-
- /**
- * Checks if supplied timestamp happened today
- * @param timestamp in milliseconds
- * @return true if the timestamp was made today, false otherwise
- */
- _wasToday: function DirectoryLinksProvider_wasToday(timestamp) {
- let showOn = new Date(timestamp);
- let today = new Date();
- // call timestamps identical if both day and month are same
- return showOn.getDate() == today.getDate() &&
- showOn.getMonth() == today.getMonth() &&
- showOn.getYear() == today.getYear();
- },
-
- /**
- * adds some number of views for a url
- * @param url String url of the suggested link
- */
- _addFrequencyCapView: function DirectoryLinksProvider_addFrequencyCapView(url) {
- let capObject = this._frequencyCaps[url];
- // sanity check
- if (!capObject) {
- return;
- }
-
- // if the day is new: reset the daily counter and lastShownDate
- if (!this._wasToday(capObject.lastShownDate)) {
- capObject.dailyViews = 0;
- // update lastShownDate
- capObject.lastShownDate = Date.now();
- }
-
- // bump both daily and total counters
- capObject.totalViews++;
- capObject.dailyViews++;
-
- // if any of the caps is reached - update suggested tiles
- if (capObject.totalViews >= capObject.totalCap ||
- capObject.dailyViews >= capObject.dailyCap) {
- this._updateSuggestedTile();
- }
- },
-
- /**
- * Sets clicked flag for link url
- * @param url String url of the suggested link
- */
- _setFrequencyCapClick(url) {
- let capObject = this._frequencyCaps[url];
- // sanity check
- if (!capObject) {
- return;
- }
- capObject.clicked = true;
- // and update suggested tiles, since current tile became invalid
- this._updateSuggestedTile();
- },
-
- /**
- * Tests frequency cap limits for link url
- * @param url String url of the suggested link
- * @return true if link is viewable, false otherwise
- */
- _testFrequencyCapLimits: function DirectoryLinksProvider_testFrequencyCapLimits(url) {
- let capObject = this._frequencyCaps[url];
- // sanity check: if url is missing - do not show this tile
- if (!capObject) {
- return false;
- }
-
- // check for clicked set or total views reached
- if (capObject.clicked || capObject.totalViews >= capObject.totalCap) {
- return false;
- }
-
- // otherwise check if link is over daily views limit
- if (this._wasToday(capObject.lastShownDate) &&
- capObject.dailyViews >= capObject.dailyCap) {
- return false;
- }
-
- // we passed all cap tests: return true
- return true;
- },
-
- /**
- * Removes clicked flag from frequency cap entry for tile landing url
- * @param url String url of the suggested link
- * @return promise resolved upon disk write completion
- */
- _removeTileClick: function DirectoryLinksProvider_removeTileClick(url = "") {
- // remove trailing slash, to accomodate Places sending site urls ending with '/'
- let noTrailingSlashUrl = url.replace(/\/$/, "");
- let capObject = this._frequencyCaps[url] || this._frequencyCaps[noTrailingSlashUrl];
- // return resolved promise if capObject is not found
- if (!capObject) {
- return Promise.resolve();
- }
- // otherwise remove clicked flag
- delete capObject.clicked;
- return this._writeFrequencyCapFile();
- },
-
- /**
- * Removes all clicked flags from frequency cap object
- * @return promise resolved upon disk write completion
- */
- _removeAllTileClicks: function DirectoryLinksProvider_removeAllTileClicks() {
- Object.keys(this._frequencyCaps).forEach(url => {
- delete this._frequencyCaps[url].clicked;
- });
- return this._writeFrequencyCapFile();
- },
-
- /**
- * Return the object to its pre-init state
- */
- reset: function DirectoryLinksProvider_reset() {
- delete this.__linksURL;
- this._removePrefsObserver();
- this._removeObservers();
- },
-
- addObserver: function DirectoryLinksProvider_addObserver(aObserver) {
- this._observers.add(aObserver);
- },
-
- removeObserver: function DirectoryLinksProvider_removeObserver(aObserver) {
- this._observers.delete(aObserver);
- },
-
- _callObservers(methodName, ...args) {
- for (let obs of this._observers) {
- if (typeof(obs[methodName]) == "function") {
- try {
- obs[methodName](this, ...args);
- } catch (err) {
- Cu.reportError(err);
- }
- }
- }
- },
-
- _removeObservers: function() {
- this._observers.clear();
- }
-};
diff --git a/application/basilisk/modules/moz.build b/application/basilisk/modules/moz.build
index d043d4799..cd8f2ce62 100644
--- a/application/basilisk/modules/moz.build
+++ b/application/basilisk/modules/moz.build
@@ -16,7 +16,6 @@ EXTRA_JS_MODULES += [
'ContentObservers.jsm',
'ContentSearch.jsm',
'ContentWebRTC.jsm',
- 'DirectoryLinksProvider.jsm',
'E10SUtils.jsm',
'Feeds.jsm',
'FormSubmitObserver.jsm',
diff --git a/application/basilisk/themes/shared/newtab/newTab.inc.css b/application/basilisk/themes/shared/newtab/newTab.inc.css
index 8ecd603c9..5cbdb240e 100644
--- a/application/basilisk/themes/shared/newtab/newTab.inc.css
+++ b/application/basilisk/themes/shared/newtab/newTab.inc.css
@@ -99,19 +99,6 @@
border-radius: 2px;
}
-/* GRID */
-#topsites-heading {
- color: #7A7A7A;
- font-size: 1em;
- font-weight: normal;
- /* Position the heading such that it doesn't affect how many cells we
- can fit into the grid. */
- position: absolute;
- /* The top margin moves the heading away from the grid.
- The horizontal margin aligns the heading with the cells. */
- margin: -1em 10px 0;
-}
-
/* CELLS */
.newtab-cell {
--cell-corner-radius: 8px;
@@ -119,10 +106,6 @@
border-radius: var(--cell-corner-radius);
}
-body.compact .newtab-cell {
- --cell-corner-radius: 2px;
-}
-
.newtab-cell:empty {
outline: 2px dashed #c1c1c1;
outline-offset: -2px;
@@ -172,49 +155,16 @@ body.compact .newtab-cell {
transition: opacity 100ms ease-out;
}
-body.compact .newtab-thumbnail {
- height: 100%;
- border-radius: calc(var(--cell-corner-radius) + 1px);
- outline: 1px solid hsla(0,0%,0%,.1);
- -moz-outline-radius: var(--cell-corner-radius);
- outline-offset: -1px;
-}
-
.newtab-thumbnail.placeholder {
color: white;
font-size: 85px;
line-height: 200%;
}
-body.compact .newtab-thumbnail.placeholder {
- font-size: 45px;
-}
-
-.newtab-cell:not([ignorehover]) .newtab-site:hover .newtab-thumbnail.enhanced-content {
- opacity: 0;
-}
-
-.newtab-site[type=affiliate] .newtab-thumbnail,
-.newtab-site[type=enhanced] .newtab-thumbnail,
-.newtab-site[type=organic] .newtab-thumbnail,
-.newtab-site[type=sponsored] .newtab-thumbnail {
- background-position: center center;
-}
-
-body.compact .newtab-site[type=affiliate] .newtab-thumbnail {
- background-position: center 30%;
-}
-
-.newtab-site[type=affiliate] .newtab-thumbnail,
-body:not(.compact) .newtab-site[type=enhanced] .newtab-thumbnail,
-body:not(.compact) .newtab-site[type=organic] .newtab-thumbnail,
-body:not(.compact) .newtab-site[type=sponsored] .newtab-thumbnail {
- background-size: auto;
-}
-
/* TITLES */
.newtab-title {
+ color: #5c5c5c;
background-color: #F2F2F2;
font-size: 13px;
line-height: 30px;
@@ -222,45 +172,13 @@ body:not(.compact) .newtab-site[type=sponsored] .newtab-thumbnail {
border-radius: 0 0 var(--cell-corner-radius) var(--cell-corner-radius);
}
-body.compact .newtab-title {
- background-color: hsla(0,0%,100%,.85);
- font-size: 12px;
- line-height: 21px;
- border: 1px solid hsla(0,0%,80%,.8);
- border-top-color: hsla(0,0%,0%,.1);
- background-clip: padding-box;
-}
-
-.newtab-title,
-.newtab-suggested {
- color: #5c5c5c;
-}
-
-body.compact .newtab-title,
-body.compact .newtab-suggested {
- color: black;
-}
-
-.newtab-suggested[active] {
- background-color: rgba(51, 51, 51, 0.95);
- border: 0;
- color: white;
-}
-
-body:not(.compact) .newtab-site:hover .newtab-title {
+.newtab-site:hover .newtab-title {
color: white;
background-color: #333;
border-color: #333;
border-top-color: white;
}
-body.compact .newtab-site:hover .newtab-title {
- color: white;
- background-color: hsla(0,0%,20%,.85);
- border-color: hsla(0,0%,0%,.8);
- border-top-color: white;
-}
-
.newtab-site[pinned] .newtab-title {
padding-inline-start: 24px;
}
@@ -302,20 +220,6 @@ body.compact .newtab-site:hover .newtab-title {
right: 4px;
}
-body.compact .newtab-control {
- top: -8px;
-}
-
-body.compact .newtab-control-pin:dir(ltr),
-body.compact .newtab-control-block:dir(rtl) {
- left: -8px;
-}
-
-body.compact .newtab-control-block:dir(ltr),
-body.compact .newtab-control-pin:dir(rtl) {
- right: -8px;
-}
-
.newtab-control-pin,
.newtab-site[pinned] .newtab-control-pin:hover:active {
background-image: -moz-image-rect(url(chrome://browser/skin/newtab/controls.svg), 0, 96, 32, 64);
diff --git a/application/palemoon/app/profile/palemoon.js b/application/palemoon/app/profile/palemoon.js
index 974d76d4b..d0e078eb7 100644
--- a/application/palemoon/app/profile/palemoon.js
+++ b/application/palemoon/app/profile/palemoon.js
@@ -1077,9 +1077,6 @@ pref("browser.newtab.preload", false);
// Toggles the content of 'about:newtab'. Shows the grid when enabled.
pref("browser.newtabpage.enabled", true);
-// XXX: Remove this when "enhanced" tiles are dead
-pref("browser.newtabpage.enhanced", false);
-
// Disables capturing of page thumbnails
pref("browser.pagethumbnails.capturing_disabled", false);
diff --git a/application/palemoon/components/newtab/grid.js b/application/palemoon/components/newtab/grid.js
index db3d319c3..e63ea54a6 100644
--- a/application/palemoon/components/newtab/grid.js
+++ b/application/palemoon/components/newtab/grid.js
@@ -130,13 +130,9 @@ var gGrid = {
// Create sites.
let numLinks = Math.min(links.length, cells.length);
- let hasHistoryTiles = false;
for (let i = 0; i < numLinks; i++) {
if (links[i]) {
this.createSite(links[i], cells[i]);
- if (links[i].type == "history") {
- hasHistoryTiles = true;
- }
}
}
diff --git a/application/palemoon/components/newtab/page.js b/application/palemoon/components/newtab/page.js
index 7117d4527..ceb2c2a76 100644
--- a/application/palemoon/components/newtab/page.js
+++ b/application/palemoon/components/newtab/page.js
@@ -47,11 +47,6 @@ var gPage = {
let enabled = gAllPages.enabled;
this._updateAttributes(enabled);
- // Update thumbnails to the new enhanced setting
- if (aData == "browser.newtabpage.enhanced") {
- this.update();
- }
-
// Initialize the whole page if we haven't done that, yet.
if (enabled) {
this._init();
@@ -166,16 +161,6 @@ var gPage = {
*/
_handleUnloadEvent: function Page_handleUnloadEvent() {
gAllPages.unregister(this);
- // compute page life-span and send telemetry probe: using milli-seconds will leave
- // many low buckets empty. Instead we use half-second precision to make low end
- // of histogram linear and not lose the change in user attention
- let delta = Math.round((Date.now() - this._firstVisibleTime) / 500);
- if (this._suggestedTilePresent) {
- Services.telemetry.getHistogramById("NEWTAB_PAGE_LIFE_SPAN_SUGGESTED").add(delta);
- }
- else {
- Services.telemetry.getHistogramById("NEWTAB_PAGE_LIFE_SPAN").add(delta);
- }
},
/**
@@ -250,43 +235,10 @@ var gPage = {
},
onPageVisibleAndLoaded() {
- // Send the index of the last visible tile.
- this.reportLastVisibleTileIndex();
- // Maybe tell the user they can undo an initial automigration
- this.maybeShowAutoMigrationUndoNotification();
- },
-
- reportLastVisibleTileIndex() {
- let cwu = window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils);
-
- let rect = cwu.getBoundsWithoutFlushing(gGrid.node);
- let nodes = cwu.nodesFromRect(rect.left, rect.top, 0, rect.width,
- rect.height, 0, true, false);
-
- let i = -1;
- let lastIndex = -1;
- let sites = gGrid.sites;
-
- for (let node of nodes) {
- if (node.classList && node.classList.contains("newtab-cell")) {
- if (sites[++i]) {
- lastIndex = i;
- if (sites[i].link.targetedSite) {
- // record that suggested tile is shown to use suggested-tiles-histogram
- this._suggestedTilePresent = true;
- }
- }
- }
- }
},
toggleEnabled: function(aEvent) {
gAllPages.enabled = !gAllPages.enabled;
event.stopPropagation();
- },
-
- maybeShowAutoMigrationUndoNotification() {
- // sendAsyncMessage("NewTab:MaybeShowAutoMigrationUndoNotification");
- },
+ }
};
diff --git a/application/palemoon/components/newtab/sites.js b/application/palemoon/components/newtab/sites.js
index a368146bb..cb5675238 100644
--- a/application/palemoon/components/newtab/sites.js
+++ b/application/palemoon/components/newtab/sites.js
@@ -136,15 +136,6 @@ Site.prototype = {
return str;
},
- _getSuggestedTileExplanation: function() {
- let targetedName = `<strong> ${this.link.targetedName} </strong>`;
- let targetedSite = `<strong> ${this.link.targetedSite} </strong>`;
- if (this.link.explanation) {
- return this._newTabString(this.link.explanation, [targetedName, targetedSite]);
- }
- return newTabString("suggested.button", [targetedName]);
- },
-
/**
* Checks for and modifies link at campaign end time
*/
@@ -155,11 +146,8 @@ Site.prototype = {
this.link.url = Services.io.newURI(this.url, null, null).resolve("/");
// clear supplied images - this triggers thumbnail download for new url
delete this.link.imageURI;
- delete this.link.enhancedImageURI;
// remove endTime to avoid further time checks
delete this.link.endTime;
- // clear enhanced-content image that may still exist in preloaded page
- this._querySelector(".enhanced-content").style.backgroundImage = "";
gPinnedLinks.replace(oldUrl, this.link);
}
},
@@ -337,7 +325,7 @@ Site.prototype = {
}
else if (!pinned && target.classList.contains("newtab-control-pin")) {
if (this.pin()) {
- // suggested link has changed - update rest of the pages
+ // link has changed - update rest of the pages
gAllPages.update(gPage);
}
action = "pin";
diff --git a/toolkit/modules/NewTabUtils.jsm b/toolkit/modules/NewTabUtils.jsm
index 35e38156f..500d08fa5 100644
--- a/toolkit/modules/NewTabUtils.jsm
+++ b/toolkit/modules/NewTabUtils.jsm
@@ -36,7 +36,6 @@ XPCOMUtils.defineLazyGetter(this, "gUnicodeConverter", function () {
// Boolean preferences that control newtab content
const PREF_NEWTAB_ENABLED = "browser.newtabpage.enabled";
-const PREF_NEWTAB_ENHANCED = "browser.newtabpage.enhanced";
// The preference that tells the number of rows of the newtab grid.
const PREF_NEWTAB_ROWS = "browser.newtabpage.rows";
@@ -200,11 +199,6 @@ var AllPages = {
_enabled: null,
/**
- * Cached value that tells whether the New Tab Page feature is enhanced.
- */
- _enhanced: null,
-
- /**
* Adds a page to the internal list of pages.
* @param aPage The page to register.
*/
@@ -242,29 +236,6 @@ var AllPages = {
},
/**
- * Returns whether the history tiles are enhanced.
- */
- get enhanced() {
-#if defined(MC_BASILISK) || defined(HYPE_ICEWEASEL)
- // Hard-block the use of sponsored tiles.
- return false;
-#else
- if (this._enhanced === null)
- this._enhanced = Services.prefs.getBoolPref(PREF_NEWTAB_ENHANCED);
-
- return this._enhanced;
-#endif
- },
-
- /**
- * Enables or disables the enhancement of history tiles feature.
- */
- set enhanced(aEnhanced) {
- if (this.enhanced != aEnhanced)
- Services.prefs.setBoolPref(PREF_NEWTAB_ENHANCED, !!aEnhanced);
- },
-
- /**
* Returns the number of registered New Tab Pages (i.e. the number of open
* about:newtab instances).
*/
@@ -296,9 +267,6 @@ var AllPages = {
case PREF_NEWTAB_ENABLED:
this._enabled = null;
break;
- case PREF_NEWTAB_ENHANCED:
- this._enhanced = null;
- break;
}
}
// and all notifications get forwarded to each page.
@@ -313,7 +281,6 @@ var AllPages = {
*/
_addObserver: function AllPages_addObserver() {
Services.prefs.addObserver(PREF_NEWTAB_ENABLED, this, true);
- Services.prefs.addObserver(PREF_NEWTAB_ENHANCED, this, true);
Services.obs.addObserver(this, "page-thumbnail:create", true);
this._addObserver = function () {};
},
@@ -480,8 +447,6 @@ var PinnedLinks = {
return false;
}
aLink.type = "history";
- // always remove targetedSite
- delete aLink.targetedSite;
return true;
},
@@ -1099,11 +1064,8 @@ var Links = {
_getMergedProviderLinks: function Links__getMergedProviderLinks() {
// Build a list containing a copy of each provider's sortedLinks list.
let linkLists = [];
+ let { console } = Cu.import("resource://gre/modules/Console.jsm", {});
for (let provider of this._providers.keys()) {
- if (!AllPages.enhanced && provider != PlacesProvider) {
- // Only show history tiles if we're not in 'enhanced' mode.
- continue;
- }
let links = this._providers.get(provider);
if (links && links.sortedLinks) {
linkLists.push(links.sortedLinks.slice());
@@ -1305,8 +1267,6 @@ var Telemetry = {
let probes = [
{ histogram: "NEWTAB_PAGE_ENABLED",
value: AllPages.enabled },
- { histogram: "NEWTAB_PAGE_ENHANCED",
- value: AllPages.enhanced },
{ histogram: "NEWTAB_PAGE_PINNED_SITES_COUNT",
value: PinnedLinks.links.length },
{ histogram: "NEWTAB_PAGE_BLOCKED_SITES_COUNT",