Error handling and testing

1. Error handling

1.1. Getting the error log

Laravel store errors in /storage/logs/laravel.log.

This file can be consulted online by installing a small helper: Laravel log viewer.

1.1.1. Laravel log viewer

Install the tool:

composer require rap2hpoutre/laravel-log-viewer --dev

Once installed, just add a route for it:

Edit /routes/web.php and add this conditional statement:

if (env('APP_DEBUG', false)) {
  Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index');
}

The logs route will be only valid when APP_DEBUG is enabled in the .env file. If not (so production mode), the route won’t be defined and a 404 error page will be displayed.

Note: if you edit the .env file, you’ll need to stop and start again php artisan serve

Laravel log-viewer

1.2. Custom HTTP Error Pages

By default, Laravel will check in /resources/views/errors/ if a view exists for the encountered error.

So, for a 404 error, we just need to create /resources/views/errors/404.blade.php

That view can extend our master one so the look&feel of the page will be kept.

1.3. Define the 404 page

Create a new /resources/views/errors/404.blade.php file with this content:

@extends('master')

@section('content')
<div class="container">
  <div class="row">
    <div class="col-sm">
     <div class="panel-heading">
        <h3 class="panel-title">Houston, we have a problem!</h3>
      </div>
      <div class="panel-body">
        <p>Oups... nothing here</p>
        <a href="{{ route('todos.index') }}" class="back btn btn-sm btn-success">
          <i class="far fa-hand-point-left"></i> Back
        </a>
      </div>
    </div>
    <div class="col-sm">
     <div id="lottie" style="height:250px;" />
    </div>
  </div>
</div>
@endsection

@section('script')
<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/4.13.0/bodymovin.min.js" type="text/javascript"></script>
  <script>
    var animation = bodymovin.loadAnimation({
      container: document.getElementById('lottie'),
      autoplay: true,
      path: 'images/errors/error_404_data.json', // https://www.lottiefiles.com/1408-network-lost
      renderer: 'svg',
      loop: true
    })
  </script>
@endsection

The result will be

404 error page

We’ll reuse our master view without any changes.

We’ll add our content and additional JS scripts.

1.4. Display the content

The content section output an informative text and a route to our todo’s lists.

<a href="{{ route('todos.index') }}" class="back btn btn-sm btn-success">
  <i class="far fa-hand-point-left"></i> Back
</a>

We also foresee a div called lottie for our animation.

1.4.1. Use Lottie

https://github.com/airbnb/lottie-android

https://laracasts.com/series/whatcha-working-on/episodes/29

https://www.lottiefiles.com/

Lottie is a JSON animation framework proposed by airbnb for free. Scripts can be found on Github.

There is a laracast video for teaching how to use Lottie.

In a few words: once the JS script is loaded, we need to have a named div in our DOM, an external JSON that contains the animation and just play it.

Creating a lottie element:

<div id="lottie" style="height:250px;" />

Load the bodymovin script:

<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/4.13.0/bodymovin.min.js" type="text/javascript"></script>

And play it:

<script>
  var animation = bodymovin.loadAnimation({
    container: document.getElementById('lottie'),
    autoplay: true,
    path: 'images/errors/error_404_data.json',
    renderer: 'svg',
    loop: true
  })
</script>

Such json file can be found on lottiefiles. Just get any animation, download the .json file and store it into the mentioned path (here images/errors/error_404_data.json).

1.5. Getting information’s on the installation

Part of the resolution is also getting information’s about the installation so, we’ll install the decompose package to do this easily.

Install laravel-decompose:

composer require lubusin/laravel-decomposer --dev

Then create a new route in /routes/web.php and add the line in the existing APP_DEBUG conditional statement:

if (env('APP_DEBUG', false)) {
  Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index');
  Route::get('decompose','\Lubusin\Decomposer\Controllers\DecomposerController@index');
}

So, the decompose route is only valid when APP_DEBUG is enabled in the .env file.

Note: if you edit the .env file, you’ll need to stop and start again php artisan serve

laravel-decomposer

1.6. Test

Just by trying an inexisting URL like f.i. http://127.0.0.1:8000/incorrect_route.

Our 404 animation will then be loaded.

Test also http://127.0.0.1:8000/logs and http://127.0.0.1:8000/decompose.

2. PHPUnit testing

https://laravel.com/docs/5.6/http-tests

2.1. Create a new test

Create a test controller:

php artisan make:test TodoControllerTest

This will create the file /tests/Feature/TodoControllerTest.php

2.2. Edit the file

Edit /tests/Feature/TodoControllerTest.php and update the testExample() function to:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class TodoControllerTest extends TestCase
{
  /**
   * A basic test example.
   *
   * @return void
   */
  public function testExample()
  {
    // These routes are publicly available
    // The expected HTTP code is 200 ("Ok")
    $arr = ['todos.index',  'login', 'password.request'];
    foreach ($arr as $name) {
      $url = route($name);
      fwrite(STDERR, print_r('Check 200 for ' . $url . PHP_EOL, true));

      $response = $this->call('GET', $url);
      $response->assertStatus(200);
    }

    fwrite(STDERR, print_r(PHP_EOL, true));

    // These routes are publicly restricted to logged-in users
    // so the expected HTTP code is 302 ("HTTP redirection")
    $arr = ['todos.create', 'logout'];
    foreach ($arr as $name) {
      $url = route($name);
      fwrite(STDERR, print_r('Check 302 for ' . $url . PHP_EOL, true));
      $response = $this->call('GET', $url);
      $response->assertStatus(302);
    }

    fwrite(STDERR, print_r(PHP_EOL, true));

    // If not logged-in, the creation form should redirect (302)
    // to the login screen
    $url = route('todos.create');
    fwrite(STDERR, print_r('Check redirection for ' . $url . PHP_EOL, true));

    $response = $this->call('GET', $url);
    $response->assertStatus(302);
    $response->assertSee('<title>Redirecting to ' . route('login') . '</title>');
  }
}

2.3. Run it

In a DOS prompt session, type:

vendor\bin\phpunit.bat

If everything is correct, we should only have successful assertions.

Successful assertions

3. Final code

Here is the final code of this second lab: todos.zip

3.1. Install a fresh copy

  1. Start a DOS prompt
  2. Make sure Laravel is correctly install: type Laravel -V, if you see the Laravel Installer’s version number (f.i. 2.0.1), it’s fine.
  3. Install a fresh Laravel website: go to your public_html folder (i.e. where you wish create your website, can be c:\development\my_sites too if configured like this on your machine).
  4. At the prompt level, run laravel new a_folder_name (f.i. laravel new app_todos)
  5. Once the installation is done, go in that folder: type cd app_todos (i.e. your folder)
  6. Grab a copy of todos.zip and unzip the file (under DOS "C:\Program Files\7-Zip\7z.exe" x todos.zip -aoa i.e. extract with full path and overwrite existing files)
  7. Retrieve the name of the database to create:
    1. Open with a text editor the file called .env present in the root of app_todos
    2. Look to the DB_DATABASE variable, you’ll find the name of the database for the application (by default, it’ll be todos)
  8. Create a database with that name (todos) in your mySQL
    1. At the prompt level, type mysql -u root -p (where root is the username)
    2. When asking the password, just press enter (there is no password)
    3. In the MySQL prompt, type CREATE DATABASE todos; and press Enter
    4. Type quit for leaving MySQL
  9. Start the migration: php artisan migrate:install
  10. Create tables: php artisan migrate:fresh
  11. Add the authentication layer: php artisan make:auth
  12. Add fake data: php artisan todos:populate
  13. Run composer require "laravelcollective/html"
  14. Install composer require rap2hpoutre/laravel-log-viewer --dev
  15. This done, start artisan by starting php artisan serve on the DOS prompt.
  16. With your browser go to http://127.0.0.1:8000/login and make a login with christophe@todos.com for the email while admin is the password.
  17. Then we can use the application: http://127.0.0.1:8000

3.2. Code source

3.2.1. env

Our environment file.

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:SS+CZVwEkBRyzZQTxpogAroaFSbazMf+DtE9J0vftA8=
APP_DEBUG=true
APP_URL=http://127.0.0.1

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=todos
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

3.2.2. app

3.2.2.1. app/Todo.php

Our model, layer for our todos table.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Todo extends Model
{
    // Name of our table in the database
    protected $table = 'todos';

    // Only if $table->timestamps() was mentioned in the
    // CreateTodosTable class; set to False if not mentioned
    public $timestamps = true;

    // List of columns that we can update
    public $fillable = ['title', 'completed', 'description'];

    /**
     * Extend the model and offer a convenient way to retrieve the
     * user linked to our todo (thanks the user_id foreign key and
     * his link with the users table)
     *
     * @return void
     */
    public function user()
    {
        return $this->belongsTo('App\User', 'user_id', 'id');
    }
}
3.2.2.2. app/Console/Commands/clear.php

Our artisan command for clear tables

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class clear extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'todos:clear';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Clear todos app tables';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        \DB::table('todos')->truncate();

        \DB::table('users')->where('email', 'like', '%@todos.com')->delete();

        $this->info('>> Todos - Clear done <<');
    }
}
3.2.2.3. app/Console/Commands/populate.php

Our artisan command for populating tables

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Faker;

class populate extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'todos:populate';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Add fake data\'s to tables';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // First clear previous content
        $this->call('todos:clear');

        // Ask how many items to create, default 20
        $wNbr = $this->ask('How many todos do you want to create?', 20);

        // Create user Christophe
        \DB::table('users')->insert([[
            'name' => 'Christophe',
            'email' => 'christophe@todos.com',
            'password' => bcrypt('admin')
        ]]);

        // Getting the ID of the user Christophe
        $user_id = \DB::table('users')->where('name', 'Christophe')->take(1)->value('id');

        // Use faker to get french dummy text
        // If needed, just run "composer require fzaninotto/faker" in
        // a DOS prompt
        $faker = Faker\Factory::create('fr_FR');

        // Insert a few items for him
        for ($i = 0; $i < $wNbr; $i++) {
            \DB::table('todos')->insert([
                [
                    'title' => $faker->sentence($nbWords = 6, $variableNbWords = true) .
                        ' (todo #' . ($i + 1) . ')',
                    'description' => $faker->realText($maxNbChars = 1000),
                    'user_id' => $user_id,
                    'completed' => $faker->boolean(),
                    'created_at' => now(),
                    'updated_at' => now()
                ]
            ]);
        }

        $this->info('>> Todos - Populating done <<');
    }
}
3.2.2.4. app/Http/Controllers/TodoController.php

Implements the code to run for each route.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\TodoRequest;
use App\Repositories\TodoRepositoryInterface;
use App\Repositories\TodoRepository;
use Response;

class TodoController extends Controller
{
    protected $todoRepository;
    protected $nbrPerPage = 5;

    public function __construct(TodoRepositoryInterface $todoRepository)
    {
        $this->todoRepository = $todoRepository;

        // Methods in the controller needs to be logged in
        // Except getting the list of todos (method index) and showing
        // one of them (method show).
        // All other methods requires a valid login.
        $this->middleware('auth', ['except' => ['index', 'show']]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // Retrieve all todos
        $datas = $this->todoRepository->getPaginate($this->nbrPerPage);
        $links = $datas->render();

        // call the index.blade.php view and pass the data
        return view('index', compact('datas', 'links'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(TodoRequest $request)
    {
        $todo = $this->todoRepository->store($request->all());

        return redirect()->route('todos.show', ['id' => $todo->id])->withOk('Todo has been successfully created');
    }

    /**
     * Display the specified resource.
     *
     * @param  int                       $id
     * @return \Illuminate\Http\Response
     */
    public function show(int $id)
    {
        $data = $this->todoRepository->getById($id);

        return view('show', compact('data'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int                       $id
     * @param  TodoRepositoryInterface   $todoRepository
     * @return \Illuminate\Http\Response
     */
    public function edit(int $id)
    {
        $data = $this->todoRepository->getById($id);

        return view('edit', compact('data'));
    }

    /**
     * Update the specified resource in storage.
     * This function answer to the PUT method (updating an existing record)
     *
     * @param  TodoRequest               $request
     * @param  int                       $id
     * @return \Illuminate\Http\Response
     */
    public function update(TodoRequest $request, int $id)
    {
        $this->todoRepository->update($id, $request->all());

        // Redirect to the edit form
        return redirect()->route('todos.edit', ['id' => $id])->withOk('Successfully updated');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int                       $id
     * @param  TodoRepositoryInterface   $todoRepository
     * @return \Illuminate\Http\Response
     */
    public function destroy(Request $request, int $id)
    {
        $this->todoRepository->destroy($id);

        if (!$request->ajax()) {
            return redirect()->route('todos.index')->withOk('Successfully removed');
        } else {
            // Return a JSON string that will be used in an Ajax request
            return Response::json([
                'status' => true,
                'message' => 'Successfully deleted'
            ]);
        }
    }
}
3.2.2.5. app/Http/Requests/TodoRequest.php

Define who can use our Todo records and specify which rules should be applied to records.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class TodoRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required|string|max:100',
            'completed' => 'boolean'
        ];
    }
}
3.2.2.6. app/Providers/AppServiceProvider.php

Since we need to bind our interface and our repository.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(
            'App\Repositories\TodoRepositoryInterface',
            'App\Repositories\TodoRepository'
        );
    }
}
3.2.2.7. app/Repositories/TodoRepositoryInterface.php

Defines the functions that are supported by the TodoRepository i.e. the data logic.

<?php

namespace App\Repositories;

use App\Todo;
use Illuminate\Database\Eloquent\Collection;
use App\Http\Requests\TodoRequest;

/**
 * Define the function that should be available through the
 * TodoRepository
 */
interface TodoRepositoryInterface
{
    /**
     * Get a pagination
     *
     * @param  int        $n
     * @return Collection
     */
    public function getPaginate(int $n);

    /**
     * Get the list of records of the table
     *
     * @return Collection
     */
    public function index() : Collection;

    /**
     * Get a specific todo; identified by his ID
     *
     * @param  int  $id
     * @return Todo
     */
    public function getById(int $id) : Todo;

    /**
     * Save the todo
     *
     * @param  array $inputs Submitted datas
     * @return void
     */
    //public function store(TodoRequest $todo) : Todo;
    public function store(array $inputs) : Todo;

    /**
     * Remove the specified todo
     *
     * @param  int  $id
     * @return void
     */
    public function destroy(int $id);

    /**
     * Update the specified todo, update columns
     *
     * @param  int   $id
     * @param  array $inputs Submitted datas
     * @return void
     */
    public function update(int $id, array $inputs) : Todo;
}
3.2.2.8. app/Repositories/TodoRepository.php

Implements functions for our data logic.

<?php

namespace App\Repositories;

use Illuminate\Database\Eloquent\Collection;
use App\Todo;
use Auth;

/**
 * Implements functions for working with the todos table
 */
class TodoRepository implements TodoRepositoryInterface
{
    protected $todo;

    public function __construct(Todo $todo)
    {
        $this->todo = $todo;
    }

    public function getPaginate(int $n)
    {
        return $this->todo
            ->latest('todos.created_at')
            ->paginate($n);
    }

    /**
     * Get the list of records of the table
     *
     * @return Collection
     */
    public function index() : Collection
    {
        return $this->todo->all();
    }

    /**
     * Get a specific todo; identified by his ID
     *
     * @param  int  $id
     * @return Todo
     */
    public function getById(int $id) : Todo
    {
        return $this->todo->where('id', $id)->firstOrFail();
    }

    private function save(Todo $todo, array $inputs) : Todo
    {
        $todo->title = $inputs['title'];
        $todo->description = $inputs['description'];

        $todo->save();

        return $todo;
    }

    /**
     * Save the todo
     *
     * @param  array $inputs List of fields present in the creation form
     * @return Todo
     */
    public function store(array $inputs) : Todo
    {
        $todo = new $this->todo();

        $todo->completed = false;
        $todo->user_id = Auth::user()->id;

        return $this->save($todo, $inputs); // Save the submitted data
    }

    /**
     * Remove the specified todo
     *
     * @param  int  $id
     * @return void
     */
    public function destroy(int $id)
    {
        $this->todo->destroy($id);
    }

    /**
     * Update the specified todo, update columns
     *
     * @param  int   $id
     * @param  array $inputs Submitted datas
     * @return void
     */
    public function update(int $id, array $inputs) : Todo
    {
        return $this->save($this->getById($id), $inputs);
    }
}

3.2.3. database

3.2.3.1. database/migrations/create_todos_table.php

Define the structure of the todos table.

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTodosTable extends Migration
{
    /**
     * The migration is running
     * Define a foreign key between user_id and the users table
     *
     * @return void
     */
    public function up()
    {
        Schema::create('todos', function (Blueprint $table) {
            // Our primary key
            $table->increments('id');

            // Allow Eloquent to add two fields and managed them:
            // created_at and updated_at
            $table->timestamps();

            $table->string('title', 100);
            $table->boolean('completed')->default(0);
            $table->text('description', 1000)->nullable();

            // The author of the record
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('todos');
    }
}

3.2.4. public

3.2.4.1. public/images/errors/error_404_data.json

The JSON file that will be used by the 404 error page (Lottie)

{"v":"5.1.1","fr":30,"ip":0,"op":360,"w":1020,"h":737,"nm":"robo internet lost","ddd":0,"assets":[],"fonts":{"list":[{"fName":"Roboto-Regular","fFamily":"Roboto","fStyle":"Regular","ascent":75}]},"layers":[{"ddd":0,"ind":1,"ty":5,"nm":"We couldn?t connect","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,635.2,0],"ix":2},"a":{"a":0,"k":[161.279,-13.324,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":36,"f":"Roboto-Regular","t":"We couldn?t connect","j":0,"tr":0,"lh":43.2,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":211,"op":360,"st":389,"bm":0},{"ddd":0,"ind":2,"ty":5,"nm":"We?re Sorry                          ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,605.2,0],"ix":2},"a":{"a":0,"k":[90.158,-9.659,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":36,"f":"Roboto-Regular","t":"We?re Sorry                          ","j":0,"tr":0,"lh":43.2,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":211,"op":360,"st":389,"bm":0},{"ddd":0,"ind":3,"ty":5,"nm":"Searching Network....","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,605.248,0],"ix":2},"a":{"a":0,"k":[169.576,-9.756,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":36,"f":"Roboto-Regular","t":"Searching Network....","j":0,"tr":0,"lh":43.2,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":210,"st":-1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"red cross/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.262,117.5,0],"ix":2},"a":{"a":0,"k":[21.5,21.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.507,20.674],[0,5.169],[-15.506,20.674],[-20.674,15.507],[-5.169,0.001],[-20.674,-15.505],[-15.506,-20.674],[0,-5.168],[15.507,-20.674],[20.674,-15.505],[5.168,0.001],[20.674,15.507]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.25,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.957000014361,0.289999988032,0.238999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[21.299,21.299],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":210,"op":360,"st":210,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"w3/robot 2.1 Outlines 2","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.348,98.5,0],"ix":2},"a":{"a":0,"k":[51.5,19.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.233,1.558],[25.475,-32.165],[-1.558,-1.233],[-1.234,1.558],[-22.586,-28.517],[-1.062,0],[-0.661,0.524]],"o":[[-25.431,-32.109],[-1.234,1.558],[1.558,1.234],[22.555,-28.478],[0.711,0.897],[0.782,0],[1.558,-1.234]],"v":[[49.731,12.938],[-49.73,12.938],[-49.144,17.992],[-44.09,17.405],[44.09,17.405],[46.914,18.77],[49.145,17.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.214,19.477],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":190,"op":360,"st":190,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"w2/robot 2.1 Outlines 2","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.308,116.5,0],"ix":2},"a":{"a":0,"k":[35,14.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[17.048,-21.514],[-1.557,-1.234],[-0.782,0],[-0.71,0.896],[-14.166,-17.877],[-1.558,1.234],[1.234,1.557]],"o":[[-1.234,1.557],[0.661,0.524],[1.061,0],[14.14,-17.844],[1.233,1.557],[1.556,-1.234],[-17.021,-21.479]],"v":[[-33.27,7.613],[-32.685,12.667],[-30.453,13.445],[-27.631,12.082],[27.631,12.082],[32.685,12.667],[33.27,7.613]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.754,14.151],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":180,"op":360,"st":180,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"w1/robot 2.1 Outlines 2","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.261,133.5,0],"ix":2},"a":{"a":0,"k":[18.5,9,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.6,-10.865],[-1.558,-1.234],[-1.233,1.558],[-5.717,-7.222],[-1.558,1.233],[1.232,1.558]],"o":[[-1.233,1.558],[1.558,1.233],[5.707,-7.21],[1.234,1.558],[1.558,-1.234],[-8.586,-10.848]],"v":[[-16.818,2.289],[-16.23,7.343],[-11.176,6.754],[11.176,6.754],[16.23,7.343],[16.819,2.289]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.301,8.826],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":170,"op":360,"st":170,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"w3/robot 2.1 Outlines 3","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.348,98.5,0],"ix":2},"a":{"a":0,"k":[51.5,19.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.233,1.558],[25.475,-32.165],[-1.558,-1.233],[-1.234,1.558],[-22.586,-28.517],[-1.062,0],[-0.661,0.524]],"o":[[-25.431,-32.109],[-1.234,1.558],[1.558,1.234],[22.555,-28.478],[0.711,0.897],[0.782,0],[1.558,-1.234]],"v":[[49.731,12.938],[-49.73,12.938],[-49.144,17.992],[-44.09,17.405],[44.09,17.405],[46.914,18.77],[49.145,17.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.214,19.477],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":155,"op":165,"st":155,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"w2/robot 2.1 Outlines 3","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.308,116.5,0],"ix":2},"a":{"a":0,"k":[35,14.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[17.048,-21.514],[-1.557,-1.234],[-0.782,0],[-0.71,0.896],[-14.166,-17.877],[-1.558,1.234],[1.234,1.557]],"o":[[-1.234,1.557],[0.661,0.524],[1.061,0],[14.14,-17.844],[1.233,1.557],[1.556,-1.234],[-17.021,-21.479]],"v":[[-33.27,7.613],[-32.685,12.667],[-30.453,13.445],[-27.631,12.082],[27.631,12.082],[32.685,12.667],[33.27,7.613]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.754,14.151],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":145,"op":165,"st":145,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"w1/robot 2.1 Outlines 3","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.261,133.5,0],"ix":2},"a":{"a":0,"k":[18.5,9,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.6,-10.865],[-1.558,-1.234],[-1.233,1.558],[-5.717,-7.222],[-1.558,1.233],[1.232,1.558]],"o":[[-1.233,1.558],[1.558,1.233],[5.707,-7.21],[1.234,1.558],[1.558,-1.234],[-8.586,-10.848]],"v":[[-16.818,2.289],[-16.23,7.343],[-11.176,6.754],[11.176,6.754],[16.23,7.343],[16.819,2.289]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.301,8.826],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":135,"op":165,"st":135,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"w3/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.348,98.5,0],"ix":2},"a":{"a":0,"k":[51.5,19.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.233,1.558],[25.475,-32.165],[-1.558,-1.233],[-1.234,1.558],[-22.586,-28.517],[-1.062,0],[-0.661,0.524]],"o":[[-25.431,-32.109],[-1.234,1.558],[1.558,1.234],[22.555,-28.478],[0.711,0.897],[0.782,0],[1.558,-1.234]],"v":[[49.731,12.938],[-49.73,12.938],[-49.144,17.992],[-44.09,17.405],[44.09,17.405],[46.914,18.77],[49.145,17.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.214,19.477],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":120,"op":130,"st":120,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"w2/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.308,116.5,0],"ix":2},"a":{"a":0,"k":[35,14.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[17.048,-21.514],[-1.557,-1.234],[-0.782,0],[-0.71,0.896],[-14.166,-17.877],[-1.558,1.234],[1.234,1.557]],"o":[[-1.234,1.557],[0.661,0.524],[1.061,0],[14.14,-17.844],[1.233,1.557],[1.556,-1.234],[-17.021,-21.479]],"v":[[-33.27,7.613],[-32.685,12.667],[-30.453,13.445],[-27.631,12.082],[27.631,12.082],[32.685,12.667],[33.27,7.613]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.754,14.151],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":110,"op":130,"st":110,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"w1/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.261,133.5,0],"ix":2},"a":{"a":0,"k":[18.5,9,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.6,-10.865],[-1.558,-1.234],[-1.233,1.558],[-5.717,-7.222],[-1.558,1.233],[1.232,1.558]],"o":[[-1.233,1.558],[1.558,1.233],[5.707,-7.21],[1.234,1.558],[1.558,-1.234],[-8.586,-10.848]],"v":[[-16.818,2.289],[-16.23,7.343],[-11.176,6.754],[11.176,6.754],[16.23,7.343],[16.819,2.289]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.301,8.826],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":100,"op":130,"st":100,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"white box/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.312,650.5,0],"ix":2},"a":{"a":0,"k":[175.5,126,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[96.65,0],[0,11.556],[0,0],[0,0],[0,0]],"o":[[-96.65,0],[0,0],[0,0],[0,0],[0,11.556]],"v":[[0,-104.616],[-175,-125.538],[-175,125.538],[175,125.538],[175,-125.538]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[175.25,125.789],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Layer 81/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":80,"s":[0],"e":[120]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":90,"s":[120],"e":[120]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":210,"s":[120],"e":[0]},{"t":220}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[510.087,672.5,0],"e":[510.545,232.5,0],"to":[0.07620303332806,-73.3333358764648,0],"ti":[-0.07620303332806,60,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[510.545,232.5,0],"e":[510.545,312.5,0],"to":[0.07620303332806,-60,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":40,"s":[510.545,312.5,0],"e":[510.545,232.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50,"s":[510.545,232.5,0],"e":[510.545,312.5,0],"to":[0,0,0],"ti":[0,-8.33333301544189,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":60,"s":[510.545,312.5,0],"e":[510.545,282.5,0],"to":[0,8.33333301544189,0],"ti":[0,5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":70,"s":[510.545,282.5,0],"e":[510.545,282.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":241,"s":[510.545,282.5,0],"e":[510.545,312.5,0],"to":[0,5,0],"ti":[0,-5,0]},{"t":251}],"ix":2},"a":{"a":0,"k":[28.5,29,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.28,0],[0,-5.295],[5.28,0],[0,5.296]],"o":[[5.28,0],[0,5.296],[-5.28,0],[0,-5.295]],"v":[[0,-9.589],[9.56,0],[0,9.589],[-9.56,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980000035903,0.995999983245,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[20.543,34.04],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-10.157,0],[0,-10.187],[10.157,0],[0,10.188]],"o":[[10.157,0],[0,10.188],[-10.157,0],[0,-10.187]],"v":[[-0.001,-18.447],[18.392,-0.001],[-0.001,18.447],[-18.392,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.187999994615,0.187999994615,0.187999994615,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.203,28.56],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[15.569,0],[0,-15.617],[-15.569,0],[0,15.615]],"o":[[-15.569,0],[0,15.615],[15.569,0],[0,-15.617]],"v":[[0,-28.31],[-28.225,0.001],[0,28.31],[28.225,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.349000010771,0.349000010771,0.349000010771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.474,28.56],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"eye/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[510.387,672.5,0],"e":[510.845,232.5,0],"to":[0.07620303332806,-73.3333358764648,0],"ti":[-0.07620303332806,60,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[510.845,232.5,0],"e":[510.845,312.5,0],"to":[0.07620303332806,-60,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":40,"s":[510.845,312.5,0],"e":[510.845,232.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50,"s":[510.845,232.5,0],"e":[510.845,312.5,0],"to":[0,0,0],"ti":[0,-13.3333330154419,0]},{"t":60}],"ix":2},"a":{"a":0,"k":[72,72,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[31.958,0],[0,32.054],[-31.957,0],[0,-32.054]],"o":[[-31.957,0],[0,-32.054],[31.958,0],[0,32.054]],"v":[[0,58.171],[-57.997,0],[0,-58.171],[57.997,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980000035903,0.995999983245,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[71.674,71.848],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,30.866],[-30.318,1.918],[1.183,0],[0,-32.054],[-31.957,0],[-1.183,0]],"o":[[0,-30.866],[-1.183,-0.091],[-31.957,0],[0,32.054],[1.183,0],[-30.318,-1.917]],"v":[[-23.535,0],[30.82,-58.08],[27.178,-58.171],[-30.82,0],[27.178,58.171],[30.82,58.079]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917999985639,0.917999985639,0.917999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.497,71.849],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Robot/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[510.384,692.5,0],"e":[510.732,252.5,0],"to":[0.05790242180228,-73.3333358764648,0],"ti":[-0.05790242180228,60,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[510.732,252.5,0],"e":[510.732,332.5,0],"to":[0.05790242180228,-60,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":40,"s":[510.732,332.5,0],"e":[510.732,252.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50,"s":[510.732,252.5,0],"e":[510.732,332.5,0],"to":[0,0,0],"ti":[0,-13.3333330154419,0]},{"t":60}],"ix":2},"a":{"a":0,"k":[164,179,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.464,0],[0,-11.499],[11.465,0],[0,11.499]],"o":[[11.465,0],[0,11.499],[-11.464,0],[0,-11.499]],"v":[[0,-20.822],[20.758,-0.001],[0,20.822],[-20.758,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,314.728],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,8.219],[-6.92,3.379],[3.278,0],[0,-11.506],[-11.472,0],[-2.731,1.37]],"o":[[0,-8.219],[-2.731,-1.369],[-11.472,0],[0,11.507],[3.278,0],[-6.92,-3.379]],"v":[[3.277,0],[14.931,-18.721],[5.826,-20.821],[-14.932,0],[5.826,20.821],[14.931,18.721]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.6,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[157.35,314.728],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.464,0],[0,-11.499],[11.465,0],[0,11.499]],"o":[[11.465,0],[0,11.499],[-11.464,0],[0,-11.499]],"v":[[0,-20.822],[20.758,-0.001],[0,20.822],[-20.758,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.54900004069,0.788000009574,0.023999999551,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,314.728],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[20.758,-13.904],[-20.759,-13.904],[-118.088,-13.904],[-118.088,13.905],[-20.759,13.905],[20.758,13.905],[118.088,13.905],[118.088,-13.904]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4.159,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,300.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[98.534,248.384],[227.795,248.384]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4.78,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[163.743,21.548],[163.743,2.736]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[65.19,0],[0,-65.385],[0,0],[-6.555,0],[0,0],[0,6.575],[0,0]],"o":[[-65.189,0],[0,0],[0,6.575],[0,0],[6.556,0],[0,0],[0,-65.386]],"v":[[-0.001,-142.505],[-118.088,-24.063],[-118.088,130.542],[-106.162,142.505],[106.16,142.505],[118.088,130.542],[118.088,-24.154]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.178,201.672],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[97.128,258.068],[97.128,238.068]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[227.795,258.068],[227.795,238.068]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.575],[0,0],[-61.002,4.657],[3.096,0],[0,-65.386],[0,0],[-6.555,0],[0,0]],"o":[[0,0],[0,-62.281],[-3.005,-0.274],[-65.189,0],[0,0],[0,6.575],[0,0],[-6.555,0.091]],"v":[[-45.387,130.588],[-45.387,-24.108],[63.596,-142.186],[54.49,-142.55],[-63.596,-24.108],[-63.596,130.497],[-51.67,142.46],[-33.461,142.46]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.686,201.626],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[65.19,0],[0,-65.385],[0,0],[-6.555,0],[0,0],[0,6.575],[0,0]],"o":[[-65.189,0],[0,0],[0,6.575],[0,0],[6.556,0],[0,0],[0,-65.386]],"v":[[-0.001,-142.505],[-118.088,-24.063],[-118.088,130.542],[-106.162,142.505],[106.16,142.505],[118.088,130.542],[118.088,-24.154]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[163.178,201.672],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.109,0],[0,-10.319],[0,0],[-1.183,0],[0,0],[0,1.097],[0,0]],"o":[[-12.109,0],[0,0],[0,1.005],[0,0],[1.184,0],[0,0],[0,-10.319]],"v":[[0,-22.419],[-21.852,-3.79],[-21.852,20.501],[-19.666,22.419],[19.667,22.419],[21.852,20.501],[21.852,-3.79]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,44.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.005],[0,0],[-10.288,1.461],[1.275,0],[0,-10.319],[0,0],[-1.183,0],[0,0]],"o":[[0,0],[0,-9.223],[-1.183,-0.183],[-12.109,0],[0,0],[0,1.005],[0,0],[-1.184,-0.091]],"v":[[-5.462,20.501],[-5.462,-3.79],[12.746,-22.145],[9.104,-22.419],[-12.747,-3.79],[-12.747,20.501],[-10.562,22.419],[-3.277,22.419]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.072,44.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.109,0],[0,-10.319],[0,0],[-1.183,0],[0,0],[0,1.097],[0,0]],"o":[[-12.109,0],[0,0],[0,1.005],[0,0],[1.184,0],[0,0],[0,-10.319]],"v":[[0,-22.419],[-21.852,-3.79],[-21.852,20.501],[-19.666,22.419],[19.667,22.419],[21.852,20.501],[21.852,-3.79]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,44.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.994,12.191],[-25.994,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.994,-12.191],[25.994,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[39.671,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.993,12.191],[-25.993,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.993,-12.191],[25.993,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[287.684,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.505,-30.455],[3.505,-30.455],[3.505,30.456],[-3.505,30.456]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[287.502,229.068],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.506,-30.455],[3.506,-30.455],[3.506,30.456],[-3.506,30.456]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.943,229.068],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.994,12.191],[-25.994,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.994,-12.191],[25.994,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[39.671,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.993,12.191],[-25.993,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.993,-12.191],[25.993,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[287.684,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"ix":20,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"black hole/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.312,526.5,0],"ix":2},"a":{"a":0,"k":[175.5,21.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-11.542],[96.649,0],[0,11.542],[-96.65,0]],"o":[[0,11.542],[-96.65,0],[0,-11.542],[96.649,0]],"v":[[175,0.001],[0,20.898],[-175,0.001],[0,-20.898]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.588000009574,0.588000009574,0.588000009574,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[175.25,21.147],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"S","size":36,"style":"Regular","w":59.33,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.441,-1.904],[0,-3.483],[2.637,-2.018],[4.948,0],[3.174,2.49],[0,4.297],[0,0],[-2.295,-3.255],[-4.232,-1.871],[-4.883,0],[-4.492,3.467],[0,5.762],[1.611,2.67],[3.336,2.002],[5.908,1.663],[2.457,2.006],[0,2.903],[-2.588,2.039],[-4.623,0],[-2.734,-2.466],[0,-4.312],[0,0],[2.1,3.32],[3.825,1.888],[4.883,0],[4.475,-3.662],[0,-5.598],[-3.662,-3.369],[-8.041,-2.311]],"o":[[2.441,1.904],[0,3.484],[-2.637,2.019],[-5.306,0],[-3.174,-2.49],[0,0],[0,4.134],[2.295,3.255],[4.231,1.871],[7.52,0],[4.492,-3.467],[0,-3.613],[-1.611,-2.669],[-3.337,-2.002],[-5.908,-1.663],[-2.458,-2.005],[0,-3.619],[2.588,-2.039],[4.98,0],[2.734,2.467],[0,0],[0,-3.938],[-2.1,-3.32],[-3.825,-1.888],[-7.162,0],[-4.476,3.662],[0,4.948],[3.662,3.369],[6.413,1.855]],"v":[[42.48,-26.05],[46.143,-17.969],[42.188,-9.717],[30.811,-6.689],[18.091,-10.425],[13.33,-20.605],[3.906,-20.605],[7.349,-9.521],[17.139,-1.831],[30.811,0.977],[48.828,-4.224],[55.566,-18.066],[53.149,-27.49],[45.728,-34.497],[31.86,-39.995],[19.312,-45.498],[15.625,-52.86],[19.507,-61.346],[30.322,-64.404],[41.895,-60.705],[45.996,-50.537],[55.42,-50.537],[52.271,-61.426],[43.384,-69.238],[30.322,-72.07],[12.866,-66.577],[6.152,-52.686],[11.646,-40.21],[29.199,-31.689]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"S","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"e","size":36,"style":"Regular","w":52.98,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.427,6.804],[0,0],[2.213,-1.302],[3.19,0],[2.913,3.207],[0.13,5.209],[0,0],[0,0],[3.809,4.525],[6.868,0],[3.596,-2.327],[2.002,-4.118],[0,-5.241],[0,0],[-4.492,-4.704],[-7.162,0]],"o":[[0,0],[-1.66,2.148],[-2.214,1.302],[-4.492,0],[-2.914,-3.206],[0,0],[0,0],[0,-8.43],[-3.809,-4.524],[-4.199,0],[-3.597,2.328],[-2.002,4.118],[0,0],[0,7.878],[4.492,4.704],[8.854,0]],"v":[[48.682,-9.229],[43.164,-13.525],[37.354,-8.35],[29.248,-6.396],[18.14,-11.206],[13.574,-23.828],[49.365,-23.828],[49.365,-27.588],[43.652,-47.021],[27.637,-53.809],[15.942,-50.317],[7.544,-40.649],[4.541,-26.611],[4.541,-24.951],[11.279,-6.079],[28.76,0.977]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.214,-2.522],[-0.261,-4.59],[0,0],[0,0],[-2.474,2.654],[-3.646,0]],"o":[[2.213,2.523],[0,0],[0,0],[0.586,-4.785],[2.473,-2.653],[3.776,0]],"v":[[36.621,-42.603],[40.332,-31.934],[40.332,-31.25],[13.867,-31.25],[18.457,-42.407],[27.637,-46.387]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"e","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"a","size":36,"style":"Regular","w":54.39,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,4.851],[0,0],[3.45,3.044],[6.087,0],[3.206,-1.432],[1.871,-2.457],[0,-2.637],[0,0],[-2.181,1.628],[-3.223,0],[-1.888,-1.871],[0,-3.157],[0,0],[0,0],[4.182,-3.043],[0,-5.501],[-3.337,-2.946],[-5.209,0],[-4.199,4.362],[-0.521,-1.041]],"o":[[0,0],[-1.237,-2.864],[0,0],[-0.13,-5.338],[-3.451,-3.043],[-3.841,0],[-3.207,1.433],[-1.872,2.458],[0,0],[0,-2.311],[2.18,-1.627],[3.678,0],[1.888,1.872],[0,0],[0,0],[-7.585,0],[-4.183,3.044],[0,4.525],[3.336,2.946],[5.827,0],[0.325,2.67],[0,0]],"v":[[48.926,0],[48.926,-0.781],[47.07,-12.354],[47.07,-36.67],[41.699,-49.243],[27.393,-53.809],[16.821,-51.66],[9.204,-45.825],[6.396,-38.184],[15.479,-38.184],[18.75,-44.092],[26.855,-46.533],[35.205,-43.726],[38.037,-36.182],[38.037,-32.031],[29.248,-32.031],[11.597,-27.466],[5.322,-14.648],[10.327,-3.442],[23.145,0.977],[38.184,-5.566],[39.453,0]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.888,1.595],[0,2.832],[-11.068,0],[0,0],[0,0],[2.539,-1.465],[2.832,0]],"o":[[-1.888,-1.595],[0,-6.477],[0,0],[0,0],[-1.14,2.344],[-2.539,1.465],[-2.962,0]],"v":[[17.188,-9.277],[14.355,-15.918],[30.957,-25.635],[38.037,-25.635],[38.037,-14.795],[32.52,-9.082],[24.463,-6.885]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"a","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"r","size":36,"style":"Regular","w":33.84,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.758,0],[2.962,-4.72],[0,0],[0,0],[0,0],[0,0],[0,0],[-5.925,0],[-1.367,-0.227]],"o":[[-0.912,-0.455],[-5.437,0],[0,0],[0,0],[0,0],[0,0],[0,0],[2.116,-5.045],[1.595,0],[0,0]],"v":[[32.373,-53.125],[28.369,-53.809],[15.771,-46.729],[15.625,-52.832],[6.836,-52.832],[6.836,0],[15.869,0],[15.869,-37.5],[27.93,-45.068],[32.373,-44.727]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"r","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"c","size":36,"style":"Regular","w":52.34,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.506,3.288],[0,6.087],[0,0],[-2.523,3.304],[-4.59,0],[-2.328,-2.197],[-0.261,-3.418],[0,0],[3.922,3.548],[5.924,0],[3.532,-2.213],[1.888,-4.004],[0,-5.143],[0,0],[-4.248,-4.801],[-7.195,0],[-3.207,1.627],[-1.921,2.734],[-0.163,3.027],[0,0],[2.409,-1.953],[3.223,0]],"o":[[-2.507,-3.288],[0,0],[0,-6.25],[2.522,-3.304],[3.418,0],[2.327,2.197],[0,0],[-0.261,-5.664],[-3.923,-3.548],[-4.818,0],[-3.532,2.214],[-1.888,4.004],[0,0],[0,8.334],[4.248,4.802],[3.58,0],[3.206,-1.627],[1.92,-2.734],[0,0],[-0.261,2.93],[-2.409,1.953],[-4.655,0]],"v":[[17.285,-11.328],[13.525,-25.391],[13.525,-27.1],[17.31,-41.431],[27.979,-46.387],[36.597,-43.091],[40.479,-34.668],[49.023,-34.668],[42.749,-48.486],[27.979,-53.809],[15.454,-50.488],[7.324,-41.162],[4.492,-27.441],[4.492,-25.928],[10.864,-6.226],[28.027,0.977],[38.208,-1.465],[45.898,-8.008],[49.023,-16.65],[40.479,-16.65],[36.475,-9.326],[28.027,-6.396]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"c","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"h","size":36,"style":"Regular","w":55.08,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-2.214,1.563],[-2.93,0],[-1.709,-1.823],[-0.033,-3.809],[0,0],[0,0],[0,0],[11.165,0],[4.004,-4.915]],"o":[[0,0],[0,0],[0,0],[0,0],[1.237,-2.539],[2.213,-1.563],[3.613,0],[1.709,1.823],[0,0],[0,0],[0,0],[-0.098,-12.598],[-6.413,0],[0,0]],"v":[[15.869,-75],[6.836,-75],[6.836,0],[15.869,0],[15.869,-37.646],[21.045,-43.799],[28.76,-46.143],[36.743,-43.408],[39.355,-34.961],[39.355,0],[48.389,0],[48.389,-34.912],[31.494,-53.809],[15.869,-46.436]],"c":true},"ix":2},"nm":"h","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"h","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"i","size":36,"style":"Regular","w":24.27,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[16.65,-52.832],[7.617,-52.832],[7.617,0],[16.65,0]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.896,-0.977],[-1.758,0],[-0.912,0.977],[0,1.465],[0.911,1.009],[1.758,0],[0.895,-1.009],[0,-1.465]],"o":[[0.895,0.977],[1.758,0],[0.911,-0.977],[0,-1.465],[-0.912,-1.009],[-1.758,0],[-0.896,1.009],[0,1.465]],"v":[[8.228,-63.184],[12.207,-61.719],[16.211,-63.184],[17.578,-66.846],[16.211,-70.557],[12.207,-72.07],[8.228,-70.557],[6.885,-66.846]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"i","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"n","size":36,"style":"Regular","w":55.18,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-2.214,1.563],[-2.93,0],[-1.709,-1.823],[-0.033,-3.809],[0,0],[0,0],[0,0],[11.165,0],[4.036,-5.078],[0,0]],"o":[[0,0],[0,0],[0,0],[1.237,-2.539],[2.213,-1.563],[3.613,0],[1.709,1.823],[0,0],[0,0],[0,0],[-0.098,-12.598],[-6.511,0],[0,0],[0,0]],"v":[[6.836,-52.832],[6.836,0],[15.869,0],[15.869,-37.646],[21.045,-43.799],[28.76,-46.143],[36.743,-43.408],[39.355,-34.961],[39.355,0],[48.389,0],[48.389,-34.912],[31.494,-53.809],[15.674,-46.191],[15.381,-52.832]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"n","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"g","size":36,"style":"Regular","w":56.1,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.825,-4.98],[-6.185,0],[-3.613,4.167],[0,0],[2.457,-2.474],[4.395,0],[3.873,4.785],[0,0],[-3.646,-1.628],[-3.809,0],[-4.053,3.938],[0,6.836],[0,0],[0,0],[0,0],[6.445,0],[3.809,-4.866],[0,-8.235]],"o":[[3.825,4.98],[6.25,0],[0,0],[0,4.492],[-2.458,2.473],[-5.599,0],[0,0],[1.92,2.832],[3.645,1.627],[6.836,0],[4.053,-3.939],[0,0],[0,0],[0,0],[-3.613,-4.557],[-6.283,0],[-3.809,4.867],[0,8.594]],"v":[[10.425,-6.494],[25.439,0.977],[40.234,-5.273],[40.234,-0.732],[36.548,9.717],[26.27,13.428],[12.061,6.25],[7.373,11.67],[15.723,18.359],[26.904,20.801],[43.237,14.893],[49.316,-1.27],[49.316,-52.832],[41.064,-52.832],[40.625,-46.973],[25.537,-53.809],[10.4,-46.509],[4.688,-26.855]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.474,3.418],[-4.395,0],[-2.767,-5.045],[0,0],[5.696,0],[2.441,3.402],[0,5.957]],"o":[[2.473,-3.418],[5.534,0],[0,0],[-2.67,5.176],[-4.395,0],[-2.441,-3.401],[0,-6.705]],"v":[[17.48,-41.016],[27.783,-46.143],[40.234,-38.574],[40.234,-14.453],[27.686,-6.689],[17.432,-11.792],[13.77,-25.83]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"g","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":" ","size":36,"style":"Regular","w":24.76,"data":{},"fFamily":"Roboto"},{"ch":"N","size":36,"style":"Regular","w":71.29,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[62.891,-71.094],[53.564,-71.094],[53.564,-16.064],[17.676,-71.094],[8.252,-71.094],[8.252,0],[17.676,0],[17.676,-54.785],[53.467,0],[62.891,0]],"c":true},"ix":2},"nm":"N","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"N","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"t","size":36,"style":"Regular","w":32.67,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.051,-2.441],[-4.037,0],[-2.377,0.647],[0,0],[1.041,0],[0.879,1.059],[0,2.119],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,4.492],[2.051,2.441],[2.246,0],[0,0],[-1.823,0.391],[-2.116,0],[-0.879,-1.059],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.059,-65.625],[10.059,-52.832],[0.439,-52.832],[0.439,-45.85],[10.059,-45.85],[10.059,-13.086],[13.135,-2.686],[22.266,0.977],[29.199,0.006],[29.199,-7.275],[24.902,-6.689],[20.41,-8.278],[19.092,-13.045],[19.092,-45.85],[28.955,-45.85],[28.955,-52.832],[19.092,-52.832],[19.092,-65.625]],"c":true},"ix":2},"nm":"t","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"t","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"w","size":36,"style":"Regular","w":75.15,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[41.064,-52.832],[33.789,-52.832],[21.484,-13.281],[11.084,-52.832],[2.1,-52.832],[17.432,0],[24.756,0],[37.256,-40.039],[50.098,0],[57.422,0],[72.803,-52.832],[63.77,-52.832],[53.613,-12.451]],"c":true},"ix":2},"nm":"w","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"w","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"o","size":36,"style":"Regular","w":57.03,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.443,-4.98],[-7.162,0],[-3.662,2.279],[-1.97,4.086],[0,5.144],[0,0],[4.443,4.98],[7.194,0],[3.629,-2.246],[2.034,-4.134],[0,-5.176]],"o":[[0,8.203],[4.443,4.98],[4.752,0],[3.662,-2.278],[1.969,-4.085],[0,0],[0,-8.268],[-4.443,-4.98],[-4.655,0],[-3.63,2.246],[-2.035,4.134],[0,0]],"v":[[4.443,-26.27],[11.108,-6.494],[28.516,0.977],[41.138,-2.441],[49.585,-11.987],[52.539,-25.83],[52.539,-26.465],[45.874,-46.338],[28.418,-53.809],[15.991,-50.439],[7.495,-40.869],[4.443,-26.904]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.734,3.548],[-4.46,0],[-2.751,-3.596],[0,-5.794],[2.702,-3.596],[4.59,0],[2.718,3.548],[0,5.859]],"o":[[2.734,-3.548],[4.557,0],[2.75,3.597],[0,6.478],[-2.702,3.597],[-4.558,0],[-2.718,-3.548],[0,-6.608]],"v":[[17.627,-41.064],[28.418,-46.387],[39.38,-40.991],[43.506,-26.904],[39.453,-11.792],[28.516,-6.396],[17.603,-11.719],[13.525,-25.83]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"o","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"k","size":36,"style":"Regular","w":50.68,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[39.99,0],[50.586,0],[27.637,-30.762],[48.193,-52.832],[37.207,-52.832],[20.752,-35.449],[15.918,-29.639],[15.918,-75],[6.885,-75],[6.885,0],[15.918,0],[15.918,-18.555],[21.582,-24.463]],"c":true},"ix":2},"nm":"k","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"k","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":".","size":36,"style":"Regular","w":26.32,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.928,-1.009],[-1.855,0],[-0.961,1.009],[0,1.498],[0.96,1.042],[1.855,0],[0.928,-1.041],[0,-1.563]],"o":[[0.928,1.009],[1.855,0],[0.96,-1.009],[0,-1.563],[-0.961,-1.041],[-1.855,0],[-0.928,1.042],[0,1.498]],"v":[[8.423,-0.977],[12.598,0.537],[16.821,-0.977],[18.262,-4.736],[16.821,-8.643],[12.598,-10.205],[8.423,-8.643],[7.031,-4.736]],"c":true},"ix":2},"nm":".","mn":"ADBE Vector Shape - Group","hd":false}],"nm":".","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"W","size":36,"style":"Regular","w":88.72,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.354,-71.094],[2.979,-71.094],[20.166,0],[28.711,0],[43.896,-51.807],[45.02,-57.227],[46.143,-51.807],[60.791,0],[69.336,0],[86.572,-71.094],[77.148,-71.094],[66.113,-22.461],[64.6,-12.891],[62.646,-21.484],[48.926,-71.094],[41.016,-71.094],[26.953,-21.484],[24.951,-13.037],[23.584,-22.412]],"c":true},"ix":2},"nm":"W","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"W","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"?","size":36,"style":"Regular","w":14.75,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.579,3.239],[-0.033,3.255],[0,0],[0,0],[0,0],[3.027,-4.231],[0,0]],"o":[[1.579,-3.239],[0,0],[0,0],[0,0],[-0.098,4.688],[0,0],[2.473,-1.985]],"v":[[13.55,-58.911],[15.967,-68.652],[15.967,-75],[7.031,-75],[7.031,-67.969],[2.344,-54.59],[7.471,-51.074]],"c":true},"ix":2},"nm":"?","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"?","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"y","size":36,"style":"Regular","w":47.31,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[1.709,-1.237],[3.059,0],[0,0],[0,0],[0,0],[0,0],[-3.288,8.789],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-1.107,3.288],[-1.709,1.237],[0,0],[0,0],[0,0],[0,0],[7.161,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.938,-52.832],[1.074,-52.832],[19.922,-0.586],[17.92,4.785],[13.696,11.572],[6.543,13.428],[4.102,13.232],[4.102,20.557],[7.471,21.191],[9.18,21.338],[24.854,8.154],[46.094,-52.832],[36.426,-52.832],[24.121,-13.232]],"c":true},"ix":2},"nm":"y","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"y","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"u","size":36,"style":"Regular","w":55.13,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[6.901,0],[0,8.008],[0,0],[0,0],[0,0],[-2.946,-3.271],[-5.632,0],[-3.516,4.134]],"o":[[0,0],[0,0],[0,0],[0,0],[-2.279,5.144],[-6.511,0],[0,0],[0,0],[0,0],[0.032,6.413],[2.946,3.271],[6.803,0],[0,0]],"v":[[39.648,0],[48.242,0],[48.242,-52.832],[39.209,-52.832],[39.209,-14.404],[25.439,-6.689],[15.674,-18.701],[15.674,-52.832],[6.641,-52.832],[6.641,-18.457],[11.108,-3.931],[23.975,0.977],[39.453,-5.225]],"c":true},"ix":2},"nm":"u","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"u","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"l","size":36,"style":"Regular","w":24.27,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[16.65,-75],[7.617,-75],[7.617,0],[16.65,0]],"c":true},"ix":2},"nm":"l","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"l","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"d","size":36,"style":"Regular","w":56.4,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.857,-5.013],[-6.12,0],[-3.613,4.427],[0,0],[0,0],[0,0],[0,0],[0,0],[6.184,0],[3.841,-4.932],[0,-8.105]],"o":[[0,8.073],[3.857,5.013],[6.445,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.613,-4.231],[-6.218,0],[-3.841,4.932],[0,0]],"v":[[4.639,-26.172],[10.425,-6.543],[25.391,0.977],[40.479,-5.664],[40.918,0],[49.219,0],[49.219,-75],[40.186,-75],[40.186,-47.461],[25.488,-53.809],[10.4,-46.411],[4.639,-26.855]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.474,3.418],[-4.427,0],[-2.702,-4.98],[0,0],[5.729,0],[2.473,3.386],[0,5.99]],"o":[[2.473,-3.418],[5.598,0],[0,0],[-2.637,5.144],[-4.362,0],[-2.474,-3.385],[0,-6.705]],"v":[[17.383,-41.016],[27.734,-46.143],[40.186,-38.672],[40.186,-14.404],[27.637,-6.689],[17.383,-11.768],[13.672,-25.83]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"d","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"}]}

3.2.5. resources

3.2.5.1. resources/views/create.blade.php

The form for adding a new todo.

@extends('master')

@section('content')

  {{-- Display the name of the connected user --}}
  <div class="panel-heading">Hi {{ Auth::user()->name }}, please add your new Todo below</div>  

  <div class="panel-body">   

    {{-- 
      Messages sent by the controller like in
        return view('...')->with('message', '<div class="...">success</div>'))
      will be displayed here
    --}}
    @if(Session::has('message'))
      {!! Session::get('message') !!}
    @endif

    {!! Form::open(['route' => 'todos.store']) !!}

    <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}"> 
        {{--
          Output the "Title" entry.
        --}}
        {!! Form::text('title', '', array('size' => '100', 'class' => 'form-control', 'placeholder' => 'Enter Todo\'s title')) !!}
        {!! $errors->first('title', '<div class="alert alert-danger">:message</div>') !!}
      </div>

      <div class="form-group">
        {{--
          Output the "Completed" flag.
        --}}      
        {!! Form::checkbox('completed', 1, 0)  !!}
        {!! Form::label('completed', 'Completed'); !!}
      </div>

      <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}">
        {{--
          Output the "Description" textarea.
        --}}
        {!! Form::label('description', 'Description (optional)'); !!}
        {!! Form::textarea('description', '', array('class' => 'form-control')) !!}
      </div>

      {{--
        Output the submit button
      --}}
      {!! Form::submit('Submit !', array('class' => 'btn btn-sm btn-primary')) !!}

      <a href="javascript:location.href='{{ route('todos.index') }}'" class="btn btn-sm btn-success">
        <span class="glyphicon glyphicon-circle-arrow-left"></span> Back
      </a> 
    {!! Form::close() !!}
  </div>
@endsection

@section('navigation')
@endsection
3.2.5.2. resources/views/edit.blade.php

The form for the edition of an existing todo.

@extends('master')

@section('content')

  <div class="panel-heading">Need to edit a Todo?</div>  

  <div class="panel-body">   

    {{-- 
      Messages sent by the controller like in
        return view('...')->with('message', '<div class="...">success</div>'))
      will be displayed here
    --}}
    @if(Session::has('message'))
      {!! Session::get('message') !!}
    @endif

    {!! Form::model($data, ['route' => ['todos.update', $data->id], 'method' => 'PUT']) !!}

      <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}"> 
        {{--
          Output the "Title" entry.
        --}}
        {!! Form::text('title', null, array('size' => '100', 'class' => 'form-control', 'placeholder' => 'Enter Todo\'s title')) !!}
        {!! $errors->first('title', '<div class="alert alert-danger">:message</div>') !!}
      </div>

      <div class="form-group">
        {{--
          Output the "Completed" flag.
        --}}      
        {!! Form::checkbox('completed', 1, null)  !!}
        {!! Form::label('completed', 'Completed'); !!}
      </div>

      <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}">
        {{--
          Output the "Description" textarea.
        --}}      
        {!! Form::label('description', 'Description (optional)'); !!}
        {!! Form::textarea('description', null, array('class' => 'form-control')) !!}
      </div>

      {{--
        Output the submit button
      --}}      
      {!! Form::submit('Submit !', array('class'=> 'btn btn-sm btn-primary')) !!}

      @include('buttons.back')

      {!! Form::close() !!}
  </div>
@endsection

@section('navigation')  
@endsection
3.2.5.3. resources/views/index.blade.php

Display the list of todos, like in a blog.

@extends('master')

@section('content')

    @if(session()->has('ok'))
    <div class="alert alert-success alert-dismissible">{!! session('ok') !!}</div>
  @endif

  {{--
    $data is a collection of records
  --}}
  @isset($datas)
    {{--
      For each todo, we'll show his title in a H3
      Clicking on the title will display the todo's details
      We'll also show: todo's description and his author.
    --}}
    @foreach($datas as $data)
      <h3><a href="{{ route('todos.show', ['id' => $data->id]) }}">#{{ $loop->iteration. " - " . $data->title }}</a></h3>

      <div style="padding:5px 0 15px 0;">
        @include('buttons.show')
        @auth 
          @include('buttons.edit')
          @include('buttons.delete')
        @endauth 
      </div>
      <p>{{ $data->description }}</p>
      <small>Author: {{ $data->user->name }}</small>
      <hr/>
    @endforeach
    <small>Number of todos: {{ count($datas) }}</small>
  @endisset
@endsection

@section('navigation')
  {{ $links }}
  <hr/>
  @include('buttons.add')

@endsection
3.2.5.4. resources/views/master.blade.php

Our page’s master. Defines how pages should looks like.

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  {{--
    Important for our Ajax requests: we need to protect our server's requests
    with the generated session token
  --}}
  <meta name="csrf-token" content="{{ csrf_token() }}">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Some stupid Todos application</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
  <style>
    textarea { max-height:150px; }
  </style>
</head>
<body>
  @include('navbar') 
  <main role="main">  
    <div class="jumbotron">
      <div class="container">
        <h1 class="display-3">Some stupid Todos application</h1>
        <small>A simple Laravel application, learning purposes</small>
      </div>
    </div>
  </main>
  <div class="container">
    @yield('content')
    <hr/>
    @yield('navigation')
  </div>
  @yield('script')
</body>
</html>
3.2.5.5. resources/views/show.blade.php

Show the detail of a todo. If a valid user is logged-in, display action’s buttons.

@extends('master')

@section('content')

  <div class="msg hide alert alert-success alert-dismissible">&nbsp;</div>

  {{-- 
    Display the detail of a todo; make sure we've one
  --}}
  @isset($data)
    {{-- 
      Show information's like title, description and timestamps
    --}}
    <h3>{{ $data->title }}</h3>
    <p>{{ $data->description }}</p>
    <small>
      Created at: {{ $data->created_at }}
      <br/>
      Last updated: {{ $data->updated_at }}
      <br/>

      {{--
        $data->user isn't a column but, in our model, the user() function
        returns an object which represent a record of the users table.
        So, through $data->user we can access to the user's name, email, ...
      --}}
      Author: {{ $data->user->name }}
    </small>

  @endisset

@endsection

