Verified Commit 930d39ed authored by Adrian C. Hinrichs's avatar Adrian C. Hinrichs
Browse files

Add examples (and more?)


Signed-off-by: Adrian C. Hinrichs's avatarACHinrichs <adrian-corin.hinrichs@gmx.de>
parent 72012bf2
%%
%% This is file `HomeworkAssignment.cls',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% HomeworkAssignment.dtx (with options: `class')
%% Copyright (c) 2017 by Adrian C. Hinrichs
%%
%% This File may be distributed and/or modified under the condition of the below
%% license.
%%
%%
%% MIT License
%%
%%
%%
%% Copyright (c) 2017
%%
%%
%%
%% 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.
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesClass{HomeworkAssignment}[2017/05/02 v1.6]
\RequirePackage{kvoptions}
\SetupKeyvalOptions{ family=hwa,
prefix=hwa@ }
\DeclareStringOption[arabic]{problemsty}
\DeclareStringOption[alph]{subproblemsty}
\DeclareStringOption[roman]{subsubproblemsty}
\DeclareBoolOption[false]{listings}
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOptionKey}{article}}
\ProcessKeyvalOptions*
\LoadClass{article}
\RequirePackage{suffix}
\RequirePackage{fancyhdr}
\RequirePackage{ifthen}
\RequirePackage{translations}
\RequirePackage{amssymb}
\ifhwa@listings
\RequirePackage{listings}
\lstset{
frame = single,
breaklines = true,
postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookrightarrow\space}},
basicstyle=\scriptsize
}
\else
\fi
\DeclareTranslationFallback{aufgabe}{Aufgabe}
\DeclareTranslationFallback{loesung}{L\"osung}
\DeclareTranslationFallback{beweis}{Beweis}
\DeclareTranslationFallback{uebungsgruppe}{\"Ubungsgruppe}
\DeclareTranslationFallback{abgabe}{Abgabe}
\DeclareTranslationFallback{zuZeigen}{Zu zeigen}
\DeclareTranslationFallback{gegeben}{Gegeben}
\DeclareTranslation{German}{aufgabe}{Aufgabe}
\DeclareTranslation{German}{loesung}{L\"osung}
\DeclareTranslation{German}{beweis}{Beweis}
\DeclareTranslation{German}{uebungsgruppe}{\"Ubungsgruppe}
\DeclareTranslation{German}{abgabe}{Abgabe}
\DeclareTranslation{German}{zuZeigen}{Zu zeigen:}
\DeclareTranslation{German}{gegeben}{Gegeben}
\DeclareTranslation{English}{aufgabe}{Problem}
\DeclareTranslation{English}{loesung}{Solution}
\DeclareTranslation{English}{beweis}{Proof}
\DeclareTranslation{English}{uebungsgruppe}{Tutorial}
\DeclareTranslation{English}{abgabe}{Deadline}
\DeclareTranslation{English}{zuZeigen}{To show}
\DeclareTranslation{German}{gegeben}{Given}
\fancypagestyle{firstpage}{
%
\fancyhf{}
% clear all six fields
\renewcommand{\headrulewidth}{.7pt}
\renewcommand{\footrulewidth}{0pt} \fancyfoot[RE,LO]{\thepage}
\fancyhead[L]{\hwa@tutorium} \fancyhead[R]{\@date } }
\fancypagestyle{followingpage}{
%
\fancyhf{}
% clear all six fields
\fancyhead[RE,LO]{\@author} \fancyhead[LE,RO]{\hwa@kurs\\ \GetTranslation{abgabe}:
\hwa@abgabe} \fancyfoot[RE,LO]{\thepage}
\renewcommand{\headrulewidth}{0.7pt}
\renewcommand{\footrulewidth}{0pt} } \pagestyle{followingpage}
\AtBeginDocument{ \thispagestyle{firstpage}
\setlength{\headheight}{25pt} }
\newcommand{\hwa@problemno}{\arabic{problem}}
\newcommand{\hwa@subproblemno}{\alph{subproblem}}
\newcommand{\hwa@subsubproblemno}{\roman{subsubproblem}}
\newcommand{\hwa@parseCounterStyle}[3]{
\ifthenelse{\equal{#1}{arabic}}{ \renewcommand{#2}{\arabic{#3}} }{
\ifthenelse{\equal{#1}{roman}}{ \renewcommand{#2}{\roman{#3}} }{
\ifthenelse{\equal{#1}{alph}}{ \renewcommand{#2}{\alph{#3}} }{
\ifthenelse{\equal{#1}{Alph}}{ \renewcommand{#2}{\Alph{#3}} }{
\ifthenelse{\equal{#1}{Roman}}{
\renewcommand{#2}{\Roman{#3}} }{
\ClassError{HomeworkAssignment}{Invalid Value #1 for
option Counter-Styling}{Possible Values are alph,
arabic, Arabic, roman or Roman.} } } } } } }
\hwa@parseCounterStyle{\hwa@problemsty}{\hwa@problemno}{problem}
\hwa@parseCounterStyle{\hwa@subproblemsty}{\hwa@subproblemno}{subproblem}
\hwa@parseCounterStyle{\hwa@subsubproblemsty}{\hwa@subsubproblemno}{subsubproblem}
\newcommand{\hwa@kurs}{?\GetTranslation{subject}?}
\newcommand{\subject}[1]{\renewcommand{\hwa@kurs}{#1}}
\newcommand{\kurs}[1]{\subject{#1}}
\newcommand{\hwa@tutorium}{?\GetTranslation{uebungsgruppe}?}
\newcommand{\tutorial}[1]{\renewcommand{\hwa@tutorium}{#1}}
\newcommand{\tutorium}[1]{\tutorial{#1}}
\newcommand{\hwa@abgabe}{\today}
\newcommand{\deadline}[1]{\def\hwa@abgabe{#1}}
\newcommand{\abgabe}[1]{\deadline{#1}}
\renewcommand{\maketitle} {
\begin{centering}
\huge{\textbf{\hwa@kurs}} {\hrule height 2pt} \vspace{.25cm}
\large
\GetTranslation{abgabe}: \hwa@abgabe\\
\vspace{.5cm} \hrule \vspace{.25cm}
\normalsize{\@author}\\
\vspace{.25cm} \hrule \vspace{.25cm} \normalsize
\end{centering}
}
\newcounter{problem} \setcounter{problem}{0}
\newcounter{subproblem}[problem] \setcounter{subproblem}{0}
\newcounter{subsubproblem}[subproblem] \setcounter{subsubproblem}{0}
\newcommand{\problem}[1]{\@startsection{problem}%Name
{1}%Level
{\z@}%indent
{-2em \@plus -1em \@minus -1em}%beforeskip
{1ex \@plus .5ex}%afterskip
{\normalfont\Large\bfseries}%style
*{#1} \addcontentsline{toc}{section}{#1} }
\newcommand{\subproblem}[1]{\@startsection{subproblem}%Name
{2}%Level
{\z@}%indent
{-1em \@plus -.5em \@minus -.5em}%beforeskip
{.5ex \@plus .5ex}%afterskip
{\normalfont\large\bfseries}%style
*{#1} \addcontentsline{toc}{subsection}{#1} }
\newcommand{\subsubproblem}[1]{\@startsection{subsubproblem}%Name
{3}%Level
{\z@}%indent
{-.5em}%beforeskip
{.5em}%afterskip
{\normalfont\bfseries}%style
*{#1} }
\newcommand{\solution}[1][]{\@startsection{solution}%Name
{4}%Level
{\parindent}%indent
{-.1em}%beforeskip
{\z@}%afterskip
{\normalfont\bfseries}%style
*{\GetTranslation{loesung}\ifthenelse{\equal{#1}{}} {} { #1}:~~ } }
\newcommand{\proof}[1][]{\@startsection{proof}%Name
{4}%Level
{\parindent}%indent
{-.1em}%beforeskip
{\z@}%afterskip
{\normalfont\bfseries}%style
*{\GetTranslation{beweis}\ifthenelse{\equal{#1} {} } {} { #1}:~~ } }
\newcommand{\toShow}[1][]{\@startsection{to show}%Name
{4}%Level
{\parindent}%indent
{-.1em}%beforeskip
{\z@}%afterskip
{\normalfont\bfseries}%style
*{\GetTranslation{zuZeigen}\ifthenelse{\equal{#1} {} } {} { #1}:~~ } }
\newcommand{\given}[1][]{\@startsection{given}%Name
{4}%Level
{\parindent}%indent
{-.1em}%beforeskip
{\z@}%afterskip
{\normalfont\bfseries}%style
*{\GetTranslation{gegeben}\ifthenelse{\equal{#1} {} } {} { #1}:~~ } }
\newcommand{\newproblem}[1][]{\stepcounter{problem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{problem}{#1}}
\problem{\GetTranslation{aufgabe} \hwa@problemno} }
\newcommand{\newsubproblem}[1][]{\stepcounter{subproblem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{subproblem}{#1}}
\subproblem{\GetTranslation{aufgabe} \hwa@problemno{}.\hwa@subproblemno} }
\newcommand{\newsubsubproblem}[1][]{\stepcounter{subsubproblem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{subsubproblem}{#1}}
\subsubproblem{\hwa@subsubproblemno)} }
\newcommand{\QED}{\begin{flushright}
\textit{QED}
\end{flushright}
}
\newcommand{\EOP}{\begin{flushright}
$\square$
\end{flushright}
}
\newcommand{\eop}{\begin{flushright}
$\blacksquare$
\end{flushright}
}
\endinput
%%
%% End of file `HomeworkAssignment.cls'.
......@@ -220,7 +220,7 @@
\RequirePackage{translations}
\RequirePackage{amssymb}
\ifthenelse{\hwa@lstlisting}{
\ifhwa@listings
\RequirePackage{listings}
\lstset{
frame = single,
......@@ -228,7 +228,8 @@
postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookrightarrow\space}},
basicstyle=\scriptsize
}
}{}
\else
\fi
% \end{macrocode}
% \subsection{Translations\label{imp:translation}}
% Load translations, currently supports English and German, Fallback
......@@ -450,7 +451,7 @@
\newcommand{\newsubproblem}[1][]{\stepcounter{subproblem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{subproblem}{#1}}
\subproblem{\GetTranslation{Aufgabe} \hwa@problemno{}.\hwa@subproblemno} }
\subproblem{\GetTranslation{aufgabe} \hwa@problemno{}.\hwa@subproblemno} }
\newcommand{\newsubsubproblem}[1][]{\stepcounter{subsubproblem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{subsubproblem}{#1}}
......
No preview for this file type
......@@ -45,29 +45,49 @@
\DeclareStringOption[arabic]{problemsty}
\DeclareStringOption[alph]{subproblemsty}
\DeclareStringOption[roman]{subsubproblemsty}
\DeclareBoolOption[false]{listings}
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOptionKey}{article}}
\ProcessKeyvalOptions*
\LoadClass{article}
\RequirePackage{suffix} \RequirePackage{fancyhdr}
\RequirePackage{suffix}
\RequirePackage{fancyhdr}
\RequirePackage{ifthen}
\RequirePackage{translations}
\RequirePackage{amssymb}
\ifhwa@listings
\RequirePackage{listings}
\lstset{
frame = single,
breaklines = true,
postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookrightarrow\space}},
basicstyle=\scriptsize
}
\else
\fi
\DeclareTranslationFallback{aufgabe}{Aufgabe}
\DeclareTranslationFallback{loesung}{L\"osung}
\DeclareTranslationFallback{beweis}{Beweis}
\DeclareTranslationFallback{uebungsgruppe}{\"Ubungsgruppe}
\DeclareTranslationFallback{abgabe}{Abgabe}
\DeclareTranslationFallback{zuZeigen}{Zu zeigen}
\DeclareTranslationFallback{gegeben}{Gegeben}
\DeclareTranslation{German}{aufgabe}{Aufgabe}
\DeclareTranslation{German}{loesung}{L\"osung}
\DeclareTranslation{German}{beweis}{Beweis}
\DeclareTranslation{German}{uebungsgruppe}{\"Ubungsgruppe}
\DeclareTranslation{German}{abgabe}{Abgabe}
\DeclareTranslation{German}{zuZeigen}{Zu zeigen:}
\DeclareTranslation{German}{gegeben}{Gegeben}
\DeclareTranslation{English}{aufgabe}{Problem}
\DeclareTranslation{English}{loesung}{Solution}
\DeclareTranslation{English}{beweis}{Proof}
\DeclareTranslation{English}{uebungsgruppe}{Tutorial}
\DeclareTranslation{English}{abgabe}{Deadline}
\DeclareTranslation{English}{zuZeigen}{To show}
\DeclareTranslation{German}{gegeben}{Given}
\fancypagestyle{firstpage}{
%
......@@ -75,7 +95,7 @@
% clear all six fields
\renewcommand{\headrulewidth}{.7pt}
\renewcommand{\footrulewidth}{0pt} \fancyfoot[RE,LO]{\thepage}
\fancyhead[L]{\hwa@tutorium } \fancyhead[R]{\@date } }
\fancyhead[L]{\hwa@tutorium} \fancyhead[R]{\@date } }
\fancypagestyle{followingpage}{
%
\fancyhf{}
......@@ -165,18 +185,47 @@
{\z@}%afterskip
{\normalfont\bfseries}%style
*{\GetTranslation{beweis}\ifthenelse{\equal{#1} {} } {} { #1}:~~ } }
\newcommand{\toShow}[1][]{\@startsection{to show}%Name
{4}%Level
{\parindent}%indent
{-.1em}%beforeskip
{\z@}%afterskip
{\normalfont\bfseries}%style
*{\GetTranslation{zuZeigen}\ifthenelse{\equal{#1} {} } {} { #1}:~~ } }
\newcommand{\given}[1][]{\@startsection{given}%Name
{4}%Level
{\parindent}%indent
{-.1em}%beforeskip
{\z@}%afterskip
{\normalfont\bfseries}%style
*{\GetTranslation{gegeben}\ifthenelse{\equal{#1} {} } {} { #1}:~~ } }
\newcommand{\newproblem}[1][]{\stepcounter{problem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{problem}{#1}}
\problem{\GetTranslation{aufgabe} \hwa@problemno} }
\newcommand{\newsubproblem}[1][]{\stepcounter{subproblem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{subproblem}{#1}}
\subproblem{\GetTranslation{Aufgabe} \hwa@problemno{}.\hwa@subproblemno} }
\subproblem{\GetTranslation{aufgabe} \hwa@problemno{}.\hwa@subproblemno} }
\newcommand{\newsubsubproblem}[1][]{\stepcounter{subsubproblem}
\ifthenelse{\equal{#1}{}} { } {\setcounter{subsubproblem}{#1}}
\subsubproblem{\hwa@subsubproblemno)} }
\newcommand{\QED}{\begin{flushright}
\textit{QED}
\end{flushright}
}
\newcommand{\EOP}{\begin{flushright}
$\square$
\end{flushright}
}
\newcommand{\eop}{\begin{flushright}
$\blacksquare$
\end{flushright}
}
\endinput
%%
%% End of file `HomeworkAssignment.cls'.
\documentclass[a4paper, subproblemsty=arabic,subsubproblemsty=alph, listings]{HomeworkAssignment}[2017/04/30 v1.5.1]
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\author{Max Mustermann Matr.Nr. 1701 \\ Autor Zwei Matr.Nr. 4711 \\ Dritter Kollaborateur Matr.Nr. 4242 }
\date{\today}
\abgabe{04.05.2017}
\tutorium{\"Ubungsgruppe 8}
\kurs{Betriebssysteme und Softwaretechnik}
\begin{document}
\maketitle
\newproblem[1]
\newsubproblem[1]
\newsubsubproblem
\begin{lstlisting}[language=bash]
$ uname -a
Linux BuS1337 4.9.16-gentoo #1 SMP Fri Apr 28 16:18:12
CEST 2017 x86_64 Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz
GenuineIntel GNU/Linux
\end{lstlisting}
\begin{lstlisting}[language=bash]
$ cat /etc/issue
This is \n.\O (\s \m \r) \t
\end{lstlisting}
\begin{lstlisting}[language=bash]
$ gcc --version
gcc (Gentoo Hardened 5.4.0-r3 p1.3, pie-0.6.5) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying
conditions. There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
\end{lstlisting}
\begin{lstlisting}[language=bash]
$ w
21:53:q25 up 3:36, 4 users, load average: 0.00, 0.02, 0.09
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root tty2 18:45 11:57 0.31s 0.31s -bash
root tty1 18:25 2:31m 0.60s 0.33s links
georg pts/0 19:29 1:59m 0.03s 0.03s -bash
georg pts/1 20:01 1.00s 0.07s 0.00s w
\end{lstlisting}
\newsubsubproblem
Aus \texttt{man man}:
\begin{lstlisting}[language=bash]
man -k printf
Search the short descriptions and manual page names for the
keyword printf as regular expression. Print out any
matches. Equivalent to apropos printf.
\end{lstlisting}
Aus \texttt{man grep}:
\begin{lstlisting}[language=bash]
-n, --line-number
Prefix each line of output with the 1-based line number
within its input file.
\end{lstlisting}
Aus \texttt{man fortune}:
\begin{lstlisting}[language=bash]
HISTORY
This version of fortune is based on the NetBSD fortune 1.4,
but with a number of bug fixes and enhancements.
\end{lstlisting}
\newsubproblem[2]
\newsubsubproblem
\begin{lstlisting}[language=bash]
echo "Bus 2016: Abgabe der 1. Uebung am 6.5." | sed s/6/7/
Bus 2017: Abgabe der 1. Uebung am 6.5.
\end{lstlisting}
\newsubsubproblem
Der Befehl \texttt{cut -d -f 1 d*} gibt jeweils aus allen
Dateien im aktuellen Ordner, die mit \texttt{d} beginnen den beginn
jeder Zeile bis zum ersten Leerzeichen aus. \texttt{-d } setzt das
Trennzeichen auf ein Leerzeichen. \texttt{-f 1} legt fest, dass nur
das erste Feld was mit diesem Trennzeichen gefunden wurde ausgegeben
wird. Durch \texttt{d*} wird der Befehl auf alle Dateien angewendet,
deren Namen mit d beginnt.
\newsubsubproblem
\begin{lstlisting}
$ grep -B 19 -ne '^[0-9]\{5\}\ [a-zA-Z]\{1,\} [a-zA-Z]\{1,\}$' emails
19017-Message-ID: <32509bccc5b1a43c@posteo.de>
19018-Date: Tue, 26 Oct 2010 15:26:51 +0200
19019-From: Arthur Dent <realArthurDent@posteo.de>
...
19022-To: Emily Saunders <emily.saunders@mostlyharmless.com>
...
19034-Arthur Dent
19035-Galaxy 7
19036:74369 Third Orbit
\end{lstlisting}
Die durch ``...'' markierten Teile der Ausgabe wurde aufgrund
von fehlender Relevanz f\"ur die Aufgabenstellung ausgelassen
\newsubproblem[3] %AUFGABE 3 =======================================
\newsubsubproblem
Der erste aufruf von \texttt{tr} im Befehl
\begin{lstlisting}
$ tr -d '"?.!:;,+&'"'" < wotw.txt | tr -s " "
\end{lstlisting}%$
entfernt alle der spezifizierten Sonderzeichen aus der eingabe, welche
aus der Datei \texttt{wotw.txt} gepiped wird. Die Ausgabe des Befehles
wird in den zweiten \texttt{tr} aufruf gepiped, in welchen (durch das
flag \texttt{-s}) jedes doppelte Leerzeichen entfernt wird.
%\lstinputlisting{a3-1.txt}
\newsubsubproblem
Durch den Befehl
\begin{lstlisting}[language=bash]
$ grep "road" -i -v -c wotw.txt
6330
\end{lstlisting}%$
erfhrt man, dass exakt 6330 Zeilen des Dokumentes das Wort ``road''
nicht enthlt. Das flag \texttt{-i} sorgt dafr, dass \texttt{grep} die
Gro-/Kleinschreibung ignoriert, \texttt{-v} sorgt dafr, dass nur
Zeilen ohne Match ausgegeben werden, \texttt{-c} Z\"ahlt die von
\texttt{grep} ausgegebenen Zeilen.
\newsubsubproblem
Der \texttt{grep} Befehl wandelt zunchst die Datei in eine Liste
ihrer Wrter um. Danach werden die Wrter mit \texttt{sort} gruppiert
damit sie mit \texttt{uniq -c} zusammengefasst werden knnen und die
Anzahl ihrer Vorkommnisse bestimmt werden kann. Um die hufigsten 10
zu ermitteln wird dann mit \texttt{sort -n -r} nach den von
\texttt{uniq} hinzugefgten Anzahlen absteigend sotiert und
schlussendlich werden mit \texttt{head -n 10} nur die ersten 10 ausgegeben.
\begin{lstlisting}[language=bash]
grep -o '\<[[:alpha:]]*\>' wotw.txt | sort | uniq -c | sort -n -r | head -n 10
4417 the
2373 and
2284 of
1554 a
1300 I
1160 to
924 in
853 was
754 that
568 had
\end{lstlisting}
\newsubproblem[4]
\newsubsubproblem
\begin{lstlisting}[language=bash]
$ git init
\end{lstlisting}
\newsubsubproblem
\begin{lstlisting}[language=bash]
$ git add A.txt B.txt C.txt
$ git commit -m "Initial"
\end{lstlisting}
\newsubsubproblem
\begin{lstlisting}[language=bash]
$ git diff
\end{lstlisting}
Gibt die alle nderungen seit dem letzten commit aus.
\begin{lstlisting}[language=bash]
$ git diff $FILE
\end{lstlisting}
Vergleicht die Datei \texttt{\${}FILE} mit der Version aus dem letzen
Commit, und gibt alle Unterschiede aus.
\newsubsubproblem
\begin{lstlisting}[language=bash]
$ git commit -m "Change files" # commit
$ git log # Anzeigen der Commits
\end{lstlisting}
\newsubproblem
\newsubsubproblem
\begin{lstlisting}[language=bash]
$ convert B.png C.jpg BC.pdf && pdfunite A.pdf BC.pdf ABC.pdf
\end{lstlisting}
\newsubsubproblem
\begin{lstlisting}[language=bash]
$ pdftk A.pdf cat 5-9 23 240-242 output Relevant.pdf
\end{lstlisting}
\end{document}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment