diff --git a/Assets/SVG/AutoTrain.svg b/Assets/SVG/AutoTrain.svg
new file mode 100644
index 0000000000000000000000000000000000000000..335841f636e60fabcbc034f13f9dfd771cebf163
--- /dev/null
+++ b/Assets/SVG/AutoTrain.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 662 111"><defs><style>.cls-1{fill:#1a1a1a;}.cls-2{font-size:72px;fill:#f2f2f2;font-family:BloggerSans, Blogger Sans;}.cls-3{letter-spacing:0em;}.cls-4{letter-spacing:-0.01em;}.cls-5{letter-spacing:0em;}.cls-6{stroke:#000;stroke-miterlimit:10;stroke-width:5px;fill:url(#linear-gradient);}.cls-7{fill:url(#Orchid);}.cls-8{fill:url(#Orchid-2);}</style><linearGradient id="linear-gradient" x1="54.13" y1="65.95" x2="277.11" y2="65.95" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#66d6ff"/><stop offset="0.06" stop-color="#6fd1fc"/><stop offset="0.17" stop-color="#89c3f2"/><stop offset="0.31" stop-color="#b2aee3"/><stop offset="0.4" stop-color="#d39cd7"/><stop offset="0.99" stop-color="#f6ff6a"/></linearGradient><linearGradient id="Orchid" x1="49.57" y1="60.81" x2="58.43" y2="60.81" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff7bac"/><stop offset="0.22" stop-color="#ff7bac" stop-opacity="0.76"/><stop offset="0.6" stop-color="#ff7bac" stop-opacity="0.36"/><stop offset="0.87" stop-color="#ff7bac" stop-opacity="0.1"/><stop offset="1" stop-color="#ff7bac" stop-opacity="0"/></linearGradient><linearGradient id="Orchid-2" x1="272.71" y1="56.47" x2="281.67" y2="56.47" xlink:href="#Orchid"/></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" width="662" height="111" rx="45.5"/><text class="cls-2" transform="translate(331 77.2)">Au<tspan class="cls-3" x="76.17" y="0">t</tspan><tspan x="99.22" y="0">oT</tspan><tspan class="cls-4" x="167.4" y="0">r</tspan><tspan class="cls-5" x="191.16" y="0">ain</tspan></text><path class="cls-6" d="M54.13,60.67c5.33-8,16-19.73,29.57-22.65C139.83,26,143.78,84,183.94,93.67,202,98,235.65,98,277.11,56.56"/><circle class="cls-7" cx="54" cy="60.81" r="4.43"/><circle class="cls-8" cx="277.19" cy="56.47" r="4.48"/></g></g></svg>
\ No newline at end of file
diff --git a/Assets/BottomBar.svg b/Assets/SVG/BottomBar.svg
similarity index 100%
rename from Assets/BottomBar.svg
rename to Assets/SVG/BottomBar.svg
diff --git a/Assets/SVG/Collecting.svg b/Assets/SVG/Collecting.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a4fb0d6856b35e5675fd0daa00e58e581e74eada
--- /dev/null
+++ b/Assets/SVG/Collecting.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 141.5 50.05"><defs><style>.cls-1{fill:#ffd74f;stroke:#333;stroke-miterlimit:10;}.cls-2{font-size:23px;fill:#4d4d4d;font-family:OdinRounded-Light, Odin Rounded;font-weight:300;letter-spacing:0em;}.cls-3{letter-spacing:0.05em;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" x="0.5" y="0.5" width="140.5" height="31.5" rx="13.87"/><text class="cls-2" transform="translate(7.58 23.99) scale(0.95 1)">C<tspan class="cls-3" x="14.33" y="0">OLL</tspan><tspan x="55.87" y="0">E</tspan><tspan class="cls-3" x="67.67" y="0">CTING</tspan></text></g></g></svg>
\ No newline at end of file
diff --git a/Assets/SVG/FastTrack.svg b/Assets/SVG/FastTrack.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9b74bd7997d705b297c923ee88d7848b4478b4ae
--- /dev/null
+++ b/Assets/SVG/FastTrack.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 1366 768" style="enable-background:new 0 0 1366 768;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#1A1A1A;}
+	.st1{fill:none;}
+	.st2{fill:#F2F2F2;}
+	.st3{font-family:'BloggerSans';}
+	.st4{font-size:72px;}
+	.st5{fill:url(#SVGID_1_);stroke:#000000;stroke-width:5;stroke-miterlimit:10;}
+	.st6{fill:url(#SVGID_2_);}
+	.st7{fill:url(#SVGID_3_);}
+	.st8{fill:#FFCC99;}
+</style>
+<g>
+	<path class="st0" d="M968.5,444h-571c-25.1,0-45.5-20.4-45.5-45.5v-20c0-25.1,20.4-45.5,45.5-45.5h571c25.1,0,45.5,20.4,45.5,45.5
+		v20C1014,423.6,993.6,444,968.5,444z"/>
+</g>
+<rect x="683" y="358" class="st1" width="314" height="60"/>
+<text transform="matrix(1 0 0 1 683 410.1992)" class="st2 st3 st4">AutoTrain</text>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="406.1263" y1="398.9493" x2="629.1129" y2="398.9493">
+	<stop  offset="0" style="stop-color:#66D6FF"/>
+	<stop  offset="6.399725e-02" style="stop-color:#6FD1FC"/>
+	<stop  offset="0.1704" style="stop-color:#89C3F2"/>
+	<stop  offset="0.3052" style="stop-color:#B2AEE3"/>
+	<stop  offset="0.3998" style="stop-color:#D39CD7"/>
+	<stop  offset="0.9944" style="stop-color:#F6FF6A"/>
+</linearGradient>
+<path class="st5" d="M406.1,393.7c5.3-8,16-19.7,29.6-22.6c56.1-12.1,60.1,46,100.2,55.6c18,4.3,51.7,4.3,93.2-37.1"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="401.5714" y1="393.8084" x2="410.4339" y2="393.8084">
+	<stop  offset="0" style="stop-color:#FF7BAC"/>
+	<stop  offset="1" style="stop-color:#FF7BAC;stop-opacity:0"/>
+</linearGradient>
+<circle class="st6" cx="406" cy="393.8" r="4.4"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="624.7101" y1="389.4715" x2="633.6678" y2="389.4715">
+	<stop  offset="0" style="stop-color:#FF7BAC"/>
+	<stop  offset="1" style="stop-color:#FF7BAC;stop-opacity:0"/>
+</linearGradient>
+<circle class="st7" cx="629.2" cy="389.5" r="4.5"/>
+<g>
+	<path class="st0" d="M968.5,253h-571c-25.1,0-45.5-20.4-45.5-45.5v-20c0-25.1,20.4-45.5,45.5-45.5h571c25.1,0,45.5,20.4,45.5,45.5
+		v20C1014,232.6,993.6,253,968.5,253z"/>
+</g>
+<rect x="683" y="167.6" class="st1" width="273" height="60"/>
+<text transform="matrix(1 0 0 1 682.9988 219.7927)"><tspan x="0" y="0" class="st2 st3 st4">Fast</tspan><tspan x="121.2" y="0" class="st2 st3 st4">-</tspan></text>
+<path class="st8" d="M410.7,237L410.7,237c7,0,12.7-5.7,12.7-12.7v-53.6c0-7-5.7-12.7-12.7-12.7h0c-7,0-12.7,5.7-12.7,12.7v53.6
+	C398,231.3,403.7,237,410.7,237z"/>
+<path class="st8" d="M443.4,237L443.4,237c7,0,12.7-5.7,12.7-12.7v-53.6c0-7-5.7-12.7-12.7-12.7h0c-7,0-12.7,5.7-12.7,12.7v53.6
+	C430.7,231.3,436.3,237,443.4,237z"/>
+<path class="st8" d="M476,237L476,237c7,0,12.7-5.7,12.7-12.7v-53.6c0-7-5.7-12.7-12.7-12.7h0c-7,0-12.7,5.7-12.7,12.7v53.6
+	C463.3,231.3,469,237,476,237z"/>
+<path class="st8" d="M530.4,237L530.4,237c7,0,12.7-5.7,12.7-12.7v-53.6c0-7-5.7-12.7-12.7-12.7l0,0c-7,0-12.7,5.7-12.7,12.7v53.6
+	C517.7,231.3,523.4,237,530.4,237z"/>
+<path class="st8" d="M584.9,237L584.9,237c7,0,12.7-5.7,12.7-12.7v-53.6c0-7-5.7-12.7-12.7-12.7h0c-7,0-12.7,5.7-12.7,12.7v53.6
+	C572.2,231.3,577.9,237,584.9,237z"/>
+<path class="st8" d="M639.3,237L639.3,237c7,0,12.7-5.7,12.7-12.7v-53.6c0-7-5.7-12.7-12.7-12.7l0,0c-7,0-12.7,5.7-12.7,12.7v53.6
+	C626.6,231.3,632.3,237,639.3,237z"/>
+</svg>
diff --git a/Assets/SVG/Asset 2.svg b/Assets/SVG/LogoStart.svg
similarity index 100%
rename from Assets/SVG/Asset 2.svg
rename to Assets/SVG/LogoStart.svg
diff --git a/Assets/SVG/MainLogo.svg b/Assets/SVG/MainLogo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..407cafa079e76912445586bdd2fd99ecc844a2a2
--- /dev/null
+++ b/Assets/SVG/MainLogo.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 812 812"><defs><style>.cls-1{fill:#130f55;}.cls-2{fill:url(#linear-gradient);}</style><linearGradient id="linear-gradient" x1="70.59" y1="405.33" x2="740.93" y2="405.33" gradientTransform="translate(-1.75 2.14) rotate(-0.25)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#db589a" stop-opacity="0.9"/><stop offset="0.13" stop-color="#d261a2" stop-opacity="0.91"/><stop offset="0.33" stop-color="#ba78b6" stop-opacity="0.93"/><stop offset="0.6" stop-color="#939fd8" stop-opacity="0.96"/><stop offset="0.87" stop-color="#6cf"/></linearGradient></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" width="812" height="812" rx="96.5"/><path class="cls-2" d="M128.79,248.7c22.2-9.46,43.08-5.64,71-.31,34.42,6.57,63.46,22.49,78.13,30.66,7.43,4.14,12.67,7.29,18.78,11.3,24.73,16.23,41.62,33.3,110.63,83.14,10,7.22,14.93,10.9,18.06,12.93,9.3,6,101.08,63.72,181.13,31.21,37.28-15.14,43.41-38.21,73.85-36.32,20.62,1.29,44.47,13.53,55.15,35.76,12.16,25.28,1.21,50.8-2.74,60-7.09,16.53-18.41,29.05-32.82,40.14C617.82,580.45,516,568,516,568s-78.31-9.58-144.09-61.35c-5.24-4.13-21.86-15.44-44.15-33.81a358.85,358.85,0,0,0-52.09-35.78s-62.88-32.73-109.21-32.52c0,0-22.79,0-23,.09h0c-22.77,3.23-29.75,13.85-40.94,12.18-17.77-2.65-26.84-33.39-28.17-37.88C61.53,335.49,79.48,269.7,128.79,248.7Z"/></g></g></svg>
\ No newline at end of file
diff --git a/Assets/SVG/NotCollecting.svg b/Assets/SVG/NotCollecting.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f159fa8df6e47d34bbf4a1b9571d8a8ca754e9cf
--- /dev/null
+++ b/Assets/SVG/NotCollecting.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 141.5 50.05"><defs><style>.cls-1{fill:#1a1a1a;stroke:#666;stroke-miterlimit:10;}.cls-2{font-size:23px;fill:#4d4d4d;font-family:OdinRounded-Light, Odin Rounded;font-weight:300;letter-spacing:0em;}.cls-3{letter-spacing:0.05em;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" x="0.5" y="0.5" width="140.5" height="31.5" rx="13.87"/><text class="cls-2" transform="translate(6.58 23.99) scale(0.95 1)">C<tspan class="cls-3" x="14.33" y="0">OLL</tspan><tspan x="55.87" y="0">E</tspan><tspan class="cls-3" x="67.67" y="0">CTING</tspan></text></g></g></svg>
\ No newline at end of file
diff --git a/Assets/TopBar.svg b/Assets/SVG/TopBar.svg
similarity index 100%
rename from Assets/TopBar.svg
rename to Assets/SVG/TopBar.svg
diff --git a/Assets/readme/AutoTrain.png b/Assets/readme/AutoTrain.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cee14d8b7d352eae271bf40ca8b449b3a1c14b1
Binary files /dev/null and b/Assets/readme/AutoTrain.png differ
diff --git a/Assets/readme/Collecting1.gif b/Assets/readme/Collecting1.gif
index e2840bcc5951e83e68042bb1eb1903b0ef526638..7bc533f0870513b07ed73e33ec38aee1b162e97a 100644
Binary files a/Assets/readme/Collecting1.gif and b/Assets/readme/Collecting1.gif differ
diff --git a/Assets/readme/Collecting2.gif b/Assets/readme/Collecting2.gif
index d8f6076edaf8396de99c2eec5e7653f803e354bf..2c874d162024cead79bf6470e26c040410d60345 100644
Binary files a/Assets/readme/Collecting2.gif and b/Assets/readme/Collecting2.gif differ
diff --git a/Assets/readme/Detect1.gif b/Assets/readme/Detect1.gif
index 9c2b1b49a9eeba6273e5b2bf388672ba8fbb22ac..1d6b46e7316b309bc29222bbe804b03f4c2afeae 100644
Binary files a/Assets/readme/Detect1.gif and b/Assets/readme/Detect1.gif differ
diff --git a/Assets/readme/Detect2.gif b/Assets/readme/Detect2.gif
index 28edf05b893b033331b91d2f5a7f64b35f8f4b2f..ea499a1b0bf31210e3bd048a81f2ba453b458e02 100644
Binary files a/Assets/readme/Detect2.gif and b/Assets/readme/Detect2.gif differ
diff --git a/Assets/readme/FastTrack.png b/Assets/readme/FastTrack.png
new file mode 100644
index 0000000000000000000000000000000000000000..f89978e2104b37284db2c250781f7d8a07bd93f7
Binary files /dev/null and b/Assets/readme/FastTrack.png differ
diff --git a/Assets/readme/MainLogo.png b/Assets/readme/MainLogo.png
new file mode 100644
index 0000000000000000000000000000000000000000..486bf4232f5c6cea169871bd3c067719bf783bd8
Binary files /dev/null and b/Assets/readme/MainLogo.png differ
diff --git a/Assets/readme/SignTrack Logo.svg b/Assets/readme/SignTrack Logo.svg
deleted file mode 100644
index fe5749fda05b6880c2d9e96fb42a36104f0d54ba..0000000000000000000000000000000000000000
--- a/Assets/readme/SignTrack Logo.svg	
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1343 364"><defs><style>.cls-1{fill:url(#linear-gradient);}.cls-2{font-size:48px;}.cls-2,.cls-9{font-family:OdinRounded-Light, Odin Rounded;font-weight:300;}.cls-3{letter-spacing:-0.03em;}.cls-4{font-size:45px;}.cls-10,.cls-4{font-family:MyriadPro-Regular, Myriad Pro;font-weight:400;}.cls-5{letter-spacing:-0.05em;}.cls-6{letter-spacing:-0.04em;}.cls-7{letter-spacing:-0.04em;}.cls-8{fill:url(#linear-gradient-2);}.cls-9{font-size:37px;fill:#333;}.cls-11{letter-spacing:-0.06em;}.cls-12{letter-spacing:-0.03em;}.cls-13{fill:#c799d8;}.cls-14{fill:#ff9986;}</style><linearGradient id="linear-gradient" x1="786.4" y1="-17.01" x2="543.3" y2="404.05" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c799d8"/><stop offset="1" stop-color="#ff9986"/></linearGradient><linearGradient id="linear-gradient-2" x1="484.77" y1="117.16" x2="547.74" y2="117.16" gradientTransform="translate(-0.63 3.24) rotate(-0.25)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#db589a" stop-opacity="0.9"/><stop offset="0.13" stop-color="#d261a2" stop-opacity="0.91"/><stop offset="0.33" stop-color="#ba78b6" stop-opacity="0.93"/><stop offset="0.6" stop-color="#939fd8" stop-opacity="0.96"/><stop offset="0.87" stop-color="#6cf"/></linearGradient></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" x="457" width="429" height="364" rx="59.5"/><text class="cls-2" transform="translate(482 190.42)"><tspan class="cls-3">C</tspan><tspan x="28.7" y="0">omputi</tspan><tspan class="cls-4" x="162.96" y="0">n</tspan><tspan x="187.93" y="0">g</tspan><tspan class="cls-5" x="0" y="57.6">f</tspan><tspan x="16.85" y="57.6">or </tspan><tspan class="cls-6" x="70.99" y="57.6">e</tspan><tspan class="cls-7" x="92.49" y="57.6">v</tspan><tspan x="116.06" y="57.6">er</tspan><tspan class="cls-6" x="154.51" y="57.6">y</tspan><tspan x="177.98" y="57.6">o</tspan><tspan class="cls-4" x="204.24" y="57.6">n</tspan><tspan x="229.21" y="57.6">e</tspan></text><path class="cls-8" d="M490.11,103.42c2.08-.89,4-.53,6.67,0a24.94,24.94,0,0,1,7.34,2.88c.69.39,1.19.68,1.76,1.06,2.32,1.52,3.91,3.13,10.39,7.81.94.68,1.4,1,1.7,1.21.87.57,9.49,6,17,2.94,3.51-1.42,4.08-3.59,6.94-3.41a6.28,6.28,0,0,1,5.18,3.35,6.76,6.76,0,0,1-.26,5.64,9.31,9.31,0,0,1-3.08,3.77c-7.71,5.94-17.28,4.77-17.28,4.77a30.41,30.41,0,0,1-13.54-5.76c-.49-.39-2.05-1.45-4.14-3.18a33.91,33.91,0,0,0-4.9-3.36s-5.9-3.07-10.25-3h-2.16c-2.14.3-2.8,1.3-3.85,1.14-1.67-.25-2.52-3.14-2.65-3.56C483.79,111.57,485.47,105.39,490.11,103.42Z"/><text class="cls-9" transform="translate(553.8 129.53)">Sig<tspan class="cls-10" x="45.65" y="0">n</tspan><tspan class="cls-11" x="66.19" y="0">T</tspan><tspan class="cls-12" x="84.06" y="0">r</tspan><tspan x="94.45" y="0">ack</tspan></text><rect class="cls-13" x="914" width="429" height="364" rx="59.5"/><rect class="cls-14" width="429" height="364" rx="59.5"/></g></g></svg>
\ No newline at end of file
diff --git a/Assets/readme/dataset.gif b/Assets/readme/dataset.gif
new file mode 100644
index 0000000000000000000000000000000000000000..21feedf501d51b710aef4371a3579a400ee5e044
Binary files /dev/null and b/Assets/readme/dataset.gif differ
diff --git a/Insights/ModelID.npy b/Insights/ModelID.npy
new file mode 100644
index 0000000000000000000000000000000000000000..e57e8a1c5ae8ab426be9752c008a16ec0fa24da8
Binary files /dev/null and b/Insights/ModelID.npy differ
diff --git a/Insights/SignTrack.h5 b/Insights/SignTrack.h5
new file mode 100644
index 0000000000000000000000000000000000000000..6f4ca5b3e0cd4a1e8baaf6a362845ab3667b8513
Binary files /dev/null and b/Insights/SignTrack.h5 differ
diff --git a/README.md b/README.md
index 69bc80f3ebef650e56aef6594e2554f9319ab6b0..4537a7fa5bddf0b899a25ece375b27d4e4f1285e 100644
--- a/README.md
+++ b/README.md
@@ -1,46 +1,89 @@
-![SignTracklogo](Assets/readme/SignTrack.png "SignTrack")
+<p align="center">
+    <img src="Assets/readme/SignTrack.png">
+</p>
 
 ## In this guide you can learn about
 
 * [What is SignTrack](#What&nbsp;is&nbsp;SignTrack)
 * [How it works](#How&nbsp;it&nbsp;works)
 * [Showcase](#Quick&nbsp;Guide)
+  * [Data&nbsp;Collection](#Data&nbsp;Collection)
+  * [Model&nbsp;Train](#Model&nbsp;Train)
+  * [SignTrack&nbsp;Main](#SignTrack&nbsp;Main)
+  * [Dataset](#Dataset)
 * [Dependances](#Dependances)
 * [Setup](#setup)
 * [Troubleshoting](#troubleshoting)
 
 ## What&nbsp;is&nbsp;SignTrack
 
-SignTrack is a sign language transcriber. It analyzes, processes, and recognizes sign language in real-time, with exceptional accuracy and efficiency. From transforming signs to text to helping you learn sign language by its application in interactive learning, SignTrack helps make computers more open for everyone.
+SignTrack is a sign language transcriber. It analyzes, processes, and recognizes sign language in real-time, with exceptional accuracy and efficiency. From transforming signs to text to helping you learn sign language through its application in interactive learning, SignTrack helps make computers more open for everyone by taking a human-centric approach to computing.
+
+<br />
 
 ## How&nbsp;it&nbsp;works
 
-SignTrack utilizes a state-of-the-art LSTM model that predicts based on a sequence of data, enabling the detection of whole phrases and moving signs. To further improve precision and efficiency, SignTrack has been trained only on key hand and pose landmarks, that have been extracted using MediaPipe. That way also remains accurate on every skin shade.
+SignTrack utilizes a state-of-the-art LSTM model that predicts based on a sequence of data, enabling the detection of whole phrases and moving signs. To further improve precision and efficiency, SignTrack has been trained only on key hand and pose landmarks, that have been extracted using MediaPipe. That way it also remains accurate on every skin shade.
 
-Making the data collecting experience friendlier for the user has been one of our top priorities. That's why we made sure to create an easy-to-use data collection user interface, even for those with minimal coding skills.
+<br />
 
 ## Showcase
 
-### Data Collecting
+## Data&nbsp;Collection
+
+Making the data collecting experience friendlier for the user has been one of our top priorities. That's why we made sure to create an easy-to-use data collection user interface, even for those with minimal coding skills.
 
-The journey starts with data collection. Data plays a fundamental role in creating a great model, that's both accurate and has great performance. The data collection program has been designed to generate data suitable for training the model. Added to that, it has been made to help our users to create an accurate model. With breaks between training sessions and intuitive design, anyone can create a good training dataset.
+Data plays a fundamental role in creating a great model that's both accurate and has great performance. The data collection program has been designed to generate data suitable for training the model. Added to that, it has been made to help our users to create an accurate model. With breaks between training sessions and intuitive design, anyone can create a good training dataset.
 
 Another feature of SignTrack Data Collect is flipping the image to generate data as if you signed with the other hand too! Creating a model that can make equally accurate predictions on both hands.
 
-![](Assets/readme/Collecting1.gif "SignTrack Data Collecting Example 1")  ![](Assets/readme/Collecting2.gif "SignTrack Data Collecting Example 2")
+Privacy is at the center of SignTrack. All of the collected data is free of personal data, like raw images or computer specifications. Making users feel more comfortable exchanging datasets.
+
+<p align="center">
+    <img src="Assets/readme/Collecting1.gif">
+    <img src="Assets/readme/Collecting2.gif">
+</p>
+
+## Model&nbsp;Train
+
+<p align="center">
+    <img img width="300" height="50" src="Assets/readme/AutoTrain.png">
+</p>
 
-### Model Train
+Training a neural network can be quite confusing. From setting training parameters, such as activation functions and the number of neurons on each layer, to the model architecture to the number of epochs, everything in SignTrack is automated, with the power of AutoTrain, requiring minimal or no adjustment from the user while training.
 
-Training a neural network can be confusing. From setting training parameters, such as activation functions and the number of neurons on each layer, to the model architecture to the number of epochs, everything in SignTrack is automated, with the power of AutoTrain, requiring minimal or no adjustment from the user while training.
-AutoTrain makes sure that you get the most out of your dataset. It sets all the training parameters for you while automatically saving the best-performing model.
+AutoTrain makes sure that you get the most out of your dataset. It sets all the training parameters for you while automatically saving the best-performing model. What's more AutoTrain has now been redefined to make for an even faster tracking experience. FastTrack has been implemented right through the model training proccess, a new way of data augmentation, that improves the overall performance of the model, not only regarding FastTrack.
 
-### Sign Track Main
+## SignTrack&nbsp;Main
+
+<p align="center">
+    <img img width="300" height="50" src="Assets/readme/FastTrack.png">
+</p>
 
 Utilizing the created model turned out to be an equally fundamental part of the project. Some people sign faster than the 24 frames that the model requires for making predictions. FastTrack is built into the __SignTrack&nbsp;main.py__ to solve this problem. It randomly duplicates the frames that the model's predictions are based on, until it gets the desired amount of frames. At the same time, making sure that the model makes predictions only on frames which the hands are on the frame, enhancing once again the overall performance.
 
+Optimizations form an uninterapted experience. SignTrack is made to use resources only when needed. For example the SignTrack model is only called to make predictions when the hands have been visible on the scene. While the needed punctuation is only predicted after the user has completed forming the sentence.
+
 The consistent, unique, and identifiable design continues on the main program while keeping on the display the needed information to understand how the model performs on specific signs. That can save a lot of time for those who work on making their SignTrack model.
 
-![](Assets/readme/Detect2.gif "SignTrack Main Program Example 2")
+<p align="center">
+    <img src="Assets/readme/Detect1.gif">
+    <img src="Assets/readme/Detect2.gif">
+</p>
+
+## Dataset
+
+<p align="center">
+    <img img width="600" height="80" src="Assets/readme/dataset.gif">
+</p>
+
+SignTrack comes with an expansive dataset for ASL. The given model, which is trained on this dataset, is recommended to be used on web cameras on or above head height. If the given model does not perform as expected you can always add more data using DataCollect. When creating your dataset remember to make sure to try signing from different angles and positions to create a more generalized model, that will work on a broader spectrum of angles.
+
+### Illustration
+
+All of the illustrations have been designed from the ground up for SignTrack. In the assets folder is a directory with SVG versions of them, apart from the GIFs. You can always tinker them using your favourite open source ilustration tool, like Inkscape.
+
+<br />
 
 ## Dependances
 
@@ -54,6 +97,8 @@ This project has been developed using:
 * Mediapipe
 * Cvzone
 
+<br />
+
 ## Setup
 
 SignTrack uses python poetry to make installation a breeze. Dealing with TensorFlow can often be difficult. We made sure that this is not the case with SignTrack.
@@ -91,6 +136,8 @@ SignTrack uses python poetry to make installation a breeze. Dealing with TensorF
 * Type and run on terminal __poetry&nbsp;shell__
 * Type and run on terminal __python&nbsp;main.py__
 
+<br />
+
 ## Troubleshoting
 
 ### OpenCV errors
@@ -112,3 +159,23 @@ If that does not work try reinstalling OpenCV
 * Then type __pip&nbsp;uninstall&nbsp;opencv-python__
 
 * Finally type __pip&nbsp;install&nbsp;opencv-python==4.1.2.30__
+
+<br />
+
+### Failling to install a package
+
+#### Try installing manually from the poetry env
+
+* Type __poetry&nbsp;shell__ on your terminal on the SignTrack directory
+
+* Type __pip&nbsp;install__ and continue with typing the failed to install package, making sure that it is the matching version
+
+<br />
+
+## Credits
+
+Creating this amazing project would not have been possible without the help of:
+
+* My mentor, Barbara Pongračić, for helping me focus on what is important.
+* My friend, Fotini Tsiami, for assisting me throught the illustration designing proccess.
+* DuckDuckGo and YouTube tutorials, well, for obvious reasons.
diff --git a/model.SignTrack b/model.SignTrack
new file mode 100644
index 0000000000000000000000000000000000000000..a158a36d79a704b8afd4abfe076ee7b7270313de
Binary files /dev/null and b/model.SignTrack differ
diff --git a/model.pack b/model.pack
deleted file mode 100644
index 0c5d4cafdfced3a552cdeb91a76a339f775de85c..0000000000000000000000000000000000000000
Binary files a/model.pack and /dev/null differ
diff --git a/poetry.lock b/poetry.lock
index 95f5cf96914a10b84a22e9b9f7b9365b4f6ed17f..cfabec5bdb808eff680856fdcc38eac58cb549ff 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -89,11 +89,23 @@ python-versions = ">=3.5.0"
 [package.extras]
 unicode_backport = ["unicodedata2"]
 
+[[package]]
+name = "click"
+version = "8.1.0"
+description = "Composable command line interface toolkit"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
 [[package]]
 name = "colorama"
 version = "0.4.4"
 description = "Cross-platform colored terminal text."
-category = "dev"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 
@@ -117,6 +129,18 @@ category = "main"
 optional = false
 python-versions = ">=3.6"
 
+[[package]]
+name = "filelock"
+version = "3.6.0"
+description = "A platform independent file lock."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"]
+testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"]
+
 [[package]]
 name = "flatbuffers"
 version = "1.12"
@@ -229,6 +253,31 @@ numpy = [
     {version = ">=1.19.3", markers = "python_version >= \"3.9\""},
 ]
 
+[[package]]
+name = "huggingface-hub"
+version = "0.4.0"
+description = "Client library to download and publish models on the huggingface.co hub"
+category = "main"
+optional = false
+python-versions = ">=3.6.0"
+
+[package.dependencies]
+filelock = "*"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+packaging = ">=20.9"
+pyyaml = "*"
+requests = "*"
+tqdm = "*"
+typing-extensions = ">=3.7.4.3"
+
+[package.extras]
+tensorflow = ["tensorflow"]
+testing = ["pytest", "datasets"]
+torch = ["torch"]
+all = ["pytest", "datasets", "black (>=20.8b1)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"]
+dev = ["pytest", "datasets", "black (>=20.8b1)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"]
+quality = ["black (>=20.8b1)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"]
+
 [[package]]
 name = "idna"
 version = "3.3"
@@ -570,6 +619,22 @@ category = "main"
 optional = false
 python-versions = "*"
 
+[[package]]
+name = "pyyaml"
+version = "6.0"
+description = "YAML parser and emitter for Python"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "regex"
+version = "2022.3.15"
+description = "Alternative regular expression module, to replace re."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
 [[package]]
 name = "requests"
 version = "2.27.1"
@@ -614,6 +679,21 @@ python-versions = ">=3.6,<4"
 [package.dependencies]
 pyasn1 = ">=0.1.3"
 
+[[package]]
+name = "sacremoses"
+version = "0.0.49"
+description = "SacreMoses"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+click = "*"
+joblib = "*"
+regex = "*"
+six = "*"
+tqdm = "*"
+
 [[package]]
 name = "scikit-learn"
 version = "1.0.2"
@@ -645,6 +725,14 @@ python-versions = ">=3.7"
 [package.dependencies]
 numpy = ">=1.16.5"
 
+[[package]]
+name = "sentencepiece"
+version = "0.1.96"
+description = "SentencePiece python wrapper"
+category = "main"
+optional = false
+python-versions = "*"
+
 [[package]]
 name = "setuptools-scm"
 version = "6.4.2"
@@ -769,6 +857,18 @@ category = "main"
 optional = false
 python-versions = ">=3.6"
 
+[[package]]
+name = "tokenizers"
+version = "0.11.6"
+description = "Fast and Customizable Tokenizers"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.extras]
+docs = ["sphinx", "sphinx-rtd-theme", "setuptools-rust"]
+testing = ["pytest", "requests", "numpy", "datasets"]
+
 [[package]]
 name = "toml"
 version = "0.10.2"
@@ -785,6 +885,93 @@ category = "main"
 optional = false
 python-versions = ">=3.7"
 
+[[package]]
+name = "torch"
+version = "1.11.0"
+description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
+category = "main"
+optional = false
+python-versions = ">=3.7.0"
+
+[package.dependencies]
+typing-extensions = "*"
+
+[[package]]
+name = "tqdm"
+version = "4.63.1"
+description = "Fast, Extensible Progress Meter"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+dev = ["py-make (>=0.1.0)", "twine", "wheel"]
+notebook = ["ipywidgets (>=6)"]
+telegram = ["requests"]
+
+[[package]]
+name = "transformers"
+version = "4.17.0"
+description = "State-of-the-art Natural Language Processing for TensorFlow 2.0 and PyTorch"
+category = "main"
+optional = false
+python-versions = ">=3.6.0"
+
+[package.dependencies]
+filelock = "*"
+huggingface-hub = ">=0.1.0,<1.0"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+numpy = ">=1.17"
+packaging = ">=20.0"
+pyyaml = ">=5.1"
+regex = "!=2019.12.17"
+requests = "*"
+sacremoses = "*"
+tokenizers = ">=0.11.1,<0.11.3 || >0.11.3"
+tqdm = ">=4.27"
+
+[package.extras]
+all = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8)", "jaxlib (>=0.1.65)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "tokenizers (>=0.11.1,!=0.11.3)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)"]
+audio = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"]
+codecarbon = ["codecarbon (==1.2.0)"]
+deepspeed = ["deepspeed (>=0.5.9)"]
+dev = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8)", "jaxlib (>=0.1.65)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "tokenizers (>=0.11.1,!=0.11.3)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "faiss-cpu", "cookiecutter (==1.7.2)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "scikit-learn"]
+dev-tensorflow = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "faiss-cpu", "cookiecutter (==1.7.2)", "tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "tokenizers (>=0.11.1,!=0.11.3)", "pillow", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"]
+dev-torch = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "faiss-cpu", "cookiecutter (==1.7.2)", "torch (>=1.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "tokenizers (>=0.11.1,!=0.11.3)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
+docs = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8)", "jaxlib (>=0.1.65)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "tokenizers (>=0.11.1,!=0.11.3)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)"]
+fairscale = ["fairscale (>0.3)"]
+flax = ["jax (>=0.2.8)", "jaxlib (>=0.1.65)", "flax (>=0.3.5)", "optax (>=0.0.8)"]
+flax-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"]
+ftfy = ["ftfy"]
+integrations = ["optuna", "ray", "sigopt"]
+ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)"]
+modelcreation = ["cookiecutter (==1.7.2)"]
+onnx = ["onnxconverter-common", "tf2onnx", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
+onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
+optuna = ["optuna"]
+quality = ["black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "GitPython (<3.1.19)"]
+ray = ["ray"]
+retrieval = ["faiss-cpu", "datasets"]
+sagemaker = ["sagemaker (>=2.31.0)"]
+sentencepiece = ["sentencepiece (>=0.1.91,!=0.1.92)", "protobuf"]
+serving = ["pydantic", "uvicorn", "fastapi", "starlette"]
+sigopt = ["sigopt"]
+sklearn = ["scikit-learn"]
+speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"]
+testing = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "faiss-cpu", "cookiecutter (==1.7.2)"]
+tf = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx"]
+tf-cpu = ["tensorflow-cpu (>=2.3)", "onnxconverter-common", "tf2onnx"]
+tf-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"]
+timm = ["timm"]
+tokenizers = ["tokenizers (>=0.11.1,!=0.11.3)"]
+torch = ["torch (>=1.0)"]
+torch-speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"]
+torchhub = ["filelock", "huggingface-hub (>=0.1.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.0)", "tokenizers (>=0.11.1,!=0.11.3)", "tqdm (>=4.27)"]
+vision = ["pillow"]
+
 [[package]]
 name = "typing-extensions"
 version = "3.7.4.3"
@@ -848,7 +1035,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
 [metadata]
 lock-version = "1.1"
 python-versions = "^3.7"
-content-hash = "29cf07116fe53f6c596d81b8bea6ecc58a45bb41b22013649dc5ddeaf5a4e08a"
+content-hash = "ee3e416ae99b88ae139ea5598e58dd9943413328404e0ab375ce97e9208c44be"
 
 [metadata.files]
 absl-py = [
@@ -887,6 +1074,10 @@ charset-normalizer = [
     {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
     {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
 ]
+click = [
+    {file = "click-8.1.0-py3-none-any.whl", hash = "sha256:19a4baa64da924c5e0cd889aba8e947f280309f1a2ce0947a3e3a7bcb7cc72d6"},
+    {file = "click-8.1.0.tar.gz", hash = "sha256:977c213473c7665d3aa092b41ff12063227751c41d7b17165013e10069cc5cd2"},
+]
 colorama = [
     {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
     {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
@@ -898,6 +1089,10 @@ cycler = [
     {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"},
     {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"},
 ]
+filelock = [
+    {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"},
+    {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"},
+]
 flatbuffers = [
     {file = "flatbuffers-1.12-py2.py3-none-any.whl", hash = "sha256:9e9ef47fa92625c4721036e7c4124182668dc6021d9e7c73704edd395648deb9"},
     {file = "flatbuffers-1.12.tar.gz", hash = "sha256:63bb9a722d5e373701913e226135b28a6f6ac200d5cc7b4d919fa38d73b44610"},
@@ -986,6 +1181,10 @@ h5py = [
     {file = "h5py-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:1cdfd1c5449ca1329d152f0b66830e93226ebce4f5e07dd8dc16bfc2b1a49d7b"},
     {file = "h5py-3.1.0.tar.gz", hash = "sha256:1e2516f190652beedcb8c7acfa1c6fa92d99b42331cbef5e5c7ec2d65b0fc3c2"},
 ]
+huggingface-hub = [
+    {file = "huggingface_hub-0.4.0-py3-none-any.whl", hash = "sha256:808021af1ce1111104973ae54d81738eaf40be6d1e82fc6bdedb82f81c6206e7"},
+    {file = "huggingface_hub-0.4.0.tar.gz", hash = "sha256:f0e3389f8988eb7781b17de520ae7fd0aa50d9823534e3ae55344d943a88ac87"},
+]
 idna = [
     {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
     {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
@@ -1353,6 +1552,117 @@ pytz = [
     {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
     {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
 ]
+pyyaml = [
+    {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+    {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+    {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+    {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+    {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+    {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+    {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+    {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+    {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+    {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+    {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+    {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+    {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+    {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+    {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+    {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+regex = [
+    {file = "regex-2022.3.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:42eb13b93765c6698a5ab3bcd318d8c39bb42e5fa8a7fcf7d8d98923f3babdb1"},
+    {file = "regex-2022.3.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9beb03ff6fe509d6455971c2489dceb31687b38781206bcec8e68bdfcf5f1db2"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0a5a1fdc9f148a8827d55b05425801acebeeefc9e86065c7ac8b8cc740a91ff"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb374a2a4dba7c4be0b19dc7b1adc50e6c2c26c3369ac629f50f3c198f3743a4"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c33ce0c665dd325200209340a88438ba7a470bd5f09f7424e520e1a3ff835b52"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04c09b9651fa814eeeb38e029dc1ae83149203e4eeb94e52bb868fadf64852bc"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab5d89cfaf71807da93c131bb7a19c3e19eaefd613d14f3bce4e97de830b15df"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e2630ae470d6a9f8e4967388c1eda4762706f5750ecf387785e0df63a4cc5af"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:df037c01d68d1958dad3463e2881d3638a0d6693483f58ad41001aa53a83fcea"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:940570c1a305bac10e8b2bc934b85a7709c649317dd16520471e85660275083a"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7f63877c87552992894ea1444378b9c3a1d80819880ae226bb30b04789c0828c"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3e265b388cc80c7c9c01bb4f26c9e536c40b2c05b7231fbb347381a2e1c8bf43"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:058054c7a54428d5c3e3739ac1e363dc9347d15e64833817797dc4f01fb94bb8"},
+    {file = "regex-2022.3.15-cp310-cp310-win32.whl", hash = "sha256:76435a92e444e5b8f346aed76801db1c1e5176c4c7e17daba074fbb46cb8d783"},
+    {file = "regex-2022.3.15-cp310-cp310-win_amd64.whl", hash = "sha256:174d964bc683b1e8b0970e1325f75e6242786a92a22cedb2a6ec3e4ae25358bd"},
+    {file = "regex-2022.3.15-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e1d8ed9e61f37881c8db383a124829a6e8114a69bd3377a25aecaeb9b3538f8"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b52771f05cff7517f7067fef19ffe545b1f05959e440d42247a17cd9bddae11b"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:673f5a393d603c34477dbad70db30025ccd23996a2d0916e942aac91cc42b31a"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8923e1c5231549fee78ff9b2914fad25f2e3517572bb34bfaa3aea682a758683"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764e66a0e382829f6ad3bbce0987153080a511c19eb3d2f8ead3f766d14433ac"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd00859291658fe1fda48a99559fb34da891c50385b0bfb35b808f98956ef1e7"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa2ce79f3889720b46e0aaba338148a1069aea55fda2c29e0626b4db20d9fcb7"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:34bb30c095342797608727baf5c8aa122406aa5edfa12107b8e08eb432d4c5d7"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:25ecb1dffc5e409ca42f01a2b2437f93024ff1612c1e7983bad9ee191a5e8828"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:aa5eedfc2461c16a092a2fabc5895f159915f25731740c9152a1b00f4bcf629a"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:7d1a6e403ac8f1d91d8f51c441c3f99367488ed822bda2b40836690d5d0059f5"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:3e4d710ff6539026e49f15a3797c6b1053573c2b65210373ef0eec24480b900b"},
+    {file = "regex-2022.3.15-cp36-cp36m-win32.whl", hash = "sha256:0100f0ded953b6b17f18207907159ba9be3159649ad2d9b15535a74de70359d3"},
+    {file = "regex-2022.3.15-cp36-cp36m-win_amd64.whl", hash = "sha256:f320c070dea3f20c11213e56dbbd7294c05743417cde01392148964b7bc2d31a"},
+    {file = "regex-2022.3.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fc8c7958d14e8270171b3d72792b609c057ec0fa17d507729835b5cff6b7f69a"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ca6dcd17f537e9f3793cdde20ac6076af51b2bd8ad5fe69fa54373b17b48d3c"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0214ff6dff1b5a4b4740cfe6e47f2c4c92ba2938fca7abbea1359036305c132f"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a98ae493e4e80b3ded6503ff087a8492db058e9c68de371ac3df78e88360b374"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b1cc70e31aacc152a12b39245974c8fccf313187eead559ee5966d50e1b5817"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4829db3737480a9d5bfb1c0320c4ee13736f555f53a056aacc874f140e98f64"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:303b15a3d32bf5fe5a73288c316bac5807587f193ceee4eb6d96ee38663789fa"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:dc7b7c16a519d924c50876fb152af661a20749dcbf653c8759e715c1a7a95b18"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ce3057777a14a9a1399b81eca6a6bfc9612047811234398b84c54aeff6d536ea"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:48081b6bff550fe10bcc20c01cf6c83dbca2ccf74eeacbfac240264775fd7ecf"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dcbb7665a9db9f8d7642171152c45da60e16c4f706191d66a1dc47ec9f820aed"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c155a1a80c5e7a8fa1d9bb1bf3c8a953532b53ab1196092749bafb9d3a7cbb60"},
+    {file = "regex-2022.3.15-cp37-cp37m-win32.whl", hash = "sha256:04b5ee2b6d29b4a99d38a6469aa1db65bb79d283186e8460542c517da195a8f6"},
+    {file = "regex-2022.3.15-cp37-cp37m-win_amd64.whl", hash = "sha256:797437e6024dc1589163675ae82f303103063a0a580c6fd8d0b9a0a6708da29e"},
+    {file = "regex-2022.3.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8afcd1c2297bc989dceaa0379ba15a6df16da69493635e53431d2d0c30356086"},
+    {file = "regex-2022.3.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0066a6631c92774391f2ea0f90268f0d82fffe39cb946f0f9c6b382a1c61a5e5"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8248f19a878c72d8c0a785a2cd45d69432e443c9f10ab924c29adda77b324ae"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d1f3ea0d1924feb4cf6afb2699259f658a08ac6f8f3a4a806661c2dfcd66db1"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:794a6bc66c43db8ed06698fc32aaeaac5c4812d9f825e9589e56f311da7becd9"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d1445824944e642ffa54c4f512da17a953699c563a356d8b8cbdad26d3b7598"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f553a1190ae6cd26e553a79f6b6cfba7b8f304da2071052fa33469da075ea625"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:75a5e6ce18982f0713c4bac0704bf3f65eed9b277edd3fb9d2b0ff1815943327"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f16cf7e4e1bf88fecf7f41da4061f181a6170e179d956420f84e700fb8a3fd6b"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dad3991f0678facca1a0831ec1ddece2eb4d1dd0f5150acb9440f73a3b863907"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:491fc754428514750ab21c2d294486223ce7385446f2c2f5df87ddbed32979ae"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:6504c22c173bb74075d7479852356bb7ca80e28c8e548d4d630a104f231e04fb"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:01c913cf573d1da0b34c9001a94977273b5ee2fe4cb222a5d5b320f3a9d1a835"},
+    {file = "regex-2022.3.15-cp38-cp38-win32.whl", hash = "sha256:029e9e7e0d4d7c3446aa92474cbb07dafb0b2ef1d5ca8365f059998c010600e6"},
+    {file = "regex-2022.3.15-cp38-cp38-win_amd64.whl", hash = "sha256:947a8525c0a95ba8dc873191f9017d1b1e3024d4dc757f694e0af3026e34044a"},
+    {file = "regex-2022.3.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:591d4fba554f24bfa0421ba040cd199210a24301f923ed4b628e1e15a1001ff4"},
+    {file = "regex-2022.3.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9809404528a999cf02a400ee5677c81959bc5cb938fdc696b62eb40214e3632"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f08a7e4d62ea2a45557f561eea87c907222575ca2134180b6974f8ac81e24f06"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a86cac984da35377ca9ac5e2e0589bd11b3aebb61801204bd99c41fac516f0d"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:286908cbe86b1a0240a867aecfe26a439b16a1f585d2de133540549831f8e774"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b7494df3fdcc95a1f76cf134d00b54962dd83189520fd35b8fcd474c0aa616d"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b1ceede92400b3acfebc1425937454aaf2c62cd5261a3fabd560c61e74f6da3"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0317eb6331146c524751354ebef76a7a531853d7207a4d760dfb5f553137a2a4"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c144405220c5ad3f5deab4c77f3e80d52e83804a6b48b6bed3d81a9a0238e4c"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b2e24f3ae03af3d8e8e6d824c891fea0ca9035c5d06ac194a2700373861a15c"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f2c53f3af011393ab5ed9ab640fa0876757498aac188f782a0c620e33faa2a3d"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:060f9066d2177905203516c62c8ea0066c16c7342971d54204d4e51b13dfbe2e"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:530a3a16e57bd3ea0dff5ec2695c09632c9d6c549f5869d6cf639f5f7153fb9c"},
+    {file = "regex-2022.3.15-cp39-cp39-win32.whl", hash = "sha256:78ce90c50d0ec970bd0002462430e00d1ecfd1255218d52d08b3a143fe4bde18"},
+    {file = "regex-2022.3.15-cp39-cp39-win_amd64.whl", hash = "sha256:c5adc854764732dbd95a713f2e6c3e914e17f2ccdc331b9ecb777484c31f73b6"},
+    {file = "regex-2022.3.15.tar.gz", hash = "sha256:0a7b75cc7bb4cc0334380053e4671c560e31272c9d2d5a6c4b8e9ae2c9bd0f82"},
+]
 requests = [
     {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
     {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
@@ -1366,6 +1676,10 @@ rsa = [
     {file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"},
     {file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
 ]
+sacremoses = [
+    {file = "sacremoses-0.0.49-py3-none-any.whl", hash = "sha256:33ca6d4e125271b9201cc7fdf7f03f3ffdd358ee6dd8079c0432811d82da5377"},
+    {file = "sacremoses-0.0.49.tar.gz", hash = "sha256:c2ecd3a50d1c09a26253ad84b0b89e9e3a28a023455b72a2197cfeab27ff5141"},
+]
 scikit-learn = [
     {file = "scikit-learn-1.0.2.tar.gz", hash = "sha256:b5870959a5484b614f26d31ca4c17524b1b0317522199dc985c3b4256e030767"},
     {file = "scikit_learn-1.0.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:da3c84694ff693b5b3194d8752ccf935a665b8b5edc33a283122f4273ca3e687"},
@@ -1421,6 +1735,50 @@ scipy = [
     {file = "scipy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a5193a098ae9f29af283dcf0041f762601faf2e595c0db1da929875b7570353f"},
     {file = "scipy-1.6.1.tar.gz", hash = "sha256:c4fceb864890b6168e79b0e714c585dbe2fd4222768ee90bc1aa0f8218691b11"},
 ]
+sentencepiece = [
+    {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc969e6694fb27fba7cee2953f350804faf03913f25ae1ee713a7b8a1bc08018"},
+    {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36e9ff61e7b67c5b7ee96733613622620b4802fc8cf188a4dbc1f355b03dde02"},
+    {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9e9fe8094ca57549d801e9a2017ac5c24108bbf485ea4f8994a72e8e96ee135"},
+    {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b77d27f59d515c43b61745b8173fbe7c7b3014b14b3702a75bf1793471e7def6"},
+    {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dac8c2ad02b5ebc1179c0a14cbc7d7c6f4fd73d4dd51820626402d0aefc974e"},
+    {file = "sentencepiece-0.1.96-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:e8ec5bb6777e2060e1499750c50e1b69dca5a0f80f90f2c66656c5f3e5244593"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:99ea2d9db19e63a2d17d5dc64f9ace83fb9308a735be05a1aaf98eb4b496fba7"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeb090ad462833df03af1debce4ae607a2766ef861f992003ad0c56d074ab805"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8c90df663cd9759b2cf8dd29998b63140ac39e51ada2e739dc13bdac0b4f001"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26d20d713b3ba1b7a19205336afb1e93a4327c372b2f795e907b8dc2315ac92e"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5388882bb24d083f6cc8cffc5c435f3694a7772b018e06ea6fd84d1044009efb"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a92e1932ee8fd500680ccbe1bf53eb33228f4c9d6524ed6f300bcc80ac359f27"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-win32.whl", hash = "sha256:bedf0355117fb4e9b1fc9fc92b4d5ee743a7d468be9f6196e3b94447710ea589"},
+    {file = "sentencepiece-0.1.96-cp36-cp36m-win_amd64.whl", hash = "sha256:4997c7ccf2ae462320250314aa5709a88d8a09fa271d073458a07bebf33f8e7c"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:a697257a2cd7581732d7741a8d32a06927f0311c3d277dbc47fa1043350c9d17"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff7d752a7f82d87711ec1a95c2262cb74f98be5b457f0300d81a1aefe5be2a95"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e61e0757e49c306fff78ea75d6b75773418fe22214b4a460959203be934e834"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef59ba19340dc1d002ce5713b911c0ef23c577b08f8ed57998ee3c8e62c5bf6e"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89c038da7f827a6e2ca4c73aeb4e4b25b99d981ce47dd61b04d446c8200cba1e"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d954d25a8705f972e8bfc1dea5464d7e697dd6f4ade092f1a487387e6d6c829a"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-win32.whl", hash = "sha256:fd907a8f744e5337de7fc532dd800c4416b571ea47f8c3c66be10cd1bc67c925"},
+    {file = "sentencepiece-0.1.96-cp37-cp37m-win_amd64.whl", hash = "sha256:335bf84d72112cc91f3c3b691d61802fc963503b7772fd8280d20368048b8f3e"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:e811984b0908c14c56de7d8226fdd494d87a7ccb75af8ac3a07423037aaafc35"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8179785883b556cd517416cdbda6244745414b00ec83132cfe1d26000971f3ae"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:466e381f0a812da8fda97a9707498cef3210ea8385a3421bcbadcb5384063969"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8cb24d8d0b2f8b7463815a59183eb81ec1d7a06e3217bed456063f3303eddfb"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e88354b61f59dfdeb41023f7be8ae31dc627c2dc2dacbc2de8b2d82a0997135c"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a336575463d75d3aac1f7e32470b8998643ccd9a73786bd726f6b0470520b6b4"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-win32.whl", hash = "sha256:81bb77ba3651114943b2f8f77829cf764137dff06e38f4bf7fa43efea12c7f84"},
+    {file = "sentencepiece-0.1.96-cp38-cp38-win_amd64.whl", hash = "sha256:eba0471ab0bb2e07ed06d91ecf5185d402c83d194155a41d8e2aa547d187712e"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:78e18d9106c36dcca929e18fd2c412378deac661d47fa3ee25defc55eef8a215"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c24c1d9405b2148184ff27c062493d5e3be5c144575f95b5a0d7c660a515af"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940a6999c7d3f55e9d7b194fd5e1f41a7dbed26d3519fb95333216292a39599e"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:384148cead5cdab34a4d74fe1fb6a5a8abaafed25eaa4a7698b49dd9482e4c4e"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c703e68ea192e45b65c5d5836f6980849d828a18da4189899d7150fad82dc9e"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d501713a8396193883aa526f48dc609f5f031a5df1afbafa561cf9ab492ffc76"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-win32.whl", hash = "sha256:b8b1dd2712f8a7de5b4c8ec912e6c041d25750bf03e1ce325cdba43bae0944ae"},
+    {file = "sentencepiece-0.1.96-cp39-cp39-win_amd64.whl", hash = "sha256:d45e3f78e746aa161bc9f5a31c6a2839c512101113a4065f4d2e7a3ab8198d8c"},
+    {file = "sentencepiece-0.1.96-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5513298d62fe63dd0862d08a6eb52a9aa3537006f597f2386184e3f95bb88889"},
+    {file = "sentencepiece-0.1.96-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dadccb2e49244b6e64b4527d13ec14d5e094a90b41cf9b963e457e64182f1941"},
+    {file = "sentencepiece-0.1.96-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48c6d13b3bfff08060c138248e85df60f6fad11135ad7a8fc2ef6005aacca839"},
+    {file = "sentencepiece-0.1.96.tar.gz", hash = "sha256:9bdf097d5bd1d8ce42dfee51f6ff05f5578b96e48c6f6006aa4eff69edfa3639"},
+]
 setuptools-scm = [
     {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"},
     {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"},
@@ -1467,6 +1825,46 @@ threadpoolctl = [
     {file = "threadpoolctl-3.0.0-py3-none-any.whl", hash = "sha256:4fade5b3b48ae4b1c30f200b28f39180371104fccc642e039e0f2435ec8cc211"},
     {file = "threadpoolctl-3.0.0.tar.gz", hash = "sha256:d03115321233d0be715f0d3a5ad1d6c065fe425ddc2d671ca8e45e9fd5d7a52a"},
 ]
+tokenizers = [
+    {file = "tokenizers-0.11.6-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:c24f3e0e69edf015efab6bea0a24d45eb19f477106d00a739c19d2a02f6085fc"},
+    {file = "tokenizers-0.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c5a786fe12a4c1782337abc818fc48ca84e07f8cb0eeab263a27fcd30f7fc6f"},
+    {file = "tokenizers-0.11.6-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f7b82aaedb24e0a4dcd8fe77a79de9a0acf43db8ae173cdb4eca1e767566b47"},
+    {file = "tokenizers-0.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d8ea3a05b593e5744c4ad0e6e2cbba6f82588c302d663855316c1861c09557"},
+    {file = "tokenizers-0.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fde9a1e7d18caddff3ac13baf4e31235688b0db2ba42bbc8179dc878327560a"},
+    {file = "tokenizers-0.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46a763d1f43f46448e41884356f105a2f067b6e573c7e0c67d8f93512304b22c"},
+    {file = "tokenizers-0.11.6-cp310-cp310-win32.whl", hash = "sha256:6bc5cc6d5b17bf8222049a2c97bcc117974793e37fb2e42b8fb04b2ef984d165"},
+    {file = "tokenizers-0.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:3c1ad5d230bdd6a3f63bbffd16a9fdea6a049ceb6d225e4d70a2664853f40aaf"},
+    {file = "tokenizers-0.11.6-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:44697b08469dfe3265a851f87ad41c7f04efa511ada8182b6b08aa809765dcb8"},
+    {file = "tokenizers-0.11.6-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0975b9f06f982580909f9fa769baf58b806ab2d099daccc43dc95d60bf56817a"},
+    {file = "tokenizers-0.11.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0deaa700f9e442ed4bb4fe2c6482979b3709772bcce2dd7b89dc586ec39ce2e"},
+    {file = "tokenizers-0.11.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34ac8450ad93e4dae1c72b7ad6c6a74d2941a68beb25df25d05b2b371267daba"},
+    {file = "tokenizers-0.11.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38420ddd3b47d6f13be20bfecd928f4301c8cbebd1a752a7436c22fe01b3f6c4"},
+    {file = "tokenizers-0.11.6-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:c08d5745fb5852adeeffc6bfbe13b77cd95d3f49e7e6129537858c5fb9b7142c"},
+    {file = "tokenizers-0.11.6-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:820a4cc3ef39c556c6f9495ce7cbd169098ca352e073ed3b34d6b74b53df2fbb"},
+    {file = "tokenizers-0.11.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c72383a918e9fef9c2bf4666a961f3b312361fb027165b4446ff333441ebf91"},
+    {file = "tokenizers-0.11.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6259833c189e36c29e84a853b9503028324a3b176a2ae3980c815456d326b652"},
+    {file = "tokenizers-0.11.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79074927fc9efaf13b3accd53246e50ade37550920077411ab55bd5ed4944153"},
+    {file = "tokenizers-0.11.6-cp37-cp37m-win32.whl", hash = "sha256:7ed928ac19a3397af6fe3716b313fb13dcaf54978f0fc159eeabaff8e35e5c92"},
+    {file = "tokenizers-0.11.6-cp37-cp37m-win_amd64.whl", hash = "sha256:6840554a8cac1196db627d42edbf77f4b5decf6ce6fa9ca073efaaa2cff887a6"},
+    {file = "tokenizers-0.11.6-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:216745a6e92eb52d99b56123e6fece59e0dcf7bd1444f42bee09e1f02c89bbec"},
+    {file = "tokenizers-0.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e6d02076160d60966d6b2b320744affe6b846ee10a37d1c0222b6ca9e640bdb8"},
+    {file = "tokenizers-0.11.6-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7074162348a7784faccbea18cf814138483ce0c47eb17dc482cbc4bbbde8a00c"},
+    {file = "tokenizers-0.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c5ae264b75b7355db2bc3f34e8e3eb608fcca799ff9a109f3d61e4d9614f947"},
+    {file = "tokenizers-0.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d393eb6b79ab972e6ebede2aa330903913cf380f6fe975d64a92fca15b5d8579"},
+    {file = "tokenizers-0.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:251978daef3b57257bd313df7ef705aacc6cd5831644f6e2e8a42e2c7b7c4a30"},
+    {file = "tokenizers-0.11.6-cp38-cp38-win32.whl", hash = "sha256:fd3fccc801b7621eca8dfd876494fad0b00bd43fc73afdc1c11d6be3c9136f78"},
+    {file = "tokenizers-0.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:3c1c6e10f655e0f57b9bb9a64ac4b7ea70d20a73f8013f8bd38d21d64d45d96a"},
+    {file = "tokenizers-0.11.6-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:809b506a6e9f2f6cba86cfe642c1d1e82cbd758574bdc1207efe07229d6fa4d4"},
+    {file = "tokenizers-0.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b3829ad386747760e7d805c9ffd5cb5a9309679467029eea3162fb76c8c89dc"},
+    {file = "tokenizers-0.11.6-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b9a34bd33d866862f45bfc4a409563132a0b6af5951e08f3ccfde36152cd7683"},
+    {file = "tokenizers-0.11.6-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e75efa0275665ca30536c75dc5b4d33492fc40ae40c90d9085bdcdb99e060044"},
+    {file = "tokenizers-0.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afc3c76268cdef4567f84a19d9c06fdd697b22f5142d1af18254ec70703db7b"},
+    {file = "tokenizers-0.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47878a49211f8df63f7ec7de62f13b1c65e68be501f6a98b28f4bbb8d3390f25"},
+    {file = "tokenizers-0.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d4f67758f62d64410e86d548c2c38ca5e59310ca38c18e8239637213c49e2fb"},
+    {file = "tokenizers-0.11.6-cp39-cp39-win32.whl", hash = "sha256:468c3e3f414a532924fa277a58807e127a27d2a56b04113540ea755fc5ca9ba8"},
+    {file = "tokenizers-0.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b28966c68a2cdecd5120f4becea159eebe0335b8202e21e292eb381031026edc"},
+    {file = "tokenizers-0.11.6.tar.gz", hash = "sha256:562b2022faf0882586c915385620d1f11798fc1b32bac55353a530132369a6d0"},
+]
 toml = [
     {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
     {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
@@ -1475,6 +1873,35 @@ tomli = [
     {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"},
     {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"},
 ]
+torch = [
+    {file = "torch-1.11.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:62052b50fffc29ca7afc0c04ef8206b6f1ca9d10629cb543077e12967e8d0398"},
+    {file = "torch-1.11.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:866bfba29ac98dec35d893d8e17eaec149d0ac7a53be7baae5c98069897db667"},
+    {file = "torch-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:951640fb8db308a59d9b510e7d1ad910aff92913323bbe4bc75435347ddd346d"},
+    {file = "torch-1.11.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:5d77b5ece78fdafa5c7f42995ff9474399d22571cd6b2de21a5d666306a2ff8c"},
+    {file = "torch-1.11.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:b5a38682769b544c875ecc34bcb81fbad5c922139b61319aacffcfd8a32f528c"},
+    {file = "torch-1.11.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f82d77695a60626f2b7382d85bc566de8a6b3e50d32080755abc040db802e419"},
+    {file = "torch-1.11.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b96654d42566080a134e784705f33f8536b3b95b5dcde357ed7879b1692a5f78"},
+    {file = "torch-1.11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8ee7c2e8d7f7020d5bfbc1bb91b9591044c26bbd0cee5e4f694cfd7ed8649260"},
+    {file = "torch-1.11.0-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:6860b1d1bf0bb0b67a6bd47f85a0e4c825b518eea13b5d6101999dbbcbd5bc0c"},
+    {file = "torch-1.11.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4322aa29f50da7f404db06cdf30896ea67b09f673af4a985afc7162bc897864d"},
+    {file = "torch-1.11.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e4d2e0ddd652f30e94cff750220324ec45705d4ecc69658f773b3cb1c7a28dd0"},
+    {file = "torch-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:34ce5ea4d8d85da32cdbadb50d4585106901e9f8a3527991daa70c13a09de1f7"},
+    {file = "torch-1.11.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0ccc85cd06227a3edf809e2c795fd5762c3d4e8a38b5c9f744c6e7cf841361bb"},
+    {file = "torch-1.11.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c1554e49d74f1b2c3e7202d77056ba2dd7465437585bac64062b580f714a44e9"},
+    {file = "torch-1.11.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:58c7814502b1c129a650d7092033bbb0bbd64faf1a7941631aaa1aeaddc37570"},
+    {file = "torch-1.11.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:831cf588f01dda9409e75576741d2823453990dee2983d670f2584b37a01adf7"},
+    {file = "torch-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:44a1d02fd20f827f0f36dc26fdcfc45e793806a6ad52769a22260655a77a4369"},
+    {file = "torch-1.11.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:50fd9bf85c578c871c28f1cb0ace9dfc6024401c7f399b174fb0f370899f4454"},
+    {file = "torch-1.11.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:0e48af66ad755f0f9c5f2664028a414f57c49d6adc37e77e06fe0004da4edb61"},
+]
+tqdm = [
+    {file = "tqdm-4.63.1-py2.py3-none-any.whl", hash = "sha256:6461b009d6792008d0000e1b0c7ca50195ec78c0e808a3a6b668a56a3236c3a5"},
+    {file = "tqdm-4.63.1.tar.gz", hash = "sha256:4230a49119a416c88cc47d0d2d32d5d90f1a282d5e497d49801950704e49863d"},
+]
+transformers = [
+    {file = "transformers-4.17.0-py3-none-any.whl", hash = "sha256:5c7d1955693ebf4a69a0fa700b2ef730232d5d7c1528e15d44c1d473b38f57b8"},
+    {file = "transformers-4.17.0.tar.gz", hash = "sha256:986fd59255460555b893a2b1827b9b8dd4e5cd6343e4409d18539208f69fb51b"},
+]
 typing-extensions = [
     {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"},
     {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"},
diff --git a/pyproject.toml b/pyproject.toml
index cbe03615b43164417732b97e399d40201f5ef61a..ab807256264bbc8ce9973eee7fe1935e57df2cb4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -13,6 +13,9 @@ sklearn = "^0.0"
 matplotlib = "^3.5.1"
 pandas = "1.1.1"
 cvzone = "^1.5.6"
+sentencepiece = "^0.1.96"
+transformers = "^4.17.0"
+torch = "^1.11.0"
 
 [tool.poetry.dev-dependencies]
 pytest = "^5.2"
diff --git a/signtrack/Packr.py b/signtrack/Packr.py
index 9b09e82398c310ddc4ed92758ecd41ef78ddbafc..abf9a813f21c9c9cfaacf6fd6e14723122ec0bf3 100644
--- a/signtrack/Packr.py
+++ b/signtrack/Packr.py
@@ -7,7 +7,11 @@ from os.path import exists
 
 
 def ModelPack(mpath, signs):
-    filename = 'model.pack'
+    '''
+    Conbines the model with the feature labels 
+    in one file
+    '''
+    filename = 'model.SignTrack'
     if exists(filename):
         try:
             os.remove(filename)
@@ -20,7 +24,11 @@ def ModelPack(mpath, signs):
 
 
 def ModelIDUnpack():
-    filename = 'model.pack'
+    '''
+    Extracts the model and returns the signs the model
+    is able to predict
+    '''
+    filename = 'model.SignTrack'
     with zipfile.ZipFile(filename, 'r') as file:
         file.extractall('tmp/')
         return "tmp/Insights/ModelID.npy"
diff --git a/signtrack/SignTrack_DataColect.py b/signtrack/SignTrack_DataColect.py
index f06fa888d984d2b9d7f52dd398b39080a6246588..a0049c57066d7f241c9f52565302b9d614039122 100644
--- a/signtrack/SignTrack_DataColect.py
+++ b/signtrack/SignTrack_DataColect.py
@@ -9,10 +9,10 @@ from pathlib import Path
 from essentials import mediapipe_detection, extract_keypoints, display_styled_landmarks
 
 # Dataset export location, Changing requires changes in Signtrack_Train
-data_path = os.path.join('TEST')
+data_path = os.path.join('Dataset')
 
 # Actions that we try to detect, Changing requires changes in Signtrack_Train
-signs = np.array(["hello"])
+signs = np.array(["sorry"])
 
 # Number of sequences to be collected for each action
 no_datapacks = 25
@@ -21,7 +21,7 @@ no_datapacks = 25
 seq_length = 24
 
 # Choose camera input
-cap = cv2.VideoCapture(0)
+cap = cv2.VideoCapture(1)
 
 # Resize camera input
 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
diff --git a/signtrack/SignTrack_Train.py b/signtrack/SignTrack_Train.py
index 5a54a5964a7efe46f1b8ed3b8480ec7bdf819ced..38bbcb305f9654527dd3b4185608de1dc5a52186 100644
--- a/signtrack/SignTrack_Train.py
+++ b/signtrack/SignTrack_Train.py
@@ -7,6 +7,7 @@ import os
 from matplotlib import pyplot as plt
 from sklearn.model_selection import train_test_split
 from tensorflow.keras.utils import to_categorical
+import random
 
 from Packr import ModelPack
 
@@ -18,7 +19,7 @@ MODEL_PATH = 'Insights/SignTrack.h5'
 
 # Signs that we try to detect
 signs = np.array(['no', 'thank you', 'me', 'please', 'good', 'morning', 'want', 'go to', 'night', 'how',
-                  'hello', "what's up", 'yes', 'fine', 'see you later', 'like', 'afternoon', 'you', 'goodbye', 'sorry'])
+                  'hello', "what's up", 'yes', 'fine', 'see you later', 'like', 'afternoon', 'you', "sorry", 'goodbye'])
 
 # Videos are going to be 24 frames in length
 sequence_length = 24
@@ -33,13 +34,22 @@ for sign in signs:
     dirs = os.listdir('Dataset/' + sign)
     for dir in dirs:
         window = []
+        window_aug = []
         for frame_num in range(sequence_length):
             res = np.load(os.path.join(DATA_PATH, sign, str(
                 dir), "{}.npy".format(frame_num)))
             window.append(res)
+            window_aug.append(res)
+        # Randomly duplicating images in a copy of res
+        # Used for data augmentation
+        for i in range(round(sequence_length * 0.5)):
+            rand = random.randint(1, sequence_length-1)
+            window_aug[rand] = window_aug[rand-1]
         sequences.append(window)
         labels.append(label_map[sign])
-    print('Data for {} imported'.format(sign))
+        sequences.append(window_aug)
+        labels.append(label_map[sign])
+    print('Data for {} imported \n'.format(sign))
 
 X = np.array(sequences)
 y = to_categorical(labels).astype(int)
@@ -50,16 +60,10 @@ log_dir = os.path.join('Insights')
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15)
 
 # Setting up model parameters
-
-# Our model is set so that it predicts based on a sequence of data
 model = Sequential()
-# Adds an LSTM layer with 64 neurons, that returns its results, activation method is Relu (most common for CNNs)
-# to continue on the next layer, with an input shape of (frames per sequence, number of keypoints)
 model.add(LSTM(64, return_sequences=True,
           activation='relu', input_shape=(24, 258)))
-# Adding an 128 neuron LSTM layer
 model.add(LSTM(128, return_sequences=True, activation='relu'))
-# Adding an 64 neuron LSTM layer this time without returning the data
 model.add(LSTM(64, return_sequences=False, activation='relu'))
 model.add(Dense(64, activation='relu'))
 model.add(Dense(32, activation='relu'))
@@ -72,7 +76,7 @@ loss = 1
 
 AutoTrain = model.fit(X_train, y_train, epochs=1)
 
-for i in range(1000):
+for i in range(250):
     if AutoTrain.history['loss'][-1] >= 0.04:
         AutoTrain = model.fit(X_train, y_train, epochs=1)
         if AutoTrain.history['loss'][-1] < loss:
diff --git a/signtrack/essentials.py b/signtrack/essentials.py
index 98eaf2ebb37874a24780dfa09e58194f37783fa5..4b900e6cf664595a7e6e4baf1132b734e5303cd7 100644
--- a/signtrack/essentials.py
+++ b/signtrack/essentials.py
@@ -3,12 +3,16 @@ import cv2
 import numpy as np
 import mediapipe as mp
 
+
 mp_holistic = mp.solutions.holistic  # Holistic model
 mp_drawing = mp.solutions.drawing_utils  # Drawing utilities
 
-phrases = {('how you'): 'how are you?',
+
+phrases = {('how you'): 'how are you',
            ('fine'): "I'm fine",
-           ('me fine me'): "I am fine"}
+           ('me fine me'): "I am fine",
+           ('good.by.e'): "goodbye",
+           ('Good.by.e'): "goodbye"}
 
 
 def mediapipe_detection(img, model):
@@ -83,7 +87,12 @@ def extract_keypoints(results):
 
 
 def grammar_correct(sentence):
+    """
+    Grammar in sign language often differs from the on in written speech.
+    Using this function, the sentence is corrected from simple grammatical 
+    errors
+    """
     for key in phrases:
         if key in sentence:
-            sentence = (sentence.replace(key, phrases[key])).capitalize()
+            sentence = sentence.replace(key, phrases[key])
     return sentence
diff --git a/signtrack/__main__.py b/signtrack/main.py
similarity index 82%
rename from signtrack/__main__.py
rename to signtrack/main.py
index 62237571de63ee91658e843eb014a93f33d269a5..aa21b70fdce414a6a12767348beb16705d9c9ab0 100644
--- a/signtrack/__main__.py
+++ b/signtrack/main.py
@@ -9,13 +9,21 @@ import mediapipe as mp
 from essentials import mediapipe_detection, display_styled_landmarks, extract_keypoints, HandsOnScene, grammar_correct
 import Packr
 import random
+from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline
+
+tokenizer = AutoTokenizer.from_pretrained(
+    "oliverguhr/fullstop-punctuation-multilang-large")
+model = AutoModelForTokenClassification.from_pretrained(
+    "oliverguhr/fullstop-punctuation-multilang-large")
+
+pun = pipeline('ner', model=model, tokenizer=tokenizer)
 
 
 # The number of frames per sequence that the model has been trained on
 seq_length = 24
 
 # Choose camera input
-cap = cv2.VideoCapture(0)
+cap = cv2.VideoCapture(3)
 
 # Resize camera input
 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
@@ -87,9 +95,9 @@ def prob_vis(res, actions, input_frame):
     # Positioning the assets and the text on the image
     """ 
     Adds the bottom bar on the frame, the position is calculated :
-    Horizontally: by calculating half of the width of the frame
+    For the X axis: by calculating half of the width of the frame
      minus half of the width of the bottom bar
-    Vertically: by calculating the height of the frame minus
+    For the Y axis: by calculating the height of the frame minus
      the height of the bar while leavig 17 pixels space from the top
     """
 
@@ -98,9 +106,9 @@ def prob_vis(res, actions, input_frame):
 
     """ 
     Adds the top bar on the frame, the position is calculated :
-    Horizontally: by calculating half of the difference between 
+    For the X axis: by calculating half of the difference between 
     the width of the frame and the width of the bottom bar
-    Vertically: by calculating the height of the bar minus 
+    For the Y axis: by calculating the height of the bar minus 
     the height of the bar devided by 1.5
     """
     output_frame = cvzone.overlayPNG(
@@ -110,7 +118,7 @@ def prob_vis(res, actions, input_frame):
         """
         Prints the 6 most probable signs on the top bar,
          the position is calculated knowing that:
-        Horizontally: the distance between each window is
+        For the X axis: the distance between each window is
          105 pixels, while the first window is 52 pixels 
          from 0 and that each letter has aproximately a 5.25
          pixel width 
@@ -122,7 +130,7 @@ def prob_vis(res, actions, input_frame):
         """
         Prints the probabilities of the 3 most probable signs
          on the top bar, the position is calculated knowing that:
-        Horizontally: the distance between each window is
+        For the X : the distance between each window is
          105 pixels, while the first window is 46 from 0axis
         The Y axis possition remains the same at 53 pixels
         """
@@ -131,8 +139,8 @@ def prob_vis(res, actions, input_frame):
 
     """
     Adds the sentence text on the bottom bar, the position is calculated by:
-    Horizontally: dividing the width of the frame by 6
-    Vertically: calculating the difference of the height of the
+    For the X axis: dividing the width of the frame by 6
+    For the Y axis: calculating the difference of the height of the
      frame and the height of the bar while keeping a 3 pixel 
      distance from the top of the bar
     """
@@ -184,26 +192,41 @@ while cap.isOpened():
             text = grammar_correct((' '.join(sentence)))
         # Else if hands are not in the scene for the last 5 frames clear sequence data
         else:
+            text = grammar_correct((' '.join(sentence)))
             seq = []
             res = np.zeros(shape=len(signs))
 
 # if the hands are not visible in teh last 44 frames clearthe sentence and process the displayed text
     if not True in HandsOnPrevFrames:
         if len(sentence) > 0:
-            text = grammar_correct((' '.join(sentence)))
-        sentence = []
+            sentence = text.capitalize()
+            # Calling the text model to add punctuation
+            output_json = pun(sentence)
+            sentence = ""
+            text = ''
+            # Adding the predicted punctuation in the final sentence
+            for n in output_json:
+                result = n['word'].replace(
+                    '▁', ' ') + n['entity'].replace('0', '')
+                sentence += result
+            # Capitalizing the needed letters
+            sentence = sentence.split('. ')
+            for word in sentence:
+                text += word[0].upper() + word[1:] + '. '
+            text = (grammar_correct(text[1:-2])).capitalize()
+            sentence = []
 
     # If there are 24 frames in seq then call the model to predict
     if len(seq) == seq_length:
         res = model.predict(np.expand_dims(seq, axis=0))[0]
 
         """
-        In case there is more than 60% the amount of needed data
+        In case there is more than 65% the amount of needed data
         call the model to predict in a new version of seq 
         with randomly duplicated frames
         """
 
-    elif len(seq) >= seq_length * 0.75:
+    elif len(seq) >= seq_length * 0.65:
         missing = seq_length - len(seq)
         seqpros = seq
         for i in range(missing):
diff --git a/signtrack/model.pack b/signtrack/model.pack
index 5daf14e8f9b1aeade5e0b440dbc23b89065429f6..0c5d4cafdfced3a552cdeb91a76a339f775de85c 100644
Binary files a/signtrack/model.pack and b/signtrack/model.pack differ
diff --git a/tests/Packr.py b/tests/Packr.py
index 9b09e82398c310ddc4ed92758ecd41ef78ddbafc..abf9a813f21c9c9cfaacf6fd6e14723122ec0bf3 100644
--- a/tests/Packr.py
+++ b/tests/Packr.py
@@ -7,7 +7,11 @@ from os.path import exists
 
 
 def ModelPack(mpath, signs):
-    filename = 'model.pack'
+    '''
+    Conbines the model with the feature labels 
+    in one file
+    '''
+    filename = 'model.SignTrack'
     if exists(filename):
         try:
             os.remove(filename)
@@ -20,7 +24,11 @@ def ModelPack(mpath, signs):
 
 
 def ModelIDUnpack():
-    filename = 'model.pack'
+    '''
+    Extracts the model and returns the signs the model
+    is able to predict
+    '''
+    filename = 'model.SignTrack'
     with zipfile.ZipFile(filename, 'r') as file:
         file.extractall('tmp/')
         return "tmp/Insights/ModelID.npy"
diff --git a/tests/SignTrack.py b/tests/SignTrack.py
index 22885153c7429ec1d4b2f928f6b965bde4229113..aa21b70fdce414a6a12767348beb16705d9c9ab0 100644
--- a/tests/SignTrack.py
+++ b/tests/SignTrack.py
@@ -9,13 +9,21 @@ import mediapipe as mp
 from essentials import mediapipe_detection, display_styled_landmarks, extract_keypoints, HandsOnScene, grammar_correct
 import Packr
 import random
+from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline
+
+tokenizer = AutoTokenizer.from_pretrained(
+    "oliverguhr/fullstop-punctuation-multilang-large")
+model = AutoModelForTokenClassification.from_pretrained(
+    "oliverguhr/fullstop-punctuation-multilang-large")
+
+pun = pipeline('ner', model=model, tokenizer=tokenizer)
 
 
 # The number of frames per sequence that the model has been trained on
 seq_length = 24
 
 # Choose camera input
-cap = cv2.VideoCapture(0)
+cap = cv2.VideoCapture(3)
 
 # Resize camera input
 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
@@ -184,26 +192,41 @@ while cap.isOpened():
             text = grammar_correct((' '.join(sentence)))
         # Else if hands are not in the scene for the last 5 frames clear sequence data
         else:
+            text = grammar_correct((' '.join(sentence)))
             seq = []
             res = np.zeros(shape=len(signs))
 
 # if the hands are not visible in teh last 44 frames clearthe sentence and process the displayed text
     if not True in HandsOnPrevFrames:
         if len(sentence) > 0:
-            text = grammar_correct((' '.join(sentence)))
-        sentence = []
+            sentence = text.capitalize()
+            # Calling the text model to add punctuation
+            output_json = pun(sentence)
+            sentence = ""
+            text = ''
+            # Adding the predicted punctuation in the final sentence
+            for n in output_json:
+                result = n['word'].replace(
+                    '▁', ' ') + n['entity'].replace('0', '')
+                sentence += result
+            # Capitalizing the needed letters
+            sentence = sentence.split('. ')
+            for word in sentence:
+                text += word[0].upper() + word[1:] + '. '
+            text = (grammar_correct(text[1:-2])).capitalize()
+            sentence = []
 
     # If there are 24 frames in seq then call the model to predict
     if len(seq) == seq_length:
         res = model.predict(np.expand_dims(seq, axis=0))[0]
 
         """
-        In case there is more than 60% the amount of needed data
+        In case there is more than 65% the amount of needed data
         call the model to predict in a new version of seq 
         with randomly duplicated frames
         """
 
-    elif len(seq) >= seq_length * 0.75:
+    elif len(seq) >= seq_length * 0.65:
         missing = seq_length - len(seq)
         seqpros = seq
         for i in range(missing):
diff --git a/tests/SignTrack_Train.py b/tests/SignTrack_Train.py
index 5a54a5964a7efe46f1b8ed3b8480ec7bdf819ced..38bbcb305f9654527dd3b4185608de1dc5a52186 100644
--- a/tests/SignTrack_Train.py
+++ b/tests/SignTrack_Train.py
@@ -7,6 +7,7 @@ import os
 from matplotlib import pyplot as plt
 from sklearn.model_selection import train_test_split
 from tensorflow.keras.utils import to_categorical
+import random
 
 from Packr import ModelPack
 
@@ -18,7 +19,7 @@ MODEL_PATH = 'Insights/SignTrack.h5'
 
 # Signs that we try to detect
 signs = np.array(['no', 'thank you', 'me', 'please', 'good', 'morning', 'want', 'go to', 'night', 'how',
-                  'hello', "what's up", 'yes', 'fine', 'see you later', 'like', 'afternoon', 'you', 'goodbye', 'sorry'])
+                  'hello', "what's up", 'yes', 'fine', 'see you later', 'like', 'afternoon', 'you', "sorry", 'goodbye'])
 
 # Videos are going to be 24 frames in length
 sequence_length = 24
@@ -33,13 +34,22 @@ for sign in signs:
     dirs = os.listdir('Dataset/' + sign)
     for dir in dirs:
         window = []
+        window_aug = []
         for frame_num in range(sequence_length):
             res = np.load(os.path.join(DATA_PATH, sign, str(
                 dir), "{}.npy".format(frame_num)))
             window.append(res)
+            window_aug.append(res)
+        # Randomly duplicating images in a copy of res
+        # Used for data augmentation
+        for i in range(round(sequence_length * 0.5)):
+            rand = random.randint(1, sequence_length-1)
+            window_aug[rand] = window_aug[rand-1]
         sequences.append(window)
         labels.append(label_map[sign])
-    print('Data for {} imported'.format(sign))
+        sequences.append(window_aug)
+        labels.append(label_map[sign])
+    print('Data for {} imported \n'.format(sign))
 
 X = np.array(sequences)
 y = to_categorical(labels).astype(int)
@@ -50,16 +60,10 @@ log_dir = os.path.join('Insights')
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15)
 
 # Setting up model parameters
-
-# Our model is set so that it predicts based on a sequence of data
 model = Sequential()
-# Adds an LSTM layer with 64 neurons, that returns its results, activation method is Relu (most common for CNNs)
-# to continue on the next layer, with an input shape of (frames per sequence, number of keypoints)
 model.add(LSTM(64, return_sequences=True,
           activation='relu', input_shape=(24, 258)))
-# Adding an 128 neuron LSTM layer
 model.add(LSTM(128, return_sequences=True, activation='relu'))
-# Adding an 64 neuron LSTM layer this time without returning the data
 model.add(LSTM(64, return_sequences=False, activation='relu'))
 model.add(Dense(64, activation='relu'))
 model.add(Dense(32, activation='relu'))
@@ -72,7 +76,7 @@ loss = 1
 
 AutoTrain = model.fit(X_train, y_train, epochs=1)
 
-for i in range(1000):
+for i in range(250):
     if AutoTrain.history['loss'][-1] >= 0.04:
         AutoTrain = model.fit(X_train, y_train, epochs=1)
         if AutoTrain.history['loss'][-1] < loss:
diff --git a/tests/__pycache__/Packr.cpython-37.pyc b/tests/__pycache__/Packr.cpython-37.pyc
index c7872d53133091b59d723171827e4795cbec3256..7e43eddda5ad52ddcbd92c947c773a0270ca9433 100644
Binary files a/tests/__pycache__/Packr.cpython-37.pyc and b/tests/__pycache__/Packr.cpython-37.pyc differ
diff --git a/tests/__pycache__/essentials.cpython-37.pyc b/tests/__pycache__/essentials.cpython-37.pyc
index e7ca6da5b7647920e5e717aa69a7a3a478a1cef1..90c6bc1d285d646edd19bcb178ace3f29abc209a 100644
Binary files a/tests/__pycache__/essentials.cpython-37.pyc and b/tests/__pycache__/essentials.cpython-37.pyc differ
diff --git a/tests/essentials.py b/tests/essentials.py
index efb38495141e8fdbc27fde8726be848eaf8fce62..4b900e6cf664595a7e6e4baf1132b734e5303cd7 100644
--- a/tests/essentials.py
+++ b/tests/essentials.py
@@ -3,12 +3,16 @@ import cv2
 import numpy as np
 import mediapipe as mp
 
+
 mp_holistic = mp.solutions.holistic  # Holistic model
 mp_drawing = mp.solutions.drawing_utils  # Drawing utilities
 
+
 phrases = {('how you'): 'how are you',
            ('fine'): "I'm fine",
-           ('me fine me'): "I am fine"}
+           ('me fine me'): "I am fine",
+           ('good.by.e'): "goodbye",
+           ('Good.by.e'): "goodbye"}
 
 
 def mediapipe_detection(img, model):
@@ -83,6 +87,11 @@ def extract_keypoints(results):
 
 
 def grammar_correct(sentence):
+    """
+    Grammar in sign language often differs from the on in written speech.
+    Using this function, the sentence is corrected from simple grammatical 
+    errors
+    """
     for key in phrases:
         if key in sentence:
             sentence = sentence.replace(key, phrases[key])