1
0
mirror of https://github.com/aolofsson/oh.git synced 2025-01-30 02:32:53 +08:00
This commit is contained in:
Andreas Olofsson 2016-01-21 15:39:42 +00:00
commit 80597350e7
55 changed files with 1363 additions and 0 deletions

114
accelerator/docs/backup Normal file
View File

@ -0,0 +1,114 @@
---- ----
name: Creating an FPGA accelerator in 15 min
---- #Title ----
background-image: /images/parallella_front_slant.png
----
## Creating an FPGA accelerator in 15 min!
Andreas Olofsson, 1/21/2016
(Presented at ANL FPGA Workshop)
---- #parallella-introduction ----
background-image: /images/parallella_front_slant.png
## Kickstarting Parallel Computing
* Parallella: "Supercomputing for everyone"
* 18 CPU cores on a credit card and @ 5W
* Democratizes access to parallel computing
* $898K raised on Kickstarter in Oct 2012
* Open source and open access
* Starting at $99
* Now generally available at Amazon & Digi-Key
---- #parallella-specs ----
## Parallella Specs (http://parallella.org)
| | |
|---------------------- |:----------------------:|
| Performance | ~30 GFLOPS |
| Architecture | ARM + FPGA + MANYCORE |
| Memory | 1GB DDR3 |
| IO | ~25 Gb/s (48 GPIO) |
| Size | credit-card |
| Power | <5W |
| Cost | $99 -> $249 |
---- #Software ----
## "Hello World" in Software
1. **CODE:** main() { printf("Hello World\n");}
2. **COMPILE:** gcc hello.c
3. **TEST** ./a.out
3. **DEBUG** printf, gdb
---- #Hardware ----
## "Hello World" in Hardware
1. **CODE:** Verilog/VHDL source
2. **CODE MORE:** Verilog/SystemC testbench
3. **TEST:** VCS/NC/Icarus/Verilator
4. **DEBUG:** Waveform debugging
5. **SYNTHESIZE:** HDL-->NETLIST-->POLYGONS
6. **BURN:** FPGA/ASIC
7. **TEST MORE:** Pray that it works...
---- #Comparison ----
## Hardwave vs Software
| | SW | HW |
|---------------- |:----------:|:---------------:|
| Compile Time | seconds | minutes/months |
| Libraries | lots | little |
| Debugging | "easy" | an art |
| Cost of mistake | low | VERY HIGH!!!! |
---- #Resources ----
## Resources
* Tutorial: http://github.com/parallella/oh/accelerator
* OH! Library: http://github.com/parallella/oh)
* Forum: http://forums.parallella.org
---- #start ----
## Let's create "hello world" for FPGAs
```verilog
assign result[31:0]=input0[31:0]*input1[31:0];
```
## Now what????
---- #Steps ----
## What's missing
1. Control code
2. Interfaces
3. Test environment
4. Synthesis scripts (non trivial)
5. Drivers (software)
---- #Files ----
## Files to Review
1. **Code:** hdl/{accelerator.v,axi_accelerator.v}
2. **Testbench:** dv/{dut_axi_accelerator.v,build.sh,run.sh}
3. **Synthesis:** fpga/{package.tcl, run.tcl}
4. **Drivers:** sw/accelerator_demo.c
---- #Conclusions ----
## Conclusions
1. You can build an FPGA accelerator in 15 minutes!
2. Library based design key to hardware productivity
3. Stay away from vendor proprietary tools
4. Keep it simple**Drivers:** sw/accelerator_demo.c

View File

@ -0,0 +1,133 @@
---- ----
name: Creating an FPGA accelerator in 15 min
---- #Title ----
background-image: /images/parallella_front_slant.png
----
## Creating an FPGA accelerator in 15 min!
Andreas Olofsson, 1/21/2016
(Presented at ANL FPGA Workshop)
---- #parallella-introduction ----
background-image: /images/parallella_front_slant.png
## Kickstarting Parallel Computing
* Parallella: "Supercomputing for everyone"
* 18 CPU cores on a credit card and @ 5W
* Democratizes access to parallel computing
* $898K raised on Kickstarter in Oct 2012
* Open source and open access
* Starting at $99
* Now generally available at Amazon & Digi-Key
---- #parallella-specs ----
## Parallella Specs (http://parallella.org)
| | |
|---------------------- |:----------------------:|
| Performance | ~30 GFLOPS |
| Architecture | ARM + FPGA + MANYCORE |
| Memory | 1GB DDR3 |
| IO | ~25 Gb/s (48 GPIO) |
| Size | credit-card |
| Power | <5W |
| Cost | $99 -> $249 |
---- #Software ----
## "Hello World" in Software
1. **CODE:** main() { printf("Hello World\n");}
2. **COMPILE:** gcc hello.c
3. **TEST** ./a.out
3. **DEBUG** printf, gdb
---- #Hardware ----
## "Hello World" in Hardware
1. **CODE:** Verilog/VHDL source
2. **CODE MORE:** Verilog/SystemC testbench
3. **TEST:** VCS/NC/Icarus/Verilator
4. **DEBUG:** Waveform debugging
5. **SYNTHESIZE:** HDL-->NETLIST-->POLYGONS
6. **BURN:** FPGA/ASIC
7. **TEST MORE:** Pray that it works...
---- #Comparison ----
## Hardwave vs Software
| | SW | HW |
|---------------- |:----------:|:---------------:|
| Compile Time | seconds | minutes/months |
| Libraries | lots | little |
| Debugging | "easy" | an art |
| Cost of mistake | low | VERY HIGH!!!! |
---- #Resources ----
## Resources
* Tutorial: http://github.com/parallella/oh/accelerator
* OH! Library: http://github.com/parallella/oh
* Forum: http://forums.parallella.org
---- #start ----
## Let's start..."hello world"
```verilog
assign result[31:0]=input0[31:0]*input1[31:0];
```
----
## Now what????
---- #Steps ----
## What's missing
1. Control code
2. Interfaces
3. Test environment
4. Synthesis scripts (non trivial)
5. Drivers (software)
---- #Files ----
## Files Used
1. **Code:** hdl/{accelerator.v,axi_accelerator.v}
2. **Testbench:** dv/{dut_axi_accelerator.v,build.sh,run.sh}
3. **Synthesis:** fpga/{package.tcl, run.tcl}
4. **Drivers:** sw/{driver.c,test.c}
---- #Conclusions ----
## Conclusions
1. Yes, you can build an FPGA accelerator in 15 minutes
2. HW is still 100x more exepnsive to develop than SW
3. This tutorial was prepared in less than 24hrs thanks to leverage
4. Much more investment needed in open sorce HW.
http://github.com/parallella/oh

Binary file not shown.

View File

@ -0,0 +1,22 @@
env
out
*.html
*.png
*.rdb
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.swp
*.swo
*.sock
support
test
examples
example
dist
coverage
.DS_Store
Thumbs.db

View File