@section('navigation')
  @include('buttons.back')
  @auth 
    <span class="buttons">
      @include('buttons.edit')
      @include('buttons.delete')
    </span>
  @endauth
@endsection

@section('script')
{{--
  Add our script for our buttons
--}}
<script defer="defer">
  $('.delete, .edit').click(function(){

    if ($(this).hasClass('delete')) {

      // Add the csrf-token protection but only when the request is 
      // made on the same site (no cross-domain). 
      // Don't share the token outside
      $.ajaxSetup({
        beforeSend: function(xhr, type) {
          if (!type.crossDomain) {
              xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
          }
        }
      });

      // By clicking on the delete button, make an Ajax request
      $.ajax({
        url: '{{ route('todos.destroy', $data->id) }}',
        type: 'DELETE',
        contentType: 'application/json',
        success: function (data) {
          if (data.hasOwnProperty("message")) {
            // Show the message
            $('.msg').html(data.message).removeClass('hide');
            // And remove buttons.
            $('.buttons').remove();
            // The back button should refresh the page so don't 
            // use history.back() anymore
            $('.back').attr("href", "{{ route('todos.index') }}");
          }
        },
        error: function (data, textStatus, errorThrown) {
          console.log(data);
        }
      });
    } else {
      // The user has clicked on the edit button, redirect the browser
      // to the edit page
      window.location.replace('{{ route('todos.edit', ['id' => $data->id]) }}');
    }
});
</script>
@endsection
3.2.5.6. resources/views/errors/404.blade.php

The 404 error page.

@extends('master')

@section('content')
<div class="container">
  <div class="row">
    <div class="col-sm">
     <div class="panel-heading">
                <h3 class="panel-title">Houston, we have a problem!</h3>
            </div>
            <div class="panel-body"> 
                <p>Oups... nothing here</p>             
                <a href="{{ route('todos.index') }}" class="back btn btn-sm btn-success">
                    <i class="far fa-hand-point-left"></i> Back
                </a>
            </div>
    </div>
    <div class="col-sm">
     <div id="lottie" style="height:250px;" />
    </div>
  </div>
</div>
@endsection

@section('script')
<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/4.13.0/bodymovin.min.js" type="text/javascript"></script>
    <script>
        var animation = bodymovin.loadAnimation({
            container: document.getElementById('lottie'),
            autoplay: true,
            path: 'images/errors/error_404_data.json', // https://www.lottiefiles.com/1408-network-lost
            renderer: 'svg',
            loop: true
        })
    </script>
@endsection
3.2.5.7. resources/views/buttons/add.blade.php

Add a new item button.

<button type="submit" class="btn btn-sm btn-primary" 
  onclick="location.href='{{ route('todos.create') }}'">
  <i class="far fa-plus-square"></i> Add new item
</button>
3.2.5.8. resources/views/buttons/back.blade.php

Go back button.

<a href="javascript:history.back()" class="back btn btn-sm btn-success">
    <i class="far fa-hand-point-left"></i> Back
</a>
3.2.5.9. resources/views/buttons/delete.blade.php

Delete an item button.

{!! Form::open(['method' => 'DELETE', 'route' => ['todos.destroy', $data->id], 'style' => 'display:inline']) !!}

<button type="submit" class="btn btn-sm btn-danger delete" onclick="return confirm('Remove this record?')">
    <i class="far fa-trash-alt"></i> Delete
</button>

{!! Form::close() !!}
3.2.5.10. resources/views/buttons/edit.blade.php

Edit an existing item button.

<button type="submit" class="btn btn-sm btn-primary" 
    onclick="location.href='{{ route('todos.edit', ['id' => $data->id]) }}'">
    <i class="far fa-edit"></i> Edit
</button>
3.2.5.11. resources/views/buttons/show.blade.php

Show button, go to the detail page.

<button type="submit" class="btn btn-sm btn-success" 
    onclick="location.href='{{ route('todos.show', ['id' => $data->id]) }}'">
    <i class="far fa-eye"></i> Show
</button>

3.2.6. routes

3.2.6.1. routes/web.php

Definition of our routes and how to manage them.

<?php

// Enable authentication routes
Auth::routes();

// Register http://127.0.0.1:8000/login and display the login screen
Route::get('home', 'HomeController@index')->name('home');

// Register the http://127.0.0.1:8000/logout and logout
Route::get('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']);

// -------------------

// Attach the controller to every action(GET, HEAD, POST, DELETE, ...)
// for the "todos" resource. Use "php artisan route:list" to retrieve all
// routes created by this Route::resource() statement.
Route::resource('todos', 'TodoController');

// Default homepage : show the list of todos
Route::get('/', 'TodoController@index');

// Enable authentication routes
Auth::routes();

// Register http://127.0.0.1:8000/login and display the login screen
Route::get('home', 'HomeController@index')->name('home');

// Register the http://127.0.0.1:8000/logout and logout
Route::get('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']);

// -------------------

// Attach the controller to every action(GET, HEAD, POST, DELETE, ...)
// for the "todos" resource. Use "php artisan route:list" to retrieve all
// routes created by this Route::resource() statement.
Route::resource('todos', 'TodoController');

// Default homepage : show the list of todos
Route::get('/', 'TodoController@index');

// Only when debugging
if (env('APP_DEBUG', false)) {
    // Get access to the Laravel log files
    Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index');
    // Get access to informations about the system and installed packages
    Route::get('decompose', '\Lubusin\Decomposer\Controllers\DecomposerController@index');
}

3.2.7. tests

3.2.7.1. tests/Feature/TodoControllerTest.php

Our automated PHPUnit tests scenario.

<?php

namespace Tests\Feature;

use Tests\TestCase;

class TodoControllerTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testExample()
    {
        // These routes are publicly available
        // The expected HTTP code is 200 ("Ok")
        $arr = ['todos.index',  'login', 'password.request'];
        foreach ($arr as $name) {
            $url = route($name);
            fwrite(STDERR, print_r('Check 200 for ' . $url . PHP_EOL, true));

            $response = $this->call('GET', $url);
            $response->assertStatus(200);
        }

        fwrite(STDERR, print_r(PHP_EOL, true));

        // These routes are publicly restricted to logged-in users
        // so the expected HTTP code is 302 ("HTTP redirection")
        $arr = ['todos.create', 'logout'];
        foreach ($arr as $name) {
            $url = route($name);
            fwrite(STDERR, print_r('Check 302 for ' . $url . PHP_EOL, true));
            $response = $this->call('GET', $url);
            $response->assertStatus(302);
        }

        fwrite(STDERR, print_r(PHP_EOL, true));

        // If not logged-in, the creation form should redirect (302)
        // to the login screen
        $url = route('todos.create');
        fwrite(STDERR, print_r('Check redirection for ' . $url . PHP_EOL, true));

        $response = $this->call('GET', $url);
        $response->assertStatus(302);
        $response->assertSee('<title>Redirecting to ' . route('login') . '</title>');
    }
}