Skip to content

Commit

Permalink
Switch snapshot implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
daun committed Mar 21, 2024
1 parent 192da97 commit a77d70c
Show file tree
Hide file tree
Showing 22 changed files with 101 additions and 85 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,15 @@ jobs:
with:
timeout_minutes: 3
max_attempts: 3
command: composer require "laravel/framework:9.*" "orchestra/testbench:^7.40" "pestphp/pest:^1.22" "pestphp/pest-plugin-laravel:^1.4" --no-update --no-interaction
command: composer require "laravel/framework:9.*" "orchestra/testbench:^7.40" "pestphp/pest:^1.22" "pestphp/pest-plugin-laravel:^1.4" "spatie/pest-plugin-snapshots:^1.1" --no-update --no-interaction

- name: Select Laravel 10
uses: nick-invision/retry@v3
if: ${{ matrix.laravel == '10' }}
with:
timeout_minutes: 3
max_attempts: 3
command: composer require "laravel/framework:10.*" "orchestra/testbench:^8.21" "pestphp/pest:^2.34" "pestphp/pest-plugin-laravel:^2.3" --no-update --no-interaction
command: composer require "laravel/framework:10.*" "orchestra/testbench:^8.21" "pestphp/pest:^2.34" "pestphp/pest-plugin-laravel:^2.3" "spatie/pest-plugin-snapshots:^2.1" --no-update --no-interaction

- name: Install PHP Dependencies
uses: nick-invision/retry@v3
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@
"mockery/mockery": "^1.6",
"orchestra/testbench": "^8.21",
"pestphp/pest-plugin-laravel": "^2.3",
"pestphp/pest": "^2.34",
"spatie/phpunit-snapshot-assertions": "^5.1"
"spatie/pest-plugin-snapshots": "^2.1",
"pestphp/pest": "^2.34"
},
"scripts": {
"format": "./vendor/bin/pint",
Expand Down
64 changes: 63 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 2 additions & 5 deletions tests/Concerns/DealsWithAssets.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,9 @@ public function getTestFilesDirectory(...$paths): string
return fixtures_path('tmp', 'testfiles', ...$paths);
}

public function getTestFileData(string $filename): array
public function getTestFileContents(string $filename): string
{
$content = file_get_contents(fixtures_path("testfiles/{$filename}"));
$expected = json_decode(file_get_contents(snapshots_path("placeholders/{$filename}.json")), true);

return [$content, $expected];
return file_get_contents(fixtures_path("testfiles/{$filename}"));
}

public function uploadTestImageToTestContainer(string $image, ?string $filename = null)
Expand Down
31 changes: 0 additions & 31 deletions tests/Concerns/HandlesSnapshots.php

This file was deleted.

14 changes: 7 additions & 7 deletions tests/Feature/PlaceholderProviderAverageColorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@
test('extracts the average color', function () {
$provider = $this->app->make(AverageColor::class);

[$content, $expected] = $this->getTestFileData('test.jpg');
['hash' => $hash, 'uri' => $uri] = $expected[$provider::$handle];
$content = $this->getTestFileContents('test.jpg');
$hash = $provider->encode($content);

expect($hash)->toBeString()->not->toBeEmpty();
expect($provider->encode($content))->toBe($hash);
expect($hash)->toMatchTextSnapshot();
});

test('creates a data uri', function () {
$provider = $this->app->make(AverageColor::class);

[$content, $expected] = $this->getTestFileData('test.jpg');
['hash' => $hash, 'uri' => $uri] = $expected[$provider::$handle];
$content = $this->getTestFileContents('test.jpg');
$hash = $provider->encode($content);
$uri = $provider->decode($hash);

expect($hash)->toBeString()->not->toBeEmpty();
expect($uri)->toBeString()->not->toBeEmpty();
expect($provider->decode($hash))->toEqual($uri);
expect($uri)->toMatchTextSnapshot();
});

test('generates a thumb and calculates average', function () {
Expand Down
14 changes: 7 additions & 7 deletions tests/Feature/PlaceholderProviderBlurHashTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@
test('creates a blurhash', function () {
$provider = $this->app->make(BlurHash::class);

[$content, $expected] = $this->getTestFileData('test.jpg');
['hash' => $hash, 'uri' => $uri] = $expected[$provider::$handle];
$content = $this->getTestFileContents('test.jpg');
$hash = $provider->encode($content);

expect($hash)->toBeString()->not->toBeEmpty();
expect($provider->encode($content))->toBe($hash);
expect($hash)->toMatchTextSnapshot();
});

test('creates a data uri', function () {
$provider = $this->app->make(BlurHash::class);

[$content, $expected] = $this->getTestFileData('test.jpg');
['hash' => $hash, 'uri' => $uri] = $expected[$provider::$handle];
$content = $this->getTestFileContents('test.jpg');
$hash = $provider->encode($content);
$uri = $provider->decode($hash);

expect($hash)->toBeString()->not->toBeEmpty();
expect($uri)->toBeString()->not->toBeEmpty();
expect($provider->decode($hash))->toEqual($uri);
expect($uri)->toMatchTextSnapshot();
});

test('generates a thumb and extracts pixels', function () {
Expand Down
14 changes: 7 additions & 7 deletions tests/Feature/PlaceholderProviderThumbhashTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@
test('creates a thumbhash', function () {
$provider = $this->app->make(ThumbHash::class);

[$content, $expected] = $this->getTestFileData('test.jpg');
['hash' => $hash, 'uri' => $uri] = $expected[$provider::$handle];
$content = $this->getTestFileContents('test.jpg');
$hash = $provider->encode($content);

expect($hash)->toBeString()->not->toBeEmpty();
expect($provider->encode($content))->toBe($hash);
expect($hash)->toMatchTextSnapshot();
});

test('creates a data uri', function () {
$provider = $this->app->make(ThumbHash::class);

[$content, $expected] = $this->getTestFileData('test.jpg');
['hash' => $hash, 'uri' => $uri] = $expected[$provider::$handle];
$content = $this->getTestFileContents('test.jpg');
$hash = $provider->encode($content);
$uri = $provider->decode($hash);

expect($hash)->toBeString()->not->toBeEmpty();
expect($uri)->toBeString()->not->toBeEmpty();
expect($provider->decode($hash))->toEqual($uri);
expect($uri)->toMatchTextSnapshot();
});

test('generates a thumb and extracts pixels', function () {
Expand Down
12 changes: 5 additions & 7 deletions tests/Feature/PlaceholderTagTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,38 +20,36 @@

test('renders uri', function () {
$uri = $this->tag->uri();

expect($uri)->toBeString()->toContain('data:image/');
$this->assertMatchesSnapshot($uri);
expect($uri)->toMatchTextSnapshot();

$index = $this->tag->index();
expect($index)->toBe($uri);
});

test('renders hash', function () {
$hash = $this->tag->hash();

expect($hash)->toBeString();
$this->assertMatchesSnapshot($hash);
expect($hash)->toMatchTextSnapshot();
});

test('renders img', function () {
$img = $this->tag->img();

expect($img)->toBeString()->toContain('<img src="data:image/');
$this->assertMatchesSnapshot($img);
expect($img)->toMatchTextSnapshot();
});

test('renders img attributes', function () {
$img = $this->tag->setParameters(['data-lazyload' => 'yes'])->img();

expect($img)->toBeString()->toContain('<img src="data:image/')->toContain('data-lazyload="yes"');
$this->assertMatchesSnapshot($img);
expect($img)->toMatchTextSnapshot();
});

test('returns available data', function () {
$data = $this->tag->data();

expect($data)->toBeArray()->toHaveKeys(['uri', 'hash', 'type', 'exists']);
$this->assertMatchesObjectSnapshot($data);
expect($data)->toMatchObjectSnapshot();
});
2 changes: 0 additions & 2 deletions tests/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,13 @@
use Statamic\Providers\StatamicServiceProvider;
use Statamic\Statamic;
use Tests\Concerns\DealsWithAssets;
use Tests\Concerns\HandlesSnapshots;
use Tests\Concerns\PreventSavingStacheItemsToDisk;
use Tests\Concerns\ResolvesStatamicConfig;
use Wilderborn\Partyline\ServiceProvider as PartyLineServiceProvider;

abstract class TestCase extends OrchestraTestCase
{
use DealsWithAssets;
use HandlesSnapshots;
use InteractsWithViews;
use PreventSavingStacheItemsToDisk;
use ResolvesStatamicConfig;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADUlEQVQImWPo62r9DwAF5AKdLIvXGgAAAABJRU5ErkJggg==
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#8e8a8501
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
LFJH,TkLo*{-B;kYO#Q;~nrgD,G8
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAJe0lEQVRogX1ZW5LkOA4DaO/9L7IRE7Hn6yT2gyBFZVVPdbid6YdEEOBDSv7zv/9K8B/rEAGQdQ5ApO8RCD8HggRI9msgiFB9DhEU6vvXgXX05OlL6ePDc54DQPpz+r5Y78UZ9ftP1+mXL3VF91XNWb+/sYH82/Xf7v/LX3yPpPbU9b7OPJKNX6bas9LXGHXR936C/mbl22htgN94vgC/c4G+yB6FZSoBqW6K60HxjMIzqOoFG0eD0iWpusZfjfwmS/wJVOt6n98LPnlGMSD9AqiNl+oVOi7o+yEgHR/6zfgEuJn8Mv7yPCo+zfWA0rJBFyN9u19aE7T9v03IC4zQA2wGIoEUQTPDNfD29jVf28BSwnX88vw7Iy1n/6BxQJSh6llYmQpSJTOzJ1X2Gu4ToITYctJxZ13iZYc6Ff7CkkmdTGdGdD348xCUgIJIP9X2QQRZXhYIWlZqT7exyWEhPLv9MHHVyaNe45SBOZyW8jcb9QXkBxMLvVLINTBEyCBgNgIloRgmZFBC5IlOph2vxaJZqfFbTrzk1PNvO5KLkR60qVR7/gvMFK3FSKuB4gpwQiIeAcovKyQwXUQ7CQwIGzEs6IBpguO2p21ZjOzsdSNOyuefFbXZaDChqupPFqDHANQzZlf8kxhGATQ7LClLC8ya82Jj0m/mXQd2qhs2VO2CDpB29GTjBSLMxLO5zzNziM5iPfWS14CodNhg0rLLe6g5v5OSJkPoABomtHod1flgQGVte9oAZEa0qRSBLG10H9ZTH0+bvWCx4aIqqQA2kPibtDqNOHfDTFTSMSAIf+yVz2IM7V0BT5a3lQvEaDQAJZhmBQSdjk5gW0qOn2JkK+PEzJb5y8ypkuUeDZjJHtJhRcXIZwGFjrRyGNlsRAV4Op6yojbGXc6tLSvPKQdAp/M+ho32k1bWGiYMRhcbKgCW1R9YXtNAwl4uaeUCwQwwdc6KYqGKkyFolhBIVE/utF0tEn4/vtPvnbHkQDufk0KigdTxR5ZXFzcRkQXkZqJB1L1P9rokIDUbqjav0+sPEI6V9XkSjuVV0voK9MOI5SUhkQ504Y+EPyiZ5QBxoF9sCPEhIoVI4WNAqe7NAikhdgF0YLdRf2XjN0ZOHVqPfYEQhZQZ0QHUQJC3rGgg/ISZqmOymWpsouY5FbLTV+vkpNSrVcOdR15Kpx7wgKhBC4CQSMlZI/GR8GcByTyMyGtRZjHxfIRPCs+nnksnhE69AgG2tHTWPp2AVjGs+nncvQv3CfYfRGYNp7Qu0/+EVB5m8mak2YhP4JPA5wM8CTNVhVLKwwoSJKtRjJuB2T/4+rylJYN96ToiVqvNxmxWtDL4YabOBaRYoY1FcuIiP0KmkAnIjHSRlPLk/GuR0td4MllnMx4m4I4ccPo95UN3jFCgpjUrMFpg1GcgU1eM1LFAmA0kXRvcf33npCkWnDNzgWm8CSA44NAxcghDrS8gUK3gM9lZtxqUjrEmrkAoHNQ2PtvGcEW7Y7FUcOWZi6Q5LxK79PTf20zVudcXwrm+AJXIITj9dMqSplc4iyrfmojs9ztqY9btY63Hqus8xjYYdCvEsw7ytXc1vpckm4mzFl8syZ+Pqyf6ahI7oied7TsCUwBttDMW22puWyyv/r4YKrvOvfew8XXoDEbU+qGWshU7VPp7rmW/PHj4Pg4IxpLRYZnHKl+brHuf/UgsVqIJ4F+AxDoOGHk7tJqKkPBorVrsoXovEURtp7IqN5EIxhgfw4aNp2ZShgHsxOXsTAFBL6tR6x9sRsKLm8sjPfbMITwCHgkPutJoZBESHhAPAkHhMYiIalEYBSBanm2g5VWhowOClZyCZgIsB+Ew0sH/hisnWhZLe0GD4AYDPAAeVxbYM/3+awAPfF7GHxDN7GbkyCF8VhA5zLZCOHbslPRy8pk1x5YOETjHA+IhDaLSnUx1OoUEi5E3hDcLxGMJPgQeYQFqT9d7nR0YsPElsSAQcZh5AKTtaBAV7DzZeHKLiODJMY9ZeVQAcsLy1CXAEwp4E3gDeFXMtRzDcfZM/OlIxdEsGzxZmzzyYtn1ALMhAdBtvA3OCWoePRpQoFZ9xQjx4gwS1S0BnQQAvA/wHwGvhNfgH2HY7HibhGIwbXz6e/jzAdEMmhHu9GtGwv9XJ3Xk9GlZgXhFJDshF9haQzvfqzz+AgNgWPkCMZ8bhIE0IOCwIywQAB4eRTQRBkJgmXfFhgJJ4THAd4EgDKw6TlAGLRYI3OcHNyvPBPABonYq7168nu9CUIzsUvsyGv4pOEKY+rD3iNdsrQQNsnZM+ueIzizPbyD4BWR5+GIBnY2mZBYQL3t7/BPoZmTSL3ufKUDkAWFjH1+dXVoXNbXUxhG4YukdABwwrfEdI02JRMers6j7tQe1BHg6kPp5VE15ySn0AN1yWC4lr8CDWgCpdwg6GbCASW4/nLp3qn7JOoADygXujhF2g3CoaSAG0z8cVQ9adqS6RWEbpvEEW2CMqdb6hY2q7AF5e30zEixZPTQrPOC6Hlw/EttoWEYHyNnTetyYXpvnluCPGCGjWLHhDeJhOqhrIHJLLQAmuoWIbXh/biZ8LRyPnLxro7SWPb2PPGC8tlkwupyfgkiCym6yESSkBlPGdl9F9MJXAF1JpiG8gUSUtKaYtay+Mxba+N4u6l+9sPaRgV6bdVZIg1ox0k1KWlicc8fM00mXVT8atlgJYhq9aKOJJ2w8DyPTBPJkHSwmYhkq/1gQjhPlqWPooBDwdnXUdSvaxEnHPbK3nv1MgagfCQtghMb7EYeVZzHSrB1zMIuy7JWhULuT7cysFkgocJbRWHX1WhggpzB2TekGZlZ4LTTTQMas9iLoRq8YKVCHEXo90XP3vlyzkckfK8BoMKw+a6QIejfedYS/AGkwcJBrri7JoYFgFkQlrQ3oyG3YWH0SwPMzXBfWPCrpetIgohNEb96hMuTojOxVhdcMJPa/phkLSA+IAYGblcXI3Ic73HHbiQlYUojzO+M4STyLLp1CWgXROiM1VRINoBf+rE4YDvLRbYNw+zre3gBs/GHkMIOlhN4CmjScG8CaZh2xpVVGl96riXUnu7PKKfxHggYrGwf0EtXL0ZEaZ4W35ccZA6f4naHXsaQ7PuNZUfrF9xAsb5uWUXU6jMhFcCt7DCHOZJMSljO+jvX6iszzf299/XiOM5V/nz/vxory71HHa1sCX3OMZXN9GXsbz2vcK1leg/IYvJ7jZcH9Ggj8H7sP604mxSg6AAAAAElFTkSuQmCC
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
IggKFoTXibiHZ3mPdoaGeniYD2E9B4c
1 change: 1 addition & 0 deletions tests/__snapshots__/PlaceholderTagTest__renders_uri__1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAbCAYAAAAdx42aAAAOKElEQVR4AQCBAH7/AMfl2P/B3tH/ttPF/6nGt/+euqn/mLOg/5exm/+as5v/n7ed/6S6nv+mu53/pLeY/56wkf+Wp4j/kJ+B/42bfv+PnIH/lqKK/6Grl/+rtKT/srqv/7S7tf+xt7f/qa+0/6Clr/+YnKz/lJis/5WZsf+bnrr/o6bF/6uuz/+ws9X/AIEAfv8Aw+DU/7zZzf+xzsH/pcGz/5u2pv+Ur5z/k62Y/5evmP+ctJr/obec/6O4m/+htZb/m66P/5Slhv+NnX//i5l8/42Zf/+Un4j/nqiU/6ixof+vt6z/sbiz/660tP+nrbL/nqOu/5ebq/+Tl6z/lZmy/5yfu/+kp8f/ra/R/7K01/8AgQB+/wC72M3/tNHG/6rGuv+euqz/k6+f/46ol/+NppP/kamT/5eulv+cspj/n7OX/52wk/+XqYv/kKCC/4mYe/+Gk3j/iJR7/46Zg/+Yoo//oqqc/6mxp/+ssq7/qa+w/6Oorv+bn6v/lJip/5KVq/+VmLL/nJ+9/6aoyf+vsdT/tLba/wCBAH7/ALHOxf+rx77/obyy/5WwpP+LpZj/hZ+P/4WejP+JoY3/kKeQ/5ark/+ZrZP/l6qO/5Kjh/+Kmn7/g5F2/3+Mc/+BjHX/h5F9/5CZif+aopX/oaig/6Sqp/+hp6r/nKCp/5WZp/+Qk6b/j5Kq/5OVsv+cnr7/pqjL/7Cy1v+2t93/AIEAfv8AqMO9/6K9tv+Xsqr/jKad/4KckP99loj/fZWF/4KZh/+Jn4v/kKSO/5Omjv+Ro4r/jJyC/4STef98inH/eIRt/3mEb/9+iHb/ho+B/5CXjf+WnZj/mZ+f/5icov+TlqL/jZCg/4mMof+KjKb/j5Gw/5mbvf+lpsz/sLHY/7a33/8AgQB+/wChu7f/mrWw/5CqpP+Fnpf/e5SL/3aOg/93jYD/fJGC/4OYhv+KnYn/jZ+K/4ychv+GlX7/fox0/3aCbP9xfGf/cHpo/3V9bv98hHj/hYuE/4uQjv+OkpX/jJCY/4iLmP+DhZj/gIKa/4KDof+Jiqz/lZW6/6Kiyv+trdf/tLTe/wCBAH7/AJy1s/+Wr6z/i6Sg/3+Xk/92jYf/cYd//3GHfP92i37/fpGC/4WXhf+ImYb/h5aC/4GPev94hXD/b3tn/2pzYf9ocWH/a3Nm/3J4b/95f3r/f4OE/4KFiv+Ago7/fH6O/3h5j/92d5L/eXmZ/4GBpf+OjbX/nJvG/6em0/+urdv/AIEAfv8AmrGy/5Srq/+JoJ//fZOR/3OIhP9tgnz/bYF5/3KFe/96jH//gJGC/4STgv+CkH7/fIh2/3N+bP9qc2L/Y2tc/2FoW/9jaV//aG1n/29zcf90d3r/dniA/3R1g/9wcYT/bGyF/2tqiP9vbZD/eHad/4WDrv+Tkb//n53N/6ek1f8AgQB+/wCasLL/k6mr/4idnv97kJD/cYWD/2p+ev9qfHb/b4B3/3aGe/98i37/f41+/32Kev93gnL/bndo/2RsXf9dZFf/Wl9V/1tgWP9gZGD/Zmhp/2tscv9sbHf/aml6/2Zle/9iYHz/YV5//2Rih/9tapT/e3el/4mGtv+WksX/nZnN/wCBAH7/AJqus/+Tp6v/iJue/3qNj/9vgYH/aHl3/2Z3cv9qenP/cX92/3eEef96hXn/eIJ1/3F6bf9ocGL/XmVY/1dcUf9UWE//VVhT/1pcWv9gYGP/ZGNr/2Vjcf9iYHP/Xltz/1pWdP9YVHf/XFd//2VgjP9ybZ3/gHuu/42HvP+UjsT/AIEAfv8Am6yy/5Olqv+HmJ3/eYmM/2x8ff9kc3L/YnBt/2Vybf9qd2//cHty/3N9cv9xeW7/a3Jm/2JoXP9ZXVL/UlVM/09RSv9RUk7/VlZW/1xaX/9gXmf/YV5t/15ab/9aVW//VVBw/1NNcv9WUHr/XliG/2tklv95cqf/hX61/4yFvf8AgQB+/wCaqrD/k6Ko/4aVmf92hYj/aHZ4/19sbP9caGb/Xmlk/2NtZv9ocWn/a3Np/2lwZf9kaV3/XF9U/1NWS/9NT0b/TExG/09NS/9UUlP/W1dd/2BbZv9hXGz/X1lv/1pTb/9VTW//Ukpx/1RMd/9cU4P/Z1+S/3Vsov+Ad6//h363/wCBAH7/AJqnrf+Sn6T/hJCV/3OAg/9kcHL/WmVk/1ZfXf9XYFv/W2Nc/2BnXv9jaF7/YmZb/11fVP9VV0z/Tk5F/0pJQf9KR0L/TktI/1VRUv9dWF7/Y11o/2Veb/9jW3H/XlVy/1lPcf9WTHP/V0x5/11Tg/9oXZH/dGmg/390rf+FerT/AIEAfv8AmaSp/5GcoP+DjZH/cXt+/2Fqa/9WXl3/UFhV/1FXUv9UWlL/WV1U/1xfVP9bXFH/V1dL/1BPRP9LSD7/SEQ8/0pFP/9QSkf/WVJT/2JaYP9qYWz/bWN0/2thd/9nXHj/YVV3/11ReP9dUX3/YlaG/2xfk/93aqH/gXSs/4d5s/8AgQB+/wCbo6f/kpqe/4OLjf9xeXr/YWdm/1RaV/9OU07/TVFK/1BTSv9VVkz/V1hM/1dWSf9TUUT/Tko9/0lFOf9IQjj/S0Q9/1NLR/9eVVX/amBk/3Nocv93a3v/d2p//3JlgP9sXn//aFl//2dYg/9rXIv/c2OX/31to/+Gdq7/i3y1/wCBAH7/AKClp/+XnJ3/h42M/3V6eP9jaGT/VlpV/09SSv9OT0b/UVFG/1RTR/9XVUb/VlNE/1NOP/9OSDn/S0M2/0tCNv9PRj3/WU9J/2ZaWf9zZ2r/fnB4/4N1g/+EdYj/gHCJ/3lpiP90ZIj/cmGL/3Vkkf98apz/hHOn/417sf+Rf7f/AIEAfv8AqKup/5+ioP+Pko//fX96/2tsZv9dXlb/VlZL/1RTR/9WVEb/WVZG/1tXRv9aVUP/V1A+/1JKOP9PRjX/UEU3/1ZKPv9hVEv/b2Fd/35vb/+Jen//kICL/5GAkf+NfJL/h3WR/4FukP9+a5L/gGyY/4Vxof+Neav/lIC0/5iEuf8AgQB+/wCzs67/qqql/5qalP+Ih3//dnVr/2lnW/9hXlH/X1tM/2FcS/9kXkv/ZV5K/2NbRv9fVkH/WlA7/1dLN/9YSzn/XlBB/2paT/95aGH/iHd0/5WDhv+dipL/nouZ/5uHmv+UgJn/jnmY/4p0mf+KdJ3/jnil/5V/rv+bhbb/n4m7/wCBAH7/AL+9tP+3tav/qKWb/5aTh/+EgXP/d3Nk/3BrWv9uaFX/cGlU/3JqU/9zalH/cWZN/2xgR/9mWUD/YlM8/2JSPf9oV0X/c2JT/4NwZf+Tf3n/oIyL/6iTmP+qlJ//p5Ch/6CJn/+Zgp3/lHyd/5N7of+Xfqf/nISw/6KJt/+ljbz/AIEAfv8AzMe6/8O/sf+1sKL/pJ+P/5SOfP+IgW7/gXpk/4B4YP+CeF//hHle/4R4XP+BdFf/e21P/3NkSP9uXUL/bVtC/3JfSf99aVb/jHdp/5yGfP+qk47/spuc/7Sco/+xmKX/qpGk/6KJof+dg6H/m4Gj/56Dqf+iiLD/p423/6uQu/8AgQB+/wDWz77/zse1/8C6p/+wqZX/opqE/5ePd/+SiW//kods/5SJa/+Wimv/loho/5KDYv+Keln/gnBQ/3toSf94ZUj/fGdN/4ZwWv+Vfmv/pIx//7KZkf+6oZ7/vKKm/7meqP+yl6b/qo+j/6SJov+ihqT/pIep/6iLsP+skLf/r5O7/wCBAH7/ANzUvv/VzLb/yMCp/7qxmf+to4n/pJp+/6GVeP+ilnb/pZh2/6iZdv+nmHT/o5Jt/5qIY/+QfVj/h3NQ/4NuTf+Fb1H/jndc/5yDbf+rkYD/uJ6S/8Cln//Dp6f/v6Op/7icp/+xk6T/qo2j/6iKpf+pi6n/rY6w/7GTtv+0lbr/AIEAfv8A3tS7/9fNtP/Mwqf/wLWZ/7WpjP+uooL/rJ9+/6+hfv+0pYD/t6eA/7alff+xn3b/qJRr/5yHX/+SfFX/jHVR/411VP+VfF7/oYdu/7CVgP+9oZL/xamf/8iqp//Ep6n/vZ+n/7aXpf+vkKP/rY2l/66Oqf+xka//tZW1/7iYuf8AgQB+/wDc0bT/1suu/8zBo//BtZb/uKyL/7SmhP+0poH/uamD/7+uhv/DsYf/wrCF/72pfv+znnL/ppBl/5uDWv+Ue1T/k3pV/5p/Xv+mim7/tJeA/8Cjkf/Jq57/y62m/8ipqP/Boqf/upql/7STo/+xkKX/spGp/7WUr/+5mLX/vJu5/wCBAH7/ANjMrf/Tx6f/yr2d/8Gzkv+5q4j/t6iD/7mpgv+/rob/xrWK/8u4jP/Lt4r/xbGD/7uld/+tlmn/oYld/5mAVv+YfVb/nYJf/6mMbf+2mX//wqSQ/8usnf/OrqX/y6uo/8Skp/+9nKT/t5aj/7STpf+1lKr/uZew/72btv+/nbn/AIEAfv8A1Mem/8/Cof/Hupj/v7GN/7mqhf+3qIH/u6uC/8Kxhv/KuIz/0L2P/9G8jf/LtYb/wKl6/7Kaa/+ljF//nYNX/5t/V/+ghF7/qo1t/7iafv/EpY//zK2c/8+vpP/MrKf/xqWm/7+epP+5mKT/t5Wl/7iWqv+7mbD/v522/8Kfuv8BgQB+/wDSxKP/zb+d/8W3lP+9r4v/uKmD/7iogP+8q4L/xLKH/8y6jf/Sv5D/076P/864h//Cq3v/tJxs/6eOX/+ehFf/nIBX/6GEXv+rjmz/uJp9/8Sljv/NrZz/0K+k/82sp//Hpqb/wJ6k/7uYpP+4lqX/uZeq/72asP/Bnrb/w6C6/wOPyYVOllRbAAAAAElFTkSuQmCC
Loading

0 comments on commit a77d70c

Please sign in to comment.