@ -0,0 +1,22 @@
(The MIT License)
Copyright (c) 2015 Jürgen Leschner -- github.com/jldec
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,131 @@
# pub-theme-shower-ribbon
The [shower](https://github.com/shower/shower) theme for
[pub-server](https://github.com/jldec/pub-server) makes it easy to create
HTML presentations using markdown.
Edit the markdown in any text editor and use the watch feature of pub-server to auto-update a browser preview the file is saved.
When you are ready to publish, run `pub -O` to generate a set of html output and other static files.
The screenshot below shows the built-in pub-server editor (which still has a few quirks).
![](images/shower-screen.png)
### tl;dr
The quickest way to start writing your own presentations using this theme is to clone the [pub-sample-deck](https://github.com/jldec/pub-server) repo from github.
This will also install pub-server in the same directory.
```sh
git clone https://github.com/jldec/pub-sample-deck.git
cd pub-sample-deck
npm install
```
#### If you have installed pub-server globally first
```sh
npm install -g pub-server
```
Create your `presentation.md` in a new directory, then:
```sh
npm install pub-theme-shower-ribbon
pub -m -t pub-theme-shower-ribbon
```
- `-m`: interprets markdown headings as fragments
- `-t shower-ribbon` loads pub-theme-shower-ribbon if you have npm installed it.
Now open your browser on http://localhost:3001/
### markdown
- a sample presentation is included in the [example](example) folder.
- The heading at the very top the file becomes the name of the presentation
- The second heading is interpreted as a cover slide if it is followed by `![](image)`
- A slide with no text (slide 2 below) will be rendered with *shout* style (large centered text)
```markdown
# Example Presentation
Byline
## Title
![](/images/ice.jpg)
Use the nav menu to switch between presentations
## Slide 1: quote
> The overwhelming majority of theories are rejected
because they contain bad explanations, not because they
fail experimental tests.
david deutsch
## Slide 2: No text
## Slide 3: Lists
1. with with with with with with with
- words words
- words words
- words words
- words words
- nice nice nice nice nice nice
## Slide 4: Table
| col1 | col2 | col3 header |
| ------ | ------ | --------------: |
| abc | def | right aligned |
| abc | def | right aligned |
| abc | def | right aligned |
```
### sample `pub-config.js` configuration
Instead of command line parameters, you can use pub-config.js to configure
the theme, and say a source of images e.g. for the cover
By providing a value for `injectCss` you can inject an additional stylesheet.
```js
var opts = module.exports = {
pkgs: ['pub-theme-shower-ribbon', 'pub-pkg-seo'],
sources: [
{
path:'./markdown',
glob:'**/*.md',
fragmentDelim:'md-headings', // pub -m, required for this theme
writable:true
}
],
staticPaths: [ './static' ],
// link for github badge
github: 'https://github.com/jldec/pub-theme-shower-ribbon',
// path to extra stylesheet
injectCss: '/css/extra.css',
// don't forget photo credit
photoCredit: 'Cover Photo by Jurgen Leschner, github.com/jldec',
// copyright comment
copyright: 'Copyright © 2015 Hard Working Person',
// ask search engines not to crawl this site (depends on pub-pkg-seo)
noRobots:true
}
```
### credits
- [Vadim Makeev](https://github.com/pepelsbey):
[Shower HTML presentation engine ](https://github.com/shower/shower)

View File

@ -0,0 +1,104 @@
/* shower customizations */
/* make bold text bolder */
.slide strong {font-weight:800;}
/* don't go crazy with whitespace after a p */
.slide p { margin: 0 0 25px; }
/* headings */
.slide h1,
.slide h2,
.slide h3,
.slide h4,
.slide h5 {
color: #666;
font-weight: 700;
font-family: 'PT Sans Narrow', sans-serif;
}
.slide h1 {
font-size: 65px;
margin: 0 0 40px;
}
.slide h2 {
font-size: 50px;
margin: 0 0 35px;
}
.slide h3 {
font-size: 45px;
margin: 0 0 20px;
}
.slide h4 {
font-size: 40px;
margin: 0;
}
.slide h5 {
font-size: 35px;
margin: 0;
}
/* background images */
.slide img[full] {
position: absolute;
top: 0;
left: 0;
z-index: -1;
width:1024px;
}
.slide.background-image,
.slide.background-image h1,
.slide.background-image h2,
.slide.background-image h3,
.slide.background-image h4,
.slide.background-image h5
{
color: #fff;
}
.slide.background-image > div > div {
background-color: rgba(0, 0, 0, 0.3);
margin: 0 -5em;
padding: 0 5em;
}
.slide {
z-index: 1;
}
/* inline images */
.slide img[align=right] { margin-left:1em; }
.slide img[align=left] { margin-right:2em; }
/* nav button */
#nav > ul { position:fixed; left:15px; top:15px; z-index:100; }
#nav > ul > li { height:34px; text-align:center; line-height:0.9; padding:4px 12px; color:#444; font-size:1.4em; background-color:#999; cursor:pointer; }
#nav > ul > li:hover { color:#fff; opacity:1; }
#nav > ul > li > ul { position:absolute; top:40px; left:-1000px; background-color:#ddd; text-align:left; padding-bottom:20px; z-index:200; }
#nav > ul:hover > li > ul { left:0px; }
#nav a { display:block; line-height:1.6; padding:0 20px 0 8px; font-size:20px; text-decoration:none; background:none; white-space:nowrap; }
#nav a:hover { color:#eee; background-color:#777; }
.full #nav > ul > li { opacity:0.2; }
.full #nav > ul > li:hover { opacity:1; }
/* fixes a problem with clipped edit button when there are not many slides */
@media screen {
.list { clip:auto; }
}
/* don't print the buttons */
@media print {
#nav { display:none; }
.pub-button { display:none; }
}

View File

@ -0,0 +1,21 @@
# The MIT License
Copyright © 20102014 Vadim Makeev, http://pepelsbey.net/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
# Лицензия MIT
Copyright © 20102014 Вадим Макеев, http://pepelsbey.net/
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

View File

@ -0,0 +1,15 @@
# Core for Shower [![Build Status](https://travis-ci.org/shower/core.svg?branch=master)](https://travis-ci.org/shower/core)
Follow [@shower_me](https://twitter.com/shower_me) for support and updates
To see Shower in action:
- Open [shwr.me](http://shwr.me/)
- Click any slide to enter presentation mode
- Use arrow keys or presenter remote to navigate
- Press `Esc` to exit presentation mode
Part of [Shower presentation template](https://github.com/shower/shower/). See [Wiki](https://github.com/shower/shower/wiki) for more information how to use Shower.
---
Licensed under [MIT License](http://en.wikipedia.org/wiki/MIT_License), see [license page](https://github.com/shower/shower/wiki/MIT-License) for details.

View File

@ -0,0 +1,63 @@
{
"name": "shower-core",
"description": "Core for Shower HTML presentation engine",
"version": "1.0.7",
"author": {
"name": "Vadim Makeev",
"url": "http://pepelsbey.com/"
},
"homepage": "https://github.com/shower/core",
"repository": {
"type": "git",
"url": "git://github.com/shower/core.git"
},
"bugs": {
"url": "http://github.com/shower/shower/issues"
},
"licenses": [
{
"type": "MIT",
"url": "https://github.com/shower/shower/wiki/MIT-License"
}
],
"keywords": [
"shower",
"presentation",
"core"
],
"devDependencies": {
"grunt": "^0.4.5",
"grunt-bump": "^0.0.15",
"grunt-casperjs": "2.0.1",
"grunt-contrib-connect": "^0.8.0",
"grunt-contrib-uglify": "^0.5.1",
"grunt-contrib-watch": "^0.6.1",
"grunt-jscs": "^0.7.1",
"load-grunt-tasks": "^0.6.0"
},
"scripts": {
"test": "node -e \"require('grunt').tasks(['test'])\""
},
"gitHead": "aa8a6bfc36d8808a47e9b44f915bda13200426ff",
"_id": "shower-core@1.0.7",
"_shasum": "f488c7685cc657cb87420bd5e9064beccc75c0f9",
"_from": "shower-core@>=1.0.7 <2.0.0",
"_npmVersion": "1.4.27",
"_npmUser": {
"name": "pepelsbey",
"email": "pepelsbey@gmail.com"
},
"maintainers": [
{
"name": "pepelsbey",
"email": "pepelsbey@gmail.com"
}
],
"dist": {
"shasum": "f488c7685cc657cb87420bd5e9064beccc75c0f9",
"tarball": "http://registry.npmjs.org/shower-core/-/shower-core-1.0.7.tgz"
},
"directories": {},
"_resolved": "https://registry.npmjs.org/shower-core/-/shower-core-1.0.7.tgz",
"readme": "ERROR: No README data found!"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,21 @@
# The MIT License
Copyright © 20102014 Vadim Makeev, http://pepelsbey.net/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
# Лицензия MIT
Copyright © 20102014 Вадим Макеев, http://pepelsbey.net/
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

View File

@ -0,0 +1,15 @@
# Ribbon theme for Shower
Follow [@shower_me](https://twitter.com/shower_me) for support and updates
To see Ribbon theme for Shower in action:
- Open [shwr.me/shower/themes/ribbon](http://shwr.me/shower/themes/ribbon/)
- Click any slide to enter presentation mode
- Use arrow keys or presenter remote to navigate
- Press `Esc` to exit presentation mode
Part of [Shower presentation template](https://github.com/shower/shower/). See [Wiki](https://github.com/shower/shower/wiki) for more information how to use Shower.
---
Licensed under [MIT License](http://en.wikipedia.org/wiki/MIT_License), see [license page](https://github.com/shower/shower/wiki/MIT-License) for details.

View File

@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 640">
<defs>
<style>
.stroke {
fill:none;
stroke:#56FFFE;
stroke-width:1;
}
</style>
<path d="M 0,0 H 1024" class="stroke" id="horizontal"/>
<path d="M 0,0 V 640" class="stroke" id="vertical"/>
</defs>
<use xlink:href="#horizontal" y="150"/>
<use xlink:href="#horizontal" y="227"/>
<use xlink:href="#horizontal" y="277"/>
<use xlink:href="#horizontal" y="327"/>
<use xlink:href="#horizontal" y="377"/>
<use xlink:href="#horizontal" y="427"/>
<use xlink:href="#horizontal" y="477"/>
<use xlink:href="#horizontal" y="527"/>
<use xlink:href="#vertical" x="120"/>
<use xlink:href="#vertical" x="512"/>
<use xlink:href="#vertical" x="904"/>
</svg>

After

Width:  |  Height:  |  Size: 783 B

View File

@ -0,0 +1,26 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 768">
<defs>
<style>
.stroke {
fill:none;
stroke:#56FFFE;
stroke-width:1;
}
</style>
<path d="M 0,0 H 1024" class="stroke" id="horizontal"/>
<path d="M 0,0 V 768" class="stroke" id="vertical"/>
</defs>
<use xlink:href="#horizontal" y="150"/>
<use xlink:href="#horizontal" y="227"/>
<use xlink:href="#horizontal" y="277"/>
<use xlink:href="#horizontal" y="327"/>
<use xlink:href="#horizontal" y="377"/>
<use xlink:href="#horizontal" y="427"/>
<use xlink:href="#horizontal" y="477"/>
<use xlink:href="#horizontal" y="527"/>
<use xlink:href="#horizontal" y="577"/>
<use xlink:href="#horizontal" y="627"/>
<use xlink:href="#vertical" x="120"/>
<use xlink:href="#vertical" x="512"/>
<use xlink:href="#vertical" x="904"/>
</svg>

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg">
<polygon fill="#C00" points="0,0 50,0 50,100 25,80 0,100"/>
</svg>

After

Width:  |  Height:  |  Size: 108 B

View File

@ -0,0 +1,217 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Ribbon theme for Shower</title>
<meta charset="utf-8">
<meta name="viewport" content="width=792, user-scalable=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<link rel="stylesheet" href="styles/screen.css">
</head>
<body class="list">
<!--
Debug class on <body> enables
cyan grid on slides
-->
<header class="caption">
<h1>Presentation Title</h1>
<p><a href="">Yours Truly</a>, Famous Inc.</p>
</header>
<section class="slide"><div>
<h2>Header</h2>
<p>Typewriter etsy messenger bag <a href="">fingerstache</a>, aesthetic vinyl semiotics twee <strong>DIY</strong> forage chillwave. Thundercats ennui messenger bag, <em>squid</em> carles chillwave shoreditch pickled cliche <b>letterpress</b>. DIY beard locavore <i>occupy</i> salvia, whatever single-origin <code>&lt;coffee&gt;</code> fanny pack 3 wolf moon typewriter gastropub<sup>1</sup> kale H<sub>2</sub>0 chips. Ennui keffiyeh <mark>thundercats</mark> jean shorts biodiesel. Terry richardson, swag blog locavore umami vegan helvetica. Fingerstache kale chips.</p>
<footer>
<p>Typewriter etsy messenger bag <a href="">fingerstache</a>, aesthetic vinyl semiotics twee <strong>DIY</strong> forage chillwave. Thundercats ennui messenger bag, <em>squid</em> carles chillwave shoreditch pickled cliche <b>letterpress</b>. DIY beard locavore <i>occupy</i> salvia, whatever single-origin <code>&lt;coffee&gt;</code> fanny pack 3 wolf moon typewriter gastropub<sup>1</sup> kale H<sub>2</sub>0 chips. Ennui keffiyeh <mark>thundercats</mark> jean shorts biodiesel. Terry richardson, swag blog locavore umami vegan helvetica. Fingerstache kale chips.</p>
</footer>
</div></section>
<section class="slide"><div>
<h2>Header</h2>
<p>Thundercats ennui messenger bag, squid carles chillwave shoreditch pickled cliche letterpress. DIY beard locavore occupy salvia, whatever single-origin coffee fanny pack 3 wolf moon typewriter gastropub kale chips. Ennui keffiyeh thundercats jean shorts biodiesel. Terry richardson, swag blog locavore umami vegan helvetica. Fingerstache kale chips.</p>
<p class="note">Typewriter etsy messenger bag fingerstache.</p>
<footer>
<p>Typewriter etsy messenger bag fingerstache, aesthetic vinyl semiotics twee DIY forage chillwave. Thundercats ennui messenger bag, squid carles chillwave shoreditch pickled cliche letterpress.</p>
<p>DIY beard locavore occupy salvia, whatever single-origin coffee fanny pack 3 wolf moon typewriter gastropub kale chips. Ennui keffiyeh thundercats jean shorts biodiesel.</p>
</footer>
</div></section>
<section class="slide"><div>
<h2>Lists in English typography</h2>
<ul>
<li>Ennui keffiyeh thundercats</li>
<li>Jean shorts biodiesel</li>
<li>Terry richardson, swag blog
<ol>
<li>Locavore umami vegan helvetica</li>
<li>Fingerstache kale chips</li>
<li>Keytar sriracha gluten-free</li>
</ol>
</li>
<li>Before they sold out master</li>
</ul>
</div></section>
<section class="slide" lang="ru"><div>
<h2>Lists in Russian typography</h2>
<ul>
<li>Ennui keffiyeh thundercats</li>
<li>Jean shorts biodiesel</li>
<li>Terry richardson, swag blog
<ol>
<li>Locavore umami vegan helvetica</li>
<li>Fingerstache kale chips</li>
<li>Keytar sriracha gluten-free</li>
</ol>
</li>
<li>Before they sold out master</li>
</ul>
</div></section>
<section class="slide"><div>
<h2>Lists in English typography</h2>
<ol>
<li>Locavore umami vegan helvetica</li>
<li>Fingerstache kale chips</li>
<li>Keytar sriracha gluten-free</li>
</ol>
<ul>
<li>Ennui keffiyeh thundercats</li>
<li>Jean shorts biodiesel</li>
<li>Terry richardson, swag blog</li>
</ul>
</div></section>
<section class="slide"><div>
<h2>Quote</h2>
<figure>
<blockquote>
<p>Typewriter etsy messenger bag fingerstache, aesthetic vinyl semiotics twee DIY forage chillwave. Thundercats ennui messenger bag, squid carles chillwave shoreditch pickled cliche letterpress.</p>
</blockquote>
<figcaption>Author Name</figcaption>
</figure>
<p>DIY beard locavore occupy salvia, whatever single-origin coffee fanny pack 3 wolf moon typewriter gastropub kale chips.</p>
</div></section>
<section class="slide"><div>
<h2>Table</h2>
<table>
<tr>
<th scope="col">Locavore</th>
<th>Umami</th>
<th>Helvetica</th>
<th>Vegan</th>
</tr>
<tr>
<th scope="row">Fingerstache</th>
<td>Kale</td>
<td>Chips</td>
<td>Keytar</td>
</tr>
<tr>
<th scope="row">Sriracha</th>
<td>Gluten-free</td>
<td>Ennui</td>
<td>Keffiyeh</td>
</tr>
<tr>
<th scope="row">Thundercats</th>
<td>Jean</td>
<td>Shorts</td>
<td>Biodiesel</td>
</tr>
<tr>
<th scope="row">Terry</th>
<td>Richardson</td>
<td>Swag</td>
<td>Blog</td>
</tr>
</table>
<p>Typewriter etsy messenger bag fingerstache.</p>
</div></section>
<section class="slide"><div>
<h2>Numbered code listing</h2>
<pre>
<code>&lt;html lang="en"&gt;</code>
<code><mark>&lt;head&gt;</mark> <mark class="comment">&lt;!--Comment--&gt;</mark></code>
<code> &lt;title&gt;Shower&lt;/title&gt;</code>
<code> &lt;meta charset="<mark class="important">UTF-8</mark>"&gt;</code>
<code> &lt;link rel="stylesheet" href="s/screen.css"&gt;</code>
<code> &lt;script src="j/jquery.js"&gt;&lt;/script&gt;</code>
<code><mark>&lt;/head&gt;</mark></code>
</pre>
</div></section>
<section class="slide"><div>
<h2>Plain code listing</h2>
<pre><code>&lt;html lang="en"&gt;
<mark>&lt;head&gt;</mark> <mark class="comment">&lt;!--Comment--&gt;</mark>
&lt;title&gt;Shower&lt;/title&gt;
&lt;meta charset="<mark class="important">UTF-8</mark>"&gt;
&lt;link rel="stylesheet" href="s/screen.css"&gt;
&lt;script src="j/jquery.js"&gt;&lt;/script&gt;
<mark>&lt;/head&gt;</mark></code></pre>
</div></section>
<section class="slide shout"><div>
<h2>
You Can<br>
Shout This Way
</h2>
<footer>
<p>Typewriter etsy messenger bag fingerstache.</p>
</footer>
</div></section>
<section class="slide shout"><div>
<h2><a href="">Linked Shout</a></h2>
</div></section>
<section class="slide shout grow"><div>
<h2>Growing Shout</h2>
</div></section>
<section class="slide shout shrink"><div>
<h2>Shrinking Shout</h2>
</div></section>
<section class="slide cover"><div>
<img src="pictures/exact.png" alt="">
</div></section>
<section class="slide cover w"><div>
<img src="pictures/wide.png" alt="">
</div></section>
<section class="slide cover h"><div>
<img src="pictures/tall.png" alt="">
<footer>
<p>Typewriter etsy messenger bag fingerstache.</p>
</footer>
</div></section>
<section class="slide cover h"><div>
<img src="pictures/wide.png" alt="">
</div></section>
<section class="slide cover w"><div>
<img src="pictures/tall.png" alt="">
</div></section>
<section class="slide shout"><div>
<img src="pictures/square.png" alt="" class="place t l">
<img src="pictures/square.png" alt="" class="place t">
<img src="pictures/square.png" alt="" class="place t r">
<img src="pictures/square.png" alt="" class="place l">
<img src="pictures/square.png" alt="" class="place">
<img src="pictures/square.png" alt="" class="place r">
<img src="pictures/square.png" alt="" class="place b l">
<img src="pictures/square.png" alt="" class="place b">
<img src="pictures/square.png" alt="" class="place b r">
</div></section>
<section class="slide" data-timing="00:03"><div>
<h2>Timer</h2>
<p>Three seconds to go.</p>
</div></section>
<section class="slide"><div>
<h2>List navigation</h2>
<ol>
<li>Ennui keffiyeh thundercats</li>
<li class="next">Jean shorts biodiesel</li>
<li class="next">Terry richardson, swag blog</li>
<li class="next">Locavore umami vegan helvetica</li>
<li class="next">Fingerstache kale chips</li>
</ol>
<p class="next">Before they sold out master</p>
</div></section>
<p class="badge"><a href="https://github.com/shower/shower">Fork me on Github</a></p>
<!--
To hide progress bar from entire presentation
just remove “progress” element.
-->
<div class="progress"><div></div></div>
<script src="../shower-core/shower.min.js"></script>
<!-- Copyright © 2013 Yours Truly, Famous Inc. -->
</body>
</html>

View File

@ -0,0 +1,61 @@
{
"name": "shower-ribbon",
"description": "Ribbon theme for Shower HTML presentation engine",
"version": "1.0.11",
"author": {
"name": "Vadim Makeev",
"url": "http://pepelsbey.com/"
},
"homepage": "https://github.com/shower/ribbon",
"repository": {
"type": "git",
"url": "git://github.com/shower/ribbon.git"
},
"bugs": {
"url": "http://github.com/shower/shower/issues"
},
"licenses": [
{
"type": "MIT",
"url": "https://github.com/shower/shower/wiki/MIT-License"
}
],
"keywords": [
"shower",
"presentation",
"ribbon",
"theme"
],
"devDependencies": {
"grunt": "^0.4.5",
"grunt-autoprefixer": "^0.7.5",
"grunt-bump": "0.0.14",
"grunt-contrib-watch": "^0.6.1",
"grunt-csso": "^0.6.2",
"grunt-sass": "^0.13.1",
"load-grunt-tasks": "^0.4.0"
},
"gitHead": "d59af0239f0f61990f36f37f321407dde2b2a3a8",
"_id": "shower-ribbon@1.0.11",
"scripts": {},
"_shasum": "401d8da86c351c8c3a643c16d9cce3716127635e",
"_from": "shower-ribbon@>=1.0.11 <2.0.0",
"_npmVersion": "1.4.27",
"_npmUser": {
"name": "pepelsbey",
"email": "pepelsbey@gmail.com"
},
"maintainers": [
{
"name": "pepelsbey",
"email": "pepelsbey@gmail.com"
}
],
"dist": {
"shasum": "401d8da86c351c8c3a643c16d9cce3716127635e",
"tarball": "http://registry.npmjs.org/shower-ribbon/-/shower-ribbon-1.0.11.tgz"
},
"directories": {},
"_resolved": "https://registry.npmjs.org/shower-ribbon/-/shower-ribbon-1.0.11.tgz",
"readme": "ERROR: No README data found!"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,45 @@
{
"name": "pub-theme-shower-ribbon",
"version": "1.5.3",
"description": "shower presentation theme for pub-server",
"main": "pub-config.js",
"dependencies": {
"shower-core": "^1.0.7",
"shower-ribbon": "^1.0.11"
},
"repository": {
"type": "git",
"url": "git+https://github.com/jldec/pub-theme-shower-ribbon.git"
},
"author": {
"name": "jurgen leschner"
},
"license": "MIT",
"gitHead": "83e33dd76b4b141fd72dcf92492b86148fdccd69",
"bugs": {
"url": "https://github.com/jldec/pub-theme-shower-ribbon/issues"
},
"homepage": "https://github.com/jldec/pub-theme-shower-ribbon#readme",
"_id": "pub-theme-shower-ribbon@1.5.3",
"scripts": {},
"_shasum": "46dc846998e4d7e20ce6e8d23abb341c5927a578",
"_from": "pub-theme-shower-ribbon@>=1.5.3 <2.0.0",
"_npmVersion": "2.12.1",
"_nodeVersion": "2.3.4",
"_npmUser": {
"name": "jldec",
"email": "jldec@ciaosoft.com"
},
"maintainers": [
{
"name": "jldec",
"email": "jldec@ciaosoft.com"
}
],
"dist": {
"shasum": "46dc846998e4d7e20ce6e8d23abb341c5927a578",
"tarball": "http://registry.npmjs.org/pub-theme-shower-ribbon/-/pub-theme-shower-ribbon-1.5.3.tgz"
},
"directories": {},
"_resolved": "https://registry.npmjs.org/pub-theme-shower-ribbon/-/pub-theme-shower-ribbon-1.5.3.tgz"
}

View File

@ -0,0 +1,112 @@
module.exports = function(generator) {
var u = generator.util;
var opts = generator.opts;
var sources = opts.sources;
var hb = generator.handlebars;
// apply page-mutations to pages from non-package sources
generator.on('pages-ready', function() {
u.each(sources, function(source) {
if (source._pkg) return;
u.each(generator.sourcePage$[source.name], function(page) {
// if no text below markdown heading use 'shout' class
u.each(page._fragments, function(fragment) {
if (fragment['background-image']) {
fragment.class = (fragment.class || '') + ' background-image';
}
if (0 === u.trim(fragment._txt.replace(/^.*$/m,'')).length) {
fragment.class = (fragment.class || '') + ' shout';
}
});
// if first slide contains an image, use 'cover' class
var first = page._fragments && page._fragments[0];
if (first && /^\!\[/m.test(first._txt)) {
page._fragments[0].class = (page._fragments[0].class || '') + ' cover';
}
});
});
});
hb.registerHelper('background-image', function(frame) {
var bgImg = this['background-image'];
if (bgImg) {
return '<img src="' + relPath(frame) + u.escape(bgImg) + '" full="1">';
}
});
function relPath(frame) {
return hb.renderOpts(frame).relPath || '';
}
// prevent single-page navigation in editor - main-layout is page-sensitive
generator.on('update-view', function(path, query, hash, nav) {
if (nav) { window.location = path; }
});
hb.registerHelper('menu', function(frame) {
return this.menu || '=';
});
function lang(page) {
return page.lang || u.slugify(page._href.slice(1)) || 'en';
}
function rtl(page) {
var code = lang(page).replace(/-.*/,'');
var rtlcodes = ['ar','arc','dv','ha','he','khw','ks','ku','ps','ur','yi'];
return page.rtl || u.contains(rtlcodes, code);
}
hb.registerHelper('lang', function(frame) {
return 'lang="' + lang(this) + '"';
});
hb.registerHelper('rtl', function(frame) {
return 'dir="' + (rtl(this) ? 'rtl' : 'auto') + '"';
});
hb.registerHelper('body-class', function(frame) {
return 'class="' +
(this['body-class'] || 'list') +
' ' + lang(this) + '"';
});
function githubText(page) {
switch (lang(page)) {
case 'fr': return 'Forkez-moi sur GitHub';
case 'he': return 'צור פיצול בGitHub';
case 'id': return 'Fork saya di Github';
case 'ko': return 'Github에서 포크하기';
case 'pt-br': return 'Faça um fork no Github';
case 'pt-pt': return 'Faz fork no Github';
case 'tr': return 'Github üstünde Fork edin';
case 'uk': return 'скопіювати на Github';
default: return 'Fork me on Github';
}
}
hb.registerHelper('github', function(frame) {
if (opts.github) {
return u.format(
'<p class="badge"><a href="%s">%s</a></p>',
opts.github,
this['github-text'] || githubText(this)
);
}
});
hb.registerHelper('photoCredit', function(frame) {
if (this['photo-credit'] || opts.photoCredit) {
return '<!-- ' + u.escape(this['photo-credit'] || opts.photoCredit) + ' -->';
}
});
}

View File

@ -0,0 +1,21 @@
// pub-theme-shower-ribbon pub-config
module.exports = {
'pub-pkg': 'pub-theme-shower-ribbon',
sources: './templates',
generatorPlugins: './plugins/generator-plugin.js',
staticPaths: [
{ path:'./node_modules/shower-core/shower.min.js', route:'/shower', inject:true },
{ path:'./node_modules/shower-ribbon/styles/screen.css', route:'/shower/ribbon/styles', inject:true },
{ path:'./css/pub-theme-shower-ribbon.css', route:'/css', inject:true },
{ path:'./node_modules/shower-ribbon/images', route:'/shower/ribbon/images' },
{ path:'./node_modules/shower-ribbon/fonts', route:'/shower/ribbon/fonts' },
{ path:'./node_modules/shower-core/License.md', route:'/shower' },
{ path:'./node_modules/shower-ribbon/License.md', route:'/shower/ribbon' }
],
};

View File

@ -0,0 +1,13 @@
<header class="caption">
{{{html}}}
</header>
{{#each _fragments}}
<section id="{{fragmentID}}" class="slide{{class}}"><div>
{{{html}}}
{{{background-image}}}
</div></section>
{{/each}}
<div class="progress"><div></div></div>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html {{{lang}}}>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=792">
<meta http-equiv="x-ua-compatible" content="ie=edge">
{{{metaSeo}}}
<!-- html generated by pub-server from markdown {{_file.path}} -->
<title>{{title}}</title>
{{{injectCss}}}
</head>
<body {{{body-class}}} {{{rtl}}}>
{{{partial 'nav'}}}
{{{renderPage}}}
{{{github}}}
{{{injectJs}}}
{{{photoCredit}}}
{{{copyrightComment}}}
</body>
</html>

View File

@ -0,0 +1,9 @@
<nav id="nav">
<ul><li>{{menu}}
<ul>
{{#eachPage~}}
<li>{{{pageLink}}}</li>
{{/eachPage~}}
</ul>
</li></ul>
</nav>

0
accelerator/docs/outline Normal file
View File

View File

View File

@ -0,0 +1,21 @@
{
"name": "documentation",
"version": "1.0.0",
"description": "Epiphany presentations",
"main": "pub-config.js",
"dependencies": {
"pub-theme-shower-ribbon": "^1.6.0"
},
"devDependencies": {},
"repository": {
"type": "git",
"url": "git://github.com/adapteva/documentation"
},
"scripts": {
"develop": "pub",
"generate": "pub -O",
"static": "pub -S out"
},
"author": "jurgen leschner",
"license": "MIT"
}

View File

@ -0,0 +1,35 @@
var opts = module.exports = {
pkgs: ['pub-theme-shower-ribbon', 'pub-pkg-highlight'],
sources: [
{
path:'.',
glob:'**/*.md',
watch: {usePolling:true},
writable:true
}
],
outputs: [
{
path:'./out',
relPaths: true,
}
],
//scans everything beneath path
staticPaths: [ '../static' , './static' , '.nojekyll' , '../.gitignore'],
// path to extra stylesheet
injectCss: [ '/css/extra.css' ],
// don't forget photo credit
//photoCredit: 'Cover Photo by Jurgen Leschner, github.com/jldec',
// copyright comment
//copyright: 'Copyright © 2015 Hard Working Person',
// ask search engines not to crawl this site
//noRobots: true
}

53
accelerator/docs/static/css/extra.css vendored Normal file
View File

@ -0,0 +1,53 @@
/*header from top*/
/* less space at the top */
.slide>div {
padding-top: 60px;
height: 580px;
}
/* more room next to images aligned right */
.slide img[align=right] {
margin-right: -80px;
}
/* force 2nd image aligned right to fall below 1st one
increase this value if the images are smaller */
.slide img[align=right] ~ img[align=right] {
margin-left: 1em;
}
/*transparency of text bar*/
.slide.background-image > div > div {
background-color: rgba(0, 0, 0, 0.6);
}
/*font size*/
.slide {
font-size: 1.0em;
}
/*cover title*/
.slide.cover h2 {
margin: -20px 0 0 -70px;
color: #fff;
font-size: 70px;
}
/*cover paragraph (markdown-->html)
slide.cover from shower theme
p from jurgens generator
*/
.slide.cover p {
color: #fff;
font-style: italic;
font-size: 40px;
margin-left: -70px;
}
@media print {
#nav { display:none; }
.pub-button { display:none; }
}
/*padding for images*/
.slide img {margin-bottom:1em;}

18
accelerator/docs/static/images/CREDITS vendored Normal file
View File

@ -0,0 +1,18 @@
All images created by Adapteva unless otherwise specified:
fcomms2.jpg : www.analog.com
satnog.jpg : www.satnogs.org
vivado.jpg : www.xilinx.com
## ADI (www.analog.com)
* fcomms2.jpg
* ad9361.png
* ad9361_rx.png
* ad9361_tx.png
## SATNOGS (www.satnogs.org)
* satnogs.jpg
## XILINX (www.xilinx.com)
* vivado.png
* sdsoc.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
accelerator/docs/static/images/zynq.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB