diff --git a/404.html b/404.html new file mode 100644 index 000000000..c472b4ea0 --- /dev/null +++ b/404.html @@ -0,0 +1,24 @@ +--- +layout: default +--- + + + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
diff --git a/Adatbaziskezeles/index.md b/Adatbaziskezeles/index.md new file mode 100644 index 000000000..9034396c0 --- /dev/null +++ b/Adatbaziskezeles/index.md @@ -0,0 +1,42 @@ +--- +layout: page +title: Adatbáziskezelés (VITMA027) +--- +A TTK matematika szakos BSc hallgatói számára. + +A tárgy kódja 2021. őszétől kezdve VITMA027, a tantárgy adatlap [itt](https://portal.vik.bme.hu/kepzes/targyak/VITMA027/) található. + + A vizsga anyaga alapvetően az Adatbázisok c. jegyzetben található meg, természetesen kiegészítve azzal, ami az előadásokon vagy a gyakorlatokon elhangzott. A jegyzetből mindent kell tudni, kivéve a hálós adatmodellt (7),az objektum-orientált adatbázis-kezelő rendszereket (8), a többértékű függőségeket (9.2.8), a tranzakciókezelést (10) és a függelékeket. + +Felkészülési segédanyagok, javaslat: + + - Jegyzet: Gajdos S.: Adatbázisok 2019. Az előző évek kiadásai szintén használhatók, viszont 2015. után a legkevesebb sajtóhibát az egyre későbbi kiadások tartalmaznak. + Letölthető a jegyzet [itt](https://db.bme.hu/~gajdos/Adatbazisok2019.pdf). + - Ajánlott: The Social Dilemma, Netflix 2020. + - A tantárgy adatlapban jelzett tankönyveken túlmenően javasolt a jegyzet feladatgyűjteménye releváns részének önálló feldolgozása, továbbá – kellő körültekintéssel – használhatóak a [Wiki Adatbázisok oldalai](https://wiki.sch.bme.hu/Adatb%C3%A1zisok) és az ott olvasható [tippek](https://wiki.sch.bme.hu/Adatb%C3%A1zisok#Tippek) is. + - Rossz módszer: típusfeladatok megoldásának betanulása. Ez garantáltan nem lesz eredményes, ha nem párosul az elmélet elmélyült megértésével és alkalmazásának képességével. Mivel a vizsgán az alkotóképes tudást kívánjuk lemérni, ezért teljesen felesleges egy áttanult éjszaka után vizsgával próbálkozni. A memóriából előhívott emléktöredékek a sikeres vizsgához tapasztalat szerint nem elegendőek. + - [Gyakran ismételt kérdések](../adatbazisok/files/AB_GYIK_v1.1.pdf) a tanulásról + - [Gyakorlóalkalmazás](files/gyakorlo.zip) + + +## Félév-specifikus információk +### 2024. õsz + +A tárgyhoz kiscsoportos gyakorlatok, ill. számítógépes laboratóriumi foglalkozások is tartoznak, az órák mindig az IL105 laborban lesznek. + +#### Laborok + +A laborokon felkészülten kell részt venni. A laborokhoz szükséges felkészülési és egyéb anyagok [ITT](../adatbazisok/labor) találhatók. Egyetlen labor sem mulasztható, a laborvezetõ beugrót írat, a laborok teljesítésének feltétele a beugró sikeressége. A beugrók általában a laborhoz kapcsolódó elméleti ismeretekbõl tartalmaznak kérdéseket. Laborpótlás a pótlási héten lesz valamennyi labor esetén azok számára, akik legfeljebb egy kötelezõ labort nem teljesítettek bármely okból kifolyólag. A pontos hely és a pótlás szükségessége a [Laboradmin rendszerbõl](https://fecske.db.bme.hu) fog kiderülni, ezt kérjük, hogy mindenki ellenõrizze, és bármilyen eltérést mielõbb jelezzen a tárgyfelelõsnek a gajdos_at_db.bme.hu cimen. A pótlaborok azonosak a reguláris laborokkal, kivéve, hogy mindenki egy számára új feladattípushoz tartozó feladatot fog kapni. + +#### Gyakorlatok + +A gyakorlatokon is felkészülten kell megjelenni. A gyakorlatvezetõ a részvételt ellenõrzi, kiszárthelyiket írathat a felkészülés tesztelésére. Ezek elsõsorban a hallgatóknak szolgálnak visszacsatolásul, hogy az elõismereteik megfelelõk-e a gyakorlatok anyagának hatékony elsajátításához. A gyakorlatokhoz szükséges feladatsorok és egyéb tudásfoszlányok [ITT](../adatbazisok/gyakorlat) érhetõk el, a kisZH-eredmények pedig [ITT](../adatbazisok/eredmenyek)). A gyakorlatokon nem adunk ki papíralapú segédanyagokat, így a feladatsort valamilyen formában mindenki vigye magával az órára. + +#### Vizsgák + + - Anyaga: lásd fentebb. + - A vizsgák beugróval kezdõdnek. Egyetlen feladatot kell kb. 15 perc alatt súlyos hiba nélkül megoldani vagy három fogalmat definiálni ahhoz, hogy a vizsga a szóbelivel folytatható legyen, ellenkezõ esetben a vizsga elégtelen. A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc áll rendelkezésre. Lehetõség szerint – de nem törvényszerûen – a hallgatók a gyakorlatvezetõiknél szóbeliznek, akik a teljes tananyagból tetszõleges sorrendben is tesznek fel kérdéseket, hogy a hallgató felkészültségérõl, leginkább a tananyag _megértésérõl_ meggyõzõdjenek. + - Akiknek bármely méltánylandó okból már decemberben vizsgázniuk kell, lépjenek kapcsolatba a tárgyfelelõssel. + - Januárban szinte minden nap lesz vizsgalehetõség, ez azonban nem jelenti azt, hogy egymás utáni napokon is érdemes próbálkozni. A tapasztalat azt mutatja, hogy a megismételt vizsga sikerességéhez érdemes két vizsgakísérlet között legalább három napnak eltelnie. + - A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az igényesség és ápoltság itt is elvárt. + diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..f7803f41d --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +www.db.bme.hu \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..4cfb59f41 --- /dev/null +++ b/Gemfile @@ -0,0 +1,31 @@ +source "https://rubygems.org" + +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve +# +# This will help ensure the proper Jekyll version is running. +# Happy Jekylling! +gem "jekyll", "~> 3.8.0" + +# This is the default theme for new Jekyll sites. You may change this to anything you like. +# gem "minima", "~> 2.0" + +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +# gem "github-pages", group: :jekyll_plugins + +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.6" +end + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby] + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.0" if Gem.win_platform? + +gem "jekyll-redirect-from" diff --git a/Transactions MNG-First Part -STDs.V01.pptx b/Transactions MNG-First Part -STDs.V01.pptx new file mode 100644 index 000000000..6fd165c96 Binary files /dev/null and b/Transactions MNG-First Part -STDs.V01.pptx differ diff --git a/_config.yml b/_config.yml new file mode 100644 index 000000000..357255148 --- /dev/null +++ b/_config.yml @@ -0,0 +1,60 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. + +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. +title: Adatbázisok Laboratórium +#email: your-email@example.com +description: >- # this means to ignore newlines until "baseurl:" + BME Adatbázisok Labor + - Ne halat adj az éhezőnek, hanem tanítsd meg halat fogni. +baseurl: "" # the subpath of your site, e.g. /blog +url: "" # the base hostname & protocol for your site, e.g. http://example.com +#twitter_username: jekyllrb +#github_username: jekyll + +# sass +sass: + style: compressed + +# Build settings +markdown: kramdown +# theme: minima +#plugins: +# - jekyll-feed +plugins: + - jekyll-redirect-from + +# Exclude from processing. +# The following items will not be processed, by default. Create a custom list +# to override the default setting. +# exclude: +# - Gemfile +# - Gemfile.lock +# - node_modules +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ + +header_pages: + - adatbazisok/index.md + - adatb-elmelete/index.md + - Adatbaziskezeles/index.md + - adatkezeles/index.md + - databases/index.md + - halozati-adatb/index.md + - adatbazisok-labor/index.md + - jegyzokonyv/tudnivalok/index.md + - temakiirasok.md + - szines.md diff --git a/_includes/adatbazisok-labor_kifuto_targy_figyelmeztetes.md b/_includes/adatbazisok-labor_kifuto_targy_figyelmeztetes.md new file mode 100644 index 000000000..b8ab039b0 --- /dev/null +++ b/_includes/adatbazisok-labor_kifuto_targy_figyelmeztetes.md @@ -0,0 +1 @@ +**Figyelem! Kifutó tárgy**, 2017. őszétől kezdődően az [Adatbázisok](/adatbazisok) tárgyhoz kapcsolódó laborfoglalkozások jelentősen redukált tartalommal, a tárgy [labor részeként](/adatbazisok/labor) kerülnek sorra a mintatanterv szerint haladó hallgatók részére. diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 000000000..29898cb37 --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,3 @@ + diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 000000000..e091b414c --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 000000000..9f5d9d75d --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,49 @@ + + + + + + + diff --git a/_includes/kozos-linkek.md b/_includes/kozos-linkek.md new file mode 100644 index 000000000..de3e715f2 --- /dev/null +++ b/_includes/kozos-linkek.md @@ -0,0 +1,3 @@ +[ORA-PLSQLREF]: https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/index.html +[ORA-SQLREF]: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/index.html +[ORA-SQLQUICKREF]: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlqr/index.html diff --git a/_includes/targykodok.md b/_includes/targykodok.md new file mode 100644 index 000000000..6e44e83ff --- /dev/null +++ b/_includes/targykodok.md @@ -0,0 +1,7 @@ +[VITMAB00]: https://www.vik.bme.hu/kepzes/targyak/VITMAB00/ +[VITMAB02]: https://www.vik.bme.hu/kepzes/targyak/VITMAB02/ +[VITMAB04]: https://www.vik.bme.hu/kepzes/targyak/VITMAB04/ +[VITMA308]: https://www.vik.bme.hu/kepzes/targyak/VITMA308/ +[VITMA311]: https://www.vik.bme.hu/kepzes/targyak/VITMA311/ +[VITMMA13]: https://www.vik.bme.hu/kepzes/targyak/VITMMA13/ +[VITMM100]: https://www.vik.bme.hu/kepzes/targyak/VITMMA13/ diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 000000000..5ef26d900 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,13 @@ + + +{%- include head.html -%} + + {%- include header.html -%} +
+
+ {{ content }} +
+ {%- include footer.html -%} +
+ + diff --git a/_layouts/home.html b/_layouts/home.html new file mode 100644 index 000000000..11ebb1613 --- /dev/null +++ b/_layouts/home.html @@ -0,0 +1,13 @@ +--- +layout: default +--- + +
+ {%- if page.title -%} +

{{ page.title }}

+ {%- endif -%} + +
+ {{ content }} +
+
diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 000000000..01e4b2a93 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,14 @@ +--- +layout: default +--- +
+ +
+

{{ page.title | escape }}

+
+ +
+ {{ content }} +
+ +
diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 000000000..01e4b2a93 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,14 @@ +--- +layout: default +--- +
+ +
+

{{ page.title | escape }}

+
+ +
+ {{ content }} +
+ +
diff --git a/_sass/minima/base.scss b/_sass/minima/base.scss new file mode 100644 index 000000000..dfa86e741 --- /dev/null +++ b/_sass/minima/base.scss @@ -0,0 +1,214 @@ +/** + * Reset some basic elements + */ +body, h1, h2, h3, h4, h5, h6, +p, blockquote, pre, hr, +dl, dd, ol, ul, figure { + margin: 0; + padding: 0; + +} + + + +/** + * Basic styling + */ +body { + font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; + color: $text-color; + background-color: $background-color; + -webkit-text-size-adjust: 100%; + -webkit-font-feature-settings: "kern" 1; + -moz-font-feature-settings: "kern" 1; + -o-font-feature-settings: "kern" 1; + font-feature-settings: "kern" 1; + font-kerning: normal; + min-height: 100vh; +} + + + +/** + * Set `margin-bottom` to maintain vertical rhythm + */ +h1, h2, h3, h4, h5, h6, +p, blockquote, pre, +ul, ol, dl, figure, +%vertical-rhythm { + margin-bottom: $spacing-unit / 2; +} + + +/** + * Images + */ +img { + max-width: 100%; + vertical-align: middle; +} + + + +/** + * Figures + */ +figure > img { + display: block; +} + +figcaption { + font-size: $small-font-size; +} + + + +/** + * Lists + */ +ul, ol { + margin-left: $spacing-unit; +} + +li { + > ul, + > ol { + margin-bottom: 0; + } +} + + + +/** + * Headings + */ +h1, h2, h3, h4, h5, h6 { + font-weight: $base-font-weight; +} + + + +/** + * Links + */ +a { + color: $brand-color; + text-decoration: none; + + &:visited { + color: darken($brand-color, 15%); + } + + &:hover { + color: $text-color; + text-decoration: underline; + } + + .social-media-list &:hover { + text-decoration: none; + + .username { + text-decoration: underline; + } + } +} + + +/** + * Blockquotes + */ +blockquote { + color: $grey-color; + border-left: 4px solid $grey-color-light; + padding-left: $spacing-unit / 2; + @include relative-font-size(1.125); + letter-spacing: -1px; + font-style: italic; + + > :last-child { + margin-bottom: 0; + } +} + + + +/** + * Code formatting + */ +pre, +code { + @include relative-font-size(0.9375); + border: 1px solid $grey-color-light; + border-radius: 3px; + background-color: #eef; +} + +code { + padding: 1px 5px; +} + +pre { + padding: 8px 12px; + overflow-x: auto; + + > code { + border: 0; + padding-right: 0; + padding-left: 0; + } +} + + + +/** + * Clearfix + */ +%clearfix:after { + content: ""; + display: table; + clear: both; +} + + + +/** + * Icons + */ + +.svg-icon { + width: 16px; + height: 16px; + display: inline-block; + fill: currentColor; + padding: 5px 3px 2px 5px; + vertical-align: text-bottom; +} + + +/** + * Tables + */ +table { + margin-bottom: $spacing-unit; + width: 100%; + text-align: $table-text-align; + color: lighten($text-color, 18%); + border-collapse: collapse; + border: 1px solid $grey-color-light; + tr { + &:nth-child(even) { + background-color: lighten($grey-color-light, 6%); + } + } + th, td { + padding: ($spacing-unit / 3) ($spacing-unit / 2); + } + th { + background-color: lighten($grey-color-light, 3%); + border: 1px solid darken($grey-color-light, 4%); + border-bottom-color: darken($grey-color-light, 12%); + } + td { + border: 1px solid $grey-color-light; + } +} diff --git a/_sass/minima/layout.scss b/_sass/minima/layout.scss new file mode 100644 index 000000000..2b8ee8beb --- /dev/null +++ b/_sass/minima/layout.scss @@ -0,0 +1,114 @@ +.site-title { + @include relative-font-size(1.5); + font-weight: 300; + letter-spacing: -1px; + + @include media-query($on-palm) { + padding-right: 45px; + } + + &, + &:visited { + color: $grey-color-dark; + } +} + +.page-link { + color: $grey-color-dark; + line-height: $base-line-height; + display: block; + + &:visited { + color: $grey-color-dark; + } +} + +footer { + border-top: 1px solid $grey-color-light; + + p { + color: $grey-color; + } +} + +/** + * Page content + */ +.page-heading { + @include relative-font-size(2); +} + +.post-list-heading { + @include relative-font-size(1.75); +} + +.post-list { + margin-left: 0; + list-style: none; + + > li { + margin-bottom: $spacing-unit; + } +} + +.post-meta { + font-size: $small-font-size; + color: $grey-color; +} + +.post-link { + display: block; + @include relative-font-size(1.5); +} + + + +/** + * Posts + */ +.post-header { + margin-bottom: $spacing-unit; +} + +.post-title, +.post-content h1 { + @include relative-font-size(2.625); + letter-spacing: -1px; + line-height: 1; + + @media screen and (min-width: $on-large) { + @include relative-font-size(2.625); + } +} + +.post-content { + margin-bottom: $spacing-unit; + + h2 { + @include relative-font-size(1.75); + + @media screen and (min-width: $on-large) { + @include relative-font-size(2); + } + } + + h3 { + @include relative-font-size(1.375); + + @media screen and (min-width: $on-large) { + @include relative-font-size(1.625); + } + } + + h4 { + @include relative-font-size(1.125); + + @media screen and (min-width: $on-large) { + @include relative-font-size(1.25); + } + } + + p, li { + text-align: justify; + } +} diff --git a/_sass/minima/minima.scss b/_sass/minima/minima.scss new file mode 100644 index 000000000..fa14d50c5 --- /dev/null +++ b/_sass/minima/minima.scss @@ -0,0 +1,45 @@ +@charset "utf-8"; + +// Define defaults for each variable. + +$base-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; +$base-font-size: 16px !default; +$base-font-weight: 400 !default; +$small-font-size: $base-font-size * 0.875 !default; +$base-line-height: 1.5 !default; + +$spacing-unit: 30px !default; + +$text-color: #111 !default; +$background-color: #fdfdfd !default; +$brand-color: #2a7ae2 !default; + +$grey-color: #828282 !default; +$grey-color-light: lighten($grey-color, 40%) !default; +$grey-color-dark: darken($grey-color, 25%) !default; + +$table-text-align: left !default; + +// Width of the content area +$content-width: 800px !default; + +$on-palm: 600px !default; +$on-laptop: 1024px !default; + +$on-medium: $on-palm !default; +$on-large: $on-laptop !default; + + +@mixin relative-font-size($ratio) { + font-size: $base-font-size * $ratio; +} + +@mixin media-query($device) { + @media screen and (max-width: $device) { + @content; + } +} + +@import "base"; +@import "layout"; +@import "syntax-highlighting"; diff --git a/_sass/minima/syntax-highlighting.scss b/_sass/minima/syntax-highlighting.scss new file mode 100644 index 000000000..bccdb8995 --- /dev/null +++ b/_sass/minima/syntax-highlighting.scss @@ -0,0 +1,71 @@ +/** + * Syntax highlighting styles + */ +.highlight { + background: #fff; + @extend %vertical-rhythm; + + .highlighter-rouge & { + background: #eef; + } + + .c { color: #998; font-style: italic } // Comment + .err { color: #a61717; background-color: #e3d2d2 } // Error + .k { font-weight: bold } // Keyword + .o { font-weight: bold } // Operator + .cm { color: #998; font-style: italic } // Comment.Multiline + .cp { color: #999; font-weight: bold } // Comment.Preproc + .c1 { color: #998; font-style: italic } // Comment.Single + .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: #000; background-color: #fdd } // Generic.Deleted + .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific + .ge { font-style: italic } // Generic.Emph + .gr { color: #a00 } // Generic.Error + .gh { color: #999 } // Generic.Heading + .gi { color: #000; background-color: #dfd } // Generic.Inserted + .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific + .go { color: #888 } // Generic.Output + .gp { color: #555 } // Generic.Prompt + .gs { font-weight: bold } // Generic.Strong + .gu { color: #aaa } // Generic.Subheading + .gt { color: #a00 } // Generic.Traceback + .kc { font-weight: bold } // Keyword.Constant + .kd { font-weight: bold } // Keyword.Declaration + .kp { font-weight: bold } // Keyword.Pseudo + .kr { font-weight: bold } // Keyword.Reserved + .kt { color: #458; font-weight: bold } // Keyword.Type + .m { color: #099 } // Literal.Number + .s { color: #d14 } // Literal.String + .na { color: #008080 } // Name.Attribute + .nb { color: #0086B3 } // Name.Builtin + .nc { color: #458; font-weight: bold } // Name.Class + .no { color: #008080 } // Name.Constant + .ni { color: #800080 } // Name.Entity + .ne { color: #900; font-weight: bold } // Name.Exception + .nf { color: #900; font-weight: bold } // Name.Function + .nn { color: #555 } // Name.Namespace + .nt { color: #000080 } // Name.Tag + .nv { color: #008080 } // Name.Variable + .ow { font-weight: bold } // Operator.Word + .w { color: #bbb } // Text.Whitespace + .mf { color: #099 } // Literal.Number.Float + .mh { color: #099 } // Literal.Number.Hex + .mi { color: #099 } // Literal.Number.Integer + .mo { color: #099 } // Literal.Number.Oct + .sb { color: #d14 } // Literal.String.Backtick + .sc { color: #d14 } // Literal.String.Char + .sd { color: #d14 } // Literal.String.Doc + .s2 { color: #d14 } // Literal.String.Double + .se { color: #d14 } // Literal.String.Escape + .sh { color: #d14 } // Literal.String.Heredoc + .si { color: #d14 } // Literal.String.Interpol + .sx { color: #d14 } // Literal.String.Other + .sr { color: #009926 } // Literal.String.Regex + .s1 { color: #d14 } // Literal.String.Single + .ss { color: #990073 } // Literal.String.Symbol + .bp { color: #999 } // Name.Builtin.Pseudo + .vc { color: #008080 } // Name.Variable.Class + .vg { color: #008080 } // Name.Variable.Global + .vi { color: #008080 } // Name.Variable.Instance + .il { color: #099 } // Literal.Number.Integer.Long +} diff --git a/_sass/responsive.scss b/_sass/responsive.scss new file mode 100644 index 000000000..46b9ac1de --- /dev/null +++ b/_sass/responsive.scss @@ -0,0 +1,53 @@ +#nav-header { + min-width: 190px; + max-width: 400px; + width: 20%; + position: absolute; + top: 0; + bottom: 0; + left: 0; + + svg { + fill: #90CDF4; + } +} + +.menu-icon { + img { + width: 20px; + } +} + +/* Small (sm) */ +@media (min-width: 640px) { + #nav-header { + min-width: 200px; + } +} + +/* Medium (md) */ +@media (min-width: 768px) { + #nav-header { + min-width: 300px; + } +} + +/* Large (lg) */ +@media (min-width: 1024px) { + #nav-header { + min-width: 320px; + position: unset; + + .site-title { + span { + width: min-intrinsic; + width: -webkit-min-content; + width: -moz-min-content; + width: min-content; + } + } + } + main { + min-width: 640px; + } +} diff --git a/adatb-elmelete/01_parhuzamositas.pdf b/adatb-elmelete/01_parhuzamositas.pdf new file mode 100644 index 000000000..5701ecf29 Binary files /dev/null and b/adatb-elmelete/01_parhuzamositas.pdf differ diff --git a/adatb-elmelete/02_architekturak.pdf b/adatb-elmelete/02_architekturak.pdf new file mode 100644 index 000000000..6c0db07ae Binary files /dev/null and b/adatb-elmelete/02_architekturak.pdf differ diff --git a/adatb-elmelete/03_imdb.pdf b/adatb-elmelete/03_imdb.pdf new file mode 100644 index 000000000..ec54971b3 Binary files /dev/null and b/adatb-elmelete/03_imdb.pdf differ diff --git a/adatb-elmelete/04_analitikus_rendszerek.pdf b/adatb-elmelete/04_analitikus_rendszerek.pdf new file mode 100644 index 000000000..817a887f9 Binary files /dev/null and b/adatb-elmelete/04_analitikus_rendszerek.pdf differ diff --git a/adatb-elmelete/05_oracle_in-memorycolumnstore.pdf b/adatb-elmelete/05_oracle_in-memorycolumnstore.pdf new file mode 100644 index 000000000..216360caa Binary files /dev/null and b/adatb-elmelete/05_oracle_in-memorycolumnstore.pdf differ diff --git a/adatb-elmelete/06_elosztott_kihivasok.pdf b/adatb-elmelete/06_elosztott_kihivasok.pdf new file mode 100644 index 000000000..e7b0924d7 Binary files /dev/null and b/adatb-elmelete/06_elosztott_kihivasok.pdf differ diff --git a/adatb-elmelete/07_facebook.pdf b/adatb-elmelete/07_facebook.pdf new file mode 100644 index 000000000..149d2bb35 Binary files /dev/null and b/adatb-elmelete/07_facebook.pdf differ diff --git a/adatb-elmelete/08_szemantikus_adatbazisok.pdf b/adatb-elmelete/08_szemantikus_adatbazisok.pdf new file mode 100644 index 000000000..e098f6319 Binary files /dev/null and b/adatb-elmelete/08_szemantikus_adatbazisok.pdf differ diff --git a/adatb-elmelete/09_Teljesitmeny_meres_hangolas.pdf b/adatb-elmelete/09_Teljesitmeny_meres_hangolas.pdf new file mode 100644 index 000000000..79356b2c3 Binary files /dev/null and b/adatb-elmelete/09_Teljesitmeny_meres_hangolas.pdf differ diff --git a/adatb-elmelete/10_Grafadatbazisok.pdf b/adatb-elmelete/10_Grafadatbazisok.pdf new file mode 100644 index 000000000..33a8e34ac Binary files /dev/null and b/adatb-elmelete/10_Grafadatbazisok.pdf differ diff --git a/adatb-elmelete/12_NoSQL_adatbaziskezeles.pdf b/adatb-elmelete/12_NoSQL_adatbaziskezeles.pdf new file mode 100644 index 000000000..998b97bc7 Binary files /dev/null and b/adatb-elmelete/12_NoSQL_adatbaziskezeles.pdf differ diff --git a/adatb-elmelete/13_NoSQL_short.pdf b/adatb-elmelete/13_NoSQL_short.pdf new file mode 100644 index 000000000..bb4f127b8 Binary files /dev/null and b/adatb-elmelete/13_NoSQL_short.pdf differ diff --git a/adatb-elmelete/14_GDPR.pdf b/adatb-elmelete/14_GDPR.pdf new file mode 100644 index 000000000..bf22b20c3 Binary files /dev/null and b/adatb-elmelete/14_GDPR.pdf differ diff --git a/adatb-elmelete/15_Hadoop.pdf b/adatb-elmelete/15_Hadoop.pdf new file mode 100644 index 000000000..43af5b4a4 Binary files /dev/null and b/adatb-elmelete/15_Hadoop.pdf differ diff --git a/adatb-elmelete/2024 Normalizalas, DW.pdf b/adatb-elmelete/2024 Normalizalas, DW.pdf new file mode 100644 index 000000000..f7c89b123 Binary files /dev/null and b/adatb-elmelete/2024 Normalizalas, DW.pdf differ diff --git a/adatb-elmelete/Adatb_elmelete_2023.pdf b/adatb-elmelete/Adatb_elmelete_2023.pdf new file mode 100644 index 000000000..f0296176c Binary files /dev/null and b/adatb-elmelete/Adatb_elmelete_2023.pdf differ diff --git a/adatb-elmelete/Adatbazisok_9fejezet.pdf b/adatb-elmelete/Adatbazisok_9fejezet.pdf new file mode 100644 index 000000000..e42415072 Binary files /dev/null and b/adatb-elmelete/Adatbazisok_9fejezet.pdf differ diff --git a/adatb-elmelete/Elosztott_adatbazisok.pdf b/adatb-elmelete/Elosztott_adatbazisok.pdf new file mode 100644 index 000000000..f21fce6ee Binary files /dev/null and b/adatb-elmelete/Elosztott_adatbazisok.pdf differ diff --git a/adatb-elmelete/Elosztott_adatbazisok_2024.pdf b/adatb-elmelete/Elosztott_adatbazisok_2024.pdf new file mode 100644 index 000000000..849902ef8 Binary files /dev/null and b/adatb-elmelete/Elosztott_adatbazisok_2024.pdf differ diff --git a/adatb-elmelete/Minta.docx b/adatb-elmelete/Minta.docx new file mode 100644 index 000000000..567433af0 Binary files /dev/null and b/adatb-elmelete/Minta.docx differ diff --git a/adatb-elmelete/NoSQL short.ppt b/adatb-elmelete/NoSQL short.ppt new file mode 100644 index 000000000..43baf05a8 Binary files /dev/null and b/adatb-elmelete/NoSQL short.ppt differ diff --git a/adatb-elmelete/NoSQL_short.pdf b/adatb-elmelete/NoSQL_short.pdf new file mode 100644 index 000000000..9cd1f83f6 Binary files /dev/null and b/adatb-elmelete/NoSQL_short.pdf differ diff --git a/adatb-elmelete/elosztott_kihivasok2021_pub.pptx b/adatb-elmelete/elosztott_kihivasok2021_pub.pptx new file mode 100644 index 000000000..c128400bf Binary files /dev/null and b/adatb-elmelete/elosztott_kihivasok2021_pub.pptx differ diff --git a/adatb-elmelete/elosztott_kihivasok2024_pub.pptx b/adatb-elmelete/elosztott_kihivasok2024_pub.pptx new file mode 100644 index 000000000..53a1bb5db Binary files /dev/null and b/adatb-elmelete/elosztott_kihivasok2024_pub.pptx differ diff --git a/adatb-elmelete/elosztott_kihivasok_2022_pub.pptx b/adatb-elmelete/elosztott_kihivasok_2022_pub.pptx new file mode 100644 index 000000000..a054c5d07 Binary files /dev/null and b/adatb-elmelete/elosztott_kihivasok_2022_pub.pptx differ diff --git a/adatb-elmelete/index.md b/adatb-elmelete/index.md new file mode 100644 index 000000000..b2280f821 --- /dev/null +++ b/adatb-elmelete/index.md @@ -0,0 +1,59 @@ +--- +layout: page +title: Adatbázisok elmélete (VITMMA13) +--- + + +## 2024. tavaszi félév + +Elágazó tárgy az MSc mérnök informatikus szak hallgatói számára. + +A tantárgyi adatlap: [VITMMA13](https://portal.vik.bme.hu/kepzes/targyak/VITMMA13/) + +A tárgy szorosan ráépül az Adatbázisok ([VITMAB04](https://portal.vik.bme.hu/kepzes/targyak/VITMA004/), korábban [VITMAB00](https://portal.vik.bme.hu/kepzes/targyak/VITMAB00/), ill. még korábban [VITMA311](https://portal.vik.bme.hu/kepzes/targyak/VITMA311/)) c. tárgy anyagára, ezért csak azok vegyék fel, akik a félév elejére már ténylegesen elsajátították a kapcsolódó elméleti alapokat. A tantárgy keretében ezek aktív alkalmazására és továbbfejlesztésére kerül sor. + +### Az előadások helye, ideje + +Hétfő 14.15-16.00 valamint páros oktatási heteken szerda 8.15-10.00, mindkét napon a QFB08-ban. + +### Nagyfeladat + +Kiadása a 2. oktatási héten, beadása a 9. oktatási héten esedékes. A megoldásához használandó template file és feladatleírás [innen](Minta.docx) tölthető le. + +### Nagyzárthelyi, védés + +A 13. oktatási héten, május 15-én 18:15-től a QBF12-ben. A zárthelyi anyagát képezi az addig elhangzó előadások anyagán túl a relációs sématervezés is (ld. Adatbázisok jegyzet 9. fejezet a 9.2.8 kivételével). Az alábbi slideokból nem képezi a ZH/védés anyagát az, amire az előadásokon nem jutott idő. PZH: pótlási héten, máj. 27. hétfőn 10:15-től a QBF12-ben, anyaga azonos a ZH-val. A védésekre előzetesen egyeztetett időpontokban kerül sor a félév végén, amelynek során egy kötetlen beszélgetés keretében a nagyfeladat megoldásának részleteire valamint a tárgy anyagára vonatkozó kérdésekre egyaránt kell tudni válaszolni. + +### Idén (vagy korábban) elhangzott előadások + + - [Architektúrák](02_architekturak.pdf) + - [Párhuzamos adatfeldolgozás](parhuzamositas_2022_pub.pdf) + - [Elosztott technológiák](elosztott_kihivasok2024_pub.pptx) + - [Analitikus adatbáziskezelés 1...4](04_analitikus_rendszerek.pdf) + - [Memóriaadatbázisok](03_imdb.pdf) + - [Teljesítmény mérése és hangolása](09_Teljesitmeny_meres_hangolas.pdf) + - [Szemantikus adatbáziskezelés](08_szemantikus_adatbazisok.pdf) + - [Hadoop](15_Hadoop.pdf) + - [Gráfadatbázisok](10_Grafadatbazisok.pdf) + - [Oszlopalapú memória-adatbáziskezelés az Oracle 12c-ben](05_oracle_in-memorycolumnstore.pdf) + - [A Facebook technológiája](07_facebook.pdf) + + - Funkcionális programozás lehetőségei. Kapcsolódó előadás a Scala eXchange 2017 konferenciáról: [Automatic Parallelisation and Batching of Scala Code](https://skillsmatter.com/skillscasts/11182-automatic-parallelisation-and-batching-of-scala-code) + - [Adatbáziskezelés és a jog, GDPR](14_GDPR.pdf). + +Az adatbázis-kezelés aktuális kutatási irányairól érdeklődőknek javasoljuk a VLDB konferenciák keynote előadásait, [tavaly pl. ezek voltak](https://www.vldb.org/2023/?program-schedule-keynote-speakers). + +### Felhasználható segédanyagok +- [Gajdos: Adatbázisok, 2019.](https://db.bme.hu/~gajdos/Adatbazisok2019.pdf) +- [2024 Normalizalas, DW.pdf](https://github.com/bme-db-lab/bme-db-lab.github.io-internal/blob/main/adatb-elmelete/2024%20Normalizalas%2C%20DW.pdf) +- [2024 elosztott adatbázisok](Elosztott_adatbazisok_2024.pdf) +- [NoSQL-"bigdata" adatbáziskezelés](NoSQL_short.pdf) +- Silberschatz, H. F. Korth, S. Sudarshan: Database System Concepts, 7th Edition, McGraw-Hill 2019. [slideok](https://www.db-book.com/db7/slides-dir/index.html) +- [Oracle Database Concepts 18c, 2018.]( https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/index.html) +- [Oracle Exadata white paper, 2012.](http://www.oracle.com/technetwork/database/exadata/exadata-technical-whitepaper-134575.pdf) +- [Oracle Data Warehousing Guide 21c, 2020.](https://docs.oracle.com/en/database/oracle/oracle-database/21/dwhsg/database-data-warehousing-guide.pdf) +- [www.tpc.org](http://www.tpc.org) +- Web-en elérhető oldalak elsősorban a NoSQL körbe tartozó témák esetén +- [funkcionális függőség kalkulátor](http://tiresias.db.bme.hu:5000/) + +{% include targykodok.md %} diff --git a/adatb-elmelete/parhuzamositas_2022_pub.pdf b/adatb-elmelete/parhuzamositas_2022_pub.pdf new file mode 100644 index 000000000..b86000641 Binary files /dev/null and b/adatb-elmelete/parhuzamositas_2022_pub.pdf differ diff --git a/adatbazisok-labor/files/Beosztas2019tavasz.xls b/adatbazisok-labor/files/Beosztas2019tavasz.xls new file mode 100644 index 000000000..61e1c2f82 Binary files /dev/null and b/adatbazisok-labor/files/Beosztas2019tavasz.xls differ diff --git a/adatbazisok-labor/files/csopbeo2018tavasz.xls b/adatbazisok-labor/files/csopbeo2018tavasz.xls new file mode 100644 index 000000000..9bc386f2c Binary files /dev/null and b/adatbazisok-labor/files/csopbeo2018tavasz.xls differ diff --git a/adatbazisok-labor/files/idopontok2018tavasz.png b/adatbazisok-labor/files/idopontok2018tavasz.png new file mode 100644 index 000000000..e58d93eac Binary files /dev/null and b/adatbazisok-labor/files/idopontok2018tavasz.png differ diff --git a/adatbazisok-labor/files/idopontok2018tavasz.xls b/adatbazisok-labor/files/idopontok2018tavasz.xls new file mode 100644 index 000000000..6098a81eb Binary files /dev/null and b/adatbazisok-labor/files/idopontok2018tavasz.xls differ diff --git a/adatbazisok-labor/index.md b/adatbazisok-labor/index.md new file mode 100644 index 000000000..85b3bd247 --- /dev/null +++ b/adatbazisok-labor/index.md @@ -0,0 +1,51 @@ +--- +layout: page +title: Adatbázisok labor (VITMAB02) +--- + +BSc 2. évfolyamos mérnök informatikus hallgatók számára [VITMAB02], korábban [VITMA308]. + +{% include adatbazisok-labor_kifuto_targy_figyelmeztetes.md %} + +## 2021. tavasz + +Tantárgyi adatlap: [VITMAB02] + +A laborok a második oktatási héten indulnak, és az alább felsorolt tematikával kéthetente kerülnek sorra. Az adott körülmények között laborfoglalkozásokat nem tartunk, hanem konzultatív támogatást nyújtunk a feladatok megoldásához. A laborok időpontjában a feladatok kiadása valósul meg, amelyek megoldására három nap áll rendelkezésre. +A feladatokat mindenkinek egyénileg kell megoldania. A beadott feladatokat plágiumkeresésnek vetjük alá. + +### Általános információk + + - Hallgatói csoportbeosztás, laborvezetők, laborok helye/ideje: Csak egyetlen csoport lesz, a laborvezető Solymos Szilárd (solymos.szilard(at)db.bme.hu) + - [A munka értékelése](laborok_ertekelese.pdf) + - Pótlás: a félév végén. Ennek szándékolt célja nem az, hogy egy további reguláris lehetőséget kínáljon a félév során adott időpontokra kiírt laborok teljesítésére, hanem hogy pótlási lehetőséget nyújtsanak azok számára, akiknek valamely labor teljesítése az eredeti időpontban nem sikerült. Kérem a hallgatókat, hogy a pótlási lehetőséget visszaélésszerűen ne használják, mert a tapasztalatok szerint ezeknek a félév végi alkalmaknak rendkívül rossz a hatásfoka, valamint a pótlásra csak egyetlen időpont áll majd rendelkezésre, és nincs rá garancia, hogy nem fog ütközni mással. A lebonyolítás módja a reguláris laborokéval megegyező, de mindenki új feladatokat kap. + +Minden problémával először a laborvezetőhöz érdemes fordulni. Ha ő nem tud segíteni, utána fordulj a tárgyfelelőshöz: (gajdos(at)db.bme.hu). + +### Technikai tudnivalók + +A jegyzőkönyvek beadása: emailben Solymos Szilárd címén. Minden jegyzőkönyvnek az elején tartalmaznia kell a ténylegesen megoldott feladatok sorszámát. Ezen információ hiányában a jegyzőkönyvet nem értékeljük. + +A laborokon használt [Oracle kliensprogramok](programok-oracle) és telepítési tanácsok. + +Oracle kézikönyvek: + + - [Oracle Database dokumentáció az OTN webhelyen](http://docs.oracle.com/en/database/database.html) + - [SQL Language Reference (HTML, 12cR1)](http://docs.oracle.com/database/121/SQLRF/toc.htm) + - [SQL Language Quick Reference (HTML, 12cR1)](http://docs.oracle.com/database/121/SQLQR/toc.htm) + +### Laborok + + + 1. labor – [Oracle](oracle-labor/) + 2. labor – [SQL](sql-labor/) + 3. labor – [JDBC](jdbc-labor/) + 4. labor – [SOA](soa-labor/) + 5. labor – [XML](xml-labor/) + + +### Pótlás + +Szervezés alatt. + +{% include targykodok.md %} diff --git a/adatbazisok-labor/jdbc-labor/hallgatoi-segedlet-jdbc2017.pdf b/adatbazisok-labor/jdbc-labor/hallgatoi-segedlet-jdbc2017.pdf new file mode 100644 index 000000000..66aad1a40 Binary files /dev/null and b/adatbazisok-labor/jdbc-labor/hallgatoi-segedlet-jdbc2017.pdf differ diff --git a/adatbazisok-labor/jdbc-labor/index.md b/adatbazisok-labor/jdbc-labor/index.md new file mode 100644 index 000000000..c19e42624 --- /dev/null +++ b/adatbazisok-labor/jdbc-labor/index.md @@ -0,0 +1,13 @@ +--- +layout: page +title: JDBC labor +--- + +{% include adatbazisok-labor_kifuto_targy_figyelmeztetes.md %} + + Az 3. labor [felkészülési anyaga](hallgatoi-segedlet-jdbc2017.pdf), és szükséges hozzá az I. (Unix összefoglaló) és a III. Függelék (Reguláris kifejezések) is. + + - [Hallgatói útmutató](jdbc-hallgatoi-utmutato) + - [Jegyzőkönyv írási tudnivalók és sablonok](/jegyzokonyv/tudnivalok/) + - [Példaprogram](https://github.com/adatlabor/jdbc-demo) + - [Hatékony lekérdezések az adatbázison](jdbc-sql-hatekonysag) diff --git a/adatbazisok-labor/jdbc-labor/jdbc-hallgatoi-utmutato.md b/adatbazisok-labor/jdbc-labor/jdbc-hallgatoi-utmutato.md new file mode 100644 index 000000000..5ee02568e --- /dev/null +++ b/adatbazisok-labor/jdbc-labor/jdbc-hallgatoi-utmutato.md @@ -0,0 +1,671 @@ +--- +layout: page +title: JDBC labor hallgatói útmutató +author: Varsányi Márton +--- + +Hallgatói útmutató a JDBC méréshez + + +Környezet kialakítása a Rapid szerveren +======================================= + +A JDBC mérés keretében egy Java Web Start alkalmazást fogunk írni. Ehhez +egy példa alkalmazást bocsátunk a hallgatók rendelkezésére, mely +sablonként, kiindulási alapként szolgál a mérés során elkészítendő +alkalmazáshoz. + +A minta alkalmazás a következő módon tölthető le és állítható be +legegyszerűbben a Rapid szerveren, SSH kliensen (pl. PuTTY) keresztül +történő belépés után. + +```shell +curl -L https://db.bme.hu/r/jdbc/demo | sh +``` + +A fenti parancs futtatása után az aktuális könyvtárban létrejön +egy `jdbc` nevű, mely tartalmazza a példakód legfrissebb verzióját, egészen +pontosan azon részeit, amik minden feladatsorra megegyeznek. A többi részt +a preproc.sh fogja letölteni, lásd később. + +Az előző mérés során létrehozott táblákra, adatokra szükségünk lesz, +ennek biztosítása érdekében **futtassuk le újra az SQL mérésen már +megismert inicializáló scriptet** (ez a 0. feladat is) + +Dolgozni a lokális, illetve a `rapid.eik.bme.hu` nevű gépen fogunk, +ahova a labor elején mindenki megkapja a bejelentkezési nevét és +jelszavát. Az első bejelentkezés alkalmával ezt meg kell változtatni. +Elkerülvén az elfelejtett adatbázis-jelszavakból adódó problémákat, a +laborra mindenki úgy érkezzen, hogy be tud lépni az adatbázisba! + +A fejlesztéshez használható a Rapidon található JDK (8-ás verzió). + +A labor elején a környezetbeállítás és a minta alkalmazás kipróbálása +során, valamint később a fejlesztés során az alábbi lépések szerint +járjunk el: + + 1. Próbáljuk ki a minta alkalmazást (szkeletont), melynek egy példánya + a következő URL-en érhető el (az oldalon található hivatkozás + segítségével indíthatjuk az alkalmazást): + + 2. Csatlakozzunk az adatbázis szerverhez, a minta alkalmazás felületén + megadva az adatbázishoz való kapcsolódáshoz szükséges + felhasználónevünket és jelszavunkat. + Az említett felhasználónév és jelszó ahhoz az adatbázis fiókhoz + tartozik, melyet az elmúlt két mérés alkalmával is használtunk (pl.: + SQLDeveloper-ben megadva). + **A jelszó nem összekeverendő az óra elején (a + feladatlap fejlécében) kiosztott Rapid-os jelszóval.** + 3. Jelentkezzünk be a Rapid szerverre SSH vagy pl. PuTTY + kliensen keresztül. Bejelentkezést követően automatikusan a `$HOME` + könyvtárunkba kerülünk. + 4. Töltsük le a minta alkalmazást az alábbi parancs futtatásával: + **Fontos, hogy amennyiben korábban már futtattuk a parancsot, úgy + *ne futtassuk le újból* (ellenkező esetben furcsa hibákkal + szembesülhetünk)! Amennyiben erre mégis szükség lenne, úgy előtte + töröljük a \$HOME könyvtárunkban létrehozott alkönyvtárakat + (jdbc, public\_html) – szükség esetén előtte biztonsági mentést + készítve munkánkról!** + + `curl -L https://db.bme.hu/r/jdbc/demo | sh` + + A parancs egyrészt letölti a minta alkalmazást az aktuális + könyvtárba (ez bejelentkezést követően a `$HOME` könyvtárunk), + másrészt beállítja a környezetet, mely során a következő lényegesebb + lépések történnek: + - Minta alkalmazás tömörített „csomagjának” letöltése és + kicsomagolása a `jdbc` könyvtárba + - Megfelelő jogosultságok beállítása a `$HOME` könyvtáron, a `jdbc` + könyvtáron és alkönyvtárain + - `$HOME/public_html` könyvtár létrehozása + - `$HOME/public_html` megfelelő jogosultsági beállítása + - Végül a `$HOME/public_html` könyvtárban szimbolikus link + létrehozása jdbc néven a + `/jdbc/web` + könyvtárra + - Ennek megfelelően a ./jdbc/web könyvtárba kerülő alkalmazás + elérhetővé válik a következő címen: + `https://rapid.eik.bme.hu/~neptun/jdbc` + + 5. Az előbbi pontban lefuttatott környezetbeállító script szimbolikus + linket készít a Rapid-on található közös JDBC meghajtó példányra. + Amennyiben ez valamilyen oknál fogva sikertelen lenne, úgy tegyük + manuálisan a meghajtót a `jdbc/lib` könyvtárba. (A JDBC driver az + `ojdbc7.jar` nevet viseli.) + 6. Lépjünk be a `jdbc` könyvtárba (`cd jdbc`), majd hozzuk létre a + `conf/preproc.config.sh` scriptet a `conf/preproc.config.sh.sample` + script másolásával. Az újonnan létrehozott (konfigurációs célt + szolgáló fájlban) állítsuk be a címet, neptun kódunkat (Rapid + felhasználó neve), stb. + - **A neptun kódunk *csupa kisbetűvel* írandó!** + - **A feladatsor neve *csupa nagybetűvel* írandó!** + - A konfigurációs script változóinak értékében ne használjunk + speciális karaktert, entert. + - A fenti script konfigurálja a következő lépésben futtatandó + előfeldolgozó scriptet. + 7. Futtassuk le az előfeldolgozó (preprocesszor) scriptet, vagyis + futtassuk a `./util/preproc.sh` fájlt. + - A preprocesszor script testreszabja a szkeleton alkalmazást, vagyis + beállítja a minta alkalmazás HTML fájljában, a MANIFEST és a JNLP + fájlban az alkalmazás nevét, címét, rövid leírását, valamint a + hallgató nevét, neptun kódját, illetve opcionálisan a Oracle JDBC + meghajtó elérési útvonalát az előbbi pontban létrehozott + konfigurációnak megfelelően. + - Letölti a mintaalkalmazás azon részeit, amelyek függenek a hallgatóhoz + rendelt feladatsortól. + - Fontos megjegyezni, hogy a preprocesszor script csak + szöveghelyettesítést végez, vagyis lecseréli a placeholdereket az + érintett fájlokban a `conf/preproc.config.sh` szerinti értékekre. + Ennek megfelelően másodjára, harmadjára stb. futtatva a scriptet, + az már hatástalan lesz. + - Ha valami miatt mégis szükséges a preprocesszor script újbóli + futtatása, úgy munkánk biztonsági mentését követően töröljük + `$HOME` könyvtárunkból a létrehozott alkönyvtárakat (`jdbc`, + `public_html`), majd kezdjük elölről a deploy-olást. Ehhez a már + ismert parancs használható (`curl -L https://db.bme.hu/r/jdbc/demo | sh`). + - **Az alkalmazás sikeres fordításához és működéséhez szükséges a + konfigurációs script fájl létrehozása és beállítása, valamint a + preprocesszor script lefuttatása!** + 8. Ezt követően lehetővé válik az alkalmazás build-elése, mely + (továbbra is) a `jdbc` könyvtárban állva az alábbi parancs + futtatásával történhet: + + `scons` + + Fontos, hogy a lefordított fájlra legyen olvasási joga az + „other” csoportba tartozó felhasználónak. (Ezt a scons elvégzi, + egyébként `chmod 644 `) + 9. Amennyiben a korábbi build eredményét (pl.: létrehozott + `.class` fájlok) szeretnénk eltakarítani, úgy az a `scons -c` parancs + segítségével történhet. + 10. Ezt követően a böngészőből futtathatóvá válik az alkalmazás. + Próbáljuk ki az alkalmazást, melynek elérhetősége: + + `https://rapid.eik.bme.hu/~neptun/jdbc` + + Adjuk meg az adatbázishoz való kapcsolódáshoz szükséges + felhasználónevünket és jelszavunkat. + + Amennyiben a böngészőben történő futtatás során „Found unsigned + entry in resource:” kezdetű hibaüzenetet kapunk (ennek + megjelenítéséhez a felugró üzenetablakban kattintsunk a Details + gombra), úgy indítsuk el a Java Control Panel-jét (`javacpl.exe`) és + ellenőrizzük, hogy a beállításoknál (General/Settings...) a Keep + temporary files on my computer pont be legyen pipálva. + + 11. Módosítsuk, bővítsük a szkeletont a feladatoknak megfelelően, majd + folytassuk a folyamatot a 8. lépéstől. + +Aki a lokális gépen fejleszt, az a fájlrendszeren belül hozzon létre egy +mappát és oda töltse le a szükséges fenti állományokat. A +munkaállományait a mérés végén azonban töltse majd át a UNIX-ra (pl. +WinSCP segítségével), ahol a mérésvezetők majd ellenőrizni tudják a +mérés eredményét. Fontos, hogy a lokális gépen használt HTML fájl +általában a UNIX-on is használható, de mivel a mérésvezetők a UNIX-on +található eredményt fogják ellenőrizni, fontos, hogy ott is ki legyen +próbálva a megoldás! + +A fordításhoz a korábbiakban leírtaknak megfelelően szükség van az +`ojdbc7.jar` fájlra, ami a JDBC drivert tartalmazza. + +Általános elvárás, hogy a lefordított program JRE 1.8 +futtatókörnyezettel kompatibilis legyen. Ez a Rapidon történő fejlesztés +esetén egyértelműen teljesül, mivel ott ilyen verziójú Java környezet +található (1.8.0\_73). Lokális gépen történő fordítás esetén erre külön +kell figyelni. Például Windowsban nem mindegy, hogy melyik verziójú Java +környezet szerepel előbb a `PATH` változóban! + +Tesztelés böngészőből (IE, Chrome, Mozilla) +=========================================== + +A Rapidról letöltött alkalmazások a program külön beállítása nélkül +futnak böngészőből. Ennek a legfontosabb feltétele, hogy az alkalmazás +mellett található Web Start protokoll leíró fájl (JNLP) megfelelő +elérési útvonallal és fájl elnevezésekkel kerüljön feltöltésre (ez +alapesetben a preprocesszor script futtatása után teljesül). + +**Fontos probléma**, hogy a Java 7u51-es frissítés nem teszi lehetővé +többek között Web Start alkalmazások futtatását sem, amennyiben azok nem +rendelkeznek megbízható CA által aláírt tanúsítvánnyal (az önaláírt sem +jó). Bővebben a [hivatalos blogon][1]. + +A probléma egy lehetséges megoldása az ún. [exception site list][2]-ek +használata. +A megoldás lényege, hogy a Java Control Panel-jén explicite engedélyezni +kell a kívánt alkalmazást, oly módon, hogy az URL-jét fel kell venni egy +kivétel listára. +Ehhez a Java Control Panel (javacpl.exe) „Security” fülén az „Edit Site +List...” lehetőséget kell választani, majd a „Location” alatti mezőbe +felvenni az alkalmazás URL-jét, végül az „Add” gombbal hozzáadni. Az URL +megadásakor a tartalmazó HTML oldal nevének vagy a konkrét JNLP fájlnak +nem kell szerepelnie. + +Például ha a próbaalkalmazás a +`https://rapid.eik.bme.hu/~marton/jdbc/application.jnlp` címen érhető +el, ekkor a listába a `https://rapid.eik.bme.hu/~marton/jdbc/` URL=t +kell felvenni (a végén lévő perjel fontos)! + +Az ezt követő futtatáskor a Java még egy figyelmeztető ablakot fel fog +dobni, de ezután már működik az alkalmazás. + +Futtatás előtt állítsuk át a következőket: Java Control Panel → General +→ Temporary Internet Files → Settings… → Keep temporary files on my +computer pontot pipáljuk be, majd OK. + +Frissen újrafordított program vagy módosított JNLP fájl esetében +előfordul, hogy a Java tárolja a korábbi programváltozatot. Ilyenkor a +[Java plugin cache][3]-t kell törölni: Java Control Panel → General → Settings… → +Delete Files… → OK. + +A HSZK kliensgépein a Microsoft App-V alkalmazás virtualizációs +rendszer van telepítve. Az említett munkaállomásokon két fajta Java +futtatókörnyezet is telepítésre került, az egyik az alkalmazás +virtualizációs rendszerben érhető el, a másik ettől függetlenül. Utóbbi +verzió a `C:\Program Files\Java\` könyvtárból kiindulva érhető el. A +munkaállomásokon telepített böngészők az alkalmazás virtualizációs +rendszer „feletti” Java futtatókörnyezetet érik el, így a biztonsági +beállítások megadásához és az alkalmazás futtatásához (engedélyezéséhez) +a módosításokat is értelemszerűen az App-V-s futtatókörnyezetben +szükséges megadni (ellenkező esetben, pl. ha a `C:\Program Files\Java\` +könyvtár alatti `javacpl.exe` binárist használjuk, úgy a változtatásaink +érthető módon hatástalanok maradnak). + +A fentieknek megfelelően sikeres beállításhoz az alkalmazás +virtualizációs rendszer „feletti” Java RE control panel-jén kell +elvégezni a változtatást. A control panel eléréséhez a következő két +megoldás egyikét javasoljuk a HSZK-ban: + + - Start menü/Run indítása, majd a javaws -viewer parancs futtatása + VAGY + - Task managerben a File/New Task opció választása, majd szintén a + `javaws -viewer` parancs futtatása + +Mindkét parancs hatására amennyiben be van állítva a cachelés Java-ban, +úgy egy "Java Cache View" ablak jelenik meg, mely mögött betöltődik a +Java Control Panel ablaka is, így a cache view-t csak be kell zárni, ezt +követően már módosíthatunk a control panelen. + +A változtatások érvénybe léptetését követően futnia kell az +alkalmazásunknak (böngészőből betöltve). + +(Egy másik megoldás lehet a JNLP fájlban hivatkozott alkalmazás JAR fájl +letöltése a lokális gépünkre, majd onnan történő futtatása. (Ekkor nincs +szükség a biztonsági beállítások módosítására a control panelen.)) + +Fordítás a Rapidon, Scons +========================= + +A Rapid szerveren történő fordítás a Scons névre hallgató alkalmazás +segítségével történik. A Scons egy nyílt forráskódú, automatikus +buildelést lehetővé tevő eszköz. + +A Scons néhány fontosabb jellemzője: + + - A fordítás menetét leíró konfigurációs fájlok Python scriptek, ahogy + maga az alkalmazás is Python nyelven íródott + - Megbízható, automatikus függőség-analízist és beépített támogatást + (buildereken keresztül) tesz lehetővé számos programnyelvhez + - Megbízhatóan detektálja a fájlok változtatásait a fájlok MD5 + lenyomata alapján + - A buildelés egyszerűen a scons parancs kiadásával történhet abban a + könyvtárban, ahol a fordítás menetét leíró állomány is található + - A fordítás menetét leíró állomány (Python script) a SConstruct nevet + viseli + - Teljesen automatikusan és inkrementálisan buildel és egy sqlite + állományban követi, hogy milyen fájlokat hozott létre, így a „clean” + targetet sem kell megírnunk (a „takarításhoz” egyszerűen elég a + `scons -c` parancsot futtatnunk) + - Cross-platform + +A labor során kiadott minta alkalmazás (szkeleton) forráskódja, a +fordításhoz és működéshez szükséges állományai a következő +könyvtárstruktúrában kerültek elhelyezésre: + + - projekt könyvtár/ + - `conf/`: a konfigurációs fájlokat tartalmazó könyvtár + - `MANIFEST.MF`: az alkalmazás JDBC driverrel való fordításához + szükséges állomány + - `preproc.config.sh.sample`: a minta konfigurációs script a + preprocesszor script konfigurálásához + (lemásolandó `preproc.config.sh`: néven) + - `webstart.keystore`: az alkalmazás és a JDBC driver + aláírásához szükséges kulcs tárolója + - `lib/`: ebbe a könyvtárba linkelődik a JDBC driver JAR fájlja + - `resources/`: az alkalmazás felületét XML nyelven leíró fájl(ok) + helye + - `View.fxml`: az alkalmazás felületét XML nyelven leíró fájl + - `src/`: az alkalmazás Java forráskódját tartalmazó könyvtár + - `application`: Az alkalmazás Controller és View rétegét tartalmazó package. + - `AppMain.java`: az alkalmazás belépési pontját tartalmazó + osztály forráskódja + - `ComboBoxItem.java` – A legördülő menükhöz társítható modell osztály + - `Controller.java` – Az alkalmazás vezérlő rétegét (controller) megvalósító osztály forráskódja + - `dal` - Az alkalmazás adatelérési rétégét tartalmazó package + - `DataAccessLayer.java` – Az adatelérési réteg generikus interfészét tartalmazó forrásfájl + - `ActionResult.java` – Enum az adatmódosító feladatok eredményének jelzésére + - `dal.exceptions` – Az adatelérési rétegben definiált kivételeket tartalmazó package + - `dal.impl` – Ebben a packageben várjuk el a hallgatótól, hogy implementálja a DataAccessLayer interfészt + - `model` – Ebben a packagebe tartoznak a megjelenítendő entitásokat reprezentáló POJO osztályok + - `util/`: a környezetbeállító és a preprocesszor scriptet + tartalmazó könyvtár + - `deploy.sh`: az alkalmazás letöltését és a környezetbeállítást leíró shell script + - `preproc.sh`: – Az alkalmazás előfeldolgozásáért (testreszabásáért) felelős script + - `web/`: a webszerver által kiszolgálandó fájlokat tartalmazó + könyvtár + - `.htaccess`: a webszerver számára szolgáló könyvtár-szintű + konfigurációs állomány + - `application.jnlp`: a Java WebStart alkalmazás leíró + állománya (megadja, hogy az alkalmazást megvalósító JAR + fájlt, illetve a JDBC drivert honnan kell betölteni) + - `index.html`: a `https://rapid.eik.bme.hu/~neptun/jdbc` címről + elérhető HTML fájl. Hivatkozást tartalmaz a JNLP fájlra és + így közvetett módon az alkalmazásra. + - `logo.png`: – Az előbbi HTML oldal közepén megjelenő képfájl + - `SConstruct`: az alkalmazás buildelésének lépéseit Python nyelven + leíró állomány (a fájlban leírt lépések hajtódnak végre a scons + parancs futtatásának hatására) + +A Rapid-on történő fordítás a `scons` parancs kiadásával történhet, a +lefordított fájlok törléséhez a `scons -c` parancsot használhatjuk. A +buildelés során végső soron is az src és resources könyvtárak tartalma +fordítódik le és készül belőle JAR fájl, mely már a futtatható +alkalmazás. Az alkalmazás, valamint a JDBC driver a web könyvtárban +kerül automatikusan elhelyezésre, melyek kiegészülve a JNLP fájllal, egy +komplett Java WebStart alkalmazást eredményeznek. A web könyvtárban +található HTML fájl erre a JNLP fájlra tartalmaz hivatkozást, mely a +`https://rapid.eik.bme.hu/~neptun/jdbc` URL-en elérhető és innen indulva +futtathatjuk az alkalmazást. + +A fentieknek megfelelően a feladatok megoldása során alapvetően az `src/` +és `resources/` könyvtárak tartalmát, a bennük található Java és +felületleíró XML fájlokat kell módosítani, bővíteni. + +MVC architektúra, JavaFX +======================== + +A minta alkalmazás felépítése a klasszikus MVC (Model-View-Controller) +architektúrát követi. Ennek megfelelően az alkalmazás forrásfájljai a +következő architekturális rétegeknek felelnek meg: + + - `src/application/AppMain.java` + - Az alkalmazás belépési pontját tartalmazó osztály forráskódja + - Inicializálja a kontroller (controller) és a + megjelenítési (GUI/view) réteget + - `src/Model/*.java` + - Az alkalmazás modell rétegét megvalósító osztályok forráskódja + - Gyakorlatilag POJO oszályok, amik az adatok tárolását és + ellenőrzését valósítja meg. + - `src/application/Controller.java` + - Az alkalmazás kontroller rétegét megvalósító osztály forráskódja + - Példányosítja az adatelérési réteget és összekapcsolja a nézetet + a modellekkel. + - Továbbítja a nézetből érkező eseményeket a modell + réteg/adatelérési réteg felé, majd visszaadja a „válaszokat” + a nézetnek (View.fxml) + - `resources/View.fxml` + - Az alkalmazás felületét leíró XML fájl, mely XML (Extensible + Markup Language) nyelven reprezentálja az alkalmazás felületén + (az ablakban) elhelyezett GUI elemeket + - Kapcsolódik a Controller osztályhoz (referenciát tartalmaz rá), + melynek eseményeket küldhet + +A JavaFX-es alkalmazások MVC modelljének, illetve az XML alapú felület +jobb megértéséhez hasznos lehet a következő [JavaFX Tutorial] átolvasása. + +Az FXML fájl szerkesztéséhez referenciaként szolgálhat az [FXML bevezető]. + +Implementációs követelmények +============================ + +A feladatok megoldásakor a minta alkalmazás módosítása során a következő +szempontokat ***KÖTELEZŐ*** betartani: + + - A modell osztályok ne kommunikáljanak egyetlen másik réteggel sem. Az adatelérési + réteg csak a modelleket ismerje, a Controller az adatelérési réteget és + a modelleket, a View pedig csak a Controlleren keresztül kommunikáljon + a többi komponenssel. + - A feladatok elvégzésénél a Controller, a megkezdett DataAccessLayer implementáció + és a modell osztályok üres függvényeit kell implementálni a View.fxml + kiegészítése mellett. JavaFx-specifikus importokat csak a Controller + osztály tartalmazhat. Szükség esetén a Controller osztályba új (publikus) metódusok + felvetők. + - A 4.1-es feladatnál csak és kizárólag a tranzakcióban részt vevő másik tábla + elsődleges kulcsának oszlopát kell bekérni a felhasználótól. + - A formátum ellenőrzés a Controller rétegben történjen a modell osztályok + parseXXX(String input) fejlécű metódusaival. Ha a validáció során hiba + keletkezett, akkor az adatelérési réteget már ne hívjuk meg! + - Az eredmények jelzésére használjuk a már előre definiált kivételeket! + - Ha egy modell osztályt a View-ból származó adatokkal töltjük fel a Controllerben, akkor a + parseXXX metódusokat használjuk, hogyha pedig a DataAccessLayerből + töltjük fel, akkor a setXXX metódusokat használjuk! Kivétel ez alól az, ha valaki nem oldja + meg a 3-as feladatot, akkor használhatóak a setter metódusok. + - A validációs kivételek eldobásakor adjuk meg a konstruktorban a tagváltozó nevét! + - A laborok során a dátumokat a Java 8-as java.time.LocalDate osztállyal kezeljük. + - Az interfész metódusainak fejlécén ne módosítsunk, ha újfajta hibát akarunk bevezetni, + használjunk RuntimeExceptionöket! Ugyanígy a modell osztályok metódusainak fejlécét se írjuk át, + ezek is az alkalmazásunk adatelérési rétegének interfészéhez tartoznak! + + +További tudnivalók +================== + +A megfelelő hitelesítő adatok megadása után a kapcsolódás gombra nyomva, +majd a keresőfelületen tetszőleges keresőszót megadva az +`OKTATAS.SZEMELYEK` tábla első 20 emberének nevét és személyi számát +listázza ki névsorban. + +**Kérjük, hogy a kapcsolódáshoz használt felhasználónév-jelszó párost +mindenki feltétlenül tüntesse fel a beadott jegyzőkönyvében.** + +A további feladatok megoldásához a kivételek elkapása kötelező, a +programon kívülre nem juthat kivétel! A nem megfelelő bemeneteket +szintén le kell kezelni, a program írja ki, hogy mi a hiba és hol +történt (felhasználói hibakezelés szükséges - pl. a bemeneti mező szám, +túl hosszú szöveg, megoldás lehet például egy dialógusablak feldobása a Controllerből). + +A megoldás során támaszkodjunk a mintakódban már kialakított struktúrára +és elnevezésekre, a mintaalkalmazás kiindulási alapnak tekintendő. + +Törekedjünk a biztonságos kódra, használjunk PreparedStatementet, SQL +kivételeket, parseInt függvényt! + +A beadandó állományról +---------------------- + +A mérés értékeléséhez egy `NEPTUN-3-CSOPKOD.zip` nevű állomány feltöltése +szükséges a Laboradmin rendszerbe, amelyen belül egy azonos nevű +könyvtár található. A könyvtár az alábbiakat tartalmazza: + + - A teljes forráskódot `lab5jdbc.zip` fájlnévvel. + Ezt **automatikusan megkapjuk az aktuális könyvtárban + a scons parancs futtatása (vagyis a fordítás) során** + A ZIP állományba az alábbi fájlok kerülnek: + - `src/` könyvtár tartalma + - `resources/` könyvtár tartalma + - `web/` könyvtár tartalma, szintén a JDBC meghajtó kivételével + - A jegyzőkönyvet (PDF formátumban), amiben megtalálhatóak (NEPTUN-3-CSOPKOD.pdf): + - rövid (fél oldalas, 6-8 mondatos) felhasználói útmutató az + alkalmazás használatához + - a felhasználónév-jelszó páros + - a megoldás során használt SQL utasítás(ok) + - a feladat megoldásának magyarázata + - a működő alkalmazás elérhetőségének címe: + `https://rapid.eik.bme.hu/~neptun/jdbc/` + - A jegyzőkönyv fejlécében feltétlenül szerepeljenek + a megoldott feladatok sorszámai! + **Ennek hiányában a jegyzőkönyv nem értékelhető.** + - A beadandó állomány struktúrája tehát: + - `NEPTUN-3-CSOPKOD.zip/` + - `NEPTUN-3-CSOPKOD/` + - `lab5jdbc.zip` + - `NEPTUN-3-CSOPKOD.pdf` + +A jegyzőkönyvhöz a honlapon található jegyzőkönyvminták használandók, a +feladatokra elegendő azok számával hivatkozni, **a feladatok szövege ne +szerepeljen a jegyzőkönyvben**! + +A mérés teljesítésének szükséges, de korántsem elégséges feltétele, hogy +a Rapidon sikerrel fordítható és működő alkalmazás kapcsolódjon az +adatbázishoz. Tehát ha a jegyzőkönyvben megadott címen nem található +minimális működést produkáló alkalmazás, akkor a jegyzőkönyv nem kerül +értékelésre. + +A mérés értékeléséről +--------------------- + +A feladatok elkészítése során figyelembe veendő szempontok, hibaforrások: + + - Az elkészített forráskódnak le kell fordulnia, a nem leforduló kód + nem értékelhető! + - A Rapidon nem elérhető alkalmazás nem értékelhető! + - A jegyzőkönyv fejlécében legyenek feltüntetve a megoldott + feladatok sorszámai és pontszámai. Ezek hiányában a jegyzőkönyv nem + értékelhető! + - A kód legyen megfelelően strukturált, átlátható és megfelelően + kommentezett, a kommentezés azonban ne menjen az + átláthatóság rovására. + - Az alkalmazáshoz a jegyzőkönyvben készüljön rövid felhasználói + útmutató is (elmaradása -1 jegy)! + - A jegyzőkönyvben szerepeljen a felhasználónév-jelszó páros! + - A jegyzőkönyvben le kell írni az egyes feladatok megoldásának + logikáját és a megoldás során meghozott tervezői döntéseket, azok + indoklásával együtt. + - A paraméteres lekérdezésekben PreparedStatement használata elvárt + (ha elmarad, akkor a feladatra adható pontszám az egyébként adható max. + 50%-a lehet). + - Az eredmények előállításához szükséges logika (pl.: átlag, maximum, + top N db számítása), ahol csak lehet, az SQL utasítás része legyen, + és ne Java-ban kerüljön megvalósításra (ha ott kerül megvalósításra, akkor a feladatra adható + pontszám az egyébként adható max. 50%-a lehet). + - A megoldásnak a futás során megjelenő kivételeket le kell kezelnie. + Kivétel nem juthat a kimenetre. A kivételkezelés megvalósításakor + ügyeljünk arra, hogy nem csak SQLException történhet, a catch-ágakat + különítsük el (kivételkezelés elmaradása -20%). + - Igényes kód készítése esetén max. + 20% pontszám adható. + - Különösen szép kivételkezelés esetén (pl. az Oracle + hibakódok feloldása) max. + 2 pont + - Az SQL utasításokban a sémanevek használata TILOS! + +A ponthatárok +------------- + +A mérésen a feladatok megoldására 50+5 pont kapható. Az idén alkalmazott +értékelési rendszerhez igazodva a pontszámokhoz tartozó érdemjegyek +a következők: + + ----------- -------- + Jeles 41-50p + Jó 34-40p + Közepes 27-33p + Elégséges 20-26p + Elégtelen 0-19p + ----------- -------- + +**Figyelem!** A jegyzőkönyv fejlécének tartalmaznia kell a megoldott +feladatok sorszámát és pontszámát! + +iMSc pontozás +------------- +Az iMSc pontok számítása összhangban az előző mérések pontszámításával: +akkor jogosult a hallgató iMSc pontok szerzésére, hogyha a 4.2-es +feladat pontszáma 0-nál nagyobb, illetve a többi feladatból szerzett pontok +száma eléri a 42,5-et. Ekkor hozzáadódik a 4.2-es feladat pontszáma a +szorgalmi feladat nélküli pontszámhoz, és a 85% feletti részből százalékpontonként +1 iMSc pontot kap a hallgató, de legfeljebb 10-et. + +További segédanyagok +-------------------- + +Java Database Connectivity: (a példák hasznosak lehetnek a +PreparedStatement jobb megértéséhez és típusfüggvények használatához) + + - + - + +Szemelvények a JDBC API-ból +=========================== + +Ebben a részben vázlatosan ismertetünk néhány olyan témát, ami a hallgatói segédletből +kimaradt, de hasznos lehet. + +Időpontok (dátumok) kezelése +---------------------------- + +Ebben a szakaszban *időpont* alatt a dátum-idő-tengely egy pontjának valamilyen felbontású +leírását értjük. Ebben az értelemben tehát a *dátum* egy *nap felbontású időpont* (`1848-03-15`), +de beszélhetünk perc (pl. `1848-03-15 15:00`) vagy másodperc felbontású időpontról is. + +Hagyományosan a Java SE platformon az időpontok kezelése a [java.util.Date] osztályon alapul, +amely milliszekundumos felbontású időpont tárolására alkalmas. +Időzóna információt [java.util.TimeZone] és a [java.util.Calendar] osztályokkal kombinálva lehet kezelni. + +A JDBC API-ban a [java.util.Date] osztályra építve +a [java.sql.Date], [java.sql.Timestamp] és [java.sql.Time] ún. *wrapper* osztályok teszik lehetővé +időzóna-támogatás nélkül rendre a nap felbontású időpont, a nanoszekundum felbontású dőpont +és a dátum nélküli, milliszekundumos felbontású idő kezelését. + +A Java SE 8-as főverziójában a [JEP 150] javaslat szerint bevezettek egy új API-t a dátumok és időpontok +kezelésére, ami a [java.time] csomagban kapott helyet, és egységes keretben támogatja a dátum és időkezelés +olyan problémáit, mint az időzóna nélküli és az időzónát tartalmazó különböző felbontású időpontok, +csonka dátumok (pl. hónap-nap a [java.time.MonthDay] osztályban) és időintervallumok kezelése. + +Az *időzóna nélküli* eseteket támogató néhány osztály: + + * a [java.time.LocalDate] a nap felbontású időpontok (dátumok), + * a [java.time.LocalDateTime] a nanoszekundum felbontású időpontok, míg + * a [java.time.LocalTime] a dátum nélküli idő kezelésére való. + +A JDBC 4.2 ugyan a [JEP 170] szerint támogatja ezek kezelését +a generics-alapú [` ResultSet.getObject(int, Class)`] kiolvasó és +az általános [`void PreparedStatement.setObject(int, Object)`] paraméter-beállító +metódusokon keresztül, de ezt sajnos még nem minden driver implementálja. + +Az Oracle JDBC Driver labor során használt 12.1 thin verziója jelenleg (2017. március) +ezt nem támogatja, így típuskonverzióra van szükség a mintaalkalmazás +[LocalDate][java.time.LocalDate] típusú mezői és a JDBC API között. +A típuskonverzió bemutatására készítettünk egy [JDBC LocalDate mintakód]ot, +amely bemutat néhány esetet. +Közülük az alábbiakra térünk ki: + +Egy [LocalDate][java.time.LocalDate] típusú paraméter beállítására a `Date java.sql.Date.valueOf(LocalDate)` +metódussal elvégzett típuskonverzió után a `PreparedStatement.setDate(int, Date)` +használható, l. [JDBC LocalDate mintakód, setDate]. + +Egy [ResultSet][java.sql.ResultSet]-ből lekérdezett dátum értéket a `LocalDate java.sql.Date.toLocalDate()` +metódussal konvertálhatunk `LocalDate` típusúvá, +l. [JDBC LocalDate mintakód, getDate(int).toLocalDate()]. + +Az Oracle adatbázis `Date` típusa másodperc felbontású időpontot tartalmaz, +amit hagyományosan a [java.sql.Timestamp] kezel, az új API-ban pedig +a [LocalDateTime][java.time.LocalDateTime] osztály való erre. +[ResultSet][java.sql.ResultSet] eredményhalmazból lekérdezésére +l. [JDBC LocalDate mintakód, getTimestamp(int).toLocalDateTime()]. + +Generált kulcsmezők lekérdezése SQL `INSERT` után +------------------------------------------------- + +Új rekord beillesztésekor a mesterséges kulcsot gyakran az adatbáziskezelő +generálja. Oracle Database esetén ez tipikusan ún. *sequence* objektumra +alapozva történik az insert utasításban szereplő explicit `sequence.nextval` hívással, +vagy a táblán definiált triggerrel. +Az Oracle Database 12cR1 verzióban bevezetett ún. *identity* oszlop mögött +is egy sequence objektum húzódik meg. +Gyakori igény, hogy rekord beszúrása után lekérdezzük a létrejött rekord +generált kulcsmezőjét. + +A különböző SQL nyelvjárások erre különböző lehetőséget adnak, +a JDBC API 3.0 verziója azonban bevezetett erre egy gyártófüggetlen interfészt. +Ebben egy `String` tömb formájában megadható, hogy az `INSERT` utasítás +végrehajtása után a rekord melyik mezőit szeretnénk visszakapni. +Megjegyzés: a megoldásnak bár vannak korlátai, nem csak generált +mesterséges kulcs lekérdezésére használható. + +A [JDBC LocalDate mintakód] erre vonatkozóan is tartalmaz példát. +A három legfontosabb metódus: + + 1. Az [`int java.sql.Statement.executeUpdate(String, String[])`] hívás egy `INSERT` utasítás + végrehajtása után a második paraméterben kért oszlopok értékeit teszi elérhetővé. + 2. A [`PreparedStatement java.sql.Connection.prepareStatement(String, String[])`] + metódus olyan `PreparedStatement` objektumot ad vissza, amely az `INSERT` + végrehajtása után - (1)-hez hasonlóan - a második paraméterben szereplő oszlopok + értékeit teszi elérhetővé. + L. a mintakód [prepareStatement][getGeneratedKeys mintakód, prepareStatement] hívásánál. + 3. A [`ResultSet java.sql.Statement.getGeneratedKeys()`] a végrehajtás után + adja vissza az (1) ill. (2) során kért és elérhetővé tett mezőket + egy [ResultSet][java.sql.ResultSet] formájában. + L. a mintakód [generált kulcsokat lekérdező ciklusában][getGeneratedKeys mintakód, getGeneratedKeys]. + + +**Jó munkát!** + +[1]: https://blogs.oracle.com/java-platform-group/entry/new\_security\_requirements\_for\_rias +[2]: https://blogs.oracle.com/java-platform-group/entry/upcoming_exception_site_list_in +[3]: http://www.java.com/en/download/help/plugin_cache.xml +[JavaFX Tutorial]: http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm +[FXML bevezető]: http://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html + +[JEP 150]: http://openjdk.java.net/jeps/150 +[JEP 170]: http://openjdk.java.net/jeps/170 +[java.util.Calendar]: http://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html +[java.util.Date]: http://docs.oracle.com/javase/8/docs/api/java/util/Date.html +[java.util.TimeZone]: http://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html +[java.sql.Date]: http://docs.oracle.com/javase/8/docs/api/java/sql/Date.html +[java.sql.ResultSet]: http://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html +[java.sql.Time]: http://docs.oracle.com/javase/8/docs/api/java/sql/Time.html +[java.sql.Timestamp]: http://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html +[java.time]: https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html +[java.time.LocalDate]: http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html +[java.time.LocalDateTime]: http://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html +[java.time.LocalTime]: http://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html +[java.time.MonthDay]: http://docs.oracle.com/javase/8/docs/api/java/time/MonthDay.html +[` ResultSet.getObject(int, Class)`]: http://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html#getObject-int-java.lang.Class- +[`void PreparedStatement.setObject(int, Object)`]: http://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html#setObject-int-java.lang.Object- +[JDBC LocalDate mintakód]: https://gist.github.com/jmarton/5320cbcfa8a382c83ae2ae28d77d4237?ts=2 +[JDBC LocalDate mintakód, setDate]: https://gist.github.com/jmarton/5320cbcfa8a382c83ae2ae28d77d4237?ts=2#file-localdatetestjdbc-java-L82 +[JDBC LocalDate mintakód, getDate(int).toLocalDate()]: https://gist.github.com/jmarton/5320cbcfa8a382c83ae2ae28d77d4237?ts=2#file-localdatetestjdbc-java-L122 +[JDBC LocalDate mintakód, getTimestamp(int).toLocalDateTime()]: https://gist.github.com/jmarton/5320cbcfa8a382c83ae2ae28d77d4237?ts=2#file-localdatetestjdbc-java-L123 +[`int java.sql.Statement.executeUpdate(String, String[])`]: http://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#executeUpdate-java.lang.String-java.lang.String:A- +[`ResultSet java.sql.Statement.getGeneratedKeys()`]: http://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#getGeneratedKeys-- +[`PreparedStatement java.sql.Connection.prepareStatement(String, String[])`]: http://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html#prepareStatement-java.lang.String-java.lang.String:A- +[getGeneratedKeys mintakód, prepareStatement]: https://gist.github.com/jmarton/5320cbcfa8a382c83ae2ae28d77d4237?ts=2#file-localdatetestjdbc-java-L56-L57 +[getGeneratedKeys mintakód, getGeneratedKeys]: https://gist.github.com/jmarton/5320cbcfa8a382c83ae2ae28d77d4237?ts=2#file-localdatetestjdbc-java-L103-L110 diff --git a/adatbazisok-labor/jdbc-labor/jdbc-sql-hatekonysag.md b/adatbazisok-labor/jdbc-labor/jdbc-sql-hatekonysag.md new file mode 100644 index 000000000..a66c09eb8 --- /dev/null +++ b/adatbazisok-labor/jdbc-labor/jdbc-sql-hatekonysag.md @@ -0,0 +1,256 @@ +--- +layout: page +title: Hatékony lekérdezések az adatbázison +author: Marton József, Milanovits Richárd +date: 2013. március +--- + +Hatékony lekérdezések az adatbázison + +Nagy adatmennyiségek kezelése esetén kiemelten fontos, hogy egy igen +kritikus paramétert, a lekérdezések erőforrás-igényét (és az azzal +szorosan összefüggő futásidőt) a lehető legalacsonyabb értéken tartsuk. +Az alábbiakban azt mutatjuk be, hogy három alapelv szem előtt tartásával +a futásidő jelentős mértékben, akár nagyságrendekkel is csökkenthető. + +Az adatok tárolási struktúrájának kialakítása +============================================= + +Az adatbázis tábláinak tervezésénél és létrehozásánál is tehetünk olyan +lépéseket, amelyek majd a későbbi műveletek futását gyorsítani tudják. +Az adatok optimális tárolási struktúrájának, sémájának tervezése és +kialakítása alapvetően függ attól, hogy az adatokon milyen műveleteket +és azok milyen arányú kombinációját kívánjuk futtatni. + +Ebbe a kérdéskörbe tartozik az Adatbázisok tárgy relációs sémák logikai +tervezése („normalizálás”) témaköre is. Ott annak a kérdéseit +tárgyaltuk, hogy a normálforma emelésével hogyan lehet +tranzakció-feldolgozó (OLTP) rendszerek számára hatékonyabb, míg a +normálforma alacsonyabban tartásával a lekérdezés-orientált, ún. +analitikus alkalmazások (OLAP) számára kedvezőbb adatbázissémát +tervezni. + +Nagyméretű rekordokat tartalmazó táblák esetében, ha a lekérdező és +módosító műveletek tipikusan csak a rekordok egy lényegesen kisebb +méretű, közös szeletét érintik, megfontolandó a tábla kettévágása oly +módon, hogy a két tábla rekordjai „pontosan egy:pontosan egy” +kapcsolatban állnak egymással, amely kapcsolatot a közös elsődleges +kulcsuk teremt meg. Ekkor az illesztésük ennek segítségével hatékonyan +megoldható, de ha csak a kisebb részre van szükség, akkor lényegesen +kevesebb blokkot kell a háttértárról beolvasnunk. Bizonyos feltételek +mellett ezt az adatbázis-kezelő az alkalmazásprogramozó elől +transzparens módon elrejtve magától megteszi, és léteznek ún. +oszlop-orientált adatbázis-kezelők is, amelyek minden táblát +attribútum(csoport)onként külön tárolva csak a művelet által érintett +attribútumokat olvassák be a háttértárról. + +A heap-szervezésű állományokon végzett műveleteket megfelelően +kiválasztott indexállományokkal támogathatjuk (l. a következő +szakaszban). Bizonyos adatbázis-kezelő rendszerek más állományszervezési +módokat is a rendelkezésünkre bocsájtanak. Az Oracle Database +eszközkészletéből két példát hozunk. Az egyik az adattáblák ún. +particionálása, amikor a tábla valamely attribútumaiban tárolt érték +alapján (pl. dátum-intervallumonként, vagy aktív/historikus jelző) az +egyes rekordok külön-külön állományban foglalnak helyet. A műveletek +elvégzésekor ez az alkalmazásprogramozó számára transzparens, de ha a +művelet elemzésekor az optimalizáló megállapítja, hogy elegendő egy vagy +néhány partícióhoz hozzáférni a művelet elvégzéséhez, akkor a kisebb +megmozgatott adattömeg miatt hatékonyabb lehet a végrehajtás. Az ún. +index-szervezésű tábla (IOT, index-organized table) az Oracle Database +olyan állományszervezési módja, amikor a rekordok egy index +levélcsomópontjaiban foglalnak helyet. Ezek használata akkor lehet +hatékony, ha az állomány rekordjai kicsik, és legtöbbször a struktúrát +tartalmazó index-szel támogatható művelet során férünk hozzá. + +Az indexek megfelelő megválasztása +================================== + +A struktúra megtervezésén túl fontos a táblákon elhelyezett indexek +megfelelő megválasztása is. Ez azonban az egyik legnehezebb feladat az +adatbázis tervezése során. Egy bizonyos attribútum(lista) szerinti index +nagymértékben növeli azon lekérdezések futási sebességét, amelyekben az +adott attribútumlista (kezdőszeletének) értékét ismerjük. Ezzel szemben, +minden egyes index adminisztrálása növeli a beszúrás, módosítás és +törlés műveletek időigényét. + +Általános alapelv, hogy ha egy reláción sokkal többször végzünk +lekérdezést, mint módosítást, javasolt az indexek használata, ha pedig a +lekérdezések várható számossága nincsen nagyságrendi eltérésben a +beszúrás, módosítás, törlés műveletek számával, megfontolandó az +elhelyezésük. Tekintve, hogy az egyes módosítási műveletek végrehajtása +is kereséssel kezdődhet (pl. olyan módosítás vagy törlés, amely WHERE +feltételhez kötött), nem triviális megjósolni, mely adatbázis-műveletek +lesznek a többihez képest magasabb előfordulásúak. + +Az Oracle Database adatbázis-kezelő az elsődleges kulcsként (primary +key) jelölt attribútumokra mindig, az egyediséget előíró kényszerek +(unique) esetén pedig alapértelmezésben indexet épít. Ezekre is +figyelemmel kell lenni az esetleges további indexek definiálásakor. + +Több tábla illesztését (főleg ha az veszteségmentes sémadekompozíció +során létrejött táblák illesztése) tipikusan a táblákon definiált idegen +kulcsok mentén végezzük. Az Oracle Database rendszerben az idegen kulcs +mindig elsődleges vagy egyedi kulcsra mutat, így az előzőek értelmében +alapértelmezésben az optimalizáló rendelkezésére áll index az +illesztések támogatására. Annak érdekében, hogy az indexek ne csak az +idegen kulcs „irányába” által megadott illesztési sorrendet +támogathassák, hanem az ellenkező irányt is (amivel nagyobb teret adunk +az optimalizálónak), sokszor érdemes megfontolni az idegen kulcsként +jelölt attribútum(listák)ra is index építését (ami természetesen a +legtöbbször nem lesz egyediséget biztosító index). + +Hatékony SQL utasítások megfogalmazása +====================================== + +A tárolási struktúrák és indexek helyes megtervezésén túl legalább +annyira kritikus kérdés a futtatni kívánt SQL utasítások optimalitása +is. Amennyiben betartunk pár alapelvet (és ezzel elég nagy szabadságot +hagyunk az Oracle lekérdezés-optimalizáló eljárásának), jelentős +futásidő-csökkenést tapasztalhatunk. + +Indexek használata, ha lehetséges +--------------------------------- + +Ahogy arra az első mérésben is láthattunk példát, egy lekérdezés +sebessége nagyban függ attól, hogy az Oracle tudja-e használni a táblára +definiált indexeket vagy sem. + +A relációs sémák (a példáinkban erre utalunk, az oktatas séma szemelyek +és igazolvanyok nagyobb tábláin hasonló kérdések fogalmazhatók meg): + + * `SZEMELY(IGAZOLVANY_SZAM, NEV, SZULETESI_DATUM, SZULETESI_VAROS)` + ahol `igazolvany_szam` a kulcs. + * `CIM(IGAZOLVANY_SZAM, CIM_TIPUS, IRANYITOSZAM, VAROS, UTCA)` + ahol az `igazolvany_szam` a szemely táblára mutató idegen kulcs, + és az `igazolvany_szam + cim_tipus` együtt a kulcs. + +Kérdezzük le +azon személyek adatait, akik ugyanabban a városban van az állandó +lakcímük, mint ahol születtek, és igazolványszámuk 1-es számjeggyel +kezdődik! + +```sql +select sz.igazolvany_szam, sz.nev, c.cim_tipus, c.iranyitoszam, c.varos + from oktatas.szemely sz, oktatas.cim c + where sz.igazolvany_szam = c.igazolvany_szam(+) + and c.cim_tipus(+) = 1 + and sz.szuletesi_varos = c.varos(+) + and substr(sz.igazolvany_szam,1,1) = '1'; +``` + +```sql +select sz.igazolvany_szam, sz.nev, + c.cim_tipus, c.iranyitoszam, c.varos + from oktatas.szemely sz, oktatas.cim c + where sz.igazolvany_szam = c.igazolvany_szam(+) + and c.cim_tipus(+) = 1 + and sz.szuletesi_varos = c.varos(+) + and sz.igazolvany_szam like '1%'; +``` + +A feladat két lekérdezése ugyanazt az eredményhalmazt határozta meg, a +futási sebességük azonban különbözött. A személy tábla igazolványszám +attribútumának első karakterére történű megkötés logikailag egy +intervallumkeresés, amit a `SZEMELY_PK` index támogathat. Az első +megfogalmazásban ezt a `SUBSTR` függvény segítségével fogalmaztuk meg, +ekkor az optimalizáló nem ismerte fel, hogy használhatná az indexet. +(Egy speciális, ún. függvényalapú index létrehozásával ezt is +támogathattuk volna, de ez a fent írottak szerint adminisztrációs +többletteher, amit értékelni kell. A függvényalapú indexekről bővebben +l. az Oracle Database Performance Tuning Guide c. dokumentáció +Designing and Developing for Performance/[Application Design Principles fejezetében][1]. + +A szűrési feltétel `LIKE` kulcsszót tartalmazó megfogalmazásakor az +optimalizáló igénybe tudta venni a táblára definiált index segítségét. +Ez a végrehajtási tervek különbségéből kitűnt, és nagyobb adathalmaz +esetén a futásidő-különbség is szembetűnő lett volna. + +Halmazműveletek helyett illesztések +----------------------------------- + +Több tábla adataival dolgozó lekérdezést olykor a megszokott +halmazműveletek (unió, metszet, különbség) segítségével és +illesztésekkel is megfogalmazhatunk. A halmazműveletekkel operáló +változat al-lekérdezésekkel dolgozik, amivel az optimalizáló számára +praktikusan előírja a részműveletek egy végrehajtási sorrendjét. Ekkor +kevesebb teret kap az optimalizáló, így potenciálisan kizárhatjuk a +részműveletek olyan végrehajtási sorrendjeit, amivel hatékonyabban tudná +az eredményt előállítani. + +Másik szempont, hogy az al-lekérdezések eredményein végrehajtott +halmazműveletek (ez főleg a metszet és különbség esetén fontos) nem +támogathatók indexekkel, hiszen a részeredményekre a séma nem tartalmaz +indexet. Ha ugyanazt az eredményt meg tudjuk fogalmazni joinnal is, +akkor az optimalizálót nem fosztjuk meg a segédstruktúrák alkalmazásából +adódó potenciális előnyöktől. + +Ez természetesen csak ökölszabály, ami alól számos kivétellel +találkoznak az adatbázis-kezeléssel foglalkozó szakemberek a munkájuk +során. Fontos mindig a konkrét eset vizsgálata, és a fejlesztési, futási +és karbantartási kényszerek ismeretében dönteni a halmazműveletes, az +illesztéses vagy éppen egy harmadik megoldás alkalmazásáról. + +### `UNION ALL` vs. outer join + +Az *outer join* vagy *külső (fél)illesztés* lényege, +hogy azok a rekordok is megjelennek az eredményhalmazban, +amelyekhez nem található pár a másik táblából. Ez a viselkedés szimulálható +két lekérdezés `UNION ALL` művelettel történő összekötésével. +Az outer join használata esetén az optimalizáló tipikusan nagyobb szabadságfokkal dolgozik. +További szempont, hogy a `UNION ALL` esetén az input relációkhoz +többször kellhet hozzáférni (adott esetben lineáris keresés (full table +scan) vagy éppen indexelt hozzáférés használatával). + +A fenti személy és cím táblákban keressük +azokat az embereket (minden adatával) értesítési címükkel (`cim_tipus=2`). +Azokat is keressük, akikhez nincs értesítési cím rögzítve. +Íme a külső illesztést használó változat a hagyományos, *Oracle-szintaxis* használatával: + +```sql +select sz.*, c.* + from oktatas.szemely sz, oktatas.cim c + where sz.igazolvany_szam = c.igazolvany_szam (+) + and c.cim_tipus (+) = 2 +``` + +Ugyanez ANSI SQL-szintaxis használatával: + +```sql +select sz.*, c.* + from oktatas.szemely sz left join oktatas.cim c + on (sz.igazolvany_szam = c.igazolvany_szam and c.cim_tipus = 2) +``` + +### Allekérdezés helyett join + +A fenti személy és cím táblákban keressük azokat az embereket (minden +adatával), akikhez a nyilvántartásunkban szerepel értesítési cím +(`cim_tipus=2`). Íme az illesztést használó változat. + +```sql +select sz.* + from oktatas.szemely sz, oktatas.cim c + where sz.igazolvany_szam = c.igazolvany_szam + and c.cim_tipus = 2; +``` + +### `MINUS` helyett anti-join + +A fenti személy és cím táblákban keressük +azokat az embereket (minden adatával), akikhez a nyilvántartásunkban nem +szerepel értesítési cím (`cim_tipus=2`). Íme az illesztést használó +változat. + +```sql +select sz.* + from oktatas.szemely sz, oktatas.cim c + where sz.igazolvany_szam = c.igazolvany_szam (+) + and c.cim_tipus (+) = 2 +    -- Primary key részével, vagy más, not null attribútummal ismerhetők fel +    -- a külső illesztés által behozott "null-sorok". +    -- Ennél (és csak ennél!) a vizsgálatnál elmaradhat +    -- a külső illesztés jelölése. + and c.igazolvany_szam is null; +``` + +[1]: http://docs.oracle.com/database/121/TGDBA/pfgrf_design.htm#TGDBA-GUID-38FC5A9F-89E6-4812-8EE4-F9949B69BCFC diff --git a/adatbazisok-labor/laborok_ertekelese.pdf b/adatbazisok-labor/laborok_ertekelese.pdf new file mode 100644 index 000000000..ac9ba24e2 Binary files /dev/null and b/adatbazisok-labor/laborok_ertekelese.pdf differ diff --git a/adatbazisok-labor/oracle-labor/index.md b/adatbazisok-labor/oracle-labor/index.md new file mode 100644 index 000000000..24dd51de8 --- /dev/null +++ b/adatbazisok-labor/oracle-labor/index.md @@ -0,0 +1,79 @@ +--- +layout: page +title: Oracle, mint rendszer labor +--- + +{% include adatbazisok-labor_kifuto_targy_figyelmeztetes.md %} + + Az 1. labor [felkészülési anyaga](oracle2017.pdf). + + - [Jegyzőkönyv írási tudnivalók és sablonok](/jegyzokonyv/tudnivalok/) + + +## Beadandó anyagok + + +Az elvárt formátum kötött. A beadott tömörített állományban az alábbi könyvtárstruktúrát várjuk el: + +``` +NEPTUN-1-CSOPKOD.zip: + NEPTUN-1-CSOPKOD/ + NEPTUN-1-CSOPKOD.pdf, elsősorban szöveges tartalommal +``` + +A `CSOPKOD` szerkezete: + + - a mérés napjának egykarakteres kódja + - a kezdés órája egy (pl. 8) vagy két számjegyen (pl. 10 vagy 17) + - az iMSc csoportot jelölő *i* karakter + - a csoport egyszámjegyű azonosítója időponton belül. + +Például `S83` (szerda 8 órai 3-as csoport), `C172` (csütörtök 17 órai 2-es csoport), `H14i4` (hétfő 14 órai i4-es csoport, ahol *i=iMSc*). + +A csoportkód a hallgatói csoportbeosztásban megtalálható. Az ott megtalálható csoportazonosítóból elhagyandó a kötőjel, de ez a fájl- és könyvtárnevek többi részét nem érinti. + +## A mérési feladatokhoz kapcsolódóan futtatandó SQL kódok + +Az alábbiakban azokat az SQL kódrészleteket tesszük közzé, amiket egyes feladatok megoldása során futtatni kell majd. A közzététel célja a hibamentes kódbeírás, de felhívjuk a figyelmet a kódok megértésének fontosságára! + +```sql +------------------------------------------------- +-- BME VITMAB02 Adatbázisok labor 1. mérés, 2018. +------------------------------------------------- +-- 5. feladathoz futtatandó SQL kód +------------------------------------------------- +column grantor format a8; +column grantee format a8; +column table_name format a20; +column privilege format a20; +select grantor + , grantee + , table_name + , privilege + , initcap(grantable) grant_opt + from all_tab_privs + where grantor = user + or grantee = user + order by grantor, grantee, table_name, privilege +; + +------------------------------------------------- +-- 7. feladathoz tartozó, elemzendő SQL kód. +------------------------------------------------- +alter session set optimizer_adaptive_features=false; + +select sz.igazolvany_szam, sz.nev, c.cim_tipus, c.iranyitoszam, c.varos + from oktatas.szemely sz, oktatas.cim c + where sz.igazolvany_szam = c.igazolvany_szam(+) + and c.cim_tipus(+) = 1 + and sz.szuletesi_varos = c.varos(+) + and substr(sz.igazolvany_szam,1,1) = '1' +; +select sz.igazolvany_szam, sz.nev, c.cim_tipus, c.iranyitoszam, c.varos + from oktatas.szemely sz, oktatas.cim c + where sz.igazolvany_szam = c.igazolvany_szam(+) + and c.cim_tipus(+) = 1 + and sz.szuletesi_varos = c.varos(+) + and sz.igazolvany_szam like '1%' +; +``` diff --git a/adatbazisok-labor/oracle-labor/oracle2017.pdf b/adatbazisok-labor/oracle-labor/oracle2017.pdf new file mode 100644 index 000000000..f61919f8d Binary files /dev/null and b/adatbazisok-labor/oracle-labor/oracle2017.pdf differ diff --git a/adatbazisok-labor/programok-oracle.md b/adatbazisok-labor/programok-oracle.md new file mode 100644 index 000000000..590995e1f --- /dev/null +++ b/adatbazisok-labor/programok-oracle.md @@ -0,0 +1,89 @@ +--- +layout: page +title: Oracle kliensprogramok +--- + +Oracle kliensprogramok + +- A labor során preferált kliens: [Oracle SQL Developer 4.2.0 + Win64-hez beépített JDK 8 + Java környezettel](https://db.bme.hu/r/sqldeveloper/sqldeveloper-4.2.0.17.089.1709-x64.zip), + és - várhatóan a 2. méréstől kezdődően - [SQLcl 4.2, Java környezet + nélkül](https://db.bme.hu/r/sqldeveloper/sqlcl-4.2.0.17.097.0719-no-jre.zip), + használatához elég a JRE. + - SQL Developer futtatása: ha a teljes kicsomagolás után létrejövő + sqldeveloper\\sqldeveloper.exe-vel nem indul, akkor futtassuk a + sqldeveloper\\sqldeveloper\\bin\\sqldeveloper.bat fájlt. + - Amennyiben "The program can’t start because MSVCR71.dll is + missing from your computer. Try reinstalling the program to fix + this" hibaüzenettel nem indul az SQL Developer, az + sqldeveloper\\jdk\\jre\\bin\\ könyvtárból másoljuk a MSVCR71.dll + fájlt a 32 bites windows esetén a system32 mappába (Win 7/8: a + rendszermeghajtó gyökerében, WinXP: a windows könyvtárban + található), a 64 bites Windows esetén pedig a rendszermeghajtó + gyökerében levő SysWOW64 mappába. + - További platformokra letölthető az OTN [SQL Developer + oldaláról](http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html) indulva. + Figyelem! Az Oracle oldalán 2018. ápr. 5. óta az SQL Developer + 18.1 stabil változata érhető el, a labor során azonban a 4.2 + verziót használjuk. A verziók közti különbségekből adódó + jelentős probléma eddig nem ismert, de mindenkit a 4.2 verzió + használatára kérünk. A verziókülönbségekből adódó esetleges + problémákban nem feltétlenül tudunk segíteni. + - SQLcl használata: útmutató az azt használó mérés előtt + jelenik meg. +- [Oracle SQL Developer 4.2.0 kliens Java + környezet nélkül.](https://db.bme.hu/r/sqldeveloper/sqldeveloper-4.2.0.17.089.1709-no-jre.zip) + Ezt a Win64-től különböző platformokon tudod használni, ha mögé + teszel megfelelő Java 8 JDK környezetet. +- Az Oracle 12cR1 "hagyományos" klienst letöltheted az [OTN Oracle + Database letöltési + oldaláról](http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html). + A kiválasztott verzió és operációs rendszer mellett levő See All + pontra kattintva jutsz a részletezőoldalra, ahol a + kliens letölthető. (Erre nem feltétlenül lesz szükséged a + labor során) + +Network beállítások otthonra +---------------------------- + +SQL Developer, Basic típusú kapcsolathoz + +- Hostname: rapid.eik.bme.hu +- Port: 1521 +- SID: szglab + + +Amire a telepítésnél érdemes figyelni +------------------------------------- + +SQL Developer + +- A .zip fájlt alkönyvtárakkal együtt kell kicsomagolni, + és (Windows-on) az sqldeveloper könyvtárban levő sqldeveloper.exe + programot kell indítani +- 4.1-es és 4.2-es verzió: 8-as Java SE JDK környezet szükséges + a használatához. + +Instant kliens 11gR2 telepítése és használata SQL Developerből + +- Erre alapesetben nincs szükség. Akkor kell letölteni, ha az SQL + Developerből olyan funkciót használnál, amit önmagában nem támogat. + **A méréseken ezt igénylő feladat nem lesz.** +- Csomagold ki a .zip fájlt egy mappába (pl. instantclient). +- Tedd elérhetővé a dinamikus linker számára az instantclient + mappát (pl. írd be Windowson a `PATH` környezeti változóba, UNIX/Linux + rendszereken az `LD_LIBRARY_PATH` környezeti változóba) +- Ezután indítsd az SQL Developert +- A Tools/Preferences menüben a Database/Advanced alatt jelöld be, + hogy "Use Oracle Client", majd a következő sorban Configure, és meg + kell adni a kliens típusát illetve a könyvtárat, ahol található. OK, + majd az SQL Developer újraindítása következik (erre figyelmeztet is + a rendszer). +- A lejárt és le nem járt jelszavak megváltoztatását egyaránt (jobb + klikk a definiált kapcsolatra, majd Reset Password) egyből támogatni + fogja az SQL Developer a kapcsolat bezárt állapota mellett. +- Ahhoz, hogy a kapcsolat során is az instant klienst használjuk, az + SQL Developerben a Tools/Preferences menüben a Database/Advanced + jelöld be a Use OCI/Thick driver pontot. + diff --git a/adatbazisok-labor/soa-labor/index.md b/adatbazisok-labor/soa-labor/index.md new file mode 100644 index 000000000..bb4a333b1 --- /dev/null +++ b/adatbazisok-labor/soa-labor/index.md @@ -0,0 +1,12 @@ +--- +layout: page +title: SOA labor +--- + +{% include adatbazisok-labor_kifuto_targy_figyelmeztetes.md %} + + A 4. labor [felkészülési anyaga](soa-hallgatoi-segedlet-2017.pdf). Alább ld. még a Hallgatói útmutatót is! + + - [Hallgatói útmutató](soa-hallgatoi-utmutato) + - [Jegyzőkönyv írási tudnivalók és sablonok](/jegyzokonyv/tudnivalok/) + - [Példaprogram](https://github.com/adatlabor/soa-demo) diff --git a/adatbazisok-labor/soa-labor/putty.png b/adatbazisok-labor/soa-labor/putty.png new file mode 100644 index 000000000..584442500 Binary files /dev/null and b/adatbazisok-labor/soa-labor/putty.png differ diff --git a/adatbazisok-labor/soa-labor/soa-hallgatoi-segedlet-2017.pdf b/adatbazisok-labor/soa-labor/soa-hallgatoi-segedlet-2017.pdf new file mode 100644 index 000000000..410323479 Binary files /dev/null and b/adatbazisok-labor/soa-labor/soa-hallgatoi-segedlet-2017.pdf differ diff --git a/adatbazisok-labor/soa-labor/soa-hallgatoi-utmutato.md b/adatbazisok-labor/soa-labor/soa-hallgatoi-utmutato.md new file mode 100644 index 000000000..5ce1edf13 --- /dev/null +++ b/adatbazisok-labor/soa-labor/soa-hallgatoi-utmutato.md @@ -0,0 +1,228 @@ +--- +layout: page +title: SOA labor hallgatói útmutató +author: Veres-Szentkirályi András +--- + +Hallgatói útmutató a SOA méréshez + +Környezet kialakítása a Rapid szerveren +======================================= + +A minta alkalmazás a következő módon tölthető le és állítható be legegyszerűbben a Rapid szerveren, SSH kliensen (pl. PuTTY) keresztül történő belépés után. + + curl -L https://db.bme.hu/r/lab5soa.sh | sh + +A fenti két parancs lefuttatása után az aktuális könyvtárban létrejön egy `soa` nevű, mely tartalmazza a példakód legfrissebb verzióját. Ennek futtatásához az Oracle szerverhez való kapcsolódás paramétereit kell még beállítani. A `soa` könyvtárba belépve a `config.sample.json` állományt kell lemásolni `config.json` néven, és ebben a minta alapján már egyértelmű, hova kell beírni a felhasználónevet és jelszót. A `host` paraméter módosítása csak akkor szükséges, ha nem a Rapid adatbázisát szeretnénk használni, tehát legtöbb esetben figyelmen kívül hagyható. + +Szolgáltatás futtatása a Rapid szerveren +======================================== + +Szolgáltatás elindítása +----------------------- + +A `soa` könyvtárba belépve a `./run.sh` parancsot kiadva a következőhöz hasonló két sornak kell megjelennie. + + * Running on http://127.0.0.1:20014/ + * Restarting with stat + +A `run.sh` szkript két dolgot tesz: + + * beállítja a futtatási környezetet az Oracle kliens programkönyvtárak eléréséhez: `export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_12_2` + * elindítja a `python service.py` parancs segítségével a szolgáltatást. + +A felső sor tartalmazza a felhasználónkhoz rendelt egyedi portszámot (itt 20014), az alsó pedig azt, hogy a `reloader` funkcionalitás is aktív, mely a forráskód változtatása esetén újraindítja a szolgáltatást, hogy a legfrissebb változat legyen elérhető. A szolgáltatás a `Ctrl` + `C` gombok lenyomásával leállítható, illetve ha olyan problémába ütközik újratöltéskor, amitől nem tud újraindulni (például szintaktikai hiba), akkor a hiba kijavítását követően kézzel kell ismét elindítani. (Tipp: a felfelé mutató kurzorgombot használva gyorsan visszahívható a legutoljára kiadott parancs, így nem kell feleslegesen gépelni.) + +A futó szolgáltatás leggyorsabban a Rapidon, például másik SSH kliensből (PuTTY ablakból) tesztelhető, a fenti példánál maradva a következő módon próbálható ki a segédletben is említett cURL klienssel a személy szolgáltatás. + + [vsza@off ~]$ curl http://127.0.0.1:20014/szemely/22406199243.json + { + "nev": "V\u00e9gh Kl\u00e1ra", + "links": [ + "http://learning.blogs.nytimes.com/on-this-day/June-19", + "http://news.bbc.co.uk/onthisday/hi/dates/stories/june/19", + "http://www1.sympatico.ca/cgi-bin/on_this_day?mth=Jun&day=19" + ] + } + +Szolgáltatás elérése helyi gépen futó böngészőből +------------------------------------------------- + +Természetesen ezzel például az AJAX funkcionalitás nehezen lenne tesztelhető, így saját gépről is el lehet érni a szolgáltatást. Ehhez az SSH kliens ún. port forwarding szolgáltatását érdemes igénybe venni, ez általában kliensfüggő módon oldható meg. A példákban a fenti _20014-es portot használom, ez értelemszerűen cserélendő minden esetben._ A port forward elkészülte után a helyi gépen is elérhető a szerveren futó szolgáltatás az induláskor kiírt URL-en, azaz a fenti példában a `http://127.0.0.1:20014/` címen. + +### PuTTY esetén ### + +Amennyiben a továbbítandó port száma csatlakozás előtt ismert, a beállító ablakban a baloldali listában a *Connection > SSH > Tunnels* elemet kell kiválasztani (lehet, hogy ehhez "ki kell nyitni" megfelelő ágakat, ill. görgetősávot kell használni a betű- és ablakméret függvényében). Itt az *Add new forwarded port* részben a következő módon töltsük ki a mezőket: + + - Source port: 20014 (a saját portunk) + - Destination: localhost:20014 (a saját portunk, előtte a `localhost:` szöveggel) + - Local/Remote/Dynamic: Local (ha nem ez lenne az alapértelmezett) + - Auto/IPv4/IPv6: Auto (ha nem ez lenne az alapértelmezett) + +![PuTTY port forwarding](putty.png) + +Ezt követően az *Add* gombra kattintva a port bekerül a *Forwarded ports* listába, és csatlakozhatunk a rendszerhez. Az "eredeti" fülhöz a baloldali listában a *Session*-t választva juthatunk vissza, itt a *Saved Sessions* részben el is menthetjük a kapcsolat paramétereit, így nem kell minden alkalommal beállítani újra. (A példaalkalmazás felhasználóhoz köti a portot, tehát ha már megtudtad a portod számát, következő bejelentkezésekkor is ugyanaz marad.) + +Amennyiben csatlakozást követően derül ki a portszám, ugyanez az ablak előhozható az ablak fejlécén való jobb gombbal történő kattintással, majd a megjelenő menüben a *Change Settings...* lehetőséget választva, és a fenti módon megoldható a port forward beállítása. + +### OpenSSH esetén ### + +Amennyiben a továbbítandó port száma csatlakozás előtt ismert, egyszerűen az `-L 20014:localhost:20014` paramétert kell csak megadni az `ssh` parancsnak. Amennyiben csatlakozás után derül ki a portszám, Enter gomb lenyomását követően `~C` (hullámvonal majd Shift-C) szekvenciára egy `ssh>` promptot kapunk. Ez az OpenSSH belső promptja a program viselkedésének futás közbeni befolyásolására, itt már csak a fenti módon kell megadni a forwardoláshoz a paramétert, melynek elfogadását az OpenSSH vissza is jelzi, mint az az alábbi példában látható. + + $ ssh rapid + Last login: Tue Apr 16 15:18:03 2013 from vsza.hu + [vsza@off ~]$ + [vsza@off ~]$ + ssh> -L 20014:localhost:20014 + Forwarding port. + +A második `[vsza@off ~]$` az Enter gomb lenyomásának hatására jelent meg, erre azért van szükség, mert a `~` jellel kezdődő ún. escape szekvenciákra ilyenkor figyel az OpenSSH. Ezt követően a `~C` karakterek nem jelennek meg már a kimeneten, mivel ezeket az OpenSSH belső folyamata elkapja, a többi escape szekvenciájáról a [hivatalos dokumentációban][sshdoc] lehet olvasni, a `C` a command line-t jelöli. + +Beadandó anyagok +================ + +Az elvárt formátum, a korábbi mérésekhez hasonlóan, kötött. A beadott tömörített állományban az alábbi könyvtárstruktúrát várjuk el: + + NEPTUN-4-CSOPKOD.zip: + NEPTUN-4-CSOPKOD/ + NEPTUN-4-CSOPKOD.pdf + soa/ + service.py + config.json + static/ + feladatnev.html + ... + +Természetesen a `soa` könyvtáron belüli fájlnevek feladattól és megoldástól függően eltérőek lehetnek, a lényeg, hogy a könyvtárat kicsomagolva működő Flask webszolgáltatást valósítson meg a `service.py` indításával a forráskód. + +Értékelés +========= + +Ponthatárok +----------- + +A pontok megoszlása a feladatcsoportok között a következő: + + - Kötelező: 6 + 4 + 4 (14) + - Válaszható: 8 + 9 + 9 (26) + - Gondolkodtató: 15 + 10 + 8 (33) + +Összesen 73 pont szerezhető pluszpontok nélkül, ennek megfelelően a ponthatárok a következő módon alakulnak: + + - __1__ [0 ... 12) + - __2__ [12 ... 23) + - __3__ [23 ... 34) + - __4__ [34 ... 40) + - __5__ 40 és afelett + +Értékelési szempontok +--------------------- + + - A szintaktikai hibát tartalmazó forráskód nem értékelhető. + - A megoldásnak futnia kell a kiadott (`https://db.bme.hu/r/sql/.sql` szkript által létrehozott) mintaadatbázison, működéséhez nem igényelhet egyéni adatbázis objektumokat (nézetek, tárolt eljárások, stb.). Ennek biztosítására érdemes – a feladatlap fejlécében is szereplő útmutatást követve – a fejlesztés megkezdése előtt lefuttatni az említett szkriptet. + - A megoldásnak futnia kell tetszőleges környezetben, különös tekintettel az adatbázis sémákra és az URL-ekre. Ennek megfelelően pontlevonás jár explicit sémanév (helytelen: `NEPTUN.jaratok`, helyes: `jaratok`) használatáért SQL lekérdezésekben, valamint hosztnév és portszám forráskódba való „bedrótozásáért” (helytelen: `{url: "http://127.0.0.1:20821/jaratok.json"}`, helyes: `{url: "/jaratok.json"}`) – ezek nehezítik az értékelést, és az iparban is rossz gyakorlatnak számítanak. Ilyen hibák a teljes pontszám 20%-áig terjedő levonással járnak. + - Szerepeljen a jegyzőkönyvben egyértelműen minden feladatnál, hogyan lehet kipróbálni a feladat által kért implementációt. Minden feladatnál releváns legalább egy URL, böngészőben történő tesztelésnél képernyőfotó, `POST/PUT/DELETE` kéréseknél cURL parancssor, kimenettel. __Ezek hiányában a feladat nem értékelhető, arra 0 pont adható.__ + - A Rapidon `pylint` parancsként elérhető [Pylint][pylint] értékelése szerint 8 pontnál többet elérő forráskódot plusz ponttal jutalmazzuk, ha a jegyzőkönyv pontszáma enélkül is meghaladja a 20-at. A statikus kódanalízis hiányosságai miatt fellépő „fantomhibákat”, pl. `cx_Oracle` szerinte hiányzó osztályait nem vesszük figyelembe. + - A nem oktatott, de a kódot olvashatóbbá, egyszerűbbé, "Pythonic"-abbá tevő megoldások szintén plusz pontot érnek, néhány lehetőségre a [példaprogram][demo] is rámutat. + - A megoldás __egyetlen Python modulból álljon__ melynek neve a _Beadandó anyagok_ bekezdésben írtakkal összhangban `service.py` legyen. A modulon belül az alkalmazás objektum neve maradjon `app`, ennek megváltoztatása esetén a megoldás nem értékelhető. + - A Python modul tartalmazzon modulonként és függvényenként egy fejkommentet, mely leírja az adott modul/függvény feladatát. Ezek megadásának módja a [példaprogramban][demo] is megtekinthető, hiányuk esetén -2 pont a feladatnál elért pontszámból. + - A hivatkozás nélkül átvett kódrészleteket másolásnak tekintjük, és ez esetben a teljes a mérést sikertelennek nyilvánítjuk. Ha bizonyíthatóan egy másik hallgatóról másoltál, akkor féléved érvénytelen. Egyedül a segédlet kódrészletei és a [kiadott példaprogram][demo] használható fel hivatkozás nélkül. + - Választható és gondolkodtató feladatra csak akkor adható pont, ha a kötelező feladatok mindegyikére adtál (nem feltétlen hibátlan) megoldást. + - Paraméteres SQL utasítások használata javasolt, ahogy az a segédletben látható példákban is szerepel. Az SQL-be szövegesen behelyettesített paraméterek használata biztonsági rést eredményez az alkalmazásban, így a feladatért járó pontszám 50%-ával felérő levonással "jutalmazandó". + - Az adatok feldolgozását (pl. szűrés, illesztés) lehetőleg szerver oldalon – SQL által – végezzük. + - A JSON szótárak bejegyzéseinek sorrendje tetszőleges lehet, a Python `dict` implementációja folytán nem determinisztikus kulcs-sorrendért nem vonunk le pontot. + +Mit tegyek ha? +============== + + - `Socket.error: [Errno 98] Address already in use` __üzenetet kapok indításkor.__ Mint a hibaüzenet is utal rá, valami már foglalja a neked kijelölt portot. Mivel mindenkinek egyedi portot jelöltünk ki, hacsak valaki nem rosszindulatú, valószínűleg egy saját processzedről van szó. A `ps ux` parancs kiadásával megnézheted a te felhasználódhoz köthető folyamatokat, a PID oszlopban látható ID alapján pedig kilőheted – ha fut már egy szolgáltatásod, de nincs hozzá nyitva konzolod – a `kill ` paranccsal vagy `pkill python` kilövi automatikusan az összes, általad indított Python folyamatot. + - `TypeError: fuggvenyneve() got an unexpected keyword argument` __üzenetet kapok egy új végpont meghívásakor.__ Az ilyen hibák leggyakoribb oka, hogy úgy copy-paste-eltél egy korábbi végpontot, hogy a függvény neve maradt a régi, így a Python futtatókörnyezet mindkét végpontot ugyanahhoz a függvényhez rendeli, amely közül az egyik lehet, hogy nem vár paramétert. Ellenőrizd, hogy minden függvény neve egyedi legyen! + - __A JSON kimenetemben „nem jók” az ékezetes karakterek, helyettük `\u00dc` jellegű kód jelenik meg.__ A JSON kimenet ideális esetben csak ASCII karaktereket tartalmaz, így az ékezetes betűket a legtöbb könyvtár Unicode escape szekvenciákkal helyettesíti (az u betű után a Unicode kódpont értéke szerepel hexadecimális formában). Ez nem gond, a JSON kimenet nem emberi, hanem gépi felhasználásra készül. + - __Nem tudok belépni a rapid-ra.__ Ellenőrizd a felhasználói nevedet, jelszavadat és a billentyűzet kiosztását. Jelezd a problémát a mérésvezetődnek, ő továbbítja a kérésedet (új jelszót kérsz) a rendszergazdának. + - __Rapidon cURL-lel elérem a szolgáltatást, de helyi gépen nem, pedig a forwardot megcsináltam.__ Ellenőrizd, nem okoz-e gondot a helyi tűzfal, engedélyezd benne az SSH kliens (pl. PuTTY) számára a forgalmat. + - __Nem működik a Python/Flask megoldásom, kivételt kapok.__ A debugger egyrészt tartalmazza a teljes hívási vermet, itt érdemes a legutolsó olyan elemet megkeresni, amelyet a te kódod hív, valószínűleg itt van a hiba. + - __Nem működik az AJAX megoldásom.__ A hallgatói segédlet tartalmazza a Google Chrome böngésző debuggerének használatát, próbáld meg ezzel behatárolni a hiba helyét. + - __Egyszer csak elérhetetlenné vált az alkalmazásom.__ Ellenőrizd az SSH kliensben (PuTTY), hogy nem állt-e le a szolgáltatás olyan hiba miatt, amit magától nem tudott orvosolni (pl. szintaktikai hiba). A hibaüzenet alapján szüntesd meg a hiba forrását, majd indítsd újra a szolgáltatást. + - __Hiába használok `abort(státuszkód)` hívást, a megadottól eltérő státusza lesz a válasznak.__ Az `abort` belső működése [kivételeket használ][werkzeug-abort], ezért ha azt bárhol körülveszi egy `try ... except` blokk, amely minden kivételt elkap (ún. _catch-all_, nem definiál konkrét kivételosztály(oka)t), akkor a te kivételkezelőd „elkapja a Flask elől” az ő belső használatra szánt kivételét, ezért nem a várt viselkedést produkálja a kódod. A helyes megoldás mindig a lehető leginkább specifikus kivétel (ős)osztály megadása `try-except` szerkezet esetén. + +Függelék: `cx_Oracle` telepítése saját környezetbe +================================================== + +A hivatalosan támogatott módja a labor elvégzésének a Rapid használata, azonban +saját felelősségre természetesen telepíthet bárki `cx_Oracle` környezetet +kísérletezés és testreszabhatóság céljából. Az alábbiakban bemutatott módszer +Debian GNU/Linuxon került kipróbálásra sikeresen Oracle Instant Client 12.1.0.2.0 +verzióval, de más környezetekben is alkalmazható, értelemszerű változtatásokkal. + +Függőségek telepítése +--------------------- + +A következő, Debian/Ubuntu csomagnévvel azonosított függőségek szükségesek a +telepítés megkezdéséhez: + + - `python` + - `python-dev` + - `python-pip` + - `python-wheel` + - `gcc` + - `libaio1` + +Ezen kívül szükséges még az Instant Client letöltése a megfelelő architektúrára +(tipikusan [x86][instaclient32] vagy [x86-64][instaclient64]), ezen belül a +Basic-re és az SDK-ra van szükség. Basic-ből elég a Lite is, ha nem akarunk +magyar nyelvű üzeneteket. + +A letöltéshez szükséges a felhasználói feltételek elfogadása, majd belépés +OTN felhasználóval, ez megtalálható az Oracle laborhoz adott segédletekben. + +A letöltés eredménye két ZIP fájl, ezeket tetszőleges könyvtárba ki kell +csomagolni, majd + + - szimbolikus linket kell készíteni a `libclntsh.so.12.1` fájlra + `libclntsh.so` néven, és + - a könyvtár abszolút útvonalát el kell tárolni az `ORACLE_HOME` és + `LD_LIBRARY_PATH` környezeti változókban a következő lépéshez használt + shell környezetben. + +`cx_Oracle` telepítése és használata +------------------------------------ + +A fentiek sikeres megtörténtét követően `pip install cx_Oracle` paranccsal +telepíthető maga a Python modul, amely az Instant Clienthez linkelve, annak +SDK részeit fejlécként használva fordít egy natív Python kiterjesztést. + +Sikeres telepítés esetén a kimenet utolsó sorai az alábbihoz hasonlók: + + Successfully built cx-Oracle + Installing collected packages: cx-Oracle + Successfully installed cx-Oracle-5.2.1 + +Ezt követően a modul használható, de mindenképp szükséges a Python interpreter +indítása előtt az `LD_LIBRARY_PATH` környezeti változóban elhelyezni az +Instant Client kitömörítésekor létrehozott könyvtárat (az `ORACLE_HOME` +tapasztalatunk szerint nem szükséges). A Rapidon alkalmazott megoldás a +shell indulásakor automatikusan beállítja ezt, de természetesen külön shell +script is létrehozható a `service.py` indításához, amely közvetlenül a +szolgáltatás indítása előtt végzi el a beállítást. + +Docker és PyCharm használata +---------------------------- + +Egy hallgatónk, Rehó Balázs készített egy [alternatív útmutatót][rehobalazs-howto], +amely szövegszerkesztőnek a PyCharm IDE-t használja, a szükséges függőségek +operációs rendszertől kezdve a Python környezeten át a `cx_Oracle` könyvtárig +előre összeállított Docker konténerben kerülnek összeállításra. + +**Természetesen ehhez az útmutatóhoz szintén nem tudunk támogatást adni, és mint +Balázs is fogalmaz a bevezetőben, a munka gyorsítása helyett adott esetben +a feladatok megoldása elől veheti el az időt. Így csak tapasztaltabb, +kísérletező kedvű hallgatóknak javasoljuk kipróbálását a fentiek tudomásulvétele +mellett.** + + [sshdoc]: http://man.openbsd.org/OpenBSD-current/man1/ssh.1#ESCAPE_CHARACTERS + [pylint]: http://www.pylint.org/ + [demo]: https://github.com/adatlabor/soa-demo + [instaclient32]: http://www.oracle.com/technetwork/topics/linuxsoft-082809.html + [instaclient64]: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html + [rehobalazs-howto]: https://gist.github.com/balazsreho/1c60ec84408193dd1da94ab34b28e11f#file-szl5-soa-docker-md + [werkzeug-abort]: https://github.com/pallets/werkzeug/blob/ec55428/werkzeug/exceptions.py#L636-L661 diff --git a/adatbazisok-labor/sql-labor/hallgatoi_um_2017.pdf b/adatbazisok-labor/sql-labor/hallgatoi_um_2017.pdf new file mode 100644 index 000000000..c24b05860 Binary files /dev/null and b/adatbazisok-labor/sql-labor/hallgatoi_um_2017.pdf differ diff --git a/adatbazisok-labor/sql-labor/index.md b/adatbazisok-labor/sql-labor/index.md new file mode 100644 index 000000000..8a31337cf --- /dev/null +++ b/adatbazisok-labor/sql-labor/index.md @@ -0,0 +1,19 @@ +--- +layout: page +title: SQL labor +--- + +{% include adatbazisok-labor_kifuto_targy_figyelmeztetes.md %} + + A 2. labor [felkészülési anyaga](sql_hallgatoi_segedlet.pdf). + + - [Hallgatói útmutató](hallgatoi_um_2017.pdf), benne a 2. labor követelményei illetve néhány SQL tipp. Ezt kérjük, nézzétek át! + - A labor során elkészítendő [szkript szkeletonja](https://db.bme.hu/r/sql/SZKELETON.sql) + +## Beadandó generátor + +Az SQL méréshez készült egy [beadandó generáló oldal](https://db.bme.hu/r/sql/sql-beadando-generator.html), ami a jólformáltságot is garantálja. + +A weblap mezőibe SQL kódot illeszthettek, majd lementhetitek a szkeletonnak és a hallgatói útmutatónak megfelelő beadandó `.sql` fájlt. + +Ha nem működne a lementés (pl. Edge használata esetén), akkor a kimenet másolására kattintva megjelenő mezőből kimásolható a tartalom. Ebben az esetben ügyelni kell arra, hogy a fájlt utf-8 kódolással, BOM jelző nélkül mentsétek le! diff --git a/adatbazisok-labor/sql-labor/sql_hallgatoi_segedlet.pdf b/adatbazisok-labor/sql-labor/sql_hallgatoi_segedlet.pdf new file mode 100644 index 000000000..698b6b6c0 Binary files /dev/null and b/adatbazisok-labor/sql-labor/sql_hallgatoi_segedlet.pdf differ diff --git a/adatbazisok-labor/xml-labor/hallgatoi-segedlet-xml2017.pdf b/adatbazisok-labor/xml-labor/hallgatoi-segedlet-xml2017.pdf new file mode 100644 index 000000000..0ee22f084 Binary files /dev/null and b/adatbazisok-labor/xml-labor/hallgatoi-segedlet-xml2017.pdf differ diff --git a/adatbazisok-labor/xml-labor/index.md b/adatbazisok-labor/xml-labor/index.md new file mode 100644 index 000000000..d0c7b8dd2 --- /dev/null +++ b/adatbazisok-labor/xml-labor/index.md @@ -0,0 +1,15 @@ +--- +layout: page +title: XML/XSLT labor +--- + +{% include adatbazisok-labor_kifuto_targy_figyelmeztetes.md %} + + Az 5. labor [felkészülési anyaga](hallgatoi-segedlet-xml2017.pdf). + + - [Hallgatói útmutató](xml-hallgatoi-utmutato) + - [Jegyzőkönyv írási tudnivalók és sablonok](/jegyzokonyv/tudnivalok/) + - [Példaprogram](https://github.com/adatlabor/xml-xslt-demo) + - [XHTML címkék](xhtml_fuggelek.pdf) + - Kiegészítés a hallgatói segédlethez. Az alábbi ábra kiemeli az egyetlen, a gyökérelemre illeszkedő sablont tartalmazó XSL stíluslapok egyszerűsített és normál írásmódja közötti különbséget. + ![Egyszerűsített XSL stíluslap](szoftlab5_xsql_egyszerusitett_szintax_diff.png) diff --git a/adatbazisok-labor/xml-labor/szoftlab5_xsql_egyszerusitett_szintax_diff.png b/adatbazisok-labor/xml-labor/szoftlab5_xsql_egyszerusitett_szintax_diff.png new file mode 100644 index 000000000..bb0b37793 Binary files /dev/null and b/adatbazisok-labor/xml-labor/szoftlab5_xsql_egyszerusitett_szintax_diff.png differ diff --git a/adatbazisok-labor/xml-labor/xhtml_fuggelek.pdf b/adatbazisok-labor/xml-labor/xhtml_fuggelek.pdf new file mode 100644 index 000000000..860521cbe Binary files /dev/null and b/adatbazisok-labor/xml-labor/xhtml_fuggelek.pdf differ diff --git a/adatbazisok-labor/xml-labor/xml-hallgatoi-utmutato.md b/adatbazisok-labor/xml-labor/xml-hallgatoi-utmutato.md new file mode 100644 index 000000000..09d69c7fc --- /dev/null +++ b/adatbazisok-labor/xml-labor/xml-hallgatoi-utmutato.md @@ -0,0 +1,280 @@ +--- +layout: page +title: XML labor hallgatói útmutató +author: Marton József +--- + +Hallgatói útmutató az XML/XSLT méréshez + +Környezet kialakítása a Rapid szerveren +======================================= + +A minta alkalmazás a következő módon tölthető le és állítható be legegyszerűbben a Rapid szerveren, SSH kliensen (pl. PuTTY) keresztül történő belépés után. + +```shell +export EXERCISE_CATEGORY_NAME=HAJO +curl -L https://db.bme.hu/r/xml/demo | sh +``` + +A fenti első parancsba helyettesítse be a feladattípusa nevét, pl. `HAJO` a *Hajózási felügyelet* c. feladatsor esetén. A parancsok futtatása során az aktuális könyvtárban létrejön egy `xml` nevű, mely tartalmazza a példaprogram legfrissebb verzióját. + +A példaprogram futtatása a `SHIP.xml` alapértelmezett adatforrással: + +```shell +scons +``` + +A saját megoldás elkészítése után a futtatáshoz meg kell adni az adatforrás (data source) nevét, ami megegyezik a feladattípus nagybetűs nevével, pl. `HAJO` feladatsor esetén: + +```shell +scons DS=HAJO +``` + +A build eredményének törlése során szintén illik megadni a feladattípus nagybetűs nevét, pl. `HAJO` feladatsor esetén: + +```shell +scons DS=HAJO -c +``` + + +Az adatforrás +============= + +Az XML adatforrások az SQL sémainicializáló szkriptek által létrehozott adatbázis egy XML reprezentációját tartalmazzák. Elérhetősége megtalálható a feladatlapon. + +## Az XML szerkezete + + * a tag és attribútumnevek kisbetűsek + * a feladattípus/tábla/rekord/mező hierarchiát egy + `/[@element-type="dataset"]/[@element-type="recordset"]/record[@element-type="record"]/*` + szerkezetű DOM tartalmazza + * a gyökérelem neve a feladatsor rövid neve + * a feladattípus minden táblájának egy `/*/[@element-type="recordset"]` részfa felel meg + * a rekord egyszerű kulcsa a `record` tag XML attribútumaként jelenik meg, neve a mező nevével egyezik + * a rekord többi mezője a mezőnév szerinti gyerekelemekben foglal helyet, melyben + * egy `@is-null="False|True"` attribútum jelzi, hogy null van-e benne + * date típusú, nem null értékű mező esetén `@date` és `@time` tartalmazza az ISO formátum szerinti dátum és óra-perc-másodperc komponenst + * a többi típus esetén a tag tartalmában szerepel a mező értéke, ha az nem null + +Beadandó anyagok +================ + +Az elvárt formátum, a korábbi mérésekhez hasonlóan, kötött. A beadott tömörített állományban az alábbi könyvtárstruktúrát várjuk el: + +``` +NEPTUN-5-CSOPKOD.zip: + NEPTUN-5-CSOPKOD/ + NEPTUN-5-CSOPKOD.pdf + lab5xml.zip +``` + +A `lab5xml.zip` fájlt a rapidon történő build során hozza létre a SCons, +és abba belekerülnek a `src/` könyvtárban szereplő forrásfájlok valamint +a `web/` könyvtárban létrejövő kimeneti fájlok. +A lényeg, hogy a `lab5xml.zip` fájlt kicsomagolva a munka futtatható legyen +a példaprogramban szereplő `SConstruct` fájl és a `lib/saxon9he.jar` + osztálykönyvtár segítségével. + +Formai követelmények +-------------------- + + - Az összes forrásfájl és kimeneti fájl karakterkódolása kötelezően `UTF-8` + +Értékelési szempontok +--------------------- + + - A megoldásnak a példaprogramban szereplő, scons alapú verzérlőszkripttel + a feladathoz tartozó adatforrással azonos szerkezetű és szemantikájú, + de különböző tartalmú adatforráson is helyesen kell működnie. + - A szintaktikai hibát tartalmazó forráskód nem értékelhető. + - A feladatokban előírt formátumtól eltérő megoldás nem értékelhető. + - A formai követelményeket sértő jegyzőkönyv nem értékelhető. + +Szemelvények az XSL világából +============================= + +Ebben a részben vázlatosan ismertetünk néhány olyan témát, ami a hallgatói segédletből +kimaradt, de hasznos lehet a mérés elvégzése során. + +Az [XSL] az ún. Extensible Stylesheet Language rövidítése, ami valójában egy *nyelv család* +az XML dokumentumok transzformálása és megjelenítése során fellépő feladatokra. Három része: + + 1. az [XSLT] (XSL Transformations) az XML transzformációk leírására szolgáló nyelv, + 2. az [XPath] (XML Path) egy, az XML dokumentum részeire történő hivatkozások leírására szolgáló nyelv, és a + 3. az [XSL-FO] (XSL Formatting Objects) az XML dokumentumok formázásával kapcsolatos elvrások leírására szolgáló + szókészlet, mely részben hasonlít a CSS-re, de a szintaxisa különböző. + +A laboron használt XSLT feldolgozó a [Saxon], amelynek *9.7 home edition* változata +az XSLT (2.0), XQuery (1.0, 3.0, és 3.1), and XPath (2.0, 3.0, és 3.1) nyelveket +támogatja a [W3C] által definiált ún. basic (alapvető) szinten. + +## Navigáció az XML dokumentum csomópontjai között XPath segítségével + +A magyarázat során az alábbi példa XML-t használjuk, melyben, az egyszerűség kedvéért +minden tag csak egyszer fordul elő, és a nevével a példányt hivatkozzuk. + +```xml + + + + Rabonbán II. + + sailing boat + + +``` + +Az XML dokumentumok ún. csomópontokból állnak, melyek lehetnek + + - elem típusúak: ezek az XML tag-ek példányai, a példában `ship`, `type` stb. + - attribútum típusúak, a példában `ship_id` és `date` + - szöveges csomópontok, a példában `sailing boat` ill. a `name` és a `built` közötti köz (szóköz, újsor karakter) + +Az egyes csomópontokokból alkotott rendezett párok egymáshoz való viszonya az ún. *axis*. Néhány példa: + + - *child* (gyerek): (ship, name) + - *parent* (szülő): (name, ship) + - *descendant* (leszármazott): (vehicles, ship), (vehicles, name) + - *ancestor* (felmenő): (ship, vehicles), (name, vehicles) + - *attribute* (attribútum): (ship, ship_id) + - *following-sibling*: (name, built) + - *preceding-sibling*: (built, name) + +Az XPath kifejezések kiértékelése mindig egy csomópont kontextusában történik. +A kontextus csomomópontból történő tovább-navigálás két részből áll: meg kell adni a +követendő viszonyt, és hogy az adott viszonyban álló csomópontok közül melyiket keressük. +A minta dokumentum `ship` elem típusú csomópontjának kontextusában például: + + - `child::built` a `built` nevű gyerek + - `child::*` az összes gyerek + - `attribute::ship_id` a `ship_id` nevű attribútum + +Ha nem adjuk meg explicit a követendő viszonyt, akkor a `child` viszony a navigáció iránya. +Az `attribute::` viszony a `@` előtaggal rövidíthető, tehát `@*` az összes attribútum, +`@ship_id` pedig az adott nevű attribútum. + +## Különbség az XPath `node()` és a `*` között + + - A `node()` minden csomópontot kijelöl, ami a megadott viszonyban áll. + - A `*` azokat a csomópontokat jelöli ki, ami a megadott viszony szerint elsődleges típusú. + Elsődleges típusú: + - a `child` viszonyban az elem típusú csomópont + - az `attribute` viszonyban az attribútum típusú csomópont + - A `text()` a megadott viszonyban álló szöveges csomópontokat jelöli ki. + Az `attribute` viszonyon keresztül ilyen nem érhető el. + +A `*` és a `node()` között az `attribute` viszony esetén nincs különbség. +A `child` viszonyban a `node()` a szöveges és elem típusú gyerekcsomópontokra is illeszkedik, +a `*` csak az elem típusú gyerekcsomópontokra, tehát a különbség a `text()` által kijelölt, +szöveges csomópontok halmaza. + +Az előző szakaszban szereplő példán az alábbi XSL stílusfájllal szemléltetjük +a különbséget, amelynek a kiíró sablonját a 209-es hajót leíró csomópontból elérhető +különböző csomópontokra hívjuk meg. + +A kiíró sablon `#` jelekkel elválasztva kiírja + + - a feldolgozott csomópont nevét (szöveges csomópontok esetés üres) + - `[` és `]` közé zárva a csomópont értékét + +```xml + + + + + + + +attribute::* - az attribútumai, röviden: @* +==================================================================== + + +attribute::node() - az attribútum viszonyban álló minden csomópont +==================================================================== + + +child::* - az elem típusú gyerekcsomópontok, röviden: * +==================================================================== + + +child::text() - a szöveges típusú gyerekcsomópontok, röviden: text() +==================================================================== + + +child::node() - minden gyerekcsomópont, röviden: node() +==================================================================== + + + + +##[] + + + +``` + +A stílusfájl alkalmazásával nyert kimeneten figyeljük meg, +hogy a `ship[@ship_id='209']` csomópontnak + + - három elem típusú gyerekcsomópontja van + - négy szöveges típusú gyerekcsomópontja van (az első gyerek előtt, + az utolsó után és az egymást követő gyerekek között) + - összesen hét csomópont érhető el `child` viszonyon keresztül. + +``` +attribute::* - az attribútumai, röviden: @* +==================================================================== +#ship_id#[209] + + +attribute::node() - az attribútum viszonyban álló minden csomópont +==================================================================== +#ship_id#[209] + + +child::* - az elem típusú gyerekcsomópontok, röviden: * +==================================================================== +#name#[Rabonbán II.] +#built#[] +#type#[sailing boat] + + +child::text() - a szöveges típusú gyerekcsomópontok, röviden: text() +==================================================================== +##[ + ] +##[ + ] +##[ + ] +##[ + ] + + +child::node() - minden gyerekcsomópont, röviden: node() +==================================================================== +##[ + ] +#name#[Rabonbán II.] +##[ + ] +#built#[] +##[ + ] +#type#[sailing boat] +##[ + ] +``` + + +[Saxon]: http://saxon.sourceforge.net/ +[W3C]: https://www.w3.org/ +[XSL]: https://www.w3.org/Style/XSL/ +[XSLT]: https://www.w3.org/TR/xslt +[XPath]: https://www.w3.org/TR/xpath +[XSL-FO]: https://www.w3.org/TR/xsl diff --git a/adatbazisok/_felevek/2017-osz.md b/adatbazisok/_felevek/2017-osz.md new file mode 100644 index 000000000..2eec76b73 --- /dev/null +++ b/adatbazisok/_felevek/2017-osz.md @@ -0,0 +1,140 @@ +### 2017. ősz (VITMAB04) + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04]. +(A vizsgakeresztes +kurzusokhoz tartozó tárgytematikák és vizsgakövetelmények a megfelelő +tárgykódú TAD-okon, ill. az alábbiakban, a korábbi félévekhez tartozó +hirdetmények között olvashatók.) + +A tantárgy tematikája, kimérete, oktatásának módja az előző tanévhez +képest megváltozott. + +[Az új tantárgy adatlap][VITMAB04] + +[Fontos általános tudnivalók a tárgyról +és oktatásáról](https://wiki.sch.bme.hu/Adatb%C3%A1zisok#Tippek "Olvasd végig ezt is") + +#### Az előadások helye, ideje + +hétfő 10.15-12.00 St.Nagy. Szept. 5-én kedden is lesz előadás, +kivételesen kiscsoportos formában. Ennek a beosztása +[itt](/sites/default/files/adatbgyak0905.xls) található. + +#### Gyakorlatok + +A tárgyhoz kiscsoportos gyakorlatok is tartoznak, amelyeket szept. 5-től +kezdődően, általában kéthetente, [ezen +beosztás](/sites/default/files/beo2017_osz.xlsx) szerint tartunk. A +csoport kódjanak eleje a napra és az órára utal, a kötőjel utáni sorszám +pedig azt is megmutatja, hogy páros vagy páratlan heteken kerül sorra. A +gyakorlatok teljes félévi naptára [itt +található.](/sites/default/files/gyaknapt.xlsx) + +A gyakorlatok sorrendje: + +Az első gyakorlat idejében valójában egy kiscsoportos előadás lesz az +adatbáziskezelő-rendszerről, amely az Adatbázisok c. könyv [ezen +fejezeteihez](/sites/default/files/adatbazisok_1-2.pdf)kapcsolódik. A 3. +oktatási héttől (szept. 19-től) kezdődően sorra kerülő gyakorlatok: + +A gyakorlatokon felkészülten kell megjelenni. Csak egyetlen gyakorlat +mulasztható (ld. TVSZ), a gyakorlatvezetők a részvételt rendszeresen +ellenőrzik, kiszárthelyiket íratnak a felkészülés ellenőrzésére. + +Kis ZH [eredmények itt olvashatók.](eredmenyek) + +#### Laboratóriumi foglalkozások + +A tárgyhoz kiscsoportos laborok is tartoznak, amelyeket szept. 12-től +kezdődően általában kéthetente, +[ezen beosztás](/sites/default/files/beo2017osz.xlsx) szerint tartunk. A +csoport kódjanak eleje a napra és az órára utal, a kötőjel utáni sorszám +pedig azt is megmutatja, hogy páros vagy páratlan heteken kerül sorra. A +laborok teljes félévi naptára [itt található.](/sites/default/files/labornapt.xlsx) + + +A laboratóriumi foglalkozások [részletei elérhetőek](labor). + +LPót: A pótlási héten, dec. 13-án szerdán 16.15-től. A pontos részletek +mindenki számára egyénileg a Laboradmin rendszerből fognak kiderülni. A +pótlabor mindenben azonos a reguláris laborokkal, kivéve, hogy mindenki +más feladattípushoz tartozó feladatot fog kapni. + +A laborokon felkészülten kell megjelenni. Egyetlen labor sem +mulasztható, a laborvezetők beugrókat íratnak, a laboron való érvényes +részvétel feltétele a beugró sikeres teljesítése. + +#### Nagyzárthelyi + +Időpont: 2017. nov. 13. hétfő 8.15–10.00 Anyaga: az előadásokon +vagy a gyakorlatokon elhangzottak, amelyek a 2012, 2013, 2015, 2016 és a +2017 évi kiadású jegyzetben az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 +fejezetekben találhatók. + + +Azok a hallgatók, akik a zárthelyit (nem a pótzárthelyit!) legalább jó +eredménnyel teljesítették és a tárgyat első alkalommal vették fel, nem +kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** a ZH előtt: +- írásban: a `konzi.adatlabor` levelezési listán +keresztül. A subject legyen: `[ZH][témakör megnevezése]`. +- szóban: nov. 11-én 18.00-tól az IB139 (páratlan heti gyakorlatok számára) és +IB140 (páros heti gyakorlatok számára) termekben. + +**Terembeosztás** A ZH +során kérem, hogy a termeket az alábbiak szerint vegyétek igénybe: A-E +STFNagy F-Gá QAF16 Ge-Ja E1C Já-Ko IB025 Kö-Me E1A Mi-Pé QAF15 Pi-Zs +K234 + +**ZH eredmények** [itt +találhatók.](/sites/default/files/zh_2017osz.xls) A ZH-k megtekinthetők +nov. 14-én 18.15-től az IB028-ban. + +Kiemelkedő eredményük alapján +meghívást kaptak a dec. 18-i első vizsgaalkalomra és nem kell beugrót +írniuk: Dobos-Kovács Mihály 35; Hornák Bence 33; Szekeres Dániel 33; +Oszlányi Zsolt 32,5; Kókai Kristóf 32; Nemes Mátyás 32; Hübner Krisztián 31; +Matusek Márton 31; Polgár Márton 31; Mihályi Viktor 30,5; Móna Dániel 30; +Szörfi Jázmin 30; Ács Bendegúz 29,5; Domián Bálint Gyula 29,5; Horváth +Mátyás Gergő 29; Krizsán Levente Csaba 29; Papp Kristóf Szabolcs 29; +Schulcz Ferenc 29; Sipos Viktória Dóra 29; Takács Tamara Beáta 29. + +#### Pótzárthelyi + +Időpont: 2017. dec. 1. péntek 8.15–10.00 Anyaga azonos a ZH-val. +SZÁMOLÓGÉPET MINDENKI HOZZON MAGÁVAL. + +**Terembeosztás** A PZH során kérem, hogy a termeket az alábbiak +szerint vegyétek igénybe: A-Ki Q-I, Kj-Szal Q-II, Szak-Zs IB025 + +**Megtekintés** Dec. 11-én hétfőn 17.00-tól az IB025-ben. + + +#### Vizsgák + +- A vizsga anyaga alapvetően az Adatbázisok c. jegyzetben található + meg (természetesen kiegészítve azzal, ami az előadásokon elhangzott. + A jegyzetből nem tartozik a tárgy anyagához a hálós és az + objektum-orientált adatbázis-kezelés (7. és 8. fejezet), a + normalizálás alapú relációs sématervezés (9.2.3.6-9.2.3.7, + 9.2.5-9.2.8), az elosztott adatbázis-kezelés (11. fejezet) és a + függelékek. A témakörök jegyzéke itt + található:[magyar](files/adatbazisok_temakorok_2017.pdf), [német](files/adatbazisok_temakorok_deutsch_2017.pdf). + + **Figyelem! Akik korábban szereztek aláírást, azok számára a vizsga + anyaga a megszerzett aláíráshoz tartozó kódú TAD-ban található, ill. + ezen honlapon alább, azon féléveknél, amikor az Adatbázisok az adott + tárgykódnak megfelelő tematikával ment.** +- A vizsgák írásbeli beugróval kezdődnek. Egyetlen feladatot kell kb. + 15 perc alatt súlyos hiba nélkül megoldani ahhoz, hogy a vizsga a + szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. + A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc + áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a + hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes + tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a + hallgató felkészültségéről meggyőződjenek. +- Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk + kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). +- A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az + igényesség és ápoltság elvárt. diff --git a/adatbazisok/_felevek/2018-osz.md b/adatbazisok/_felevek/2018-osz.md new file mode 100644 index 000000000..ef2ee111d --- /dev/null +++ b/adatbazisok/_felevek/2018-osz.md @@ -0,0 +1,72 @@ +### 2018. ősz (VITMAB04) + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04]. + +A tárgyhoz kiscsoportok gyakorlatok és laboratóriumi foglalkozások tartoznak. + +A laborokon felkészülten kell megjelenni. Egyetlen labor sem +mulasztható, a laborvezetők beugrókat íratnak, a laboron való érvényes +részvétel feltétele a beugró sikeres teljesítése. + +A gyakorlatokon felkészülten kell megjelenni. Csak egyetlen gyakorlat +mulasztható (ld. TVSZ), a gyakorlatvezetők a részvételt rendszeresen +ellenőrzik, kiszárthelyiket íratnak a felkészülés ellenőrzésére. + + +#### Az órák időzítése, csoportbeosztás + + - hétfő 10.15-12.00 Q-I., QBF12 + - kivételesen szept. 7-én pénteken is lesz előadás 12.15-14.00-ig, helye: IB028, IB026 + - [gyakorlatok](gyakorlat) ([kis ZH eredmények](eredmenyek)): a szept. 17-i héttől kezdődően, általában kéthetente, később közzétett beosztás szerint. + - [laborok](labor): a szept. 10-i héttől kezdődően, általában kéthetente, később közzétett beosztás szerint. + - Labor pótlás: A pótlási héten, később közzétett időpontban. A pontos részletek +mindenki számára egyénileg a Laboradmin rendszerből fognak kiderülni. A +pótlabor mindenben azonos a reguláris laborokkal, kivéve, hogy mindenki +más feladattípushoz tartozó feladatot fog kapni. + +A labor ill. gyakorlati csoport kódjanak eleje a napra és az órára utal, a kötőjel utáni sorszám +pedig azt is megmutatja, hogy páros vagy páratlan heteken kerül sorra. + + +#### Nagyzárthelyi + +Időpont: 2018. nov. 12. hétfő 8.15–10.00 Anyaga: az előadásokon +vagy a gyakorlatokon elhangzottak, amelyek **előreláthatóan** +a 2012, 2013, 2015, 2016 és a 2017 évi kiadású jegyzetben +az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 fejezetekben találhatók. + + +Azok a hallgatók, akik a zárthelyit (nem a pótzárthelyit!) legalább jó +eredménnyel teljesítették és a tárgyat első alkalommal vették fel, nem +kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** a ZH előtt: +- írásban: a `konzi.adatlabor` levelezési listán +keresztül. A subject legyen: `[ZH][témakör megnevezése]`. + +**Terembeosztás** később. +**ZH eredmények** később. + +#### Pótzárthelyi + +Időpont: 2018. nov. 26. hétfő 8.15-10.00 Anyaga azonos a ZH-val. + +**Terembeosztás** később. +**Megtekintés** később. + + +#### Vizsgák + +- Anyaga: lásd fentebb. +- A vizsgák írásbeli beugróval kezdődnek. Egyetlen feladatot kell kb. + 15 perc alatt súlyos hiba nélkül megoldani ahhoz, hogy a vizsga a + szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. + A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc + áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a + hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes + tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a + hallgató felkészültségéről meggyőződjenek. +- Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk + kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). +- A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az + igényesség és ápoltság elvárt. diff --git a/adatbazisok/_felevek/2018-tavasz.md b/adatbazisok/_felevek/2018-tavasz.md new file mode 100644 index 000000000..e044cf85e --- /dev/null +++ b/adatbazisok/_felevek/2018-tavasz.md @@ -0,0 +1,3 @@ +### 2018. tavasz + +Ebben a félévben Adatbázisokból előadások nincsenek, de az aláírással rendelkezők számára a vizsgalehetőséget biztosítjuk. Mindhárom tárgykódú Adatbázisokból ([VITMAB04], [VITMAB00], [VITMA311]) indul vizsgakurzus, a vizsgakövetelményeik azonban különbözőek. A részletek a megfelelő tantárgy adatlapokon megtalálhatók. diff --git a/adatbazisok/_felevek/2019-osz.md b/adatbazisok/_felevek/2019-osz.md new file mode 100644 index 000000000..ac8fba8a9 --- /dev/null +++ b/adatbazisok/_felevek/2019-osz.md @@ -0,0 +1,85 @@ +### 2020. tavasz (VITMAB04, VITMAB00, VITMA311) + +A tavaszi félév(ek)ben előadások, gyakorlatok nincsenek, akik azonban aláírással rendelkeznek, a félév végén a vizsgaidőszakban vizsgát tehetnek. + +A koronavírus-járvány a korábbi vizsgarendet felülírta. Az egyetem által alkotott általános tudnivalók és előírások [itt]( http://www.bme.hu/hirek/20200602/Tajekoztato_a_koronavirus_helyzetrol) és [itt](https://www.vik.bme.hu/oktatasszervezes/) találhatók. Ezeken túlmenően az Adatbázisok vizsgák lebonyolítása az alábbiak szerint változik: +- A vizsgaidőszak első négy hetében minden nap biztosítunk vizsgalehetőséget. +- A vizsga Teams-en keresztül, folyamatos kétirányú video- és audio-kapcsolat mellett zajlik. +- A vizsgát a vizsgáztató kezdeményezi a vizsgázó @edu.bme.hu-s azonosítóján keresztüli meghívásával. +- A vizsga továbbra is beugróval kezdődik. A beugró azonban nem közös, hanem a személyes vizsga része, amely során három olyan egyszerű kérdést teszünk fel - tipikusan a jegyzet "A fejezet új fogalmai" c. szakaszaiban található definíciók ismeretére kérdezünk rá -, amelyek mindegyikére elfogadható választ kell adni. Ennek teljesülése esetén a vizsga azonnal folytatódik. +- A vizsga további része érdemben nem változik. + +### 2019. ősz (VITMAB04) + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04]. + +A tárgyhoz kiscsoportok gyakorlatok és laboratóriumi foglalkozások tartoznak. + +A laborokon felkészülten kell megjelenni. Egyetlen labor sem mulasztható, a laborvezetők beugrókat íratnak, a laboron való érvényes részvétel feltétele a beugró sikeres teljesítése. + +A gyakorlatokon felkészülten kell megjelenni. Csak egyetlen gyakorlat mulasztható (ld. TVSZ), a gyakorlatvezetők a részvételt rendszeresen ellenőrzik, kiszárthelyiket íratnak a felkészülés ellenőrzésére. + +#### Az órák időzítése, csoportbeosztás + + - hétfő 10.15-12.00 EIB., EIC [Terembeosztás](https://db.bme.hu/~gajdos/terembeosztas.xlsx) + - kivételesen egy második előadás is lesz az első oktatási héten a gyakorlatok helyett, pénteken 12.15-14.00 EIB, IE220 [Terembeosztás](https://db.bme.hu/~gajdos/terembeosztas.xlsx) + - [gyakorlatok](gyakorlat) ([kis ZH eredmények](eredmenyek)): a szept. 23-i héttől kezdődően, kéthetente, [ezen beosztás](https://db.bme.hu/~gajdos/Gyakbeosztas.xlsx) szerint. Az okt. 1-én kedden okt. szünet miatt elmaradó gyakorlatok helyett fakultatív pótlási lehetőséget kínálunk okt. 7-én hétfőn 8:15-10 között [ezen beosztás szerint.](https://db.bme.hu/~gajdos/potgyakorlat.xlsx) + - [laborok](labor): a szept. 16-i héttől kezdődően, általában kéthetente, [ezen beosztás](https://db.bme.hu/~gajdos/DBLab2019osz.xlsx) szerint. + - Labor pótlás: + +Akik az eredetileg dec. 7. szombatra ütemezett L5 (optimalizálás) laborjukat dec. 4-én nem teljesítették, azok dec. 13-án 12.15-től kapnak erre lehetőséget. + +A laborok általános pótlása is dec.13-án pénteken 12.15-től lesz mindenki számára, aki legfeljebb egy labort nem teljesített addig bármely okból kifolyólag. A pontos részletek a Laboradmin rendszerből fognak kiderülni. A pótlabor azonos a reguláris laborokkal, kivéve, hogy mindenki más feladattípushoz tartozó feladatot fog kapni. + +A labor ill. gyakorlati csoport kódjának eleje a napra és az órára utal, a kötőjel utáni sorszám pedig azt is megmutatja, hogy páros vagy páratlan heteken kerülnek sorra a csoport foglalkozásai. + + +#### Nagyzárthelyi + +Időpont: 2019. nov. 18. hétfő 8.15–10.00 Anyaga: az előadásokon vagy a gyakorlatokon elhangzottak, amelyek előreláthatóan a 2012-2019. évi kiadású jegyzetben az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 fejezetekben találhatók. + +Azok a hallgatók, akik a zárthelyit (nem a pótzárthelyit!) legalább jó eredménnyel teljesítették és a tárgyat első alkalommal vették fel, nem kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** a ZH előtt: + + - írásban: a konzi.adatlabor levelezési listán keresztül. A subject legyen: [ZH][témakör megnevezése]. + +**Terembeosztás:** + +A-F K234 + +G-Kot CHFMAX + +Kov-Pál E1B + +Pam-Si IB026 + +So-Sz IB027 + +T-Var IE007 + +Vár-Zs QAF16 + +**ZH megtekintés:** nov. 20. szerda IB220. A-K: 18:00-, L-Zs: 19.30-. + + +#### Pótzárthelyi + +Időpont: 2019. dec. 2. hétfő 8.15-10.00 Anyaga azonos a ZH-val. + +**Terembeosztás:** + +A-K K234 + +L-Zs CHFMAX + +**Megtekintés:** Dec. 9. hétfő 18:00 IB025 + + +#### Vizsgák + + - Anyaga: lásd fentebb. + - A vizsgák írásbeli beugróval kezdődnek. Egyetlen feladatot kell kb. 15 perc alatt súlyos hiba nélkül megoldani ahhoz, hogy a vizsga a szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a hallgató felkészültségéről meggyőződjenek. + - Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). + - A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az igényesség és ápoltság elvárt. + diff --git a/adatbazisok/_felevek/2020-osz.md b/adatbazisok/_felevek/2020-osz.md new file mode 100644 index 000000000..8fa6bcc20 --- /dev/null +++ b/adatbazisok/_felevek/2020-osz.md @@ -0,0 +1,63 @@ +### 2020. ősz (VITMAB04, VISZA027) + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04](https://portal.vik.bme.hu/kepzes/targyak/VITMAB04/). + +A tárgyhoz kiscsoportos gyakorlatok és laboratóriumi foglalkozások is tartoznak. + +A laborokon felkészülten kell részt venni. Egyetlen labor sem mulasztható, a laborvezetők beugrókat íratnak, a laborok teljesítésének feltétele a beugró sikeressége. + +A gyakorlatokon felkészülten kell megjelenni. A gyakorlatvezetők a részvételt ellenőrzik, kiszárthelyiket íratnak a felkészülés tesztelésére. + +#### Előadások + + Az előadások helye, ideje: hétfő 16.15-18.00 Q-I, IB025, IB026, IB027. Az előadásokon való személyes részvételre a Moodle-ban előzetesen regisztrálni kell, amely regisztráció minden előadás előtt megújítandó. Az előadásokról a Kar videófelvételt készít, amely azonban csak néhány nap késéssel érhető el. Az előadások valós időben történő megtekintése csak a felsorolt termekben lehetséges, ahol kérdések feltételére is lehetőség nyílik. + +#### Gyakorlatok + + A gyakorlatok szept. 22-től kezdődően kéthetente lesznek, [ezen beosztás](https://db.bme.hu/~gajdos/Gyakbeosztas20.xlsx) szerint. + + A gyakorlatokhoz szükséges feladatsorok és egyéb tudásfoszlányok [ITT](gyakorlat) érhetők el, a kisZH-eredmények pedig [ITT](eredmenyek)). FIGYELEM! A gyakorlatokon nem adunk ki papíralapú segédanyagokat, így a feladatsort valamilyen formában mindenki vigye magával az órára. + +#### Laborok + A laborokat szept. 30-tól kezdődően, általában kéthetente tartjuk, [ezen beosztás](https://db.bme.hu/~gajdos/DBLab2020osz.xlsx) szerint. Figyelem, a sheetnek több füle is tartalmaz hasznos információkat. + + A labor ill. gyakorlati csoport kódjának eleje a napra és az órára utal, a "t" a távolléti (Teams) csoportokat jelöli, a kód végén levő sorszám pedig azt mutatja, hogy páros vagy páratlan heteken kerülnek sorra a csoport foglalkozásai. + + A laborokhoz szükséges felkészülési és egyéb anyagok [ITT](labor) találhatók. + + Laborpótlás a félév végén, dec. 16-án szerdán lehetséges, azok számára, akik legfeljebb egy labort nem teljesítettek bármely okból kifolyólag. L1(Oracle): 16:15, L2(SQL1): 12:15, L3(SQL2): 10:15, L4(SQL3): 12:15, L5(OPTI): 8:15. A további részletek a Laboradmin rendszerből fognak kiderülni. A pótlabor azonos a reguláris laborokkal, kivéve, hogy mindenki más feladattípushoz tartozó feladatot fog kapni. + + +#### Nagyzárthelyi + +[ZH beosztás](https://db.bme.hu/~gajdos/ZH_Teams.xlsx) + +Időpont: 2020. nov. 16. hétfő 8.15–10.00 Anyaga: az előadásokon vagy a gyakorlatokon elhangzottak, amelyek a 2012-2019. évi kiadású jegyzetben az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 fejezetekben találhatók. + +Azok a hallgatók, akik a zárthelyit (nem a pótzárthelyit!) legalább jó eredménnyel teljesítették és a tárgyat első alkalommal vették fel, nem kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** írásban a konzi.adatlabor levelezési listán keresztül. A subject legyen: [ZH][témakör megnevezése]. + + +#### Pótzárthelyi + +Időpont: 2020. nov. 30. hétfő 8.15-10.00. "Beosztás", felügyelet nincs, ld. a KTB nov. 24-i szabályozását: "Távolléti zárthelyiket hang- és/vagy képkapcsolat létesítése nélkül kell lebonyolítani." Anyaga és felépítése azonos a ZH-val: 1. rész Moodle teszt 20 percben aláírásért, utána 10:00-ig feladatmegoldás a Fecske feladatlapja alapján IMSc pontokért, gyakorlásul, tapasztalatszerzésért. + +#### Pót-pótzárthelyi + +Időpont: 2020. dec. 15. kedd 8.15-10.00. Ez az alkalom térítésköteles, a Neptunban kell rá jelentkezni. + + +#### Vizsgák + + - Anyaga: lásd fentebb. + - A vizsgák beugróval kezdődnek. Egyetlen feladatot kell kb. 15 perc alatt súlyos hiba nélkül megoldani ahhoz, hogy a vizsga a szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a hallgató felkészültségéről meggyőződjenek. + - Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). + - A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az igényesség és ápoltság elvárt. + + A koronavírus-járvány ezt a hagyományos vizsgarendet 2020. tavasza után a dec.-januári vizsgaidőszakban is felülírja. A vizsgák lebonyolítása ekkor a következők szerint történik: +- Teams-en keresztül, folyamatos kétirányú video- és audio-kapcsolat mellett. +- A vizsgát a vizsgáztató kezdeményezi a vizsgázó @edu.bme.hu-s azonosítóján keresztüli meghívásával. +- Továbbra is beugróval kezdődik. A beugró azonban nem közös, hanem a személyes vizsga része, amely során három olyan egyszerű kérdést teszünk fel - tipikusan a jegyzet "A fejezet új fogalmai" c. szakaszaiban található definíciók ismeretére kérdezünk rá -, amelyek mindegyikére elfogadható választ kell adni. Ennek teljesülése esetén a vizsga azonnal folytatódik. +- A vizsga további része érdemben nem változik. +- Januárban szinte minden nap vizsganap lesz, ez azonban nem jelenti azt, hogy egymás utáni napokon is érdemes próbálkozni. A tapasztalat azt mutatja, hogy a megismételt vizsga sikerességéhez érdemes két vizsgakísérlet között legalább három napnak eltelnie. diff --git a/adatbazisok/_felevek/2021-osz.md b/adatbazisok/_felevek/2021-osz.md new file mode 100644 index 000000000..b2fb0836c --- /dev/null +++ b/adatbazisok/_felevek/2021-osz.md @@ -0,0 +1,67 @@ +### 2021. ősz + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04](https://portal.vik.bme.hu/kepzes/targyak/VITMAB04/). + +A tárgyhoz kiscsoportos gyakorlatok és laboratóriumi foglalkozások is tartoznak. + +A laborokon felkészülten kell részt venni. Egyetlen labor sem mulasztható, a laborvezetők beugrókat íratnak, a laborok teljesítésének feltétele a beugró sikeressége. A beugrók a laborhoz kapcsolódó elméleti ismeretekből is tartalmazhatnak kérdéseket. + +A gyakorlatokon felkészülten kell megjelenni. A gyakorlatvezetők a részvételt ellenőrzik, kiszárthelyiket íratnak a felkészülés tesztelésére. + +#### Előadások + +Az előadások helye, ideje: hétfő 16.15-18.00 Q-I, IB027, [ezen beosztás](https://db.bme.hu/~gajdos/terem21.xlsx) szerint. Mivel az első két oktatási héten nem lesznek sem gyakorlatok, sem laborok (tekintve, hogy az ezek eredményes teljesítéséhez szükséges elméleti ismeretek még hiányoznak), ezért az első két héten helyettük is előadások lesznek: szept. 8-án szerdán 16.15-től a Q-I, IB027 termekben, valamint szept. 16-án csütörtökön 18.15-től a Q-I, IB026 termekben a hétfői előadásokkal azonos beosztás szerint. + +#### Gyakorlatok + + A gyakorlatok szept. 21-től kezdődően kéthetente lesznek, [ezen beosztás](https://db.bme.hu/~gajdos/Gyakbeosztas21.xlsx) szerint. A gyakorlat- ill. laborcsoport kódjának eleje a napra és az órára utal, a kód végén levő sorszám pedig azt mutatja, hogy páros vagy páratlan heteken kerülnek sorra a csoport foglalkozásai. + + A gyakorlatokhoz szükséges feladatsorok és egyéb tudásfoszlányok [ITT](gyakorlat) érhetők el, a kisZH-eredmények pedig [ITT](eredmenyek)). FIGYELEM! A gyakorlatokon nem adunk ki papíralapú segédanyagokat, így a feladatsort valamilyen formában mindenki vigye magával az órára. + +#### Laborok + A laborokat szept. 30-tól kezdődően, általában kéthetente tartjuk, [ezen beosztás](https://db.bme.hu/~gajdos/DBLab2021osz.xlsx) szerint. Figyelem, az Excel táblázatnak több füle is tartalmaz hasznos információkat. + + A laborokhoz szükséges felkészülési és egyéb anyagok [ITT](labor) találhatók. + + Laborpótlás dec. 15-en 8-10 között lesz valamennyi labor esetén azok számára, akik legfeljebb egy kötelező labort nem teljesítettek bármely okból kifolyólag. A pontos hely a Laboradmin rendszerből fog kiderülni. A pótlabor azonos a reguláris laborokkal, kivéve, hogy mindenki egy számára új feladattípushoz tartozó feladatot fog kapni. + + +#### Nagyzárthelyi + +Időpont: 2021. nov. 18. csüt. 18.15–20.00 Anyaga: az előadásokon vagy a gyakorlatokon elhangzottak, amelyek a 2012-2019. évi kiadású jegyzetben az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 fejezetekben találhatók. + +Azok a hallgatók, akik a zárthelyit (nem a pótzárthelyit!) legalább jó eredménnyel teljesítették és a tárgyat első alkalommal vették fel, nem kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** írásban a konzi.adatlabor levelezési listán keresztül, amelyre a laborok során lehet/érdemes feliratkozni. A subject legyen: [ZH][témakör megnevezése]. + +A ZH során a termeket az alábbiak szerint vegyék igénybe: + +![kép](https://user-images.githubusercontent.com/18241253/142242747-a1d97b89-0cbd-4fae-8ba4-6a9ab713dba8.png) + +Kalkulátor hasznos lehet, célszerűen hozzanak magukkal. Mobiltelefon használata erre a célra sem megengedett. Akiknek többletidőre jogosító határozatuk van és azt be is mutatták a tárgyfelelősnek, valamennyien a Q-I terembe menjenek. + +#### Pótzárthelyi + +Időpont: 2021. nov. 30. kedd 8.15-10.00. Anyaga azonos a ZH-éval. + +A PZH során a termeket az alábbiak szerint vegyék igénybe: + +![kép](https://user-images.githubusercontent.com/18241253/143887280-9ed323c4-10d4-48b6-975e-92c581d7033e.png) + +7 iv A4 méretű (nem karton) papírlapot hozzanak magukkal. Kalkulátor hasznos lehet. Mobiltelefon használata erre a célra sem megengedett. + +#### Vizsgák + + - Anyaga: lásd fentebb. + - A vizsgák beugróval kezdődnek. Egyetlen feladatot kell kb. 15 perc alatt súlyos hiba nélkül megoldani ahhoz, hogy a vizsga a szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a hallgató felkészültségéről meggyőződjenek. + - Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). + - A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az igényesség és ápoltság elvárt. + + A koronavírus-járvány ezt a hagyományos vizsgarendet a 2021. dec.- 2022. januári vizsgaidőszakban is felülírja. A vizsgák lebonyolítása ekkor a következők szerint történik: + + - Teams-en keresztül, folyamatos kétirányú video- és audio-kapcsolat mellett. Fej- vagy fülhallgató nem használható. + - A vizsgát a vizsgáztató kezdeményezi a vizsgázó @edu.bme.hu-s azonosítóján keresztüli meghívásával 8:00-tól kezdődően (a 7:30-as kezdés ugyanis az adott körülmények között okafogyott). + - Továbbra is beugróval kezdődik. A beugró azonban nem közös, hanem a személyes vizsga része, amely során három olyan egyszerű kérdést teszünk fel - tipikusan a jegyzet "A fejezet új fogalmai" c. szakaszaiban található definíciók ismeretére kérdezünk rá -, amelyek mindegyikére elfogadható választ kell adni. Ennek teljesülése esetén a vizsga azonnal folytatódik. + - A vizsga további része érdemben nem változik. + - Januárban szinte minden nap vizsganap lesz, ez azonban nem jelenti azt, hogy egymás utáni napokon is érdemes próbálkozni. A tapasztalat azt mutatja, hogy a megismételt vizsga sikerességéhez érdemes két vizsgakísérlet között legalább három napnak eltelnie. + diff --git a/adatbazisok/_felevek/2022-osz.md b/adatbazisok/_felevek/2022-osz.md new file mode 100644 index 000000000..e05d65b9c --- /dev/null +++ b/adatbazisok/_felevek/2022-osz.md @@ -0,0 +1,67 @@ +### 2022. ősz + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04](https://portal.vik.bme.hu/kepzes/targyak/VITMAB04/). + +A tárgyhoz kiscsoportos gyakorlatok és laboratóriumi foglalkozások is tartoznak. + +A laborokon felkészülten kell részt venni. Egyetlen labor sem mulasztható, a laborvezetők beugrókat íratnak, a laborok teljesítésének feltétele a beugró sikeressége. A beugrók a laborhoz kapcsolódó elméleti ismeretekből is tartalmazhatnak kérdéseket. + +A gyakorlatokon felkészülten kell megjelenni. A gyakorlatvezetők a részvételt ellenőrzik, kiszárthelyiket íratnak a felkészülés tesztelésére. + +#### Előadások + +Az előadások helye, ideje: hétfő 16.15-18.00 Q-I, IB025, [ezen beosztás](https://db.bme.hu/~gajdos/terembeosztas22.xlsx) szerint. Mivel az első oktatási héten nem lesznek sem gyakorlatok, sem laborok (tekintve, hogy az ezek eredményes teljesítéséhez szükséges elméleti ismeretek még hiányoznak), ezért az első héten helyettük is előadás lesz: szept. 8-án csütörtökön 8.15-től a Q-I, IB026 termekben a hétfői előadásokkal azonos beosztás szerint. + +#### Gyakorlatok + + A gyakorlatok szept. 13-tól kezdődően kéthetente lesznek, [ezen beosztás](https://db.bme.hu/~gajdos/gyakorlatbeosztas22.xlsx) szerint. A gyakorlat- ill. laborcsoport kódjának eleje a napra és az órára utal, a kód végén levő sorszám pedig azt mutatja, hogy páros vagy páratlan heteken kerülnek sorra a csoport foglalkozásai. + + A gyakorlatokhoz szükséges feladatsorok és egyéb tudásfoszlányok [ITT](gyakorlat) érhetők el, a kisZH-eredmények pedig [ITT](eredmenyek)). FIGYELEM! A gyakorlatokon nem adunk ki papíralapú segédanyagokat, így a feladatsort valamilyen formában mindenki vigye magával az órára. + +#### Laborok + A laborokat szept. 19-től kezdődően, általában kéthetente tartjuk, [ezen beosztás](https://db.bme.hu/~gajdos/DBLab2022osz.xlsx) szerint. Figyelem, az Excel táblázatnak több füle is tartalmaz hasznos információkat. + + A laborokhoz szükséges felkészülési és egyéb anyagok [ITT](labor) találhatók. + + Laborpótlás dec. 14-én szerdán 12:15-től lesz valamennyi labor esetén azok számára, akik legfeljebb egy kötelező labort nem teljesítettek bármely okból kifolyólag. A pontos hely és a pótlás szükségessége a Laboradmin rendszerből kiderül, ezt kérjük, hogy mindenki ellenőrizze, és bármilyen eltérést mielőbb jelezzen a tárgyfelelősnek a gajdos_at_db.bme.hu cimen. A pótlaborok azonosak a reguláris laborokkal, kivéve, hogy mindenki egy számára új feladattípushoz tartozó feladatot fog kapni. + + +#### Nagyzárthelyi + +Időpont: 2022. nov. 15. kedd. 8.15–10.00 Anyaga: az előadásokon vagy a gyakorlatokon elhangzottak, amelyek a 2015-2021. évi kiadású jegyzetben az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 fejezetekben találhatók. + +Azok a hallgatók, akik a zárthelyit (nem a pótzárthelyit!) legalább jó eredménnyel teljesítették és a tárgyat első alkalommal vették fel, nem kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** írásban a konzi.adatlabor levelezési listán keresztül, amelyre a laborok során lehet/érdemes feliratkozni. A subject legyen: [ZH][témakör megnevezése]. + +A ZH során a termeket [ezen beosztás](https://db.bme.hu/~gajdos/ZHterembeosztas.xlsx) szerint vegyék igénybe. +Kalkulátor hasznos lehet, célszerűen hozzanak magukkal. Mobiltelefon használata erre a célra sem megengedett. + +#### Pótzárthelyi + +Időpont: 2022. nov. 29. kedd 8.15-10.00. Anyaga azonos a ZH-éval. + +A PZH során a termeket [ezen beosztás](https://db.bme.hu/~gajdos/PZHterembeosztas.xlsx) szerint vegyék igénybe. +Kalkulátor hasznos lehet, célszerűen hozzanak magukkal, úgyszintén 6 ív A4 méretű (nem karton) papírlapot. Mobiltelefon használata kalkulátorként sem megengedett. + + + +#### Vizsgák + + - Anyaga: lásd fentebb. + - A vizsgák beugróval kezdődnek. Egyetlen feladatot kell kb. 15 perc alatt súlyos hiba nélkül megoldani vagy három fogalmat definiálni ahhoz, hogy a vizsga a szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a hallgató felkészültségéről, a tananyag megértéséről meggyőződjenek. + - Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). + - Január 9-27. között szinte minden nap lesz vizsgalehetőség, ez azonban nem jelenti azt, hogy egymás utáni napokon is érdemes próbálkozni. A tapasztalat azt mutatja, hogy a megismételt vizsga sikerességéhez érdemes két vizsgakísérlet között legalább három napnak eltelnie. + - A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az igényesség és ápoltság elvárt. + + + diff --git a/adatbazisok/_felevek/2023-osz.md b/adatbazisok/_felevek/2023-osz.md new file mode 100644 index 000000000..18a50359b --- /dev/null +++ b/adatbazisok/_felevek/2023-osz.md @@ -0,0 +1,90 @@ +### 2023. ősz + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04](https://portal.vik.bme.hu/kepzes/targyak/VITMAB04/). + +A tárgyhoz kiscsoportos gyakorlatok és laboratóriumi foglalkozások is tartoznak. + +A laborokon felkészülten kell részt venni. Egyetlen labor sem mulasztható, a laborvezetők beugrókat íratnak, a laborok teljesítésének feltétele a beugró sikeressége. A beugrók a laborhoz kapcsolódó elméleti ismeretekből is tartalmazhatnak kérdéseket. + +A gyakorlatokon felkészülten kell megjelenni. A gyakorlatvezetők a részvételt ellenőrzik, kiszárthelyiket íratnak a felkészülés tesztelésére. + +#### Előadások + +Az előadások helye, ideje: hétfő 12.15-14.00 Q-I, IB025, [ezen beosztás](https://db.bme.hu/~gajdos/terembeosztas23.xlsx) szerint. Mivel az első oktatási héten nem lesznek sem gyakorlatok, sem laborok (tekintve, hogy az ezek eredményes teljesítéséhez szükséges elméleti ismeretek még hiányoznak), ezért az első héten helyettük is előadás lesz: szept. 8-án pénteken 14.15-től a Q-I, IB025 termekben a hétfői előadásokkal azonos beosztás szerint. + +#### Gyakorlatok + + A gyakorlatok szept. 12-től kezdődően kéthetente lesznek, [ezen beosztás](https://db.bme.hu/~gajdos/gyakorlatbeosztas23.xlsx) szerint. A gyakorlat- ill. laborcsoport kódjának eleje a napra és az órára utal, a kód végén levő sorszám páros- vagy páratlansága pedig azt mutatja, hogy páros vagy páratlan heteken kerülnek sorra a csoport foglalkozásai. A szept. 12-i sportnap miatt elmaradó gyakorlatok helyett fakultatív pótlást szerveztünk. Azoknak, akiknek ténylegesen elmaradt az első gyakorlata, és jelezte a részvételi szándékát a szept. 15. péntek 14:15-től kezdődő pótláson, azoknak a terembeosztása [itt](https://db.bme.hu/~gajdos/potgyak.xls) található. + + A gyakorlatokhoz szükséges feladatsorok és egyéb tudásfoszlányok [ITT](gyakorlat) érhetők el, a kisZH-eredmények pedig [ITT](eredmenyek)). FIGYELEM! A gyakorlatokon nem adunk ki papíralapú segédanyagokat, így a feladatsort valamilyen formában mindenki vigye magával az órára. + +#### Laborok +A laborokat szept. 20-tól kezdődően, általában kéthetente tartjuk, [ezen beosztás](https://db.bme.hu/~gajdos/DBLab2023osz.xlsx) szerint. Figyelem, az Excel táblázatnak több füle is tartalmaz hasznos információkat. + + A laborokhoz szükséges felkészülési és egyéb anyagok [ITT](labor) találhatók. + +Laborpótlás dec. 13-án szerdán 14:15-től lesz valamennyi labor esetén azok számára, akik legfeljebb egy kötelező labort nem teljesítettek bármely okból kifolyólag. A pontos hely és a pótlás szükségessége a [Laboradmin rendszerből](https://fecske.db.bme.hu) fog kiderülni, ezt kérjük, hogy mindenki ellenőrizze dec. 12-től kezdődően, és bármilyen eltérést mielőbb jelezzen a tárgyfelelősnek a gajdos_at_db.bme.hu cimen. A pótlaborok azonosak a reguláris laborokkal, kivéve, hogy mindenki egy számára új feladattípushoz tartozó feladatot fog kapni. + + +#### Nagyzárthelyi + +Időpont: 2023. nov. 14. kedd. 8.15–10.00 Anyaga: az előadásokon vagy a gyakorlatokon elhangzottak, amelyek a 2015-2021. évi kiadású jegyzetben az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 fejezetekben találhatók. + +Azok a hallgatók, akik a zárthelyit (nem a pótzárthelyit!) legalább jó eredménnyel teljesítették és a tárgyat első alkalommal vették fel, nem kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** írásban a konzi.adatlabor levelezési listán keresztül, amelyre a laborok során lehet/érdemes feliratkozni. A subject legyen: [ZH][témakör megnevezése]. + +A ZH során a termeket ezen beosztás szerint vegyék igénybe: + +A-Fa CHFMAX + +Fe-Gy QAF14 + +H-Ka IB027 + +Ke-Lé F2E + +Li-Na K275 + +Ne-S KF76 + +Sz-Zs E1B + + +Kalkulátor hasznos lehet, célszerűen hozzanak magukkal. Mobiltelefon használata erre a célra sem megengedett. + +#### Pótzárthelyi + +Időpont: 2023. nov. 28. kedd 8.15-10.00. Anyaga azonos a ZH-éval. Terembeosztás: + +A-J: ChMax + +K-P: KF76 + +R-Zs: EIB + + + +#### Vizsgák + + - Anyaga: lásd fentebb. + - A vizsgák beugróval kezdődnek. Egyetlen feladatot kell kb. 15 perc alatt súlyos hiba nélkül megoldani vagy három fogalmat definiálni ahhoz, hogy a vizsga a szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. A szóbeli vizsgán tételt kell húzni, a felkészülésre kb. 15 perc áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a hallgató felkészültségéről, a tananyag _megértéséről_ meggyőződjenek. + - Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). + - Januárban szinte minden nap lesz vizsgalehetőség, ez azonban nem jelenti azt, hogy egymás utáni napokon is érdemes próbálkozni. A tapasztalat azt mutatja, hogy a megismételt vizsga sikerességéhez érdemes két vizsgakísérlet között legalább három napnak eltelnie. + - A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az igényesség és ápoltság itt is elvárt. + + + + diff --git a/adatbazisok/_felevek/2024-osz.md b/adatbazisok/_felevek/2024-osz.md new file mode 100644 index 000000000..9d9557c9b --- /dev/null +++ b/adatbazisok/_felevek/2024-osz.md @@ -0,0 +1,90 @@ +### 2024. ősz + +BSc. mérnök informatikus szak 2. évfolyam számára. Tantárgyi adatlap: [VITMAB04](https://portal.vik.bme.hu/kepzes/targyak/VITMAB04/). + +A tárgyhoz kiscsoportos gyakorlatok és laboratóriumi foglalkozások is tartoznak. + +A laborokon felkészülten kell részt venni. Egyetlen labor sem mulasztható, a laborvezetők beugrókat íratnak, a laborok teljesítésének feltétele a beugró sikeressége. A beugrók leginkább a laborhoz kapcsolódó elméleti ismeretekből tartalmaznak kérdéseket. + +A gyakorlatokon is felkészülten kell megjelenni. A gyakorlatvezetők a részvételt ellenőrzik, kiszárthelyiket íratnak a felkészülés tesztelésére. Ezek a hallgatóknak szolgáltatnak visszajelzést, hogy a felkészültségük/előismereteik megfelelők-e a gyakorlat anyagának hatékony elsajátításához. + +#### Előadások + +Az előadások helye, ideje: hétfő 12.15-14.00 Q-I, IB025, [ezen beosztás](https://db.bme.hu/~gajdos/terembeosztas24.xlsx) szerint. Mivel az első oktatási héten nem lesznek sem gyakorlatok, sem laborok (tekintve, hogy az ezek eredményes teljesítéséhez szükséges elméleti ismeretek még hiányoznak), ezért az első héten helyettük is előadás lesz: szept. 5-én csütörtökön 16:15-től a Q-I és IB026 termekben a hétfői előadásokkal azonos beosztás szerint. + +#### Gyakorlatok + + A gyakorlatok szept. 10-től kezdődően kéthetente lesznek, [ezen beosztás](https://db.bme.hu/~gajdos/gyakorlatbeosztas24.xlsx) szerint. A gyakorlat- ill. laborcsoport kódjának eleje a napra és az órára utal, a kód végén levő sorszám páros- vagy páratlansága pedig azt mutatja, hogy ***páros vagy páratlan oktatási heteken*** kerülnek sorra az adott csoport foglalkozásai. A szept. 17-én kedden (sportnap) és az okt. 1-én kedden (Sch Kupa) elmaradó gyakorlatok helyett fakultatív pótlásokat kínálunk fel, amelyek részleteiről minden érintettet a saját gyakorlatvezetője fogja tájékoztatni. + + A gyakorlatokhoz szükséges feladatsorok és egyéb tudásfoszlányok [ITT](gyakorlat) érhetők el, a kisZH-eredmények pedig [ITT](eredmenyek)). FIGYELEM! A gyakorlatokon nem adunk ki papíralapú segédanyagokat, így a feladatsort valamilyen formában mindenki vigye magával az órára. + +#### Laborok +A laborokat szept. 18-tól kezdődően, általában kéthetente tartjuk, [ezen beosztás](https://db.bme.hu/~gajdos/DBLab2024osz.xlsx) szerint. Figyelem, az Excel táblázatnak több füle is tartalmaz hasznos információkat. + + A laborokhoz szükséges felkészülési és egyéb anyagok [ITT](labor) találhatók. + +Laborpótlás a pótlási héten lesz valamennyi labor esetén azok számára, akik legfeljebb egy kötelező labort nem teljesítettek bármely okból kifolyólag. A pontos hely és a pótlás szükségessége a [Laboradmin rendszerből](https://fecske.db.bme.hu) fog kiderülni, ezt kérjük, hogy mindenki ellenőrizze a szorgalmi időszak végén, és bármilyen eltérést mielőbb jelezzen a tárgyfelelősnek a gajdos_at_db.bme.hu cimen. A pótlaborok azonosak a reguláris laborokkal, kivéve, hogy mindenki egy számára új feladattípushoz tartozó feladatot fog kapni. + + +#### Nagyzárthelyi + +Időpont: 2024. nov. 12. kedd 8.15–10.00 Anyaga: az előadásokon vagy a gyakorlatokon elhangzottak, amelyek a 2015-2021. évi kiadású jegyzetben az 1-4, 5.1, 5.2, 5.3, 6. és 9.1 fejezetekben találhatók. 6 iv A4 méretű (nem karton) papírlapot hozzanak magukkal NEM összetűzve. Kalkulátor hasznos lehet. Mobiltelefon használata erre a célra sem megengedett. + +Azok a hallgatók, akik a zárthelyit (NEM a pótzárthelyit!) legalább jó eredménnyel teljesítik és a tárgyat első alkalommal vették fel, nem kell, hogy a vizsgán írásbeli beugrót írjanak. + +**Konzultációs lehetőség** írásban a konzi.adatlabor levelezési listán keresztül, amelyre a laborok során lehet/érdemes feliratkozni. A subject legyen: [ZH][témakör megnevezése]. + +A ZH során a termeket ezen beosztás szerint vegyék igénybe: később... + + + +#### Pótzárthelyi + +Időpont: 2024. nov. 26. kedd 8.15-10.00. Anyaga azonos a ZH-éval. Terembeosztás: később... + + + +#### Vizsgák + + - Anyaga: lásd fentebb. + - A vizsgák beugróval kezdődnek. Egyetlen feladatot kell kb. 15 perc alatt súlyos hiba nélkül megoldani vagy öt [fogalmat](https://db.bme.hu/~gajdos/Fogalomjegyzek.doc) (ld. a jegyzetben "A fejezet új fogalmai" c. szakaszokat) definiálni ahhoz, hogy a vizsga a szóbelivel folytatható legyen, ellenkező esetben a vizsga elégtelen. A szóbeli vizsgán tételt kell húzni (ld. fentebb a tárgy témaköreinek jegyzékét), a felkészülésre kb. 15 perc áll rendelkezésre. Lehetőség szerint – de nem törvényszerűen – a hallgatók a gyakorlatvezetőiknél szóbeliznek, akik a teljes tananyagból tetszőleges sorrendben is tesznek fel kérdéseket, hogy a hallgató felkészültségéről, elsősorban a tananyag _megértéséről_ meggyőződjenek. + - Akiknek bármely – méltánylandó – okból már decemberben vizsgázniuk kell, lépjenek kapcsolatba Gajdos Sándorral (gajdosATdb.bme.hu). + - Januárban szinte minden nap lesz vizsgalehetőség, ez azonban nem jelenti azt, hogy egymás utáni napokon is érdemes próbálkozni. A tapasztalat azt mutatja, hogy a megismételt vizsga sikerességéhez érdemes két vizsgakísérlet között legalább három napnak eltelnie. + - A szóbeli vizsgán nem szükséges alkalmi öltözetben megjelenni, de az igényesség és ápoltság itt is elvárt. + + + + + + diff --git a/adatbazisok/_felevek/tb.jpg b/adatbazisok/_felevek/tb.jpg new file mode 100644 index 000000000..7a737e0d4 Binary files /dev/null and b/adatbazisok/_felevek/tb.jpg differ diff --git a/adatbazisok/_felevek/tb.png b/adatbazisok/_felevek/tb.png new file mode 100644 index 000000000..aba94eb5e Binary files /dev/null and b/adatbazisok/_felevek/tb.png differ diff --git a/adatbazisok/eredmenyek.md b/adatbazisok/eredmenyek.md new file mode 100644 index 000000000..120c227cc --- /dev/null +++ b/adatbazisok/eredmenyek.md @@ -0,0 +1,4 @@ +--- +redirect_to: + - https://docs.google.com/spreadsheets/d/1OXMD9Wih7kgkZzvrefd9JKU8OiolN19X9WpmRBbG68k/pub?output=html +--- diff --git a/adatbazisok/felevek-archivum.md b/adatbazisok/felevek-archivum.md new file mode 100644 index 000000000..6036fe956 --- /dev/null +++ b/adatbazisok/felevek-archivum.md @@ -0,0 +1,15 @@ +--- +layout: page +title: Adatbázisok a korábbi félévekben +--- + +A korábbi félévek félév-specifikus információinak archívuma. + +{% include_relative _felevek/2018-osz.md %} + +{% include_relative _felevek/2018-tavasz.md %} + +{% include_relative _felevek/2017-osz.md %} + + +{% include targykodok.md %} diff --git a/adatbazisok/files/AB_GYIK.pdf b/adatbazisok/files/AB_GYIK.pdf new file mode 100644 index 000000000..5394d22d2 Binary files /dev/null and b/adatbazisok/files/AB_GYIK.pdf differ diff --git a/adatbazisok/files/AB_GYIK_v1.1.pdf b/adatbazisok/files/AB_GYIK_v1.1.pdf new file mode 100644 index 000000000..db1194eca Binary files /dev/null and b/adatbazisok/files/AB_GYIK_v1.1.pdf differ diff --git a/adatbazisok/files/Lekerdezes_opt.pdf b/adatbazisok/files/Lekerdezes_opt.pdf new file mode 100644 index 000000000..6dd0a3d72 Binary files /dev/null and b/adatbazisok/files/Lekerdezes_opt.pdf differ diff --git a/adatbazisok/files/Optimierung.pdf b/adatbazisok/files/Optimierung.pdf new file mode 100644 index 000000000..0274e6496 Binary files /dev/null and b/adatbazisok/files/Optimierung.pdf differ diff --git a/adatbazisok/files/adatb-relacios-tervezes.pdf b/adatbazisok/files/adatb-relacios-tervezes.pdf new file mode 100644 index 000000000..db9b8c8da Binary files /dev/null and b/adatbazisok/files/adatb-relacios-tervezes.pdf differ diff --git a/adatbazisok/files/adatb_2013_gyak_1.pdf b/adatbazisok/files/adatb_2013_gyak_1.pdf new file mode 100644 index 000000000..710fb317a Binary files /dev/null and b/adatbazisok/files/adatb_2013_gyak_1.pdf differ diff --git a/adatbazisok/files/adatb_2014_gyak_5.pdf b/adatbazisok/files/adatb_2014_gyak_5.pdf new file mode 100644 index 000000000..d9b91af1a Binary files /dev/null and b/adatbazisok/files/adatb_2014_gyak_5.pdf differ diff --git a/adatbazisok/files/adatb_2014_gyak_6.pdf b/adatbazisok/files/adatb_2014_gyak_6.pdf new file mode 100644 index 000000000..51e4d7081 Binary files /dev/null and b/adatbazisok/files/adatb_2014_gyak_6.pdf differ diff --git a/adatbazisok/files/adatb_2015_gyak_2.pdf b/adatbazisok/files/adatb_2015_gyak_2.pdf new file mode 100644 index 000000000..4f876b1b4 Binary files /dev/null and b/adatbazisok/files/adatb_2015_gyak_2.pdf differ diff --git a/adatbazisok/files/adatb_2015_gyak_3.pdf b/adatbazisok/files/adatb_2015_gyak_3.pdf new file mode 100644 index 000000000..22ed801ed Binary files /dev/null and b/adatbazisok/files/adatb_2015_gyak_3.pdf differ diff --git a/adatbazisok/files/adatb_2017_gyak_3.pdf b/adatbazisok/files/adatb_2017_gyak_3.pdf new file mode 100644 index 000000000..9cc839532 Binary files /dev/null and b/adatbazisok/files/adatb_2017_gyak_3.pdf differ diff --git a/adatbazisok/files/adatbazisok-2015-kiadas-2-4-fejezet.pdf b/adatbazisok/files/adatbazisok-2015-kiadas-2-4-fejezet.pdf new file mode 100644 index 000000000..e1d98bbe4 Binary files /dev/null and b/adatbazisok/files/adatbazisok-2015-kiadas-2-4-fejezet.pdf differ diff --git a/adatbazisok/files/adatbazisok_temakorok_2013.pdf b/adatbazisok/files/adatbazisok_temakorok_2013.pdf new file mode 100644 index 000000000..a2a43226f Binary files /dev/null and b/adatbazisok/files/adatbazisok_temakorok_2013.pdf differ diff --git a/adatbazisok/files/adatbazisok_temakorok_2017.pdf b/adatbazisok/files/adatbazisok_temakorok_2017.pdf new file mode 100644 index 000000000..5e1d6fd24 Binary files /dev/null and b/adatbazisok/files/adatbazisok_temakorok_2017.pdf differ diff --git a/adatbazisok/files/adatbazisok_temakorok_deutsch.pdf b/adatbazisok/files/adatbazisok_temakorok_deutsch.pdf new file mode 100644 index 000000000..8692f2a09 Binary files /dev/null and b/adatbazisok/files/adatbazisok_temakorok_deutsch.pdf differ diff --git a/adatbazisok/files/adatbazisok_temakorok_deutsch_2017.pdf b/adatbazisok/files/adatbazisok_temakorok_deutsch_2017.pdf new file mode 100644 index 000000000..09cb3ed84 Binary files /dev/null and b/adatbazisok/files/adatbazisok_temakorok_deutsch_2017.pdf differ diff --git a/adatbazisok/files/er_feladatok.pdf b/adatbazisok/files/er_feladatok.pdf new file mode 100644 index 000000000..acbf14017 Binary files /dev/null and b/adatbazisok/files/er_feladatok.pdf differ diff --git a/adatbazisok/files/fiz_kiadando_feladatok_2019.pdf b/adatbazisok/files/fiz_kiadando_feladatok_2019.pdf new file mode 100644 index 000000000..c2e08e4bf Binary files /dev/null and b/adatbazisok/files/fiz_kiadando_feladatok_2019.pdf differ diff --git a/adatbazisok/files/fizikai-handout.pdf b/adatbazisok/files/fizikai-handout.pdf new file mode 100644 index 000000000..c2e08e4bf Binary files /dev/null and b/adatbazisok/files/fizikai-handout.pdf differ diff --git a/adatbazisok/files/gyakorlo.zip b/adatbazisok/files/gyakorlo.zip new file mode 100644 index 000000000..da590e379 Binary files /dev/null and b/adatbazisok/files/gyakorlo.zip differ diff --git a/adatbazisok/files/mintazh.pdf b/adatbazisok/files/mintazh.pdf new file mode 100644 index 000000000..16a0082ee Binary files /dev/null and b/adatbazisok/files/mintazh.pdf differ diff --git a/adatbazisok/files/mintazhmegoldas.pdf b/adatbazisok/files/mintazhmegoldas.pdf new file mode 100644 index 000000000..c4acb8c65 Binary files /dev/null and b/adatbazisok/files/mintazhmegoldas.pdf differ diff --git a/adatbazisok/files/normalizalas-gyakorlat.pdf b/adatbazisok/files/normalizalas-gyakorlat.pdf new file mode 100644 index 000000000..11399c41d Binary files /dev/null and b/adatbazisok/files/normalizalas-gyakorlat.pdf differ diff --git a/adatbazisok/files/normalizalas.pdf b/adatbazisok/files/normalizalas.pdf new file mode 100644 index 000000000..e29631717 Binary files /dev/null and b/adatbazisok/files/normalizalas.pdf differ diff --git a/adatbazisok/files/optimalizalas-handout.pdf b/adatbazisok/files/optimalizalas-handout.pdf new file mode 100644 index 000000000..29c2868dd Binary files /dev/null and b/adatbazisok/files/optimalizalas-handout.pdf differ diff --git a/adatbazisok/files/optimalizalas2019.pdf b/adatbazisok/files/optimalizalas2019.pdf new file mode 100644 index 000000000..d40749d39 Binary files /dev/null and b/adatbazisok/files/optimalizalas2019.pdf differ diff --git a/adatbazisok/files/optimalizalas2023.pdf b/adatbazisok/files/optimalizalas2023.pdf new file mode 100644 index 000000000..fc4bcc52e Binary files /dev/null and b/adatbazisok/files/optimalizalas2023.pdf differ diff --git a/adatbazisok/files/optimalizalasgyak_2019.pdf b/adatbazisok/files/optimalizalasgyak_2019.pdf new file mode 100644 index 000000000..9223ea523 Binary files /dev/null and b/adatbazisok/files/optimalizalasgyak_2019.pdf differ diff --git a/adatbazisok/files/rel_kiadando_feladatok_2019.pdf b/adatbazisok/files/rel_kiadando_feladatok_2019.pdf new file mode 100644 index 000000000..8f4a7951f Binary files /dev/null and b/adatbazisok/files/rel_kiadando_feladatok_2019.pdf differ diff --git a/adatbazisok/files/relacios-lekerdezesek-handout.pdf b/adatbazisok/files/relacios-lekerdezesek-handout.pdf new file mode 100644 index 000000000..8f4a7951f Binary files /dev/null and b/adatbazisok/files/relacios-lekerdezesek-handout.pdf differ diff --git a/adatbazisok/files/relacios-tervezes-algoritmusok.pdf b/adatbazisok/files/relacios-tervezes-algoritmusok.pdf new file mode 100644 index 000000000..f2d50627f Binary files /dev/null and b/adatbazisok/files/relacios-tervezes-algoritmusok.pdf differ diff --git a/adatbazisok/files/relacios_lekerdezesek_gyakorlat_kalkulus.pdf b/adatbazisok/files/relacios_lekerdezesek_gyakorlat_kalkulus.pdf new file mode 100644 index 000000000..30e8586d8 Binary files /dev/null and b/adatbazisok/files/relacios_lekerdezesek_gyakorlat_kalkulus.pdf differ diff --git a/adatbazisok/files/tranzakciokezeles2019.pdf b/adatbazisok/files/tranzakciokezeles2019.pdf new file mode 100644 index 000000000..e6b0c9f0e Binary files /dev/null and b/adatbazisok/files/tranzakciokezeles2019.pdf differ diff --git a/adatbazisok/gyakorlat/_er_gyakorlat.md b/adatbazisok/gyakorlat/_er_gyakorlat.md new file mode 100644 index 000000000..5d327262e --- /dev/null +++ b/adatbazisok/gyakorlat/_er_gyakorlat.md @@ -0,0 +1,44 @@ +A gyakorlat témája: ER-modellezés. + +A gyakorlat anyaga a jegyzet 4. fejezete (Fogalmi (logikai) +adatbázis). + +A gyakorlatra történő felkészülés +során az előadásokon elhangzott, de a jegyzetben is megtalálható, a +fejezetek végén külön is összegyűjtött új fogalmakat mindenképpen +érdemes átnézni. Ezeket nem betűről betűre kell "betanulni," hanem +(pontosan) értelmezni kell tudni őket. + +Gyakorlati feladatsor [ITT](../files/er_feladatok.pdf) + +A ZH-szintű gondolkodtató példa otthonra +[(PDF-ben)](files/adatbazisok_1_gyakorlat_gondolkodtato.pdf): + +> Adott a következő laikus leírás: egy kórház számos osztályból áll, +> mindegyiknek van egy osztályvezető főorvosa és akárhány főorvosa. Ha +> nincs osztályvezető főorvos, akkor van megbízott osztályvezető. Ők +> valamennyien a kórház – orvosdiplomával is rendelkező – alkalmazottai, +> másik kórházban nincs állásuk. Egy kórháznak ezen kívül még számos más +> dolgozója is van: orvosok, nővérek, segédszemélyzet. Az orvosok és a +> nővérek mindig egy meghatározott osztályon dolgoznak, míg a +> segédszemélyzet közvetlenül a kórházhoz is tartozhat. Minden +> alkalmazottnak van kódszáma, de az orvosoknak nyilvántartják a kamarai +> tagsági számukat is. A kórházat mindig egy olyan igazgató vezeti, aki +> a kórház orvosa is, közgazdászdiplomával is rendelkezik és más +> kórházzal nincs munkaviszonya. Egy beteg – ha bekerül a kórházba – +> számos osztályt is megjárhat, amíg meggyógyul, és eközben számos +> betegséggel kezelhetik. +> +> Készítsen a fentiekről egyed-kapcsolati (ER) diagramot! A tanult +> szintaktikával tüntesse fel pontosan a kapcsolatok funkcionalitását +> is! Azonosítsa az egyedhalmazokat célszerűen megválasztott attribútumokkal, +> aláhúzással jelölje meg a kulcsokat! + +### ER-diagramok rajzolása + +ER-diagramok készíthetők például Microsoft Visióval (az [MSDNAA +program](http://msdnaa.bme.hu/) keretében ingyenesen letölthető). Darvas +Dániel készített a tárgyban használt grafikus elemekhez +Visio [stencilt](http://db.bme.hu/~darvas/EK-stencil_v1.vss), +ami a Shapes | More Shapes | Open Stencil... paranccsal +importálható be. diff --git a/adatbazisok/gyakorlat/_fizikai_szervezes_gyakorlat.md b/adatbazisok/gyakorlat/_fizikai_szervezes_gyakorlat.md new file mode 100644 index 000000000..f36f6696b --- /dev/null +++ b/adatbazisok/gyakorlat/_fizikai_szervezes_gyakorlat.md @@ -0,0 +1,11 @@ +A gyakorlat témája: fizikai adatszervezés. + +A gyakorlat anyaga a Jegyzet 3. fejezete (Fizikai adatbázis). + +Gyakorlati feladatsor [ITT](../files/fizikai-handout.pdf) + +A gyakorlatra történő felkészülés során a fejezet végén található fogalmakat érdemes átnézni. + +A gyakorlat elején a felkészültséget kisZH formájában ellenőrizzük. + +Erre a gyakorlatra érdemes számológépet hozni! diff --git a/adatbazisok/gyakorlat/_lekerdezesek_gyakorlat.md b/adatbazisok/gyakorlat/_lekerdezesek_gyakorlat.md new file mode 100644 index 000000000..5af2b78d6 --- /dev/null +++ b/adatbazisok/gyakorlat/_lekerdezesek_gyakorlat.md @@ -0,0 +1,9 @@ +A gyakorlat témája: relációs lekérdezések. + +Gyakorlati feladatsor [ITT](../files/relacios-lekerdezesek-handout.pdf) + +A gyakorlat anyaga a Jegyzet 5. fejezete (Relációs adatmodell). +A jegyzet SQL nyelvvel foglalkozó része nem képezi a gyakorlat anyagát. + +A gyakorlatra történő felkészülés során a fejezet végén található új +fogalmakat mindenképpen érdemes megismerni és megérteni. diff --git a/adatbazisok/gyakorlat/_lekerdezesek_optimalizalasa_gyakorlat.md b/adatbazisok/gyakorlat/_lekerdezesek_optimalizalasa_gyakorlat.md new file mode 100644 index 000000000..22986d5d0 --- /dev/null +++ b/adatbazisok/gyakorlat/_lekerdezesek_optimalizalasa_gyakorlat.md @@ -0,0 +1,10 @@ +A gyakorlat témája: lekérdezések optimalizálása. + +A gyakorlat anyaga a Jegyzet 6. fejezete (Relációs lekérdezések +optimalizálása). Az előadás diasora [letölthető](../files/optimalizalas2019.pdf). + +Gyakorlati feladatsor [ITT](../files/optimalizalas-handout.pdf) + +A gyakorlatra történő felkészülés során a fejezet végén található fogalmakat is érdemes átnézni. + +A gyakorlat elején a felkészültséget kisZH formájában ellenőrizzük. diff --git a/adatbazisok/gyakorlat/_normalformak_gyakorlat.md b/adatbazisok/gyakorlat/_normalformak_gyakorlat.md new file mode 100644 index 000000000..761411a18 --- /dev/null +++ b/adatbazisok/gyakorlat/_normalformak_gyakorlat.md @@ -0,0 +1,10 @@ +A gyakorlat témája: normalizálás alapjai. + +A gyakorlat anyaga a Jegyzet 9. fejezete (Relációs sématervezés +normalizálással), a 9.2.3.6-9.2.3.7 és 9.2.5-9.2.8 szakaszok kivételével. + +Gyakorlati feladatsor [ITT](../files/normalizalas.pdf) + +A gyakorlatra történő felkészülés során a fejezet végén található új fogalmakat is érdemes megismerni és meg is érteni. + +A gyakorlat elején a felkészültséget kZH formájában ellenőrizzük. diff --git a/adatbazisok/gyakorlat/_tranzakciokezeles_gyakorlat.md b/adatbazisok/gyakorlat/_tranzakciokezeles_gyakorlat.md new file mode 100644 index 000000000..dc54ee32b --- /dev/null +++ b/adatbazisok/gyakorlat/_tranzakciokezeles_gyakorlat.md @@ -0,0 +1,9 @@ +A gyakorlat témája: tranzakciókezelés, anyaga a Jegyzet 10. fejezete +(Tranzakciók adatbázis-kezelő rendszerekben). + +Gyakorlati feladatsor [ITT](../files/tranzakciokezeles2019.pdf) + +A gyakorlatra történő felkészülés során a fejezet végén található +fogalmakat is érdemes átnézni. + +A gyakorlat elején a felkészültséget kisZH formájában ellenőrizzük. diff --git a/adatbazisok/gyakorlat/files/adatbazisok_1_gyakorlat_gondolkodtato.pdf b/adatbazisok/gyakorlat/files/adatbazisok_1_gyakorlat_gondolkodtato.pdf new file mode 100644 index 000000000..d62005823 Binary files /dev/null and b/adatbazisok/gyakorlat/files/adatbazisok_1_gyakorlat_gondolkodtato.pdf differ diff --git a/adatbazisok/gyakorlat/files/normalizalas-gyakorlat-kiegeszites-2012.pdf b/adatbazisok/gyakorlat/files/normalizalas-gyakorlat-kiegeszites-2012.pdf new file mode 100644 index 000000000..d0b0b6715 Binary files /dev/null and b/adatbazisok/gyakorlat/files/normalizalas-gyakorlat-kiegeszites-2012.pdf differ diff --git a/adatbazisok/gyakorlat/index.md b/adatbazisok/gyakorlat/index.md new file mode 100644 index 000000000..163f09ca4 --- /dev/null +++ b/adatbazisok/gyakorlat/index.md @@ -0,0 +1,36 @@ +--- +layout: page +title: Adatbázisok gyakorlatok +--- + +[Gyakorlatvezetők](https://db.bme.hu/~gajdos/Gyakvezetok.xlsx) + +A gyakorlati feladatsorok elérhetők a [segédanyagok](../segedanyagok) között. + +## 1. gyakorlat + +{% include_relative _er_gyakorlat.md %} + +## 2. gyakorlat + +{% include_relative _lekerdezesek_gyakorlat.md %} + +## 3. gyakorlat + +{% include_relative _fizikai_szervezes_gyakorlat.md %} + +## 4. gyakorlat + +{% include_relative _lekerdezesek_optimalizalasa_gyakorlat.md %} + +## 5. gyakorlat + +{% include_relative _normalformak_gyakorlat.md %} + +## 6. gyakorlat + +{% include_relative _tranzakciokezeles_gyakorlat.md %} + + + +{% include targykodok.md %} diff --git a/adatbazisok/index.md b/adatbazisok/index.md new file mode 100644 index 000000000..6afdf06c4 --- /dev/null +++ b/adatbazisok/index.md @@ -0,0 +1,39 @@ +--- +layout: page +title: Adatbázisok (VITMAB04) +--- + + +A tárgy kódja 2017. őszétől kezdve [VITMAB04], amely a korábban [VITMAB00] és [VITMA311] kódon futó tárgyak utódja. + +[Általános tudnivalók a tárgyról +és oktatásáról](https://wiki.sch.bme.hu/Adatb%C3%A1zisok#Tippek "Olvasd végig ezt is") + +Témakörök jegyzéke: + + - VITMAB04: [magyar kurzus](files/adatbazisok_temakorok_2017.pdf), [német kurzus](files/adatbazisok_temakorok_deutsch_2017.pdf) + A vizsga anyaga alapvetően az Adatbázisok c. jegyzetben található meg (természetesen kiegészítve azzal, ami az előadásokon elhangzott). A jegyzetből 2017. óta nem tartozik a tárgy anyagához a hálós és az objektum-orientált adatbázis-kezelés (7. és 8. fejezet), a normalizálás alapú relációs sématervezés (9.2.3.7-ből a függéshalmazok ekvivalenciája, 9.2.5-9.2.8) és az elosztott adatbázis-kezelés (11. fejezet) (valamint a függelékek) sem. + - VITMAB00 és VITMA311: [magyar kurzus](files/adatbazisok_temakorok_2013.pdf), [német kurzus](files/adatbazisok_temakorok_deutsch.pdf) + A vizsga anyaga alapvetően az Adatbázisok c. jegyzetben található meg, természetesen kiegészítve azzal, ami az előadásokon elhangzott. A jegyzetből gyakorlatilag mindent kell tudni, kivéve a SQL nyelvet (5.4), a hálós lekérdezéseket (7.5), a többértékű függőségeket (9.2.8) és a függelékeket. + + +Felkészülési segédanyagok, javaslat: + + - Jegyzet: Gajdos S.: Adatbázisok 2023. Az előző évek kiadásai szintén használhatók, viszont 2015. után a legkevesebb sajtóhibát az egyre későbbi kiadások tartalmaznak. Letölthető a jegyzet [innen](https://db.bme.hu/~gajdos/Adatbazisok2019.pdf). + - Relációs lekérdezések optimalizálása előadás diák letölthető: [2023-as előadás](files/optimalizalas2023.pdf), [korábbi évek előadása](files/optimalizalas2019.pdf) + - Ajánlott: Társadalmi dilemma (The Social Dilemma), Netflix 2020. dokumentumfilm, megnézhető pl. [itt](https://videa.hu/videok/film-animacio/tarsadalmi-dilemma-the-social-2020-94-perc-filmdrama-gwsTG8mnV5dgwgd5). + - A tantárgy adatlapban jelzett tankönyveken túlmenően kifejezetten javasolt a jegyzet feladatgyűjteménye releváns részének önálló feldolgozása, továbbá – kellő körültekintéssel – használhatóak a [Wiki Adatbázisok oldalai](https://wiki.sch.bme.hu/Adatb%C3%A1zisok) és az ott olvasható [tippek](https://wiki.sch.bme.hu/Adatb%C3%A1zisok#Tippek) is. + - Rossz módszer: típusfeladatok megoldásának betanulása. Ez garantáltan nem lesz eredményes, ha nem párosul az elmélet elmélyült megértésével és alkalmazásának képességével. Mivel a vizsgán az alkotóképes tudást kívánjuk lemérni, ezért teljesen felesleges egy áttanult éjszaka után vizsgával próbálkozni. A memóriából előhívott emléktöredékek a sikeres vizsgához tapasztalat szerint nem elegendőek. + - [Gyakran ismételt kérdések (GYIK)](files/AB_GYIK_v1.1.pdf) a tanulásról + - [Adatbázisok gyakorlóalkalmazás](files/gyakorlo.zip) + + +## Félév-specifikus információk + +{% include_relative _felevek/2024-osz.md %} + +{% include_relative vizsgakurzus.md %} + + + +{% include targykodok.md %} diff --git a/adatbazisok/jegyzet-sajtohibak.md b/adatbazisok/jegyzet-sajtohibak.md new file mode 100644 index 000000000..d44e5a104 --- /dev/null +++ b/adatbazisok/jegyzet-sajtohibak.md @@ -0,0 +1,138 @@ +--- +layout: page +title: Jegyzet sajtóhibák +--- + + + + + +Az alábbi oldalon összegyűjtöttük a jegyzetben felfedezett értelemzavaró +sajtóhibákat. + +2019-es kiadás +-------------- + +A talált sajtóhibákat [ezen az +űrlapon](https://docs.google.com/forms/d/1cib91yX4098-jixChR7UdGAIJwd0S80SKY_oGU3a7pU/viewform) +keresztül tudjátok beküldeni. +Az eddig bejelentett sajtóhibákat [itt tudjátok +megnézni.](https://docs.google.com/spreadsheets/d/18E_7mRM3YkJW7PkD3b2ZzB7NWZXZNXA3puu8Vh4eIH4/htmlview) + +2018-as kiadás +-------------- + +A talált sajtóhibákat [ezen az +űrlapon](https://docs.google.com/forms/d/1cib91yX4098-jixChR7UdGAIJwd0S80SKY_oGU3a7pU/viewform) +keresztül tudjátok beküldeni. +Az eddig bejelentett sajtóhibákat [itt tudjátok +megnézni.](https://docs.google.com/spreadsheets/d/18E_7mRM3YkJW7PkD3b2ZzB7NWZXZNXA3puu8Vh4eIH4/htmlview) + +2017-es kiadás +-------------- + +A talált sajtóhibákat [ezen az +űrlapon](https://docs.google.com/forms/d/1cib91yX4098-jixChR7UdGAIJwd0S80SKY_oGU3a7pU/viewform) +keresztül tudjátok beküldeni. +Az eddig bejelentett sajtóhibákat [itt tudjátok +megnézni.](https://docs.google.com/spreadsheets/d/18E_7mRM3YkJW7PkD3b2ZzB7NWZXZNXA3puu8Vh4eIH4/htmlview) + +2016-os kiadás +-------------- + +A talált sajtóhibákat [ezen az +űrlapon](https://docs.google.com/forms/d/1cib91yX4098-jixChR7UdGAIJwd0S80SKY_oGU3a7pU/viewform) +keresztül tudjátok beküldeni. +Az eddig bejelentett sajtóhibákat [itt tudjátok +megnézni.](https://docs.google.com/spreadsheets/d/18E_7mRM3YkJW7PkD3b2ZzB7NWZXZNXA3puu8Vh4eIH4/htmlview) + +2015-ös kiadás +-------------- + +A talált sajtóhibákat [ezen az +űrlapon](https://docs.google.com/forms/d/1cib91yX4098-jixChR7UdGAIJwd0S80SKY_oGU3a7pU/viewform) +keresztül tudjátok beküldeni. +Az eddig bejelentett sajtóhibákat [itt tudjátok +megnézni.](https://docs.google.com/spreadsheets/d/18E_7mRM3YkJW7PkD3b2ZzB7NWZXZNXA3puu8Vh4eIH4/htmlview) + +2014-es kiadás +-------------- + +- A 32. feladat megoldásában: a "többszintex ritkaindex-struktúra nem + fa" helyett "többszintex ritkaindex-struktúra nem gyökeres fa" + +2013-as kiadás +-------------- + +- 188\. oldal: a 19. feladat megoldásában a VEZET kapcsolattípus több-egy + kardinalitású, egy NYUSZI több KIRENDELTSÉGet is vezethet. +- 190\. oldal: a 27. feladat megoldásában az "Ujsag"-ban hiányzik egy + "kiado: String" sor. +- 191\. oldalon az ábra alatti rész nem látható, a szöveg az alábbi: "A + sűrű indexnek \$10^9\$ bejegyzése van, ehhez \$\\left\\lceil + \\frac{10^9}{285} \\right\\rceil = 3508772\$ blokkra van szükség. + B\*-fa esetén egy indexblokkba elhelyezhetünk plusz egy mutatót akkor + is, ha a kulcsának már nem marad hely. Itt ezt ki tudjuk használni, mert + \$285 \\cdot (10+4) + 4 = 3994\$, ezért a fa elágazási tényezője 286." +- 192–193. oldal: a 36. feladat 3. részének megoldásában \$ \\le + \\frac{12}{2} = 6,25 \$ ms-re kellene beállítani a + blokkelérési időt. Ehhez az kell, hogy átlagosan egy blokkművelet + alatt elérhető legyen egy rekord, ami úgy érhető el, hogy + legrosszabb esetben is csak egy blokkműveletre van szükség + (\$\\frac{1+1}{2} = 1\$). A vödrök száma ez alapján számítandó ki. +- 198\. oldal: felülről a 3. bekezdésben "Függőségőrzőség + bizonyítása: triviális. \$\\mu\$ akkor veszteségmentes..." helyett + "Függőségőrzőség bizonyítása: triviális. \$\\mu\$ akkor függőségőrző..." + +2012-es kiadás +-------------- + +- 24\. oldal: B\*-fa esetén a blocking factor helyesen: \$\$f\_i = + \\left\\lfloor \\frac{b+k}{k+p} \\right\\rfloor\$\$ +- 25\. oldal: alul: "ha az \$r\$ állományhoz épített ritka indexről + beszélünk" helyett "ha az \$r\$ állományhoz épített sűrű indexről + beszélünk" +- 45\. oldal: Az igazságértékek meghatározása, "...pontosan akkor igaz, ha + az értékekre fennáll a \$\\Theta\$ aritmetikai reláció (\$s^{(n)} \\in + A^n\$..." +- 46\. oldal: A bizonyítás 4. és 5. pontjában az \$x\_1 = n\$ megkötés + helyesen \$n\_1=n\$, mivel egyoperandusú műveletekről + (projekció, szelekció) szól az eset. (\$x\_1\$ továbbra is a + \$\\Psi\_1\$ sorkalkulus kifejezés aritását jelöli, amint az az + indukciós feltétel után olvasható.) +- 47\. oldal: Az 5.3.1.1. szakasz előtti bekezedésben: "akkor \$E\$ + elemeinek száma \$|A|^n\$, ..." +- 69\. oldal: A4 algoritmus: "amelyhez \$\\frac{SC(A,r)}{f\_r}\$ + blokkművelet szükséges" helyesen "amelyhez \$\\left\\lceil + \\frac{SC(A,r)}{f\_r} \\right\\rceil\$ blokkművelet szükséges". +- 73\. oldal: A 6.4.1. ábrán a *depositor* reláció helyett helyesen + *customer* reláció van a lekérdezési tervben. +- 100\. oldal: Az implikáció műveletéről, az igazságtábla alatti 4. sorban + helyesen: "(esik a hó) és ¬(nulla foknál hidegebb van) kiértékelése + *igaz* értéket ad." +- 102\. oldal: kulcs definíciójának 2. pontja helyesen: "\$X\$-nek nincs + olyan \$X'\$ valódi részhalmaza, hogy \$X' \\rightarrow R\$. +- 107\. oldal: + - Felül a 2. pontban: "Mivel \$B \\in S^+(F'' \\backslash \\{S + \\rightarrow B\\} \\cup \\dots)\$ triviálisan teljesül"-ben + \$F''\$ helyett \$F'\$ kell. + - Felül a 3. pontban: "Célszerűbb ezért azt vizsgálni, hogy \$B + \\in T^+(F'' \\backslash \\{T \\rightarrow B\\})\$ helyesen: + \$C \\in T^+(F'' \\backslash \\{T \\rightarrow C\\})\$ +- 129\. oldal: A lap tetején található ütemezés \$T\_1\$ tranzakciójában az + \$A = A+1\$ és az \$\\mathrm{UNLOCK}\\ A\$ utasítások közé kell egy + \$\\mathrm{WRITE}\\ A\$ utasítás. +- 183\. oldal: KEZEL(orvos\_szem\_száma, beteg\_szem\_száma, + betegségkód, iktatósz) helyett helyesen: KEZEL(orvos\_szem\_száma, + beteg\_szem\_száma, kórház\_név, állomáskód, iktatósz). +- 189\. oldal: 21. feladat a) részének megoldása: \$u\[1\] = s\[1\]\$ + helyett \$u\[3\] = s\[3\]\$, az implikáció átírása után \$u\[1\] + \\neq s\[1\]\$ helyett \$u\[3\] \\neq s\[3\]\$. +- 196\. oldal: a lap alja felé \$BE\$ lezártja \$\\{BEDAC\\}\$, nem + pedig \$\\{BEDA\\}\$. +- 198\. oldal: felülről a 3. bekezdésben "Függőségőrzőség + bizonyítása: triviális. \$\\mu\$ akkor veszteségmentes..." helyett + "Függőségőrzőség bizonyítása: triviális. \$\\mu\$ akkor függőségőrző..." diff --git a/adatbazisok/labor/files/hallgatoi-segedlet-teljes2022.pdf b/adatbazisok/labor/files/hallgatoi-segedlet-teljes2022.pdf new file mode 100644 index 000000000..9aca047fc Binary files /dev/null and b/adatbazisok/labor/files/hallgatoi-segedlet-teljes2022.pdf differ diff --git a/adatbazisok/labor/files/laborok_ertekelese.pdf b/adatbazisok/labor/files/laborok_ertekelese.pdf new file mode 100644 index 000000000..ac9ba24e2 Binary files /dev/null and b/adatbazisok/labor/files/laborok_ertekelese.pdf differ diff --git a/adatbazisok/labor/files/optimalizalas-2014.pdf b/adatbazisok/labor/files/optimalizalas-2014.pdf new file mode 100644 index 000000000..9ab0f22f2 Binary files /dev/null and b/adatbazisok/labor/files/optimalizalas-2014.pdf differ diff --git a/adatbazisok/labor/index.md b/adatbazisok/labor/index.md new file mode 100644 index 000000000..7520245c3 --- /dev/null +++ b/adatbazisok/labor/index.md @@ -0,0 +1,49 @@ +--- +layout: page +title: Laborok +--- + +Ez az Adatbázisok [VITMAB04] és az Adatbáziskezelés [VITMA027] tárgyak labor része. + +- L1: [Oracle, mint rendszer labor](oracle1-labor/) +- L2-L3-L4: [SQL laborok](sql123-labor/) (3 alkalom) +- L5: [Relációs lekérdezések optimalizálása labor](optimalizalas-labor/) + +## 2024. ősz + +A laborfoglalkozások túlnyomórészt a HSZK-ban lesznek. Ahhoz, hogy a HSZK gépeit használni tudják, mindenkinek regisztrálnia kell a BME címtárba. Ezt az első laborja előtt mindenki tegye meg. + +[A munka értékelése](files/laborok_ertekelese.pdf) + +Pótlások: csak a félév végén, később közzétett időpontban, a Laboradminisztrációs rendszer terembeosztása szerint. +Ezek szándékolt célja nem az, hogy egy további reguláris lehetőséget kínáljon a félév során adott időpontokra kiírt laborok teljesítésére, hanem hogy pótlási lehetőséget nyújtson azok számára, akiknek valamely labor teljesítése a beosztás szerinti időpontban nem volt lehetséges vagy nem sikerült. Kérem a hallgatókat, hogy a pótlási lehetőséget visszaélésszerűen ne használják, mert a tapasztalatok szerint ezeknek a félév végi alkalmaknak rendkívül rossz a hatásfoka, valamint a pótlásra csak egyetlen időpont áll majd rendelkezésre, és nincs rá garancia, hogy nem fog ütközni más órával/pótlással. A lebonyolítás módja a reguláris laborokéval megegyező, de mindenki új feladatokat kap. + +Minden problémával először a [laborvezetődhöz](laborvezetok.md) érdemes fordulni. Ha ő nem tud segíteni, utána fordulj a tárgyfelelőshöz: (gajdos(at)db.bme.hu). + +- A laborokban elvégzett munkát tartalmazó dokumentum (tudnivalókat ld. [ITT](https://www.db.bme.hu/jegyzokonyv/tudnivalok/)) beadása a Fecske nevű [labor adminisztrációs rendszeren](https://fecske.db.bme.hu) keresztül történik. A hozzáféréseket az első labor időpontjára inicializáljuk, addig senki ne próbálkozzon a bejelentkezéssel! +- Minden hallgatói labordokumentációnak az elején tartalmaznia kell a ténylegesen megoldott feladatok sorszámát. Ezen információ hiányában a dokumentumot nem értékeljük. +- A formai követelmények teljesítésére kérjük, hogy fordítsanak különös figyelmet! Részletek alább. +- Saját számítógépre telepítéshez [Oracle kliens programok](programok-oracle) +- Oracle kézikönyvek + - [Oracle Database dokumentáció az OTN webhelyen](http://docs.oracle.com/en/database/database.html) + - [SQL Language Reference (HTML)][ORA-SQLREF] + - [SQL Language Quick Reference (HTML)][ORA-SQLQUICKREF] + +## A formai követelményekről + +Minden laborhoz a vonatkozó hallgatói útmutató és a kiadott sablonok meghatározzák a beadandó formai követelményeit. Formai hibás beadás esetén a hallgató laborja elégtelen minősítésű, ugyanis ez esetben a beadandókat ellenőrző automatizmusok nem (jól) működnek. + +Formai hibásnak tekintünk egy beadást, ha: + - az elvárt fájlformátum helyett másik formátumot ad be (pl. pdf helyett docx) + - tömörítve vagy csomagolva adja be a kért fájlt (pl. a kért pdf-et zip-be csomagolva adja be) + - szintaxis-hibás SQL szkript vagy SQL utasítás esetén, ami megakadályozza a szkript futtatását + - a hallgatói útmutatóban szereplő követelmények (pl. XML jólformáltsági kritérium) valamelyike sérül + +Formai hibás beadás javítására hallgatónként és félévente **egyszer van lehetőség**. + +Aki ezzel élni szeretne, a formai hibák javítása utáni fájlt vagy fájlokat e-mailben küldje el laborvezetőjének a hiba felfedezésekor, de legkésőbb az értékelés kézhezvételét követően azonnal. +Az így javított fájl kizárólag a formai hibát javíthatja, más módosítást nem tartalmazhat. Ennek értelmében tartalmi módosítás sem engedélyezett. + + +{% include targykodok.md %} +{% include kozos-linkek.md %} diff --git a/adatbazisok/labor/laborvezetok.md b/adatbazisok/labor/laborvezetok.md new file mode 100644 index 000000000..4def95649 --- /dev/null +++ b/adatbazisok/labor/laborvezetok.md @@ -0,0 +1,49 @@ +--- +layout: page +title: Laborvezetők 2024. +--- + + +| Csoportkód | Terem | Név | @edu.bme.hu végű email cím | +|----|----|----|----| +| sz14-1 | O | Kovács Zoltán | kovacszoltan | +| sz14-2i | A | Bíró Márton | marton.biro | +| sz14-3 | I | Lengyel Laura | lengyellaura | +| sz14-4 | I | Bán Szilárd | szilard.ban | +| sz14-5 | P | Jacsev Sámuel | jacsev.samuel | +| sz14-6 | P | Várkonyi Gábor | varkonyi.gabor | +| sz14-8 | O | Sztahó Dávid | sztaho.davidATvik.bme.hu | +| p8-1 | J | Soós Márton | soos.marton | +| p8-2i | A | Solymos Szilárd | solymos.szilard | +| p8-3 | I | Potyók László | potyoklaszlogyorgy | +| p8-4 | I | Kaposvári Gergő | kaposvari.gergojanos | +| p8-5 | D | Piller Dániel | daniel.piller | +| p8-6 | D | Gerendás András | andras.gerendasATgmail.com | +| p10-1 | L | Németh Marcell | marcellnemeth | +| p10-2i | A | Szanyi Ádám | szanyiadam | +| p10-3 | M | Benedek Zoltán | benedek.zoltan | +| p10-4 | M | Szin Imola | imola.szin | +| p10-5 | D | Körtvélyessy László | laszlo.kortvelyessy | +| p10-6 | L | Üveges Márk | uveges.mark | +| p10-8 | D | Vass Anatol Botond | vass.anatolbotond | +| p12-1 | P | Rimmel Botond | rimmelbotond | +| p12-2 | A | Virág Ádám | viragadam | +| p12-3 | A | Kasztovszky Mihály | kasztovszky.mihaly | +| p12-4on | online | Majdán András | majdan.andras | +| p12-5 | B | Imre Bálint | imreb | +| p12-6 | B | Takács Mandula | mandula.takacs | +| p12-7 | I | Hangyál Zoltán | hangyal.zoltan.balazs | +| p12-8 | I | Papp Botond | botond.papp | +| p12-9 | D | Pokó Kincső | pokokincso | +| p12-10 | D | Kiss Gábor | kiss.gaborATvik.bme.hu | + + + + + + + + + + + diff --git a/adatbazisok/labor/optimalizalas-labor/hallgatoi-utmutato.md b/adatbazisok/labor/optimalizalas-labor/hallgatoi-utmutato.md new file mode 100644 index 000000000..2d2b8347e --- /dev/null +++ b/adatbazisok/labor/optimalizalas-labor/hallgatoi-utmutato.md @@ -0,0 +1,95 @@ +--- +layout: page +title: Hallgatói útmutató a Relációs lekérdezések optimalizálása c. méréshez +--- + +A mérés célja +============= + +A mérés célja betekintést nyerni a relációs lekérdezések optimalizálásának gyakorlati aspektusaiba. +A megoldandó feladatok központjában végrehajtási tervek elemzése fog állni. + +Ebben a laborban találkozik egymással + + - számos, a relációs adatmodellhez kapcsolódó definíció, + - a fizikai adatszervezésnél megismert adatszerkezetek, + - az optimalizálás előadásokon és gyakorlaton előkerült algoritmusok, valamint + - a relációs lekérdezések írásával kapcsolatos ismeretek. + +A labor sikeres teljesítéséhez mindezeket ismerni és érteni kell. + +## Elmélet vs. gyakorlat + +Az elméleti ismeretek megszerzése során bizonyos feltételezésekkel éltünk annak érdekében, hogy a lényeg világosabban látsszon. +Egy valódi adatbáziskezelőben néhány dolog ennél komplexebb képet mutat. Ehhez kapcsolódóan néhány gondolat: + + - a lekérdezési terveken látható dolgokat mindig vessék össze az előadáson tanultakkal + - az előadáshoz képest fontos különbség az Oracle Database költségfüggvénye, mely az alábbiakat tartalmazó mennyiség: + ([dokumentáció](https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/query-optimizer-concepts.html#GUID-9D0BF31B-7215-4BD8-B45D-A8BF2B4DB7E5)) + - erőforrásfelhasználás (becsült I/O, CPU és memória-felhasználás) + - a (rész)eredmény becsült rekordszáma + - input adatok mennyisége + - input adatok eloszlása + - használt segédstruktúrák + - az Oracle Database adott lekérdezés lépéseihez a konkrét környezetben rendel egy relatív mennyiséget, amelyekből végül felépíti a teljes lekérdezés költségét. + Ily módon egy adatbázison belül hasonlíthatók össze a különböző végrehajtási tervek. + ([dokumentáció](https://docs.oracle.com/database/121/TGSQL/tgsql_optcncpt.htm#TGSQL195)) + - a végrehajtási tervek egyes lépéseinél a *Cost* oszlopban a lekérdezés becsült költsége, míg a *Cardinality* oszlopban a becsült rekordszám szerepel + +Környezet az adatbázisban +========================= + +Ezen a mérésen az adatokat előre elhelyeztük az adatbázisban. +Mindenki a feladatlapja fejlécében megtalálja annak a két sémának a nevét, ahol a feladatok megoldásához szükséges táblák és indexek találhatók. +A két sémában a táblák szerkezete megegyezik az SQL-2,3 méréseken megismert szerkezettel, de azok nagy mennyiségű, generált adatot tartalmaznak. + + - Az első, ún. *noindex sémában* csak a táblák üzleti és mesterséges kulcsaihoz tartozik index. + - A második, ún. *indexelt sémában* további indexek kerültek felvételre. + +Megjegyzés: a generált adatok szemantikája a megoldandó feladatoknak megfelel, de mélyebb összefüggéseket nem érdemes vizsgálni benne. + +Az Oracle Database 12cR1 verzió újdonságaként jelent meg az adaptív végrehajtási tervek készítése, amelyet a későbbi kiadások tovább finomítottak. +Ennek lényege, hogy a statisztikák alapján kiválasztott illesztési algoritmust bizonyos feltételek mellett futásidőben megváltoztathatja a DBMS, +ha a végrehajtás során, a valódi adatok egy részét feldolgozva úgy találja: jobbat is választhat. +**Figyelem!** Ez a lehetőség túlmutat a labor keretein, ezért az adatbázishoz csatlakozás után minden alkalommal kapcsolja ki a következő SQL utasítással: +```sql +alter session set optimizer_adaptive_plans=false; +``` + +Beadandó anyagok +================ + +Beadandó a labordokumentáció egyetlen PDF fájl formájában, melynek elnevezése: +`NEPTUN-5-CSOPKOD.pdf` + +Kérjük figyelmesen elolvasni a [dokumentálási tudnivalók]at! Külön kiemeljük, hogy: + + - a beadott forráskódrészletek szöveges tartalomként, igényes tördelés és formázás mellett jelenjenek meg. Opcionálisan szintaxiskiemelés is alkalmazható. + - a képernyőképek megfelelően legyenek körbevágva annak érdekében, hogy csak a lényeg látszódjon rajta, de az jól látható legyen. + +Értékelési szempontok +--------------------- + + - Az egyes részfeladatokhoz tartozó kódrészletek, képernyőképek és magyarázatok legyenek jól azonosíthatóak. + - A szintaktikai hibát tartalmazó forráskód és a vonatkozó részfeladat nem értékelhető. + - A lekérdezéseiben használt táblaneveket lássa el sémakvalifikációval! + - A végrehajtási lépéseknél a használt algoritmus dokumentálásához hozzátartozik az esetleg felhasznált segédstruktúra is. + - A formai követelményeket sértő labordokumentáció nem értékelhető. + +Tippek az SQL Developer használatához +===================================== + + - Egy SQL Worksheet ablakban az SQL lekérdezéseket válasszuk el pontosvesszővel egymástól. + Ha így teszünk, akkor nem kell kijelölni a végrehajtandó lekérdezést. Elég a lekérdezés törzsébe pozicionálni a kurzort, majd: + - `F10` megmutatja a végrehajtási tervet + - `F9` vagy `Ctrl+Enter` végrehajtja a lekérdezést + - A végrehajtási terveket mutató ablakrész az első ikonnal odaszögelhető, így a következő terv új fülön jelenik meg. + - Ha egynél több végrehajtási terv látszik, akkor a fülre jobb klikk, és a megjelenő menüből hívható a *Compare with...* funkció tervek összehasonlítására. + - A feladatok megoldása során használt sémákat szűrő segítségével könnyen kiemelheti a több száz tételes listából. + Ehhez kattintson a *Connections* fülön megjelenő, az adatbázist objektumait reprezentáló fa-gráfban az *Other users* csomópontra, majd a fül tetején levő *Filter* (tölcsér) ikonra, és állítsa be a következőket: + - Criteria: Match any + - *Schema = ``* + - a zöld plusszal egy újabb feltételsor hozzáadása, abban: + - *Schema = ``* + +[dokumentálási tudnivalók]: https://www.db.bme.hu/jegyzokonyv/tudnivalok/ diff --git a/adatbazisok/labor/optimalizalas-labor/index.md b/adatbazisok/labor/optimalizalas-labor/index.md new file mode 100644 index 000000000..821437236 --- /dev/null +++ b/adatbazisok/labor/optimalizalas-labor/index.md @@ -0,0 +1,8 @@ +--- +layout: page +title: Relációs lekérdezések optimalizálása labor +--- + +A relációs lekérdezések optimalizálásáról szóló laborban találkozik egymással számos, a relációs adatmodellhez kapcsolódó definíció, a fizikai adatszervezésnél megismert adatszerkezetek, az optimalizálás előadásokon és gyakorlaton előkerült algoritmusok, valamint a relációs lekérdezések írásával kapcsolatos ismeretek. A labor sikeres teljesítéséhez mindezeket ismerni és érteni kell. Ennek megfelelően a felkészülés anyagát a jegyzet 3., 5. és 6. fejezetei adják. Használható továbbá az optimalizálás előadáshoz [tartozó diasor is.](../files/optimalizalas-2014.pdf) + +A méréshez készített [hallgatói útmutató](hallgatoi-utmutato) tanulmányozása és az abban foglaltak betartása szükséges feltétele a mérés teljesítésének! diff --git a/adatbazisok/labor/oracle1-labor/index.md b/adatbazisok/labor/oracle1-labor/index.md new file mode 100644 index 000000000..f39193f44 --- /dev/null +++ b/adatbazisok/labor/oracle1-labor/index.md @@ -0,0 +1,51 @@ +--- +layout: page +title: Oracle, mint rendszer labor +--- + +Ismerkedés egy relációs adatbáziskezelő-rendszerrel + +Az 1. labor anyaga [ebben található](../files/hallgatoi-segedlet-teljes2022.pdf), ld. I. Labor: az Oracle adatbázis-kezelő + +Beadandó a laborfeladatok elvégzéséről készített dokumentáció egyetlen PDF fájl formájában, melynek elkészítése a [dokumentálási tudnivalók](/jegyzokonyv/tudnivalok) alapján, az ott található sablonnal történjen! + +A beadandó fájl elnevezése az alábbi: + +``` +NEPTUN-1-CSOPKOD.pdf +``` + +A `CSOPKOD` szerkezete: + +- a mérés napjának egykarakteres kódja +- a kezdés órája egy (pl. 8) vagy két számjegyen (pl. 10 vagy 17) +- a csoport egyszámjegyű azonosítója időponton belül. +- az iMSc csoportot jelölő *i* karakter +- pl. S83 (szerda 8 órai 3-as csoport), C172 (csütörtök 17 órai 2-es csoport), H144i (hétfő 14 órai 4i jelű csoport, ahol *i=iMSc*) +- A csoportkód a közzétett csoportbeosztásban megtalálható. Az ott megtalálható csoportazonosítóból elhagyandó a kötőjel, de ez a fájlnevek többi részét nem érinti. + +## A mérési feladatokhoz kapcsolódóan futtatandó SQL kód + +Az alábbiakban azt az SQL kódrészletet tesszük közzé, amit az 5. feladat megoldása után futtatni kell majd. A közzététel célja a hibamentes kódbeírás, de felhívjuk a figyelmet a kód által demonstrált dolgok észrevételezésére: az adatszótár. + +```sql +------------------------------------------------- +-- BME VITMAB04 Adatbázisok. 1. mérés, 2019. +------------------------------------------------- +-- 5. feladathoz futtatandó SQL kód +------------------------------------------------- +column grantor format a8; +column grantee format a8; +column table_name format a20; +column privilege format a20; +select grantor + , grantee + , table_name + , privilege + , initcap(grantable) grant_opt + from all_tab_privs + where grantor = user + or grantee = user + order by grantor, grantee, table_name, privilege +; +``` diff --git a/adatbazisok/labor/programok-oracle.md b/adatbazisok/labor/programok-oracle.md new file mode 100644 index 000000000..4da3bc71b --- /dev/null +++ b/adatbazisok/labor/programok-oracle.md @@ -0,0 +1,91 @@ +--- +layout: page +title: Oracle kliensprogramok +--- + +Oracle kliensprogramok + +- A labor során preferált kliens: [Oracle SQL Developer 20.4.1 + Win64-hez beépített JDK 8 + Java környezettel](https://db.bme.hu/r/sqldeveloper/sqldeveloper-20.4.1.407.0006-x64.zip), + és - várhatóan a 2. labortól kezdődően - [SQLcl 21.1.1, Java környezet + nélkül](https://db.bme.hu/r/sqldeveloper/sqlcl-21.1.1.113.1704.zip), + használatához elég a JRE. + - SQL Developer futtatása: ha a teljes kicsomagolás után létrejövő + sqldeveloper\\sqldeveloper.exe-vel nem indul, akkor futtassuk a + sqldeveloper\\sqldeveloper\\bin\\sqldeveloper.bat fájlt. + - Amennyiben "The program can’t start because MSVCR71.dll is + missing from your computer. Try reinstalling the program to fix + this" hibaüzenettel nem indul az SQL Developer, az + sqldeveloper\\jdk\\jre\\bin\\ könyvtárból másoljuk a MSVCR71.dll + fájlt a 32 bites windows esetén a system32 mappába (Win 7/8: a + rendszermeghajtó gyökerében, WinXP: a windows könyvtárban + található), a 64 bites Windows esetén pedig a rendszermeghajtó + gyökerében levő SysWOW64 mappába. + - További platformokra letölthető az OTN [SQL Developer + oldaláról](http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html) indulva. + Figyelem! Az Oracle oldalán 2021. augusztus 11. óta az SQL Developer + 21.2.1 stabil változata érhető el, a labor során azonban a 20.4.1 + verziót használjuk. A verziók közti különbségekből adódó + jelentős probléma eddig nem ismert, de mindenkit a 20.4.1 verzió + használatára kérünk. A verziókülönbségekből adódó esetleges + problémákban nem feltétlenül tudunk segíteni. + - SQLcl használata: útmutató az azt használó mérés előtt + jelenik meg. +- [Oracle SQL Developer 20.4.1 kliens Java + környezet nélkül.](https://db.bme.hu/r/sqldeveloper/sqldeveloper-20.4.1.407.0006-no-jre.zip) + Ezt a Win64-től különböző platformokon tudod használni, ha mögé + teszel megfelelő Java 8 JDK környezetet. + +A kliensprogramok használata +---------------------------- + +SQL Developer, Basic típusú kapcsolat paraméterek + +- Hostname: rapid.eik.bme.hu +- Port: 1521 +- SID: szglab + + +SQLcl használata + +- a program indítása: `sqlcl /nolog` +- kapcsolódás az adatbázis szerverhez: `CONNECT felhasznalonev@//rapid.eik.bme.hu:1521/szglab` +- szkript futtatása fájlból: `START initszkript-helye/neve.sql` +- kimenet fájlba mentése: + - a mentés megkezdése: `SPOOL fajlnev.txt` + - a mentés befejezése: `SPOOL OFF` + + +Amire a telepítésnél érdemes figyelni +------------------------------------- + +SQL Developer + +- A .zip fájlt alkönyvtárakkal együtt kell kicsomagolni, + és (Windows-on) az sqldeveloper könyvtárban levő sqldeveloper.exe + programot kell indítani +- 20.4.1-es: 8-as Java SE JDK (minimum 1.8 update 171) környezet szükséges + a használatához. + +Instant kliens 11gR2 telepítése és használata SQL Developerből + +- Erre alapesetben nincs szükség. Akkor kell letölteni, ha az SQL + Developerből olyan funkciót használnál, amit önmagában nem támogat. + **A méréseken ezt igénylő feladat nem lesz.** +- Csomagold ki a .zip fájlt egy mappába (pl. instantclient). +- Tedd elérhetővé a dinamikus linker számára az instantclient + mappát (pl. írd be Windowson a `PATH` környezeti változóba, UNIX/Linux + rendszereken az `LD_LIBRARY_PATH` környezeti változóba) +- Ezután indítsd az SQL Developert +- A Tools/Preferences menüben a Database/Advanced alatt jelöld be, + hogy "Use Oracle Client", majd a következő sorban Configure, és meg + kell adni a kliens típusát illetve a könyvtárat, ahol található. OK, + majd az SQL Developer újraindítása következik (erre figyelmeztet is + a rendszer). +- A lejárt és le nem járt jelszavak megváltoztatását egyaránt (jobb + klikk a definiált kapcsolatra, majd Reset Password) egyből támogatni + fogja az SQL Developer a kapcsolat bezárt állapota mellett. +- Ahhoz, hogy a kapcsolat során is az instant klienst használjuk, az + SQL Developerben a Tools/Preferences menüben a Database/Advanced + jelöld be a Use OCI/Thick driver pontot. diff --git a/adatbazisok/labor/sql123-labor/hallgatoi-utmutato.md b/adatbazisok/labor/sql123-labor/hallgatoi-utmutato.md new file mode 100644 index 000000000..88aee117e --- /dev/null +++ b/adatbazisok/labor/sql123-labor/hallgatoi-utmutato.md @@ -0,0 +1,184 @@ +--- +layout: page +title: Hallgatói útmutató az SQL labor méréseihez +--- + + +Áttekintés +========== + +A mérés célja a relációs adatbázisok szabványos lekérdezőnyelve, az SQL nyelv koncepciójának elsajátítása, és alapvető nyelvi szerkezeteinek illetve ahhoz kapcsolódó jó gyakorlatok megismerése. + +Ezeken a laborokon találkozik egymással a relációs adatbázisok lekérdezőnyelveinek elmélete és a gyakorlat. A segédlet SQL-re vonatkozó részéből valamint az előadáson elhangzottakból felkészülten kell érkezni a laborra, mivel ezeket az ismereteket ott már alkalmazni kell. A részletes oldal- és fejezetszámokat lásd az [SQL laborok áttekintő lapján](./). + +Az SQL laborok három laboralkalmat tartalmaz, amelyek a következők: + + - SQL sémadefiníció, a továbbiakban: **SQL-1** + - SQL lekérdezések, a továbbiakban **SQL-2** + - SQL adatmódosítás, a továbbiakban: **SQL-3** + +A legfontosabb tudnivalókat összeszedtük a laborokon használandó [Oracle kliens programokhoz](../programok-oracle). + +Az SQL-2 és SQL-3 laborokhoz a feladat típusához kapcsolódó *inicializáló szkriptet* teszünk közzé: + + - Az URL a feladatsoron olvasható, ahonnan egy *UTF-8* kódolású szövegfájlként tölthető le a szkript. + - A megnyitáshoz az SQL Developer (File/Open) illetve modern text editor használatát javasoljuk (ami kezeli a unix-os sorvége jeleket). + - Futtatás: SQL Developerben a Run Script (F5) paranccsal, SQLcl-ben a `START initszkript-helye/neve.sql` formájú paranccsal. + + +Beadandó anyagok követelményei +============================== + +A SQL laborok során beadandó egy-egy: + + - egy speciálisan formázott SQL szkript, amely a kiadott sablonnak felel meg, és + - egy pdf formátumú labordokumentáció + +A labordokumentácóban az elvégzett munkát kell az elvárható igényességgel dokumentálnia, +egyértelműen és explicite derüljön belőle ki a feladatok megoldása. Szerepeljenek benne a megoldás során meghozott tervezői döntések, a megoldás koncepciója, és az SQL-1 laboron a megtervezett ER-diagram valamint az abból származtatott relációs séma. + + +## A beadandó SQL szkriptről + +A beadandó SQL szkript váza, illetve az SQL-2, SQL-3 laborokhoz kapcsolódóan egy beadandó generátor alkalmazás elérhető az [SQL laborok áttekintő lapján](./). + +A beadott SQL szkripttel kapcsolatos tudnivalók az alábbiak. + +Tartalmi követelmények: + + - A szkript nem használhat procedurális PL/SQL elemeket. Ami az [Oracle Database SQL +referenciájában][ORA-SQLREF] szerepel, az használható, kivéve ha jelzi, hogy ez egy PL/SQL elem. + **Figyelem!** Az SQL referencia helyenként a [PL/SQL referenciára][ORA-PLSQLREF] hivatkozik, amit ott olvashattok, az már procedurális elem lehet. (Tehát pl. a create procedure utasításról szól az SQL referencia is, de a PL/SQL referenciára hivatkozással indul. Úgy fogalmaz: "Procedures are defined using PL/SQL. Therefore, this section provides some general information but refers to Oracle Database PL/SQL Language Reference for details of syntax and semantics." Ezek az elemek a SQL-2,3 laborok során nem használhatók! + - A szkript SQL utasításaiban TILOS a sémanevek használata az objektumnevek előtt. + - Eredményoszlopokat átnevezni akkor kell és csak akkor szabad, ha a feladat szövege ezt egyértelműen tartalmazza (pl. meg van adva az eredményoszlop neve, és az alapértelmezetten - átnevezés nélkül – más néven jelenne meg). + +Formai követelmények: + + - Egyértelműen jelölni kell a feladat sorszámával, hogy melyik utasítás melyik feladat megoldása. A feladatsorszámok a feladatlapon találhatók. **Figyelem!** Az SQL-1 labor feladatsorszámai pontot nem tartalmaznak, míg az SQL-2 és SQL-3 laborok feladatsorszámai pontot tartalmaznak. + - A szkriptnek a kiadott sablonnak kell megfelelnie. Ha nem felel meg a sablonnak, a beadott megoldás értéktelen. + - A feladatokat a feladatlapon szereplő sorrendben kell tartalmaznia. + - A szkript **UTF-8 kódolású** legyen! + - A szkript a futása elején NE hívja meg az inicializáló szkriptet. (SQL-1 labornál még nincs +inicializáló szkript azt csak a SQL-2 és SQL-3 laboroknál használjuk) + - Többszöri futtatás követelménye: + - SQL-1 labor: ha a megoldásszkriptet többször lefuttatjuk ebben a sorendben egymás után, ugyanazt az eredményt kell kapnunk. Ennek érdekében a szkriptet úgy szervezzük, hogy az a saját objektumok törlésével kezdődjön (`DROP TABLE`..., stb.). A saját objektumokat tehát magunknak explicite kell törölni. + - SQL-2 és SQL-3 laborokhoz: ha az inicializáló és megoldásszkriptet többször lefuttatjuk ebben a sorendben egymás után, ugyanazt az eredményt kell kapnunk. Ennek érdekében a szkriptet úgy szervezzük, hogy az a feladatok megoldása során létrehozott saját objektumok törlésével kezdődjön (`DROP TABLE` stb.). A saját objektumokat tehát magunknak explicite kell törölni. Az inicializáló szkript törli a hivatalos objektumokat. + - A végleges, összeállt szkriptnek SQLcl-ben futnia kell megfelelően, tehát ezt is ellenőrizzük! Az SQL-2 és SQL-3 laborok esetén a saját szkript előtt futtassuk az inicializáló szkriptet! Az SQL-1 labor esetén a saját szkript előtt nem kell futtatni az inicializáló szkriptet. + - Ellenőrizzük, hogy a **beadott szkriptünk** illetve **annak kimenete** jólformált XML (az alábbi megjegyzés mellett): + - **Megjegyzés:** mind a megoldás szkriptből, mind annak a kimenetéből a `` és a `` karakterláncok és azok közötti rész kivágásával nyert állománynak kell jólformált XML-nek lenni + - XML szerkezet: + - gyökérelem `` + - azon belül `` elemek + - azon belül a szkript adott feladathoz tartozó kimenete `` módon jelenjen meg! + - A **jólformáltság ellenőrzése** a következő módon történik a két fájl esetében: + - Vágjuk ki a fent említett, `` és `` határolók közötti szakaszát, beleértve a jelzett határolókat is, és helyezzük egy-egy xml kiterjesztésű állományba. + - Az XML állományt nyissunk meg egy böngészőben (Firefox, Chrome vagy IE)! + - Ha szépen megjelenik hierarchikusan fa formátumban az eredmény, akkor jólformált. + - Ha hibát kapunk és/vagy nem fa formátumban jelenik meg a fájl tartalma, akkor nem jólformált a fájl. + + +Formai követelmények, amiben a beadandó generátor segít (de ellenőrizni a hallgató felelőssége!): + + - A szkriptnek végeredményben egy XML formátumú megoldást kell kiírnia a kimenetre. Ennek érdekében a kapott szkript vázhoz a következő pontokon szükséges hozzányúlni: + - A `prompt ` sor előtt kerüljön sor a saját objektumok eldobására. + - Minden feladat megoldásának a `prompt ` és a `prompt ` sorok közé kell kerülnie a feladatlap szerinti sorrendben. + - Minden feladat megoldását a következő két sornak kell bevezetnie. Az `n` attribútum a feladat feladatlapon szereplő sorszáma, jelen példában `2.1` Ez feladatonként változtatandó; minden feladatnál a feladatlapon adott sorszámmal kell egyeznie. **Figyelem!** Az SQL-1 labor feladatsorszámai pontot nem tartalmaznak, míg az SQL-2 és SQL-3 laborok feladatsorszámai pontot tartalmaznak. + +``` +prompt +prompt +prompt +``` + + - Meg nem oldott feladatok bevezető és lezáró prompt üzenetei ne maradjanak üresen a szkriptben, azokat távolítsuk el! + - Az adatmanipulációs feladatok előtt a szkriptnek ki kell adnia a `set feedback on`, utána pedig a `set feedback off` utasítást. + + +Végül egy megjegyzés: Több helyen kérjük, hogy az oszlopnevek felsorolása nélkül oldódjék meg az adott feladat. Ez nem azt jelenti, hogy a kimeneten ne jelenjenek meg oszlopnevek, csupán azt, hogy ezek a lekérdezésben magában ne legyenek felsorolva. + + +A labor értékelése +================== + +A laborok általános tudnivalói az SQL-1,2,3 laborok esetén a következőkkel egészülnek ki: + + - Ha a szkript nem felel meg a fenti formai illetve tartalmi követelmények mindegyikének, a beadott munka értékelhetetlen. + - Az SQL laborokon a feladatokat megoldó SQL kódot a hallgató írja. Generált kód beadása esetén az adott részfeladat értékelhetetlen. + - Ügyeljünk arra, hogy a megoldásunk elkerülje a hatékonyságot befolyásoló illetve ellenjavallt szerkezeteket, illetve hibákat, mert ezek pontlevonással járhatnak. Ilyenek például: + - beágyazott `SELECT` használata `HAVING` feltétel helyett + - beágyazott `SELECT` használata illesztés helyett + - `UNION`, `UNION ALL`, `MINUS`, `INTERSECT` halmazműveletek indokolatlan használata (főleg az utóbbi kettő gyakran hatékonyabban írható le illesztéssel) + - külső illesztés helyett belső illesztés használata + - `NULL` érték vizsgálata nem az `IS NULL` operátorral + + +Néhány tipp és megjegyzés az SQL nyelv használatához +==================================================== + +Lekérdezések anatómiája: + + - A legtöbb lekérdezés `SELECT` - `FROM` - `[WHERE]` - `[GROUP BY]` - `[HAVING]` - `[ORDER BY]` +sorrendben íródik, és a `[]` jellel jelölt részek opcionálisak. A részeket sokszor *klóz*nak nevezzük. + - A hierarchikus lekérdezések az előbbitől eltérően az opcionális `WHERE` után a `CONNECT BY ... [START WITH ...]` klózzal folytatódnak. + - A hierarchikus lekérdezésben a `CONNECT BY` klózban megadott feltételt kielégítő rekordpárok a hierarchiában szülő-gyerek viszonyban vannak. A `PRIOR` kulcsszóval jelölt kifejezés a szülő rekordon értelmezett. A `PRIOR` attribútumhoz köt, azaz nem állhat operátor vagy függvény a hatáskörében, csak és kizárólag attribútumnév követheti. + - A relációs algebrai kifejezések kanonikus alakjával párhuzamba állítva, az SQL `SELECT` - `FROM` - `WHERE` klózok jó közelítéssel a projekció, Descartes-szorzat, szelekció műveleteknek felelnek meg. A legfontosabb **különbség**, hogy míg a relációs algebra műveletei halmazműveletek (azaz nincsenek ismétlődések az eredményhalmazban), addig SQL esetén a `SELECT` helyett a `SELECT DISTINCT` utasítást kell alkalmaznunk az ismétlődések szűréséhez. + - A `SELECT` után álló valamennyi nem aggregátumot a `GROUP BY` paraméterében meg kell +adni, egyébként a lekérdezés nem értelmezhető. + - A `HAVING` és `WHERE` között a különbség: a `HAVING` aggregátumra vonatkozik, azaz `SUM`, `AVG`, `COUNT` stb. függvényt tartalmazó kifejezésre, vagy - ritkábban - a `GROUP BY` klózban szereplő kifejezésekre vonatkozó feltételt határoz meg. + - A `UNION` alapesetben különböző rekordok halmazát adja, és ez az egyetlen SQL utasítás, +amelynek ez az alapértelmezése. Ha ismétlést is szeretnénk látni, akkor a `UNION ALL` +utasítást kell alkalmazni. + + - Az `AS` kulcsszó kifejezések (oszlopok) átnevezésre szolgál, és kiírása nem kötelező a `SELECT` listában. A `FROM` listában a táblák átnevezésekor pedig nem szabad használni. + - A `FROM` klózban is állhat beágyazott lekérdezés, ilyenkor zárójelbe kell tenni. + - Az attribútum- és objektum-nevek opcionálisan *idézőjelek* közé zárhatók. Ennek **használatát javasoljuk mellőzni**, kivéve, ha valaki pontosan végiggondolta ennek a következményeit! (Idézőjelek használata esetén a nevek kis- és nagybetű helyesen (case-sensitive módon) kerülnek figyelembe vételre, míg idézőjelek használata nélkül a neveket nagybetűsre konvertálja az SQL értelmező.) + - Általában az SQL utasításokban nem kell a táblákhoz megadni a sémaneveket (pl. a felhasználó nevét), a labor beadandókban pedig egyenesen TILOS! + - Egyértelmű esetekben a táblanevet vagy annak átnevezett nevét sem kell kiírni az attribútumok neve elé. + + +Illesztések: + + - A külső illesztés (outer join) hagyományos Oracle szintaxisa (a `(+)` jel használatával) ill. a szabvány szerinti szintaxis is használható. Egy lekérdezésen belül javasoljuk egyféle szintaxis használatát! + - A külső illesztés hagyományos Oracle szintaxisa esetén: + - a `(+)` jelet mindig az után a kifejezés után kell írni, ahol NULL érték megjelenhet, ha nincs illeszkedő rekord. + - a `(+)` jelet ki kell tenni a lekérdezésben szereplő valamennyi olyan attribútum után, amely a *külső* (csupa NULL-rekorddal kiegészített) táblához tartozik. Kivételt képez ez +alól a többszörös külső illesztésben a további külső illesztés megadása. Magyarázatként álljon itt egy példa, ahol az **A** táblának a rekordjaihoz külső illesztéssel illesztjük a **B** tábla rekordjait, majd ehhez a **C** rekordjait olyan kifejezéssel, amiben **B** és **C** tábla attribútumai szerepelnek. + +```sql +select a.id, b.id, c.id + from a, b, c + where + -- join + a.id = b.a_id (+) + and b.c_id = c.id (+) + -- szűrések, itt már kell a (+) b és c összes előfordulásához + and b.szin (+) in ('piros', 'zöld') +; +``` + +Kifejezések, feltételvizsgálatok: + + - Egy kifejezés értékét a `NULL` értékre, illetve attól eltérő vizsgálni a ` IS [NOT] NULL` formában kell! + **FIgyelem!** a ` = NULL`, ` <> NULL` feltételvizsgálat egyaránt hamis (pontosabban UNKNOWN értékű). Mivel a lekérdezés csak azokat a rekordokat adja vissza, amelyekre a `WHERE` ill. `HAVING` klózban megadott feltétel igaz, az ilyen formában írt feltételek legtöbbször nem a várt eredményt adják. – az UNKNOWN elemek nem kerülnek az eredményhalmazba. + - A `CHAR` és `VARCHAR2` adattípusok között nagy különbség van: az előző fix méretű, az utóbbi változó méretű sztring. Jelentősége a mintaillesztésnél szembeötlő, hiszen pl. `CHAR(5)` esetében az L betűre végződő hárombetűs szavak valójában nem L betűre, hanem két SPACE karakterre végződnek. + - Néhány hasznos függvény, amelyek részletes leírása az [Oracle SQL kézikönyv][ORA-SQLREF] *Functions* fejezetében olvasható: + - A `TO_DATE` és `TO_CHAR` függvények sztring és dátum közötti konverziót valósítanak meg. + - Az `NVL` és az `NVL2` függvény, amely paraméterezése a következő: + - `NVL(, eredmény_null_érték_esetén)` + - `NVL2(, eredmény_nem_null_érték_esetén, eredmény_null_érték_esetén)` + - Az előző kettő általánosítása a `DECODE` függvény, amellyel diszkrét függvényszerű transzformációt lehet leírni. + + +Kényszerek: + + - `PRIMARY KEY` = `UNIQUE` + `NOT NULL`, de míg a baloldaliból csak 1 lehet minden táblában, addig a jobboldaliból „tetszőlegesen” sok. + - A `UNIQUE` kényszer előírása nem zárja ki a `NULL` értéket. + + +{% include kozos-linkek.md %} diff --git a/adatbazisok/labor/sql123-labor/index.md b/adatbazisok/labor/sql123-labor/index.md new file mode 100644 index 000000000..c5d32073f --- /dev/null +++ b/adatbazisok/labor/sql123-labor/index.md @@ -0,0 +1,84 @@ +--- +layout: page +title: SQL laborok +--- + + +Az SQL laborok anyagát tartalmazó [segédlet ebben található](../files/hallgatoi-segedlet-teljes2022.pdf), ld. II. labor: Az SQL nyelv, 22-34. oldal. Ebből, valamint az előadáson a relációs lekérdező nyelvekről (rel. algbra, kalkulusok) elhangzottakból felkészülten kell érkezni a laborra, mert ezt ellenőrizzük, valamint a kapcsolódó ismereteket a laboron már alkalmazni kell. + +Az egyes SQL laborokra(1-2-3) vonatkozóan ez azt jelenti, hogy: + - SQL sémadefiníció: + - segédlet: + - 22-34. oldal 4. fejezete (Táblák létrehozása, törlése) + - II. Függelék: Adatbázis kényszerek az Oracle-ben, benne teljes SQL DDL példával + - Adatbázisok jegyzet 68-70. oldal + - Adatbázisok jegyzet 1., 2., 4., 5.1 és 9.1 fejezetek + - SQL lekérdezések: + - segédlet 22-34. oldal 6. fejezete (Lekérdezések) + - Adatbázisok jegyzet 1., 2., 4., 5.1, 5.2 és 5.3 fejezetek + - SQL adatmódosítás: + - segédlet 22-34. oldal egésze + - Adatbázisok jegyzet 1., 2., 4., 5.1, 5.2 és 5.3 fejezetek + +Jó munkát mindenkinek! + +## 2. labor: SQL sémadefiníció + + +A beadandó anyag formátumáról, követelményeiről és az SQL-hez kapcsolódó tippekhez olvasd el a [hallgatói útmutatót](hallgatoi-utmutato) és a [dokumentálási tudnivalókat](/jegyzokonyv/tudnivalok), ahol a sablon is megtalálható! + +A beadandó szkript [váza elérhető][sql-szkeleton]. + + + +## 3. labor: SQL lekérdezések + +A laboron 15+1 pont érhető el, a ponthatárok a következők: + +- 2: 6<= +- 3: 9<= +- 4: 11<= +- 5: 13<= + +Beadandó 2 fájl: +- egy pdf formátumú labordokumentáció a [dokumentálási tudnivalók](/jegyzokonyv/tudnivalok) oldalon olvasható tudnivalók és sablon szerint, és +- egy SQL szkript, amely a feladatok megoldását tartalmazza. + +A beadandó anyag formátumáról, követelményeiről és az SQL-hez kapcsolódó tippekhez olvasd el a [hallgatói útmutatót](hallgatoi-utmutato)! + +A beadandó SQL szkript [váza elérhető][sql-szkeleton]. +A [beadandó SQL szkript generátor][sql123-beadando-generator] segít, ha valaki nem kézzel rakná össze. + + +## 4. labor: SQL adatmódosítás + +Beadandó 2 fájl: +- egy pdf formátumú labordokumentáció a [dokumentálási tudnivalók](/jegyzokonyv/tudnivalok) oldalon olvasható tudnivalók és sablon szerint, és +- egy SQL szkript, amely a feladatok megoldását tartalmazza. + +A beadandó anyag formátumáról, követelményeiről és az SQL-hez kapcsolódó tippekhez továbbra is hasznos olvasmány a [hallgatói útmutatót](hallgatoi-utmutato). + +A beadandó SQL szkript [váza elérhető][sql-szkeleton]. +A [beadandó SQL szkript generátor][sql123-beadando-generator] segít, ha valaki nem kézzel rakná össze. + +[sql123-beadando-generator]: https://db.bme.hu/r/sql/sql123-beadando-generator.html +[sql-szkeleton]: https://db.bme.hu/r/sql/SZKELETON + +## Gyakorlófeladatok + +Annak érdekében, hogy az elmélet (segédlet) tudása mellett némi gyakorlati tapasztalattal is felvértezve érkezhessetek a laborba, készítettünk egy szkriptet és néhány gyakorlófeladatot, amelyekkel próbálgathatjátok a szárnyaitokat, már a labor előtt, illetve az ínyencek nyugodtan találjanak ki minél kacifántosabb lekérdeznivalókat :) + +Használati utasítás: Az [itt](https://www.db.bme.hu/databases/exercises.sql) elérhető szkriptet futtassátok developerben. Ez létrehoz két táblát és feltölti mindenféle adatokkal. Utána pedig kérdezzétek le ezeket: + +- Összes ember neve +- Emberek és hozzájuk tartozó autók +- Autótlan emberek +- Autómárkák és a márka tulajdonosainak száma +- Egyes emberek autóinak száma, autószám szerinti csökkenő sorrendben +- Egyes emberek autóinak száma (minden embert tartalmazó lista), autószám szerinti növekvő sorrendben + +Hozz létre egy táblát, ami azt tárolja, hogy melyik ember, mikor, melyik autót vezette (nemcsak a sajátját lehet)! + +Végy fel példaadatokat az utóbbi táblába. Próbálj beilleszteni nemlétező emberhez vagy autóhoz tartozó rekordot! Hibaüzenetet kapsz? Ha nem, hozd létre a táblához a constrainteket is, amelyeket eddig nem hoztál létre. + +Hajrá! diff --git a/adatbazisok/segedanyagok.md b/adatbazisok/segedanyagok.md new file mode 100644 index 000000000..444103f0e --- /dev/null +++ b/adatbazisok/segedanyagok.md @@ -0,0 +1,34 @@ +--- +layout: page +title: Adatbázisok segédanyagok +--- + +Segédanyagok az [Adatbázisok](/adatbazisok/) c. tárgyhoz. + +Minta zárthelyi (2003-2016 közötti követelményeknek megfelelő): + +- [feladatsor](files/mintazh.pdf) +- [megoldás](files/mintazhmegoldas.pdf) + +Gyakorlatok feladatsorai: + +- [1. gyakorlat, ER-modellezés, 2020.](files/er_feladatok.pdf) +- [2. gyakorlat, Relációs adatmodell, 2020.](files/relacios-lekerdezesek-handout.pdf) +- [3. gyakorlat, Fizikai szervezés, 2019.](files/fiz_kiadando_feladatok_2019.pdf) +- [4. gyakorlat, Optimalizálás, 2019.](files/optimalizalasgyak_2019.pdf) +- [5. gyakorlat, Normalizálás, 2020.](files/normalizalas.pdf) +- [6. gyakorlat, Tranzakciókezelés, 2019.](files/tranzakciokezeles2019.pdf) + +Relációs lekérdezések: + +- [kalkulus gyakorló feladatok és megoldásuk](files/relacios_lekerdezesek_gyakorlat_kalkulus.pdf) + +Relációs tervezés: + +- [relációs tervezés fogalmak és algoritmusok](files/relacios-tervezes-algoritmusok.pdf) +- [relációs tervezés példafeladatok](files/adatb-relacios-tervezes.pdf) + +Lekérdezésoptimalizálás: + +- [segédanyag](files/Lekerdezes_opt.pdf) (megtalálható a jegyzet 2012-es és későbbi kiadásaiban) +- [diasor, 2019. október](files/optimalizalas2019.pdf), ugyanez [németül](files/Optimierung.pdf) diff --git a/adatbazisok/vizsgakurzus.md b/adatbazisok/vizsgakurzus.md new file mode 100644 index 000000000..dde78e623 --- /dev/null +++ b/adatbazisok/vizsgakurzus.md @@ -0,0 +1,18 @@ +## Keresztfélév, vizsgakurzus + +A tavaszi félévben előadások-gyakorlatok-laborok nincsenek, de az aláírással rendelkezők számára a vizsgalehetőséget biztosítjuk. Mindhárom tárgykódú Adatbázisokból ([VITMAB04], [VITMAB00], [VITMA311]) indul vizsgakurzus, a vizsgakövetelményeik azonban különbözőek. A részletek a megfelelő tantárgy adatlapokon megtalálhatók. + +Azon félévekben, amikor csak vizsgakurzusok indulnak, a vizsgák sikerességi aránya a kurzust felvett hallgatók számára vetítve mindössze 20% körül szokott lenni, miközben a vizsga módszere és követelményei azonosak a normál kurzuséval. A viszonylag alacsony sikerességi hányad főbb okai: + +- a kurzust felvett hallgatók mintegy fele meg sem kísérli a vizsgát +- sokakat megtéveszt, hogy az aláírások nem évülnek el, ami azt az illúziót kelti, hogy nem, ill. nem sokat felejtenek el egy félév alatt a korábban már megtanultakból +- akik már több féléven keresztül próbálkoztak a tárgy teljesítésével, azok gyakran már munkát is vállalnak mellette. + +Néhány további jótanács a kereszt-, ill. normál félévben (korábbi aláírás birtokában) a vizsga sikeres teljesítése érdekében: + +- A felejtés meglepően gyors és nagymértékű, ha valaki az anyagot valójában még soha nem értette meg. Ezért először a megértésig célszerű eljutni. Ennek első lépése az előadások megértése, előadásról előadásra. Ezek ugyanis gyakran egymásra épülnek, így a későbbiek sokkal könnyebben érthetőek, ha a korábbiak anyagával valaki már tökéletesen tisztában van. Erre a célra az előadások videoi folyamatosan rendelkezésre állnak, tehát akkor is, ha az adott félévben nincsenek előadások. +- A mintatanterv szerinti vizsgák mellett nehéz egy plusz vizsgát úgy beütemezni, ha annak anyagát valaki a vizsgaidőszakban próbálja meg néhány nap alatt „beemelni”. Ezért célszerű a tárgy anyagával rendszeresen foglalkozni, pl. követni a gyakorlatok ütemezését, lehetőség szerint azokra be is járni (ez csak az őszi félévben lehetséges, az egyik gyakorlatvezetővel egyeztetve). +- Használja ki a kérdezés lehetőségeit! Ha valamit nem sikerült önállóan megértenie, akkor azt ne hagyja annyiban! A kérdések feltevésére lehetőség van a konzi.adatlaborATdb.bme.hu listán, amelyet a tavaszi félévben is monitorozunk, ill. az őszi félévben a gyakorlatokon élőben is kérdezhet. +- A megértésen túl a rögzítésre is időt kell szánni. A gyakorlatok követése ebből a szempontból is jótékony hatású. +- Ha valaki 2-3 félévet már kihagyott az aláírás megszerzése után úgy, hogy nem foglalkozott a tárggyal, induljon ki abból, hogy szinte nulláról kell újrakezdenie. + diff --git a/adatkezeles/INIT.sql b/adatkezeles/INIT.sql new file mode 100644 index 000000000..8e8890e5a --- /dev/null +++ b/adatkezeles/INIT.sql @@ -0,0 +1,401 @@ +-- EN: Clean up objects generated by a previous run of this script +-- HU: A szkript korabbi futasa altal generalt objektumok eltuntetese + +DROP TABLE loans CASCADE CONSTRAINTS PURGE; +DROP TABLE videos CASCADE CONSTRAINTS PURGE; +DROP TABLE members CASCADE CONSTRAINTS PURGE; + +-- EN: table for members' data +-- HU: Kolcsonzok tablaja +CREATE TABLE members ( + member_id NUMBER(10) GENERATED ALWAYS AS IDENTITY (start with 10000) CONSTRAINT member_pk PRIMARY KEY, + member_code NVARCHAR2(10) CONSTRAINT member_code_uq UNIQUE NOT NULL, + Name NVARCHAR2(30) NOT NULL, + Address NVARCHAR2(50) NOT NULL, + DateofBirth DATE NOT NULL, + DateofCreation DATE DEFAULT SYSDATE NOT NULL, + LevelofMember NVARCHAR2(6) NOT NULL, + CONSTRAINT member_create_ck CHECK( ADD_MONTHS(DateofBirth, 12*13) <= DateofCreation ), + -- EN: date of birth has day granularity + -- HU: a szuletesi datum nap pontossagu + CONSTRAINT member_dateofbirth_day_ck CHECK( trunc(DateofBirth) = DateofBirth ), + CONSTRAINT member_level_ck CHECK( LevelofMember IN ('BASIC', 'SILVER', 'GOLD') ) +); + +-- EN: table for videos' data +-- HU: Videok tablaja +CREATE TABLE videos ( + video_id NUMBER(10) GENERATED ALWAYS AS IDENTITY (start with 20000) CONSTRAINT video_pk PRIMARY KEY, + video_code NCHAR(7) CONSTRAINT video_code_uq UNIQUE NOT NULL, + Title NVARCHAR2(50) NOT NULL, + Appearance DATE NOT NULL, + Director NVARCHAR2(30), + Duration NUMBER(3) NOT NULL, + Fee NUMBER(6) DEFAULT 135 NOT NULL, + Commentline NVARCHAR2(150), + Type NCHAR(1) NOT NULL, + CONSTRAINT video_appear_ck CHECK( Appearance >= TO_DATE('1848-03-15','YYYY-MM-DD') ), + CONSTRAINT video_duration_ck CHECK( Duration BETWEEN 15 AND 270 ), + CONSTRAINT video_feemin_ck CHECK( Fee >= 50 ), + CONSTRAINT video_type_ck CHECK( Type IN ('D', 'B') ) +); + + +-- EN: Table for loans' data +-- HU: Kolcsonzesi adatok tablaja +CREATE TABLE loans ( + loan_id NUMBER(10) GENERATED ALWAYS AS IDENTITY CONSTRAINT loan_pk PRIMARY KEY, + video_id NOT NULL CONSTRAINT loan_video_fk REFERENCES videos ON DELETE CASCADE, + member_id NOT NULL CONSTRAINT loan_member_fk REFERENCES members ON DELETE CASCADE, + DateofCreation DATE NOT NULL, + DateofTurnback DATE, + Discount NUMBER(3) default 0 CONSTRAINT video_discount_ck CHECK(Discount between 0 and 100) NOT NULL, + CONSTRAINT loan_vmd_uq UNIQUE (video_id, member_id, DateofCreation), + CONSTRAINT loan_turnback_ck CHECK( DateofTurnback IS NULL OR DateofTurnback >= DateofCreation ) +); +comment on column loans.Discount is 'Percentage value of the discount for the particular loan transaction.'; + +-- EN: Insert members' data +-- HU: Tagok bevitele + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('KK01', 'Kovács Károly', '9600 Sopron, Ászok u. 11', TRUNC(ADD_MONTHS( SYSDATE-32, -35*12 )), ADD_MONTHS( SYSDATE, -16 ), 'BASIC'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('NI01', 'Nagy István', '7622 Pécs, Malom u. 10', TRUNC(ADD_MONTHS( SYSDATE-54, -64*12 )), ADD_MONTHS( SYSDATE, -65 ), 'SILVER'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('KK02', 'Kiss Károly', '8500 Pápa, Kossuth u. 126', TRUNC(ADD_MONTHS( SYSDATE, -39*12 )), ADD_MONTHS( SYSDATE, -26 ), 'BASIC'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('NI02', 'Nagy Istvan', '7622 Pécs, Malom u. 10', TRUNC(ADD_MONTHS( SYSDATE-175, -34*12 )), ADD_MONTHS( SYSDATE, -64 ), 'SILVER'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('KI01', 'Király István', '2500 Esztergom, Kis-Duna sétány 1.', TRUNC(ADD_MONTHS( SYSDATE, -33*12 )), ADD_MONTHS( SYSDATE, -20*12 ), 'BASIC'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('FB01', 'Fehér Barna', '1117 Budapest, Bogdánfy u. 3.', TRUNC(ADD_MONTHS( SYSDATE-288, -26*12 )), ADD_MONTHS( SYSDATE, -27 ), 'GOLD'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('VP01', 'Vörös Piroska', '1111 Budapest, Lágymányosi u. 11.', TRUNC(ADD_MONTHS( SYSDATE-23, -28*12 )), ADD_MONTHS( SYSDATE, -34 ), 'SILVER'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('KK03', 'Könyves Kálmán', '1092 Budapest, Üllői út 101.', TRUNC(ADD_MONTHS( SYSDATE-187, -89*12 )), ADD_MONTHS( SYSDATE, -15 ), 'GOLD'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('EI01', 'Első Imre', '1005 Budapest, Arany János u. 5.', TRUNC(ADD_MONTHS( SYSDATE-198, -76*12 )), ADD_MONTHS( SYSDATE, -11 ), 'BASIC'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('IB01', 'Illés Béla', '1102 Budapest, Hungária krt. 10.', TRUNC(ADD_MONTHS( SYSDATE, -35*12 )), ADD_MONTHS( SYSDATE, -1 ), 'BASIC'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('GB01', 'Bill Gates', 'Seattle Area', TRUNC(ADD_MONTHS( SYSDATE, -43*12 )), ADD_MONTHS( SYSDATE, -2 ), 'SILVER'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('YW01', 'Will B. Yeats', 'Burbank, CA', TRUNC(ADD_MONTHS( SYSDATE, -19*12 )), ADD_MONTHS( SYSDATE, -3 ), 'BASIC'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('OC01', 'Conan O''Bryan', 'NY 47. Str. 4.', TRUNC(ADD_MONTHS( SYSDATE, -24.6*12)), ADD_MONTHS( SYSDATE, -4 ), 'BASIC'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('GJ01', 'Johnny B. Good', 'NY Broadway 234.', TRUNC(ADD_MONTHS( SYSDATE, -39*12 )), ADD_MONTHS( SYSDATE, -5 ), 'BASIC'); + +UPDATE Members SET DateofBirth=(select dateofbirth from members where member_code='GJ01') where member_code='KK02'; + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('KB01', 'Kovács I. Béla', 'Budapest Váci út 123.', TRUNC(ADD_MONTHS( SYSDATE, -23*12 )), ADD_MONTHS( SYSDATE, -10 ), 'SILVER'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('CV01', 'Vito Corleone', 'NY 13. Str.', TRUNC(ADD_MONTHS( SYSDATE, -64*12 )), ADD_MONTHS( SYSDATE, -24 ), 'GOLD'); + +INSERT INTO Members (member_code, Name, Address, DateofBirth, DateofCreation, LevelofMember ) +VALUES ('BA01', 'Al Bundy', 'Chicago, IL, next to Marcy', TRUNC(ADD_MONTHS( SYSDATE, -24*12 )), ADD_MONTHS( SYSDATE, -25 ), 'GOLD'); + +-- EN: Insert videos' data +-- HU: Videok bevitele + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('LSTB001', 'Lock, Stock And Two Smoking Barrels', date'1998-08-28', 'Guy Ritchie', 107, 450, 'Angol, szinkronizált', 'B'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('DGMA001', 'Dogma', date'1999-05-21', 'Kevin Smith', 130, 450, null, 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('CLER001', 'Clerks', date'1994-10-19', 'Kevin Smith', 92, 250, 'ff.', 'B'); + +-- EN: Intentionally has incorrect duration value +-- HU: Az idotartam mezo szandekosan rossz erteku +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('GLAD001', 'Gladiator', date'2000-05-05', 'Ridley Scott', 150, 600, 'Oscar-díjas', 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('GLAD092', 'Gladiator', date'1992-03-06', 'Rowdy Herrington', 101, 250, 'Akció', 'B'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('ENGP001', 'The English Patient', date'1996-12-06', 'Anthony Minghella', 162, 500, 'Oscar-díjas', 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('KKAM001', 'Kandi Kamera', date'2015-07-27', null, 25, 150, 'rejtett felvételek', 'B'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('GODF002', 'The Godfather: Part II', date'1974-12-20', 'Francis Ford Coppola', 202, 600, 'Oscar-díjas', 'B'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('TLBA099', 'Le Dernier Combat (The Last Battle)', date'1984-06-12', 'Luc Besson', 92, 600, null, 'B'); + +-- FIXME: what is this? +-- INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +-- VALUES ('ATLA001', 'Atlantis', ADD_MONTHS( SYSDATE, -1.5*12 ), 'George Lucas', 120, 500, 'Klasszikus', 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('SUBW001', 'Subway', date'1985-11-06', 'Luc Besson', 104, 800, NULL, 'B'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('LGBL001', 'Le Grande Bleu', date'1988-08-19', 'Luc Besson', 168, 200, NULL, 'B'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('TOLO001', 'A tolonc (The Undesirable)', date'1915-02-25', 'Michael Curtiz', 67, 400, NULL, 'B'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('SPEC007', 'Spectre', date'2015-11-06', 'Sam Mendes', 148, 600, 'Oscar dijas', 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('ELEM005', 'The Fifth Element', date'1997-05-01', 'Luc Besson', 126, 600, 'Alapmű', 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('DARC001', 'Jeanne d''Arc', date'2009-03-04', 'Lauri Timonen', 22, 400, 'Kihagyhatatlan', 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('TRAN001', 'The Transporter', date'2002-10-11', 'Louis Leterrier, Corey Yuen', 92, 400, NULL, 'D'); + +INSERT INTO videos (video_code, Title, Appearance, Director, Duration, Fee, Commentline, Type) +VALUES ('SPAR060', 'Spartacus', date'1960-11-17', 'Stanley Kubrick', 197, 400, NULL, 'D'); + +-- EN: Insert loans' data +-- HU: Kolcsonzesek bevitele + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 12, NULL + FROM videos v, members m + WHERE v.video_code='TRAN001' + AND m.member_code='BA01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 3, NULL + FROM videos v, members m + WHERE v.video_code='SPEC007' + AND m.member_code='CV01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 5, NULL + FROM videos v, members m + WHERE v.video_code='LGBL001' + AND m.member_code='KB01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 1, NULL + FROM videos v, members m + WHERE v.video_code='SUBW001' + AND m.member_code='GJ01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 254, SYSDATE - 237 + FROM videos v, members m + WHERE v.video_code='SPEC007' + AND m.member_code='OC01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 154, SYSDATE - 152 + FROM videos v, members m + WHERE v.video_code='TRAN001' + AND m.member_code='KB01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 847, SYSDATE - 746 + FROM videos v, members m + WHERE v.video_code='TOLO001' + AND m.member_code='GJ01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 40, SYSDATE - 39 + FROM videos v, members m + WHERE v.video_code='SUBW001' + AND m.member_code='BA01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 83, SYSDATE - 75 + FROM videos v, members m + WHERE v.video_code='LGBL001' + AND m.member_code='CV01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 267, SYSDATE - 225 + FROM videos v, members m + WHERE v.video_code='LSTB001' + AND m.member_code='NI01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 224, SYSDATE - 183 + FROM videos v, members m + WHERE v.video_code='LSTB001' + AND m.member_code='GJ01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 182, SYSDATE - 120 + FROM videos v, members m + WHERE v.video_code='LSTB001' + AND m.member_code='NI02' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 85, SYSDATE - 75 + FROM videos v, members m + WHERE v.video_code='LSTB001' + AND m.member_code='NI01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 312, SYSDATE - 307 + FROM videos v, members m + WHERE v.video_code='DGMA001' + AND m.member_code='KK02' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 245, SYSDATE - 232 + FROM videos v, members m + WHERE v.video_code='DGMA001' + AND m.member_code='VP01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 221, SYSDATE - 208 + FROM videos v, members m + WHERE v.video_code='DGMA001' + AND m.member_code='KK01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 181, SYSDATE - 179 + FROM videos v, members m + WHERE v.video_code='DGMA001' + AND m.member_code='BA01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 43, SYSDATE - 12 + FROM videos v, members m + WHERE v.video_code='DGMA001' + AND m.member_code='NI02' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 483, SYSDATE - 475 + FROM videos v, members m + WHERE v.video_code='CLER001' + AND m.member_code='VP01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 15, SYSDATE - 5 + FROM videos v, members m + WHERE v.video_code='CLER001' + AND m.member_code='EI01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 83, SYSDATE - 74 + FROM videos v, members m + WHERE v.video_code='GLAD001' + AND m.member_code='EI01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 45, SYSDATE - 25 + FROM videos v, members m + WHERE v.video_code='GLAD001' + AND m.member_code='KI01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 12, SYSDATE - 6 + FROM videos v, members m + WHERE v.video_code='GLAD001' + AND m.member_code='FB01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 83, SYSDATE - 75 + FROM videos v, members m + WHERE v.video_code='GLAD092' + AND m.member_code='VP01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 64, SYSDATE - 32 + FROM videos v, members m + WHERE v.video_code='ENGP001' + AND m.member_code='FB01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 25, SYSDATE - 15 + FROM videos v, members m + WHERE v.video_code='ENGP001' + AND m.member_code='NI01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 3, NULL + FROM videos v, members m + WHERE v.video_code='ENGP001' + AND m.member_code='FB01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 83, SYSDATE - 75 + FROM videos v, members m + WHERE v.video_code='KKAM001' + AND m.member_code='VP01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 82, SYSDATE - 56 + FROM videos v, members m + WHERE v.video_code='GODF002' + AND m.member_code='VP01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 53, SYSDATE - 22 + FROM videos v, members m + WHERE v.video_code='GODF002' + AND m.member_code='KK02' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 20, SYSDATE - 15 + FROM videos v, members m + WHERE v.video_code='GODF002' + AND m.member_code='KI01' + ); + +INSERT INTO loans (video_id, member_id, DateofCreation, DateofTurnback) + (SELECT v.video_id, m.member_id, SYSDATE - 8, NULL + FROM videos v, members m + WHERE v.video_code='GODF002' + AND m.member_code='GJ01' + ); + +COMMIT; diff --git a/adatkezeles/ORACLE.pdf b/adatkezeles/ORACLE.pdf new file mode 100644 index 000000000..e0cad9de2 Binary files /dev/null and b/adatkezeles/ORACLE.pdf differ diff --git a/adatkezeles/SQL1.pdf b/adatkezeles/SQL1.pdf new file mode 100644 index 000000000..bc551c834 Binary files /dev/null and b/adatkezeles/SQL1.pdf differ diff --git a/adatkezeles/SQL2.pdf b/adatkezeles/SQL2.pdf new file mode 100644 index 000000000..d0ab1d18b Binary files /dev/null and b/adatkezeles/SQL2.pdf differ diff --git a/adatkezeles/VASUT.sql b/adatkezeles/VASUT.sql new file mode 100644 index 000000000..df34b1ec9 --- /dev/null +++ b/adatkezeles/VASUT.sql @@ -0,0 +1,256 @@ +DROP TABLE megall CASCADE CONSTRAINTS PURGE; +DROP TABLE allomas CASCADE CONSTRAINTS PURGE; +DROP TABLE jarat CASCADE CONSTRAINTS PURGE; +DROP TABLE varos CASCADE CONSTRAINTS PURGE; + +-- jarat tábla létrehozása +CREATE TABLE jarat ( + jarat_szam NUMBER(5,0) NOT NULL, + tipus NVARCHAR2(7) NOT NULL, + nap VARCHAR2(7) DEFAULT '1111111' NOT NULL, + kezd DATE, + vege DATE, + megjegyzes NVARCHAR2(40), + CONSTRAINT "JARAT_KOD_PK" PRIMARY KEY(jarat_szam), + CONSTRAINT "JARAT_TIPUS_CK" CHECK (tipus IN ('Szemely','Gyors','IC','EC')), + CONSTRAINT "JARAT_DATUM_CK" CHECK (kezd < vege + OR vege IS NULL) +); + +-- allomas tábla létrehozása +CREATE TABLE allomas ( + id number(5,0), + nev NVARCHAR2(40) NOT NULL, + varos NVARCHAR2(40), + atlagutas NUMBER(5,0) DEFAULT 0 NOT NULL, + sztrajkutas NUMBER(5,0) DEFAULT 0 NOT NULL, + CONSTRAINT "ALLOMAS_ID_PK" PRIMARY KEY(id) +); + +-- megall tábla létrehozása +CREATE TABLE megall ( + id NUMBER(5,0) NOT NULL, + jarat_szam NUMBER(5,0) NOT NULL, + allomas_id NUMBER(6,0) NOT NULL, + erk NUMBER(4,0), + ind NUMBER(4,0), + CONSTRAINT "MEGALL_ID_PK" PRIMARY KEY(id), + CONSTRAINT "MEGALL_JARAT_FK" FOREIGN KEY(jarat_szam) REFERENCES jarat(jarat_szam), + CONSTRAINT "MEGALL_ALLOMAS_FK" FOREIGN KEY(allomas_id) REFERENCES allomas(id), + CONSTRAINT "MEGALL_ERK_CK" CHECK (FLOOR(erk/100)<=23 AND MOD(erk,100)<=59 AND erk>=0), + CONSTRAINT "MEGALL_IND_CK" CHECK (FLOOR(ind/100)<=23 AND MOD(ind,100)<=59 AND ind>=0), + CONSTRAINT "MEGALL_ERK_IND_CK" CHECK (erk BP-Kelenföld -> Györ -> Hegyeshalom -> Wien +INSERT INTO megall VALUES (1,213,1,null,0900); +INSERT INTO megall VALUES (2,213,4,0915,0920); +INSERT INTO megall VALUES (3,213,15,1025,1028); +INSERT INTO megall VALUES (4,213,16,1043,1045); +INSERT INTO megall VALUES (5,213,17,1145,null); +-- Wien -> Hegyeshalom -> Györ -> BP-Kelenföld -> BP-Keleti +INSERT INTO megall VALUES (6,214,17,null,1400); +INSERT INTO megall VALUES (7,214,16,1500,1502); +INSERT INTO megall VALUES (8,214,15,1535,1540); +INSERT INTO megall VALUES (9,214,4,1630,1635); +INSERT INTO megall VALUES (10,214,1,1650,null); +-- Bp-Keleti -> Bp-Kelenföld -> Tatabánya -> Komárom -> Györ -> Csorna -> Sopron +INSERT INTO megall VALUES (11,327,1,null,1115); +INSERT INTO megall VALUES (12,327,4,1130,1137); +INSERT INTO megall VALUES (13,327,9,1223,1226); +INSERT INTO megall VALUES (14,327,13,1242,1245); +INSERT INTO megall VALUES (15,327,15,1306,1310); +INSERT INTO megall VALUES (16,327,20,1338,1340); +INSERT INTO megall VALUES (17,327,24,1420,null); +-- Sopron -> Csorna -> Györ -> Komárom -> Tatabánya -> Bp-Kelenföld -> Bp-Keleti +INSERT INTO megall VALUES (18,328,24,null,1520); +INSERT INTO megall VALUES (19,328,20,1600,1605); +INSERT INTO megall VALUES (20,328,15,1632,1635); +INSERT INTO megall VALUES (21,328,13,1655,1658); +INSERT INTO megall VALUES (22,328,9,1731,1734); +INSERT INTO megall VALUES (23,328,4,1815,1820); +INSERT INTO megall VALUES (24,328,1,1835,null); +-- BP-Nyugati -> Dunakeszi -> Göd -> Szõdliget -> Vác -> Veröcemaros +-- -> Nagymaros -> Zebegény -> Szob +INSERT INTO megall VALUES (25,9567,2,null,1120); +INSERT INTO megall VALUES (26,9567,25,1145,1200); +INSERT INTO megall VALUES (27,9567,26,1223,1230); +INSERT INTO megall VALUES (28,9567,27,1250,1300); +INSERT INTO megall VALUES (29,9567,28,1320,1335); +INSERT INTO megall VALUES (30,9567,29,1400,1410); +INSERT INTO megall VALUES (31,9567,30,1440,1443); +INSERT INTO megall VALUES (32,9567,31,1507,1510); +INSERT INTO megall VALUES (33,9567,32,1535,null); +-- Bp-Keleti -> Bp-Kelenföld -> Tatabánya -> Komárom -> Györ -> Csorna -> Sopron +INSERT INTO megall VALUES (34,469,1,null,1115); +INSERT INTO megall VALUES (35,469,4,1130,1137); +INSERT INTO megall VALUES (36,469,9,1223,1226); +INSERT INTO megall VALUES (37,469,13,1242,1245); +INSERT INTO megall VALUES (38,469,15,1306,1310); +INSERT INTO megall VALUES (39,469,20,1338,1340); +INSERT INTO megall VALUES (40,469,24,1420,null); +-- Sopron -> Csorna -> Györ -> Komárom -> Tatabánya -> Bp-Kelenföld -> Bp-Keleti +INSERT INTO megall VALUES (41,470,24,null,1520); +INSERT INTO megall VALUES (42,470,20,1600,1605); +INSERT INTO megall VALUES (43,470,15,1632,1635); +INSERT INTO megall VALUES (44,470,13,1655,1658); +INSERT INTO megall VALUES (45,470,9,1731,1734); +INSERT INTO megall VALUES (46,470,4,1815,1820); +INSERT INTO megall VALUES (47,470,1,1835,null); +-- Bp-Déli -> Bp-Kelenföld -> Tatabánya -> Komárom -> Györ +INSERT INTO megall VALUES (48,163,3,null,1225); +INSERT INTO megall VALUES (49,163,4,1230,1237); +INSERT INTO megall VALUES (50,163,9,1323,1326); +INSERT INTO megall VALUES (51,163,13,1342,1345); +INSERT INTO megall VALUES (52,163,15,1406,null); +-- Györ -> Komárom -> Tatabánya -> Bp-Kelenföld -> Bp-Déli +INSERT INTO megall VALUES (53,164,15,null,1735); +INSERT INTO megall VALUES (54,164,13,1755,1758); +INSERT INTO megall VALUES (55,164,9,1831,1834); +INSERT INTO megall VALUES (56,164,4,1915,1920); +INSERT INTO megall VALUES (57,164,3,1925,null); +-- Bp-Déli -> Bp-Kelenföld -> Tatabánya -> Komárom -> Györ +INSERT INTO megall VALUES (58,553,3,null,0725); +INSERT INTO megall VALUES (59,553,4,0730,0737); +INSERT INTO megall VALUES (60,553,9,0823,0826); +INSERT INTO megall VALUES (61,553,13,0842,0845); +INSERT INTO megall VALUES (62,553,15,0906,null); +-- Györ -> Komárom -> Tatabánya -> Bp-Kelenföld -> Bp-Déli +INSERT INTO megall VALUES (63,554,15,null,1235); +INSERT INTO megall VALUES (64,554,13,1255,1258); +INSERT INTO megall VALUES (65,554,9,1331,1334); +INSERT INTO megall VALUES (66,554,4,1415,1420); +INSERT INTO megall VALUES (67,554,3,1425,null); +-- Bp-Keleti -> Bp-Ferencváros -> Bp-Kelenföld -> Törökbálint -> Biatorbágy +-- -> Bicske -> Tatabánya -> Vértesszölös -> Tata -> Alamsfuzito -> Komárom +-- -> Ács -> Györ -> Ense -> Kóny -> Csorna -> Kapuvár -> Fertöszentmiklós +-- -> Balf -> Sopron +INSERT INTO megall VALUES (68,4581,1,null,1315); +INSERT INTO megall VALUES (69,4581,5,1320,1325); +INSERT INTO megall VALUES (70,4581,4,1335,1345); +INSERT INTO megall VALUES (71,4581,6,1400,1403); +INSERT INTO megall VALUES (72,4581,7,1418,1420); +INSERT INTO megall VALUES (73,4581,8,1432,1434); +INSERT INTO megall VALUES (74,4581,9,1449,1457); +INSERT INTO megall VALUES (75,4581,10,1510,1514); +INSERT INTO megall VALUES (76,4581,11,1522,1527); +INSERT INTO megall VALUES (77,4581,12,1540,1542); +INSERT INTO megall VALUES (78,4581,13,1557,1600); +INSERT INTO megall VALUES (79,4581,14,1608,1610); +INSERT INTO megall VALUES (80,4581,15,1625,1640); +INSERT INTO megall VALUES (81,4581,18,1703,1705); +INSERT INTO megall VALUES (82,4581,19,1713,1716); +INSERT INTO megall VALUES (83,4581,20,1732,1735); +INSERT INTO megall VALUES (84,4581,21,1755,1803); +INSERT INTO megall VALUES (85,4581,22,1814,1816); +INSERT INTO megall VALUES (86,4581,23,1830,1832); +INSERT INTO megall VALUES (87,4581,24,1847,null); +-- Bp-Nyugati -> Göd -> Vác -> Veröcemaros -> Zebegény +INSERT INTO megall VALUES (88,2113,2,null,1920); +INSERT INTO megall VALUES (89,2113,26,1923,1930); +INSERT INTO megall VALUES (90,2113,28,2020,2035); +INSERT INTO megall VALUES (91,2113,29,2100,2110); +INSERT INTO megall VALUES (92,2113,31,2145,null); +-- Bp-Keleti -> Debrecen +INSERT INTO megall VALUES (93,6666,1,null,2010); +INSERT INTO megall VALUES (94,6666,33,2245,null); +-- Budapest-Déli -> Szekesfehérvár -> Siófok -> Keszthely -> Zalaegerszeg +-- -> Szombathely -> Sopron +INSERT INTO megall VALUES (95,1145,3,null,0920); +INSERT INTO megall VALUES (96,1145,37,1010,1015); +INSERT INTO megall VALUES (97,1145,38,1115,1120); +INSERT INTO megall VALUES (98,1145,39,1215,1225); +INSERT INTO megall VALUES (99,1145,40,1358,1403); +INSERT INTO megall VALUES (100,1145,41,1445,1450); +INSERT INTO megall VALUES (101,1145,24,1530,null); +-- Sopron -> Szombathely -> Zalaegerszeg -> Keszthely -> Siófok -> +-- Szekesfehérvár -> Budapest-Déli +INSERT INTO megall VALUES (102,1146,24,null,1550); +INSERT INTO megall VALUES (103,1146,41,1630,1635); +INSERT INTO megall VALUES (104,1146,40,1715,1720); +INSERT INTO megall VALUES (105,1146,39,1750,1800); +INSERT INTO megall VALUES (106,1146,38,1900,1905); +INSERT INTO megall VALUES (107,1146,37,1955,2000); +INSERT INTO megall VALUES (108,1146,3,2100,null); +-- Budapest-Déli -> Györ -> Sopron -> Szombathely +INSERT INTO megall VALUES (109,2265,3,null,0930); +INSERT INTO megall VALUES (110,2265,15,1030,1036); +INSERT INTO megall VALUES (111,2265,24,1150,1155); +INSERT INTO megall VALUES (112,2265,41,1235,null); +-- Szombathely -> Sopron -> Györ -> Budapest-Déli +INSERT INTO megall VALUES (113,2266,41,null,1300); +INSERT INTO megall VALUES (114,2266,24,1340,1345); +INSERT INTO megall VALUES (115,2266,15,1500,1505); +INSERT INTO megall VALUES (116,2266,3,1605,null); + + +COMMIT; diff --git a/adatkezeles/adatkezeles_SQL_1_8_teljes_pdf.pdf b/adatkezeles/adatkezeles_SQL_1_8_teljes_pdf.pdf new file mode 100644 index 000000000..e0bc2e9cd Binary files /dev/null and b/adatkezeles/adatkezeles_SQL_1_8_teljes_pdf.pdf differ diff --git a/adatkezeles/hallgatoi-segedlet-teljes2022.pdf b/adatkezeles/hallgatoi-segedlet-teljes2022.pdf new file mode 100644 index 000000000..9aca047fc Binary files /dev/null and b/adatkezeles/hallgatoi-segedlet-teljes2022.pdf differ diff --git a/adatkezeles/index.md b/adatkezeles/index.md new file mode 100644 index 000000000..b7b5560cf --- /dev/null +++ b/adatkezeles/index.md @@ -0,0 +1,118 @@ +--- +layout: page +title: Adatkezelés (VITMBB01) +--- + +# 2024 + +## Előadások + + - Csütörtökönként 10:15-től az QBF.09-ben. + +## Előadók + + - Máté Miklós, mate -AT- tmit.bme.hu + - Kerepes Tamás, kerepes.tamas -AT- db.bme.hu + +## Tárgykövetelmények + +Az aláírás feltétele a laborgyakorlatok sikeres teljesítése. Két labor pótolható. A laborokra az addig tanultakból, valamint a kiegészítő laborsegédletekből felkészülten kell érkezni. Egy labor akkor sikeres, ha a fizikai jelenlét mellé teljesítmény is párosul. A laborvezető a labor végén ellenőrizni fogja az elvégzett munkát. Tehát ha valaki felkészülten érkezik, és az így megszerzett tudással dolgozik a laborban, a labor sikeres. Ha valaki felkészületlenül érkezik, és emiatt nem tud haladni, vagy egész mással foglalkozik a rendelkezésre álló 90 percben, a labor sikertelennek minősíthető. + +A labor teljesítéséhez tehát nem kell a rendelkezésre álló feladatok összességének megoldása, de a felkészültség és az ebből következő érdemi munka igen. + +Az aláírás feltétele továbbá a zárhelyi legalább elégséges szinten történő teljesítése. + +A laborok és a zárthelyi az aláírás meglétén túl nem számít bele a félévvégi jegybe. A félévvégi jegyet kizárólag a vizsga eredménye befolyásolja. + +## Jegyzet + +A tárgy első, elméleti szakaszából az órai jegyzet a mérvadó, ajánlott irodalom: Gajdos Sándor -- Adatbázisok, letölthető [innen](https://db.bme.hu/~gajdos/Adatbazisok2019.pdf). + +A tárgy SQL-ről szóló részéből az előadás-diasor a jegyzet, valamint a laborsegédlet (lásd lentebb): + + - [SQL 1-8.](adatkezeles_SQL_1_8_teljes_pdf.pdf) + + Az előadásvideók [itt](https://web.microsoftstream.com/browse?q=adatkezeles) elérhetőek -- voltak, amíg a Microsoft nem fejlesztette használhatatlanná ezt a szolgáltatást. Emiatt a Moodle-ben linkelt videók is elérhetetlenek. Dolgozunk a probléma megoldásán. + +## Zárthelyi + +11.06 8:15, helyszín később. + +A zárthelyi másfél órás, anyaga az első három témakör: egyed-kapcsolat modell, relációs modell, fizikai adatszervezés. Csak a kiadott feladatlapra lehet dolgozni, nincs pótlap. Számológép nem használható. + +## Pót-zárthelyi + +11.20 8:15, helyszín később. + +## Laborok + +### Időbeosztás + +*FIGYELEM!* A különböző oktatási szünetek miatt laborok a következő időpontokban lesznek: + +L1,L2 (hétfő 17:15)|L3,L4 (kedd 16:15)|téma +--|--|-- +09/23|09/24|egyed-kapcsolat +10/07|10/08|egyed-kapcsolat +10/14|10/15|relációs adatmodell +10/21|10/22|relációs adatmodell +10/28|10/29|fizikai adatszervezés +11/04|11/05|fizikai adatszervezés +11/11|11/12|Oracle +11/18|11/19|SQL +11/25|11/26|SQL +12/02|12/03|Pótlabor +12/09|12/10|Pótlabor + +### Terembeosztás: + +A Neptun jelentkezést követi: hétfőn L1 és L2 összevonva az R4D teremben, kedden L3 az R4D teremben, L4 az R4B teremben. + +### Laborvezetők elérhetősége + + - Németh Gábor, nemeth.gabor.2 -AT- db.bme.hu + - Jászberényi Áron, jaszberenyi.aron -AT- edu.bme.hu + - Molnár Márton, marton.molnar -AT- edu.bme.hu + - Máté Miklós, mate -AT- tmit.bme.hu + +### Hasznos linkek + +- [Oracle kliens programok](https://www.db.bme.hu/adatbazisok/labor/programok-oracle) +- Oracle kézikönyvek + - [Oracle Database dokumentáció az OTN webhelyen](http://docs.oracle.com/en/database/database.html) + - [SQL Language Reference (HTML, 12cR1)](http://docs.oracle.com/database/121/SQLRF/toc.htm) + - [SQL Language Quick Reference (HTML, 12cR1)](http://docs.oracle.com/database/121/SQLQR/toc.htm) + +### Hálózati beállítások otthonra + +SQL Developer kapcsolat: + + - Hostname: rapid.eik.bme.hu + - Port: 1521 + - SID: szglab + - felhasználónév: NEPTUN-kód + - jelszó: A laborvezető adja meg. + +### 1-6. labor, ER-modellezés, relációs adatmodell, fizikai szervezés + +A laborokon az ER-modellezés, a relációs adatmodell és a fizikai adatszervezés témaköreiből fogtok feladatokat megoldani. + +A laborhoz szükséges feladatlapok a következők. Ezek legyenek mindenkinél készenlétben labor elején + - [ER feladatsor](lab_ER.pdf) + - [Relációs feladatsor 1](lab_rel_1.pdf) + - [Relációs feladatsor 2](lab_rel_2.pdf) + - [Fizikai adatszervezés](lab_fizikai.pdf) + +### 7. labor, Oracle + +A labor az Oracle adatbáziskezelő rendszer megimeréséről szól. A tudnivalók [ebben](hallgatoi-segedlet-teljes2022.pdf) az anyagban olvashatók, pontosabban a 3. oldalától, a 4.7 fejezetig terjedő szakaszban. A laborra tehát ezekből felkészülve kell jönni. + +### 8-9. laborok, SQL + +Az SQL laborokhoz szükséges felkészülési anyag az előadásdiák mellett [ezen zanzásított segédlet II. fejezetében található](hallgatoi-segedlet-teljes2022.pdf) + +A laborfeladatokat a laborvezető adja ki. + +### 10-11. Pótlabor + +Akinek valamelyik laborját nem teljesítettre értékelte a laborvezető, annak itt lesz alkalma pótolni. Az SQL laborok pótlása mindenképpen személyesen történik, a többi labor (ER, relációs, fizikai, Oracle) pedig a laborvezetővel való megegyezés alapján. Akinek tehát ez utóbbi laborok valamelyikét kell pótolnia, kérdezze a laborvezetőjét a pótlás mikéntjéről. diff --git a/adatkezeles/lab_ER.pdf b/adatkezeles/lab_ER.pdf new file mode 100644 index 000000000..bbb35262f Binary files /dev/null and b/adatkezeles/lab_ER.pdf differ diff --git a/adatkezeles/lab_fizikai.pdf b/adatkezeles/lab_fizikai.pdf new file mode 100644 index 000000000..6038c612d Binary files /dev/null and b/adatkezeles/lab_fizikai.pdf differ diff --git a/adatkezeles/lab_rel_1.pdf b/adatkezeles/lab_rel_1.pdf new file mode 100644 index 000000000..036eb731b Binary files /dev/null and b/adatkezeles/lab_rel_1.pdf differ diff --git a/adatkezeles/lab_rel_2.pdf b/adatkezeles/lab_rel_2.pdf new file mode 100644 index 000000000..86c46f6de Binary files /dev/null and b/adatkezeles/lab_rel_2.pdf differ diff --git a/assets/files/DB_symbol.gvdesign b/assets/files/DB_symbol.gvdesign new file mode 100644 index 000000000..bfbefae0c Binary files /dev/null and b/assets/files/DB_symbol.gvdesign differ diff --git a/assets/images/DB-lab-banner-2007.jpg b/assets/images/DB-lab-banner-2007.jpg new file mode 100644 index 000000000..ac7cc50b5 Binary files /dev/null and b/assets/images/DB-lab-banner-2007.jpg differ diff --git a/assets/images/db-logo.svg b/assets/images/db-logo.svg new file mode 100644 index 000000000..13bbdbbff --- /dev/null +++ b/assets/images/db-logo.svg @@ -0,0 +1 @@ + diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100644 index 000000000..06a19d8e1 Binary files /dev/null and b/assets/images/logo.png differ diff --git a/assets/tb.png b/assets/tb.png new file mode 100644 index 000000000..aba94eb5e Binary files /dev/null and b/assets/tb.png differ diff --git a/css/main.scss b/css/main.scss new file mode 100644 index 000000000..edb45b9dc --- /dev/null +++ b/css/main.scss @@ -0,0 +1,6 @@ +--- +--- + +@import "tailwind.min.css"; +@import "minima/minima"; +@import "responsive"; diff --git a/css/tailwind.min.css b/css/tailwind.min.css new file mode 100644 index 000000000..e9b71599b --- /dev/null +++ b/css/tailwind.min.css @@ -0,0 +1 @@ +.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-transparent{background-color:transparent}.bg-black{background-color:#000}.bg-white{background-color:#fff}.bg-gray-100{background-color:#f7fafc}.bg-gray-200{background-color:#edf2f7}.bg-gray-300{background-color:#e2e8f0}.bg-gray-400{background-color:#cbd5e0}.bg-gray-500{background-color:#a0aec0}.bg-gray-600{background-color:#718096}.bg-gray-700{background-color:#4a5568}.bg-gray-800{background-color:#2d3748}.bg-gray-900{background-color:#1a202c}.bg-red-100{background-color:#fff5f5}.bg-red-200{background-color:#fed7d7}.bg-red-300{background-color:#feb2b2}.bg-red-400{background-color:#fc8181}.bg-red-500{background-color:#f56565}.bg-red-600{background-color:#e53e3e}.bg-red-700{background-color:#c53030}.bg-red-800{background-color:#9b2c2c}.bg-red-900{background-color:#742a2a}.bg-orange-100{background-color:#fffaf0}.bg-orange-200{background-color:#feebc8}.bg-orange-300{background-color:#fbd38d}.bg-orange-400{background-color:#f6ad55}.bg-orange-500{background-color:#ed8936}.bg-orange-600{background-color:#dd6b20}.bg-orange-700{background-color:#c05621}.bg-orange-800{background-color:#9c4221}.bg-orange-900{background-color:#7b341e}.bg-yellow-100{background-color:ivory}.bg-yellow-200{background-color:#fefcbf}.bg-yellow-300{background-color:#faf089}.bg-yellow-400{background-color:#f6e05e}.bg-yellow-500{background-color:#ecc94b}.bg-yellow-600{background-color:#d69e2e}.bg-yellow-700{background-color:#b7791f}.bg-yellow-800{background-color:#975a16}.bg-yellow-900{background-color:#744210}.bg-green-100{background-color:#f0fff4}.bg-green-200{background-color:#c6f6d5}.bg-green-300{background-color:#9ae6b4}.bg-green-400{background-color:#68d391}.bg-green-500{background-color:#48bb78}.bg-green-600{background-color:#38a169}.bg-green-700{background-color:#2f855a}.bg-green-800{background-color:#276749}.bg-green-900{background-color:#22543d}.bg-teal-100{background-color:#e6fffa}.bg-teal-200{background-color:#b2f5ea}.bg-teal-300{background-color:#81e6d9}.bg-teal-400{background-color:#4fd1c5}.bg-teal-500{background-color:#38b2ac}.bg-teal-600{background-color:#319795}.bg-teal-700{background-color:#2c7a7b}.bg-teal-800{background-color:#285e61}.bg-teal-900{background-color:#234e52}.bg-blue-100{background-color:#ebf8ff}.bg-blue-200{background-color:#bee3f8}.bg-blue-300{background-color:#90cdf4}.bg-blue-400{background-color:#63b3ed}.bg-blue-500{background-color:#4299e1}.bg-blue-600{background-color:#3182ce}.bg-blue-700{background-color:#2b6cb0}.bg-blue-800{background-color:#2c5282}.bg-blue-900{background-color:#2a4365}.bg-indigo-100{background-color:#ebf4ff}.bg-indigo-200{background-color:#c3dafe}.bg-indigo-300{background-color:#a3bffa}.bg-indigo-400{background-color:#7f9cf5}.bg-indigo-500{background-color:#667eea}.bg-indigo-600{background-color:#5a67d8}.bg-indigo-700{background-color:#4c51bf}.bg-indigo-800{background-color:#434190}.bg-indigo-900{background-color:#3c366b}.bg-purple-100{background-color:#faf5ff}.bg-purple-200{background-color:#e9d8fd}.bg-purple-300{background-color:#d6bcfa}.bg-purple-400{background-color:#b794f4}.bg-purple-500{background-color:#9f7aea}.bg-purple-600{background-color:#805ad5}.bg-purple-700{background-color:#6b46c1}.bg-purple-800{background-color:#553c9a}.bg-purple-900{background-color:#44337a}.bg-pink-100{background-color:#fff5f7}.bg-pink-200{background-color:#fed7e2}.bg-pink-300{background-color:#fbb6ce}.bg-pink-400{background-color:#f687b3}.bg-pink-500{background-color:#ed64a6}.bg-pink-600{background-color:#d53f8c}.bg-pink-700{background-color:#b83280}.bg-pink-800{background-color:#97266d}.bg-pink-900{background-color:#702459}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-black:hover{background-color:#000}.hover\:bg-white:hover{background-color:#fff}.hover\:bg-gray-100:hover{background-color:#f7fafc}.hover\:bg-gray-200:hover{background-color:#edf2f7}.hover\:bg-gray-300:hover{background-color:#e2e8f0}.hover\:bg-gray-400:hover{background-color:#cbd5e0}.hover\:bg-gray-500:hover{background-color:#a0aec0}.hover\:bg-gray-600:hover{background-color:#718096}.hover\:bg-gray-700:hover{background-color:#4a5568}.hover\:bg-gray-800:hover{background-color:#2d3748}.hover\:bg-gray-900:hover{background-color:#1a202c}.hover\:bg-red-100:hover{background-color:#fff5f5}.hover\:bg-red-200:hover{background-color:#fed7d7}.hover\:bg-red-300:hover{background-color:#feb2b2}.hover\:bg-red-400:hover{background-color:#fc8181}.hover\:bg-red-500:hover{background-color:#f56565}.hover\:bg-red-600:hover{background-color:#e53e3e}.hover\:bg-red-700:hover{background-color:#c53030}.hover\:bg-red-800:hover{background-color:#9b2c2c}.hover\:bg-red-900:hover{background-color:#742a2a}.hover\:bg-orange-100:hover{background-color:#fffaf0}.hover\:bg-orange-200:hover{background-color:#feebc8}.hover\:bg-orange-300:hover{background-color:#fbd38d}.hover\:bg-orange-400:hover{background-color:#f6ad55}.hover\:bg-orange-500:hover{background-color:#ed8936}.hover\:bg-orange-600:hover{background-color:#dd6b20}.hover\:bg-orange-700:hover{background-color:#c05621}.hover\:bg-orange-800:hover{background-color:#9c4221}.hover\:bg-orange-900:hover{background-color:#7b341e}.hover\:bg-yellow-100:hover{background-color:ivory}.hover\:bg-yellow-200:hover{background-color:#fefcbf}.hover\:bg-yellow-300:hover{background-color:#faf089}.hover\:bg-yellow-400:hover{background-color:#f6e05e}.hover\:bg-yellow-500:hover{background-color:#ecc94b}.hover\:bg-yellow-600:hover{background-color:#d69e2e}.hover\:bg-yellow-700:hover{background-color:#b7791f}.hover\:bg-yellow-800:hover{background-color:#975a16}.hover\:bg-yellow-900:hover{background-color:#744210}.hover\:bg-green-100:hover{background-color:#f0fff4}.hover\:bg-green-200:hover{background-color:#c6f6d5}.hover\:bg-green-300:hover{background-color:#9ae6b4}.hover\:bg-green-400:hover{background-color:#68d391}.hover\:bg-green-500:hover{background-color:#48bb78}.hover\:bg-green-600:hover{background-color:#38a169}.hover\:bg-green-700:hover{background-color:#2f855a}.hover\:bg-green-800:hover{background-color:#276749}.hover\:bg-green-900:hover{background-color:#22543d}.hover\:bg-teal-100:hover{background-color:#e6fffa}.hover\:bg-teal-200:hover{background-color:#b2f5ea}.hover\:bg-teal-300:hover{background-color:#81e6d9}.hover\:bg-teal-400:hover{background-color:#4fd1c5}.hover\:bg-teal-500:hover{background-color:#38b2ac}.hover\:bg-teal-600:hover{background-color:#319795}.hover\:bg-teal-700:hover{background-color:#2c7a7b}.hover\:bg-teal-800:hover{background-color:#285e61}.hover\:bg-teal-900:hover{background-color:#234e52}.hover\:bg-blue-100:hover{background-color:#ebf8ff}.hover\:bg-blue-200:hover{background-color:#bee3f8}.hover\:bg-blue-300:hover{background-color:#90cdf4}.hover\:bg-blue-400:hover{background-color:#63b3ed}.hover\:bg-blue-500:hover{background-color:#4299e1}.hover\:bg-blue-600:hover{background-color:#3182ce}.hover\:bg-blue-700:hover{background-color:#2b6cb0}.hover\:bg-blue-800:hover{background-color:#2c5282}.hover\:bg-blue-900:hover{background-color:#2a4365}.hover\:bg-indigo-100:hover{background-color:#ebf4ff}.hover\:bg-indigo-200:hover{background-color:#c3dafe}.hover\:bg-indigo-300:hover{background-color:#a3bffa}.hover\:bg-indigo-400:hover{background-color:#7f9cf5}.hover\:bg-indigo-500:hover{background-color:#667eea}.hover\:bg-indigo-600:hover{background-color:#5a67d8}.hover\:bg-indigo-700:hover{background-color:#4c51bf}.hover\:bg-indigo-800:hover{background-color:#434190}.hover\:bg-indigo-900:hover{background-color:#3c366b}.hover\:bg-purple-100:hover{background-color:#faf5ff}.hover\:bg-purple-200:hover{background-color:#e9d8fd}.hover\:bg-purple-300:hover{background-color:#d6bcfa}.hover\:bg-purple-400:hover{background-color:#b794f4}.hover\:bg-purple-500:hover{background-color:#9f7aea}.hover\:bg-purple-600:hover{background-color:#805ad5}.hover\:bg-purple-700:hover{background-color:#6b46c1}.hover\:bg-purple-800:hover{background-color:#553c9a}.hover\:bg-purple-900:hover{background-color:#44337a}.hover\:bg-pink-100:hover{background-color:#fff5f7}.hover\:bg-pink-200:hover{background-color:#fed7e2}.hover\:bg-pink-300:hover{background-color:#fbb6ce}.hover\:bg-pink-400:hover{background-color:#f687b3}.hover\:bg-pink-500:hover{background-color:#ed64a6}.hover\:bg-pink-600:hover{background-color:#d53f8c}.hover\:bg-pink-700:hover{background-color:#b83280}.hover\:bg-pink-800:hover{background-color:#97266d}.hover\:bg-pink-900:hover{background-color:#702459}.focus\:bg-transparent:focus{background-color:transparent}.focus\:bg-black:focus{background-color:#000}.focus\:bg-white:focus{background-color:#fff}.focus\:bg-gray-100:focus{background-color:#f7fafc}.focus\:bg-gray-200:focus{background-color:#edf2f7}.focus\:bg-gray-300:focus{background-color:#e2e8f0}.focus\:bg-gray-400:focus{background-color:#cbd5e0}.focus\:bg-gray-500:focus{background-color:#a0aec0}.focus\:bg-gray-600:focus{background-color:#718096}.focus\:bg-gray-700:focus{background-color:#4a5568}.focus\:bg-gray-800:focus{background-color:#2d3748}.focus\:bg-gray-900:focus{background-color:#1a202c}.focus\:bg-red-100:focus{background-color:#fff5f5}.focus\:bg-red-200:focus{background-color:#fed7d7}.focus\:bg-red-300:focus{background-color:#feb2b2}.focus\:bg-red-400:focus{background-color:#fc8181}.focus\:bg-red-500:focus{background-color:#f56565}.focus\:bg-red-600:focus{background-color:#e53e3e}.focus\:bg-red-700:focus{background-color:#c53030}.focus\:bg-red-800:focus{background-color:#9b2c2c}.focus\:bg-red-900:focus{background-color:#742a2a}.focus\:bg-orange-100:focus{background-color:#fffaf0}.focus\:bg-orange-200:focus{background-color:#feebc8}.focus\:bg-orange-300:focus{background-color:#fbd38d}.focus\:bg-orange-400:focus{background-color:#f6ad55}.focus\:bg-orange-500:focus{background-color:#ed8936}.focus\:bg-orange-600:focus{background-color:#dd6b20}.focus\:bg-orange-700:focus{background-color:#c05621}.focus\:bg-orange-800:focus{background-color:#9c4221}.focus\:bg-orange-900:focus{background-color:#7b341e}.focus\:bg-yellow-100:focus{background-color:ivory}.focus\:bg-yellow-200:focus{background-color:#fefcbf}.focus\:bg-yellow-300:focus{background-color:#faf089}.focus\:bg-yellow-400:focus{background-color:#f6e05e}.focus\:bg-yellow-500:focus{background-color:#ecc94b}.focus\:bg-yellow-600:focus{background-color:#d69e2e}.focus\:bg-yellow-700:focus{background-color:#b7791f}.focus\:bg-yellow-800:focus{background-color:#975a16}.focus\:bg-yellow-900:focus{background-color:#744210}.focus\:bg-green-100:focus{background-color:#f0fff4}.focus\:bg-green-200:focus{background-color:#c6f6d5}.focus\:bg-green-300:focus{background-color:#9ae6b4}.focus\:bg-green-400:focus{background-color:#68d391}.focus\:bg-green-500:focus{background-color:#48bb78}.focus\:bg-green-600:focus{background-color:#38a169}.focus\:bg-green-700:focus{background-color:#2f855a}.focus\:bg-green-800:focus{background-color:#276749}.focus\:bg-green-900:focus{background-color:#22543d}.focus\:bg-teal-100:focus{background-color:#e6fffa}.focus\:bg-teal-200:focus{background-color:#b2f5ea}.focus\:bg-teal-300:focus{background-color:#81e6d9}.focus\:bg-teal-400:focus{background-color:#4fd1c5}.focus\:bg-teal-500:focus{background-color:#38b2ac}.focus\:bg-teal-600:focus{background-color:#319795}.focus\:bg-teal-700:focus{background-color:#2c7a7b}.focus\:bg-teal-800:focus{background-color:#285e61}.focus\:bg-teal-900:focus{background-color:#234e52}.focus\:bg-blue-100:focus{background-color:#ebf8ff}.focus\:bg-blue-200:focus{background-color:#bee3f8}.focus\:bg-blue-300:focus{background-color:#90cdf4}.focus\:bg-blue-400:focus{background-color:#63b3ed}.focus\:bg-blue-500:focus{background-color:#4299e1}.focus\:bg-blue-600:focus{background-color:#3182ce}.focus\:bg-blue-700:focus{background-color:#2b6cb0}.focus\:bg-blue-800:focus{background-color:#2c5282}.focus\:bg-blue-900:focus{background-color:#2a4365}.focus\:bg-indigo-100:focus{background-color:#ebf4ff}.focus\:bg-indigo-200:focus{background-color:#c3dafe}.focus\:bg-indigo-300:focus{background-color:#a3bffa}.focus\:bg-indigo-400:focus{background-color:#7f9cf5}.focus\:bg-indigo-500:focus{background-color:#667eea}.focus\:bg-indigo-600:focus{background-color:#5a67d8}.focus\:bg-indigo-700:focus{background-color:#4c51bf}.focus\:bg-indigo-800:focus{background-color:#434190}.focus\:bg-indigo-900:focus{background-color:#3c366b}.focus\:bg-purple-100:focus{background-color:#faf5ff}.focus\:bg-purple-200:focus{background-color:#e9d8fd}.focus\:bg-purple-300:focus{background-color:#d6bcfa}.focus\:bg-purple-400:focus{background-color:#b794f4}.focus\:bg-purple-500:focus{background-color:#9f7aea}.focus\:bg-purple-600:focus{background-color:#805ad5}.focus\:bg-purple-700:focus{background-color:#6b46c1}.focus\:bg-purple-800:focus{background-color:#553c9a}.focus\:bg-purple-900:focus{background-color:#44337a}.focus\:bg-pink-100:focus{background-color:#fff5f7}.focus\:bg-pink-200:focus{background-color:#fed7e2}.focus\:bg-pink-300:focus{background-color:#fbb6ce}.focus\:bg-pink-400:focus{background-color:#f687b3}.focus\:bg-pink-500:focus{background-color:#ed64a6}.focus\:bg-pink-600:focus{background-color:#d53f8c}.focus\:bg-pink-700:focus{background-color:#b83280}.focus\:bg-pink-800:focus{background-color:#97266d}.focus\:bg-pink-900:focus{background-color:#702459}.bg-bottom{background-position:bottom}.bg-center{background-position:center}.bg-left{background-position:left}.bg-left-bottom{background-position:left bottom}.bg-left-top{background-position:left top}.bg-right{background-position:right}.bg-right-bottom{background-position:right bottom}.bg-right-top{background-position:right top}.bg-top{background-position:top}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-auto{background-size:auto}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-transparent{border-color:transparent}.border-black{border-color:#000}.border-white{border-color:#fff}.border-gray-100{border-color:#f7fafc}.border-gray-200{border-color:#edf2f7}.border-gray-300{border-color:#e2e8f0}.border-gray-400{border-color:#cbd5e0}.border-gray-500{border-color:#a0aec0}.border-gray-600{border-color:#718096}.border-gray-700{border-color:#4a5568}.border-gray-800{border-color:#2d3748}.border-gray-900{border-color:#1a202c}.border-red-100{border-color:#fff5f5}.border-red-200{border-color:#fed7d7}.border-red-300{border-color:#feb2b2}.border-red-400{border-color:#fc8181}.border-red-500{border-color:#f56565}.border-red-600{border-color:#e53e3e}.border-red-700{border-color:#c53030}.border-red-800{border-color:#9b2c2c}.border-red-900{border-color:#742a2a}.border-orange-100{border-color:#fffaf0}.border-orange-200{border-color:#feebc8}.border-orange-300{border-color:#fbd38d}.border-orange-400{border-color:#f6ad55}.border-orange-500{border-color:#ed8936}.border-orange-600{border-color:#dd6b20}.border-orange-700{border-color:#c05621}.border-orange-800{border-color:#9c4221}.border-orange-900{border-color:#7b341e}.border-yellow-100{border-color:ivory}.border-yellow-200{border-color:#fefcbf}.border-yellow-300{border-color:#faf089}.border-yellow-400{border-color:#f6e05e}.border-yellow-500{border-color:#ecc94b}.border-yellow-600{border-color:#d69e2e}.border-yellow-700{border-color:#b7791f}.border-yellow-800{border-color:#975a16}.border-yellow-900{border-color:#744210}.border-green-100{border-color:#f0fff4}.border-green-200{border-color:#c6f6d5}.border-green-300{border-color:#9ae6b4}.border-green-400{border-color:#68d391}.border-green-500{border-color:#48bb78}.border-green-600{border-color:#38a169}.border-green-700{border-color:#2f855a}.border-green-800{border-color:#276749}.border-green-900{border-color:#22543d}.border-teal-100{border-color:#e6fffa}.border-teal-200{border-color:#b2f5ea}.border-teal-300{border-color:#81e6d9}.border-teal-400{border-color:#4fd1c5}.border-teal-500{border-color:#38b2ac}.border-teal-600{border-color:#319795}.border-teal-700{border-color:#2c7a7b}.border-teal-800{border-color:#285e61}.border-teal-900{border-color:#234e52}.border-blue-100{border-color:#ebf8ff}.border-blue-200{border-color:#bee3f8}.border-blue-300{border-color:#90cdf4}.border-blue-400{border-color:#63b3ed}.border-blue-500{border-color:#4299e1}.border-blue-600{border-color:#3182ce}.border-blue-700{border-color:#2b6cb0}.border-blue-800{border-color:#2c5282}.border-blue-900{border-color:#2a4365}.border-indigo-100{border-color:#ebf4ff}.border-indigo-200{border-color:#c3dafe}.border-indigo-300{border-color:#a3bffa}.border-indigo-400{border-color:#7f9cf5}.border-indigo-500{border-color:#667eea}.border-indigo-600{border-color:#5a67d8}.border-indigo-700{border-color:#4c51bf}.border-indigo-800{border-color:#434190}.border-indigo-900{border-color:#3c366b}.border-purple-100{border-color:#faf5ff}.border-purple-200{border-color:#e9d8fd}.border-purple-300{border-color:#d6bcfa}.border-purple-400{border-color:#b794f4}.border-purple-500{border-color:#9f7aea}.border-purple-600{border-color:#805ad5}.border-purple-700{border-color:#6b46c1}.border-purple-800{border-color:#553c9a}.border-purple-900{border-color:#44337a}.border-pink-100{border-color:#fff5f7}.border-pink-200{border-color:#fed7e2}.border-pink-300{border-color:#fbb6ce}.border-pink-400{border-color:#f687b3}.border-pink-500{border-color:#ed64a6}.border-pink-600{border-color:#d53f8c}.border-pink-700{border-color:#b83280}.border-pink-800{border-color:#97266d}.border-pink-900{border-color:#702459}.hover\:border-transparent:hover{border-color:transparent}.hover\:border-black:hover{border-color:#000}.hover\:border-white:hover{border-color:#fff}.hover\:border-gray-100:hover{border-color:#f7fafc}.hover\:border-gray-200:hover{border-color:#edf2f7}.hover\:border-gray-300:hover{border-color:#e2e8f0}.hover\:border-gray-400:hover{border-color:#cbd5e0}.hover\:border-gray-500:hover{border-color:#a0aec0}.hover\:border-gray-600:hover{border-color:#718096}.hover\:border-gray-700:hover{border-color:#4a5568}.hover\:border-gray-800:hover{border-color:#2d3748}.hover\:border-gray-900:hover{border-color:#1a202c}.hover\:border-red-100:hover{border-color:#fff5f5}.hover\:border-red-200:hover{border-color:#fed7d7}.hover\:border-red-300:hover{border-color:#feb2b2}.hover\:border-red-400:hover{border-color:#fc8181}.hover\:border-red-500:hover{border-color:#f56565}.hover\:border-red-600:hover{border-color:#e53e3e}.hover\:border-red-700:hover{border-color:#c53030}.hover\:border-red-800:hover{border-color:#9b2c2c}.hover\:border-red-900:hover{border-color:#742a2a}.hover\:border-orange-100:hover{border-color:#fffaf0}.hover\:border-orange-200:hover{border-color:#feebc8}.hover\:border-orange-300:hover{border-color:#fbd38d}.hover\:border-orange-400:hover{border-color:#f6ad55}.hover\:border-orange-500:hover{border-color:#ed8936}.hover\:border-orange-600:hover{border-color:#dd6b20}.hover\:border-orange-700:hover{border-color:#c05621}.hover\:border-orange-800:hover{border-color:#9c4221}.hover\:border-orange-900:hover{border-color:#7b341e}.hover\:border-yellow-100:hover{border-color:ivory}.hover\:border-yellow-200:hover{border-color:#fefcbf}.hover\:border-yellow-300:hover{border-color:#faf089}.hover\:border-yellow-400:hover{border-color:#f6e05e}.hover\:border-yellow-500:hover{border-color:#ecc94b}.hover\:border-yellow-600:hover{border-color:#d69e2e}.hover\:border-yellow-700:hover{border-color:#b7791f}.hover\:border-yellow-800:hover{border-color:#975a16}.hover\:border-yellow-900:hover{border-color:#744210}.hover\:border-green-100:hover{border-color:#f0fff4}.hover\:border-green-200:hover{border-color:#c6f6d5}.hover\:border-green-300:hover{border-color:#9ae6b4}.hover\:border-green-400:hover{border-color:#68d391}.hover\:border-green-500:hover{border-color:#48bb78}.hover\:border-green-600:hover{border-color:#38a169}.hover\:border-green-700:hover{border-color:#2f855a}.hover\:border-green-800:hover{border-color:#276749}.hover\:border-green-900:hover{border-color:#22543d}.hover\:border-teal-100:hover{border-color:#e6fffa}.hover\:border-teal-200:hover{border-color:#b2f5ea}.hover\:border-teal-300:hover{border-color:#81e6d9}.hover\:border-teal-400:hover{border-color:#4fd1c5}.hover\:border-teal-500:hover{border-color:#38b2ac}.hover\:border-teal-600:hover{border-color:#319795}.hover\:border-teal-700:hover{border-color:#2c7a7b}.hover\:border-teal-800:hover{border-color:#285e61}.hover\:border-teal-900:hover{border-color:#234e52}.hover\:border-blue-100:hover{border-color:#ebf8ff}.hover\:border-blue-200:hover{border-color:#bee3f8}.hover\:border-blue-300:hover{border-color:#90cdf4}.hover\:border-blue-400:hover{border-color:#63b3ed}.hover\:border-blue-500:hover{border-color:#4299e1}.hover\:border-blue-600:hover{border-color:#3182ce}.hover\:border-blue-700:hover{border-color:#2b6cb0}.hover\:border-blue-800:hover{border-color:#2c5282}.hover\:border-blue-900:hover{border-color:#2a4365}.hover\:border-indigo-100:hover{border-color:#ebf4ff}.hover\:border-indigo-200:hover{border-color:#c3dafe}.hover\:border-indigo-300:hover{border-color:#a3bffa}.hover\:border-indigo-400:hover{border-color:#7f9cf5}.hover\:border-indigo-500:hover{border-color:#667eea}.hover\:border-indigo-600:hover{border-color:#5a67d8}.hover\:border-indigo-700:hover{border-color:#4c51bf}.hover\:border-indigo-800:hover{border-color:#434190}.hover\:border-indigo-900:hover{border-color:#3c366b}.hover\:border-purple-100:hover{border-color:#faf5ff}.hover\:border-purple-200:hover{border-color:#e9d8fd}.hover\:border-purple-300:hover{border-color:#d6bcfa}.hover\:border-purple-400:hover{border-color:#b794f4}.hover\:border-purple-500:hover{border-color:#9f7aea}.hover\:border-purple-600:hover{border-color:#805ad5}.hover\:border-purple-700:hover{border-color:#6b46c1}.hover\:border-purple-800:hover{border-color:#553c9a}.hover\:border-purple-900:hover{border-color:#44337a}.hover\:border-pink-100:hover{border-color:#fff5f7}.hover\:border-pink-200:hover{border-color:#fed7e2}.hover\:border-pink-300:hover{border-color:#fbb6ce}.hover\:border-pink-400:hover{border-color:#f687b3}.hover\:border-pink-500:hover{border-color:#ed64a6}.hover\:border-pink-600:hover{border-color:#d53f8c}.hover\:border-pink-700:hover{border-color:#b83280}.hover\:border-pink-800:hover{border-color:#97266d}.hover\:border-pink-900:hover{border-color:#702459}.focus\:border-transparent:focus{border-color:transparent}.focus\:border-black:focus{border-color:#000}.focus\:border-white:focus{border-color:#fff}.focus\:border-gray-100:focus{border-color:#f7fafc}.focus\:border-gray-200:focus{border-color:#edf2f7}.focus\:border-gray-300:focus{border-color:#e2e8f0}.focus\:border-gray-400:focus{border-color:#cbd5e0}.focus\:border-gray-500:focus{border-color:#a0aec0}.focus\:border-gray-600:focus{border-color:#718096}.focus\:border-gray-700:focus{border-color:#4a5568}.focus\:border-gray-800:focus{border-color:#2d3748}.focus\:border-gray-900:focus{border-color:#1a202c}.focus\:border-red-100:focus{border-color:#fff5f5}.focus\:border-red-200:focus{border-color:#fed7d7}.focus\:border-red-300:focus{border-color:#feb2b2}.focus\:border-red-400:focus{border-color:#fc8181}.focus\:border-red-500:focus{border-color:#f56565}.focus\:border-red-600:focus{border-color:#e53e3e}.focus\:border-red-700:focus{border-color:#c53030}.focus\:border-red-800:focus{border-color:#9b2c2c}.focus\:border-red-900:focus{border-color:#742a2a}.focus\:border-orange-100:focus{border-color:#fffaf0}.focus\:border-orange-200:focus{border-color:#feebc8}.focus\:border-orange-300:focus{border-color:#fbd38d}.focus\:border-orange-400:focus{border-color:#f6ad55}.focus\:border-orange-500:focus{border-color:#ed8936}.focus\:border-orange-600:focus{border-color:#dd6b20}.focus\:border-orange-700:focus{border-color:#c05621}.focus\:border-orange-800:focus{border-color:#9c4221}.focus\:border-orange-900:focus{border-color:#7b341e}.focus\:border-yellow-100:focus{border-color:ivory}.focus\:border-yellow-200:focus{border-color:#fefcbf}.focus\:border-yellow-300:focus{border-color:#faf089}.focus\:border-yellow-400:focus{border-color:#f6e05e}.focus\:border-yellow-500:focus{border-color:#ecc94b}.focus\:border-yellow-600:focus{border-color:#d69e2e}.focus\:border-yellow-700:focus{border-color:#b7791f}.focus\:border-yellow-800:focus{border-color:#975a16}.focus\:border-yellow-900:focus{border-color:#744210}.focus\:border-green-100:focus{border-color:#f0fff4}.focus\:border-green-200:focus{border-color:#c6f6d5}.focus\:border-green-300:focus{border-color:#9ae6b4}.focus\:border-green-400:focus{border-color:#68d391}.focus\:border-green-500:focus{border-color:#48bb78}.focus\:border-green-600:focus{border-color:#38a169}.focus\:border-green-700:focus{border-color:#2f855a}.focus\:border-green-800:focus{border-color:#276749}.focus\:border-green-900:focus{border-color:#22543d}.focus\:border-teal-100:focus{border-color:#e6fffa}.focus\:border-teal-200:focus{border-color:#b2f5ea}.focus\:border-teal-300:focus{border-color:#81e6d9}.focus\:border-teal-400:focus{border-color:#4fd1c5}.focus\:border-teal-500:focus{border-color:#38b2ac}.focus\:border-teal-600:focus{border-color:#319795}.focus\:border-teal-700:focus{border-color:#2c7a7b}.focus\:border-teal-800:focus{border-color:#285e61}.focus\:border-teal-900:focus{border-color:#234e52}.focus\:border-blue-100:focus{border-color:#ebf8ff}.focus\:border-blue-200:focus{border-color:#bee3f8}.focus\:border-blue-300:focus{border-color:#90cdf4}.focus\:border-blue-400:focus{border-color:#63b3ed}.focus\:border-blue-500:focus{border-color:#4299e1}.focus\:border-blue-600:focus{border-color:#3182ce}.focus\:border-blue-700:focus{border-color:#2b6cb0}.focus\:border-blue-800:focus{border-color:#2c5282}.focus\:border-blue-900:focus{border-color:#2a4365}.focus\:border-indigo-100:focus{border-color:#ebf4ff}.focus\:border-indigo-200:focus{border-color:#c3dafe}.focus\:border-indigo-300:focus{border-color:#a3bffa}.focus\:border-indigo-400:focus{border-color:#7f9cf5}.focus\:border-indigo-500:focus{border-color:#667eea}.focus\:border-indigo-600:focus{border-color:#5a67d8}.focus\:border-indigo-700:focus{border-color:#4c51bf}.focus\:border-indigo-800:focus{border-color:#434190}.focus\:border-indigo-900:focus{border-color:#3c366b}.focus\:border-purple-100:focus{border-color:#faf5ff}.focus\:border-purple-200:focus{border-color:#e9d8fd}.focus\:border-purple-300:focus{border-color:#d6bcfa}.focus\:border-purple-400:focus{border-color:#b794f4}.focus\:border-purple-500:focus{border-color:#9f7aea}.focus\:border-purple-600:focus{border-color:#805ad5}.focus\:border-purple-700:focus{border-color:#6b46c1}.focus\:border-purple-800:focus{border-color:#553c9a}.focus\:border-purple-900:focus{border-color:#44337a}.focus\:border-pink-100:focus{border-color:#fff5f7}.focus\:border-pink-200:focus{border-color:#fed7e2}.focus\:border-pink-300:focus{border-color:#fbb6ce}.focus\:border-pink-400:focus{border-color:#f687b3}.focus\:border-pink-500:focus{border-color:#ed64a6}.focus\:border-pink-600:focus{border-color:#d53f8c}.focus\:border-pink-700:focus{border-color:#b83280}.focus\:border-pink-800:focus{border-color:#97266d}.focus\:border-pink-900:focus{border-color:#702459}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.rounded-br-sm{border-bottom-right-radius:.125rem}.rounded-bl-sm{border-bottom-left-radius:.125rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-tr-lg{border-top-right-radius:.5rem}.rounded-br-lg{border-bottom-right-radius:.5rem}.rounded-bl-lg{border-bottom-left-radius:.5rem}.rounded-tl-full{border-top-left-radius:9999px}.rounded-tr-full{border-top-right-radius:9999px}.rounded-br-full{border-bottom-right-radius:9999px}.rounded-bl-full{border-bottom-left-radius:9999px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-none{border-style:none}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-8{border-width:8px}.border{border-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-b-0{border-bottom-width:0}.border-l-0{border-left-width:0}.border-t-2{border-top-width:2px}.border-r-2{border-right-width:2px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-t-4{border-top-width:4px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-l-4{border-left-width:4px}.border-t-8{border-top-width:8px}.border-r-8{border-right-width:8px}.border-b-8{border-bottom-width:8px}.border-l-8{border-left-width:8px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-text{cursor:text}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.table-cell{display:table-cell}.hidden{display:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-no-wrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.flex-grow-0{flex-grow:0}.flex-grow{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clearfix:after{content:"";display:table;clear:both}.font-sans{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.font-hairline{font-weight:100}.font-thin{font-weight:200}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-black{font-weight:900}.hover\:font-hairline:hover{font-weight:100}.hover\:font-thin:hover{font-weight:200}.hover\:font-light:hover{font-weight:300}.hover\:font-normal:hover{font-weight:400}.hover\:font-medium:hover{font-weight:500}.hover\:font-semibold:hover{font-weight:600}.hover\:font-bold:hover{font-weight:700}.hover\:font-extrabold:hover{font-weight:800}.hover\:font-black:hover{font-weight:900}.focus\:font-hairline:focus{font-weight:100}.focus\:font-thin:focus{font-weight:200}.focus\:font-light:focus{font-weight:300}.focus\:font-normal:focus{font-weight:400}.focus\:font-medium:focus{font-weight:500}.focus\:font-semibold:focus{font-weight:600}.focus\:font-bold:focus{font-weight:700}.focus\:font-extrabold:focus{font-weight:800}.focus\:font-black:focus{font-weight:900}.h-0{height:0}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-32{height:8rem}.h-40{height:10rem}.h-48{height:12rem}.h-56{height:14rem}.h-64{height:16rem}.h-auto{height:auto}.h-px{height:1px}.h-full{height:100%}.h-screen{height:100vh}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-loose{line-height:2}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-8{margin:2rem}.m-10{margin:2.5rem}.m-12{margin:3rem}.m-16{margin:4rem}.m-20{margin:5rem}.m-24{margin:6rem}.m-32{margin:8rem}.m-40{margin:10rem}.m-48{margin:12rem}.m-56{margin:14rem}.m-64{margin:16rem}.m-auto{margin:auto}.m-px{margin:1px}.-m-1{margin:-.25rem}.-m-2{margin:-.5rem}.-m-3{margin:-.75rem}.-m-4{margin:-1rem}.-m-5{margin:-1.25rem}.-m-6{margin:-1.5rem}.-m-8{margin:-2rem}.-m-10{margin:-2.5rem}.-m-12{margin:-3rem}.-m-16{margin:-4rem}.-m-20{margin:-5rem}.-m-24{margin:-6rem}.-m-32{margin:-8rem}.-m-40{margin:-10rem}.-m-48{margin:-12rem}.-m-56{margin:-14rem}.-m-64{margin:-16rem}.-m-px{margin:-1px}.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mx-12{margin-left:3rem;margin-right:3rem}.my-16{margin-top:4rem;margin-bottom:4rem}.mx-16{margin-left:4rem;margin-right:4rem}.my-20{margin-top:5rem;margin-bottom:5rem}.mx-20{margin-left:5rem;margin-right:5rem}.my-24{margin-top:6rem;margin-bottom:6rem}.mx-24{margin-left:6rem;margin-right:6rem}.my-32{margin-top:8rem;margin-bottom:8rem}.mx-32{margin-left:8rem;margin-right:8rem}.my-40{margin-top:10rem;margin-bottom:10rem}.mx-40{margin-left:10rem;margin-right:10rem}.my-48{margin-top:12rem;margin-bottom:12rem}.mx-48{margin-left:12rem;margin-right:12rem}.my-56{margin-top:14rem;margin-bottom:14rem}.mx-56{margin-left:14rem;margin-right:14rem}.my-64{margin-top:16rem;margin-bottom:16rem}.mx-64{margin-left:16rem;margin-right:16rem}.my-auto{margin-top:auto;margin-bottom:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-px{margin-top:1px;margin-bottom:1px}.mx-px{margin-left:1px;margin-right:1px}.-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.-my-4{margin-top:-1rem;margin-bottom:-1rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-8{margin-top:-2rem;margin-bottom:-2rem}.-mx-8{margin-left:-2rem;margin-right:-2rem}.-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.-my-12{margin-top:-3rem;margin-bottom:-3rem}.-mx-12{margin-left:-3rem;margin-right:-3rem}.-my-16{margin-top:-4rem;margin-bottom:-4rem}.-mx-16{margin-left:-4rem;margin-right:-4rem}.-my-20{margin-top:-5rem;margin-bottom:-5rem}.-mx-20{margin-left:-5rem;margin-right:-5rem}.-my-24{margin-top:-6rem;margin-bottom:-6rem}.-mx-24{margin-left:-6rem;margin-right:-6rem}.-my-32{margin-top:-8rem;margin-bottom:-8rem}.-mx-32{margin-left:-8rem;margin-right:-8rem}.-my-40{margin-top:-10rem;margin-bottom:-10rem}.-mx-40{margin-left:-10rem;margin-right:-10rem}.-my-48{margin-top:-12rem;margin-bottom:-12rem}.-mx-48{margin-left:-12rem;margin-right:-12rem}.-my-56{margin-top:-14rem;margin-bottom:-14rem}.-mx-56{margin-left:-14rem;margin-right:-14rem}.-my-64{margin-top:-16rem;margin-bottom:-16rem}.-mx-64{margin-left:-16rem;margin-right:-16rem}.-my-px{margin-top:-1px;margin-bottom:-1px}.-mx-px{margin-left:-1px;margin-right:-1px}.mt-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.mt-10{margin-top:2.5rem}.mr-10{margin-right:2.5rem}.mb-10{margin-bottom:2.5rem}.ml-10{margin-left:2.5rem}.mt-12{margin-top:3rem}.mr-12{margin-right:3rem}.mb-12{margin-bottom:3rem}.ml-12{margin-left:3rem}.mt-16{margin-top:4rem}.mr-16{margin-right:4rem}.mb-16{margin-bottom:4rem}.ml-16{margin-left:4rem}.mt-20{margin-top:5rem}.mr-20{margin-right:5rem}.mb-20{margin-bottom:5rem}.ml-20{margin-left:5rem}.mt-24{margin-top:6rem}.mr-24{margin-right:6rem}.mb-24{margin-bottom:6rem}.ml-24{margin-left:6rem}.mt-32{margin-top:8rem}.mr-32{margin-right:8rem}.mb-32{margin-bottom:8rem}.ml-32{margin-left:8rem}.mt-40{margin-top:10rem}.mr-40{margin-right:10rem}.mb-40{margin-bottom:10rem}.ml-40{margin-left:10rem}.mt-48{margin-top:12rem}.mr-48{margin-right:12rem}.mb-48{margin-bottom:12rem}.ml-48{margin-left:12rem}.mt-56{margin-top:14rem}.mr-56{margin-right:14rem}.mb-56{margin-bottom:14rem}.ml-56{margin-left:14rem}.mt-64{margin-top:16rem}.mr-64{margin-right:16rem}.mb-64{margin-bottom:16rem}.ml-64{margin-left:16rem}.mt-auto{margin-top:auto}.mr-auto{margin-right:auto}.mb-auto{margin-bottom:auto}.ml-auto{margin-left:auto}.mt-px{margin-top:1px}.mr-px{margin-right:1px}.mb-px{margin-bottom:1px}.ml-px{margin-left:1px}.-mt-1{margin-top:-.25rem}.-mr-1{margin-right:-.25rem}.-mb-1{margin-bottom:-.25rem}.-ml-1{margin-left:-.25rem}.-mt-2{margin-top:-.5rem}.-mr-2{margin-right:-.5rem}.-mb-2{margin-bottom:-.5rem}.-ml-2{margin-left:-.5rem}.-mt-3{margin-top:-.75rem}.-mr-3{margin-right:-.75rem}.-mb-3{margin-bottom:-.75rem}.-ml-3{margin-left:-.75rem}.-mt-4{margin-top:-1rem}.-mr-4{margin-right:-1rem}.-mb-4{margin-bottom:-1rem}.-ml-4{margin-left:-1rem}.-mt-5{margin-top:-1.25rem}.-mr-5{margin-right:-1.25rem}.-mb-5{margin-bottom:-1.25rem}.-ml-5{margin-left:-1.25rem}.-mt-6{margin-top:-1.5rem}.-mr-6{margin-right:-1.5rem}.-mb-6{margin-bottom:-1.5rem}.-ml-6{margin-left:-1.5rem}.-mt-8{margin-top:-2rem}.-mr-8{margin-right:-2rem}.-mb-8{margin-bottom:-2rem}.-ml-8{margin-left:-2rem}.-mt-10{margin-top:-2.5rem}.-mr-10{margin-right:-2.5rem}.-mb-10{margin-bottom:-2.5rem}.-ml-10{margin-left:-2.5rem}.-mt-12{margin-top:-3rem}.-mr-12{margin-right:-3rem}.-mb-12{margin-bottom:-3rem}.-ml-12{margin-left:-3rem}.-mt-16{margin-top:-4rem}.-mr-16{margin-right:-4rem}.-mb-16{margin-bottom:-4rem}.-ml-16{margin-left:-4rem}.-mt-20{margin-top:-5rem}.-mr-20{margin-right:-5rem}.-mb-20{margin-bottom:-5rem}.-ml-20{margin-left:-5rem}.-mt-24{margin-top:-6rem}.-mr-24{margin-right:-6rem}.-mb-24{margin-bottom:-6rem}.-ml-24{margin-left:-6rem}.-mt-32{margin-top:-8rem}.-mr-32{margin-right:-8rem}.-mb-32{margin-bottom:-8rem}.-ml-32{margin-left:-8rem}.-mt-40{margin-top:-10rem}.-mr-40{margin-right:-10rem}.-mb-40{margin-bottom:-10rem}.-ml-40{margin-left:-10rem}.-mt-48{margin-top:-12rem}.-mr-48{margin-right:-12rem}.-mb-48{margin-bottom:-12rem}.-ml-48{margin-left:-12rem}.-mt-56{margin-top:-14rem}.-mr-56{margin-right:-14rem}.-mb-56{margin-bottom:-14rem}.-ml-56{margin-left:-14rem}.-mt-64{margin-top:-16rem}.-mr-64{margin-right:-16rem}.-mb-64{margin-bottom:-16rem}.-ml-64{margin-left:-16rem}.-mt-px{margin-top:-1px}.-mr-px{margin-right:-1px}.-mb-px{margin-bottom:-1px}.-ml-px{margin-left:-1px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.max-w-xs{max-width:20rem}.max-w-sm{max-width:24rem}.max-w-md{max-width:28rem}.max-w-lg{max-width:32rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-full{max-width:100%}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-fill{-o-object-fit:fill;object-fit:fill}.object-none{-o-object-fit:none;object-fit:none}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-bottom{-o-object-position:bottom;object-position:bottom}.object-center{-o-object-position:center;object-position:center}.object-left{-o-object-position:left;object-position:left}.object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.object-left-top{-o-object-position:left top;object-position:left top}.object-right{-o-object-position:right;object-position:right}.object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.object-right-top{-o-object-position:right top;object-position:right top}.object-top{-o-object-position:top;object-position:top}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.outline-none{outline:0}.focus\:outline-none:focus{outline:0}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.scrolling-touch{-webkit-overflow-scrolling:touch}.scrolling-auto{-webkit-overflow-scrolling:auto}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-20{padding:5rem}.p-24{padding:6rem}.p-32{padding:8rem}.p-40{padding:10rem}.p-48{padding:12rem}.p-56{padding:14rem}.p-64{padding:16rem}.p-px{padding:1px}.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-8{padding-left:2rem;padding-right:2rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-12{padding-left:3rem;padding-right:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.px-16{padding-left:4rem;padding-right:4rem}.py-20{padding-top:5rem;padding-bottom:5rem}.px-20{padding-left:5rem;padding-right:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.px-24{padding-left:6rem;padding-right:6rem}.py-32{padding-top:8rem;padding-bottom:8rem}.px-32{padding-left:8rem;padding-right:8rem}.py-40{padding-top:10rem;padding-bottom:10rem}.px-40{padding-left:10rem;padding-right:10rem}.py-48{padding-top:12rem;padding-bottom:12rem}.px-48{padding-left:12rem;padding-right:12rem}.py-56{padding-top:14rem;padding-bottom:14rem}.px-56{padding-left:14rem;padding-right:14rem}.py-64{padding-top:16rem;padding-bottom:16rem}.px-64{padding-left:16rem;padding-right:16rem}.py-px{padding-top:1px;padding-bottom:1px}.px-px{padding-left:1px;padding-right:1px}.pt-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-8{padding-top:2rem}.pr-8{padding-right:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pt-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.pt-12{padding-top:3rem}.pr-12{padding-right:3rem}.pb-12{padding-bottom:3rem}.pl-12{padding-left:3rem}.pt-16{padding-top:4rem}.pr-16{padding-right:4rem}.pb-16{padding-bottom:4rem}.pl-16{padding-left:4rem}.pt-20{padding-top:5rem}.pr-20{padding-right:5rem}.pb-20{padding-bottom:5rem}.pl-20{padding-left:5rem}.pt-24{padding-top:6rem}.pr-24{padding-right:6rem}.pb-24{padding-bottom:6rem}.pl-24{padding-left:6rem}.pt-32{padding-top:8rem}.pr-32{padding-right:8rem}.pb-32{padding-bottom:8rem}.pl-32{padding-left:8rem}.pt-40{padding-top:10rem}.pr-40{padding-right:10rem}.pb-40{padding-bottom:10rem}.pl-40{padding-left:10rem}.pt-48{padding-top:12rem}.pr-48{padding-right:12rem}.pb-48{padding-bottom:12rem}.pl-48{padding-left:12rem}.pt-56{padding-top:14rem}.pr-56{padding-right:14rem}.pb-56{padding-bottom:14rem}.pl-56{padding-left:14rem}.pt-64{padding-top:16rem}.pr-64{padding-right:16rem}.pb-64{padding-bottom:16rem}.pl-64{padding-left:16rem}.pt-px{padding-top:1px}.pr-px{padding-right:1px}.pb-px{padding-bottom:1px}.pl-px{padding-left:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-auto{top:auto;right:auto;bottom:auto;left:auto}.inset-y-0{top:0;bottom:0}.inset-x-0{right:0;left:0}.inset-y-auto{top:auto;bottom:auto}.inset-x-auto{right:auto;left:auto}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-auto{top:auto}.right-auto{right:auto}.bottom-auto{bottom:auto}.left-auto{left:auto}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.shadow-none{box-shadow:none}.hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.hover\:shadow-none:hover{box-shadow:none}.focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.focus\:shadow-none:focus{box-shadow:none}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-transparent{color:transparent}.text-black{color:#000}.text-white{color:#fff}.text-gray-100{color:#f7fafc}.text-gray-200{color:#edf2f7}.text-gray-300{color:#e2e8f0}.text-gray-400{color:#cbd5e0}.text-gray-500{color:#a0aec0}.text-gray-600{color:#718096}.text-gray-700{color:#4a5568}.text-gray-800{color:#2d3748}.text-gray-900{color:#1a202c}.text-red-100{color:#fff5f5}.text-red-200{color:#fed7d7}.text-red-300{color:#feb2b2}.text-red-400{color:#fc8181}.text-red-500{color:#f56565}.text-red-600{color:#e53e3e}.text-red-700{color:#c53030}.text-red-800{color:#9b2c2c}.text-red-900{color:#742a2a}.text-orange-100{color:#fffaf0}.text-orange-200{color:#feebc8}.text-orange-300{color:#fbd38d}.text-orange-400{color:#f6ad55}.text-orange-500{color:#ed8936}.text-orange-600{color:#dd6b20}.text-orange-700{color:#c05621}.text-orange-800{color:#9c4221}.text-orange-900{color:#7b341e}.text-yellow-100{color:ivory}.text-yellow-200{color:#fefcbf}.text-yellow-300{color:#faf089}.text-yellow-400{color:#f6e05e}.text-yellow-500{color:#ecc94b}.text-yellow-600{color:#d69e2e}.text-yellow-700{color:#b7791f}.text-yellow-800{color:#975a16}.text-yellow-900{color:#744210}.text-green-100{color:#f0fff4}.text-green-200{color:#c6f6d5}.text-green-300{color:#9ae6b4}.text-green-400{color:#68d391}.text-green-500{color:#48bb78}.text-green-600{color:#38a169}.text-green-700{color:#2f855a}.text-green-800{color:#276749}.text-green-900{color:#22543d}.text-teal-100{color:#e6fffa}.text-teal-200{color:#b2f5ea}.text-teal-300{color:#81e6d9}.text-teal-400{color:#4fd1c5}.text-teal-500{color:#38b2ac}.text-teal-600{color:#319795}.text-teal-700{color:#2c7a7b}.text-teal-800{color:#285e61}.text-teal-900{color:#234e52}.text-blue-100{color:#ebf8ff}.text-blue-200{color:#bee3f8}.text-blue-300{color:#90cdf4}.text-blue-400{color:#63b3ed}.text-blue-500{color:#4299e1}.text-blue-600{color:#3182ce}.text-blue-700{color:#2b6cb0}.text-blue-800{color:#2c5282}.text-blue-900{color:#2a4365}.text-indigo-100{color:#ebf4ff}.text-indigo-200{color:#c3dafe}.text-indigo-300{color:#a3bffa}.text-indigo-400{color:#7f9cf5}.text-indigo-500{color:#667eea}.text-indigo-600{color:#5a67d8}.text-indigo-700{color:#4c51bf}.text-indigo-800{color:#434190}.text-indigo-900{color:#3c366b}.text-purple-100{color:#faf5ff}.text-purple-200{color:#e9d8fd}.text-purple-300{color:#d6bcfa}.text-purple-400{color:#b794f4}.text-purple-500{color:#9f7aea}.text-purple-600{color:#805ad5}.text-purple-700{color:#6b46c1}.text-purple-800{color:#553c9a}.text-purple-900{color:#44337a}.text-pink-100{color:#fff5f7}.text-pink-200{color:#fed7e2}.text-pink-300{color:#fbb6ce}.text-pink-400{color:#f687b3}.text-pink-500{color:#ed64a6}.text-pink-600{color:#d53f8c}.text-pink-700{color:#b83280}.text-pink-800{color:#97266d}.text-pink-900{color:#702459}.hover\:text-transparent:hover{color:transparent}.hover\:text-black:hover{color:#000}.hover\:text-white:hover{color:#fff}.hover\:text-gray-100:hover{color:#f7fafc}.hover\:text-gray-200:hover{color:#edf2f7}.hover\:text-gray-300:hover{color:#e2e8f0}.hover\:text-gray-400:hover{color:#cbd5e0}.hover\:text-gray-500:hover{color:#a0aec0}.hover\:text-gray-600:hover{color:#718096}.hover\:text-gray-700:hover{color:#4a5568}.hover\:text-gray-800:hover{color:#2d3748}.hover\:text-gray-900:hover{color:#1a202c}.hover\:text-red-100:hover{color:#fff5f5}.hover\:text-red-200:hover{color:#fed7d7}.hover\:text-red-300:hover{color:#feb2b2}.hover\:text-red-400:hover{color:#fc8181}.hover\:text-red-500:hover{color:#f56565}.hover\:text-red-600:hover{color:#e53e3e}.hover\:text-red-700:hover{color:#c53030}.hover\:text-red-800:hover{color:#9b2c2c}.hover\:text-red-900:hover{color:#742a2a}.hover\:text-orange-100:hover{color:#fffaf0}.hover\:text-orange-200:hover{color:#feebc8}.hover\:text-orange-300:hover{color:#fbd38d}.hover\:text-orange-400:hover{color:#f6ad55}.hover\:text-orange-500:hover{color:#ed8936}.hover\:text-orange-600:hover{color:#dd6b20}.hover\:text-orange-700:hover{color:#c05621}.hover\:text-orange-800:hover{color:#9c4221}.hover\:text-orange-900:hover{color:#7b341e}.hover\:text-yellow-100:hover{color:ivory}.hover\:text-yellow-200:hover{color:#fefcbf}.hover\:text-yellow-300:hover{color:#faf089}.hover\:text-yellow-400:hover{color:#f6e05e}.hover\:text-yellow-500:hover{color:#ecc94b}.hover\:text-yellow-600:hover{color:#d69e2e}.hover\:text-yellow-700:hover{color:#b7791f}.hover\:text-yellow-800:hover{color:#975a16}.hover\:text-yellow-900:hover{color:#744210}.hover\:text-green-100:hover{color:#f0fff4}.hover\:text-green-200:hover{color:#c6f6d5}.hover\:text-green-300:hover{color:#9ae6b4}.hover\:text-green-400:hover{color:#68d391}.hover\:text-green-500:hover{color:#48bb78}.hover\:text-green-600:hover{color:#38a169}.hover\:text-green-700:hover{color:#2f855a}.hover\:text-green-800:hover{color:#276749}.hover\:text-green-900:hover{color:#22543d}.hover\:text-teal-100:hover{color:#e6fffa}.hover\:text-teal-200:hover{color:#b2f5ea}.hover\:text-teal-300:hover{color:#81e6d9}.hover\:text-teal-400:hover{color:#4fd1c5}.hover\:text-teal-500:hover{color:#38b2ac}.hover\:text-teal-600:hover{color:#319795}.hover\:text-teal-700:hover{color:#2c7a7b}.hover\:text-teal-800:hover{color:#285e61}.hover\:text-teal-900:hover{color:#234e52}.hover\:text-blue-100:hover{color:#ebf8ff}.hover\:text-blue-200:hover{color:#bee3f8}.hover\:text-blue-300:hover{color:#90cdf4}.hover\:text-blue-400:hover{color:#63b3ed}.hover\:text-blue-500:hover{color:#4299e1}.hover\:text-blue-600:hover{color:#3182ce}.hover\:text-blue-700:hover{color:#2b6cb0}.hover\:text-blue-800:hover{color:#2c5282}.hover\:text-blue-900:hover{color:#2a4365}.hover\:text-indigo-100:hover{color:#ebf4ff}.hover\:text-indigo-200:hover{color:#c3dafe}.hover\:text-indigo-300:hover{color:#a3bffa}.hover\:text-indigo-400:hover{color:#7f9cf5}.hover\:text-indigo-500:hover{color:#667eea}.hover\:text-indigo-600:hover{color:#5a67d8}.hover\:text-indigo-700:hover{color:#4c51bf}.hover\:text-indigo-800:hover{color:#434190}.hover\:text-indigo-900:hover{color:#3c366b}.hover\:text-purple-100:hover{color:#faf5ff}.hover\:text-purple-200:hover{color:#e9d8fd}.hover\:text-purple-300:hover{color:#d6bcfa}.hover\:text-purple-400:hover{color:#b794f4}.hover\:text-purple-500:hover{color:#9f7aea}.hover\:text-purple-600:hover{color:#805ad5}.hover\:text-purple-700:hover{color:#6b46c1}.hover\:text-purple-800:hover{color:#553c9a}.hover\:text-purple-900:hover{color:#44337a}.hover\:text-pink-100:hover{color:#fff5f7}.hover\:text-pink-200:hover{color:#fed7e2}.hover\:text-pink-300:hover{color:#fbb6ce}.hover\:text-pink-400:hover{color:#f687b3}.hover\:text-pink-500:hover{color:#ed64a6}.hover\:text-pink-600:hover{color:#d53f8c}.hover\:text-pink-700:hover{color:#b83280}.hover\:text-pink-800:hover{color:#97266d}.hover\:text-pink-900:hover{color:#702459}.focus\:text-transparent:focus{color:transparent}.focus\:text-black:focus{color:#000}.focus\:text-white:focus{color:#fff}.focus\:text-gray-100:focus{color:#f7fafc}.focus\:text-gray-200:focus{color:#edf2f7}.focus\:text-gray-300:focus{color:#e2e8f0}.focus\:text-gray-400:focus{color:#cbd5e0}.focus\:text-gray-500:focus{color:#a0aec0}.focus\:text-gray-600:focus{color:#718096}.focus\:text-gray-700:focus{color:#4a5568}.focus\:text-gray-800:focus{color:#2d3748}.focus\:text-gray-900:focus{color:#1a202c}.focus\:text-red-100:focus{color:#fff5f5}.focus\:text-red-200:focus{color:#fed7d7}.focus\:text-red-300:focus{color:#feb2b2}.focus\:text-red-400:focus{color:#fc8181}.focus\:text-red-500:focus{color:#f56565}.focus\:text-red-600:focus{color:#e53e3e}.focus\:text-red-700:focus{color:#c53030}.focus\:text-red-800:focus{color:#9b2c2c}.focus\:text-red-900:focus{color:#742a2a}.focus\:text-orange-100:focus{color:#fffaf0}.focus\:text-orange-200:focus{color:#feebc8}.focus\:text-orange-300:focus{color:#fbd38d}.focus\:text-orange-400:focus{color:#f6ad55}.focus\:text-orange-500:focus{color:#ed8936}.focus\:text-orange-600:focus{color:#dd6b20}.focus\:text-orange-700:focus{color:#c05621}.focus\:text-orange-800:focus{color:#9c4221}.focus\:text-orange-900:focus{color:#7b341e}.focus\:text-yellow-100:focus{color:ivory}.focus\:text-yellow-200:focus{color:#fefcbf}.focus\:text-yellow-300:focus{color:#faf089}.focus\:text-yellow-400:focus{color:#f6e05e}.focus\:text-yellow-500:focus{color:#ecc94b}.focus\:text-yellow-600:focus{color:#d69e2e}.focus\:text-yellow-700:focus{color:#b7791f}.focus\:text-yellow-800:focus{color:#975a16}.focus\:text-yellow-900:focus{color:#744210}.focus\:text-green-100:focus{color:#f0fff4}.focus\:text-green-200:focus{color:#c6f6d5}.focus\:text-green-300:focus{color:#9ae6b4}.focus\:text-green-400:focus{color:#68d391}.focus\:text-green-500:focus{color:#48bb78}.focus\:text-green-600:focus{color:#38a169}.focus\:text-green-700:focus{color:#2f855a}.focus\:text-green-800:focus{color:#276749}.focus\:text-green-900:focus{color:#22543d}.focus\:text-teal-100:focus{color:#e6fffa}.focus\:text-teal-200:focus{color:#b2f5ea}.focus\:text-teal-300:focus{color:#81e6d9}.focus\:text-teal-400:focus{color:#4fd1c5}.focus\:text-teal-500:focus{color:#38b2ac}.focus\:text-teal-600:focus{color:#319795}.focus\:text-teal-700:focus{color:#2c7a7b}.focus\:text-teal-800:focus{color:#285e61}.focus\:text-teal-900:focus{color:#234e52}.focus\:text-blue-100:focus{color:#ebf8ff}.focus\:text-blue-200:focus{color:#bee3f8}.focus\:text-blue-300:focus{color:#90cdf4}.focus\:text-blue-400:focus{color:#63b3ed}.focus\:text-blue-500:focus{color:#4299e1}.focus\:text-blue-600:focus{color:#3182ce}.focus\:text-blue-700:focus{color:#2b6cb0}.focus\:text-blue-800:focus{color:#2c5282}.focus\:text-blue-900:focus{color:#2a4365}.focus\:text-indigo-100:focus{color:#ebf4ff}.focus\:text-indigo-200:focus{color:#c3dafe}.focus\:text-indigo-300:focus{color:#a3bffa}.focus\:text-indigo-400:focus{color:#7f9cf5}.focus\:text-indigo-500:focus{color:#667eea}.focus\:text-indigo-600:focus{color:#5a67d8}.focus\:text-indigo-700:focus{color:#4c51bf}.focus\:text-indigo-800:focus{color:#434190}.focus\:text-indigo-900:focus{color:#3c366b}.focus\:text-purple-100:focus{color:#faf5ff}.focus\:text-purple-200:focus{color:#e9d8fd}.focus\:text-purple-300:focus{color:#d6bcfa}.focus\:text-purple-400:focus{color:#b794f4}.focus\:text-purple-500:focus{color:#9f7aea}.focus\:text-purple-600:focus{color:#805ad5}.focus\:text-purple-700:focus{color:#6b46c1}.focus\:text-purple-800:focus{color:#553c9a}.focus\:text-purple-900:focus{color:#44337a}.focus\:text-pink-100:focus{color:#fff5f7}.focus\:text-pink-200:focus{color:#fed7e2}.focus\:text-pink-300:focus{color:#fbb6ce}.focus\:text-pink-400:focus{color:#f687b3}.focus\:text-pink-500:focus{color:#ed64a6}.focus\:text-pink-600:focus{color:#d53f8c}.focus\:text-pink-700:focus{color:#b83280}.focus\:text-pink-800:focus{color:#97266d}.focus\:text-pink-900:focus{color:#702459}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.text-5xl{font-size:3rem}.text-6xl{font-size:4rem}.italic{font-style:italic}.not-italic{font-style:normal}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.hover\:underline:hover{text-decoration:underline}.hover\:line-through:hover{text-decoration:line-through}.hover\:no-underline:hover{text-decoration:none}.focus\:underline:focus{text-decoration:underline}.focus\:line-through:focus{text-decoration:line-through}.focus\:no-underline:focus{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.tracking-tighter{letter-spacing:-.05em}.tracking-tight{letter-spacing:-.025em}.tracking-normal{letter-spacing:0}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.visible{visibility:visible}.invisible{visibility:hidden}.whitespace-normal{white-space:normal}.whitespace-no-wrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-0{width:0}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-32{width:8rem}.w-40{width:10rem}.w-48{width:12rem}.w-56{width:14rem}.w-64{width:16rem}.w-auto{width:auto}.w-px{width:1px}.w-1\/2{width:50%}.w-1\/3{width:33.33333%}.w-2\/3{width:66.66667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-1\/6{width:16.66667%}.w-2\/6{width:33.33333%}.w-3\/6{width:50%}.w-4\/6{width:66.66667%}.w-5\/6{width:83.33333%}.w-1\/12{width:8.33333%}.w-2\/12{width:16.66667%}.w-3\/12{width:25%}.w-4\/12{width:33.33333%}.w-5\/12{width:41.66667%}.w-6\/12{width:50%}.w-7\/12{width:58.33333%}.w-8\/12{width:66.66667%}.w-9\/12{width:75%}.w-10\/12{width:83.33333%}.w-11\/12{width:91.66667%}.w-full{width:100%}.w-screen{width:100vw}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}@media (min-width:640px){.sm\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.sm\:bg-fixed{background-attachment:fixed}.sm\:bg-local{background-attachment:local}.sm\:bg-scroll{background-attachment:scroll}.sm\:bg-transparent{background-color:transparent}.sm\:bg-black{background-color:#000}.sm\:bg-white{background-color:#fff}.sm\:bg-gray-100{background-color:#f7fafc}.sm\:bg-gray-200{background-color:#edf2f7}.sm\:bg-gray-300{background-color:#e2e8f0}.sm\:bg-gray-400{background-color:#cbd5e0}.sm\:bg-gray-500{background-color:#a0aec0}.sm\:bg-gray-600{background-color:#718096}.sm\:bg-gray-700{background-color:#4a5568}.sm\:bg-gray-800{background-color:#2d3748}.sm\:bg-gray-900{background-color:#1a202c}.sm\:bg-red-100{background-color:#fff5f5}.sm\:bg-red-200{background-color:#fed7d7}.sm\:bg-red-300{background-color:#feb2b2}.sm\:bg-red-400{background-color:#fc8181}.sm\:bg-red-500{background-color:#f56565}.sm\:bg-red-600{background-color:#e53e3e}.sm\:bg-red-700{background-color:#c53030}.sm\:bg-red-800{background-color:#9b2c2c}.sm\:bg-red-900{background-color:#742a2a}.sm\:bg-orange-100{background-color:#fffaf0}.sm\:bg-orange-200{background-color:#feebc8}.sm\:bg-orange-300{background-color:#fbd38d}.sm\:bg-orange-400{background-color:#f6ad55}.sm\:bg-orange-500{background-color:#ed8936}.sm\:bg-orange-600{background-color:#dd6b20}.sm\:bg-orange-700{background-color:#c05621}.sm\:bg-orange-800{background-color:#9c4221}.sm\:bg-orange-900{background-color:#7b341e}.sm\:bg-yellow-100{background-color:ivory}.sm\:bg-yellow-200{background-color:#fefcbf}.sm\:bg-yellow-300{background-color:#faf089}.sm\:bg-yellow-400{background-color:#f6e05e}.sm\:bg-yellow-500{background-color:#ecc94b}.sm\:bg-yellow-600{background-color:#d69e2e}.sm\:bg-yellow-700{background-color:#b7791f}.sm\:bg-yellow-800{background-color:#975a16}.sm\:bg-yellow-900{background-color:#744210}.sm\:bg-green-100{background-color:#f0fff4}.sm\:bg-green-200{background-color:#c6f6d5}.sm\:bg-green-300{background-color:#9ae6b4}.sm\:bg-green-400{background-color:#68d391}.sm\:bg-green-500{background-color:#48bb78}.sm\:bg-green-600{background-color:#38a169}.sm\:bg-green-700{background-color:#2f855a}.sm\:bg-green-800{background-color:#276749}.sm\:bg-green-900{background-color:#22543d}.sm\:bg-teal-100{background-color:#e6fffa}.sm\:bg-teal-200{background-color:#b2f5ea}.sm\:bg-teal-300{background-color:#81e6d9}.sm\:bg-teal-400{background-color:#4fd1c5}.sm\:bg-teal-500{background-color:#38b2ac}.sm\:bg-teal-600{background-color:#319795}.sm\:bg-teal-700{background-color:#2c7a7b}.sm\:bg-teal-800{background-color:#285e61}.sm\:bg-teal-900{background-color:#234e52}.sm\:bg-blue-100{background-color:#ebf8ff}.sm\:bg-blue-200{background-color:#bee3f8}.sm\:bg-blue-300{background-color:#90cdf4}.sm\:bg-blue-400{background-color:#63b3ed}.sm\:bg-blue-500{background-color:#4299e1}.sm\:bg-blue-600{background-color:#3182ce}.sm\:bg-blue-700{background-color:#2b6cb0}.sm\:bg-blue-800{background-color:#2c5282}.sm\:bg-blue-900{background-color:#2a4365}.sm\:bg-indigo-100{background-color:#ebf4ff}.sm\:bg-indigo-200{background-color:#c3dafe}.sm\:bg-indigo-300{background-color:#a3bffa}.sm\:bg-indigo-400{background-color:#7f9cf5}.sm\:bg-indigo-500{background-color:#667eea}.sm\:bg-indigo-600{background-color:#5a67d8}.sm\:bg-indigo-700{background-color:#4c51bf}.sm\:bg-indigo-800{background-color:#434190}.sm\:bg-indigo-900{background-color:#3c366b}.sm\:bg-purple-100{background-color:#faf5ff}.sm\:bg-purple-200{background-color:#e9d8fd}.sm\:bg-purple-300{background-color:#d6bcfa}.sm\:bg-purple-400{background-color:#b794f4}.sm\:bg-purple-500{background-color:#9f7aea}.sm\:bg-purple-600{background-color:#805ad5}.sm\:bg-purple-700{background-color:#6b46c1}.sm\:bg-purple-800{background-color:#553c9a}.sm\:bg-purple-900{background-color:#44337a}.sm\:bg-pink-100{background-color:#fff5f7}.sm\:bg-pink-200{background-color:#fed7e2}.sm\:bg-pink-300{background-color:#fbb6ce}.sm\:bg-pink-400{background-color:#f687b3}.sm\:bg-pink-500{background-color:#ed64a6}.sm\:bg-pink-600{background-color:#d53f8c}.sm\:bg-pink-700{background-color:#b83280}.sm\:bg-pink-800{background-color:#97266d}.sm\:bg-pink-900{background-color:#702459}.sm\:hover\:bg-transparent:hover{background-color:transparent}.sm\:hover\:bg-black:hover{background-color:#000}.sm\:hover\:bg-white:hover{background-color:#fff}.sm\:hover\:bg-gray-100:hover{background-color:#f7fafc}.sm\:hover\:bg-gray-200:hover{background-color:#edf2f7}.sm\:hover\:bg-gray-300:hover{background-color:#e2e8f0}.sm\:hover\:bg-gray-400:hover{background-color:#cbd5e0}.sm\:hover\:bg-gray-500:hover{background-color:#a0aec0}.sm\:hover\:bg-gray-600:hover{background-color:#718096}.sm\:hover\:bg-gray-700:hover{background-color:#4a5568}.sm\:hover\:bg-gray-800:hover{background-color:#2d3748}.sm\:hover\:bg-gray-900:hover{background-color:#1a202c}.sm\:hover\:bg-red-100:hover{background-color:#fff5f5}.sm\:hover\:bg-red-200:hover{background-color:#fed7d7}.sm\:hover\:bg-red-300:hover{background-color:#feb2b2}.sm\:hover\:bg-red-400:hover{background-color:#fc8181}.sm\:hover\:bg-red-500:hover{background-color:#f56565}.sm\:hover\:bg-red-600:hover{background-color:#e53e3e}.sm\:hover\:bg-red-700:hover{background-color:#c53030}.sm\:hover\:bg-red-800:hover{background-color:#9b2c2c}.sm\:hover\:bg-red-900:hover{background-color:#742a2a}.sm\:hover\:bg-orange-100:hover{background-color:#fffaf0}.sm\:hover\:bg-orange-200:hover{background-color:#feebc8}.sm\:hover\:bg-orange-300:hover{background-color:#fbd38d}.sm\:hover\:bg-orange-400:hover{background-color:#f6ad55}.sm\:hover\:bg-orange-500:hover{background-color:#ed8936}.sm\:hover\:bg-orange-600:hover{background-color:#dd6b20}.sm\:hover\:bg-orange-700:hover{background-color:#c05621}.sm\:hover\:bg-orange-800:hover{background-color:#9c4221}.sm\:hover\:bg-orange-900:hover{background-color:#7b341e}.sm\:hover\:bg-yellow-100:hover{background-color:ivory}.sm\:hover\:bg-yellow-200:hover{background-color:#fefcbf}.sm\:hover\:bg-yellow-300:hover{background-color:#faf089}.sm\:hover\:bg-yellow-400:hover{background-color:#f6e05e}.sm\:hover\:bg-yellow-500:hover{background-color:#ecc94b}.sm\:hover\:bg-yellow-600:hover{background-color:#d69e2e}.sm\:hover\:bg-yellow-700:hover{background-color:#b7791f}.sm\:hover\:bg-yellow-800:hover{background-color:#975a16}.sm\:hover\:bg-yellow-900:hover{background-color:#744210}.sm\:hover\:bg-green-100:hover{background-color:#f0fff4}.sm\:hover\:bg-green-200:hover{background-color:#c6f6d5}.sm\:hover\:bg-green-300:hover{background-color:#9ae6b4}.sm\:hover\:bg-green-400:hover{background-color:#68d391}.sm\:hover\:bg-green-500:hover{background-color:#48bb78}.sm\:hover\:bg-green-600:hover{background-color:#38a169}.sm\:hover\:bg-green-700:hover{background-color:#2f855a}.sm\:hover\:bg-green-800:hover{background-color:#276749}.sm\:hover\:bg-green-900:hover{background-color:#22543d}.sm\:hover\:bg-teal-100:hover{background-color:#e6fffa}.sm\:hover\:bg-teal-200:hover{background-color:#b2f5ea}.sm\:hover\:bg-teal-300:hover{background-color:#81e6d9}.sm\:hover\:bg-teal-400:hover{background-color:#4fd1c5}.sm\:hover\:bg-teal-500:hover{background-color:#38b2ac}.sm\:hover\:bg-teal-600:hover{background-color:#319795}.sm\:hover\:bg-teal-700:hover{background-color:#2c7a7b}.sm\:hover\:bg-teal-800:hover{background-color:#285e61}.sm\:hover\:bg-teal-900:hover{background-color:#234e52}.sm\:hover\:bg-blue-100:hover{background-color:#ebf8ff}.sm\:hover\:bg-blue-200:hover{background-color:#bee3f8}.sm\:hover\:bg-blue-300:hover{background-color:#90cdf4}.sm\:hover\:bg-blue-400:hover{background-color:#63b3ed}.sm\:hover\:bg-blue-500:hover{background-color:#4299e1}.sm\:hover\:bg-blue-600:hover{background-color:#3182ce}.sm\:hover\:bg-blue-700:hover{background-color:#2b6cb0}.sm\:hover\:bg-blue-800:hover{background-color:#2c5282}.sm\:hover\:bg-blue-900:hover{background-color:#2a4365}.sm\:hover\:bg-indigo-100:hover{background-color:#ebf4ff}.sm\:hover\:bg-indigo-200:hover{background-color:#c3dafe}.sm\:hover\:bg-indigo-300:hover{background-color:#a3bffa}.sm\:hover\:bg-indigo-400:hover{background-color:#7f9cf5}.sm\:hover\:bg-indigo-500:hover{background-color:#667eea}.sm\:hover\:bg-indigo-600:hover{background-color:#5a67d8}.sm\:hover\:bg-indigo-700:hover{background-color:#4c51bf}.sm\:hover\:bg-indigo-800:hover{background-color:#434190}.sm\:hover\:bg-indigo-900:hover{background-color:#3c366b}.sm\:hover\:bg-purple-100:hover{background-color:#faf5ff}.sm\:hover\:bg-purple-200:hover{background-color:#e9d8fd}.sm\:hover\:bg-purple-300:hover{background-color:#d6bcfa}.sm\:hover\:bg-purple-400:hover{background-color:#b794f4}.sm\:hover\:bg-purple-500:hover{background-color:#9f7aea}.sm\:hover\:bg-purple-600:hover{background-color:#805ad5}.sm\:hover\:bg-purple-700:hover{background-color:#6b46c1}.sm\:hover\:bg-purple-800:hover{background-color:#553c9a}.sm\:hover\:bg-purple-900:hover{background-color:#44337a}.sm\:hover\:bg-pink-100:hover{background-color:#fff5f7}.sm\:hover\:bg-pink-200:hover{background-color:#fed7e2}.sm\:hover\:bg-pink-300:hover{background-color:#fbb6ce}.sm\:hover\:bg-pink-400:hover{background-color:#f687b3}.sm\:hover\:bg-pink-500:hover{background-color:#ed64a6}.sm\:hover\:bg-pink-600:hover{background-color:#d53f8c}.sm\:hover\:bg-pink-700:hover{background-color:#b83280}.sm\:hover\:bg-pink-800:hover{background-color:#97266d}.sm\:hover\:bg-pink-900:hover{background-color:#702459}.sm\:focus\:bg-transparent:focus{background-color:transparent}.sm\:focus\:bg-black:focus{background-color:#000}.sm\:focus\:bg-white:focus{background-color:#fff}.sm\:focus\:bg-gray-100:focus{background-color:#f7fafc}.sm\:focus\:bg-gray-200:focus{background-color:#edf2f7}.sm\:focus\:bg-gray-300:focus{background-color:#e2e8f0}.sm\:focus\:bg-gray-400:focus{background-color:#cbd5e0}.sm\:focus\:bg-gray-500:focus{background-color:#a0aec0}.sm\:focus\:bg-gray-600:focus{background-color:#718096}.sm\:focus\:bg-gray-700:focus{background-color:#4a5568}.sm\:focus\:bg-gray-800:focus{background-color:#2d3748}.sm\:focus\:bg-gray-900:focus{background-color:#1a202c}.sm\:focus\:bg-red-100:focus{background-color:#fff5f5}.sm\:focus\:bg-red-200:focus{background-color:#fed7d7}.sm\:focus\:bg-red-300:focus{background-color:#feb2b2}.sm\:focus\:bg-red-400:focus{background-color:#fc8181}.sm\:focus\:bg-red-500:focus{background-color:#f56565}.sm\:focus\:bg-red-600:focus{background-color:#e53e3e}.sm\:focus\:bg-red-700:focus{background-color:#c53030}.sm\:focus\:bg-red-800:focus{background-color:#9b2c2c}.sm\:focus\:bg-red-900:focus{background-color:#742a2a}.sm\:focus\:bg-orange-100:focus{background-color:#fffaf0}.sm\:focus\:bg-orange-200:focus{background-color:#feebc8}.sm\:focus\:bg-orange-300:focus{background-color:#fbd38d}.sm\:focus\:bg-orange-400:focus{background-color:#f6ad55}.sm\:focus\:bg-orange-500:focus{background-color:#ed8936}.sm\:focus\:bg-orange-600:focus{background-color:#dd6b20}.sm\:focus\:bg-orange-700:focus{background-color:#c05621}.sm\:focus\:bg-orange-800:focus{background-color:#9c4221}.sm\:focus\:bg-orange-900:focus{background-color:#7b341e}.sm\:focus\:bg-yellow-100:focus{background-color:ivory}.sm\:focus\:bg-yellow-200:focus{background-color:#fefcbf}.sm\:focus\:bg-yellow-300:focus{background-color:#faf089}.sm\:focus\:bg-yellow-400:focus{background-color:#f6e05e}.sm\:focus\:bg-yellow-500:focus{background-color:#ecc94b}.sm\:focus\:bg-yellow-600:focus{background-color:#d69e2e}.sm\:focus\:bg-yellow-700:focus{background-color:#b7791f}.sm\:focus\:bg-yellow-800:focus{background-color:#975a16}.sm\:focus\:bg-yellow-900:focus{background-color:#744210}.sm\:focus\:bg-green-100:focus{background-color:#f0fff4}.sm\:focus\:bg-green-200:focus{background-color:#c6f6d5}.sm\:focus\:bg-green-300:focus{background-color:#9ae6b4}.sm\:focus\:bg-green-400:focus{background-color:#68d391}.sm\:focus\:bg-green-500:focus{background-color:#48bb78}.sm\:focus\:bg-green-600:focus{background-color:#38a169}.sm\:focus\:bg-green-700:focus{background-color:#2f855a}.sm\:focus\:bg-green-800:focus{background-color:#276749}.sm\:focus\:bg-green-900:focus{background-color:#22543d}.sm\:focus\:bg-teal-100:focus{background-color:#e6fffa}.sm\:focus\:bg-teal-200:focus{background-color:#b2f5ea}.sm\:focus\:bg-teal-300:focus{background-color:#81e6d9}.sm\:focus\:bg-teal-400:focus{background-color:#4fd1c5}.sm\:focus\:bg-teal-500:focus{background-color:#38b2ac}.sm\:focus\:bg-teal-600:focus{background-color:#319795}.sm\:focus\:bg-teal-700:focus{background-color:#2c7a7b}.sm\:focus\:bg-teal-800:focus{background-color:#285e61}.sm\:focus\:bg-teal-900:focus{background-color:#234e52}.sm\:focus\:bg-blue-100:focus{background-color:#ebf8ff}.sm\:focus\:bg-blue-200:focus{background-color:#bee3f8}.sm\:focus\:bg-blue-300:focus{background-color:#90cdf4}.sm\:focus\:bg-blue-400:focus{background-color:#63b3ed}.sm\:focus\:bg-blue-500:focus{background-color:#4299e1}.sm\:focus\:bg-blue-600:focus{background-color:#3182ce}.sm\:focus\:bg-blue-700:focus{background-color:#2b6cb0}.sm\:focus\:bg-blue-800:focus{background-color:#2c5282}.sm\:focus\:bg-blue-900:focus{background-color:#2a4365}.sm\:focus\:bg-indigo-100:focus{background-color:#ebf4ff}.sm\:focus\:bg-indigo-200:focus{background-color:#c3dafe}.sm\:focus\:bg-indigo-300:focus{background-color:#a3bffa}.sm\:focus\:bg-indigo-400:focus{background-color:#7f9cf5}.sm\:focus\:bg-indigo-500:focus{background-color:#667eea}.sm\:focus\:bg-indigo-600:focus{background-color:#5a67d8}.sm\:focus\:bg-indigo-700:focus{background-color:#4c51bf}.sm\:focus\:bg-indigo-800:focus{background-color:#434190}.sm\:focus\:bg-indigo-900:focus{background-color:#3c366b}.sm\:focus\:bg-purple-100:focus{background-color:#faf5ff}.sm\:focus\:bg-purple-200:focus{background-color:#e9d8fd}.sm\:focus\:bg-purple-300:focus{background-color:#d6bcfa}.sm\:focus\:bg-purple-400:focus{background-color:#b794f4}.sm\:focus\:bg-purple-500:focus{background-color:#9f7aea}.sm\:focus\:bg-purple-600:focus{background-color:#805ad5}.sm\:focus\:bg-purple-700:focus{background-color:#6b46c1}.sm\:focus\:bg-purple-800:focus{background-color:#553c9a}.sm\:focus\:bg-purple-900:focus{background-color:#44337a}.sm\:focus\:bg-pink-100:focus{background-color:#fff5f7}.sm\:focus\:bg-pink-200:focus{background-color:#fed7e2}.sm\:focus\:bg-pink-300:focus{background-color:#fbb6ce}.sm\:focus\:bg-pink-400:focus{background-color:#f687b3}.sm\:focus\:bg-pink-500:focus{background-color:#ed64a6}.sm\:focus\:bg-pink-600:focus{background-color:#d53f8c}.sm\:focus\:bg-pink-700:focus{background-color:#b83280}.sm\:focus\:bg-pink-800:focus{background-color:#97266d}.sm\:focus\:bg-pink-900:focus{background-color:#702459}.sm\:bg-bottom{background-position:bottom}.sm\:bg-center{background-position:center}.sm\:bg-left{background-position:left}.sm\:bg-left-bottom{background-position:left bottom}.sm\:bg-left-top{background-position:left top}.sm\:bg-right{background-position:right}.sm\:bg-right-bottom{background-position:right bottom}.sm\:bg-right-top{background-position:right top}.sm\:bg-top{background-position:top}.sm\:bg-repeat{background-repeat:repeat}.sm\:bg-no-repeat{background-repeat:no-repeat}.sm\:bg-repeat-x{background-repeat:repeat-x}.sm\:bg-repeat-y{background-repeat:repeat-y}.sm\:bg-repeat-round{background-repeat:round}.sm\:bg-repeat-space{background-repeat:space}.sm\:bg-auto{background-size:auto}.sm\:bg-cover{background-size:cover}.sm\:bg-contain{background-size:contain}.sm\:border-collapse{border-collapse:collapse}.sm\:border-separate{border-collapse:separate}.sm\:border-transparent{border-color:transparent}.sm\:border-black{border-color:#000}.sm\:border-white{border-color:#fff}.sm\:border-gray-100{border-color:#f7fafc}.sm\:border-gray-200{border-color:#edf2f7}.sm\:border-gray-300{border-color:#e2e8f0}.sm\:border-gray-400{border-color:#cbd5e0}.sm\:border-gray-500{border-color:#a0aec0}.sm\:border-gray-600{border-color:#718096}.sm\:border-gray-700{border-color:#4a5568}.sm\:border-gray-800{border-color:#2d3748}.sm\:border-gray-900{border-color:#1a202c}.sm\:border-red-100{border-color:#fff5f5}.sm\:border-red-200{border-color:#fed7d7}.sm\:border-red-300{border-color:#feb2b2}.sm\:border-red-400{border-color:#fc8181}.sm\:border-red-500{border-color:#f56565}.sm\:border-red-600{border-color:#e53e3e}.sm\:border-red-700{border-color:#c53030}.sm\:border-red-800{border-color:#9b2c2c}.sm\:border-red-900{border-color:#742a2a}.sm\:border-orange-100{border-color:#fffaf0}.sm\:border-orange-200{border-color:#feebc8}.sm\:border-orange-300{border-color:#fbd38d}.sm\:border-orange-400{border-color:#f6ad55}.sm\:border-orange-500{border-color:#ed8936}.sm\:border-orange-600{border-color:#dd6b20}.sm\:border-orange-700{border-color:#c05621}.sm\:border-orange-800{border-color:#9c4221}.sm\:border-orange-900{border-color:#7b341e}.sm\:border-yellow-100{border-color:ivory}.sm\:border-yellow-200{border-color:#fefcbf}.sm\:border-yellow-300{border-color:#faf089}.sm\:border-yellow-400{border-color:#f6e05e}.sm\:border-yellow-500{border-color:#ecc94b}.sm\:border-yellow-600{border-color:#d69e2e}.sm\:border-yellow-700{border-color:#b7791f}.sm\:border-yellow-800{border-color:#975a16}.sm\:border-yellow-900{border-color:#744210}.sm\:border-green-100{border-color:#f0fff4}.sm\:border-green-200{border-color:#c6f6d5}.sm\:border-green-300{border-color:#9ae6b4}.sm\:border-green-400{border-color:#68d391}.sm\:border-green-500{border-color:#48bb78}.sm\:border-green-600{border-color:#38a169}.sm\:border-green-700{border-color:#2f855a}.sm\:border-green-800{border-color:#276749}.sm\:border-green-900{border-color:#22543d}.sm\:border-teal-100{border-color:#e6fffa}.sm\:border-teal-200{border-color:#b2f5ea}.sm\:border-teal-300{border-color:#81e6d9}.sm\:border-teal-400{border-color:#4fd1c5}.sm\:border-teal-500{border-color:#38b2ac}.sm\:border-teal-600{border-color:#319795}.sm\:border-teal-700{border-color:#2c7a7b}.sm\:border-teal-800{border-color:#285e61}.sm\:border-teal-900{border-color:#234e52}.sm\:border-blue-100{border-color:#ebf8ff}.sm\:border-blue-200{border-color:#bee3f8}.sm\:border-blue-300{border-color:#90cdf4}.sm\:border-blue-400{border-color:#63b3ed}.sm\:border-blue-500{border-color:#4299e1}.sm\:border-blue-600{border-color:#3182ce}.sm\:border-blue-700{border-color:#2b6cb0}.sm\:border-blue-800{border-color:#2c5282}.sm\:border-blue-900{border-color:#2a4365}.sm\:border-indigo-100{border-color:#ebf4ff}.sm\:border-indigo-200{border-color:#c3dafe}.sm\:border-indigo-300{border-color:#a3bffa}.sm\:border-indigo-400{border-color:#7f9cf5}.sm\:border-indigo-500{border-color:#667eea}.sm\:border-indigo-600{border-color:#5a67d8}.sm\:border-indigo-700{border-color:#4c51bf}.sm\:border-indigo-800{border-color:#434190}.sm\:border-indigo-900{border-color:#3c366b}.sm\:border-purple-100{border-color:#faf5ff}.sm\:border-purple-200{border-color:#e9d8fd}.sm\:border-purple-300{border-color:#d6bcfa}.sm\:border-purple-400{border-color:#b794f4}.sm\:border-purple-500{border-color:#9f7aea}.sm\:border-purple-600{border-color:#805ad5}.sm\:border-purple-700{border-color:#6b46c1}.sm\:border-purple-800{border-color:#553c9a}.sm\:border-purple-900{border-color:#44337a}.sm\:border-pink-100{border-color:#fff5f7}.sm\:border-pink-200{border-color:#fed7e2}.sm\:border-pink-300{border-color:#fbb6ce}.sm\:border-pink-400{border-color:#f687b3}.sm\:border-pink-500{border-color:#ed64a6}.sm\:border-pink-600{border-color:#d53f8c}.sm\:border-pink-700{border-color:#b83280}.sm\:border-pink-800{border-color:#97266d}.sm\:border-pink-900{border-color:#702459}.sm\:hover\:border-transparent:hover{border-color:transparent}.sm\:hover\:border-black:hover{border-color:#000}.sm\:hover\:border-white:hover{border-color:#fff}.sm\:hover\:border-gray-100:hover{border-color:#f7fafc}.sm\:hover\:border-gray-200:hover{border-color:#edf2f7}.sm\:hover\:border-gray-300:hover{border-color:#e2e8f0}.sm\:hover\:border-gray-400:hover{border-color:#cbd5e0}.sm\:hover\:border-gray-500:hover{border-color:#a0aec0}.sm\:hover\:border-gray-600:hover{border-color:#718096}.sm\:hover\:border-gray-700:hover{border-color:#4a5568}.sm\:hover\:border-gray-800:hover{border-color:#2d3748}.sm\:hover\:border-gray-900:hover{border-color:#1a202c}.sm\:hover\:border-red-100:hover{border-color:#fff5f5}.sm\:hover\:border-red-200:hover{border-color:#fed7d7}.sm\:hover\:border-red-300:hover{border-color:#feb2b2}.sm\:hover\:border-red-400:hover{border-color:#fc8181}.sm\:hover\:border-red-500:hover{border-color:#f56565}.sm\:hover\:border-red-600:hover{border-color:#e53e3e}.sm\:hover\:border-red-700:hover{border-color:#c53030}.sm\:hover\:border-red-800:hover{border-color:#9b2c2c}.sm\:hover\:border-red-900:hover{border-color:#742a2a}.sm\:hover\:border-orange-100:hover{border-color:#fffaf0}.sm\:hover\:border-orange-200:hover{border-color:#feebc8}.sm\:hover\:border-orange-300:hover{border-color:#fbd38d}.sm\:hover\:border-orange-400:hover{border-color:#f6ad55}.sm\:hover\:border-orange-500:hover{border-color:#ed8936}.sm\:hover\:border-orange-600:hover{border-color:#dd6b20}.sm\:hover\:border-orange-700:hover{border-color:#c05621}.sm\:hover\:border-orange-800:hover{border-color:#9c4221}.sm\:hover\:border-orange-900:hover{border-color:#7b341e}.sm\:hover\:border-yellow-100:hover{border-color:ivory}.sm\:hover\:border-yellow-200:hover{border-color:#fefcbf}.sm\:hover\:border-yellow-300:hover{border-color:#faf089}.sm\:hover\:border-yellow-400:hover{border-color:#f6e05e}.sm\:hover\:border-yellow-500:hover{border-color:#ecc94b}.sm\:hover\:border-yellow-600:hover{border-color:#d69e2e}.sm\:hover\:border-yellow-700:hover{border-color:#b7791f}.sm\:hover\:border-yellow-800:hover{border-color:#975a16}.sm\:hover\:border-yellow-900:hover{border-color:#744210}.sm\:hover\:border-green-100:hover{border-color:#f0fff4}.sm\:hover\:border-green-200:hover{border-color:#c6f6d5}.sm\:hover\:border-green-300:hover{border-color:#9ae6b4}.sm\:hover\:border-green-400:hover{border-color:#68d391}.sm\:hover\:border-green-500:hover{border-color:#48bb78}.sm\:hover\:border-green-600:hover{border-color:#38a169}.sm\:hover\:border-green-700:hover{border-color:#2f855a}.sm\:hover\:border-green-800:hover{border-color:#276749}.sm\:hover\:border-green-900:hover{border-color:#22543d}.sm\:hover\:border-teal-100:hover{border-color:#e6fffa}.sm\:hover\:border-teal-200:hover{border-color:#b2f5ea}.sm\:hover\:border-teal-300:hover{border-color:#81e6d9}.sm\:hover\:border-teal-400:hover{border-color:#4fd1c5}.sm\:hover\:border-teal-500:hover{border-color:#38b2ac}.sm\:hover\:border-teal-600:hover{border-color:#319795}.sm\:hover\:border-teal-700:hover{border-color:#2c7a7b}.sm\:hover\:border-teal-800:hover{border-color:#285e61}.sm\:hover\:border-teal-900:hover{border-color:#234e52}.sm\:hover\:border-blue-100:hover{border-color:#ebf8ff}.sm\:hover\:border-blue-200:hover{border-color:#bee3f8}.sm\:hover\:border-blue-300:hover{border-color:#90cdf4}.sm\:hover\:border-blue-400:hover{border-color:#63b3ed}.sm\:hover\:border-blue-500:hover{border-color:#4299e1}.sm\:hover\:border-blue-600:hover{border-color:#3182ce}.sm\:hover\:border-blue-700:hover{border-color:#2b6cb0}.sm\:hover\:border-blue-800:hover{border-color:#2c5282}.sm\:hover\:border-blue-900:hover{border-color:#2a4365}.sm\:hover\:border-indigo-100:hover{border-color:#ebf4ff}.sm\:hover\:border-indigo-200:hover{border-color:#c3dafe}.sm\:hover\:border-indigo-300:hover{border-color:#a3bffa}.sm\:hover\:border-indigo-400:hover{border-color:#7f9cf5}.sm\:hover\:border-indigo-500:hover{border-color:#667eea}.sm\:hover\:border-indigo-600:hover{border-color:#5a67d8}.sm\:hover\:border-indigo-700:hover{border-color:#4c51bf}.sm\:hover\:border-indigo-800:hover{border-color:#434190}.sm\:hover\:border-indigo-900:hover{border-color:#3c366b}.sm\:hover\:border-purple-100:hover{border-color:#faf5ff}.sm\:hover\:border-purple-200:hover{border-color:#e9d8fd}.sm\:hover\:border-purple-300:hover{border-color:#d6bcfa}.sm\:hover\:border-purple-400:hover{border-color:#b794f4}.sm\:hover\:border-purple-500:hover{border-color:#9f7aea}.sm\:hover\:border-purple-600:hover{border-color:#805ad5}.sm\:hover\:border-purple-700:hover{border-color:#6b46c1}.sm\:hover\:border-purple-800:hover{border-color:#553c9a}.sm\:hover\:border-purple-900:hover{border-color:#44337a}.sm\:hover\:border-pink-100:hover{border-color:#fff5f7}.sm\:hover\:border-pink-200:hover{border-color:#fed7e2}.sm\:hover\:border-pink-300:hover{border-color:#fbb6ce}.sm\:hover\:border-pink-400:hover{border-color:#f687b3}.sm\:hover\:border-pink-500:hover{border-color:#ed64a6}.sm\:hover\:border-pink-600:hover{border-color:#d53f8c}.sm\:hover\:border-pink-700:hover{border-color:#b83280}.sm\:hover\:border-pink-800:hover{border-color:#97266d}.sm\:hover\:border-pink-900:hover{border-color:#702459}.sm\:focus\:border-transparent:focus{border-color:transparent}.sm\:focus\:border-black:focus{border-color:#000}.sm\:focus\:border-white:focus{border-color:#fff}.sm\:focus\:border-gray-100:focus{border-color:#f7fafc}.sm\:focus\:border-gray-200:focus{border-color:#edf2f7}.sm\:focus\:border-gray-300:focus{border-color:#e2e8f0}.sm\:focus\:border-gray-400:focus{border-color:#cbd5e0}.sm\:focus\:border-gray-500:focus{border-color:#a0aec0}.sm\:focus\:border-gray-600:focus{border-color:#718096}.sm\:focus\:border-gray-700:focus{border-color:#4a5568}.sm\:focus\:border-gray-800:focus{border-color:#2d3748}.sm\:focus\:border-gray-900:focus{border-color:#1a202c}.sm\:focus\:border-red-100:focus{border-color:#fff5f5}.sm\:focus\:border-red-200:focus{border-color:#fed7d7}.sm\:focus\:border-red-300:focus{border-color:#feb2b2}.sm\:focus\:border-red-400:focus{border-color:#fc8181}.sm\:focus\:border-red-500:focus{border-color:#f56565}.sm\:focus\:border-red-600:focus{border-color:#e53e3e}.sm\:focus\:border-red-700:focus{border-color:#c53030}.sm\:focus\:border-red-800:focus{border-color:#9b2c2c}.sm\:focus\:border-red-900:focus{border-color:#742a2a}.sm\:focus\:border-orange-100:focus{border-color:#fffaf0}.sm\:focus\:border-orange-200:focus{border-color:#feebc8}.sm\:focus\:border-orange-300:focus{border-color:#fbd38d}.sm\:focus\:border-orange-400:focus{border-color:#f6ad55}.sm\:focus\:border-orange-500:focus{border-color:#ed8936}.sm\:focus\:border-orange-600:focus{border-color:#dd6b20}.sm\:focus\:border-orange-700:focus{border-color:#c05621}.sm\:focus\:border-orange-800:focus{border-color:#9c4221}.sm\:focus\:border-orange-900:focus{border-color:#7b341e}.sm\:focus\:border-yellow-100:focus{border-color:ivory}.sm\:focus\:border-yellow-200:focus{border-color:#fefcbf}.sm\:focus\:border-yellow-300:focus{border-color:#faf089}.sm\:focus\:border-yellow-400:focus{border-color:#f6e05e}.sm\:focus\:border-yellow-500:focus{border-color:#ecc94b}.sm\:focus\:border-yellow-600:focus{border-color:#d69e2e}.sm\:focus\:border-yellow-700:focus{border-color:#b7791f}.sm\:focus\:border-yellow-800:focus{border-color:#975a16}.sm\:focus\:border-yellow-900:focus{border-color:#744210}.sm\:focus\:border-green-100:focus{border-color:#f0fff4}.sm\:focus\:border-green-200:focus{border-color:#c6f6d5}.sm\:focus\:border-green-300:focus{border-color:#9ae6b4}.sm\:focus\:border-green-400:focus{border-color:#68d391}.sm\:focus\:border-green-500:focus{border-color:#48bb78}.sm\:focus\:border-green-600:focus{border-color:#38a169}.sm\:focus\:border-green-700:focus{border-color:#2f855a}.sm\:focus\:border-green-800:focus{border-color:#276749}.sm\:focus\:border-green-900:focus{border-color:#22543d}.sm\:focus\:border-teal-100:focus{border-color:#e6fffa}.sm\:focus\:border-teal-200:focus{border-color:#b2f5ea}.sm\:focus\:border-teal-300:focus{border-color:#81e6d9}.sm\:focus\:border-teal-400:focus{border-color:#4fd1c5}.sm\:focus\:border-teal-500:focus{border-color:#38b2ac}.sm\:focus\:border-teal-600:focus{border-color:#319795}.sm\:focus\:border-teal-700:focus{border-color:#2c7a7b}.sm\:focus\:border-teal-800:focus{border-color:#285e61}.sm\:focus\:border-teal-900:focus{border-color:#234e52}.sm\:focus\:border-blue-100:focus{border-color:#ebf8ff}.sm\:focus\:border-blue-200:focus{border-color:#bee3f8}.sm\:focus\:border-blue-300:focus{border-color:#90cdf4}.sm\:focus\:border-blue-400:focus{border-color:#63b3ed}.sm\:focus\:border-blue-500:focus{border-color:#4299e1}.sm\:focus\:border-blue-600:focus{border-color:#3182ce}.sm\:focus\:border-blue-700:focus{border-color:#2b6cb0}.sm\:focus\:border-blue-800:focus{border-color:#2c5282}.sm\:focus\:border-blue-900:focus{border-color:#2a4365}.sm\:focus\:border-indigo-100:focus{border-color:#ebf4ff}.sm\:focus\:border-indigo-200:focus{border-color:#c3dafe}.sm\:focus\:border-indigo-300:focus{border-color:#a3bffa}.sm\:focus\:border-indigo-400:focus{border-color:#7f9cf5}.sm\:focus\:border-indigo-500:focus{border-color:#667eea}.sm\:focus\:border-indigo-600:focus{border-color:#5a67d8}.sm\:focus\:border-indigo-700:focus{border-color:#4c51bf}.sm\:focus\:border-indigo-800:focus{border-color:#434190}.sm\:focus\:border-indigo-900:focus{border-color:#3c366b}.sm\:focus\:border-purple-100:focus{border-color:#faf5ff}.sm\:focus\:border-purple-200:focus{border-color:#e9d8fd}.sm\:focus\:border-purple-300:focus{border-color:#d6bcfa}.sm\:focus\:border-purple-400:focus{border-color:#b794f4}.sm\:focus\:border-purple-500:focus{border-color:#9f7aea}.sm\:focus\:border-purple-600:focus{border-color:#805ad5}.sm\:focus\:border-purple-700:focus{border-color:#6b46c1}.sm\:focus\:border-purple-800:focus{border-color:#553c9a}.sm\:focus\:border-purple-900:focus{border-color:#44337a}.sm\:focus\:border-pink-100:focus{border-color:#fff5f7}.sm\:focus\:border-pink-200:focus{border-color:#fed7e2}.sm\:focus\:border-pink-300:focus{border-color:#fbb6ce}.sm\:focus\:border-pink-400:focus{border-color:#f687b3}.sm\:focus\:border-pink-500:focus{border-color:#ed64a6}.sm\:focus\:border-pink-600:focus{border-color:#d53f8c}.sm\:focus\:border-pink-700:focus{border-color:#b83280}.sm\:focus\:border-pink-800:focus{border-color:#97266d}.sm\:focus\:border-pink-900:focus{border-color:#702459}.sm\:rounded-none{border-radius:0}.sm\:rounded-sm{border-radius:.125rem}.sm\:rounded{border-radius:.25rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:rounded-full{border-radius:9999px}.sm\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.sm\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.sm\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.sm\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.sm\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.sm\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.sm\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.sm\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.sm\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.sm\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.sm\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.sm\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.sm\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.sm\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.sm\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.sm\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.sm\:rounded-tl-none{border-top-left-radius:0}.sm\:rounded-tr-none{border-top-right-radius:0}.sm\:rounded-br-none{border-bottom-right-radius:0}.sm\:rounded-bl-none{border-bottom-left-radius:0}.sm\:rounded-tl-sm{border-top-left-radius:.125rem}.sm\:rounded-tr-sm{border-top-right-radius:.125rem}.sm\:rounded-br-sm{border-bottom-right-radius:.125rem}.sm\:rounded-bl-sm{border-bottom-left-radius:.125rem}.sm\:rounded-tl{border-top-left-radius:.25rem}.sm\:rounded-tr{border-top-right-radius:.25rem}.sm\:rounded-br{border-bottom-right-radius:.25rem}.sm\:rounded-bl{border-bottom-left-radius:.25rem}.sm\:rounded-tl-lg{border-top-left-radius:.5rem}.sm\:rounded-tr-lg{border-top-right-radius:.5rem}.sm\:rounded-br-lg{border-bottom-right-radius:.5rem}.sm\:rounded-bl-lg{border-bottom-left-radius:.5rem}.sm\:rounded-tl-full{border-top-left-radius:9999px}.sm\:rounded-tr-full{border-top-right-radius:9999px}.sm\:rounded-br-full{border-bottom-right-radius:9999px}.sm\:rounded-bl-full{border-bottom-left-radius:9999px}.sm\:border-solid{border-style:solid}.sm\:border-dashed{border-style:dashed}.sm\:border-dotted{border-style:dotted}.sm\:border-none{border-style:none}.sm\:border-0{border-width:0}.sm\:border-2{border-width:2px}.sm\:border-4{border-width:4px}.sm\:border-8{border-width:8px}.sm\:border{border-width:1px}.sm\:border-t-0{border-top-width:0}.sm\:border-r-0{border-right-width:0}.sm\:border-b-0{border-bottom-width:0}.sm\:border-l-0{border-left-width:0}.sm\:border-t-2{border-top-width:2px}.sm\:border-r-2{border-right-width:2px}.sm\:border-b-2{border-bottom-width:2px}.sm\:border-l-2{border-left-width:2px}.sm\:border-t-4{border-top-width:4px}.sm\:border-r-4{border-right-width:4px}.sm\:border-b-4{border-bottom-width:4px}.sm\:border-l-4{border-left-width:4px}.sm\:border-t-8{border-top-width:8px}.sm\:border-r-8{border-right-width:8px}.sm\:border-b-8{border-bottom-width:8px}.sm\:border-l-8{border-left-width:8px}.sm\:border-t{border-top-width:1px}.sm\:border-r{border-right-width:1px}.sm\:border-b{border-bottom-width:1px}.sm\:border-l{border-left-width:1px}.sm\:cursor-auto{cursor:auto}.sm\:cursor-default{cursor:default}.sm\:cursor-pointer{cursor:pointer}.sm\:cursor-wait{cursor:wait}.sm\:cursor-text{cursor:text}.sm\:cursor-move{cursor:move}.sm\:cursor-not-allowed{cursor:not-allowed}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:table{display:table}.sm\:table-row{display:table-row}.sm\:table-cell{display:table-cell}.sm\:hidden{display:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-col{flex-direction:column}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-wrap-reverse{flex-wrap:wrap-reverse}.sm\:flex-no-wrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:items-baseline{align-items:baseline}.sm\:items-stretch{align-items:stretch}.sm\:self-auto{align-self:auto}.sm\:self-start{align-self:flex-start}.sm\:self-end{align-self:flex-end}.sm\:self-center{align-self:center}.sm\:self-stretch{align-self:stretch}.sm\:justify-start{justify-content:flex-start}.sm\:justify-end{justify-content:flex-end}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-around{justify-content:space-around}.sm\:content-center{align-content:center}.sm\:content-start{align-content:flex-start}.sm\:content-end{align-content:flex-end}.sm\:content-between{align-content:space-between}.sm\:content-around{align-content:space-around}.sm\:flex-1{flex:1 1 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-initial{flex:0 1 auto}.sm\:flex-none{flex:none}.sm\:flex-grow-0{flex-grow:0}.sm\:flex-grow{flex-grow:1}.sm\:flex-shrink-0{flex-shrink:0}.sm\:flex-shrink{flex-shrink:1}.sm\:order-1{order:1}.sm\:order-2{order:2}.sm\:order-3{order:3}.sm\:order-4{order:4}.sm\:order-5{order:5}.sm\:order-6{order:6}.sm\:order-7{order:7}.sm\:order-8{order:8}.sm\:order-9{order:9}.sm\:order-10{order:10}.sm\:order-11{order:11}.sm\:order-12{order:12}.sm\:order-first{order:-9999}.sm\:order-last{order:9999}.sm\:order-none{order:0}.sm\:float-right{float:right}.sm\:float-left{float:left}.sm\:float-none{float:none}.sm\:clearfix:after{content:"";display:table;clear:both}.sm\:font-sans{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.sm\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.sm\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.sm\:font-hairline{font-weight:100}.sm\:font-thin{font-weight:200}.sm\:font-light{font-weight:300}.sm\:font-normal{font-weight:400}.sm\:font-medium{font-weight:500}.sm\:font-semibold{font-weight:600}.sm\:font-bold{font-weight:700}.sm\:font-extrabold{font-weight:800}.sm\:font-black{font-weight:900}.sm\:hover\:font-hairline:hover{font-weight:100}.sm\:hover\:font-thin:hover{font-weight:200}.sm\:hover\:font-light:hover{font-weight:300}.sm\:hover\:font-normal:hover{font-weight:400}.sm\:hover\:font-medium:hover{font-weight:500}.sm\:hover\:font-semibold:hover{font-weight:600}.sm\:hover\:font-bold:hover{font-weight:700}.sm\:hover\:font-extrabold:hover{font-weight:800}.sm\:hover\:font-black:hover{font-weight:900}.sm\:focus\:font-hairline:focus{font-weight:100}.sm\:focus\:font-thin:focus{font-weight:200}.sm\:focus\:font-light:focus{font-weight:300}.sm\:focus\:font-normal:focus{font-weight:400}.sm\:focus\:font-medium:focus{font-weight:500}.sm\:focus\:font-semibold:focus{font-weight:600}.sm\:focus\:font-bold:focus{font-weight:700}.sm\:focus\:font-extrabold:focus{font-weight:800}.sm\:focus\:font-black:focus{font-weight:900}.sm\:h-0{height:0}.sm\:h-1{height:.25rem}.sm\:h-2{height:.5rem}.sm\:h-3{height:.75rem}.sm\:h-4{height:1rem}.sm\:h-5{height:1.25rem}.sm\:h-6{height:1.5rem}.sm\:h-8{height:2rem}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-16{height:4rem}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-32{height:8rem}.sm\:h-40{height:10rem}.sm\:h-48{height:12rem}.sm\:h-56{height:14rem}.sm\:h-64{height:16rem}.sm\:h-auto{height:auto}.sm\:h-px{height:1px}.sm\:h-full{height:100%}.sm\:h-screen{height:100vh}.sm\:leading-none{line-height:1}.sm\:leading-tight{line-height:1.25}.sm\:leading-snug{line-height:1.375}.sm\:leading-normal{line-height:1.5}.sm\:leading-relaxed{line-height:1.625}.sm\:leading-loose{line-height:2}.sm\:list-inside{list-style-position:inside}.sm\:list-outside{list-style-position:outside}.sm\:list-none{list-style-type:none}.sm\:list-disc{list-style-type:disc}.sm\:list-decimal{list-style-type:decimal}.sm\:m-0{margin:0}.sm\:m-1{margin:.25rem}.sm\:m-2{margin:.5rem}.sm\:m-3{margin:.75rem}.sm\:m-4{margin:1rem}.sm\:m-5{margin:1.25rem}.sm\:m-6{margin:1.5rem}.sm\:m-8{margin:2rem}.sm\:m-10{margin:2.5rem}.sm\:m-12{margin:3rem}.sm\:m-16{margin:4rem}.sm\:m-20{margin:5rem}.sm\:m-24{margin:6rem}.sm\:m-32{margin:8rem}.sm\:m-40{margin:10rem}.sm\:m-48{margin:12rem}.sm\:m-56{margin:14rem}.sm\:m-64{margin:16rem}.sm\:m-auto{margin:auto}.sm\:m-px{margin:1px}.sm\:-m-1{margin:-.25rem}.sm\:-m-2{margin:-.5rem}.sm\:-m-3{margin:-.75rem}.sm\:-m-4{margin:-1rem}.sm\:-m-5{margin:-1.25rem}.sm\:-m-6{margin:-1.5rem}.sm\:-m-8{margin:-2rem}.sm\:-m-10{margin:-2.5rem}.sm\:-m-12{margin:-3rem}.sm\:-m-16{margin:-4rem}.sm\:-m-20{margin:-5rem}.sm\:-m-24{margin:-6rem}.sm\:-m-32{margin:-8rem}.sm\:-m-40{margin:-10rem}.sm\:-m-48{margin:-12rem}.sm\:-m-56{margin:-14rem}.sm\:-m-64{margin:-16rem}.sm\:-m-px{margin:-1px}.sm\:my-0{margin-top:0;margin-bottom:0}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-1{margin-top:.25rem;margin-bottom:.25rem}.sm\:mx-1{margin-left:.25rem;margin-right:.25rem}.sm\:my-2{margin-top:.5rem;margin-bottom:.5rem}.sm\:mx-2{margin-left:.5rem;margin-right:.5rem}.sm\:my-3{margin-top:.75rem;margin-bottom:.75rem}.sm\:mx-3{margin-left:.75rem;margin-right:.75rem}.sm\:my-4{margin-top:1rem;margin-bottom:1rem}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.sm\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.sm\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:mx-8{margin-left:2rem;margin-right:2rem}.sm\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.sm\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.sm\:my-12{margin-top:3rem;margin-bottom:3rem}.sm\:mx-12{margin-left:3rem;margin-right:3rem}.sm\:my-16{margin-top:4rem;margin-bottom:4rem}.sm\:mx-16{margin-left:4rem;margin-right:4rem}.sm\:my-20{margin-top:5rem;margin-bottom:5rem}.sm\:mx-20{margin-left:5rem;margin-right:5rem}.sm\:my-24{margin-top:6rem;margin-bottom:6rem}.sm\:mx-24{margin-left:6rem;margin-right:6rem}.sm\:my-32{margin-top:8rem;margin-bottom:8rem}.sm\:mx-32{margin-left:8rem;margin-right:8rem}.sm\:my-40{margin-top:10rem;margin-bottom:10rem}.sm\:mx-40{margin-left:10rem;margin-right:10rem}.sm\:my-48{margin-top:12rem;margin-bottom:12rem}.sm\:mx-48{margin-left:12rem;margin-right:12rem}.sm\:my-56{margin-top:14rem;margin-bottom:14rem}.sm\:mx-56{margin-left:14rem;margin-right:14rem}.sm\:my-64{margin-top:16rem;margin-bottom:16rem}.sm\:mx-64{margin-left:16rem;margin-right:16rem}.sm\:my-auto{margin-top:auto;margin-bottom:auto}.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:my-px{margin-top:1px;margin-bottom:1px}.sm\:mx-px{margin-left:1px;margin-right:1px}.sm\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.sm\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.sm\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.sm\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.sm\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.sm\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.sm\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.sm\:-mx-4{margin-left:-1rem;margin-right:-1rem}.sm\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.sm\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.sm\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.sm\:-mx-8{margin-left:-2rem;margin-right:-2rem}.sm\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.sm\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.sm\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.sm\:-mx-12{margin-left:-3rem;margin-right:-3rem}.sm\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.sm\:-mx-16{margin-left:-4rem;margin-right:-4rem}.sm\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.sm\:-mx-20{margin-left:-5rem;margin-right:-5rem}.sm\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.sm\:-mx-24{margin-left:-6rem;margin-right:-6rem}.sm\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.sm\:-mx-32{margin-left:-8rem;margin-right:-8rem}.sm\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.sm\:-mx-40{margin-left:-10rem;margin-right:-10rem}.sm\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.sm\:-mx-48{margin-left:-12rem;margin-right:-12rem}.sm\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.sm\:-mx-56{margin-left:-14rem;margin-right:-14rem}.sm\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.sm\:-mx-64{margin-left:-16rem;margin-right:-16rem}.sm\:-my-px{margin-top:-1px;margin-bottom:-1px}.sm\:-mx-px{margin-left:-1px;margin-right:-1px}.sm\:mt-0{margin-top:0}.sm\:mr-0{margin-right:0}.sm\:mb-0{margin-bottom:0}.sm\:ml-0{margin-left:0}.sm\:mt-1{margin-top:.25rem}.sm\:mr-1{margin-right:.25rem}.sm\:mb-1{margin-bottom:.25rem}.sm\:ml-1{margin-left:.25rem}.sm\:mt-2{margin-top:.5rem}.sm\:mr-2{margin-right:.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:ml-2{margin-left:.5rem}.sm\:mt-3{margin-top:.75rem}.sm\:mr-3{margin-right:.75rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:ml-3{margin-left:.75rem}.sm\:mt-4{margin-top:1rem}.sm\:mr-4{margin-right:1rem}.sm\:mb-4{margin-bottom:1rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-5{margin-top:1.25rem}.sm\:mr-5{margin-right:1.25rem}.sm\:mb-5{margin-bottom:1.25rem}.sm\:ml-5{margin-left:1.25rem}.sm\:mt-6{margin-top:1.5rem}.sm\:mr-6{margin-right:1.5rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-8{margin-top:2rem}.sm\:mr-8{margin-right:2rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-8{margin-left:2rem}.sm\:mt-10{margin-top:2.5rem}.sm\:mr-10{margin-right:2.5rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:ml-10{margin-left:2.5rem}.sm\:mt-12{margin-top:3rem}.sm\:mr-12{margin-right:3rem}.sm\:mb-12{margin-bottom:3rem}.sm\:ml-12{margin-left:3rem}.sm\:mt-16{margin-top:4rem}.sm\:mr-16{margin-right:4rem}.sm\:mb-16{margin-bottom:4rem}.sm\:ml-16{margin-left:4rem}.sm\:mt-20{margin-top:5rem}.sm\:mr-20{margin-right:5rem}.sm\:mb-20{margin-bottom:5rem}.sm\:ml-20{margin-left:5rem}.sm\:mt-24{margin-top:6rem}.sm\:mr-24{margin-right:6rem}.sm\:mb-24{margin-bottom:6rem}.sm\:ml-24{margin-left:6rem}.sm\:mt-32{margin-top:8rem}.sm\:mr-32{margin-right:8rem}.sm\:mb-32{margin-bottom:8rem}.sm\:ml-32{margin-left:8rem}.sm\:mt-40{margin-top:10rem}.sm\:mr-40{margin-right:10rem}.sm\:mb-40{margin-bottom:10rem}.sm\:ml-40{margin-left:10rem}.sm\:mt-48{margin-top:12rem}.sm\:mr-48{margin-right:12rem}.sm\:mb-48{margin-bottom:12rem}.sm\:ml-48{margin-left:12rem}.sm\:mt-56{margin-top:14rem}.sm\:mr-56{margin-right:14rem}.sm\:mb-56{margin-bottom:14rem}.sm\:ml-56{margin-left:14rem}.sm\:mt-64{margin-top:16rem}.sm\:mr-64{margin-right:16rem}.sm\:mb-64{margin-bottom:16rem}.sm\:ml-64{margin-left:16rem}.sm\:mt-auto{margin-top:auto}.sm\:mr-auto{margin-right:auto}.sm\:mb-auto{margin-bottom:auto}.sm\:ml-auto{margin-left:auto}.sm\:mt-px{margin-top:1px}.sm\:mr-px{margin-right:1px}.sm\:mb-px{margin-bottom:1px}.sm\:ml-px{margin-left:1px}.sm\:-mt-1{margin-top:-.25rem}.sm\:-mr-1{margin-right:-.25rem}.sm\:-mb-1{margin-bottom:-.25rem}.sm\:-ml-1{margin-left:-.25rem}.sm\:-mt-2{margin-top:-.5rem}.sm\:-mr-2{margin-right:-.5rem}.sm\:-mb-2{margin-bottom:-.5rem}.sm\:-ml-2{margin-left:-.5rem}.sm\:-mt-3{margin-top:-.75rem}.sm\:-mr-3{margin-right:-.75rem}.sm\:-mb-3{margin-bottom:-.75rem}.sm\:-ml-3{margin-left:-.75rem}.sm\:-mt-4{margin-top:-1rem}.sm\:-mr-4{margin-right:-1rem}.sm\:-mb-4{margin-bottom:-1rem}.sm\:-ml-4{margin-left:-1rem}.sm\:-mt-5{margin-top:-1.25rem}.sm\:-mr-5{margin-right:-1.25rem}.sm\:-mb-5{margin-bottom:-1.25rem}.sm\:-ml-5{margin-left:-1.25rem}.sm\:-mt-6{margin-top:-1.5rem}.sm\:-mr-6{margin-right:-1.5rem}.sm\:-mb-6{margin-bottom:-1.5rem}.sm\:-ml-6{margin-left:-1.5rem}.sm\:-mt-8{margin-top:-2rem}.sm\:-mr-8{margin-right:-2rem}.sm\:-mb-8{margin-bottom:-2rem}.sm\:-ml-8{margin-left:-2rem}.sm\:-mt-10{margin-top:-2.5rem}.sm\:-mr-10{margin-right:-2.5rem}.sm\:-mb-10{margin-bottom:-2.5rem}.sm\:-ml-10{margin-left:-2.5rem}.sm\:-mt-12{margin-top:-3rem}.sm\:-mr-12{margin-right:-3rem}.sm\:-mb-12{margin-bottom:-3rem}.sm\:-ml-12{margin-left:-3rem}.sm\:-mt-16{margin-top:-4rem}.sm\:-mr-16{margin-right:-4rem}.sm\:-mb-16{margin-bottom:-4rem}.sm\:-ml-16{margin-left:-4rem}.sm\:-mt-20{margin-top:-5rem}.sm\:-mr-20{margin-right:-5rem}.sm\:-mb-20{margin-bottom:-5rem}.sm\:-ml-20{margin-left:-5rem}.sm\:-mt-24{margin-top:-6rem}.sm\:-mr-24{margin-right:-6rem}.sm\:-mb-24{margin-bottom:-6rem}.sm\:-ml-24{margin-left:-6rem}.sm\:-mt-32{margin-top:-8rem}.sm\:-mr-32{margin-right:-8rem}.sm\:-mb-32{margin-bottom:-8rem}.sm\:-ml-32{margin-left:-8rem}.sm\:-mt-40{margin-top:-10rem}.sm\:-mr-40{margin-right:-10rem}.sm\:-mb-40{margin-bottom:-10rem}.sm\:-ml-40{margin-left:-10rem}.sm\:-mt-48{margin-top:-12rem}.sm\:-mr-48{margin-right:-12rem}.sm\:-mb-48{margin-bottom:-12rem}.sm\:-ml-48{margin-left:-12rem}.sm\:-mt-56{margin-top:-14rem}.sm\:-mr-56{margin-right:-14rem}.sm\:-mb-56{margin-bottom:-14rem}.sm\:-ml-56{margin-left:-14rem}.sm\:-mt-64{margin-top:-16rem}.sm\:-mr-64{margin-right:-16rem}.sm\:-mb-64{margin-bottom:-16rem}.sm\:-ml-64{margin-left:-16rem}.sm\:-mt-px{margin-top:-1px}.sm\:-mr-px{margin-right:-1px}.sm\:-mb-px{margin-bottom:-1px}.sm\:-ml-px{margin-left:-1px}.sm\:max-h-full{max-height:100%}.sm\:max-h-screen{max-height:100vh}.sm\:max-w-xs{max-width:20rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-full{max-width:100%}.sm\:min-h-0{min-height:0}.sm\:min-h-full{min-height:100%}.sm\:min-h-screen{min-height:100vh}.sm\:min-w-0{min-width:0}.sm\:min-w-full{min-width:100%}.sm\:object-contain{-o-object-fit:contain;object-fit:contain}.sm\:object-cover{-o-object-fit:cover;object-fit:cover}.sm\:object-fill{-o-object-fit:fill;object-fit:fill}.sm\:object-none{-o-object-fit:none;object-fit:none}.sm\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.sm\:object-bottom{-o-object-position:bottom;object-position:bottom}.sm\:object-center{-o-object-position:center;object-position:center}.sm\:object-left{-o-object-position:left;object-position:left}.sm\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.sm\:object-left-top{-o-object-position:left top;object-position:left top}.sm\:object-right{-o-object-position:right;object-position:right}.sm\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.sm\:object-right-top{-o-object-position:right top;object-position:right top}.sm\:object-top{-o-object-position:top;object-position:top}.sm\:opacity-0{opacity:0}.sm\:opacity-25{opacity:.25}.sm\:opacity-50{opacity:.5}.sm\:opacity-75{opacity:.75}.sm\:opacity-100{opacity:1}.sm\:outline-none{outline:0}.sm\:focus\:outline-none:focus{outline:0}.sm\:overflow-auto{overflow:auto}.sm\:overflow-hidden{overflow:hidden}.sm\:overflow-visible{overflow:visible}.sm\:overflow-scroll{overflow:scroll}.sm\:overflow-x-auto{overflow-x:auto}.sm\:overflow-y-auto{overflow-y:auto}.sm\:overflow-x-hidden{overflow-x:hidden}.sm\:overflow-y-hidden{overflow-y:hidden}.sm\:overflow-x-visible{overflow-x:visible}.sm\:overflow-y-visible{overflow-y:visible}.sm\:overflow-x-scroll{overflow-x:scroll}.sm\:overflow-y-scroll{overflow-y:scroll}.sm\:scrolling-touch{-webkit-overflow-scrolling:touch}.sm\:scrolling-auto{-webkit-overflow-scrolling:auto}.sm\:p-0{padding:0}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-5{padding:1.25rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:p-10{padding:2.5rem}.sm\:p-12{padding:3rem}.sm\:p-16{padding:4rem}.sm\:p-20{padding:5rem}.sm\:p-24{padding:6rem}.sm\:p-32{padding:8rem}.sm\:p-40{padding:10rem}.sm\:p-48{padding:12rem}.sm\:p-56{padding:14rem}.sm\:p-64{padding:16rem}.sm\:p-px{padding:1px}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:px-0{padding-left:0;padding-right:0}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:px-1{padding-left:.25rem;padding-right:.25rem}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:px-10{padding-left:2.5rem;padding-right:2.5rem}.sm\:py-12{padding-top:3rem;padding-bottom:3rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:py-16{padding-top:4rem;padding-bottom:4rem}.sm\:px-16{padding-left:4rem;padding-right:4rem}.sm\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\:px-20{padding-left:5rem;padding-right:5rem}.sm\:py-24{padding-top:6rem;padding-bottom:6rem}.sm\:px-24{padding-left:6rem;padding-right:6rem}.sm\:py-32{padding-top:8rem;padding-bottom:8rem}.sm\:px-32{padding-left:8rem;padding-right:8rem}.sm\:py-40{padding-top:10rem;padding-bottom:10rem}.sm\:px-40{padding-left:10rem;padding-right:10rem}.sm\:py-48{padding-top:12rem;padding-bottom:12rem}.sm\:px-48{padding-left:12rem;padding-right:12rem}.sm\:py-56{padding-top:14rem;padding-bottom:14rem}.sm\:px-56{padding-left:14rem;padding-right:14rem}.sm\:py-64{padding-top:16rem;padding-bottom:16rem}.sm\:px-64{padding-left:16rem;padding-right:16rem}.sm\:py-px{padding-top:1px;padding-bottom:1px}.sm\:px-px{padding-left:1px;padding-right:1px}.sm\:pt-0{padding-top:0}.sm\:pr-0{padding-right:0}.sm\:pb-0{padding-bottom:0}.sm\:pl-0{padding-left:0}.sm\:pt-1{padding-top:.25rem}.sm\:pr-1{padding-right:.25rem}.sm\:pb-1{padding-bottom:.25rem}.sm\:pl-1{padding-left:.25rem}.sm\:pt-2{padding-top:.5rem}.sm\:pr-2{padding-right:.5rem}.sm\:pb-2{padding-bottom:.5rem}.sm\:pl-2{padding-left:.5rem}.sm\:pt-3{padding-top:.75rem}.sm\:pr-3{padding-right:.75rem}.sm\:pb-3{padding-bottom:.75rem}.sm\:pl-3{padding-left:.75rem}.sm\:pt-4{padding-top:1rem}.sm\:pr-4{padding-right:1rem}.sm\:pb-4{padding-bottom:1rem}.sm\:pl-4{padding-left:1rem}.sm\:pt-5{padding-top:1.25rem}.sm\:pr-5{padding-right:1.25rem}.sm\:pb-5{padding-bottom:1.25rem}.sm\:pl-5{padding-left:1.25rem}.sm\:pt-6{padding-top:1.5rem}.sm\:pr-6{padding-right:1.5rem}.sm\:pb-6{padding-bottom:1.5rem}.sm\:pl-6{padding-left:1.5rem}.sm\:pt-8{padding-top:2rem}.sm\:pr-8{padding-right:2rem}.sm\:pb-8{padding-bottom:2rem}.sm\:pl-8{padding-left:2rem}.sm\:pt-10{padding-top:2.5rem}.sm\:pr-10{padding-right:2.5rem}.sm\:pb-10{padding-bottom:2.5rem}.sm\:pl-10{padding-left:2.5rem}.sm\:pt-12{padding-top:3rem}.sm\:pr-12{padding-right:3rem}.sm\:pb-12{padding-bottom:3rem}.sm\:pl-12{padding-left:3rem}.sm\:pt-16{padding-top:4rem}.sm\:pr-16{padding-right:4rem}.sm\:pb-16{padding-bottom:4rem}.sm\:pl-16{padding-left:4rem}.sm\:pt-20{padding-top:5rem}.sm\:pr-20{padding-right:5rem}.sm\:pb-20{padding-bottom:5rem}.sm\:pl-20{padding-left:5rem}.sm\:pt-24{padding-top:6rem}.sm\:pr-24{padding-right:6rem}.sm\:pb-24{padding-bottom:6rem}.sm\:pl-24{padding-left:6rem}.sm\:pt-32{padding-top:8rem}.sm\:pr-32{padding-right:8rem}.sm\:pb-32{padding-bottom:8rem}.sm\:pl-32{padding-left:8rem}.sm\:pt-40{padding-top:10rem}.sm\:pr-40{padding-right:10rem}.sm\:pb-40{padding-bottom:10rem}.sm\:pl-40{padding-left:10rem}.sm\:pt-48{padding-top:12rem}.sm\:pr-48{padding-right:12rem}.sm\:pb-48{padding-bottom:12rem}.sm\:pl-48{padding-left:12rem}.sm\:pt-56{padding-top:14rem}.sm\:pr-56{padding-right:14rem}.sm\:pb-56{padding-bottom:14rem}.sm\:pl-56{padding-left:14rem}.sm\:pt-64{padding-top:16rem}.sm\:pr-64{padding-right:16rem}.sm\:pb-64{padding-bottom:16rem}.sm\:pl-64{padding-left:16rem}.sm\:pt-px{padding-top:1px}.sm\:pr-px{padding-right:1px}.sm\:pb-px{padding-bottom:1px}.sm\:pl-px{padding-left:1px}.sm\:pointer-events-none{pointer-events:none}.sm\:pointer-events-auto{pointer-events:auto}.sm\:static{position:static}.sm\:fixed{position:fixed}.sm\:absolute{position:absolute}.sm\:relative{position:relative}.sm\:sticky{position:-webkit-sticky;position:sticky}.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.sm\:inset-y-0{top:0;bottom:0}.sm\:inset-x-0{right:0;left:0}.sm\:inset-y-auto{top:auto;bottom:auto}.sm\:inset-x-auto{right:auto;left:auto}.sm\:top-0{top:0}.sm\:right-0{right:0}.sm\:bottom-0{bottom:0}.sm\:left-0{left:0}.sm\:top-auto{top:auto}.sm\:right-auto{right:auto}.sm\:bottom-auto{bottom:auto}.sm\:left-auto{left:auto}.sm\:resize-none{resize:none}.sm\:resize-y{resize:vertical}.sm\:resize-x{resize:horizontal}.sm\:resize{resize:both}.sm\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:shadow-none{box-shadow:none}.sm\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:hover\:shadow-none:hover{box-shadow:none}.sm\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:focus\:shadow-none:focus{box-shadow:none}.sm\:fill-current{fill:currentColor}.sm\:stroke-current{stroke:currentColor}.sm\:table-auto{table-layout:auto}.sm\:table-fixed{table-layout:fixed}.sm\:text-left{text-align:left}.sm\:text-center{text-align:center}.sm\:text-right{text-align:right}.sm\:text-justify{text-align:justify}.sm\:text-transparent{color:transparent}.sm\:text-black{color:#000}.sm\:text-white{color:#fff}.sm\:text-gray-100{color:#f7fafc}.sm\:text-gray-200{color:#edf2f7}.sm\:text-gray-300{color:#e2e8f0}.sm\:text-gray-400{color:#cbd5e0}.sm\:text-gray-500{color:#a0aec0}.sm\:text-gray-600{color:#718096}.sm\:text-gray-700{color:#4a5568}.sm\:text-gray-800{color:#2d3748}.sm\:text-gray-900{color:#1a202c}.sm\:text-red-100{color:#fff5f5}.sm\:text-red-200{color:#fed7d7}.sm\:text-red-300{color:#feb2b2}.sm\:text-red-400{color:#fc8181}.sm\:text-red-500{color:#f56565}.sm\:text-red-600{color:#e53e3e}.sm\:text-red-700{color:#c53030}.sm\:text-red-800{color:#9b2c2c}.sm\:text-red-900{color:#742a2a}.sm\:text-orange-100{color:#fffaf0}.sm\:text-orange-200{color:#feebc8}.sm\:text-orange-300{color:#fbd38d}.sm\:text-orange-400{color:#f6ad55}.sm\:text-orange-500{color:#ed8936}.sm\:text-orange-600{color:#dd6b20}.sm\:text-orange-700{color:#c05621}.sm\:text-orange-800{color:#9c4221}.sm\:text-orange-900{color:#7b341e}.sm\:text-yellow-100{color:ivory}.sm\:text-yellow-200{color:#fefcbf}.sm\:text-yellow-300{color:#faf089}.sm\:text-yellow-400{color:#f6e05e}.sm\:text-yellow-500{color:#ecc94b}.sm\:text-yellow-600{color:#d69e2e}.sm\:text-yellow-700{color:#b7791f}.sm\:text-yellow-800{color:#975a16}.sm\:text-yellow-900{color:#744210}.sm\:text-green-100{color:#f0fff4}.sm\:text-green-200{color:#c6f6d5}.sm\:text-green-300{color:#9ae6b4}.sm\:text-green-400{color:#68d391}.sm\:text-green-500{color:#48bb78}.sm\:text-green-600{color:#38a169}.sm\:text-green-700{color:#2f855a}.sm\:text-green-800{color:#276749}.sm\:text-green-900{color:#22543d}.sm\:text-teal-100{color:#e6fffa}.sm\:text-teal-200{color:#b2f5ea}.sm\:text-teal-300{color:#81e6d9}.sm\:text-teal-400{color:#4fd1c5}.sm\:text-teal-500{color:#38b2ac}.sm\:text-teal-600{color:#319795}.sm\:text-teal-700{color:#2c7a7b}.sm\:text-teal-800{color:#285e61}.sm\:text-teal-900{color:#234e52}.sm\:text-blue-100{color:#ebf8ff}.sm\:text-blue-200{color:#bee3f8}.sm\:text-blue-300{color:#90cdf4}.sm\:text-blue-400{color:#63b3ed}.sm\:text-blue-500{color:#4299e1}.sm\:text-blue-600{color:#3182ce}.sm\:text-blue-700{color:#2b6cb0}.sm\:text-blue-800{color:#2c5282}.sm\:text-blue-900{color:#2a4365}.sm\:text-indigo-100{color:#ebf4ff}.sm\:text-indigo-200{color:#c3dafe}.sm\:text-indigo-300{color:#a3bffa}.sm\:text-indigo-400{color:#7f9cf5}.sm\:text-indigo-500{color:#667eea}.sm\:text-indigo-600{color:#5a67d8}.sm\:text-indigo-700{color:#4c51bf}.sm\:text-indigo-800{color:#434190}.sm\:text-indigo-900{color:#3c366b}.sm\:text-purple-100{color:#faf5ff}.sm\:text-purple-200{color:#e9d8fd}.sm\:text-purple-300{color:#d6bcfa}.sm\:text-purple-400{color:#b794f4}.sm\:text-purple-500{color:#9f7aea}.sm\:text-purple-600{color:#805ad5}.sm\:text-purple-700{color:#6b46c1}.sm\:text-purple-800{color:#553c9a}.sm\:text-purple-900{color:#44337a}.sm\:text-pink-100{color:#fff5f7}.sm\:text-pink-200{color:#fed7e2}.sm\:text-pink-300{color:#fbb6ce}.sm\:text-pink-400{color:#f687b3}.sm\:text-pink-500{color:#ed64a6}.sm\:text-pink-600{color:#d53f8c}.sm\:text-pink-700{color:#b83280}.sm\:text-pink-800{color:#97266d}.sm\:text-pink-900{color:#702459}.sm\:hover\:text-transparent:hover{color:transparent}.sm\:hover\:text-black:hover{color:#000}.sm\:hover\:text-white:hover{color:#fff}.sm\:hover\:text-gray-100:hover{color:#f7fafc}.sm\:hover\:text-gray-200:hover{color:#edf2f7}.sm\:hover\:text-gray-300:hover{color:#e2e8f0}.sm\:hover\:text-gray-400:hover{color:#cbd5e0}.sm\:hover\:text-gray-500:hover{color:#a0aec0}.sm\:hover\:text-gray-600:hover{color:#718096}.sm\:hover\:text-gray-700:hover{color:#4a5568}.sm\:hover\:text-gray-800:hover{color:#2d3748}.sm\:hover\:text-gray-900:hover{color:#1a202c}.sm\:hover\:text-red-100:hover{color:#fff5f5}.sm\:hover\:text-red-200:hover{color:#fed7d7}.sm\:hover\:text-red-300:hover{color:#feb2b2}.sm\:hover\:text-red-400:hover{color:#fc8181}.sm\:hover\:text-red-500:hover{color:#f56565}.sm\:hover\:text-red-600:hover{color:#e53e3e}.sm\:hover\:text-red-700:hover{color:#c53030}.sm\:hover\:text-red-800:hover{color:#9b2c2c}.sm\:hover\:text-red-900:hover{color:#742a2a}.sm\:hover\:text-orange-100:hover{color:#fffaf0}.sm\:hover\:text-orange-200:hover{color:#feebc8}.sm\:hover\:text-orange-300:hover{color:#fbd38d}.sm\:hover\:text-orange-400:hover{color:#f6ad55}.sm\:hover\:text-orange-500:hover{color:#ed8936}.sm\:hover\:text-orange-600:hover{color:#dd6b20}.sm\:hover\:text-orange-700:hover{color:#c05621}.sm\:hover\:text-orange-800:hover{color:#9c4221}.sm\:hover\:text-orange-900:hover{color:#7b341e}.sm\:hover\:text-yellow-100:hover{color:ivory}.sm\:hover\:text-yellow-200:hover{color:#fefcbf}.sm\:hover\:text-yellow-300:hover{color:#faf089}.sm\:hover\:text-yellow-400:hover{color:#f6e05e}.sm\:hover\:text-yellow-500:hover{color:#ecc94b}.sm\:hover\:text-yellow-600:hover{color:#d69e2e}.sm\:hover\:text-yellow-700:hover{color:#b7791f}.sm\:hover\:text-yellow-800:hover{color:#975a16}.sm\:hover\:text-yellow-900:hover{color:#744210}.sm\:hover\:text-green-100:hover{color:#f0fff4}.sm\:hover\:text-green-200:hover{color:#c6f6d5}.sm\:hover\:text-green-300:hover{color:#9ae6b4}.sm\:hover\:text-green-400:hover{color:#68d391}.sm\:hover\:text-green-500:hover{color:#48bb78}.sm\:hover\:text-green-600:hover{color:#38a169}.sm\:hover\:text-green-700:hover{color:#2f855a}.sm\:hover\:text-green-800:hover{color:#276749}.sm\:hover\:text-green-900:hover{color:#22543d}.sm\:hover\:text-teal-100:hover{color:#e6fffa}.sm\:hover\:text-teal-200:hover{color:#b2f5ea}.sm\:hover\:text-teal-300:hover{color:#81e6d9}.sm\:hover\:text-teal-400:hover{color:#4fd1c5}.sm\:hover\:text-teal-500:hover{color:#38b2ac}.sm\:hover\:text-teal-600:hover{color:#319795}.sm\:hover\:text-teal-700:hover{color:#2c7a7b}.sm\:hover\:text-teal-800:hover{color:#285e61}.sm\:hover\:text-teal-900:hover{color:#234e52}.sm\:hover\:text-blue-100:hover{color:#ebf8ff}.sm\:hover\:text-blue-200:hover{color:#bee3f8}.sm\:hover\:text-blue-300:hover{color:#90cdf4}.sm\:hover\:text-blue-400:hover{color:#63b3ed}.sm\:hover\:text-blue-500:hover{color:#4299e1}.sm\:hover\:text-blue-600:hover{color:#3182ce}.sm\:hover\:text-blue-700:hover{color:#2b6cb0}.sm\:hover\:text-blue-800:hover{color:#2c5282}.sm\:hover\:text-blue-900:hover{color:#2a4365}.sm\:hover\:text-indigo-100:hover{color:#ebf4ff}.sm\:hover\:text-indigo-200:hover{color:#c3dafe}.sm\:hover\:text-indigo-300:hover{color:#a3bffa}.sm\:hover\:text-indigo-400:hover{color:#7f9cf5}.sm\:hover\:text-indigo-500:hover{color:#667eea}.sm\:hover\:text-indigo-600:hover{color:#5a67d8}.sm\:hover\:text-indigo-700:hover{color:#4c51bf}.sm\:hover\:text-indigo-800:hover{color:#434190}.sm\:hover\:text-indigo-900:hover{color:#3c366b}.sm\:hover\:text-purple-100:hover{color:#faf5ff}.sm\:hover\:text-purple-200:hover{color:#e9d8fd}.sm\:hover\:text-purple-300:hover{color:#d6bcfa}.sm\:hover\:text-purple-400:hover{color:#b794f4}.sm\:hover\:text-purple-500:hover{color:#9f7aea}.sm\:hover\:text-purple-600:hover{color:#805ad5}.sm\:hover\:text-purple-700:hover{color:#6b46c1}.sm\:hover\:text-purple-800:hover{color:#553c9a}.sm\:hover\:text-purple-900:hover{color:#44337a}.sm\:hover\:text-pink-100:hover{color:#fff5f7}.sm\:hover\:text-pink-200:hover{color:#fed7e2}.sm\:hover\:text-pink-300:hover{color:#fbb6ce}.sm\:hover\:text-pink-400:hover{color:#f687b3}.sm\:hover\:text-pink-500:hover{color:#ed64a6}.sm\:hover\:text-pink-600:hover{color:#d53f8c}.sm\:hover\:text-pink-700:hover{color:#b83280}.sm\:hover\:text-pink-800:hover{color:#97266d}.sm\:hover\:text-pink-900:hover{color:#702459}.sm\:focus\:text-transparent:focus{color:transparent}.sm\:focus\:text-black:focus{color:#000}.sm\:focus\:text-white:focus{color:#fff}.sm\:focus\:text-gray-100:focus{color:#f7fafc}.sm\:focus\:text-gray-200:focus{color:#edf2f7}.sm\:focus\:text-gray-300:focus{color:#e2e8f0}.sm\:focus\:text-gray-400:focus{color:#cbd5e0}.sm\:focus\:text-gray-500:focus{color:#a0aec0}.sm\:focus\:text-gray-600:focus{color:#718096}.sm\:focus\:text-gray-700:focus{color:#4a5568}.sm\:focus\:text-gray-800:focus{color:#2d3748}.sm\:focus\:text-gray-900:focus{color:#1a202c}.sm\:focus\:text-red-100:focus{color:#fff5f5}.sm\:focus\:text-red-200:focus{color:#fed7d7}.sm\:focus\:text-red-300:focus{color:#feb2b2}.sm\:focus\:text-red-400:focus{color:#fc8181}.sm\:focus\:text-red-500:focus{color:#f56565}.sm\:focus\:text-red-600:focus{color:#e53e3e}.sm\:focus\:text-red-700:focus{color:#c53030}.sm\:focus\:text-red-800:focus{color:#9b2c2c}.sm\:focus\:text-red-900:focus{color:#742a2a}.sm\:focus\:text-orange-100:focus{color:#fffaf0}.sm\:focus\:text-orange-200:focus{color:#feebc8}.sm\:focus\:text-orange-300:focus{color:#fbd38d}.sm\:focus\:text-orange-400:focus{color:#f6ad55}.sm\:focus\:text-orange-500:focus{color:#ed8936}.sm\:focus\:text-orange-600:focus{color:#dd6b20}.sm\:focus\:text-orange-700:focus{color:#c05621}.sm\:focus\:text-orange-800:focus{color:#9c4221}.sm\:focus\:text-orange-900:focus{color:#7b341e}.sm\:focus\:text-yellow-100:focus{color:ivory}.sm\:focus\:text-yellow-200:focus{color:#fefcbf}.sm\:focus\:text-yellow-300:focus{color:#faf089}.sm\:focus\:text-yellow-400:focus{color:#f6e05e}.sm\:focus\:text-yellow-500:focus{color:#ecc94b}.sm\:focus\:text-yellow-600:focus{color:#d69e2e}.sm\:focus\:text-yellow-700:focus{color:#b7791f}.sm\:focus\:text-yellow-800:focus{color:#975a16}.sm\:focus\:text-yellow-900:focus{color:#744210}.sm\:focus\:text-green-100:focus{color:#f0fff4}.sm\:focus\:text-green-200:focus{color:#c6f6d5}.sm\:focus\:text-green-300:focus{color:#9ae6b4}.sm\:focus\:text-green-400:focus{color:#68d391}.sm\:focus\:text-green-500:focus{color:#48bb78}.sm\:focus\:text-green-600:focus{color:#38a169}.sm\:focus\:text-green-700:focus{color:#2f855a}.sm\:focus\:text-green-800:focus{color:#276749}.sm\:focus\:text-green-900:focus{color:#22543d}.sm\:focus\:text-teal-100:focus{color:#e6fffa}.sm\:focus\:text-teal-200:focus{color:#b2f5ea}.sm\:focus\:text-teal-300:focus{color:#81e6d9}.sm\:focus\:text-teal-400:focus{color:#4fd1c5}.sm\:focus\:text-teal-500:focus{color:#38b2ac}.sm\:focus\:text-teal-600:focus{color:#319795}.sm\:focus\:text-teal-700:focus{color:#2c7a7b}.sm\:focus\:text-teal-800:focus{color:#285e61}.sm\:focus\:text-teal-900:focus{color:#234e52}.sm\:focus\:text-blue-100:focus{color:#ebf8ff}.sm\:focus\:text-blue-200:focus{color:#bee3f8}.sm\:focus\:text-blue-300:focus{color:#90cdf4}.sm\:focus\:text-blue-400:focus{color:#63b3ed}.sm\:focus\:text-blue-500:focus{color:#4299e1}.sm\:focus\:text-blue-600:focus{color:#3182ce}.sm\:focus\:text-blue-700:focus{color:#2b6cb0}.sm\:focus\:text-blue-800:focus{color:#2c5282}.sm\:focus\:text-blue-900:focus{color:#2a4365}.sm\:focus\:text-indigo-100:focus{color:#ebf4ff}.sm\:focus\:text-indigo-200:focus{color:#c3dafe}.sm\:focus\:text-indigo-300:focus{color:#a3bffa}.sm\:focus\:text-indigo-400:focus{color:#7f9cf5}.sm\:focus\:text-indigo-500:focus{color:#667eea}.sm\:focus\:text-indigo-600:focus{color:#5a67d8}.sm\:focus\:text-indigo-700:focus{color:#4c51bf}.sm\:focus\:text-indigo-800:focus{color:#434190}.sm\:focus\:text-indigo-900:focus{color:#3c366b}.sm\:focus\:text-purple-100:focus{color:#faf5ff}.sm\:focus\:text-purple-200:focus{color:#e9d8fd}.sm\:focus\:text-purple-300:focus{color:#d6bcfa}.sm\:focus\:text-purple-400:focus{color:#b794f4}.sm\:focus\:text-purple-500:focus{color:#9f7aea}.sm\:focus\:text-purple-600:focus{color:#805ad5}.sm\:focus\:text-purple-700:focus{color:#6b46c1}.sm\:focus\:text-purple-800:focus{color:#553c9a}.sm\:focus\:text-purple-900:focus{color:#44337a}.sm\:focus\:text-pink-100:focus{color:#fff5f7}.sm\:focus\:text-pink-200:focus{color:#fed7e2}.sm\:focus\:text-pink-300:focus{color:#fbb6ce}.sm\:focus\:text-pink-400:focus{color:#f687b3}.sm\:focus\:text-pink-500:focus{color:#ed64a6}.sm\:focus\:text-pink-600:focus{color:#d53f8c}.sm\:focus\:text-pink-700:focus{color:#b83280}.sm\:focus\:text-pink-800:focus{color:#97266d}.sm\:focus\:text-pink-900:focus{color:#702459}.sm\:text-xs{font-size:.75rem}.sm\:text-sm{font-size:.875rem}.sm\:text-base{font-size:1rem}.sm\:text-lg{font-size:1.125rem}.sm\:text-xl{font-size:1.25rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:text-4xl{font-size:2.25rem}.sm\:text-5xl{font-size:3rem}.sm\:text-6xl{font-size:4rem}.sm\:italic{font-style:italic}.sm\:not-italic{font-style:normal}.sm\:uppercase{text-transform:uppercase}.sm\:lowercase{text-transform:lowercase}.sm\:capitalize{text-transform:capitalize}.sm\:normal-case{text-transform:none}.sm\:underline{text-decoration:underline}.sm\:line-through{text-decoration:line-through}.sm\:no-underline{text-decoration:none}.sm\:hover\:underline:hover{text-decoration:underline}.sm\:hover\:line-through:hover{text-decoration:line-through}.sm\:hover\:no-underline:hover{text-decoration:none}.sm\:focus\:underline:focus{text-decoration:underline}.sm\:focus\:line-through:focus{text-decoration:line-through}.sm\:focus\:no-underline:focus{text-decoration:none}.sm\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sm\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.sm\:tracking-tighter{letter-spacing:-.05em}.sm\:tracking-tight{letter-spacing:-.025em}.sm\:tracking-normal{letter-spacing:0}.sm\:tracking-wide{letter-spacing:.025em}.sm\:tracking-wider{letter-spacing:.05em}.sm\:tracking-widest{letter-spacing:.1em}.sm\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sm\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sm\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.sm\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.sm\:align-baseline{vertical-align:baseline}.sm\:align-top{vertical-align:top}.sm\:align-middle{vertical-align:middle}.sm\:align-bottom{vertical-align:bottom}.sm\:align-text-top{vertical-align:text-top}.sm\:align-text-bottom{vertical-align:text-bottom}.sm\:visible{visibility:visible}.sm\:invisible{visibility:hidden}.sm\:whitespace-normal{white-space:normal}.sm\:whitespace-no-wrap{white-space:nowrap}.sm\:whitespace-pre{white-space:pre}.sm\:whitespace-pre-line{white-space:pre-line}.sm\:whitespace-pre-wrap{white-space:pre-wrap}.sm\:break-normal{overflow-wrap:normal;word-break:normal}.sm\:break-words{overflow-wrap:break-word}.sm\:break-all{word-break:break-all}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:w-0{width:0}.sm\:w-1{width:.25rem}.sm\:w-2{width:.5rem}.sm\:w-3{width:.75rem}.sm\:w-4{width:1rem}.sm\:w-5{width:1.25rem}.sm\:w-6{width:1.5rem}.sm\:w-8{width:2rem}.sm\:w-10{width:2.5rem}.sm\:w-12{width:3rem}.sm\:w-16{width:4rem}.sm\:w-20{width:5rem}.sm\:w-24{width:6rem}.sm\:w-32{width:8rem}.sm\:w-40{width:10rem}.sm\:w-48{width:12rem}.sm\:w-56{width:14rem}.sm\:w-64{width:16rem}.sm\:w-auto{width:auto}.sm\:w-px{width:1px}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.33333%}.sm\:w-2\/3{width:66.66667%}.sm\:w-1\/4{width:25%}.sm\:w-2\/4{width:50%}.sm\:w-3\/4{width:75%}.sm\:w-1\/5{width:20%}.sm\:w-2\/5{width:40%}.sm\:w-3\/5{width:60%}.sm\:w-4\/5{width:80%}.sm\:w-1\/6{width:16.66667%}.sm\:w-2\/6{width:33.33333%}.sm\:w-3\/6{width:50%}.sm\:w-4\/6{width:66.66667%}.sm\:w-5\/6{width:83.33333%}.sm\:w-1\/12{width:8.33333%}.sm\:w-2\/12{width:16.66667%}.sm\:w-3\/12{width:25%}.sm\:w-4\/12{width:33.33333%}.sm\:w-5\/12{width:41.66667%}.sm\:w-6\/12{width:50%}.sm\:w-7\/12{width:58.33333%}.sm\:w-8\/12{width:66.66667%}.sm\:w-9\/12{width:75%}.sm\:w-10\/12{width:83.33333%}.sm\:w-11\/12{width:91.66667%}.sm\:w-full{width:100%}.sm\:w-screen{width:100vw}.sm\:z-0{z-index:0}.sm\:z-10{z-index:10}.sm\:z-20{z-index:20}.sm\:z-30{z-index:30}.sm\:z-40{z-index:40}.sm\:z-50{z-index:50}.sm\:z-auto{z-index:auto}}@media (min-width:768px){.md\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.md\:bg-fixed{background-attachment:fixed}.md\:bg-local{background-attachment:local}.md\:bg-scroll{background-attachment:scroll}.md\:bg-transparent{background-color:transparent}.md\:bg-black{background-color:#000}.md\:bg-white{background-color:#fff}.md\:bg-gray-100{background-color:#f7fafc}.md\:bg-gray-200{background-color:#edf2f7}.md\:bg-gray-300{background-color:#e2e8f0}.md\:bg-gray-400{background-color:#cbd5e0}.md\:bg-gray-500{background-color:#a0aec0}.md\:bg-gray-600{background-color:#718096}.md\:bg-gray-700{background-color:#4a5568}.md\:bg-gray-800{background-color:#2d3748}.md\:bg-gray-900{background-color:#1a202c}.md\:bg-red-100{background-color:#fff5f5}.md\:bg-red-200{background-color:#fed7d7}.md\:bg-red-300{background-color:#feb2b2}.md\:bg-red-400{background-color:#fc8181}.md\:bg-red-500{background-color:#f56565}.md\:bg-red-600{background-color:#e53e3e}.md\:bg-red-700{background-color:#c53030}.md\:bg-red-800{background-color:#9b2c2c}.md\:bg-red-900{background-color:#742a2a}.md\:bg-orange-100{background-color:#fffaf0}.md\:bg-orange-200{background-color:#feebc8}.md\:bg-orange-300{background-color:#fbd38d}.md\:bg-orange-400{background-color:#f6ad55}.md\:bg-orange-500{background-color:#ed8936}.md\:bg-orange-600{background-color:#dd6b20}.md\:bg-orange-700{background-color:#c05621}.md\:bg-orange-800{background-color:#9c4221}.md\:bg-orange-900{background-color:#7b341e}.md\:bg-yellow-100{background-color:ivory}.md\:bg-yellow-200{background-color:#fefcbf}.md\:bg-yellow-300{background-color:#faf089}.md\:bg-yellow-400{background-color:#f6e05e}.md\:bg-yellow-500{background-color:#ecc94b}.md\:bg-yellow-600{background-color:#d69e2e}.md\:bg-yellow-700{background-color:#b7791f}.md\:bg-yellow-800{background-color:#975a16}.md\:bg-yellow-900{background-color:#744210}.md\:bg-green-100{background-color:#f0fff4}.md\:bg-green-200{background-color:#c6f6d5}.md\:bg-green-300{background-color:#9ae6b4}.md\:bg-green-400{background-color:#68d391}.md\:bg-green-500{background-color:#48bb78}.md\:bg-green-600{background-color:#38a169}.md\:bg-green-700{background-color:#2f855a}.md\:bg-green-800{background-color:#276749}.md\:bg-green-900{background-color:#22543d}.md\:bg-teal-100{background-color:#e6fffa}.md\:bg-teal-200{background-color:#b2f5ea}.md\:bg-teal-300{background-color:#81e6d9}.md\:bg-teal-400{background-color:#4fd1c5}.md\:bg-teal-500{background-color:#38b2ac}.md\:bg-teal-600{background-color:#319795}.md\:bg-teal-700{background-color:#2c7a7b}.md\:bg-teal-800{background-color:#285e61}.md\:bg-teal-900{background-color:#234e52}.md\:bg-blue-100{background-color:#ebf8ff}.md\:bg-blue-200{background-color:#bee3f8}.md\:bg-blue-300{background-color:#90cdf4}.md\:bg-blue-400{background-color:#63b3ed}.md\:bg-blue-500{background-color:#4299e1}.md\:bg-blue-600{background-color:#3182ce}.md\:bg-blue-700{background-color:#2b6cb0}.md\:bg-blue-800{background-color:#2c5282}.md\:bg-blue-900{background-color:#2a4365}.md\:bg-indigo-100{background-color:#ebf4ff}.md\:bg-indigo-200{background-color:#c3dafe}.md\:bg-indigo-300{background-color:#a3bffa}.md\:bg-indigo-400{background-color:#7f9cf5}.md\:bg-indigo-500{background-color:#667eea}.md\:bg-indigo-600{background-color:#5a67d8}.md\:bg-indigo-700{background-color:#4c51bf}.md\:bg-indigo-800{background-color:#434190}.md\:bg-indigo-900{background-color:#3c366b}.md\:bg-purple-100{background-color:#faf5ff}.md\:bg-purple-200{background-color:#e9d8fd}.md\:bg-purple-300{background-color:#d6bcfa}.md\:bg-purple-400{background-color:#b794f4}.md\:bg-purple-500{background-color:#9f7aea}.md\:bg-purple-600{background-color:#805ad5}.md\:bg-purple-700{background-color:#6b46c1}.md\:bg-purple-800{background-color:#553c9a}.md\:bg-purple-900{background-color:#44337a}.md\:bg-pink-100{background-color:#fff5f7}.md\:bg-pink-200{background-color:#fed7e2}.md\:bg-pink-300{background-color:#fbb6ce}.md\:bg-pink-400{background-color:#f687b3}.md\:bg-pink-500{background-color:#ed64a6}.md\:bg-pink-600{background-color:#d53f8c}.md\:bg-pink-700{background-color:#b83280}.md\:bg-pink-800{background-color:#97266d}.md\:bg-pink-900{background-color:#702459}.md\:hover\:bg-transparent:hover{background-color:transparent}.md\:hover\:bg-black:hover{background-color:#000}.md\:hover\:bg-white:hover{background-color:#fff}.md\:hover\:bg-gray-100:hover{background-color:#f7fafc}.md\:hover\:bg-gray-200:hover{background-color:#edf2f7}.md\:hover\:bg-gray-300:hover{background-color:#e2e8f0}.md\:hover\:bg-gray-400:hover{background-color:#cbd5e0}.md\:hover\:bg-gray-500:hover{background-color:#a0aec0}.md\:hover\:bg-gray-600:hover{background-color:#718096}.md\:hover\:bg-gray-700:hover{background-color:#4a5568}.md\:hover\:bg-gray-800:hover{background-color:#2d3748}.md\:hover\:bg-gray-900:hover{background-color:#1a202c}.md\:hover\:bg-red-100:hover{background-color:#fff5f5}.md\:hover\:bg-red-200:hover{background-color:#fed7d7}.md\:hover\:bg-red-300:hover{background-color:#feb2b2}.md\:hover\:bg-red-400:hover{background-color:#fc8181}.md\:hover\:bg-red-500:hover{background-color:#f56565}.md\:hover\:bg-red-600:hover{background-color:#e53e3e}.md\:hover\:bg-red-700:hover{background-color:#c53030}.md\:hover\:bg-red-800:hover{background-color:#9b2c2c}.md\:hover\:bg-red-900:hover{background-color:#742a2a}.md\:hover\:bg-orange-100:hover{background-color:#fffaf0}.md\:hover\:bg-orange-200:hover{background-color:#feebc8}.md\:hover\:bg-orange-300:hover{background-color:#fbd38d}.md\:hover\:bg-orange-400:hover{background-color:#f6ad55}.md\:hover\:bg-orange-500:hover{background-color:#ed8936}.md\:hover\:bg-orange-600:hover{background-color:#dd6b20}.md\:hover\:bg-orange-700:hover{background-color:#c05621}.md\:hover\:bg-orange-800:hover{background-color:#9c4221}.md\:hover\:bg-orange-900:hover{background-color:#7b341e}.md\:hover\:bg-yellow-100:hover{background-color:ivory}.md\:hover\:bg-yellow-200:hover{background-color:#fefcbf}.md\:hover\:bg-yellow-300:hover{background-color:#faf089}.md\:hover\:bg-yellow-400:hover{background-color:#f6e05e}.md\:hover\:bg-yellow-500:hover{background-color:#ecc94b}.md\:hover\:bg-yellow-600:hover{background-color:#d69e2e}.md\:hover\:bg-yellow-700:hover{background-color:#b7791f}.md\:hover\:bg-yellow-800:hover{background-color:#975a16}.md\:hover\:bg-yellow-900:hover{background-color:#744210}.md\:hover\:bg-green-100:hover{background-color:#f0fff4}.md\:hover\:bg-green-200:hover{background-color:#c6f6d5}.md\:hover\:bg-green-300:hover{background-color:#9ae6b4}.md\:hover\:bg-green-400:hover{background-color:#68d391}.md\:hover\:bg-green-500:hover{background-color:#48bb78}.md\:hover\:bg-green-600:hover{background-color:#38a169}.md\:hover\:bg-green-700:hover{background-color:#2f855a}.md\:hover\:bg-green-800:hover{background-color:#276749}.md\:hover\:bg-green-900:hover{background-color:#22543d}.md\:hover\:bg-teal-100:hover{background-color:#e6fffa}.md\:hover\:bg-teal-200:hover{background-color:#b2f5ea}.md\:hover\:bg-teal-300:hover{background-color:#81e6d9}.md\:hover\:bg-teal-400:hover{background-color:#4fd1c5}.md\:hover\:bg-teal-500:hover{background-color:#38b2ac}.md\:hover\:bg-teal-600:hover{background-color:#319795}.md\:hover\:bg-teal-700:hover{background-color:#2c7a7b}.md\:hover\:bg-teal-800:hover{background-color:#285e61}.md\:hover\:bg-teal-900:hover{background-color:#234e52}.md\:hover\:bg-blue-100:hover{background-color:#ebf8ff}.md\:hover\:bg-blue-200:hover{background-color:#bee3f8}.md\:hover\:bg-blue-300:hover{background-color:#90cdf4}.md\:hover\:bg-blue-400:hover{background-color:#63b3ed}.md\:hover\:bg-blue-500:hover{background-color:#4299e1}.md\:hover\:bg-blue-600:hover{background-color:#3182ce}.md\:hover\:bg-blue-700:hover{background-color:#2b6cb0}.md\:hover\:bg-blue-800:hover{background-color:#2c5282}.md\:hover\:bg-blue-900:hover{background-color:#2a4365}.md\:hover\:bg-indigo-100:hover{background-color:#ebf4ff}.md\:hover\:bg-indigo-200:hover{background-color:#c3dafe}.md\:hover\:bg-indigo-300:hover{background-color:#a3bffa}.md\:hover\:bg-indigo-400:hover{background-color:#7f9cf5}.md\:hover\:bg-indigo-500:hover{background-color:#667eea}.md\:hover\:bg-indigo-600:hover{background-color:#5a67d8}.md\:hover\:bg-indigo-700:hover{background-color:#4c51bf}.md\:hover\:bg-indigo-800:hover{background-color:#434190}.md\:hover\:bg-indigo-900:hover{background-color:#3c366b}.md\:hover\:bg-purple-100:hover{background-color:#faf5ff}.md\:hover\:bg-purple-200:hover{background-color:#e9d8fd}.md\:hover\:bg-purple-300:hover{background-color:#d6bcfa}.md\:hover\:bg-purple-400:hover{background-color:#b794f4}.md\:hover\:bg-purple-500:hover{background-color:#9f7aea}.md\:hover\:bg-purple-600:hover{background-color:#805ad5}.md\:hover\:bg-purple-700:hover{background-color:#6b46c1}.md\:hover\:bg-purple-800:hover{background-color:#553c9a}.md\:hover\:bg-purple-900:hover{background-color:#44337a}.md\:hover\:bg-pink-100:hover{background-color:#fff5f7}.md\:hover\:bg-pink-200:hover{background-color:#fed7e2}.md\:hover\:bg-pink-300:hover{background-color:#fbb6ce}.md\:hover\:bg-pink-400:hover{background-color:#f687b3}.md\:hover\:bg-pink-500:hover{background-color:#ed64a6}.md\:hover\:bg-pink-600:hover{background-color:#d53f8c}.md\:hover\:bg-pink-700:hover{background-color:#b83280}.md\:hover\:bg-pink-800:hover{background-color:#97266d}.md\:hover\:bg-pink-900:hover{background-color:#702459}.md\:focus\:bg-transparent:focus{background-color:transparent}.md\:focus\:bg-black:focus{background-color:#000}.md\:focus\:bg-white:focus{background-color:#fff}.md\:focus\:bg-gray-100:focus{background-color:#f7fafc}.md\:focus\:bg-gray-200:focus{background-color:#edf2f7}.md\:focus\:bg-gray-300:focus{background-color:#e2e8f0}.md\:focus\:bg-gray-400:focus{background-color:#cbd5e0}.md\:focus\:bg-gray-500:focus{background-color:#a0aec0}.md\:focus\:bg-gray-600:focus{background-color:#718096}.md\:focus\:bg-gray-700:focus{background-color:#4a5568}.md\:focus\:bg-gray-800:focus{background-color:#2d3748}.md\:focus\:bg-gray-900:focus{background-color:#1a202c}.md\:focus\:bg-red-100:focus{background-color:#fff5f5}.md\:focus\:bg-red-200:focus{background-color:#fed7d7}.md\:focus\:bg-red-300:focus{background-color:#feb2b2}.md\:focus\:bg-red-400:focus{background-color:#fc8181}.md\:focus\:bg-red-500:focus{background-color:#f56565}.md\:focus\:bg-red-600:focus{background-color:#e53e3e}.md\:focus\:bg-red-700:focus{background-color:#c53030}.md\:focus\:bg-red-800:focus{background-color:#9b2c2c}.md\:focus\:bg-red-900:focus{background-color:#742a2a}.md\:focus\:bg-orange-100:focus{background-color:#fffaf0}.md\:focus\:bg-orange-200:focus{background-color:#feebc8}.md\:focus\:bg-orange-300:focus{background-color:#fbd38d}.md\:focus\:bg-orange-400:focus{background-color:#f6ad55}.md\:focus\:bg-orange-500:focus{background-color:#ed8936}.md\:focus\:bg-orange-600:focus{background-color:#dd6b20}.md\:focus\:bg-orange-700:focus{background-color:#c05621}.md\:focus\:bg-orange-800:focus{background-color:#9c4221}.md\:focus\:bg-orange-900:focus{background-color:#7b341e}.md\:focus\:bg-yellow-100:focus{background-color:ivory}.md\:focus\:bg-yellow-200:focus{background-color:#fefcbf}.md\:focus\:bg-yellow-300:focus{background-color:#faf089}.md\:focus\:bg-yellow-400:focus{background-color:#f6e05e}.md\:focus\:bg-yellow-500:focus{background-color:#ecc94b}.md\:focus\:bg-yellow-600:focus{background-color:#d69e2e}.md\:focus\:bg-yellow-700:focus{background-color:#b7791f}.md\:focus\:bg-yellow-800:focus{background-color:#975a16}.md\:focus\:bg-yellow-900:focus{background-color:#744210}.md\:focus\:bg-green-100:focus{background-color:#f0fff4}.md\:focus\:bg-green-200:focus{background-color:#c6f6d5}.md\:focus\:bg-green-300:focus{background-color:#9ae6b4}.md\:focus\:bg-green-400:focus{background-color:#68d391}.md\:focus\:bg-green-500:focus{background-color:#48bb78}.md\:focus\:bg-green-600:focus{background-color:#38a169}.md\:focus\:bg-green-700:focus{background-color:#2f855a}.md\:focus\:bg-green-800:focus{background-color:#276749}.md\:focus\:bg-green-900:focus{background-color:#22543d}.md\:focus\:bg-teal-100:focus{background-color:#e6fffa}.md\:focus\:bg-teal-200:focus{background-color:#b2f5ea}.md\:focus\:bg-teal-300:focus{background-color:#81e6d9}.md\:focus\:bg-teal-400:focus{background-color:#4fd1c5}.md\:focus\:bg-teal-500:focus{background-color:#38b2ac}.md\:focus\:bg-teal-600:focus{background-color:#319795}.md\:focus\:bg-teal-700:focus{background-color:#2c7a7b}.md\:focus\:bg-teal-800:focus{background-color:#285e61}.md\:focus\:bg-teal-900:focus{background-color:#234e52}.md\:focus\:bg-blue-100:focus{background-color:#ebf8ff}.md\:focus\:bg-blue-200:focus{background-color:#bee3f8}.md\:focus\:bg-blue-300:focus{background-color:#90cdf4}.md\:focus\:bg-blue-400:focus{background-color:#63b3ed}.md\:focus\:bg-blue-500:focus{background-color:#4299e1}.md\:focus\:bg-blue-600:focus{background-color:#3182ce}.md\:focus\:bg-blue-700:focus{background-color:#2b6cb0}.md\:focus\:bg-blue-800:focus{background-color:#2c5282}.md\:focus\:bg-blue-900:focus{background-color:#2a4365}.md\:focus\:bg-indigo-100:focus{background-color:#ebf4ff}.md\:focus\:bg-indigo-200:focus{background-color:#c3dafe}.md\:focus\:bg-indigo-300:focus{background-color:#a3bffa}.md\:focus\:bg-indigo-400:focus{background-color:#7f9cf5}.md\:focus\:bg-indigo-500:focus{background-color:#667eea}.md\:focus\:bg-indigo-600:focus{background-color:#5a67d8}.md\:focus\:bg-indigo-700:focus{background-color:#4c51bf}.md\:focus\:bg-indigo-800:focus{background-color:#434190}.md\:focus\:bg-indigo-900:focus{background-color:#3c366b}.md\:focus\:bg-purple-100:focus{background-color:#faf5ff}.md\:focus\:bg-purple-200:focus{background-color:#e9d8fd}.md\:focus\:bg-purple-300:focus{background-color:#d6bcfa}.md\:focus\:bg-purple-400:focus{background-color:#b794f4}.md\:focus\:bg-purple-500:focus{background-color:#9f7aea}.md\:focus\:bg-purple-600:focus{background-color:#805ad5}.md\:focus\:bg-purple-700:focus{background-color:#6b46c1}.md\:focus\:bg-purple-800:focus{background-color:#553c9a}.md\:focus\:bg-purple-900:focus{background-color:#44337a}.md\:focus\:bg-pink-100:focus{background-color:#fff5f7}.md\:focus\:bg-pink-200:focus{background-color:#fed7e2}.md\:focus\:bg-pink-300:focus{background-color:#fbb6ce}.md\:focus\:bg-pink-400:focus{background-color:#f687b3}.md\:focus\:bg-pink-500:focus{background-color:#ed64a6}.md\:focus\:bg-pink-600:focus{background-color:#d53f8c}.md\:focus\:bg-pink-700:focus{background-color:#b83280}.md\:focus\:bg-pink-800:focus{background-color:#97266d}.md\:focus\:bg-pink-900:focus{background-color:#702459}.md\:bg-bottom{background-position:bottom}.md\:bg-center{background-position:center}.md\:bg-left{background-position:left}.md\:bg-left-bottom{background-position:left bottom}.md\:bg-left-top{background-position:left top}.md\:bg-right{background-position:right}.md\:bg-right-bottom{background-position:right bottom}.md\:bg-right-top{background-position:right top}.md\:bg-top{background-position:top}.md\:bg-repeat{background-repeat:repeat}.md\:bg-no-repeat{background-repeat:no-repeat}.md\:bg-repeat-x{background-repeat:repeat-x}.md\:bg-repeat-y{background-repeat:repeat-y}.md\:bg-repeat-round{background-repeat:round}.md\:bg-repeat-space{background-repeat:space}.md\:bg-auto{background-size:auto}.md\:bg-cover{background-size:cover}.md\:bg-contain{background-size:contain}.md\:border-collapse{border-collapse:collapse}.md\:border-separate{border-collapse:separate}.md\:border-transparent{border-color:transparent}.md\:border-black{border-color:#000}.md\:border-white{border-color:#fff}.md\:border-gray-100{border-color:#f7fafc}.md\:border-gray-200{border-color:#edf2f7}.md\:border-gray-300{border-color:#e2e8f0}.md\:border-gray-400{border-color:#cbd5e0}.md\:border-gray-500{border-color:#a0aec0}.md\:border-gray-600{border-color:#718096}.md\:border-gray-700{border-color:#4a5568}.md\:border-gray-800{border-color:#2d3748}.md\:border-gray-900{border-color:#1a202c}.md\:border-red-100{border-color:#fff5f5}.md\:border-red-200{border-color:#fed7d7}.md\:border-red-300{border-color:#feb2b2}.md\:border-red-400{border-color:#fc8181}.md\:border-red-500{border-color:#f56565}.md\:border-red-600{border-color:#e53e3e}.md\:border-red-700{border-color:#c53030}.md\:border-red-800{border-color:#9b2c2c}.md\:border-red-900{border-color:#742a2a}.md\:border-orange-100{border-color:#fffaf0}.md\:border-orange-200{border-color:#feebc8}.md\:border-orange-300{border-color:#fbd38d}.md\:border-orange-400{border-color:#f6ad55}.md\:border-orange-500{border-color:#ed8936}.md\:border-orange-600{border-color:#dd6b20}.md\:border-orange-700{border-color:#c05621}.md\:border-orange-800{border-color:#9c4221}.md\:border-orange-900{border-color:#7b341e}.md\:border-yellow-100{border-color:ivory}.md\:border-yellow-200{border-color:#fefcbf}.md\:border-yellow-300{border-color:#faf089}.md\:border-yellow-400{border-color:#f6e05e}.md\:border-yellow-500{border-color:#ecc94b}.md\:border-yellow-600{border-color:#d69e2e}.md\:border-yellow-700{border-color:#b7791f}.md\:border-yellow-800{border-color:#975a16}.md\:border-yellow-900{border-color:#744210}.md\:border-green-100{border-color:#f0fff4}.md\:border-green-200{border-color:#c6f6d5}.md\:border-green-300{border-color:#9ae6b4}.md\:border-green-400{border-color:#68d391}.md\:border-green-500{border-color:#48bb78}.md\:border-green-600{border-color:#38a169}.md\:border-green-700{border-color:#2f855a}.md\:border-green-800{border-color:#276749}.md\:border-green-900{border-color:#22543d}.md\:border-teal-100{border-color:#e6fffa}.md\:border-teal-200{border-color:#b2f5ea}.md\:border-teal-300{border-color:#81e6d9}.md\:border-teal-400{border-color:#4fd1c5}.md\:border-teal-500{border-color:#38b2ac}.md\:border-teal-600{border-color:#319795}.md\:border-teal-700{border-color:#2c7a7b}.md\:border-teal-800{border-color:#285e61}.md\:border-teal-900{border-color:#234e52}.md\:border-blue-100{border-color:#ebf8ff}.md\:border-blue-200{border-color:#bee3f8}.md\:border-blue-300{border-color:#90cdf4}.md\:border-blue-400{border-color:#63b3ed}.md\:border-blue-500{border-color:#4299e1}.md\:border-blue-600{border-color:#3182ce}.md\:border-blue-700{border-color:#2b6cb0}.md\:border-blue-800{border-color:#2c5282}.md\:border-blue-900{border-color:#2a4365}.md\:border-indigo-100{border-color:#ebf4ff}.md\:border-indigo-200{border-color:#c3dafe}.md\:border-indigo-300{border-color:#a3bffa}.md\:border-indigo-400{border-color:#7f9cf5}.md\:border-indigo-500{border-color:#667eea}.md\:border-indigo-600{border-color:#5a67d8}.md\:border-indigo-700{border-color:#4c51bf}.md\:border-indigo-800{border-color:#434190}.md\:border-indigo-900{border-color:#3c366b}.md\:border-purple-100{border-color:#faf5ff}.md\:border-purple-200{border-color:#e9d8fd}.md\:border-purple-300{border-color:#d6bcfa}.md\:border-purple-400{border-color:#b794f4}.md\:border-purple-500{border-color:#9f7aea}.md\:border-purple-600{border-color:#805ad5}.md\:border-purple-700{border-color:#6b46c1}.md\:border-purple-800{border-color:#553c9a}.md\:border-purple-900{border-color:#44337a}.md\:border-pink-100{border-color:#fff5f7}.md\:border-pink-200{border-color:#fed7e2}.md\:border-pink-300{border-color:#fbb6ce}.md\:border-pink-400{border-color:#f687b3}.md\:border-pink-500{border-color:#ed64a6}.md\:border-pink-600{border-color:#d53f8c}.md\:border-pink-700{border-color:#b83280}.md\:border-pink-800{border-color:#97266d}.md\:border-pink-900{border-color:#702459}.md\:hover\:border-transparent:hover{border-color:transparent}.md\:hover\:border-black:hover{border-color:#000}.md\:hover\:border-white:hover{border-color:#fff}.md\:hover\:border-gray-100:hover{border-color:#f7fafc}.md\:hover\:border-gray-200:hover{border-color:#edf2f7}.md\:hover\:border-gray-300:hover{border-color:#e2e8f0}.md\:hover\:border-gray-400:hover{border-color:#cbd5e0}.md\:hover\:border-gray-500:hover{border-color:#a0aec0}.md\:hover\:border-gray-600:hover{border-color:#718096}.md\:hover\:border-gray-700:hover{border-color:#4a5568}.md\:hover\:border-gray-800:hover{border-color:#2d3748}.md\:hover\:border-gray-900:hover{border-color:#1a202c}.md\:hover\:border-red-100:hover{border-color:#fff5f5}.md\:hover\:border-red-200:hover{border-color:#fed7d7}.md\:hover\:border-red-300:hover{border-color:#feb2b2}.md\:hover\:border-red-400:hover{border-color:#fc8181}.md\:hover\:border-red-500:hover{border-color:#f56565}.md\:hover\:border-red-600:hover{border-color:#e53e3e}.md\:hover\:border-red-700:hover{border-color:#c53030}.md\:hover\:border-red-800:hover{border-color:#9b2c2c}.md\:hover\:border-red-900:hover{border-color:#742a2a}.md\:hover\:border-orange-100:hover{border-color:#fffaf0}.md\:hover\:border-orange-200:hover{border-color:#feebc8}.md\:hover\:border-orange-300:hover{border-color:#fbd38d}.md\:hover\:border-orange-400:hover{border-color:#f6ad55}.md\:hover\:border-orange-500:hover{border-color:#ed8936}.md\:hover\:border-orange-600:hover{border-color:#dd6b20}.md\:hover\:border-orange-700:hover{border-color:#c05621}.md\:hover\:border-orange-800:hover{border-color:#9c4221}.md\:hover\:border-orange-900:hover{border-color:#7b341e}.md\:hover\:border-yellow-100:hover{border-color:ivory}.md\:hover\:border-yellow-200:hover{border-color:#fefcbf}.md\:hover\:border-yellow-300:hover{border-color:#faf089}.md\:hover\:border-yellow-400:hover{border-color:#f6e05e}.md\:hover\:border-yellow-500:hover{border-color:#ecc94b}.md\:hover\:border-yellow-600:hover{border-color:#d69e2e}.md\:hover\:border-yellow-700:hover{border-color:#b7791f}.md\:hover\:border-yellow-800:hover{border-color:#975a16}.md\:hover\:border-yellow-900:hover{border-color:#744210}.md\:hover\:border-green-100:hover{border-color:#f0fff4}.md\:hover\:border-green-200:hover{border-color:#c6f6d5}.md\:hover\:border-green-300:hover{border-color:#9ae6b4}.md\:hover\:border-green-400:hover{border-color:#68d391}.md\:hover\:border-green-500:hover{border-color:#48bb78}.md\:hover\:border-green-600:hover{border-color:#38a169}.md\:hover\:border-green-700:hover{border-color:#2f855a}.md\:hover\:border-green-800:hover{border-color:#276749}.md\:hover\:border-green-900:hover{border-color:#22543d}.md\:hover\:border-teal-100:hover{border-color:#e6fffa}.md\:hover\:border-teal-200:hover{border-color:#b2f5ea}.md\:hover\:border-teal-300:hover{border-color:#81e6d9}.md\:hover\:border-teal-400:hover{border-color:#4fd1c5}.md\:hover\:border-teal-500:hover{border-color:#38b2ac}.md\:hover\:border-teal-600:hover{border-color:#319795}.md\:hover\:border-teal-700:hover{border-color:#2c7a7b}.md\:hover\:border-teal-800:hover{border-color:#285e61}.md\:hover\:border-teal-900:hover{border-color:#234e52}.md\:hover\:border-blue-100:hover{border-color:#ebf8ff}.md\:hover\:border-blue-200:hover{border-color:#bee3f8}.md\:hover\:border-blue-300:hover{border-color:#90cdf4}.md\:hover\:border-blue-400:hover{border-color:#63b3ed}.md\:hover\:border-blue-500:hover{border-color:#4299e1}.md\:hover\:border-blue-600:hover{border-color:#3182ce}.md\:hover\:border-blue-700:hover{border-color:#2b6cb0}.md\:hover\:border-blue-800:hover{border-color:#2c5282}.md\:hover\:border-blue-900:hover{border-color:#2a4365}.md\:hover\:border-indigo-100:hover{border-color:#ebf4ff}.md\:hover\:border-indigo-200:hover{border-color:#c3dafe}.md\:hover\:border-indigo-300:hover{border-color:#a3bffa}.md\:hover\:border-indigo-400:hover{border-color:#7f9cf5}.md\:hover\:border-indigo-500:hover{border-color:#667eea}.md\:hover\:border-indigo-600:hover{border-color:#5a67d8}.md\:hover\:border-indigo-700:hover{border-color:#4c51bf}.md\:hover\:border-indigo-800:hover{border-color:#434190}.md\:hover\:border-indigo-900:hover{border-color:#3c366b}.md\:hover\:border-purple-100:hover{border-color:#faf5ff}.md\:hover\:border-purple-200:hover{border-color:#e9d8fd}.md\:hover\:border-purple-300:hover{border-color:#d6bcfa}.md\:hover\:border-purple-400:hover{border-color:#b794f4}.md\:hover\:border-purple-500:hover{border-color:#9f7aea}.md\:hover\:border-purple-600:hover{border-color:#805ad5}.md\:hover\:border-purple-700:hover{border-color:#6b46c1}.md\:hover\:border-purple-800:hover{border-color:#553c9a}.md\:hover\:border-purple-900:hover{border-color:#44337a}.md\:hover\:border-pink-100:hover{border-color:#fff5f7}.md\:hover\:border-pink-200:hover{border-color:#fed7e2}.md\:hover\:border-pink-300:hover{border-color:#fbb6ce}.md\:hover\:border-pink-400:hover{border-color:#f687b3}.md\:hover\:border-pink-500:hover{border-color:#ed64a6}.md\:hover\:border-pink-600:hover{border-color:#d53f8c}.md\:hover\:border-pink-700:hover{border-color:#b83280}.md\:hover\:border-pink-800:hover{border-color:#97266d}.md\:hover\:border-pink-900:hover{border-color:#702459}.md\:focus\:border-transparent:focus{border-color:transparent}.md\:focus\:border-black:focus{border-color:#000}.md\:focus\:border-white:focus{border-color:#fff}.md\:focus\:border-gray-100:focus{border-color:#f7fafc}.md\:focus\:border-gray-200:focus{border-color:#edf2f7}.md\:focus\:border-gray-300:focus{border-color:#e2e8f0}.md\:focus\:border-gray-400:focus{border-color:#cbd5e0}.md\:focus\:border-gray-500:focus{border-color:#a0aec0}.md\:focus\:border-gray-600:focus{border-color:#718096}.md\:focus\:border-gray-700:focus{border-color:#4a5568}.md\:focus\:border-gray-800:focus{border-color:#2d3748}.md\:focus\:border-gray-900:focus{border-color:#1a202c}.md\:focus\:border-red-100:focus{border-color:#fff5f5}.md\:focus\:border-red-200:focus{border-color:#fed7d7}.md\:focus\:border-red-300:focus{border-color:#feb2b2}.md\:focus\:border-red-400:focus{border-color:#fc8181}.md\:focus\:border-red-500:focus{border-color:#f56565}.md\:focus\:border-red-600:focus{border-color:#e53e3e}.md\:focus\:border-red-700:focus{border-color:#c53030}.md\:focus\:border-red-800:focus{border-color:#9b2c2c}.md\:focus\:border-red-900:focus{border-color:#742a2a}.md\:focus\:border-orange-100:focus{border-color:#fffaf0}.md\:focus\:border-orange-200:focus{border-color:#feebc8}.md\:focus\:border-orange-300:focus{border-color:#fbd38d}.md\:focus\:border-orange-400:focus{border-color:#f6ad55}.md\:focus\:border-orange-500:focus{border-color:#ed8936}.md\:focus\:border-orange-600:focus{border-color:#dd6b20}.md\:focus\:border-orange-700:focus{border-color:#c05621}.md\:focus\:border-orange-800:focus{border-color:#9c4221}.md\:focus\:border-orange-900:focus{border-color:#7b341e}.md\:focus\:border-yellow-100:focus{border-color:ivory}.md\:focus\:border-yellow-200:focus{border-color:#fefcbf}.md\:focus\:border-yellow-300:focus{border-color:#faf089}.md\:focus\:border-yellow-400:focus{border-color:#f6e05e}.md\:focus\:border-yellow-500:focus{border-color:#ecc94b}.md\:focus\:border-yellow-600:focus{border-color:#d69e2e}.md\:focus\:border-yellow-700:focus{border-color:#b7791f}.md\:focus\:border-yellow-800:focus{border-color:#975a16}.md\:focus\:border-yellow-900:focus{border-color:#744210}.md\:focus\:border-green-100:focus{border-color:#f0fff4}.md\:focus\:border-green-200:focus{border-color:#c6f6d5}.md\:focus\:border-green-300:focus{border-color:#9ae6b4}.md\:focus\:border-green-400:focus{border-color:#68d391}.md\:focus\:border-green-500:focus{border-color:#48bb78}.md\:focus\:border-green-600:focus{border-color:#38a169}.md\:focus\:border-green-700:focus{border-color:#2f855a}.md\:focus\:border-green-800:focus{border-color:#276749}.md\:focus\:border-green-900:focus{border-color:#22543d}.md\:focus\:border-teal-100:focus{border-color:#e6fffa}.md\:focus\:border-teal-200:focus{border-color:#b2f5ea}.md\:focus\:border-teal-300:focus{border-color:#81e6d9}.md\:focus\:border-teal-400:focus{border-color:#4fd1c5}.md\:focus\:border-teal-500:focus{border-color:#38b2ac}.md\:focus\:border-teal-600:focus{border-color:#319795}.md\:focus\:border-teal-700:focus{border-color:#2c7a7b}.md\:focus\:border-teal-800:focus{border-color:#285e61}.md\:focus\:border-teal-900:focus{border-color:#234e52}.md\:focus\:border-blue-100:focus{border-color:#ebf8ff}.md\:focus\:border-blue-200:focus{border-color:#bee3f8}.md\:focus\:border-blue-300:focus{border-color:#90cdf4}.md\:focus\:border-blue-400:focus{border-color:#63b3ed}.md\:focus\:border-blue-500:focus{border-color:#4299e1}.md\:focus\:border-blue-600:focus{border-color:#3182ce}.md\:focus\:border-blue-700:focus{border-color:#2b6cb0}.md\:focus\:border-blue-800:focus{border-color:#2c5282}.md\:focus\:border-blue-900:focus{border-color:#2a4365}.md\:focus\:border-indigo-100:focus{border-color:#ebf4ff}.md\:focus\:border-indigo-200:focus{border-color:#c3dafe}.md\:focus\:border-indigo-300:focus{border-color:#a3bffa}.md\:focus\:border-indigo-400:focus{border-color:#7f9cf5}.md\:focus\:border-indigo-500:focus{border-color:#667eea}.md\:focus\:border-indigo-600:focus{border-color:#5a67d8}.md\:focus\:border-indigo-700:focus{border-color:#4c51bf}.md\:focus\:border-indigo-800:focus{border-color:#434190}.md\:focus\:border-indigo-900:focus{border-color:#3c366b}.md\:focus\:border-purple-100:focus{border-color:#faf5ff}.md\:focus\:border-purple-200:focus{border-color:#e9d8fd}.md\:focus\:border-purple-300:focus{border-color:#d6bcfa}.md\:focus\:border-purple-400:focus{border-color:#b794f4}.md\:focus\:border-purple-500:focus{border-color:#9f7aea}.md\:focus\:border-purple-600:focus{border-color:#805ad5}.md\:focus\:border-purple-700:focus{border-color:#6b46c1}.md\:focus\:border-purple-800:focus{border-color:#553c9a}.md\:focus\:border-purple-900:focus{border-color:#44337a}.md\:focus\:border-pink-100:focus{border-color:#fff5f7}.md\:focus\:border-pink-200:focus{border-color:#fed7e2}.md\:focus\:border-pink-300:focus{border-color:#fbb6ce}.md\:focus\:border-pink-400:focus{border-color:#f687b3}.md\:focus\:border-pink-500:focus{border-color:#ed64a6}.md\:focus\:border-pink-600:focus{border-color:#d53f8c}.md\:focus\:border-pink-700:focus{border-color:#b83280}.md\:focus\:border-pink-800:focus{border-color:#97266d}.md\:focus\:border-pink-900:focus{border-color:#702459}.md\:rounded-none{border-radius:0}.md\:rounded-sm{border-radius:.125rem}.md\:rounded{border-radius:.25rem}.md\:rounded-lg{border-radius:.5rem}.md\:rounded-full{border-radius:9999px}.md\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.md\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.md\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.md\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.md\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.md\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.md\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.md\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.md\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.md\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.md\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.md\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.md\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.md\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.md\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.md\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.md\:rounded-tl-none{border-top-left-radius:0}.md\:rounded-tr-none{border-top-right-radius:0}.md\:rounded-br-none{border-bottom-right-radius:0}.md\:rounded-bl-none{border-bottom-left-radius:0}.md\:rounded-tl-sm{border-top-left-radius:.125rem}.md\:rounded-tr-sm{border-top-right-radius:.125rem}.md\:rounded-br-sm{border-bottom-right-radius:.125rem}.md\:rounded-bl-sm{border-bottom-left-radius:.125rem}.md\:rounded-tl{border-top-left-radius:.25rem}.md\:rounded-tr{border-top-right-radius:.25rem}.md\:rounded-br{border-bottom-right-radius:.25rem}.md\:rounded-bl{border-bottom-left-radius:.25rem}.md\:rounded-tl-lg{border-top-left-radius:.5rem}.md\:rounded-tr-lg{border-top-right-radius:.5rem}.md\:rounded-br-lg{border-bottom-right-radius:.5rem}.md\:rounded-bl-lg{border-bottom-left-radius:.5rem}.md\:rounded-tl-full{border-top-left-radius:9999px}.md\:rounded-tr-full{border-top-right-radius:9999px}.md\:rounded-br-full{border-bottom-right-radius:9999px}.md\:rounded-bl-full{border-bottom-left-radius:9999px}.md\:border-solid{border-style:solid}.md\:border-dashed{border-style:dashed}.md\:border-dotted{border-style:dotted}.md\:border-none{border-style:none}.md\:border-0{border-width:0}.md\:border-2{border-width:2px}.md\:border-4{border-width:4px}.md\:border-8{border-width:8px}.md\:border{border-width:1px}.md\:border-t-0{border-top-width:0}.md\:border-r-0{border-right-width:0}.md\:border-b-0{border-bottom-width:0}.md\:border-l-0{border-left-width:0}.md\:border-t-2{border-top-width:2px}.md\:border-r-2{border-right-width:2px}.md\:border-b-2{border-bottom-width:2px}.md\:border-l-2{border-left-width:2px}.md\:border-t-4{border-top-width:4px}.md\:border-r-4{border-right-width:4px}.md\:border-b-4{border-bottom-width:4px}.md\:border-l-4{border-left-width:4px}.md\:border-t-8{border-top-width:8px}.md\:border-r-8{border-right-width:8px}.md\:border-b-8{border-bottom-width:8px}.md\:border-l-8{border-left-width:8px}.md\:border-t{border-top-width:1px}.md\:border-r{border-right-width:1px}.md\:border-b{border-bottom-width:1px}.md\:border-l{border-left-width:1px}.md\:cursor-auto{cursor:auto}.md\:cursor-default{cursor:default}.md\:cursor-pointer{cursor:pointer}.md\:cursor-wait{cursor:wait}.md\:cursor-text{cursor:text}.md\:cursor-move{cursor:move}.md\:cursor-not-allowed{cursor:not-allowed}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:table{display:table}.md\:table-row{display:table-row}.md\:table-cell{display:table-cell}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:flex-col{flex-direction:column}.md\:flex-col-reverse{flex-direction:column-reverse}.md\:flex-wrap{flex-wrap:wrap}.md\:flex-wrap-reverse{flex-wrap:wrap-reverse}.md\:flex-no-wrap{flex-wrap:nowrap}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:items-baseline{align-items:baseline}.md\:items-stretch{align-items:stretch}.md\:self-auto{align-self:auto}.md\:self-start{align-self:flex-start}.md\:self-end{align-self:flex-end}.md\:self-center{align-self:center}.md\:self-stretch{align-self:stretch}.md\:justify-start{justify-content:flex-start}.md\:justify-end{justify-content:flex-end}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:justify-around{justify-content:space-around}.md\:content-center{align-content:center}.md\:content-start{align-content:flex-start}.md\:content-end{align-content:flex-end}.md\:content-between{align-content:space-between}.md\:content-around{align-content:space-around}.md\:flex-1{flex:1 1 0%}.md\:flex-auto{flex:1 1 auto}.md\:flex-initial{flex:0 1 auto}.md\:flex-none{flex:none}.md\:flex-grow-0{flex-grow:0}.md\:flex-grow{flex-grow:1}.md\:flex-shrink-0{flex-shrink:0}.md\:flex-shrink{flex-shrink:1}.md\:order-1{order:1}.md\:order-2{order:2}.md\:order-3{order:3}.md\:order-4{order:4}.md\:order-5{order:5}.md\:order-6{order:6}.md\:order-7{order:7}.md\:order-8{order:8}.md\:order-9{order:9}.md\:order-10{order:10}.md\:order-11{order:11}.md\:order-12{order:12}.md\:order-first{order:-9999}.md\:order-last{order:9999}.md\:order-none{order:0}.md\:float-right{float:right}.md\:float-left{float:left}.md\:float-none{float:none}.md\:clearfix:after{content:"";display:table;clear:both}.md\:font-sans{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.md\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.md\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.md\:font-hairline{font-weight:100}.md\:font-thin{font-weight:200}.md\:font-light{font-weight:300}.md\:font-normal{font-weight:400}.md\:font-medium{font-weight:500}.md\:font-semibold{font-weight:600}.md\:font-bold{font-weight:700}.md\:font-extrabold{font-weight:800}.md\:font-black{font-weight:900}.md\:hover\:font-hairline:hover{font-weight:100}.md\:hover\:font-thin:hover{font-weight:200}.md\:hover\:font-light:hover{font-weight:300}.md\:hover\:font-normal:hover{font-weight:400}.md\:hover\:font-medium:hover{font-weight:500}.md\:hover\:font-semibold:hover{font-weight:600}.md\:hover\:font-bold:hover{font-weight:700}.md\:hover\:font-extrabold:hover{font-weight:800}.md\:hover\:font-black:hover{font-weight:900}.md\:focus\:font-hairline:focus{font-weight:100}.md\:focus\:font-thin:focus{font-weight:200}.md\:focus\:font-light:focus{font-weight:300}.md\:focus\:font-normal:focus{font-weight:400}.md\:focus\:font-medium:focus{font-weight:500}.md\:focus\:font-semibold:focus{font-weight:600}.md\:focus\:font-bold:focus{font-weight:700}.md\:focus\:font-extrabold:focus{font-weight:800}.md\:focus\:font-black:focus{font-weight:900}.md\:h-0{height:0}.md\:h-1{height:.25rem}.md\:h-2{height:.5rem}.md\:h-3{height:.75rem}.md\:h-4{height:1rem}.md\:h-5{height:1.25rem}.md\:h-6{height:1.5rem}.md\:h-8{height:2rem}.md\:h-10{height:2.5rem}.md\:h-12{height:3rem}.md\:h-16{height:4rem}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-32{height:8rem}.md\:h-40{height:10rem}.md\:h-48{height:12rem}.md\:h-56{height:14rem}.md\:h-64{height:16rem}.md\:h-auto{height:auto}.md\:h-px{height:1px}.md\:h-full{height:100%}.md\:h-screen{height:100vh}.md\:leading-none{line-height:1}.md\:leading-tight{line-height:1.25}.md\:leading-snug{line-height:1.375}.md\:leading-normal{line-height:1.5}.md\:leading-relaxed{line-height:1.625}.md\:leading-loose{line-height:2}.md\:list-inside{list-style-position:inside}.md\:list-outside{list-style-position:outside}.md\:list-none{list-style-type:none}.md\:list-disc{list-style-type:disc}.md\:list-decimal{list-style-type:decimal}.md\:m-0{margin:0}.md\:m-1{margin:.25rem}.md\:m-2{margin:.5rem}.md\:m-3{margin:.75rem}.md\:m-4{margin:1rem}.md\:m-5{margin:1.25rem}.md\:m-6{margin:1.5rem}.md\:m-8{margin:2rem}.md\:m-10{margin:2.5rem}.md\:m-12{margin:3rem}.md\:m-16{margin:4rem}.md\:m-20{margin:5rem}.md\:m-24{margin:6rem}.md\:m-32{margin:8rem}.md\:m-40{margin:10rem}.md\:m-48{margin:12rem}.md\:m-56{margin:14rem}.md\:m-64{margin:16rem}.md\:m-auto{margin:auto}.md\:m-px{margin:1px}.md\:-m-1{margin:-.25rem}.md\:-m-2{margin:-.5rem}.md\:-m-3{margin:-.75rem}.md\:-m-4{margin:-1rem}.md\:-m-5{margin:-1.25rem}.md\:-m-6{margin:-1.5rem}.md\:-m-8{margin:-2rem}.md\:-m-10{margin:-2.5rem}.md\:-m-12{margin:-3rem}.md\:-m-16{margin:-4rem}.md\:-m-20{margin:-5rem}.md\:-m-24{margin:-6rem}.md\:-m-32{margin:-8rem}.md\:-m-40{margin:-10rem}.md\:-m-48{margin:-12rem}.md\:-m-56{margin:-14rem}.md\:-m-64{margin:-16rem}.md\:-m-px{margin:-1px}.md\:my-0{margin-top:0;margin-bottom:0}.md\:mx-0{margin-left:0;margin-right:0}.md\:my-1{margin-top:.25rem;margin-bottom:.25rem}.md\:mx-1{margin-left:.25rem;margin-right:.25rem}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mx-2{margin-left:.5rem;margin-right:.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:my-4{margin-top:1rem;margin-bottom:1rem}.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.md\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.md\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-8{margin-top:2rem;margin-bottom:2rem}.md\:mx-8{margin-left:2rem;margin-right:2rem}.md\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.md\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.md\:my-12{margin-top:3rem;margin-bottom:3rem}.md\:mx-12{margin-left:3rem;margin-right:3rem}.md\:my-16{margin-top:4rem;margin-bottom:4rem}.md\:mx-16{margin-left:4rem;margin-right:4rem}.md\:my-20{margin-top:5rem;margin-bottom:5rem}.md\:mx-20{margin-left:5rem;margin-right:5rem}.md\:my-24{margin-top:6rem;margin-bottom:6rem}.md\:mx-24{margin-left:6rem;margin-right:6rem}.md\:my-32{margin-top:8rem;margin-bottom:8rem}.md\:mx-32{margin-left:8rem;margin-right:8rem}.md\:my-40{margin-top:10rem;margin-bottom:10rem}.md\:mx-40{margin-left:10rem;margin-right:10rem}.md\:my-48{margin-top:12rem;margin-bottom:12rem}.md\:mx-48{margin-left:12rem;margin-right:12rem}.md\:my-56{margin-top:14rem;margin-bottom:14rem}.md\:mx-56{margin-left:14rem;margin-right:14rem}.md\:my-64{margin-top:16rem;margin-bottom:16rem}.md\:mx-64{margin-left:16rem;margin-right:16rem}.md\:my-auto{margin-top:auto;margin-bottom:auto}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:my-px{margin-top:1px;margin-bottom:1px}.md\:mx-px{margin-left:1px;margin-right:1px}.md\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.md\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.md\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.md\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.md\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.md\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.md\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.md\:-mx-4{margin-left:-1rem;margin-right:-1rem}.md\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.md\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.md\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.md\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.md\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.md\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.md\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.md\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.md\:-mx-12{margin-left:-3rem;margin-right:-3rem}.md\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.md\:-mx-16{margin-left:-4rem;margin-right:-4rem}.md\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.md\:-mx-20{margin-left:-5rem;margin-right:-5rem}.md\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.md\:-mx-24{margin-left:-6rem;margin-right:-6rem}.md\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.md\:-mx-32{margin-left:-8rem;margin-right:-8rem}.md\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.md\:-mx-40{margin-left:-10rem;margin-right:-10rem}.md\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.md\:-mx-48{margin-left:-12rem;margin-right:-12rem}.md\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.md\:-mx-56{margin-left:-14rem;margin-right:-14rem}.md\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.md\:-mx-64{margin-left:-16rem;margin-right:-16rem}.md\:-my-px{margin-top:-1px;margin-bottom:-1px}.md\:-mx-px{margin-left:-1px;margin-right:-1px}.md\:mt-0{margin-top:0}.md\:mr-0{margin-right:0}.md\:mb-0{margin-bottom:0}.md\:ml-0{margin-left:0}.md\:mt-1{margin-top:.25rem}.md\:mr-1{margin-right:.25rem}.md\:mb-1{margin-bottom:.25rem}.md\:ml-1{margin-left:.25rem}.md\:mt-2{margin-top:.5rem}.md\:mr-2{margin-right:.5rem}.md\:mb-2{margin-bottom:.5rem}.md\:ml-2{margin-left:.5rem}.md\:mt-3{margin-top:.75rem}.md\:mr-3{margin-right:.75rem}.md\:mb-3{margin-bottom:.75rem}.md\:ml-3{margin-left:.75rem}.md\:mt-4{margin-top:1rem}.md\:mr-4{margin-right:1rem}.md\:mb-4{margin-bottom:1rem}.md\:ml-4{margin-left:1rem}.md\:mt-5{margin-top:1.25rem}.md\:mr-5{margin-right:1.25rem}.md\:mb-5{margin-bottom:1.25rem}.md\:ml-5{margin-left:1.25rem}.md\:mt-6{margin-top:1.5rem}.md\:mr-6{margin-right:1.5rem}.md\:mb-6{margin-bottom:1.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mt-8{margin-top:2rem}.md\:mr-8{margin-right:2rem}.md\:mb-8{margin-bottom:2rem}.md\:ml-8{margin-left:2rem}.md\:mt-10{margin-top:2.5rem}.md\:mr-10{margin-right:2.5rem}.md\:mb-10{margin-bottom:2.5rem}.md\:ml-10{margin-left:2.5rem}.md\:mt-12{margin-top:3rem}.md\:mr-12{margin-right:3rem}.md\:mb-12{margin-bottom:3rem}.md\:ml-12{margin-left:3rem}.md\:mt-16{margin-top:4rem}.md\:mr-16{margin-right:4rem}.md\:mb-16{margin-bottom:4rem}.md\:ml-16{margin-left:4rem}.md\:mt-20{margin-top:5rem}.md\:mr-20{margin-right:5rem}.md\:mb-20{margin-bottom:5rem}.md\:ml-20{margin-left:5rem}.md\:mt-24{margin-top:6rem}.md\:mr-24{margin-right:6rem}.md\:mb-24{margin-bottom:6rem}.md\:ml-24{margin-left:6rem}.md\:mt-32{margin-top:8rem}.md\:mr-32{margin-right:8rem}.md\:mb-32{margin-bottom:8rem}.md\:ml-32{margin-left:8rem}.md\:mt-40{margin-top:10rem}.md\:mr-40{margin-right:10rem}.md\:mb-40{margin-bottom:10rem}.md\:ml-40{margin-left:10rem}.md\:mt-48{margin-top:12rem}.md\:mr-48{margin-right:12rem}.md\:mb-48{margin-bottom:12rem}.md\:ml-48{margin-left:12rem}.md\:mt-56{margin-top:14rem}.md\:mr-56{margin-right:14rem}.md\:mb-56{margin-bottom:14rem}.md\:ml-56{margin-left:14rem}.md\:mt-64{margin-top:16rem}.md\:mr-64{margin-right:16rem}.md\:mb-64{margin-bottom:16rem}.md\:ml-64{margin-left:16rem}.md\:mt-auto{margin-top:auto}.md\:mr-auto{margin-right:auto}.md\:mb-auto{margin-bottom:auto}.md\:ml-auto{margin-left:auto}.md\:mt-px{margin-top:1px}.md\:mr-px{margin-right:1px}.md\:mb-px{margin-bottom:1px}.md\:ml-px{margin-left:1px}.md\:-mt-1{margin-top:-.25rem}.md\:-mr-1{margin-right:-.25rem}.md\:-mb-1{margin-bottom:-.25rem}.md\:-ml-1{margin-left:-.25rem}.md\:-mt-2{margin-top:-.5rem}.md\:-mr-2{margin-right:-.5rem}.md\:-mb-2{margin-bottom:-.5rem}.md\:-ml-2{margin-left:-.5rem}.md\:-mt-3{margin-top:-.75rem}.md\:-mr-3{margin-right:-.75rem}.md\:-mb-3{margin-bottom:-.75rem}.md\:-ml-3{margin-left:-.75rem}.md\:-mt-4{margin-top:-1rem}.md\:-mr-4{margin-right:-1rem}.md\:-mb-4{margin-bottom:-1rem}.md\:-ml-4{margin-left:-1rem}.md\:-mt-5{margin-top:-1.25rem}.md\:-mr-5{margin-right:-1.25rem}.md\:-mb-5{margin-bottom:-1.25rem}.md\:-ml-5{margin-left:-1.25rem}.md\:-mt-6{margin-top:-1.5rem}.md\:-mr-6{margin-right:-1.5rem}.md\:-mb-6{margin-bottom:-1.5rem}.md\:-ml-6{margin-left:-1.5rem}.md\:-mt-8{margin-top:-2rem}.md\:-mr-8{margin-right:-2rem}.md\:-mb-8{margin-bottom:-2rem}.md\:-ml-8{margin-left:-2rem}.md\:-mt-10{margin-top:-2.5rem}.md\:-mr-10{margin-right:-2.5rem}.md\:-mb-10{margin-bottom:-2.5rem}.md\:-ml-10{margin-left:-2.5rem}.md\:-mt-12{margin-top:-3rem}.md\:-mr-12{margin-right:-3rem}.md\:-mb-12{margin-bottom:-3rem}.md\:-ml-12{margin-left:-3rem}.md\:-mt-16{margin-top:-4rem}.md\:-mr-16{margin-right:-4rem}.md\:-mb-16{margin-bottom:-4rem}.md\:-ml-16{margin-left:-4rem}.md\:-mt-20{margin-top:-5rem}.md\:-mr-20{margin-right:-5rem}.md\:-mb-20{margin-bottom:-5rem}.md\:-ml-20{margin-left:-5rem}.md\:-mt-24{margin-top:-6rem}.md\:-mr-24{margin-right:-6rem}.md\:-mb-24{margin-bottom:-6rem}.md\:-ml-24{margin-left:-6rem}.md\:-mt-32{margin-top:-8rem}.md\:-mr-32{margin-right:-8rem}.md\:-mb-32{margin-bottom:-8rem}.md\:-ml-32{margin-left:-8rem}.md\:-mt-40{margin-top:-10rem}.md\:-mr-40{margin-right:-10rem}.md\:-mb-40{margin-bottom:-10rem}.md\:-ml-40{margin-left:-10rem}.md\:-mt-48{margin-top:-12rem}.md\:-mr-48{margin-right:-12rem}.md\:-mb-48{margin-bottom:-12rem}.md\:-ml-48{margin-left:-12rem}.md\:-mt-56{margin-top:-14rem}.md\:-mr-56{margin-right:-14rem}.md\:-mb-56{margin-bottom:-14rem}.md\:-ml-56{margin-left:-14rem}.md\:-mt-64{margin-top:-16rem}.md\:-mr-64{margin-right:-16rem}.md\:-mb-64{margin-bottom:-16rem}.md\:-ml-64{margin-left:-16rem}.md\:-mt-px{margin-top:-1px}.md\:-mr-px{margin-right:-1px}.md\:-mb-px{margin-bottom:-1px}.md\:-ml-px{margin-left:-1px}.md\:max-h-full{max-height:100%}.md\:max-h-screen{max-height:100vh}.md\:max-w-xs{max-width:20rem}.md\:max-w-sm{max-width:24rem}.md\:max-w-md{max-width:28rem}.md\:max-w-lg{max-width:32rem}.md\:max-w-xl{max-width:36rem}.md\:max-w-2xl{max-width:42rem}.md\:max-w-3xl{max-width:48rem}.md\:max-w-4xl{max-width:56rem}.md\:max-w-5xl{max-width:64rem}.md\:max-w-6xl{max-width:72rem}.md\:max-w-full{max-width:100%}.md\:min-h-0{min-height:0}.md\:min-h-full{min-height:100%}.md\:min-h-screen{min-height:100vh}.md\:min-w-0{min-width:0}.md\:min-w-full{min-width:100%}.md\:object-contain{-o-object-fit:contain;object-fit:contain}.md\:object-cover{-o-object-fit:cover;object-fit:cover}.md\:object-fill{-o-object-fit:fill;object-fit:fill}.md\:object-none{-o-object-fit:none;object-fit:none}.md\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.md\:object-bottom{-o-object-position:bottom;object-position:bottom}.md\:object-center{-o-object-position:center;object-position:center}.md\:object-left{-o-object-position:left;object-position:left}.md\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.md\:object-left-top{-o-object-position:left top;object-position:left top}.md\:object-right{-o-object-position:right;object-position:right}.md\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.md\:object-right-top{-o-object-position:right top;object-position:right top}.md\:object-top{-o-object-position:top;object-position:top}.md\:opacity-0{opacity:0}.md\:opacity-25{opacity:.25}.md\:opacity-50{opacity:.5}.md\:opacity-75{opacity:.75}.md\:opacity-100{opacity:1}.md\:outline-none{outline:0}.md\:focus\:outline-none:focus{outline:0}.md\:overflow-auto{overflow:auto}.md\:overflow-hidden{overflow:hidden}.md\:overflow-visible{overflow:visible}.md\:overflow-scroll{overflow:scroll}.md\:overflow-x-auto{overflow-x:auto}.md\:overflow-y-auto{overflow-y:auto}.md\:overflow-x-hidden{overflow-x:hidden}.md\:overflow-y-hidden{overflow-y:hidden}.md\:overflow-x-visible{overflow-x:visible}.md\:overflow-y-visible{overflow-y:visible}.md\:overflow-x-scroll{overflow-x:scroll}.md\:overflow-y-scroll{overflow-y:scroll}.md\:scrolling-touch{-webkit-overflow-scrolling:touch}.md\:scrolling-auto{-webkit-overflow-scrolling:auto}.md\:p-0{padding:0}.md\:p-1{padding:.25rem}.md\:p-2{padding:.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-5{padding:1.25rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:p-10{padding:2.5rem}.md\:p-12{padding:3rem}.md\:p-16{padding:4rem}.md\:p-20{padding:5rem}.md\:p-24{padding:6rem}.md\:p-32{padding:8rem}.md\:p-40{padding:10rem}.md\:p-48{padding:12rem}.md\:p-56{padding:14rem}.md\:p-64{padding:16rem}.md\:p-px{padding:1px}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-0{padding-left:0;padding-right:0}.md\:py-1{padding-top:.25rem;padding-bottom:.25rem}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:py-3{padding-top:.75rem;padding-bottom:.75rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:py-12{padding-top:3rem;padding-bottom:3rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:py-16{padding-top:4rem;padding-bottom:4rem}.md\:px-16{padding-left:4rem;padding-right:4rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:px-20{padding-left:5rem;padding-right:5rem}.md\:py-24{padding-top:6rem;padding-bottom:6rem}.md\:px-24{padding-left:6rem;padding-right:6rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:px-32{padding-left:8rem;padding-right:8rem}.md\:py-40{padding-top:10rem;padding-bottom:10rem}.md\:px-40{padding-left:10rem;padding-right:10rem}.md\:py-48{padding-top:12rem;padding-bottom:12rem}.md\:px-48{padding-left:12rem;padding-right:12rem}.md\:py-56{padding-top:14rem;padding-bottom:14rem}.md\:px-56{padding-left:14rem;padding-right:14rem}.md\:py-64{padding-top:16rem;padding-bottom:16rem}.md\:px-64{padding-left:16rem;padding-right:16rem}.md\:py-px{padding-top:1px;padding-bottom:1px}.md\:px-px{padding-left:1px;padding-right:1px}.md\:pt-0{padding-top:0}.md\:pr-0{padding-right:0}.md\:pb-0{padding-bottom:0}.md\:pl-0{padding-left:0}.md\:pt-1{padding-top:.25rem}.md\:pr-1{padding-right:.25rem}.md\:pb-1{padding-bottom:.25rem}.md\:pl-1{padding-left:.25rem}.md\:pt-2{padding-top:.5rem}.md\:pr-2{padding-right:.5rem}.md\:pb-2{padding-bottom:.5rem}.md\:pl-2{padding-left:.5rem}.md\:pt-3{padding-top:.75rem}.md\:pr-3{padding-right:.75rem}.md\:pb-3{padding-bottom:.75rem}.md\:pl-3{padding-left:.75rem}.md\:pt-4{padding-top:1rem}.md\:pr-4{padding-right:1rem}.md\:pb-4{padding-bottom:1rem}.md\:pl-4{padding-left:1rem}.md\:pt-5{padding-top:1.25rem}.md\:pr-5{padding-right:1.25rem}.md\:pb-5{padding-bottom:1.25rem}.md\:pl-5{padding-left:1.25rem}.md\:pt-6{padding-top:1.5rem}.md\:pr-6{padding-right:1.5rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pl-6{padding-left:1.5rem}.md\:pt-8{padding-top:2rem}.md\:pr-8{padding-right:2rem}.md\:pb-8{padding-bottom:2rem}.md\:pl-8{padding-left:2rem}.md\:pt-10{padding-top:2.5rem}.md\:pr-10{padding-right:2.5rem}.md\:pb-10{padding-bottom:2.5rem}.md\:pl-10{padding-left:2.5rem}.md\:pt-12{padding-top:3rem}.md\:pr-12{padding-right:3rem}.md\:pb-12{padding-bottom:3rem}.md\:pl-12{padding-left:3rem}.md\:pt-16{padding-top:4rem}.md\:pr-16{padding-right:4rem}.md\:pb-16{padding-bottom:4rem}.md\:pl-16{padding-left:4rem}.md\:pt-20{padding-top:5rem}.md\:pr-20{padding-right:5rem}.md\:pb-20{padding-bottom:5rem}.md\:pl-20{padding-left:5rem}.md\:pt-24{padding-top:6rem}.md\:pr-24{padding-right:6rem}.md\:pb-24{padding-bottom:6rem}.md\:pl-24{padding-left:6rem}.md\:pt-32{padding-top:8rem}.md\:pr-32{padding-right:8rem}.md\:pb-32{padding-bottom:8rem}.md\:pl-32{padding-left:8rem}.md\:pt-40{padding-top:10rem}.md\:pr-40{padding-right:10rem}.md\:pb-40{padding-bottom:10rem}.md\:pl-40{padding-left:10rem}.md\:pt-48{padding-top:12rem}.md\:pr-48{padding-right:12rem}.md\:pb-48{padding-bottom:12rem}.md\:pl-48{padding-left:12rem}.md\:pt-56{padding-top:14rem}.md\:pr-56{padding-right:14rem}.md\:pb-56{padding-bottom:14rem}.md\:pl-56{padding-left:14rem}.md\:pt-64{padding-top:16rem}.md\:pr-64{padding-right:16rem}.md\:pb-64{padding-bottom:16rem}.md\:pl-64{padding-left:16rem}.md\:pt-px{padding-top:1px}.md\:pr-px{padding-right:1px}.md\:pb-px{padding-bottom:1px}.md\:pl-px{padding-left:1px}.md\:pointer-events-none{pointer-events:none}.md\:pointer-events-auto{pointer-events:auto}.md\:static{position:static}.md\:fixed{position:fixed}.md\:absolute{position:absolute}.md\:relative{position:relative}.md\:sticky{position:-webkit-sticky;position:sticky}.md\:inset-0{top:0;right:0;bottom:0;left:0}.md\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.md\:inset-y-0{top:0;bottom:0}.md\:inset-x-0{right:0;left:0}.md\:inset-y-auto{top:auto;bottom:auto}.md\:inset-x-auto{right:auto;left:auto}.md\:top-0{top:0}.md\:right-0{right:0}.md\:bottom-0{bottom:0}.md\:left-0{left:0}.md\:top-auto{top:auto}.md\:right-auto{right:auto}.md\:bottom-auto{bottom:auto}.md\:left-auto{left:auto}.md\:resize-none{resize:none}.md\:resize-y{resize:vertical}.md\:resize-x{resize:horizontal}.md\:resize{resize:both}.md\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:shadow-none{box-shadow:none}.md\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:hover\:shadow-none:hover{box-shadow:none}.md\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:focus\:shadow-none:focus{box-shadow:none}.md\:fill-current{fill:currentColor}.md\:stroke-current{stroke:currentColor}.md\:table-auto{table-layout:auto}.md\:table-fixed{table-layout:fixed}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-right{text-align:right}.md\:text-justify{text-align:justify}.md\:text-transparent{color:transparent}.md\:text-black{color:#000}.md\:text-white{color:#fff}.md\:text-gray-100{color:#f7fafc}.md\:text-gray-200{color:#edf2f7}.md\:text-gray-300{color:#e2e8f0}.md\:text-gray-400{color:#cbd5e0}.md\:text-gray-500{color:#a0aec0}.md\:text-gray-600{color:#718096}.md\:text-gray-700{color:#4a5568}.md\:text-gray-800{color:#2d3748}.md\:text-gray-900{color:#1a202c}.md\:text-red-100{color:#fff5f5}.md\:text-red-200{color:#fed7d7}.md\:text-red-300{color:#feb2b2}.md\:text-red-400{color:#fc8181}.md\:text-red-500{color:#f56565}.md\:text-red-600{color:#e53e3e}.md\:text-red-700{color:#c53030}.md\:text-red-800{color:#9b2c2c}.md\:text-red-900{color:#742a2a}.md\:text-orange-100{color:#fffaf0}.md\:text-orange-200{color:#feebc8}.md\:text-orange-300{color:#fbd38d}.md\:text-orange-400{color:#f6ad55}.md\:text-orange-500{color:#ed8936}.md\:text-orange-600{color:#dd6b20}.md\:text-orange-700{color:#c05621}.md\:text-orange-800{color:#9c4221}.md\:text-orange-900{color:#7b341e}.md\:text-yellow-100{color:ivory}.md\:text-yellow-200{color:#fefcbf}.md\:text-yellow-300{color:#faf089}.md\:text-yellow-400{color:#f6e05e}.md\:text-yellow-500{color:#ecc94b}.md\:text-yellow-600{color:#d69e2e}.md\:text-yellow-700{color:#b7791f}.md\:text-yellow-800{color:#975a16}.md\:text-yellow-900{color:#744210}.md\:text-green-100{color:#f0fff4}.md\:text-green-200{color:#c6f6d5}.md\:text-green-300{color:#9ae6b4}.md\:text-green-400{color:#68d391}.md\:text-green-500{color:#48bb78}.md\:text-green-600{color:#38a169}.md\:text-green-700{color:#2f855a}.md\:text-green-800{color:#276749}.md\:text-green-900{color:#22543d}.md\:text-teal-100{color:#e6fffa}.md\:text-teal-200{color:#b2f5ea}.md\:text-teal-300{color:#81e6d9}.md\:text-teal-400{color:#4fd1c5}.md\:text-teal-500{color:#38b2ac}.md\:text-teal-600{color:#319795}.md\:text-teal-700{color:#2c7a7b}.md\:text-teal-800{color:#285e61}.md\:text-teal-900{color:#234e52}.md\:text-blue-100{color:#ebf8ff}.md\:text-blue-200{color:#bee3f8}.md\:text-blue-300{color:#90cdf4}.md\:text-blue-400{color:#63b3ed}.md\:text-blue-500{color:#4299e1}.md\:text-blue-600{color:#3182ce}.md\:text-blue-700{color:#2b6cb0}.md\:text-blue-800{color:#2c5282}.md\:text-blue-900{color:#2a4365}.md\:text-indigo-100{color:#ebf4ff}.md\:text-indigo-200{color:#c3dafe}.md\:text-indigo-300{color:#a3bffa}.md\:text-indigo-400{color:#7f9cf5}.md\:text-indigo-500{color:#667eea}.md\:text-indigo-600{color:#5a67d8}.md\:text-indigo-700{color:#4c51bf}.md\:text-indigo-800{color:#434190}.md\:text-indigo-900{color:#3c366b}.md\:text-purple-100{color:#faf5ff}.md\:text-purple-200{color:#e9d8fd}.md\:text-purple-300{color:#d6bcfa}.md\:text-purple-400{color:#b794f4}.md\:text-purple-500{color:#9f7aea}.md\:text-purple-600{color:#805ad5}.md\:text-purple-700{color:#6b46c1}.md\:text-purple-800{color:#553c9a}.md\:text-purple-900{color:#44337a}.md\:text-pink-100{color:#fff5f7}.md\:text-pink-200{color:#fed7e2}.md\:text-pink-300{color:#fbb6ce}.md\:text-pink-400{color:#f687b3}.md\:text-pink-500{color:#ed64a6}.md\:text-pink-600{color:#d53f8c}.md\:text-pink-700{color:#b83280}.md\:text-pink-800{color:#97266d}.md\:text-pink-900{color:#702459}.md\:hover\:text-transparent:hover{color:transparent}.md\:hover\:text-black:hover{color:#000}.md\:hover\:text-white:hover{color:#fff}.md\:hover\:text-gray-100:hover{color:#f7fafc}.md\:hover\:text-gray-200:hover{color:#edf2f7}.md\:hover\:text-gray-300:hover{color:#e2e8f0}.md\:hover\:text-gray-400:hover{color:#cbd5e0}.md\:hover\:text-gray-500:hover{color:#a0aec0}.md\:hover\:text-gray-600:hover{color:#718096}.md\:hover\:text-gray-700:hover{color:#4a5568}.md\:hover\:text-gray-800:hover{color:#2d3748}.md\:hover\:text-gray-900:hover{color:#1a202c}.md\:hover\:text-red-100:hover{color:#fff5f5}.md\:hover\:text-red-200:hover{color:#fed7d7}.md\:hover\:text-red-300:hover{color:#feb2b2}.md\:hover\:text-red-400:hover{color:#fc8181}.md\:hover\:text-red-500:hover{color:#f56565}.md\:hover\:text-red-600:hover{color:#e53e3e}.md\:hover\:text-red-700:hover{color:#c53030}.md\:hover\:text-red-800:hover{color:#9b2c2c}.md\:hover\:text-red-900:hover{color:#742a2a}.md\:hover\:text-orange-100:hover{color:#fffaf0}.md\:hover\:text-orange-200:hover{color:#feebc8}.md\:hover\:text-orange-300:hover{color:#fbd38d}.md\:hover\:text-orange-400:hover{color:#f6ad55}.md\:hover\:text-orange-500:hover{color:#ed8936}.md\:hover\:text-orange-600:hover{color:#dd6b20}.md\:hover\:text-orange-700:hover{color:#c05621}.md\:hover\:text-orange-800:hover{color:#9c4221}.md\:hover\:text-orange-900:hover{color:#7b341e}.md\:hover\:text-yellow-100:hover{color:ivory}.md\:hover\:text-yellow-200:hover{color:#fefcbf}.md\:hover\:text-yellow-300:hover{color:#faf089}.md\:hover\:text-yellow-400:hover{color:#f6e05e}.md\:hover\:text-yellow-500:hover{color:#ecc94b}.md\:hover\:text-yellow-600:hover{color:#d69e2e}.md\:hover\:text-yellow-700:hover{color:#b7791f}.md\:hover\:text-yellow-800:hover{color:#975a16}.md\:hover\:text-yellow-900:hover{color:#744210}.md\:hover\:text-green-100:hover{color:#f0fff4}.md\:hover\:text-green-200:hover{color:#c6f6d5}.md\:hover\:text-green-300:hover{color:#9ae6b4}.md\:hover\:text-green-400:hover{color:#68d391}.md\:hover\:text-green-500:hover{color:#48bb78}.md\:hover\:text-green-600:hover{color:#38a169}.md\:hover\:text-green-700:hover{color:#2f855a}.md\:hover\:text-green-800:hover{color:#276749}.md\:hover\:text-green-900:hover{color:#22543d}.md\:hover\:text-teal-100:hover{color:#e6fffa}.md\:hover\:text-teal-200:hover{color:#b2f5ea}.md\:hover\:text-teal-300:hover{color:#81e6d9}.md\:hover\:text-teal-400:hover{color:#4fd1c5}.md\:hover\:text-teal-500:hover{color:#38b2ac}.md\:hover\:text-teal-600:hover{color:#319795}.md\:hover\:text-teal-700:hover{color:#2c7a7b}.md\:hover\:text-teal-800:hover{color:#285e61}.md\:hover\:text-teal-900:hover{color:#234e52}.md\:hover\:text-blue-100:hover{color:#ebf8ff}.md\:hover\:text-blue-200:hover{color:#bee3f8}.md\:hover\:text-blue-300:hover{color:#90cdf4}.md\:hover\:text-blue-400:hover{color:#63b3ed}.md\:hover\:text-blue-500:hover{color:#4299e1}.md\:hover\:text-blue-600:hover{color:#3182ce}.md\:hover\:text-blue-700:hover{color:#2b6cb0}.md\:hover\:text-blue-800:hover{color:#2c5282}.md\:hover\:text-blue-900:hover{color:#2a4365}.md\:hover\:text-indigo-100:hover{color:#ebf4ff}.md\:hover\:text-indigo-200:hover{color:#c3dafe}.md\:hover\:text-indigo-300:hover{color:#a3bffa}.md\:hover\:text-indigo-400:hover{color:#7f9cf5}.md\:hover\:text-indigo-500:hover{color:#667eea}.md\:hover\:text-indigo-600:hover{color:#5a67d8}.md\:hover\:text-indigo-700:hover{color:#4c51bf}.md\:hover\:text-indigo-800:hover{color:#434190}.md\:hover\:text-indigo-900:hover{color:#3c366b}.md\:hover\:text-purple-100:hover{color:#faf5ff}.md\:hover\:text-purple-200:hover{color:#e9d8fd}.md\:hover\:text-purple-300:hover{color:#d6bcfa}.md\:hover\:text-purple-400:hover{color:#b794f4}.md\:hover\:text-purple-500:hover{color:#9f7aea}.md\:hover\:text-purple-600:hover{color:#805ad5}.md\:hover\:text-purple-700:hover{color:#6b46c1}.md\:hover\:text-purple-800:hover{color:#553c9a}.md\:hover\:text-purple-900:hover{color:#44337a}.md\:hover\:text-pink-100:hover{color:#fff5f7}.md\:hover\:text-pink-200:hover{color:#fed7e2}.md\:hover\:text-pink-300:hover{color:#fbb6ce}.md\:hover\:text-pink-400:hover{color:#f687b3}.md\:hover\:text-pink-500:hover{color:#ed64a6}.md\:hover\:text-pink-600:hover{color:#d53f8c}.md\:hover\:text-pink-700:hover{color:#b83280}.md\:hover\:text-pink-800:hover{color:#97266d}.md\:hover\:text-pink-900:hover{color:#702459}.md\:focus\:text-transparent:focus{color:transparent}.md\:focus\:text-black:focus{color:#000}.md\:focus\:text-white:focus{color:#fff}.md\:focus\:text-gray-100:focus{color:#f7fafc}.md\:focus\:text-gray-200:focus{color:#edf2f7}.md\:focus\:text-gray-300:focus{color:#e2e8f0}.md\:focus\:text-gray-400:focus{color:#cbd5e0}.md\:focus\:text-gray-500:focus{color:#a0aec0}.md\:focus\:text-gray-600:focus{color:#718096}.md\:focus\:text-gray-700:focus{color:#4a5568}.md\:focus\:text-gray-800:focus{color:#2d3748}.md\:focus\:text-gray-900:focus{color:#1a202c}.md\:focus\:text-red-100:focus{color:#fff5f5}.md\:focus\:text-red-200:focus{color:#fed7d7}.md\:focus\:text-red-300:focus{color:#feb2b2}.md\:focus\:text-red-400:focus{color:#fc8181}.md\:focus\:text-red-500:focus{color:#f56565}.md\:focus\:text-red-600:focus{color:#e53e3e}.md\:focus\:text-red-700:focus{color:#c53030}.md\:focus\:text-red-800:focus{color:#9b2c2c}.md\:focus\:text-red-900:focus{color:#742a2a}.md\:focus\:text-orange-100:focus{color:#fffaf0}.md\:focus\:text-orange-200:focus{color:#feebc8}.md\:focus\:text-orange-300:focus{color:#fbd38d}.md\:focus\:text-orange-400:focus{color:#f6ad55}.md\:focus\:text-orange-500:focus{color:#ed8936}.md\:focus\:text-orange-600:focus{color:#dd6b20}.md\:focus\:text-orange-700:focus{color:#c05621}.md\:focus\:text-orange-800:focus{color:#9c4221}.md\:focus\:text-orange-900:focus{color:#7b341e}.md\:focus\:text-yellow-100:focus{color:ivory}.md\:focus\:text-yellow-200:focus{color:#fefcbf}.md\:focus\:text-yellow-300:focus{color:#faf089}.md\:focus\:text-yellow-400:focus{color:#f6e05e}.md\:focus\:text-yellow-500:focus{color:#ecc94b}.md\:focus\:text-yellow-600:focus{color:#d69e2e}.md\:focus\:text-yellow-700:focus{color:#b7791f}.md\:focus\:text-yellow-800:focus{color:#975a16}.md\:focus\:text-yellow-900:focus{color:#744210}.md\:focus\:text-green-100:focus{color:#f0fff4}.md\:focus\:text-green-200:focus{color:#c6f6d5}.md\:focus\:text-green-300:focus{color:#9ae6b4}.md\:focus\:text-green-400:focus{color:#68d391}.md\:focus\:text-green-500:focus{color:#48bb78}.md\:focus\:text-green-600:focus{color:#38a169}.md\:focus\:text-green-700:focus{color:#2f855a}.md\:focus\:text-green-800:focus{color:#276749}.md\:focus\:text-green-900:focus{color:#22543d}.md\:focus\:text-teal-100:focus{color:#e6fffa}.md\:focus\:text-teal-200:focus{color:#b2f5ea}.md\:focus\:text-teal-300:focus{color:#81e6d9}.md\:focus\:text-teal-400:focus{color:#4fd1c5}.md\:focus\:text-teal-500:focus{color:#38b2ac}.md\:focus\:text-teal-600:focus{color:#319795}.md\:focus\:text-teal-700:focus{color:#2c7a7b}.md\:focus\:text-teal-800:focus{color:#285e61}.md\:focus\:text-teal-900:focus{color:#234e52}.md\:focus\:text-blue-100:focus{color:#ebf8ff}.md\:focus\:text-blue-200:focus{color:#bee3f8}.md\:focus\:text-blue-300:focus{color:#90cdf4}.md\:focus\:text-blue-400:focus{color:#63b3ed}.md\:focus\:text-blue-500:focus{color:#4299e1}.md\:focus\:text-blue-600:focus{color:#3182ce}.md\:focus\:text-blue-700:focus{color:#2b6cb0}.md\:focus\:text-blue-800:focus{color:#2c5282}.md\:focus\:text-blue-900:focus{color:#2a4365}.md\:focus\:text-indigo-100:focus{color:#ebf4ff}.md\:focus\:text-indigo-200:focus{color:#c3dafe}.md\:focus\:text-indigo-300:focus{color:#a3bffa}.md\:focus\:text-indigo-400:focus{color:#7f9cf5}.md\:focus\:text-indigo-500:focus{color:#667eea}.md\:focus\:text-indigo-600:focus{color:#5a67d8}.md\:focus\:text-indigo-700:focus{color:#4c51bf}.md\:focus\:text-indigo-800:focus{color:#434190}.md\:focus\:text-indigo-900:focus{color:#3c366b}.md\:focus\:text-purple-100:focus{color:#faf5ff}.md\:focus\:text-purple-200:focus{color:#e9d8fd}.md\:focus\:text-purple-300:focus{color:#d6bcfa}.md\:focus\:text-purple-400:focus{color:#b794f4}.md\:focus\:text-purple-500:focus{color:#9f7aea}.md\:focus\:text-purple-600:focus{color:#805ad5}.md\:focus\:text-purple-700:focus{color:#6b46c1}.md\:focus\:text-purple-800:focus{color:#553c9a}.md\:focus\:text-purple-900:focus{color:#44337a}.md\:focus\:text-pink-100:focus{color:#fff5f7}.md\:focus\:text-pink-200:focus{color:#fed7e2}.md\:focus\:text-pink-300:focus{color:#fbb6ce}.md\:focus\:text-pink-400:focus{color:#f687b3}.md\:focus\:text-pink-500:focus{color:#ed64a6}.md\:focus\:text-pink-600:focus{color:#d53f8c}.md\:focus\:text-pink-700:focus{color:#b83280}.md\:focus\:text-pink-800:focus{color:#97266d}.md\:focus\:text-pink-900:focus{color:#702459}.md\:text-xs{font-size:.75rem}.md\:text-sm{font-size:.875rem}.md\:text-base{font-size:1rem}.md\:text-lg{font-size:1.125rem}.md\:text-xl{font-size:1.25rem}.md\:text-2xl{font-size:1.5rem}.md\:text-3xl{font-size:1.875rem}.md\:text-4xl{font-size:2.25rem}.md\:text-5xl{font-size:3rem}.md\:text-6xl{font-size:4rem}.md\:italic{font-style:italic}.md\:not-italic{font-style:normal}.md\:uppercase{text-transform:uppercase}.md\:lowercase{text-transform:lowercase}.md\:capitalize{text-transform:capitalize}.md\:normal-case{text-transform:none}.md\:underline{text-decoration:underline}.md\:line-through{text-decoration:line-through}.md\:no-underline{text-decoration:none}.md\:hover\:underline:hover{text-decoration:underline}.md\:hover\:line-through:hover{text-decoration:line-through}.md\:hover\:no-underline:hover{text-decoration:none}.md\:focus\:underline:focus{text-decoration:underline}.md\:focus\:line-through:focus{text-decoration:line-through}.md\:focus\:no-underline:focus{text-decoration:none}.md\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.md\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.md\:tracking-tighter{letter-spacing:-.05em}.md\:tracking-tight{letter-spacing:-.025em}.md\:tracking-normal{letter-spacing:0}.md\:tracking-wide{letter-spacing:.025em}.md\:tracking-wider{letter-spacing:.05em}.md\:tracking-widest{letter-spacing:.1em}.md\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.md\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.md\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.md\:align-baseline{vertical-align:baseline}.md\:align-top{vertical-align:top}.md\:align-middle{vertical-align:middle}.md\:align-bottom{vertical-align:bottom}.md\:align-text-top{vertical-align:text-top}.md\:align-text-bottom{vertical-align:text-bottom}.md\:visible{visibility:visible}.md\:invisible{visibility:hidden}.md\:whitespace-normal{white-space:normal}.md\:whitespace-no-wrap{white-space:nowrap}.md\:whitespace-pre{white-space:pre}.md\:whitespace-pre-line{white-space:pre-line}.md\:whitespace-pre-wrap{white-space:pre-wrap}.md\:break-normal{overflow-wrap:normal;word-break:normal}.md\:break-words{overflow-wrap:break-word}.md\:break-all{word-break:break-all}.md\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md\:w-0{width:0}.md\:w-1{width:.25rem}.md\:w-2{width:.5rem}.md\:w-3{width:.75rem}.md\:w-4{width:1rem}.md\:w-5{width:1.25rem}.md\:w-6{width:1.5rem}.md\:w-8{width:2rem}.md\:w-10{width:2.5rem}.md\:w-12{width:3rem}.md\:w-16{width:4rem}.md\:w-20{width:5rem}.md\:w-24{width:6rem}.md\:w-32{width:8rem}.md\:w-40{width:10rem}.md\:w-48{width:12rem}.md\:w-56{width:14rem}.md\:w-64{width:16rem}.md\:w-auto{width:auto}.md\:w-px{width:1px}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.33333%}.md\:w-2\/3{width:66.66667%}.md\:w-1\/4{width:25%}.md\:w-2\/4{width:50%}.md\:w-3\/4{width:75%}.md\:w-1\/5{width:20%}.md\:w-2\/5{width:40%}.md\:w-3\/5{width:60%}.md\:w-4\/5{width:80%}.md\:w-1\/6{width:16.66667%}.md\:w-2\/6{width:33.33333%}.md\:w-3\/6{width:50%}.md\:w-4\/6{width:66.66667%}.md\:w-5\/6{width:83.33333%}.md\:w-1\/12{width:8.33333%}.md\:w-2\/12{width:16.66667%}.md\:w-3\/12{width:25%}.md\:w-4\/12{width:33.33333%}.md\:w-5\/12{width:41.66667%}.md\:w-6\/12{width:50%}.md\:w-7\/12{width:58.33333%}.md\:w-8\/12{width:66.66667%}.md\:w-9\/12{width:75%}.md\:w-10\/12{width:83.33333%}.md\:w-11\/12{width:91.66667%}.md\:w-full{width:100%}.md\:w-screen{width:100vw}.md\:z-0{z-index:0}.md\:z-10{z-index:10}.md\:z-20{z-index:20}.md\:z-30{z-index:30}.md\:z-40{z-index:40}.md\:z-50{z-index:50}.md\:z-auto{z-index:auto}}@media (min-width:1024px){.lg\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lg\:bg-fixed{background-attachment:fixed}.lg\:bg-local{background-attachment:local}.lg\:bg-scroll{background-attachment:scroll}.lg\:bg-transparent{background-color:transparent}.lg\:bg-black{background-color:#000}.lg\:bg-white{background-color:#fff}.lg\:bg-gray-100{background-color:#f7fafc}.lg\:bg-gray-200{background-color:#edf2f7}.lg\:bg-gray-300{background-color:#e2e8f0}.lg\:bg-gray-400{background-color:#cbd5e0}.lg\:bg-gray-500{background-color:#a0aec0}.lg\:bg-gray-600{background-color:#718096}.lg\:bg-gray-700{background-color:#4a5568}.lg\:bg-gray-800{background-color:#2d3748}.lg\:bg-gray-900{background-color:#1a202c}.lg\:bg-red-100{background-color:#fff5f5}.lg\:bg-red-200{background-color:#fed7d7}.lg\:bg-red-300{background-color:#feb2b2}.lg\:bg-red-400{background-color:#fc8181}.lg\:bg-red-500{background-color:#f56565}.lg\:bg-red-600{background-color:#e53e3e}.lg\:bg-red-700{background-color:#c53030}.lg\:bg-red-800{background-color:#9b2c2c}.lg\:bg-red-900{background-color:#742a2a}.lg\:bg-orange-100{background-color:#fffaf0}.lg\:bg-orange-200{background-color:#feebc8}.lg\:bg-orange-300{background-color:#fbd38d}.lg\:bg-orange-400{background-color:#f6ad55}.lg\:bg-orange-500{background-color:#ed8936}.lg\:bg-orange-600{background-color:#dd6b20}.lg\:bg-orange-700{background-color:#c05621}.lg\:bg-orange-800{background-color:#9c4221}.lg\:bg-orange-900{background-color:#7b341e}.lg\:bg-yellow-100{background-color:ivory}.lg\:bg-yellow-200{background-color:#fefcbf}.lg\:bg-yellow-300{background-color:#faf089}.lg\:bg-yellow-400{background-color:#f6e05e}.lg\:bg-yellow-500{background-color:#ecc94b}.lg\:bg-yellow-600{background-color:#d69e2e}.lg\:bg-yellow-700{background-color:#b7791f}.lg\:bg-yellow-800{background-color:#975a16}.lg\:bg-yellow-900{background-color:#744210}.lg\:bg-green-100{background-color:#f0fff4}.lg\:bg-green-200{background-color:#c6f6d5}.lg\:bg-green-300{background-color:#9ae6b4}.lg\:bg-green-400{background-color:#68d391}.lg\:bg-green-500{background-color:#48bb78}.lg\:bg-green-600{background-color:#38a169}.lg\:bg-green-700{background-color:#2f855a}.lg\:bg-green-800{background-color:#276749}.lg\:bg-green-900{background-color:#22543d}.lg\:bg-teal-100{background-color:#e6fffa}.lg\:bg-teal-200{background-color:#b2f5ea}.lg\:bg-teal-300{background-color:#81e6d9}.lg\:bg-teal-400{background-color:#4fd1c5}.lg\:bg-teal-500{background-color:#38b2ac}.lg\:bg-teal-600{background-color:#319795}.lg\:bg-teal-700{background-color:#2c7a7b}.lg\:bg-teal-800{background-color:#285e61}.lg\:bg-teal-900{background-color:#234e52}.lg\:bg-blue-100{background-color:#ebf8ff}.lg\:bg-blue-200{background-color:#bee3f8}.lg\:bg-blue-300{background-color:#90cdf4}.lg\:bg-blue-400{background-color:#63b3ed}.lg\:bg-blue-500{background-color:#4299e1}.lg\:bg-blue-600{background-color:#3182ce}.lg\:bg-blue-700{background-color:#2b6cb0}.lg\:bg-blue-800{background-color:#2c5282}.lg\:bg-blue-900{background-color:#2a4365}.lg\:bg-indigo-100{background-color:#ebf4ff}.lg\:bg-indigo-200{background-color:#c3dafe}.lg\:bg-indigo-300{background-color:#a3bffa}.lg\:bg-indigo-400{background-color:#7f9cf5}.lg\:bg-indigo-500{background-color:#667eea}.lg\:bg-indigo-600{background-color:#5a67d8}.lg\:bg-indigo-700{background-color:#4c51bf}.lg\:bg-indigo-800{background-color:#434190}.lg\:bg-indigo-900{background-color:#3c366b}.lg\:bg-purple-100{background-color:#faf5ff}.lg\:bg-purple-200{background-color:#e9d8fd}.lg\:bg-purple-300{background-color:#d6bcfa}.lg\:bg-purple-400{background-color:#b794f4}.lg\:bg-purple-500{background-color:#9f7aea}.lg\:bg-purple-600{background-color:#805ad5}.lg\:bg-purple-700{background-color:#6b46c1}.lg\:bg-purple-800{background-color:#553c9a}.lg\:bg-purple-900{background-color:#44337a}.lg\:bg-pink-100{background-color:#fff5f7}.lg\:bg-pink-200{background-color:#fed7e2}.lg\:bg-pink-300{background-color:#fbb6ce}.lg\:bg-pink-400{background-color:#f687b3}.lg\:bg-pink-500{background-color:#ed64a6}.lg\:bg-pink-600{background-color:#d53f8c}.lg\:bg-pink-700{background-color:#b83280}.lg\:bg-pink-800{background-color:#97266d}.lg\:bg-pink-900{background-color:#702459}.lg\:hover\:bg-transparent:hover{background-color:transparent}.lg\:hover\:bg-black:hover{background-color:#000}.lg\:hover\:bg-white:hover{background-color:#fff}.lg\:hover\:bg-gray-100:hover{background-color:#f7fafc}.lg\:hover\:bg-gray-200:hover{background-color:#edf2f7}.lg\:hover\:bg-gray-300:hover{background-color:#e2e8f0}.lg\:hover\:bg-gray-400:hover{background-color:#cbd5e0}.lg\:hover\:bg-gray-500:hover{background-color:#a0aec0}.lg\:hover\:bg-gray-600:hover{background-color:#718096}.lg\:hover\:bg-gray-700:hover{background-color:#4a5568}.lg\:hover\:bg-gray-800:hover{background-color:#2d3748}.lg\:hover\:bg-gray-900:hover{background-color:#1a202c}.lg\:hover\:bg-red-100:hover{background-color:#fff5f5}.lg\:hover\:bg-red-200:hover{background-color:#fed7d7}.lg\:hover\:bg-red-300:hover{background-color:#feb2b2}.lg\:hover\:bg-red-400:hover{background-color:#fc8181}.lg\:hover\:bg-red-500:hover{background-color:#f56565}.lg\:hover\:bg-red-600:hover{background-color:#e53e3e}.lg\:hover\:bg-red-700:hover{background-color:#c53030}.lg\:hover\:bg-red-800:hover{background-color:#9b2c2c}.lg\:hover\:bg-red-900:hover{background-color:#742a2a}.lg\:hover\:bg-orange-100:hover{background-color:#fffaf0}.lg\:hover\:bg-orange-200:hover{background-color:#feebc8}.lg\:hover\:bg-orange-300:hover{background-color:#fbd38d}.lg\:hover\:bg-orange-400:hover{background-color:#f6ad55}.lg\:hover\:bg-orange-500:hover{background-color:#ed8936}.lg\:hover\:bg-orange-600:hover{background-color:#dd6b20}.lg\:hover\:bg-orange-700:hover{background-color:#c05621}.lg\:hover\:bg-orange-800:hover{background-color:#9c4221}.lg\:hover\:bg-orange-900:hover{background-color:#7b341e}.lg\:hover\:bg-yellow-100:hover{background-color:ivory}.lg\:hover\:bg-yellow-200:hover{background-color:#fefcbf}.lg\:hover\:bg-yellow-300:hover{background-color:#faf089}.lg\:hover\:bg-yellow-400:hover{background-color:#f6e05e}.lg\:hover\:bg-yellow-500:hover{background-color:#ecc94b}.lg\:hover\:bg-yellow-600:hover{background-color:#d69e2e}.lg\:hover\:bg-yellow-700:hover{background-color:#b7791f}.lg\:hover\:bg-yellow-800:hover{background-color:#975a16}.lg\:hover\:bg-yellow-900:hover{background-color:#744210}.lg\:hover\:bg-green-100:hover{background-color:#f0fff4}.lg\:hover\:bg-green-200:hover{background-color:#c6f6d5}.lg\:hover\:bg-green-300:hover{background-color:#9ae6b4}.lg\:hover\:bg-green-400:hover{background-color:#68d391}.lg\:hover\:bg-green-500:hover{background-color:#48bb78}.lg\:hover\:bg-green-600:hover{background-color:#38a169}.lg\:hover\:bg-green-700:hover{background-color:#2f855a}.lg\:hover\:bg-green-800:hover{background-color:#276749}.lg\:hover\:bg-green-900:hover{background-color:#22543d}.lg\:hover\:bg-teal-100:hover{background-color:#e6fffa}.lg\:hover\:bg-teal-200:hover{background-color:#b2f5ea}.lg\:hover\:bg-teal-300:hover{background-color:#81e6d9}.lg\:hover\:bg-teal-400:hover{background-color:#4fd1c5}.lg\:hover\:bg-teal-500:hover{background-color:#38b2ac}.lg\:hover\:bg-teal-600:hover{background-color:#319795}.lg\:hover\:bg-teal-700:hover{background-color:#2c7a7b}.lg\:hover\:bg-teal-800:hover{background-color:#285e61}.lg\:hover\:bg-teal-900:hover{background-color:#234e52}.lg\:hover\:bg-blue-100:hover{background-color:#ebf8ff}.lg\:hover\:bg-blue-200:hover{background-color:#bee3f8}.lg\:hover\:bg-blue-300:hover{background-color:#90cdf4}.lg\:hover\:bg-blue-400:hover{background-color:#63b3ed}.lg\:hover\:bg-blue-500:hover{background-color:#4299e1}.lg\:hover\:bg-blue-600:hover{background-color:#3182ce}.lg\:hover\:bg-blue-700:hover{background-color:#2b6cb0}.lg\:hover\:bg-blue-800:hover{background-color:#2c5282}.lg\:hover\:bg-blue-900:hover{background-color:#2a4365}.lg\:hover\:bg-indigo-100:hover{background-color:#ebf4ff}.lg\:hover\:bg-indigo-200:hover{background-color:#c3dafe}.lg\:hover\:bg-indigo-300:hover{background-color:#a3bffa}.lg\:hover\:bg-indigo-400:hover{background-color:#7f9cf5}.lg\:hover\:bg-indigo-500:hover{background-color:#667eea}.lg\:hover\:bg-indigo-600:hover{background-color:#5a67d8}.lg\:hover\:bg-indigo-700:hover{background-color:#4c51bf}.lg\:hover\:bg-indigo-800:hover{background-color:#434190}.lg\:hover\:bg-indigo-900:hover{background-color:#3c366b}.lg\:hover\:bg-purple-100:hover{background-color:#faf5ff}.lg\:hover\:bg-purple-200:hover{background-color:#e9d8fd}.lg\:hover\:bg-purple-300:hover{background-color:#d6bcfa}.lg\:hover\:bg-purple-400:hover{background-color:#b794f4}.lg\:hover\:bg-purple-500:hover{background-color:#9f7aea}.lg\:hover\:bg-purple-600:hover{background-color:#805ad5}.lg\:hover\:bg-purple-700:hover{background-color:#6b46c1}.lg\:hover\:bg-purple-800:hover{background-color:#553c9a}.lg\:hover\:bg-purple-900:hover{background-color:#44337a}.lg\:hover\:bg-pink-100:hover{background-color:#fff5f7}.lg\:hover\:bg-pink-200:hover{background-color:#fed7e2}.lg\:hover\:bg-pink-300:hover{background-color:#fbb6ce}.lg\:hover\:bg-pink-400:hover{background-color:#f687b3}.lg\:hover\:bg-pink-500:hover{background-color:#ed64a6}.lg\:hover\:bg-pink-600:hover{background-color:#d53f8c}.lg\:hover\:bg-pink-700:hover{background-color:#b83280}.lg\:hover\:bg-pink-800:hover{background-color:#97266d}.lg\:hover\:bg-pink-900:hover{background-color:#702459}.lg\:focus\:bg-transparent:focus{background-color:transparent}.lg\:focus\:bg-black:focus{background-color:#000}.lg\:focus\:bg-white:focus{background-color:#fff}.lg\:focus\:bg-gray-100:focus{background-color:#f7fafc}.lg\:focus\:bg-gray-200:focus{background-color:#edf2f7}.lg\:focus\:bg-gray-300:focus{background-color:#e2e8f0}.lg\:focus\:bg-gray-400:focus{background-color:#cbd5e0}.lg\:focus\:bg-gray-500:focus{background-color:#a0aec0}.lg\:focus\:bg-gray-600:focus{background-color:#718096}.lg\:focus\:bg-gray-700:focus{background-color:#4a5568}.lg\:focus\:bg-gray-800:focus{background-color:#2d3748}.lg\:focus\:bg-gray-900:focus{background-color:#1a202c}.lg\:focus\:bg-red-100:focus{background-color:#fff5f5}.lg\:focus\:bg-red-200:focus{background-color:#fed7d7}.lg\:focus\:bg-red-300:focus{background-color:#feb2b2}.lg\:focus\:bg-red-400:focus{background-color:#fc8181}.lg\:focus\:bg-red-500:focus{background-color:#f56565}.lg\:focus\:bg-red-600:focus{background-color:#e53e3e}.lg\:focus\:bg-red-700:focus{background-color:#c53030}.lg\:focus\:bg-red-800:focus{background-color:#9b2c2c}.lg\:focus\:bg-red-900:focus{background-color:#742a2a}.lg\:focus\:bg-orange-100:focus{background-color:#fffaf0}.lg\:focus\:bg-orange-200:focus{background-color:#feebc8}.lg\:focus\:bg-orange-300:focus{background-color:#fbd38d}.lg\:focus\:bg-orange-400:focus{background-color:#f6ad55}.lg\:focus\:bg-orange-500:focus{background-color:#ed8936}.lg\:focus\:bg-orange-600:focus{background-color:#dd6b20}.lg\:focus\:bg-orange-700:focus{background-color:#c05621}.lg\:focus\:bg-orange-800:focus{background-color:#9c4221}.lg\:focus\:bg-orange-900:focus{background-color:#7b341e}.lg\:focus\:bg-yellow-100:focus{background-color:ivory}.lg\:focus\:bg-yellow-200:focus{background-color:#fefcbf}.lg\:focus\:bg-yellow-300:focus{background-color:#faf089}.lg\:focus\:bg-yellow-400:focus{background-color:#f6e05e}.lg\:focus\:bg-yellow-500:focus{background-color:#ecc94b}.lg\:focus\:bg-yellow-600:focus{background-color:#d69e2e}.lg\:focus\:bg-yellow-700:focus{background-color:#b7791f}.lg\:focus\:bg-yellow-800:focus{background-color:#975a16}.lg\:focus\:bg-yellow-900:focus{background-color:#744210}.lg\:focus\:bg-green-100:focus{background-color:#f0fff4}.lg\:focus\:bg-green-200:focus{background-color:#c6f6d5}.lg\:focus\:bg-green-300:focus{background-color:#9ae6b4}.lg\:focus\:bg-green-400:focus{background-color:#68d391}.lg\:focus\:bg-green-500:focus{background-color:#48bb78}.lg\:focus\:bg-green-600:focus{background-color:#38a169}.lg\:focus\:bg-green-700:focus{background-color:#2f855a}.lg\:focus\:bg-green-800:focus{background-color:#276749}.lg\:focus\:bg-green-900:focus{background-color:#22543d}.lg\:focus\:bg-teal-100:focus{background-color:#e6fffa}.lg\:focus\:bg-teal-200:focus{background-color:#b2f5ea}.lg\:focus\:bg-teal-300:focus{background-color:#81e6d9}.lg\:focus\:bg-teal-400:focus{background-color:#4fd1c5}.lg\:focus\:bg-teal-500:focus{background-color:#38b2ac}.lg\:focus\:bg-teal-600:focus{background-color:#319795}.lg\:focus\:bg-teal-700:focus{background-color:#2c7a7b}.lg\:focus\:bg-teal-800:focus{background-color:#285e61}.lg\:focus\:bg-teal-900:focus{background-color:#234e52}.lg\:focus\:bg-blue-100:focus{background-color:#ebf8ff}.lg\:focus\:bg-blue-200:focus{background-color:#bee3f8}.lg\:focus\:bg-blue-300:focus{background-color:#90cdf4}.lg\:focus\:bg-blue-400:focus{background-color:#63b3ed}.lg\:focus\:bg-blue-500:focus{background-color:#4299e1}.lg\:focus\:bg-blue-600:focus{background-color:#3182ce}.lg\:focus\:bg-blue-700:focus{background-color:#2b6cb0}.lg\:focus\:bg-blue-800:focus{background-color:#2c5282}.lg\:focus\:bg-blue-900:focus{background-color:#2a4365}.lg\:focus\:bg-indigo-100:focus{background-color:#ebf4ff}.lg\:focus\:bg-indigo-200:focus{background-color:#c3dafe}.lg\:focus\:bg-indigo-300:focus{background-color:#a3bffa}.lg\:focus\:bg-indigo-400:focus{background-color:#7f9cf5}.lg\:focus\:bg-indigo-500:focus{background-color:#667eea}.lg\:focus\:bg-indigo-600:focus{background-color:#5a67d8}.lg\:focus\:bg-indigo-700:focus{background-color:#4c51bf}.lg\:focus\:bg-indigo-800:focus{background-color:#434190}.lg\:focus\:bg-indigo-900:focus{background-color:#3c366b}.lg\:focus\:bg-purple-100:focus{background-color:#faf5ff}.lg\:focus\:bg-purple-200:focus{background-color:#e9d8fd}.lg\:focus\:bg-purple-300:focus{background-color:#d6bcfa}.lg\:focus\:bg-purple-400:focus{background-color:#b794f4}.lg\:focus\:bg-purple-500:focus{background-color:#9f7aea}.lg\:focus\:bg-purple-600:focus{background-color:#805ad5}.lg\:focus\:bg-purple-700:focus{background-color:#6b46c1}.lg\:focus\:bg-purple-800:focus{background-color:#553c9a}.lg\:focus\:bg-purple-900:focus{background-color:#44337a}.lg\:focus\:bg-pink-100:focus{background-color:#fff5f7}.lg\:focus\:bg-pink-200:focus{background-color:#fed7e2}.lg\:focus\:bg-pink-300:focus{background-color:#fbb6ce}.lg\:focus\:bg-pink-400:focus{background-color:#f687b3}.lg\:focus\:bg-pink-500:focus{background-color:#ed64a6}.lg\:focus\:bg-pink-600:focus{background-color:#d53f8c}.lg\:focus\:bg-pink-700:focus{background-color:#b83280}.lg\:focus\:bg-pink-800:focus{background-color:#97266d}.lg\:focus\:bg-pink-900:focus{background-color:#702459}.lg\:bg-bottom{background-position:bottom}.lg\:bg-center{background-position:center}.lg\:bg-left{background-position:left}.lg\:bg-left-bottom{background-position:left bottom}.lg\:bg-left-top{background-position:left top}.lg\:bg-right{background-position:right}.lg\:bg-right-bottom{background-position:right bottom}.lg\:bg-right-top{background-position:right top}.lg\:bg-top{background-position:top}.lg\:bg-repeat{background-repeat:repeat}.lg\:bg-no-repeat{background-repeat:no-repeat}.lg\:bg-repeat-x{background-repeat:repeat-x}.lg\:bg-repeat-y{background-repeat:repeat-y}.lg\:bg-repeat-round{background-repeat:round}.lg\:bg-repeat-space{background-repeat:space}.lg\:bg-auto{background-size:auto}.lg\:bg-cover{background-size:cover}.lg\:bg-contain{background-size:contain}.lg\:border-collapse{border-collapse:collapse}.lg\:border-separate{border-collapse:separate}.lg\:border-transparent{border-color:transparent}.lg\:border-black{border-color:#000}.lg\:border-white{border-color:#fff}.lg\:border-gray-100{border-color:#f7fafc}.lg\:border-gray-200{border-color:#edf2f7}.lg\:border-gray-300{border-color:#e2e8f0}.lg\:border-gray-400{border-color:#cbd5e0}.lg\:border-gray-500{border-color:#a0aec0}.lg\:border-gray-600{border-color:#718096}.lg\:border-gray-700{border-color:#4a5568}.lg\:border-gray-800{border-color:#2d3748}.lg\:border-gray-900{border-color:#1a202c}.lg\:border-red-100{border-color:#fff5f5}.lg\:border-red-200{border-color:#fed7d7}.lg\:border-red-300{border-color:#feb2b2}.lg\:border-red-400{border-color:#fc8181}.lg\:border-red-500{border-color:#f56565}.lg\:border-red-600{border-color:#e53e3e}.lg\:border-red-700{border-color:#c53030}.lg\:border-red-800{border-color:#9b2c2c}.lg\:border-red-900{border-color:#742a2a}.lg\:border-orange-100{border-color:#fffaf0}.lg\:border-orange-200{border-color:#feebc8}.lg\:border-orange-300{border-color:#fbd38d}.lg\:border-orange-400{border-color:#f6ad55}.lg\:border-orange-500{border-color:#ed8936}.lg\:border-orange-600{border-color:#dd6b20}.lg\:border-orange-700{border-color:#c05621}.lg\:border-orange-800{border-color:#9c4221}.lg\:border-orange-900{border-color:#7b341e}.lg\:border-yellow-100{border-color:ivory}.lg\:border-yellow-200{border-color:#fefcbf}.lg\:border-yellow-300{border-color:#faf089}.lg\:border-yellow-400{border-color:#f6e05e}.lg\:border-yellow-500{border-color:#ecc94b}.lg\:border-yellow-600{border-color:#d69e2e}.lg\:border-yellow-700{border-color:#b7791f}.lg\:border-yellow-800{border-color:#975a16}.lg\:border-yellow-900{border-color:#744210}.lg\:border-green-100{border-color:#f0fff4}.lg\:border-green-200{border-color:#c6f6d5}.lg\:border-green-300{border-color:#9ae6b4}.lg\:border-green-400{border-color:#68d391}.lg\:border-green-500{border-color:#48bb78}.lg\:border-green-600{border-color:#38a169}.lg\:border-green-700{border-color:#2f855a}.lg\:border-green-800{border-color:#276749}.lg\:border-green-900{border-color:#22543d}.lg\:border-teal-100{border-color:#e6fffa}.lg\:border-teal-200{border-color:#b2f5ea}.lg\:border-teal-300{border-color:#81e6d9}.lg\:border-teal-400{border-color:#4fd1c5}.lg\:border-teal-500{border-color:#38b2ac}.lg\:border-teal-600{border-color:#319795}.lg\:border-teal-700{border-color:#2c7a7b}.lg\:border-teal-800{border-color:#285e61}.lg\:border-teal-900{border-color:#234e52}.lg\:border-blue-100{border-color:#ebf8ff}.lg\:border-blue-200{border-color:#bee3f8}.lg\:border-blue-300{border-color:#90cdf4}.lg\:border-blue-400{border-color:#63b3ed}.lg\:border-blue-500{border-color:#4299e1}.lg\:border-blue-600{border-color:#3182ce}.lg\:border-blue-700{border-color:#2b6cb0}.lg\:border-blue-800{border-color:#2c5282}.lg\:border-blue-900{border-color:#2a4365}.lg\:border-indigo-100{border-color:#ebf4ff}.lg\:border-indigo-200{border-color:#c3dafe}.lg\:border-indigo-300{border-color:#a3bffa}.lg\:border-indigo-400{border-color:#7f9cf5}.lg\:border-indigo-500{border-color:#667eea}.lg\:border-indigo-600{border-color:#5a67d8}.lg\:border-indigo-700{border-color:#4c51bf}.lg\:border-indigo-800{border-color:#434190}.lg\:border-indigo-900{border-color:#3c366b}.lg\:border-purple-100{border-color:#faf5ff}.lg\:border-purple-200{border-color:#e9d8fd}.lg\:border-purple-300{border-color:#d6bcfa}.lg\:border-purple-400{border-color:#b794f4}.lg\:border-purple-500{border-color:#9f7aea}.lg\:border-purple-600{border-color:#805ad5}.lg\:border-purple-700{border-color:#6b46c1}.lg\:border-purple-800{border-color:#553c9a}.lg\:border-purple-900{border-color:#44337a}.lg\:border-pink-100{border-color:#fff5f7}.lg\:border-pink-200{border-color:#fed7e2}.lg\:border-pink-300{border-color:#fbb6ce}.lg\:border-pink-400{border-color:#f687b3}.lg\:border-pink-500{border-color:#ed64a6}.lg\:border-pink-600{border-color:#d53f8c}.lg\:border-pink-700{border-color:#b83280}.lg\:border-pink-800{border-color:#97266d}.lg\:border-pink-900{border-color:#702459}.lg\:hover\:border-transparent:hover{border-color:transparent}.lg\:hover\:border-black:hover{border-color:#000}.lg\:hover\:border-white:hover{border-color:#fff}.lg\:hover\:border-gray-100:hover{border-color:#f7fafc}.lg\:hover\:border-gray-200:hover{border-color:#edf2f7}.lg\:hover\:border-gray-300:hover{border-color:#e2e8f0}.lg\:hover\:border-gray-400:hover{border-color:#cbd5e0}.lg\:hover\:border-gray-500:hover{border-color:#a0aec0}.lg\:hover\:border-gray-600:hover{border-color:#718096}.lg\:hover\:border-gray-700:hover{border-color:#4a5568}.lg\:hover\:border-gray-800:hover{border-color:#2d3748}.lg\:hover\:border-gray-900:hover{border-color:#1a202c}.lg\:hover\:border-red-100:hover{border-color:#fff5f5}.lg\:hover\:border-red-200:hover{border-color:#fed7d7}.lg\:hover\:border-red-300:hover{border-color:#feb2b2}.lg\:hover\:border-red-400:hover{border-color:#fc8181}.lg\:hover\:border-red-500:hover{border-color:#f56565}.lg\:hover\:border-red-600:hover{border-color:#e53e3e}.lg\:hover\:border-red-700:hover{border-color:#c53030}.lg\:hover\:border-red-800:hover{border-color:#9b2c2c}.lg\:hover\:border-red-900:hover{border-color:#742a2a}.lg\:hover\:border-orange-100:hover{border-color:#fffaf0}.lg\:hover\:border-orange-200:hover{border-color:#feebc8}.lg\:hover\:border-orange-300:hover{border-color:#fbd38d}.lg\:hover\:border-orange-400:hover{border-color:#f6ad55}.lg\:hover\:border-orange-500:hover{border-color:#ed8936}.lg\:hover\:border-orange-600:hover{border-color:#dd6b20}.lg\:hover\:border-orange-700:hover{border-color:#c05621}.lg\:hover\:border-orange-800:hover{border-color:#9c4221}.lg\:hover\:border-orange-900:hover{border-color:#7b341e}.lg\:hover\:border-yellow-100:hover{border-color:ivory}.lg\:hover\:border-yellow-200:hover{border-color:#fefcbf}.lg\:hover\:border-yellow-300:hover{border-color:#faf089}.lg\:hover\:border-yellow-400:hover{border-color:#f6e05e}.lg\:hover\:border-yellow-500:hover{border-color:#ecc94b}.lg\:hover\:border-yellow-600:hover{border-color:#d69e2e}.lg\:hover\:border-yellow-700:hover{border-color:#b7791f}.lg\:hover\:border-yellow-800:hover{border-color:#975a16}.lg\:hover\:border-yellow-900:hover{border-color:#744210}.lg\:hover\:border-green-100:hover{border-color:#f0fff4}.lg\:hover\:border-green-200:hover{border-color:#c6f6d5}.lg\:hover\:border-green-300:hover{border-color:#9ae6b4}.lg\:hover\:border-green-400:hover{border-color:#68d391}.lg\:hover\:border-green-500:hover{border-color:#48bb78}.lg\:hover\:border-green-600:hover{border-color:#38a169}.lg\:hover\:border-green-700:hover{border-color:#2f855a}.lg\:hover\:border-green-800:hover{border-color:#276749}.lg\:hover\:border-green-900:hover{border-color:#22543d}.lg\:hover\:border-teal-100:hover{border-color:#e6fffa}.lg\:hover\:border-teal-200:hover{border-color:#b2f5ea}.lg\:hover\:border-teal-300:hover{border-color:#81e6d9}.lg\:hover\:border-teal-400:hover{border-color:#4fd1c5}.lg\:hover\:border-teal-500:hover{border-color:#38b2ac}.lg\:hover\:border-teal-600:hover{border-color:#319795}.lg\:hover\:border-teal-700:hover{border-color:#2c7a7b}.lg\:hover\:border-teal-800:hover{border-color:#285e61}.lg\:hover\:border-teal-900:hover{border-color:#234e52}.lg\:hover\:border-blue-100:hover{border-color:#ebf8ff}.lg\:hover\:border-blue-200:hover{border-color:#bee3f8}.lg\:hover\:border-blue-300:hover{border-color:#90cdf4}.lg\:hover\:border-blue-400:hover{border-color:#63b3ed}.lg\:hover\:border-blue-500:hover{border-color:#4299e1}.lg\:hover\:border-blue-600:hover{border-color:#3182ce}.lg\:hover\:border-blue-700:hover{border-color:#2b6cb0}.lg\:hover\:border-blue-800:hover{border-color:#2c5282}.lg\:hover\:border-blue-900:hover{border-color:#2a4365}.lg\:hover\:border-indigo-100:hover{border-color:#ebf4ff}.lg\:hover\:border-indigo-200:hover{border-color:#c3dafe}.lg\:hover\:border-indigo-300:hover{border-color:#a3bffa}.lg\:hover\:border-indigo-400:hover{border-color:#7f9cf5}.lg\:hover\:border-indigo-500:hover{border-color:#667eea}.lg\:hover\:border-indigo-600:hover{border-color:#5a67d8}.lg\:hover\:border-indigo-700:hover{border-color:#4c51bf}.lg\:hover\:border-indigo-800:hover{border-color:#434190}.lg\:hover\:border-indigo-900:hover{border-color:#3c366b}.lg\:hover\:border-purple-100:hover{border-color:#faf5ff}.lg\:hover\:border-purple-200:hover{border-color:#e9d8fd}.lg\:hover\:border-purple-300:hover{border-color:#d6bcfa}.lg\:hover\:border-purple-400:hover{border-color:#b794f4}.lg\:hover\:border-purple-500:hover{border-color:#9f7aea}.lg\:hover\:border-purple-600:hover{border-color:#805ad5}.lg\:hover\:border-purple-700:hover{border-color:#6b46c1}.lg\:hover\:border-purple-800:hover{border-color:#553c9a}.lg\:hover\:border-purple-900:hover{border-color:#44337a}.lg\:hover\:border-pink-100:hover{border-color:#fff5f7}.lg\:hover\:border-pink-200:hover{border-color:#fed7e2}.lg\:hover\:border-pink-300:hover{border-color:#fbb6ce}.lg\:hover\:border-pink-400:hover{border-color:#f687b3}.lg\:hover\:border-pink-500:hover{border-color:#ed64a6}.lg\:hover\:border-pink-600:hover{border-color:#d53f8c}.lg\:hover\:border-pink-700:hover{border-color:#b83280}.lg\:hover\:border-pink-800:hover{border-color:#97266d}.lg\:hover\:border-pink-900:hover{border-color:#702459}.lg\:focus\:border-transparent:focus{border-color:transparent}.lg\:focus\:border-black:focus{border-color:#000}.lg\:focus\:border-white:focus{border-color:#fff}.lg\:focus\:border-gray-100:focus{border-color:#f7fafc}.lg\:focus\:border-gray-200:focus{border-color:#edf2f7}.lg\:focus\:border-gray-300:focus{border-color:#e2e8f0}.lg\:focus\:border-gray-400:focus{border-color:#cbd5e0}.lg\:focus\:border-gray-500:focus{border-color:#a0aec0}.lg\:focus\:border-gray-600:focus{border-color:#718096}.lg\:focus\:border-gray-700:focus{border-color:#4a5568}.lg\:focus\:border-gray-800:focus{border-color:#2d3748}.lg\:focus\:border-gray-900:focus{border-color:#1a202c}.lg\:focus\:border-red-100:focus{border-color:#fff5f5}.lg\:focus\:border-red-200:focus{border-color:#fed7d7}.lg\:focus\:border-red-300:focus{border-color:#feb2b2}.lg\:focus\:border-red-400:focus{border-color:#fc8181}.lg\:focus\:border-red-500:focus{border-color:#f56565}.lg\:focus\:border-red-600:focus{border-color:#e53e3e}.lg\:focus\:border-red-700:focus{border-color:#c53030}.lg\:focus\:border-red-800:focus{border-color:#9b2c2c}.lg\:focus\:border-red-900:focus{border-color:#742a2a}.lg\:focus\:border-orange-100:focus{border-color:#fffaf0}.lg\:focus\:border-orange-200:focus{border-color:#feebc8}.lg\:focus\:border-orange-300:focus{border-color:#fbd38d}.lg\:focus\:border-orange-400:focus{border-color:#f6ad55}.lg\:focus\:border-orange-500:focus{border-color:#ed8936}.lg\:focus\:border-orange-600:focus{border-color:#dd6b20}.lg\:focus\:border-orange-700:focus{border-color:#c05621}.lg\:focus\:border-orange-800:focus{border-color:#9c4221}.lg\:focus\:border-orange-900:focus{border-color:#7b341e}.lg\:focus\:border-yellow-100:focus{border-color:ivory}.lg\:focus\:border-yellow-200:focus{border-color:#fefcbf}.lg\:focus\:border-yellow-300:focus{border-color:#faf089}.lg\:focus\:border-yellow-400:focus{border-color:#f6e05e}.lg\:focus\:border-yellow-500:focus{border-color:#ecc94b}.lg\:focus\:border-yellow-600:focus{border-color:#d69e2e}.lg\:focus\:border-yellow-700:focus{border-color:#b7791f}.lg\:focus\:border-yellow-800:focus{border-color:#975a16}.lg\:focus\:border-yellow-900:focus{border-color:#744210}.lg\:focus\:border-green-100:focus{border-color:#f0fff4}.lg\:focus\:border-green-200:focus{border-color:#c6f6d5}.lg\:focus\:border-green-300:focus{border-color:#9ae6b4}.lg\:focus\:border-green-400:focus{border-color:#68d391}.lg\:focus\:border-green-500:focus{border-color:#48bb78}.lg\:focus\:border-green-600:focus{border-color:#38a169}.lg\:focus\:border-green-700:focus{border-color:#2f855a}.lg\:focus\:border-green-800:focus{border-color:#276749}.lg\:focus\:border-green-900:focus{border-color:#22543d}.lg\:focus\:border-teal-100:focus{border-color:#e6fffa}.lg\:focus\:border-teal-200:focus{border-color:#b2f5ea}.lg\:focus\:border-teal-300:focus{border-color:#81e6d9}.lg\:focus\:border-teal-400:focus{border-color:#4fd1c5}.lg\:focus\:border-teal-500:focus{border-color:#38b2ac}.lg\:focus\:border-teal-600:focus{border-color:#319795}.lg\:focus\:border-teal-700:focus{border-color:#2c7a7b}.lg\:focus\:border-teal-800:focus{border-color:#285e61}.lg\:focus\:border-teal-900:focus{border-color:#234e52}.lg\:focus\:border-blue-100:focus{border-color:#ebf8ff}.lg\:focus\:border-blue-200:focus{border-color:#bee3f8}.lg\:focus\:border-blue-300:focus{border-color:#90cdf4}.lg\:focus\:border-blue-400:focus{border-color:#63b3ed}.lg\:focus\:border-blue-500:focus{border-color:#4299e1}.lg\:focus\:border-blue-600:focus{border-color:#3182ce}.lg\:focus\:border-blue-700:focus{border-color:#2b6cb0}.lg\:focus\:border-blue-800:focus{border-color:#2c5282}.lg\:focus\:border-blue-900:focus{border-color:#2a4365}.lg\:focus\:border-indigo-100:focus{border-color:#ebf4ff}.lg\:focus\:border-indigo-200:focus{border-color:#c3dafe}.lg\:focus\:border-indigo-300:focus{border-color:#a3bffa}.lg\:focus\:border-indigo-400:focus{border-color:#7f9cf5}.lg\:focus\:border-indigo-500:focus{border-color:#667eea}.lg\:focus\:border-indigo-600:focus{border-color:#5a67d8}.lg\:focus\:border-indigo-700:focus{border-color:#4c51bf}.lg\:focus\:border-indigo-800:focus{border-color:#434190}.lg\:focus\:border-indigo-900:focus{border-color:#3c366b}.lg\:focus\:border-purple-100:focus{border-color:#faf5ff}.lg\:focus\:border-purple-200:focus{border-color:#e9d8fd}.lg\:focus\:border-purple-300:focus{border-color:#d6bcfa}.lg\:focus\:border-purple-400:focus{border-color:#b794f4}.lg\:focus\:border-purple-500:focus{border-color:#9f7aea}.lg\:focus\:border-purple-600:focus{border-color:#805ad5}.lg\:focus\:border-purple-700:focus{border-color:#6b46c1}.lg\:focus\:border-purple-800:focus{border-color:#553c9a}.lg\:focus\:border-purple-900:focus{border-color:#44337a}.lg\:focus\:border-pink-100:focus{border-color:#fff5f7}.lg\:focus\:border-pink-200:focus{border-color:#fed7e2}.lg\:focus\:border-pink-300:focus{border-color:#fbb6ce}.lg\:focus\:border-pink-400:focus{border-color:#f687b3}.lg\:focus\:border-pink-500:focus{border-color:#ed64a6}.lg\:focus\:border-pink-600:focus{border-color:#d53f8c}.lg\:focus\:border-pink-700:focus{border-color:#b83280}.lg\:focus\:border-pink-800:focus{border-color:#97266d}.lg\:focus\:border-pink-900:focus{border-color:#702459}.lg\:rounded-none{border-radius:0}.lg\:rounded-sm{border-radius:.125rem}.lg\:rounded{border-radius:.25rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:rounded-full{border-radius:9999px}.lg\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.lg\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.lg\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.lg\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.lg\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.lg\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.lg\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.lg\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.lg\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.lg\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.lg\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.lg\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.lg\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.lg\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.lg\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.lg\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.lg\:rounded-tl-none{border-top-left-radius:0}.lg\:rounded-tr-none{border-top-right-radius:0}.lg\:rounded-br-none{border-bottom-right-radius:0}.lg\:rounded-bl-none{border-bottom-left-radius:0}.lg\:rounded-tl-sm{border-top-left-radius:.125rem}.lg\:rounded-tr-sm{border-top-right-radius:.125rem}.lg\:rounded-br-sm{border-bottom-right-radius:.125rem}.lg\:rounded-bl-sm{border-bottom-left-radius:.125rem}.lg\:rounded-tl{border-top-left-radius:.25rem}.lg\:rounded-tr{border-top-right-radius:.25rem}.lg\:rounded-br{border-bottom-right-radius:.25rem}.lg\:rounded-bl{border-bottom-left-radius:.25rem}.lg\:rounded-tl-lg{border-top-left-radius:.5rem}.lg\:rounded-tr-lg{border-top-right-radius:.5rem}.lg\:rounded-br-lg{border-bottom-right-radius:.5rem}.lg\:rounded-bl-lg{border-bottom-left-radius:.5rem}.lg\:rounded-tl-full{border-top-left-radius:9999px}.lg\:rounded-tr-full{border-top-right-radius:9999px}.lg\:rounded-br-full{border-bottom-right-radius:9999px}.lg\:rounded-bl-full{border-bottom-left-radius:9999px}.lg\:border-solid{border-style:solid}.lg\:border-dashed{border-style:dashed}.lg\:border-dotted{border-style:dotted}.lg\:border-none{border-style:none}.lg\:border-0{border-width:0}.lg\:border-2{border-width:2px}.lg\:border-4{border-width:4px}.lg\:border-8{border-width:8px}.lg\:border{border-width:1px}.lg\:border-t-0{border-top-width:0}.lg\:border-r-0{border-right-width:0}.lg\:border-b-0{border-bottom-width:0}.lg\:border-l-0{border-left-width:0}.lg\:border-t-2{border-top-width:2px}.lg\:border-r-2{border-right-width:2px}.lg\:border-b-2{border-bottom-width:2px}.lg\:border-l-2{border-left-width:2px}.lg\:border-t-4{border-top-width:4px}.lg\:border-r-4{border-right-width:4px}.lg\:border-b-4{border-bottom-width:4px}.lg\:border-l-4{border-left-width:4px}.lg\:border-t-8{border-top-width:8px}.lg\:border-r-8{border-right-width:8px}.lg\:border-b-8{border-bottom-width:8px}.lg\:border-l-8{border-left-width:8px}.lg\:border-t{border-top-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-b{border-bottom-width:1px}.lg\:border-l{border-left-width:1px}.lg\:cursor-auto{cursor:auto}.lg\:cursor-default{cursor:default}.lg\:cursor-pointer{cursor:pointer}.lg\:cursor-wait{cursor:wait}.lg\:cursor-text{cursor:text}.lg\:cursor-move{cursor:move}.lg\:cursor-not-allowed{cursor:not-allowed}.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:inline{display:inline}.lg\:flex{display:flex}.lg\:inline-flex{display:inline-flex}.lg\:table{display:table}.lg\:table-row{display:table-row}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:flex-row{flex-direction:row}.lg\:flex-row-reverse{flex-direction:row-reverse}.lg\:flex-col{flex-direction:column}.lg\:flex-col-reverse{flex-direction:column-reverse}.lg\:flex-wrap{flex-wrap:wrap}.lg\:flex-wrap-reverse{flex-wrap:wrap-reverse}.lg\:flex-no-wrap{flex-wrap:nowrap}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:items-baseline{align-items:baseline}.lg\:items-stretch{align-items:stretch}.lg\:self-auto{align-self:auto}.lg\:self-start{align-self:flex-start}.lg\:self-end{align-self:flex-end}.lg\:self-center{align-self:center}.lg\:self-stretch{align-self:stretch}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-center{justify-content:center}.lg\:justify-between{justify-content:space-between}.lg\:justify-around{justify-content:space-around}.lg\:content-center{align-content:center}.lg\:content-start{align-content:flex-start}.lg\:content-end{align-content:flex-end}.lg\:content-between{align-content:space-between}.lg\:content-around{align-content:space-around}.lg\:flex-1{flex:1 1 0%}.lg\:flex-auto{flex:1 1 auto}.lg\:flex-initial{flex:0 1 auto}.lg\:flex-none{flex:none}.lg\:flex-grow-0{flex-grow:0}.lg\:flex-grow{flex-grow:1}.lg\:flex-shrink-0{flex-shrink:0}.lg\:flex-shrink{flex-shrink:1}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-3{order:3}.lg\:order-4{order:4}.lg\:order-5{order:5}.lg\:order-6{order:6}.lg\:order-7{order:7}.lg\:order-8{order:8}.lg\:order-9{order:9}.lg\:order-10{order:10}.lg\:order-11{order:11}.lg\:order-12{order:12}.lg\:order-first{order:-9999}.lg\:order-last{order:9999}.lg\:order-none{order:0}.lg\:float-right{float:right}.lg\:float-left{float:left}.lg\:float-none{float:none}.lg\:clearfix:after{content:"";display:table;clear:both}.lg\:font-sans{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.lg\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.lg\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.lg\:font-hairline{font-weight:100}.lg\:font-thin{font-weight:200}.lg\:font-light{font-weight:300}.lg\:font-normal{font-weight:400}.lg\:font-medium{font-weight:500}.lg\:font-semibold{font-weight:600}.lg\:font-bold{font-weight:700}.lg\:font-extrabold{font-weight:800}.lg\:font-black{font-weight:900}.lg\:hover\:font-hairline:hover{font-weight:100}.lg\:hover\:font-thin:hover{font-weight:200}.lg\:hover\:font-light:hover{font-weight:300}.lg\:hover\:font-normal:hover{font-weight:400}.lg\:hover\:font-medium:hover{font-weight:500}.lg\:hover\:font-semibold:hover{font-weight:600}.lg\:hover\:font-bold:hover{font-weight:700}.lg\:hover\:font-extrabold:hover{font-weight:800}.lg\:hover\:font-black:hover{font-weight:900}.lg\:focus\:font-hairline:focus{font-weight:100}.lg\:focus\:font-thin:focus{font-weight:200}.lg\:focus\:font-light:focus{font-weight:300}.lg\:focus\:font-normal:focus{font-weight:400}.lg\:focus\:font-medium:focus{font-weight:500}.lg\:focus\:font-semibold:focus{font-weight:600}.lg\:focus\:font-bold:focus{font-weight:700}.lg\:focus\:font-extrabold:focus{font-weight:800}.lg\:focus\:font-black:focus{font-weight:900}.lg\:h-0{height:0}.lg\:h-1{height:.25rem}.lg\:h-2{height:.5rem}.lg\:h-3{height:.75rem}.lg\:h-4{height:1rem}.lg\:h-5{height:1.25rem}.lg\:h-6{height:1.5rem}.lg\:h-8{height:2rem}.lg\:h-10{height:2.5rem}.lg\:h-12{height:3rem}.lg\:h-16{height:4rem}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-32{height:8rem}.lg\:h-40{height:10rem}.lg\:h-48{height:12rem}.lg\:h-56{height:14rem}.lg\:h-64{height:16rem}.lg\:h-auto{height:auto}.lg\:h-px{height:1px}.lg\:h-full{height:100%}.lg\:h-screen{height:100vh}.lg\:leading-none{line-height:1}.lg\:leading-tight{line-height:1.25}.lg\:leading-snug{line-height:1.375}.lg\:leading-normal{line-height:1.5}.lg\:leading-relaxed{line-height:1.625}.lg\:leading-loose{line-height:2}.lg\:list-inside{list-style-position:inside}.lg\:list-outside{list-style-position:outside}.lg\:list-none{list-style-type:none}.lg\:list-disc{list-style-type:disc}.lg\:list-decimal{list-style-type:decimal}.lg\:m-0{margin:0}.lg\:m-1{margin:.25rem}.lg\:m-2{margin:.5rem}.lg\:m-3{margin:.75rem}.lg\:m-4{margin:1rem}.lg\:m-5{margin:1.25rem}.lg\:m-6{margin:1.5rem}.lg\:m-8{margin:2rem}.lg\:m-10{margin:2.5rem}.lg\:m-12{margin:3rem}.lg\:m-16{margin:4rem}.lg\:m-20{margin:5rem}.lg\:m-24{margin:6rem}.lg\:m-32{margin:8rem}.lg\:m-40{margin:10rem}.lg\:m-48{margin:12rem}.lg\:m-56{margin:14rem}.lg\:m-64{margin:16rem}.lg\:m-auto{margin:auto}.lg\:m-px{margin:1px}.lg\:-m-1{margin:-.25rem}.lg\:-m-2{margin:-.5rem}.lg\:-m-3{margin:-.75rem}.lg\:-m-4{margin:-1rem}.lg\:-m-5{margin:-1.25rem}.lg\:-m-6{margin:-1.5rem}.lg\:-m-8{margin:-2rem}.lg\:-m-10{margin:-2.5rem}.lg\:-m-12{margin:-3rem}.lg\:-m-16{margin:-4rem}.lg\:-m-20{margin:-5rem}.lg\:-m-24{margin:-6rem}.lg\:-m-32{margin:-8rem}.lg\:-m-40{margin:-10rem}.lg\:-m-48{margin:-12rem}.lg\:-m-56{margin:-14rem}.lg\:-m-64{margin:-16rem}.lg\:-m-px{margin:-1px}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:my-1{margin-top:.25rem;margin-bottom:.25rem}.lg\:mx-1{margin-left:.25rem;margin-right:.25rem}.lg\:my-2{margin-top:.5rem;margin-bottom:.5rem}.lg\:mx-2{margin-left:.5rem;margin-right:.5rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mx-3{margin-left:.75rem;margin-right:.75rem}.lg\:my-4{margin-top:1rem;margin-bottom:1rem}.lg\:mx-4{margin-left:1rem;margin-right:1rem}.lg\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lg\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.lg\:my-8{margin-top:2rem;margin-bottom:2rem}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.lg\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.lg\:my-12{margin-top:3rem;margin-bottom:3rem}.lg\:mx-12{margin-left:3rem;margin-right:3rem}.lg\:my-16{margin-top:4rem;margin-bottom:4rem}.lg\:mx-16{margin-left:4rem;margin-right:4rem}.lg\:my-20{margin-top:5rem;margin-bottom:5rem}.lg\:mx-20{margin-left:5rem;margin-right:5rem}.lg\:my-24{margin-top:6rem;margin-bottom:6rem}.lg\:mx-24{margin-left:6rem;margin-right:6rem}.lg\:my-32{margin-top:8rem;margin-bottom:8rem}.lg\:mx-32{margin-left:8rem;margin-right:8rem}.lg\:my-40{margin-top:10rem;margin-bottom:10rem}.lg\:mx-40{margin-left:10rem;margin-right:10rem}.lg\:my-48{margin-top:12rem;margin-bottom:12rem}.lg\:mx-48{margin-left:12rem;margin-right:12rem}.lg\:my-56{margin-top:14rem;margin-bottom:14rem}.lg\:mx-56{margin-left:14rem;margin-right:14rem}.lg\:my-64{margin-top:16rem;margin-bottom:16rem}.lg\:mx-64{margin-left:16rem;margin-right:16rem}.lg\:my-auto{margin-top:auto;margin-bottom:auto}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:my-px{margin-top:1px;margin-bottom:1px}.lg\:mx-px{margin-left:1px;margin-right:1px}.lg\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.lg\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lg\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.lg\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.lg\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.lg\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.lg\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.lg\:-mx-4{margin-left:-1rem;margin-right:-1rem}.lg\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.lg\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lg\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.lg\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.lg\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.lg\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.lg\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.lg\:-mx-12{margin-left:-3rem;margin-right:-3rem}.lg\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.lg\:-mx-16{margin-left:-4rem;margin-right:-4rem}.lg\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.lg\:-mx-20{margin-left:-5rem;margin-right:-5rem}.lg\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.lg\:-mx-24{margin-left:-6rem;margin-right:-6rem}.lg\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.lg\:-mx-32{margin-left:-8rem;margin-right:-8rem}.lg\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.lg\:-mx-40{margin-left:-10rem;margin-right:-10rem}.lg\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.lg\:-mx-48{margin-left:-12rem;margin-right:-12rem}.lg\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.lg\:-mx-56{margin-left:-14rem;margin-right:-14rem}.lg\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.lg\:-mx-64{margin-left:-16rem;margin-right:-16rem}.lg\:-my-px{margin-top:-1px;margin-bottom:-1px}.lg\:-mx-px{margin-left:-1px;margin-right:-1px}.lg\:mt-0{margin-top:0}.lg\:mr-0{margin-right:0}.lg\:mb-0{margin-bottom:0}.lg\:ml-0{margin-left:0}.lg\:mt-1{margin-top:.25rem}.lg\:mr-1{margin-right:.25rem}.lg\:mb-1{margin-bottom:.25rem}.lg\:ml-1{margin-left:.25rem}.lg\:mt-2{margin-top:.5rem}.lg\:mr-2{margin-right:.5rem}.lg\:mb-2{margin-bottom:.5rem}.lg\:ml-2{margin-left:.5rem}.lg\:mt-3{margin-top:.75rem}.lg\:mr-3{margin-right:.75rem}.lg\:mb-3{margin-bottom:.75rem}.lg\:ml-3{margin-left:.75rem}.lg\:mt-4{margin-top:1rem}.lg\:mr-4{margin-right:1rem}.lg\:mb-4{margin-bottom:1rem}.lg\:ml-4{margin-left:1rem}.lg\:mt-5{margin-top:1.25rem}.lg\:mr-5{margin-right:1.25rem}.lg\:mb-5{margin-bottom:1.25rem}.lg\:ml-5{margin-left:1.25rem}.lg\:mt-6{margin-top:1.5rem}.lg\:mr-6{margin-right:1.5rem}.lg\:mb-6{margin-bottom:1.5rem}.lg\:ml-6{margin-left:1.5rem}.lg\:mt-8{margin-top:2rem}.lg\:mr-8{margin-right:2rem}.lg\:mb-8{margin-bottom:2rem}.lg\:ml-8{margin-left:2rem}.lg\:mt-10{margin-top:2.5rem}.lg\:mr-10{margin-right:2.5rem}.lg\:mb-10{margin-bottom:2.5rem}.lg\:ml-10{margin-left:2.5rem}.lg\:mt-12{margin-top:3rem}.lg\:mr-12{margin-right:3rem}.lg\:mb-12{margin-bottom:3rem}.lg\:ml-12{margin-left:3rem}.lg\:mt-16{margin-top:4rem}.lg\:mr-16{margin-right:4rem}.lg\:mb-16{margin-bottom:4rem}.lg\:ml-16{margin-left:4rem}.lg\:mt-20{margin-top:5rem}.lg\:mr-20{margin-right:5rem}.lg\:mb-20{margin-bottom:5rem}.lg\:ml-20{margin-left:5rem}.lg\:mt-24{margin-top:6rem}.lg\:mr-24{margin-right:6rem}.lg\:mb-24{margin-bottom:6rem}.lg\:ml-24{margin-left:6rem}.lg\:mt-32{margin-top:8rem}.lg\:mr-32{margin-right:8rem}.lg\:mb-32{margin-bottom:8rem}.lg\:ml-32{margin-left:8rem}.lg\:mt-40{margin-top:10rem}.lg\:mr-40{margin-right:10rem}.lg\:mb-40{margin-bottom:10rem}.lg\:ml-40{margin-left:10rem}.lg\:mt-48{margin-top:12rem}.lg\:mr-48{margin-right:12rem}.lg\:mb-48{margin-bottom:12rem}.lg\:ml-48{margin-left:12rem}.lg\:mt-56{margin-top:14rem}.lg\:mr-56{margin-right:14rem}.lg\:mb-56{margin-bottom:14rem}.lg\:ml-56{margin-left:14rem}.lg\:mt-64{margin-top:16rem}.lg\:mr-64{margin-right:16rem}.lg\:mb-64{margin-bottom:16rem}.lg\:ml-64{margin-left:16rem}.lg\:mt-auto{margin-top:auto}.lg\:mr-auto{margin-right:auto}.lg\:mb-auto{margin-bottom:auto}.lg\:ml-auto{margin-left:auto}.lg\:mt-px{margin-top:1px}.lg\:mr-px{margin-right:1px}.lg\:mb-px{margin-bottom:1px}.lg\:ml-px{margin-left:1px}.lg\:-mt-1{margin-top:-.25rem}.lg\:-mr-1{margin-right:-.25rem}.lg\:-mb-1{margin-bottom:-.25rem}.lg\:-ml-1{margin-left:-.25rem}.lg\:-mt-2{margin-top:-.5rem}.lg\:-mr-2{margin-right:-.5rem}.lg\:-mb-2{margin-bottom:-.5rem}.lg\:-ml-2{margin-left:-.5rem}.lg\:-mt-3{margin-top:-.75rem}.lg\:-mr-3{margin-right:-.75rem}.lg\:-mb-3{margin-bottom:-.75rem}.lg\:-ml-3{margin-left:-.75rem}.lg\:-mt-4{margin-top:-1rem}.lg\:-mr-4{margin-right:-1rem}.lg\:-mb-4{margin-bottom:-1rem}.lg\:-ml-4{margin-left:-1rem}.lg\:-mt-5{margin-top:-1.25rem}.lg\:-mr-5{margin-right:-1.25rem}.lg\:-mb-5{margin-bottom:-1.25rem}.lg\:-ml-5{margin-left:-1.25rem}.lg\:-mt-6{margin-top:-1.5rem}.lg\:-mr-6{margin-right:-1.5rem}.lg\:-mb-6{margin-bottom:-1.5rem}.lg\:-ml-6{margin-left:-1.5rem}.lg\:-mt-8{margin-top:-2rem}.lg\:-mr-8{margin-right:-2rem}.lg\:-mb-8{margin-bottom:-2rem}.lg\:-ml-8{margin-left:-2rem}.lg\:-mt-10{margin-top:-2.5rem}.lg\:-mr-10{margin-right:-2.5rem}.lg\:-mb-10{margin-bottom:-2.5rem}.lg\:-ml-10{margin-left:-2.5rem}.lg\:-mt-12{margin-top:-3rem}.lg\:-mr-12{margin-right:-3rem}.lg\:-mb-12{margin-bottom:-3rem}.lg\:-ml-12{margin-left:-3rem}.lg\:-mt-16{margin-top:-4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:-mb-16{margin-bottom:-4rem}.lg\:-ml-16{margin-left:-4rem}.lg\:-mt-20{margin-top:-5rem}.lg\:-mr-20{margin-right:-5rem}.lg\:-mb-20{margin-bottom:-5rem}.lg\:-ml-20{margin-left:-5rem}.lg\:-mt-24{margin-top:-6rem}.lg\:-mr-24{margin-right:-6rem}.lg\:-mb-24{margin-bottom:-6rem}.lg\:-ml-24{margin-left:-6rem}.lg\:-mt-32{margin-top:-8rem}.lg\:-mr-32{margin-right:-8rem}.lg\:-mb-32{margin-bottom:-8rem}.lg\:-ml-32{margin-left:-8rem}.lg\:-mt-40{margin-top:-10rem}.lg\:-mr-40{margin-right:-10rem}.lg\:-mb-40{margin-bottom:-10rem}.lg\:-ml-40{margin-left:-10rem}.lg\:-mt-48{margin-top:-12rem}.lg\:-mr-48{margin-right:-12rem}.lg\:-mb-48{margin-bottom:-12rem}.lg\:-ml-48{margin-left:-12rem}.lg\:-mt-56{margin-top:-14rem}.lg\:-mr-56{margin-right:-14rem}.lg\:-mb-56{margin-bottom:-14rem}.lg\:-ml-56{margin-left:-14rem}.lg\:-mt-64{margin-top:-16rem}.lg\:-mr-64{margin-right:-16rem}.lg\:-mb-64{margin-bottom:-16rem}.lg\:-ml-64{margin-left:-16rem}.lg\:-mt-px{margin-top:-1px}.lg\:-mr-px{margin-right:-1px}.lg\:-mb-px{margin-bottom:-1px}.lg\:-ml-px{margin-left:-1px}.lg\:max-h-full{max-height:100%}.lg\:max-h-screen{max-height:100vh}.lg\:max-w-xs{max-width:20rem}.lg\:max-w-sm{max-width:24rem}.lg\:max-w-md{max-width:28rem}.lg\:max-w-lg{max-width:32rem}.lg\:max-w-xl{max-width:36rem}.lg\:max-w-2xl{max-width:42rem}.lg\:max-w-3xl{max-width:48rem}.lg\:max-w-4xl{max-width:56rem}.lg\:max-w-5xl{max-width:64rem}.lg\:max-w-6xl{max-width:72rem}.lg\:max-w-full{max-width:100%}.lg\:min-h-0{min-height:0}.lg\:min-h-full{min-height:100%}.lg\:min-h-screen{min-height:100vh}.lg\:min-w-0{min-width:0}.lg\:min-w-full{min-width:100%}.lg\:object-contain{-o-object-fit:contain;object-fit:contain}.lg\:object-cover{-o-object-fit:cover;object-fit:cover}.lg\:object-fill{-o-object-fit:fill;object-fit:fill}.lg\:object-none{-o-object-fit:none;object-fit:none}.lg\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.lg\:object-bottom{-o-object-position:bottom;object-position:bottom}.lg\:object-center{-o-object-position:center;object-position:center}.lg\:object-left{-o-object-position:left;object-position:left}.lg\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.lg\:object-left-top{-o-object-position:left top;object-position:left top}.lg\:object-right{-o-object-position:right;object-position:right}.lg\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.lg\:object-right-top{-o-object-position:right top;object-position:right top}.lg\:object-top{-o-object-position:top;object-position:top}.lg\:opacity-0{opacity:0}.lg\:opacity-25{opacity:.25}.lg\:opacity-50{opacity:.5}.lg\:opacity-75{opacity:.75}.lg\:opacity-100{opacity:1}.lg\:outline-none{outline:0}.lg\:focus\:outline-none:focus{outline:0}.lg\:overflow-auto{overflow:auto}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-visible{overflow:visible}.lg\:overflow-scroll{overflow:scroll}.lg\:overflow-x-auto{overflow-x:auto}.lg\:overflow-y-auto{overflow-y:auto}.lg\:overflow-x-hidden{overflow-x:hidden}.lg\:overflow-y-hidden{overflow-y:hidden}.lg\:overflow-x-visible{overflow-x:visible}.lg\:overflow-y-visible{overflow-y:visible}.lg\:overflow-x-scroll{overflow-x:scroll}.lg\:overflow-y-scroll{overflow-y:scroll}.lg\:scrolling-touch{-webkit-overflow-scrolling:touch}.lg\:scrolling-auto{-webkit-overflow-scrolling:auto}.lg\:p-0{padding:0}.lg\:p-1{padding:.25rem}.lg\:p-2{padding:.5rem}.lg\:p-3{padding:.75rem}.lg\:p-4{padding:1rem}.lg\:p-5{padding:1.25rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:p-10{padding:2.5rem}.lg\:p-12{padding:3rem}.lg\:p-16{padding:4rem}.lg\:p-20{padding:5rem}.lg\:p-24{padding:6rem}.lg\:p-32{padding:8rem}.lg\:p-40{padding:10rem}.lg\:p-48{padding:12rem}.lg\:p-56{padding:14rem}.lg\:p-64{padding:16rem}.lg\:p-px{padding:1px}.lg\:py-0{padding-top:0;padding-bottom:0}.lg\:px-0{padding-left:0;padding-right:0}.lg\:py-1{padding-top:.25rem;padding-bottom:.25rem}.lg\:px-1{padding-left:.25rem;padding-right:.25rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:py-3{padding-top:.75rem;padding-bottom:.75rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:py-4{padding-top:1rem;padding-bottom:1rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:py-8{padding-top:2rem;padding-bottom:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.lg\:px-10{padding-left:2.5rem;padding-right:2.5rem}.lg\:py-12{padding-top:3rem;padding-bottom:3rem}.lg\:px-12{padding-left:3rem;padding-right:3rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\:px-20{padding-left:5rem;padding-right:5rem}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:px-24{padding-left:6rem;padding-right:6rem}.lg\:py-32{padding-top:8rem;padding-bottom:8rem}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:py-40{padding-top:10rem;padding-bottom:10rem}.lg\:px-40{padding-left:10rem;padding-right:10rem}.lg\:py-48{padding-top:12rem;padding-bottom:12rem}.lg\:px-48{padding-left:12rem;padding-right:12rem}.lg\:py-56{padding-top:14rem;padding-bottom:14rem}.lg\:px-56{padding-left:14rem;padding-right:14rem}.lg\:py-64{padding-top:16rem;padding-bottom:16rem}.lg\:px-64{padding-left:16rem;padding-right:16rem}.lg\:py-px{padding-top:1px;padding-bottom:1px}.lg\:px-px{padding-left:1px;padding-right:1px}.lg\:pt-0{padding-top:0}.lg\:pr-0{padding-right:0}.lg\:pb-0{padding-bottom:0}.lg\:pl-0{padding-left:0}.lg\:pt-1{padding-top:.25rem}.lg\:pr-1{padding-right:.25rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:pl-1{padding-left:.25rem}.lg\:pt-2{padding-top:.5rem}.lg\:pr-2{padding-right:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:pl-2{padding-left:.5rem}.lg\:pt-3{padding-top:.75rem}.lg\:pr-3{padding-right:.75rem}.lg\:pb-3{padding-bottom:.75rem}.lg\:pl-3{padding-left:.75rem}.lg\:pt-4{padding-top:1rem}.lg\:pr-4{padding-right:1rem}.lg\:pb-4{padding-bottom:1rem}.lg\:pl-4{padding-left:1rem}.lg\:pt-5{padding-top:1.25rem}.lg\:pr-5{padding-right:1.25rem}.lg\:pb-5{padding-bottom:1.25rem}.lg\:pl-5{padding-left:1.25rem}.lg\:pt-6{padding-top:1.5rem}.lg\:pr-6{padding-right:1.5rem}.lg\:pb-6{padding-bottom:1.5rem}.lg\:pl-6{padding-left:1.5rem}.lg\:pt-8{padding-top:2rem}.lg\:pr-8{padding-right:2rem}.lg\:pb-8{padding-bottom:2rem}.lg\:pl-8{padding-left:2rem}.lg\:pt-10{padding-top:2.5rem}.lg\:pr-10{padding-right:2.5rem}.lg\:pb-10{padding-bottom:2.5rem}.lg\:pl-10{padding-left:2.5rem}.lg\:pt-12{padding-top:3rem}.lg\:pr-12{padding-right:3rem}.lg\:pb-12{padding-bottom:3rem}.lg\:pl-12{padding-left:3rem}.lg\:pt-16{padding-top:4rem}.lg\:pr-16{padding-right:4rem}.lg\:pb-16{padding-bottom:4rem}.lg\:pl-16{padding-left:4rem}.lg\:pt-20{padding-top:5rem}.lg\:pr-20{padding-right:5rem}.lg\:pb-20{padding-bottom:5rem}.lg\:pl-20{padding-left:5rem}.lg\:pt-24{padding-top:6rem}.lg\:pr-24{padding-right:6rem}.lg\:pb-24{padding-bottom:6rem}.lg\:pl-24{padding-left:6rem}.lg\:pt-32{padding-top:8rem}.lg\:pr-32{padding-right:8rem}.lg\:pb-32{padding-bottom:8rem}.lg\:pl-32{padding-left:8rem}.lg\:pt-40{padding-top:10rem}.lg\:pr-40{padding-right:10rem}.lg\:pb-40{padding-bottom:10rem}.lg\:pl-40{padding-left:10rem}.lg\:pt-48{padding-top:12rem}.lg\:pr-48{padding-right:12rem}.lg\:pb-48{padding-bottom:12rem}.lg\:pl-48{padding-left:12rem}.lg\:pt-56{padding-top:14rem}.lg\:pr-56{padding-right:14rem}.lg\:pb-56{padding-bottom:14rem}.lg\:pl-56{padding-left:14rem}.lg\:pt-64{padding-top:16rem}.lg\:pr-64{padding-right:16rem}.lg\:pb-64{padding-bottom:16rem}.lg\:pl-64{padding-left:16rem}.lg\:pt-px{padding-top:1px}.lg\:pr-px{padding-right:1px}.lg\:pb-px{padding-bottom:1px}.lg\:pl-px{padding-left:1px}.lg\:pointer-events-none{pointer-events:none}.lg\:pointer-events-auto{pointer-events:auto}.lg\:static{position:static}.lg\:fixed{position:fixed}.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:sticky{position:-webkit-sticky;position:sticky}.lg\:inset-0{top:0;right:0;bottom:0;left:0}.lg\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.lg\:inset-y-0{top:0;bottom:0}.lg\:inset-x-0{right:0;left:0}.lg\:inset-y-auto{top:auto;bottom:auto}.lg\:inset-x-auto{right:auto;left:auto}.lg\:top-0{top:0}.lg\:right-0{right:0}.lg\:bottom-0{bottom:0}.lg\:left-0{left:0}.lg\:top-auto{top:auto}.lg\:right-auto{right:auto}.lg\:bottom-auto{bottom:auto}.lg\:left-auto{left:auto}.lg\:resize-none{resize:none}.lg\:resize-y{resize:vertical}.lg\:resize-x{resize:horizontal}.lg\:resize{resize:both}.lg\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:shadow-none{box-shadow:none}.lg\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:hover\:shadow-none:hover{box-shadow:none}.lg\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:focus\:shadow-none:focus{box-shadow:none}.lg\:fill-current{fill:currentColor}.lg\:stroke-current{stroke:currentColor}.lg\:table-auto{table-layout:auto}.lg\:table-fixed{table-layout:fixed}.lg\:text-left{text-align:left}.lg\:text-center{text-align:center}.lg\:text-right{text-align:right}.lg\:text-justify{text-align:justify}.lg\:text-transparent{color:transparent}.lg\:text-black{color:#000}.lg\:text-white{color:#fff}.lg\:text-gray-100{color:#f7fafc}.lg\:text-gray-200{color:#edf2f7}.lg\:text-gray-300{color:#e2e8f0}.lg\:text-gray-400{color:#cbd5e0}.lg\:text-gray-500{color:#a0aec0}.lg\:text-gray-600{color:#718096}.lg\:text-gray-700{color:#4a5568}.lg\:text-gray-800{color:#2d3748}.lg\:text-gray-900{color:#1a202c}.lg\:text-red-100{color:#fff5f5}.lg\:text-red-200{color:#fed7d7}.lg\:text-red-300{color:#feb2b2}.lg\:text-red-400{color:#fc8181}.lg\:text-red-500{color:#f56565}.lg\:text-red-600{color:#e53e3e}.lg\:text-red-700{color:#c53030}.lg\:text-red-800{color:#9b2c2c}.lg\:text-red-900{color:#742a2a}.lg\:text-orange-100{color:#fffaf0}.lg\:text-orange-200{color:#feebc8}.lg\:text-orange-300{color:#fbd38d}.lg\:text-orange-400{color:#f6ad55}.lg\:text-orange-500{color:#ed8936}.lg\:text-orange-600{color:#dd6b20}.lg\:text-orange-700{color:#c05621}.lg\:text-orange-800{color:#9c4221}.lg\:text-orange-900{color:#7b341e}.lg\:text-yellow-100{color:ivory}.lg\:text-yellow-200{color:#fefcbf}.lg\:text-yellow-300{color:#faf089}.lg\:text-yellow-400{color:#f6e05e}.lg\:text-yellow-500{color:#ecc94b}.lg\:text-yellow-600{color:#d69e2e}.lg\:text-yellow-700{color:#b7791f}.lg\:text-yellow-800{color:#975a16}.lg\:text-yellow-900{color:#744210}.lg\:text-green-100{color:#f0fff4}.lg\:text-green-200{color:#c6f6d5}.lg\:text-green-300{color:#9ae6b4}.lg\:text-green-400{color:#68d391}.lg\:text-green-500{color:#48bb78}.lg\:text-green-600{color:#38a169}.lg\:text-green-700{color:#2f855a}.lg\:text-green-800{color:#276749}.lg\:text-green-900{color:#22543d}.lg\:text-teal-100{color:#e6fffa}.lg\:text-teal-200{color:#b2f5ea}.lg\:text-teal-300{color:#81e6d9}.lg\:text-teal-400{color:#4fd1c5}.lg\:text-teal-500{color:#38b2ac}.lg\:text-teal-600{color:#319795}.lg\:text-teal-700{color:#2c7a7b}.lg\:text-teal-800{color:#285e61}.lg\:text-teal-900{color:#234e52}.lg\:text-blue-100{color:#ebf8ff}.lg\:text-blue-200{color:#bee3f8}.lg\:text-blue-300{color:#90cdf4}.lg\:text-blue-400{color:#63b3ed}.lg\:text-blue-500{color:#4299e1}.lg\:text-blue-600{color:#3182ce}.lg\:text-blue-700{color:#2b6cb0}.lg\:text-blue-800{color:#2c5282}.lg\:text-blue-900{color:#2a4365}.lg\:text-indigo-100{color:#ebf4ff}.lg\:text-indigo-200{color:#c3dafe}.lg\:text-indigo-300{color:#a3bffa}.lg\:text-indigo-400{color:#7f9cf5}.lg\:text-indigo-500{color:#667eea}.lg\:text-indigo-600{color:#5a67d8}.lg\:text-indigo-700{color:#4c51bf}.lg\:text-indigo-800{color:#434190}.lg\:text-indigo-900{color:#3c366b}.lg\:text-purple-100{color:#faf5ff}.lg\:text-purple-200{color:#e9d8fd}.lg\:text-purple-300{color:#d6bcfa}.lg\:text-purple-400{color:#b794f4}.lg\:text-purple-500{color:#9f7aea}.lg\:text-purple-600{color:#805ad5}.lg\:text-purple-700{color:#6b46c1}.lg\:text-purple-800{color:#553c9a}.lg\:text-purple-900{color:#44337a}.lg\:text-pink-100{color:#fff5f7}.lg\:text-pink-200{color:#fed7e2}.lg\:text-pink-300{color:#fbb6ce}.lg\:text-pink-400{color:#f687b3}.lg\:text-pink-500{color:#ed64a6}.lg\:text-pink-600{color:#d53f8c}.lg\:text-pink-700{color:#b83280}.lg\:text-pink-800{color:#97266d}.lg\:text-pink-900{color:#702459}.lg\:hover\:text-transparent:hover{color:transparent}.lg\:hover\:text-black:hover{color:#000}.lg\:hover\:text-white:hover{color:#fff}.lg\:hover\:text-gray-100:hover{color:#f7fafc}.lg\:hover\:text-gray-200:hover{color:#edf2f7}.lg\:hover\:text-gray-300:hover{color:#e2e8f0}.lg\:hover\:text-gray-400:hover{color:#cbd5e0}.lg\:hover\:text-gray-500:hover{color:#a0aec0}.lg\:hover\:text-gray-600:hover{color:#718096}.lg\:hover\:text-gray-700:hover{color:#4a5568}.lg\:hover\:text-gray-800:hover{color:#2d3748}.lg\:hover\:text-gray-900:hover{color:#1a202c}.lg\:hover\:text-red-100:hover{color:#fff5f5}.lg\:hover\:text-red-200:hover{color:#fed7d7}.lg\:hover\:text-red-300:hover{color:#feb2b2}.lg\:hover\:text-red-400:hover{color:#fc8181}.lg\:hover\:text-red-500:hover{color:#f56565}.lg\:hover\:text-red-600:hover{color:#e53e3e}.lg\:hover\:text-red-700:hover{color:#c53030}.lg\:hover\:text-red-800:hover{color:#9b2c2c}.lg\:hover\:text-red-900:hover{color:#742a2a}.lg\:hover\:text-orange-100:hover{color:#fffaf0}.lg\:hover\:text-orange-200:hover{color:#feebc8}.lg\:hover\:text-orange-300:hover{color:#fbd38d}.lg\:hover\:text-orange-400:hover{color:#f6ad55}.lg\:hover\:text-orange-500:hover{color:#ed8936}.lg\:hover\:text-orange-600:hover{color:#dd6b20}.lg\:hover\:text-orange-700:hover{color:#c05621}.lg\:hover\:text-orange-800:hover{color:#9c4221}.lg\:hover\:text-orange-900:hover{color:#7b341e}.lg\:hover\:text-yellow-100:hover{color:ivory}.lg\:hover\:text-yellow-200:hover{color:#fefcbf}.lg\:hover\:text-yellow-300:hover{color:#faf089}.lg\:hover\:text-yellow-400:hover{color:#f6e05e}.lg\:hover\:text-yellow-500:hover{color:#ecc94b}.lg\:hover\:text-yellow-600:hover{color:#d69e2e}.lg\:hover\:text-yellow-700:hover{color:#b7791f}.lg\:hover\:text-yellow-800:hover{color:#975a16}.lg\:hover\:text-yellow-900:hover{color:#744210}.lg\:hover\:text-green-100:hover{color:#f0fff4}.lg\:hover\:text-green-200:hover{color:#c6f6d5}.lg\:hover\:text-green-300:hover{color:#9ae6b4}.lg\:hover\:text-green-400:hover{color:#68d391}.lg\:hover\:text-green-500:hover{color:#48bb78}.lg\:hover\:text-green-600:hover{color:#38a169}.lg\:hover\:text-green-700:hover{color:#2f855a}.lg\:hover\:text-green-800:hover{color:#276749}.lg\:hover\:text-green-900:hover{color:#22543d}.lg\:hover\:text-teal-100:hover{color:#e6fffa}.lg\:hover\:text-teal-200:hover{color:#b2f5ea}.lg\:hover\:text-teal-300:hover{color:#81e6d9}.lg\:hover\:text-teal-400:hover{color:#4fd1c5}.lg\:hover\:text-teal-500:hover{color:#38b2ac}.lg\:hover\:text-teal-600:hover{color:#319795}.lg\:hover\:text-teal-700:hover{color:#2c7a7b}.lg\:hover\:text-teal-800:hover{color:#285e61}.lg\:hover\:text-teal-900:hover{color:#234e52}.lg\:hover\:text-blue-100:hover{color:#ebf8ff}.lg\:hover\:text-blue-200:hover{color:#bee3f8}.lg\:hover\:text-blue-300:hover{color:#90cdf4}.lg\:hover\:text-blue-400:hover{color:#63b3ed}.lg\:hover\:text-blue-500:hover{color:#4299e1}.lg\:hover\:text-blue-600:hover{color:#3182ce}.lg\:hover\:text-blue-700:hover{color:#2b6cb0}.lg\:hover\:text-blue-800:hover{color:#2c5282}.lg\:hover\:text-blue-900:hover{color:#2a4365}.lg\:hover\:text-indigo-100:hover{color:#ebf4ff}.lg\:hover\:text-indigo-200:hover{color:#c3dafe}.lg\:hover\:text-indigo-300:hover{color:#a3bffa}.lg\:hover\:text-indigo-400:hover{color:#7f9cf5}.lg\:hover\:text-indigo-500:hover{color:#667eea}.lg\:hover\:text-indigo-600:hover{color:#5a67d8}.lg\:hover\:text-indigo-700:hover{color:#4c51bf}.lg\:hover\:text-indigo-800:hover{color:#434190}.lg\:hover\:text-indigo-900:hover{color:#3c366b}.lg\:hover\:text-purple-100:hover{color:#faf5ff}.lg\:hover\:text-purple-200:hover{color:#e9d8fd}.lg\:hover\:text-purple-300:hover{color:#d6bcfa}.lg\:hover\:text-purple-400:hover{color:#b794f4}.lg\:hover\:text-purple-500:hover{color:#9f7aea}.lg\:hover\:text-purple-600:hover{color:#805ad5}.lg\:hover\:text-purple-700:hover{color:#6b46c1}.lg\:hover\:text-purple-800:hover{color:#553c9a}.lg\:hover\:text-purple-900:hover{color:#44337a}.lg\:hover\:text-pink-100:hover{color:#fff5f7}.lg\:hover\:text-pink-200:hover{color:#fed7e2}.lg\:hover\:text-pink-300:hover{color:#fbb6ce}.lg\:hover\:text-pink-400:hover{color:#f687b3}.lg\:hover\:text-pink-500:hover{color:#ed64a6}.lg\:hover\:text-pink-600:hover{color:#d53f8c}.lg\:hover\:text-pink-700:hover{color:#b83280}.lg\:hover\:text-pink-800:hover{color:#97266d}.lg\:hover\:text-pink-900:hover{color:#702459}.lg\:focus\:text-transparent:focus{color:transparent}.lg\:focus\:text-black:focus{color:#000}.lg\:focus\:text-white:focus{color:#fff}.lg\:focus\:text-gray-100:focus{color:#f7fafc}.lg\:focus\:text-gray-200:focus{color:#edf2f7}.lg\:focus\:text-gray-300:focus{color:#e2e8f0}.lg\:focus\:text-gray-400:focus{color:#cbd5e0}.lg\:focus\:text-gray-500:focus{color:#a0aec0}.lg\:focus\:text-gray-600:focus{color:#718096}.lg\:focus\:text-gray-700:focus{color:#4a5568}.lg\:focus\:text-gray-800:focus{color:#2d3748}.lg\:focus\:text-gray-900:focus{color:#1a202c}.lg\:focus\:text-red-100:focus{color:#fff5f5}.lg\:focus\:text-red-200:focus{color:#fed7d7}.lg\:focus\:text-red-300:focus{color:#feb2b2}.lg\:focus\:text-red-400:focus{color:#fc8181}.lg\:focus\:text-red-500:focus{color:#f56565}.lg\:focus\:text-red-600:focus{color:#e53e3e}.lg\:focus\:text-red-700:focus{color:#c53030}.lg\:focus\:text-red-800:focus{color:#9b2c2c}.lg\:focus\:text-red-900:focus{color:#742a2a}.lg\:focus\:text-orange-100:focus{color:#fffaf0}.lg\:focus\:text-orange-200:focus{color:#feebc8}.lg\:focus\:text-orange-300:focus{color:#fbd38d}.lg\:focus\:text-orange-400:focus{color:#f6ad55}.lg\:focus\:text-orange-500:focus{color:#ed8936}.lg\:focus\:text-orange-600:focus{color:#dd6b20}.lg\:focus\:text-orange-700:focus{color:#c05621}.lg\:focus\:text-orange-800:focus{color:#9c4221}.lg\:focus\:text-orange-900:focus{color:#7b341e}.lg\:focus\:text-yellow-100:focus{color:ivory}.lg\:focus\:text-yellow-200:focus{color:#fefcbf}.lg\:focus\:text-yellow-300:focus{color:#faf089}.lg\:focus\:text-yellow-400:focus{color:#f6e05e}.lg\:focus\:text-yellow-500:focus{color:#ecc94b}.lg\:focus\:text-yellow-600:focus{color:#d69e2e}.lg\:focus\:text-yellow-700:focus{color:#b7791f}.lg\:focus\:text-yellow-800:focus{color:#975a16}.lg\:focus\:text-yellow-900:focus{color:#744210}.lg\:focus\:text-green-100:focus{color:#f0fff4}.lg\:focus\:text-green-200:focus{color:#c6f6d5}.lg\:focus\:text-green-300:focus{color:#9ae6b4}.lg\:focus\:text-green-400:focus{color:#68d391}.lg\:focus\:text-green-500:focus{color:#48bb78}.lg\:focus\:text-green-600:focus{color:#38a169}.lg\:focus\:text-green-700:focus{color:#2f855a}.lg\:focus\:text-green-800:focus{color:#276749}.lg\:focus\:text-green-900:focus{color:#22543d}.lg\:focus\:text-teal-100:focus{color:#e6fffa}.lg\:focus\:text-teal-200:focus{color:#b2f5ea}.lg\:focus\:text-teal-300:focus{color:#81e6d9}.lg\:focus\:text-teal-400:focus{color:#4fd1c5}.lg\:focus\:text-teal-500:focus{color:#38b2ac}.lg\:focus\:text-teal-600:focus{color:#319795}.lg\:focus\:text-teal-700:focus{color:#2c7a7b}.lg\:focus\:text-teal-800:focus{color:#285e61}.lg\:focus\:text-teal-900:focus{color:#234e52}.lg\:focus\:text-blue-100:focus{color:#ebf8ff}.lg\:focus\:text-blue-200:focus{color:#bee3f8}.lg\:focus\:text-blue-300:focus{color:#90cdf4}.lg\:focus\:text-blue-400:focus{color:#63b3ed}.lg\:focus\:text-blue-500:focus{color:#4299e1}.lg\:focus\:text-blue-600:focus{color:#3182ce}.lg\:focus\:text-blue-700:focus{color:#2b6cb0}.lg\:focus\:text-blue-800:focus{color:#2c5282}.lg\:focus\:text-blue-900:focus{color:#2a4365}.lg\:focus\:text-indigo-100:focus{color:#ebf4ff}.lg\:focus\:text-indigo-200:focus{color:#c3dafe}.lg\:focus\:text-indigo-300:focus{color:#a3bffa}.lg\:focus\:text-indigo-400:focus{color:#7f9cf5}.lg\:focus\:text-indigo-500:focus{color:#667eea}.lg\:focus\:text-indigo-600:focus{color:#5a67d8}.lg\:focus\:text-indigo-700:focus{color:#4c51bf}.lg\:focus\:text-indigo-800:focus{color:#434190}.lg\:focus\:text-indigo-900:focus{color:#3c366b}.lg\:focus\:text-purple-100:focus{color:#faf5ff}.lg\:focus\:text-purple-200:focus{color:#e9d8fd}.lg\:focus\:text-purple-300:focus{color:#d6bcfa}.lg\:focus\:text-purple-400:focus{color:#b794f4}.lg\:focus\:text-purple-500:focus{color:#9f7aea}.lg\:focus\:text-purple-600:focus{color:#805ad5}.lg\:focus\:text-purple-700:focus{color:#6b46c1}.lg\:focus\:text-purple-800:focus{color:#553c9a}.lg\:focus\:text-purple-900:focus{color:#44337a}.lg\:focus\:text-pink-100:focus{color:#fff5f7}.lg\:focus\:text-pink-200:focus{color:#fed7e2}.lg\:focus\:text-pink-300:focus{color:#fbb6ce}.lg\:focus\:text-pink-400:focus{color:#f687b3}.lg\:focus\:text-pink-500:focus{color:#ed64a6}.lg\:focus\:text-pink-600:focus{color:#d53f8c}.lg\:focus\:text-pink-700:focus{color:#b83280}.lg\:focus\:text-pink-800:focus{color:#97266d}.lg\:focus\:text-pink-900:focus{color:#702459}.lg\:text-xs{font-size:.75rem}.lg\:text-sm{font-size:.875rem}.lg\:text-base{font-size:1rem}.lg\:text-lg{font-size:1.125rem}.lg\:text-xl{font-size:1.25rem}.lg\:text-2xl{font-size:1.5rem}.lg\:text-3xl{font-size:1.875rem}.lg\:text-4xl{font-size:2.25rem}.lg\:text-5xl{font-size:3rem}.lg\:text-6xl{font-size:4rem}.lg\:italic{font-style:italic}.lg\:not-italic{font-style:normal}.lg\:uppercase{text-transform:uppercase}.lg\:lowercase{text-transform:lowercase}.lg\:capitalize{text-transform:capitalize}.lg\:normal-case{text-transform:none}.lg\:underline{text-decoration:underline}.lg\:line-through{text-decoration:line-through}.lg\:no-underline{text-decoration:none}.lg\:hover\:underline:hover{text-decoration:underline}.lg\:hover\:line-through:hover{text-decoration:line-through}.lg\:hover\:no-underline:hover{text-decoration:none}.lg\:focus\:underline:focus{text-decoration:underline}.lg\:focus\:line-through:focus{text-decoration:line-through}.lg\:focus\:no-underline:focus{text-decoration:none}.lg\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.lg\:tracking-tighter{letter-spacing:-.05em}.lg\:tracking-tight{letter-spacing:-.025em}.lg\:tracking-normal{letter-spacing:0}.lg\:tracking-wide{letter-spacing:.025em}.lg\:tracking-wider{letter-spacing:.05em}.lg\:tracking-widest{letter-spacing:.1em}.lg\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lg\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.lg\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.lg\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.lg\:align-baseline{vertical-align:baseline}.lg\:align-top{vertical-align:top}.lg\:align-middle{vertical-align:middle}.lg\:align-bottom{vertical-align:bottom}.lg\:align-text-top{vertical-align:text-top}.lg\:align-text-bottom{vertical-align:text-bottom}.lg\:visible{visibility:visible}.lg\:invisible{visibility:hidden}.lg\:whitespace-normal{white-space:normal}.lg\:whitespace-no-wrap{white-space:nowrap}.lg\:whitespace-pre{white-space:pre}.lg\:whitespace-pre-line{white-space:pre-line}.lg\:whitespace-pre-wrap{white-space:pre-wrap}.lg\:break-normal{overflow-wrap:normal;word-break:normal}.lg\:break-words{overflow-wrap:break-word}.lg\:break-all{word-break:break-all}.lg\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lg\:w-0{width:0}.lg\:w-1{width:.25rem}.lg\:w-2{width:.5rem}.lg\:w-3{width:.75rem}.lg\:w-4{width:1rem}.lg\:w-5{width:1.25rem}.lg\:w-6{width:1.5rem}.lg\:w-8{width:2rem}.lg\:w-10{width:2.5rem}.lg\:w-12{width:3rem}.lg\:w-16{width:4rem}.lg\:w-20{width:5rem}.lg\:w-24{width:6rem}.lg\:w-32{width:8rem}.lg\:w-40{width:10rem}.lg\:w-48{width:12rem}.lg\:w-56{width:14rem}.lg\:w-64{width:16rem}.lg\:w-auto{width:auto}.lg\:w-px{width:1px}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.33333%}.lg\:w-2\/3{width:66.66667%}.lg\:w-1\/4{width:25%}.lg\:w-2\/4{width:50%}.lg\:w-3\/4{width:75%}.lg\:w-1\/5{width:20%}.lg\:w-2\/5{width:40%}.lg\:w-3\/5{width:60%}.lg\:w-4\/5{width:80%}.lg\:w-1\/6{width:16.66667%}.lg\:w-2\/6{width:33.33333%}.lg\:w-3\/6{width:50%}.lg\:w-4\/6{width:66.66667%}.lg\:w-5\/6{width:83.33333%}.lg\:w-1\/12{width:8.33333%}.lg\:w-2\/12{width:16.66667%}.lg\:w-3\/12{width:25%}.lg\:w-4\/12{width:33.33333%}.lg\:w-5\/12{width:41.66667%}.lg\:w-6\/12{width:50%}.lg\:w-7\/12{width:58.33333%}.lg\:w-8\/12{width:66.66667%}.lg\:w-9\/12{width:75%}.lg\:w-10\/12{width:83.33333%}.lg\:w-11\/12{width:91.66667%}.lg\:w-full{width:100%}.lg\:w-screen{width:100vw}.lg\:z-0{z-index:0}.lg\:z-10{z-index:10}.lg\:z-20{z-index:20}.lg\:z-30{z-index:30}.lg\:z-40{z-index:40}.lg\:z-50{z-index:50}.lg\:z-auto{z-index:auto}}@media (min-width:1280px){.xl\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.xl\:bg-fixed{background-attachment:fixed}.xl\:bg-local{background-attachment:local}.xl\:bg-scroll{background-attachment:scroll}.xl\:bg-transparent{background-color:transparent}.xl\:bg-black{background-color:#000}.xl\:bg-white{background-color:#fff}.xl\:bg-gray-100{background-color:#f7fafc}.xl\:bg-gray-200{background-color:#edf2f7}.xl\:bg-gray-300{background-color:#e2e8f0}.xl\:bg-gray-400{background-color:#cbd5e0}.xl\:bg-gray-500{background-color:#a0aec0}.xl\:bg-gray-600{background-color:#718096}.xl\:bg-gray-700{background-color:#4a5568}.xl\:bg-gray-800{background-color:#2d3748}.xl\:bg-gray-900{background-color:#1a202c}.xl\:bg-red-100{background-color:#fff5f5}.xl\:bg-red-200{background-color:#fed7d7}.xl\:bg-red-300{background-color:#feb2b2}.xl\:bg-red-400{background-color:#fc8181}.xl\:bg-red-500{background-color:#f56565}.xl\:bg-red-600{background-color:#e53e3e}.xl\:bg-red-700{background-color:#c53030}.xl\:bg-red-800{background-color:#9b2c2c}.xl\:bg-red-900{background-color:#742a2a}.xl\:bg-orange-100{background-color:#fffaf0}.xl\:bg-orange-200{background-color:#feebc8}.xl\:bg-orange-300{background-color:#fbd38d}.xl\:bg-orange-400{background-color:#f6ad55}.xl\:bg-orange-500{background-color:#ed8936}.xl\:bg-orange-600{background-color:#dd6b20}.xl\:bg-orange-700{background-color:#c05621}.xl\:bg-orange-800{background-color:#9c4221}.xl\:bg-orange-900{background-color:#7b341e}.xl\:bg-yellow-100{background-color:ivory}.xl\:bg-yellow-200{background-color:#fefcbf}.xl\:bg-yellow-300{background-color:#faf089}.xl\:bg-yellow-400{background-color:#f6e05e}.xl\:bg-yellow-500{background-color:#ecc94b}.xl\:bg-yellow-600{background-color:#d69e2e}.xl\:bg-yellow-700{background-color:#b7791f}.xl\:bg-yellow-800{background-color:#975a16}.xl\:bg-yellow-900{background-color:#744210}.xl\:bg-green-100{background-color:#f0fff4}.xl\:bg-green-200{background-color:#c6f6d5}.xl\:bg-green-300{background-color:#9ae6b4}.xl\:bg-green-400{background-color:#68d391}.xl\:bg-green-500{background-color:#48bb78}.xl\:bg-green-600{background-color:#38a169}.xl\:bg-green-700{background-color:#2f855a}.xl\:bg-green-800{background-color:#276749}.xl\:bg-green-900{background-color:#22543d}.xl\:bg-teal-100{background-color:#e6fffa}.xl\:bg-teal-200{background-color:#b2f5ea}.xl\:bg-teal-300{background-color:#81e6d9}.xl\:bg-teal-400{background-color:#4fd1c5}.xl\:bg-teal-500{background-color:#38b2ac}.xl\:bg-teal-600{background-color:#319795}.xl\:bg-teal-700{background-color:#2c7a7b}.xl\:bg-teal-800{background-color:#285e61}.xl\:bg-teal-900{background-color:#234e52}.xl\:bg-blue-100{background-color:#ebf8ff}.xl\:bg-blue-200{background-color:#bee3f8}.xl\:bg-blue-300{background-color:#90cdf4}.xl\:bg-blue-400{background-color:#63b3ed}.xl\:bg-blue-500{background-color:#4299e1}.xl\:bg-blue-600{background-color:#3182ce}.xl\:bg-blue-700{background-color:#2b6cb0}.xl\:bg-blue-800{background-color:#2c5282}.xl\:bg-blue-900{background-color:#2a4365}.xl\:bg-indigo-100{background-color:#ebf4ff}.xl\:bg-indigo-200{background-color:#c3dafe}.xl\:bg-indigo-300{background-color:#a3bffa}.xl\:bg-indigo-400{background-color:#7f9cf5}.xl\:bg-indigo-500{background-color:#667eea}.xl\:bg-indigo-600{background-color:#5a67d8}.xl\:bg-indigo-700{background-color:#4c51bf}.xl\:bg-indigo-800{background-color:#434190}.xl\:bg-indigo-900{background-color:#3c366b}.xl\:bg-purple-100{background-color:#faf5ff}.xl\:bg-purple-200{background-color:#e9d8fd}.xl\:bg-purple-300{background-color:#d6bcfa}.xl\:bg-purple-400{background-color:#b794f4}.xl\:bg-purple-500{background-color:#9f7aea}.xl\:bg-purple-600{background-color:#805ad5}.xl\:bg-purple-700{background-color:#6b46c1}.xl\:bg-purple-800{background-color:#553c9a}.xl\:bg-purple-900{background-color:#44337a}.xl\:bg-pink-100{background-color:#fff5f7}.xl\:bg-pink-200{background-color:#fed7e2}.xl\:bg-pink-300{background-color:#fbb6ce}.xl\:bg-pink-400{background-color:#f687b3}.xl\:bg-pink-500{background-color:#ed64a6}.xl\:bg-pink-600{background-color:#d53f8c}.xl\:bg-pink-700{background-color:#b83280}.xl\:bg-pink-800{background-color:#97266d}.xl\:bg-pink-900{background-color:#702459}.xl\:hover\:bg-transparent:hover{background-color:transparent}.xl\:hover\:bg-black:hover{background-color:#000}.xl\:hover\:bg-white:hover{background-color:#fff}.xl\:hover\:bg-gray-100:hover{background-color:#f7fafc}.xl\:hover\:bg-gray-200:hover{background-color:#edf2f7}.xl\:hover\:bg-gray-300:hover{background-color:#e2e8f0}.xl\:hover\:bg-gray-400:hover{background-color:#cbd5e0}.xl\:hover\:bg-gray-500:hover{background-color:#a0aec0}.xl\:hover\:bg-gray-600:hover{background-color:#718096}.xl\:hover\:bg-gray-700:hover{background-color:#4a5568}.xl\:hover\:bg-gray-800:hover{background-color:#2d3748}.xl\:hover\:bg-gray-900:hover{background-color:#1a202c}.xl\:hover\:bg-red-100:hover{background-color:#fff5f5}.xl\:hover\:bg-red-200:hover{background-color:#fed7d7}.xl\:hover\:bg-red-300:hover{background-color:#feb2b2}.xl\:hover\:bg-red-400:hover{background-color:#fc8181}.xl\:hover\:bg-red-500:hover{background-color:#f56565}.xl\:hover\:bg-red-600:hover{background-color:#e53e3e}.xl\:hover\:bg-red-700:hover{background-color:#c53030}.xl\:hover\:bg-red-800:hover{background-color:#9b2c2c}.xl\:hover\:bg-red-900:hover{background-color:#742a2a}.xl\:hover\:bg-orange-100:hover{background-color:#fffaf0}.xl\:hover\:bg-orange-200:hover{background-color:#feebc8}.xl\:hover\:bg-orange-300:hover{background-color:#fbd38d}.xl\:hover\:bg-orange-400:hover{background-color:#f6ad55}.xl\:hover\:bg-orange-500:hover{background-color:#ed8936}.xl\:hover\:bg-orange-600:hover{background-color:#dd6b20}.xl\:hover\:bg-orange-700:hover{background-color:#c05621}.xl\:hover\:bg-orange-800:hover{background-color:#9c4221}.xl\:hover\:bg-orange-900:hover{background-color:#7b341e}.xl\:hover\:bg-yellow-100:hover{background-color:ivory}.xl\:hover\:bg-yellow-200:hover{background-color:#fefcbf}.xl\:hover\:bg-yellow-300:hover{background-color:#faf089}.xl\:hover\:bg-yellow-400:hover{background-color:#f6e05e}.xl\:hover\:bg-yellow-500:hover{background-color:#ecc94b}.xl\:hover\:bg-yellow-600:hover{background-color:#d69e2e}.xl\:hover\:bg-yellow-700:hover{background-color:#b7791f}.xl\:hover\:bg-yellow-800:hover{background-color:#975a16}.xl\:hover\:bg-yellow-900:hover{background-color:#744210}.xl\:hover\:bg-green-100:hover{background-color:#f0fff4}.xl\:hover\:bg-green-200:hover{background-color:#c6f6d5}.xl\:hover\:bg-green-300:hover{background-color:#9ae6b4}.xl\:hover\:bg-green-400:hover{background-color:#68d391}.xl\:hover\:bg-green-500:hover{background-color:#48bb78}.xl\:hover\:bg-green-600:hover{background-color:#38a169}.xl\:hover\:bg-green-700:hover{background-color:#2f855a}.xl\:hover\:bg-green-800:hover{background-color:#276749}.xl\:hover\:bg-green-900:hover{background-color:#22543d}.xl\:hover\:bg-teal-100:hover{background-color:#e6fffa}.xl\:hover\:bg-teal-200:hover{background-color:#b2f5ea}.xl\:hover\:bg-teal-300:hover{background-color:#81e6d9}.xl\:hover\:bg-teal-400:hover{background-color:#4fd1c5}.xl\:hover\:bg-teal-500:hover{background-color:#38b2ac}.xl\:hover\:bg-teal-600:hover{background-color:#319795}.xl\:hover\:bg-teal-700:hover{background-color:#2c7a7b}.xl\:hover\:bg-teal-800:hover{background-color:#285e61}.xl\:hover\:bg-teal-900:hover{background-color:#234e52}.xl\:hover\:bg-blue-100:hover{background-color:#ebf8ff}.xl\:hover\:bg-blue-200:hover{background-color:#bee3f8}.xl\:hover\:bg-blue-300:hover{background-color:#90cdf4}.xl\:hover\:bg-blue-400:hover{background-color:#63b3ed}.xl\:hover\:bg-blue-500:hover{background-color:#4299e1}.xl\:hover\:bg-blue-600:hover{background-color:#3182ce}.xl\:hover\:bg-blue-700:hover{background-color:#2b6cb0}.xl\:hover\:bg-blue-800:hover{background-color:#2c5282}.xl\:hover\:bg-blue-900:hover{background-color:#2a4365}.xl\:hover\:bg-indigo-100:hover{background-color:#ebf4ff}.xl\:hover\:bg-indigo-200:hover{background-color:#c3dafe}.xl\:hover\:bg-indigo-300:hover{background-color:#a3bffa}.xl\:hover\:bg-indigo-400:hover{background-color:#7f9cf5}.xl\:hover\:bg-indigo-500:hover{background-color:#667eea}.xl\:hover\:bg-indigo-600:hover{background-color:#5a67d8}.xl\:hover\:bg-indigo-700:hover{background-color:#4c51bf}.xl\:hover\:bg-indigo-800:hover{background-color:#434190}.xl\:hover\:bg-indigo-900:hover{background-color:#3c366b}.xl\:hover\:bg-purple-100:hover{background-color:#faf5ff}.xl\:hover\:bg-purple-200:hover{background-color:#e9d8fd}.xl\:hover\:bg-purple-300:hover{background-color:#d6bcfa}.xl\:hover\:bg-purple-400:hover{background-color:#b794f4}.xl\:hover\:bg-purple-500:hover{background-color:#9f7aea}.xl\:hover\:bg-purple-600:hover{background-color:#805ad5}.xl\:hover\:bg-purple-700:hover{background-color:#6b46c1}.xl\:hover\:bg-purple-800:hover{background-color:#553c9a}.xl\:hover\:bg-purple-900:hover{background-color:#44337a}.xl\:hover\:bg-pink-100:hover{background-color:#fff5f7}.xl\:hover\:bg-pink-200:hover{background-color:#fed7e2}.xl\:hover\:bg-pink-300:hover{background-color:#fbb6ce}.xl\:hover\:bg-pink-400:hover{background-color:#f687b3}.xl\:hover\:bg-pink-500:hover{background-color:#ed64a6}.xl\:hover\:bg-pink-600:hover{background-color:#d53f8c}.xl\:hover\:bg-pink-700:hover{background-color:#b83280}.xl\:hover\:bg-pink-800:hover{background-color:#97266d}.xl\:hover\:bg-pink-900:hover{background-color:#702459}.xl\:focus\:bg-transparent:focus{background-color:transparent}.xl\:focus\:bg-black:focus{background-color:#000}.xl\:focus\:bg-white:focus{background-color:#fff}.xl\:focus\:bg-gray-100:focus{background-color:#f7fafc}.xl\:focus\:bg-gray-200:focus{background-color:#edf2f7}.xl\:focus\:bg-gray-300:focus{background-color:#e2e8f0}.xl\:focus\:bg-gray-400:focus{background-color:#cbd5e0}.xl\:focus\:bg-gray-500:focus{background-color:#a0aec0}.xl\:focus\:bg-gray-600:focus{background-color:#718096}.xl\:focus\:bg-gray-700:focus{background-color:#4a5568}.xl\:focus\:bg-gray-800:focus{background-color:#2d3748}.xl\:focus\:bg-gray-900:focus{background-color:#1a202c}.xl\:focus\:bg-red-100:focus{background-color:#fff5f5}.xl\:focus\:bg-red-200:focus{background-color:#fed7d7}.xl\:focus\:bg-red-300:focus{background-color:#feb2b2}.xl\:focus\:bg-red-400:focus{background-color:#fc8181}.xl\:focus\:bg-red-500:focus{background-color:#f56565}.xl\:focus\:bg-red-600:focus{background-color:#e53e3e}.xl\:focus\:bg-red-700:focus{background-color:#c53030}.xl\:focus\:bg-red-800:focus{background-color:#9b2c2c}.xl\:focus\:bg-red-900:focus{background-color:#742a2a}.xl\:focus\:bg-orange-100:focus{background-color:#fffaf0}.xl\:focus\:bg-orange-200:focus{background-color:#feebc8}.xl\:focus\:bg-orange-300:focus{background-color:#fbd38d}.xl\:focus\:bg-orange-400:focus{background-color:#f6ad55}.xl\:focus\:bg-orange-500:focus{background-color:#ed8936}.xl\:focus\:bg-orange-600:focus{background-color:#dd6b20}.xl\:focus\:bg-orange-700:focus{background-color:#c05621}.xl\:focus\:bg-orange-800:focus{background-color:#9c4221}.xl\:focus\:bg-orange-900:focus{background-color:#7b341e}.xl\:focus\:bg-yellow-100:focus{background-color:ivory}.xl\:focus\:bg-yellow-200:focus{background-color:#fefcbf}.xl\:focus\:bg-yellow-300:focus{background-color:#faf089}.xl\:focus\:bg-yellow-400:focus{background-color:#f6e05e}.xl\:focus\:bg-yellow-500:focus{background-color:#ecc94b}.xl\:focus\:bg-yellow-600:focus{background-color:#d69e2e}.xl\:focus\:bg-yellow-700:focus{background-color:#b7791f}.xl\:focus\:bg-yellow-800:focus{background-color:#975a16}.xl\:focus\:bg-yellow-900:focus{background-color:#744210}.xl\:focus\:bg-green-100:focus{background-color:#f0fff4}.xl\:focus\:bg-green-200:focus{background-color:#c6f6d5}.xl\:focus\:bg-green-300:focus{background-color:#9ae6b4}.xl\:focus\:bg-green-400:focus{background-color:#68d391}.xl\:focus\:bg-green-500:focus{background-color:#48bb78}.xl\:focus\:bg-green-600:focus{background-color:#38a169}.xl\:focus\:bg-green-700:focus{background-color:#2f855a}.xl\:focus\:bg-green-800:focus{background-color:#276749}.xl\:focus\:bg-green-900:focus{background-color:#22543d}.xl\:focus\:bg-teal-100:focus{background-color:#e6fffa}.xl\:focus\:bg-teal-200:focus{background-color:#b2f5ea}.xl\:focus\:bg-teal-300:focus{background-color:#81e6d9}.xl\:focus\:bg-teal-400:focus{background-color:#4fd1c5}.xl\:focus\:bg-teal-500:focus{background-color:#38b2ac}.xl\:focus\:bg-teal-600:focus{background-color:#319795}.xl\:focus\:bg-teal-700:focus{background-color:#2c7a7b}.xl\:focus\:bg-teal-800:focus{background-color:#285e61}.xl\:focus\:bg-teal-900:focus{background-color:#234e52}.xl\:focus\:bg-blue-100:focus{background-color:#ebf8ff}.xl\:focus\:bg-blue-200:focus{background-color:#bee3f8}.xl\:focus\:bg-blue-300:focus{background-color:#90cdf4}.xl\:focus\:bg-blue-400:focus{background-color:#63b3ed}.xl\:focus\:bg-blue-500:focus{background-color:#4299e1}.xl\:focus\:bg-blue-600:focus{background-color:#3182ce}.xl\:focus\:bg-blue-700:focus{background-color:#2b6cb0}.xl\:focus\:bg-blue-800:focus{background-color:#2c5282}.xl\:focus\:bg-blue-900:focus{background-color:#2a4365}.xl\:focus\:bg-indigo-100:focus{background-color:#ebf4ff}.xl\:focus\:bg-indigo-200:focus{background-color:#c3dafe}.xl\:focus\:bg-indigo-300:focus{background-color:#a3bffa}.xl\:focus\:bg-indigo-400:focus{background-color:#7f9cf5}.xl\:focus\:bg-indigo-500:focus{background-color:#667eea}.xl\:focus\:bg-indigo-600:focus{background-color:#5a67d8}.xl\:focus\:bg-indigo-700:focus{background-color:#4c51bf}.xl\:focus\:bg-indigo-800:focus{background-color:#434190}.xl\:focus\:bg-indigo-900:focus{background-color:#3c366b}.xl\:focus\:bg-purple-100:focus{background-color:#faf5ff}.xl\:focus\:bg-purple-200:focus{background-color:#e9d8fd}.xl\:focus\:bg-purple-300:focus{background-color:#d6bcfa}.xl\:focus\:bg-purple-400:focus{background-color:#b794f4}.xl\:focus\:bg-purple-500:focus{background-color:#9f7aea}.xl\:focus\:bg-purple-600:focus{background-color:#805ad5}.xl\:focus\:bg-purple-700:focus{background-color:#6b46c1}.xl\:focus\:bg-purple-800:focus{background-color:#553c9a}.xl\:focus\:bg-purple-900:focus{background-color:#44337a}.xl\:focus\:bg-pink-100:focus{background-color:#fff5f7}.xl\:focus\:bg-pink-200:focus{background-color:#fed7e2}.xl\:focus\:bg-pink-300:focus{background-color:#fbb6ce}.xl\:focus\:bg-pink-400:focus{background-color:#f687b3}.xl\:focus\:bg-pink-500:focus{background-color:#ed64a6}.xl\:focus\:bg-pink-600:focus{background-color:#d53f8c}.xl\:focus\:bg-pink-700:focus{background-color:#b83280}.xl\:focus\:bg-pink-800:focus{background-color:#97266d}.xl\:focus\:bg-pink-900:focus{background-color:#702459}.xl\:bg-bottom{background-position:bottom}.xl\:bg-center{background-position:center}.xl\:bg-left{background-position:left}.xl\:bg-left-bottom{background-position:left bottom}.xl\:bg-left-top{background-position:left top}.xl\:bg-right{background-position:right}.xl\:bg-right-bottom{background-position:right bottom}.xl\:bg-right-top{background-position:right top}.xl\:bg-top{background-position:top}.xl\:bg-repeat{background-repeat:repeat}.xl\:bg-no-repeat{background-repeat:no-repeat}.xl\:bg-repeat-x{background-repeat:repeat-x}.xl\:bg-repeat-y{background-repeat:repeat-y}.xl\:bg-repeat-round{background-repeat:round}.xl\:bg-repeat-space{background-repeat:space}.xl\:bg-auto{background-size:auto}.xl\:bg-cover{background-size:cover}.xl\:bg-contain{background-size:contain}.xl\:border-collapse{border-collapse:collapse}.xl\:border-separate{border-collapse:separate}.xl\:border-transparent{border-color:transparent}.xl\:border-black{border-color:#000}.xl\:border-white{border-color:#fff}.xl\:border-gray-100{border-color:#f7fafc}.xl\:border-gray-200{border-color:#edf2f7}.xl\:border-gray-300{border-color:#e2e8f0}.xl\:border-gray-400{border-color:#cbd5e0}.xl\:border-gray-500{border-color:#a0aec0}.xl\:border-gray-600{border-color:#718096}.xl\:border-gray-700{border-color:#4a5568}.xl\:border-gray-800{border-color:#2d3748}.xl\:border-gray-900{border-color:#1a202c}.xl\:border-red-100{border-color:#fff5f5}.xl\:border-red-200{border-color:#fed7d7}.xl\:border-red-300{border-color:#feb2b2}.xl\:border-red-400{border-color:#fc8181}.xl\:border-red-500{border-color:#f56565}.xl\:border-red-600{border-color:#e53e3e}.xl\:border-red-700{border-color:#c53030}.xl\:border-red-800{border-color:#9b2c2c}.xl\:border-red-900{border-color:#742a2a}.xl\:border-orange-100{border-color:#fffaf0}.xl\:border-orange-200{border-color:#feebc8}.xl\:border-orange-300{border-color:#fbd38d}.xl\:border-orange-400{border-color:#f6ad55}.xl\:border-orange-500{border-color:#ed8936}.xl\:border-orange-600{border-color:#dd6b20}.xl\:border-orange-700{border-color:#c05621}.xl\:border-orange-800{border-color:#9c4221}.xl\:border-orange-900{border-color:#7b341e}.xl\:border-yellow-100{border-color:ivory}.xl\:border-yellow-200{border-color:#fefcbf}.xl\:border-yellow-300{border-color:#faf089}.xl\:border-yellow-400{border-color:#f6e05e}.xl\:border-yellow-500{border-color:#ecc94b}.xl\:border-yellow-600{border-color:#d69e2e}.xl\:border-yellow-700{border-color:#b7791f}.xl\:border-yellow-800{border-color:#975a16}.xl\:border-yellow-900{border-color:#744210}.xl\:border-green-100{border-color:#f0fff4}.xl\:border-green-200{border-color:#c6f6d5}.xl\:border-green-300{border-color:#9ae6b4}.xl\:border-green-400{border-color:#68d391}.xl\:border-green-500{border-color:#48bb78}.xl\:border-green-600{border-color:#38a169}.xl\:border-green-700{border-color:#2f855a}.xl\:border-green-800{border-color:#276749}.xl\:border-green-900{border-color:#22543d}.xl\:border-teal-100{border-color:#e6fffa}.xl\:border-teal-200{border-color:#b2f5ea}.xl\:border-teal-300{border-color:#81e6d9}.xl\:border-teal-400{border-color:#4fd1c5}.xl\:border-teal-500{border-color:#38b2ac}.xl\:border-teal-600{border-color:#319795}.xl\:border-teal-700{border-color:#2c7a7b}.xl\:border-teal-800{border-color:#285e61}.xl\:border-teal-900{border-color:#234e52}.xl\:border-blue-100{border-color:#ebf8ff}.xl\:border-blue-200{border-color:#bee3f8}.xl\:border-blue-300{border-color:#90cdf4}.xl\:border-blue-400{border-color:#63b3ed}.xl\:border-blue-500{border-color:#4299e1}.xl\:border-blue-600{border-color:#3182ce}.xl\:border-blue-700{border-color:#2b6cb0}.xl\:border-blue-800{border-color:#2c5282}.xl\:border-blue-900{border-color:#2a4365}.xl\:border-indigo-100{border-color:#ebf4ff}.xl\:border-indigo-200{border-color:#c3dafe}.xl\:border-indigo-300{border-color:#a3bffa}.xl\:border-indigo-400{border-color:#7f9cf5}.xl\:border-indigo-500{border-color:#667eea}.xl\:border-indigo-600{border-color:#5a67d8}.xl\:border-indigo-700{border-color:#4c51bf}.xl\:border-indigo-800{border-color:#434190}.xl\:border-indigo-900{border-color:#3c366b}.xl\:border-purple-100{border-color:#faf5ff}.xl\:border-purple-200{border-color:#e9d8fd}.xl\:border-purple-300{border-color:#d6bcfa}.xl\:border-purple-400{border-color:#b794f4}.xl\:border-purple-500{border-color:#9f7aea}.xl\:border-purple-600{border-color:#805ad5}.xl\:border-purple-700{border-color:#6b46c1}.xl\:border-purple-800{border-color:#553c9a}.xl\:border-purple-900{border-color:#44337a}.xl\:border-pink-100{border-color:#fff5f7}.xl\:border-pink-200{border-color:#fed7e2}.xl\:border-pink-300{border-color:#fbb6ce}.xl\:border-pink-400{border-color:#f687b3}.xl\:border-pink-500{border-color:#ed64a6}.xl\:border-pink-600{border-color:#d53f8c}.xl\:border-pink-700{border-color:#b83280}.xl\:border-pink-800{border-color:#97266d}.xl\:border-pink-900{border-color:#702459}.xl\:hover\:border-transparent:hover{border-color:transparent}.xl\:hover\:border-black:hover{border-color:#000}.xl\:hover\:border-white:hover{border-color:#fff}.xl\:hover\:border-gray-100:hover{border-color:#f7fafc}.xl\:hover\:border-gray-200:hover{border-color:#edf2f7}.xl\:hover\:border-gray-300:hover{border-color:#e2e8f0}.xl\:hover\:border-gray-400:hover{border-color:#cbd5e0}.xl\:hover\:border-gray-500:hover{border-color:#a0aec0}.xl\:hover\:border-gray-600:hover{border-color:#718096}.xl\:hover\:border-gray-700:hover{border-color:#4a5568}.xl\:hover\:border-gray-800:hover{border-color:#2d3748}.xl\:hover\:border-gray-900:hover{border-color:#1a202c}.xl\:hover\:border-red-100:hover{border-color:#fff5f5}.xl\:hover\:border-red-200:hover{border-color:#fed7d7}.xl\:hover\:border-red-300:hover{border-color:#feb2b2}.xl\:hover\:border-red-400:hover{border-color:#fc8181}.xl\:hover\:border-red-500:hover{border-color:#f56565}.xl\:hover\:border-red-600:hover{border-color:#e53e3e}.xl\:hover\:border-red-700:hover{border-color:#c53030}.xl\:hover\:border-red-800:hover{border-color:#9b2c2c}.xl\:hover\:border-red-900:hover{border-color:#742a2a}.xl\:hover\:border-orange-100:hover{border-color:#fffaf0}.xl\:hover\:border-orange-200:hover{border-color:#feebc8}.xl\:hover\:border-orange-300:hover{border-color:#fbd38d}.xl\:hover\:border-orange-400:hover{border-color:#f6ad55}.xl\:hover\:border-orange-500:hover{border-color:#ed8936}.xl\:hover\:border-orange-600:hover{border-color:#dd6b20}.xl\:hover\:border-orange-700:hover{border-color:#c05621}.xl\:hover\:border-orange-800:hover{border-color:#9c4221}.xl\:hover\:border-orange-900:hover{border-color:#7b341e}.xl\:hover\:border-yellow-100:hover{border-color:ivory}.xl\:hover\:border-yellow-200:hover{border-color:#fefcbf}.xl\:hover\:border-yellow-300:hover{border-color:#faf089}.xl\:hover\:border-yellow-400:hover{border-color:#f6e05e}.xl\:hover\:border-yellow-500:hover{border-color:#ecc94b}.xl\:hover\:border-yellow-600:hover{border-color:#d69e2e}.xl\:hover\:border-yellow-700:hover{border-color:#b7791f}.xl\:hover\:border-yellow-800:hover{border-color:#975a16}.xl\:hover\:border-yellow-900:hover{border-color:#744210}.xl\:hover\:border-green-100:hover{border-color:#f0fff4}.xl\:hover\:border-green-200:hover{border-color:#c6f6d5}.xl\:hover\:border-green-300:hover{border-color:#9ae6b4}.xl\:hover\:border-green-400:hover{border-color:#68d391}.xl\:hover\:border-green-500:hover{border-color:#48bb78}.xl\:hover\:border-green-600:hover{border-color:#38a169}.xl\:hover\:border-green-700:hover{border-color:#2f855a}.xl\:hover\:border-green-800:hover{border-color:#276749}.xl\:hover\:border-green-900:hover{border-color:#22543d}.xl\:hover\:border-teal-100:hover{border-color:#e6fffa}.xl\:hover\:border-teal-200:hover{border-color:#b2f5ea}.xl\:hover\:border-teal-300:hover{border-color:#81e6d9}.xl\:hover\:border-teal-400:hover{border-color:#4fd1c5}.xl\:hover\:border-teal-500:hover{border-color:#38b2ac}.xl\:hover\:border-teal-600:hover{border-color:#319795}.xl\:hover\:border-teal-700:hover{border-color:#2c7a7b}.xl\:hover\:border-teal-800:hover{border-color:#285e61}.xl\:hover\:border-teal-900:hover{border-color:#234e52}.xl\:hover\:border-blue-100:hover{border-color:#ebf8ff}.xl\:hover\:border-blue-200:hover{border-color:#bee3f8}.xl\:hover\:border-blue-300:hover{border-color:#90cdf4}.xl\:hover\:border-blue-400:hover{border-color:#63b3ed}.xl\:hover\:border-blue-500:hover{border-color:#4299e1}.xl\:hover\:border-blue-600:hover{border-color:#3182ce}.xl\:hover\:border-blue-700:hover{border-color:#2b6cb0}.xl\:hover\:border-blue-800:hover{border-color:#2c5282}.xl\:hover\:border-blue-900:hover{border-color:#2a4365}.xl\:hover\:border-indigo-100:hover{border-color:#ebf4ff}.xl\:hover\:border-indigo-200:hover{border-color:#c3dafe}.xl\:hover\:border-indigo-300:hover{border-color:#a3bffa}.xl\:hover\:border-indigo-400:hover{border-color:#7f9cf5}.xl\:hover\:border-indigo-500:hover{border-color:#667eea}.xl\:hover\:border-indigo-600:hover{border-color:#5a67d8}.xl\:hover\:border-indigo-700:hover{border-color:#4c51bf}.xl\:hover\:border-indigo-800:hover{border-color:#434190}.xl\:hover\:border-indigo-900:hover{border-color:#3c366b}.xl\:hover\:border-purple-100:hover{border-color:#faf5ff}.xl\:hover\:border-purple-200:hover{border-color:#e9d8fd}.xl\:hover\:border-purple-300:hover{border-color:#d6bcfa}.xl\:hover\:border-purple-400:hover{border-color:#b794f4}.xl\:hover\:border-purple-500:hover{border-color:#9f7aea}.xl\:hover\:border-purple-600:hover{border-color:#805ad5}.xl\:hover\:border-purple-700:hover{border-color:#6b46c1}.xl\:hover\:border-purple-800:hover{border-color:#553c9a}.xl\:hover\:border-purple-900:hover{border-color:#44337a}.xl\:hover\:border-pink-100:hover{border-color:#fff5f7}.xl\:hover\:border-pink-200:hover{border-color:#fed7e2}.xl\:hover\:border-pink-300:hover{border-color:#fbb6ce}.xl\:hover\:border-pink-400:hover{border-color:#f687b3}.xl\:hover\:border-pink-500:hover{border-color:#ed64a6}.xl\:hover\:border-pink-600:hover{border-color:#d53f8c}.xl\:hover\:border-pink-700:hover{border-color:#b83280}.xl\:hover\:border-pink-800:hover{border-color:#97266d}.xl\:hover\:border-pink-900:hover{border-color:#702459}.xl\:focus\:border-transparent:focus{border-color:transparent}.xl\:focus\:border-black:focus{border-color:#000}.xl\:focus\:border-white:focus{border-color:#fff}.xl\:focus\:border-gray-100:focus{border-color:#f7fafc}.xl\:focus\:border-gray-200:focus{border-color:#edf2f7}.xl\:focus\:border-gray-300:focus{border-color:#e2e8f0}.xl\:focus\:border-gray-400:focus{border-color:#cbd5e0}.xl\:focus\:border-gray-500:focus{border-color:#a0aec0}.xl\:focus\:border-gray-600:focus{border-color:#718096}.xl\:focus\:border-gray-700:focus{border-color:#4a5568}.xl\:focus\:border-gray-800:focus{border-color:#2d3748}.xl\:focus\:border-gray-900:focus{border-color:#1a202c}.xl\:focus\:border-red-100:focus{border-color:#fff5f5}.xl\:focus\:border-red-200:focus{border-color:#fed7d7}.xl\:focus\:border-red-300:focus{border-color:#feb2b2}.xl\:focus\:border-red-400:focus{border-color:#fc8181}.xl\:focus\:border-red-500:focus{border-color:#f56565}.xl\:focus\:border-red-600:focus{border-color:#e53e3e}.xl\:focus\:border-red-700:focus{border-color:#c53030}.xl\:focus\:border-red-800:focus{border-color:#9b2c2c}.xl\:focus\:border-red-900:focus{border-color:#742a2a}.xl\:focus\:border-orange-100:focus{border-color:#fffaf0}.xl\:focus\:border-orange-200:focus{border-color:#feebc8}.xl\:focus\:border-orange-300:focus{border-color:#fbd38d}.xl\:focus\:border-orange-400:focus{border-color:#f6ad55}.xl\:focus\:border-orange-500:focus{border-color:#ed8936}.xl\:focus\:border-orange-600:focus{border-color:#dd6b20}.xl\:focus\:border-orange-700:focus{border-color:#c05621}.xl\:focus\:border-orange-800:focus{border-color:#9c4221}.xl\:focus\:border-orange-900:focus{border-color:#7b341e}.xl\:focus\:border-yellow-100:focus{border-color:ivory}.xl\:focus\:border-yellow-200:focus{border-color:#fefcbf}.xl\:focus\:border-yellow-300:focus{border-color:#faf089}.xl\:focus\:border-yellow-400:focus{border-color:#f6e05e}.xl\:focus\:border-yellow-500:focus{border-color:#ecc94b}.xl\:focus\:border-yellow-600:focus{border-color:#d69e2e}.xl\:focus\:border-yellow-700:focus{border-color:#b7791f}.xl\:focus\:border-yellow-800:focus{border-color:#975a16}.xl\:focus\:border-yellow-900:focus{border-color:#744210}.xl\:focus\:border-green-100:focus{border-color:#f0fff4}.xl\:focus\:border-green-200:focus{border-color:#c6f6d5}.xl\:focus\:border-green-300:focus{border-color:#9ae6b4}.xl\:focus\:border-green-400:focus{border-color:#68d391}.xl\:focus\:border-green-500:focus{border-color:#48bb78}.xl\:focus\:border-green-600:focus{border-color:#38a169}.xl\:focus\:border-green-700:focus{border-color:#2f855a}.xl\:focus\:border-green-800:focus{border-color:#276749}.xl\:focus\:border-green-900:focus{border-color:#22543d}.xl\:focus\:border-teal-100:focus{border-color:#e6fffa}.xl\:focus\:border-teal-200:focus{border-color:#b2f5ea}.xl\:focus\:border-teal-300:focus{border-color:#81e6d9}.xl\:focus\:border-teal-400:focus{border-color:#4fd1c5}.xl\:focus\:border-teal-500:focus{border-color:#38b2ac}.xl\:focus\:border-teal-600:focus{border-color:#319795}.xl\:focus\:border-teal-700:focus{border-color:#2c7a7b}.xl\:focus\:border-teal-800:focus{border-color:#285e61}.xl\:focus\:border-teal-900:focus{border-color:#234e52}.xl\:focus\:border-blue-100:focus{border-color:#ebf8ff}.xl\:focus\:border-blue-200:focus{border-color:#bee3f8}.xl\:focus\:border-blue-300:focus{border-color:#90cdf4}.xl\:focus\:border-blue-400:focus{border-color:#63b3ed}.xl\:focus\:border-blue-500:focus{border-color:#4299e1}.xl\:focus\:border-blue-600:focus{border-color:#3182ce}.xl\:focus\:border-blue-700:focus{border-color:#2b6cb0}.xl\:focus\:border-blue-800:focus{border-color:#2c5282}.xl\:focus\:border-blue-900:focus{border-color:#2a4365}.xl\:focus\:border-indigo-100:focus{border-color:#ebf4ff}.xl\:focus\:border-indigo-200:focus{border-color:#c3dafe}.xl\:focus\:border-indigo-300:focus{border-color:#a3bffa}.xl\:focus\:border-indigo-400:focus{border-color:#7f9cf5}.xl\:focus\:border-indigo-500:focus{border-color:#667eea}.xl\:focus\:border-indigo-600:focus{border-color:#5a67d8}.xl\:focus\:border-indigo-700:focus{border-color:#4c51bf}.xl\:focus\:border-indigo-800:focus{border-color:#434190}.xl\:focus\:border-indigo-900:focus{border-color:#3c366b}.xl\:focus\:border-purple-100:focus{border-color:#faf5ff}.xl\:focus\:border-purple-200:focus{border-color:#e9d8fd}.xl\:focus\:border-purple-300:focus{border-color:#d6bcfa}.xl\:focus\:border-purple-400:focus{border-color:#b794f4}.xl\:focus\:border-purple-500:focus{border-color:#9f7aea}.xl\:focus\:border-purple-600:focus{border-color:#805ad5}.xl\:focus\:border-purple-700:focus{border-color:#6b46c1}.xl\:focus\:border-purple-800:focus{border-color:#553c9a}.xl\:focus\:border-purple-900:focus{border-color:#44337a}.xl\:focus\:border-pink-100:focus{border-color:#fff5f7}.xl\:focus\:border-pink-200:focus{border-color:#fed7e2}.xl\:focus\:border-pink-300:focus{border-color:#fbb6ce}.xl\:focus\:border-pink-400:focus{border-color:#f687b3}.xl\:focus\:border-pink-500:focus{border-color:#ed64a6}.xl\:focus\:border-pink-600:focus{border-color:#d53f8c}.xl\:focus\:border-pink-700:focus{border-color:#b83280}.xl\:focus\:border-pink-800:focus{border-color:#97266d}.xl\:focus\:border-pink-900:focus{border-color:#702459}.xl\:rounded-none{border-radius:0}.xl\:rounded-sm{border-radius:.125rem}.xl\:rounded{border-radius:.25rem}.xl\:rounded-lg{border-radius:.5rem}.xl\:rounded-full{border-radius:9999px}.xl\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.xl\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.xl\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.xl\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.xl\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.xl\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.xl\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.xl\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.xl\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.xl\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.xl\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.xl\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.xl\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.xl\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.xl\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.xl\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.xl\:rounded-tl-none{border-top-left-radius:0}.xl\:rounded-tr-none{border-top-right-radius:0}.xl\:rounded-br-none{border-bottom-right-radius:0}.xl\:rounded-bl-none{border-bottom-left-radius:0}.xl\:rounded-tl-sm{border-top-left-radius:.125rem}.xl\:rounded-tr-sm{border-top-right-radius:.125rem}.xl\:rounded-br-sm{border-bottom-right-radius:.125rem}.xl\:rounded-bl-sm{border-bottom-left-radius:.125rem}.xl\:rounded-tl{border-top-left-radius:.25rem}.xl\:rounded-tr{border-top-right-radius:.25rem}.xl\:rounded-br{border-bottom-right-radius:.25rem}.xl\:rounded-bl{border-bottom-left-radius:.25rem}.xl\:rounded-tl-lg{border-top-left-radius:.5rem}.xl\:rounded-tr-lg{border-top-right-radius:.5rem}.xl\:rounded-br-lg{border-bottom-right-radius:.5rem}.xl\:rounded-bl-lg{border-bottom-left-radius:.5rem}.xl\:rounded-tl-full{border-top-left-radius:9999px}.xl\:rounded-tr-full{border-top-right-radius:9999px}.xl\:rounded-br-full{border-bottom-right-radius:9999px}.xl\:rounded-bl-full{border-bottom-left-radius:9999px}.xl\:border-solid{border-style:solid}.xl\:border-dashed{border-style:dashed}.xl\:border-dotted{border-style:dotted}.xl\:border-none{border-style:none}.xl\:border-0{border-width:0}.xl\:border-2{border-width:2px}.xl\:border-4{border-width:4px}.xl\:border-8{border-width:8px}.xl\:border{border-width:1px}.xl\:border-t-0{border-top-width:0}.xl\:border-r-0{border-right-width:0}.xl\:border-b-0{border-bottom-width:0}.xl\:border-l-0{border-left-width:0}.xl\:border-t-2{border-top-width:2px}.xl\:border-r-2{border-right-width:2px}.xl\:border-b-2{border-bottom-width:2px}.xl\:border-l-2{border-left-width:2px}.xl\:border-t-4{border-top-width:4px}.xl\:border-r-4{border-right-width:4px}.xl\:border-b-4{border-bottom-width:4px}.xl\:border-l-4{border-left-width:4px}.xl\:border-t-8{border-top-width:8px}.xl\:border-r-8{border-right-width:8px}.xl\:border-b-8{border-bottom-width:8px}.xl\:border-l-8{border-left-width:8px}.xl\:border-t{border-top-width:1px}.xl\:border-r{border-right-width:1px}.xl\:border-b{border-bottom-width:1px}.xl\:border-l{border-left-width:1px}.xl\:cursor-auto{cursor:auto}.xl\:cursor-default{cursor:default}.xl\:cursor-pointer{cursor:pointer}.xl\:cursor-wait{cursor:wait}.xl\:cursor-text{cursor:text}.xl\:cursor-move{cursor:move}.xl\:cursor-not-allowed{cursor:not-allowed}.xl\:block{display:block}.xl\:inline-block{display:inline-block}.xl\:inline{display:inline}.xl\:flex{display:flex}.xl\:inline-flex{display:inline-flex}.xl\:table{display:table}.xl\:table-row{display:table-row}.xl\:table-cell{display:table-cell}.xl\:hidden{display:none}.xl\:flex-row{flex-direction:row}.xl\:flex-row-reverse{flex-direction:row-reverse}.xl\:flex-col{flex-direction:column}.xl\:flex-col-reverse{flex-direction:column-reverse}.xl\:flex-wrap{flex-wrap:wrap}.xl\:flex-wrap-reverse{flex-wrap:wrap-reverse}.xl\:flex-no-wrap{flex-wrap:nowrap}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:items-baseline{align-items:baseline}.xl\:items-stretch{align-items:stretch}.xl\:self-auto{align-self:auto}.xl\:self-start{align-self:flex-start}.xl\:self-end{align-self:flex-end}.xl\:self-center{align-self:center}.xl\:self-stretch{align-self:stretch}.xl\:justify-start{justify-content:flex-start}.xl\:justify-end{justify-content:flex-end}.xl\:justify-center{justify-content:center}.xl\:justify-between{justify-content:space-between}.xl\:justify-around{justify-content:space-around}.xl\:content-center{align-content:center}.xl\:content-start{align-content:flex-start}.xl\:content-end{align-content:flex-end}.xl\:content-between{align-content:space-between}.xl\:content-around{align-content:space-around}.xl\:flex-1{flex:1 1 0%}.xl\:flex-auto{flex:1 1 auto}.xl\:flex-initial{flex:0 1 auto}.xl\:flex-none{flex:none}.xl\:flex-grow-0{flex-grow:0}.xl\:flex-grow{flex-grow:1}.xl\:flex-shrink-0{flex-shrink:0}.xl\:flex-shrink{flex-shrink:1}.xl\:order-1{order:1}.xl\:order-2{order:2}.xl\:order-3{order:3}.xl\:order-4{order:4}.xl\:order-5{order:5}.xl\:order-6{order:6}.xl\:order-7{order:7}.xl\:order-8{order:8}.xl\:order-9{order:9}.xl\:order-10{order:10}.xl\:order-11{order:11}.xl\:order-12{order:12}.xl\:order-first{order:-9999}.xl\:order-last{order:9999}.xl\:order-none{order:0}.xl\:float-right{float:right}.xl\:float-left{float:left}.xl\:float-none{float:none}.xl\:clearfix:after{content:"";display:table;clear:both}.xl\:font-sans{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.xl\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.xl\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.xl\:font-hairline{font-weight:100}.xl\:font-thin{font-weight:200}.xl\:font-light{font-weight:300}.xl\:font-normal{font-weight:400}.xl\:font-medium{font-weight:500}.xl\:font-semibold{font-weight:600}.xl\:font-bold{font-weight:700}.xl\:font-extrabold{font-weight:800}.xl\:font-black{font-weight:900}.xl\:hover\:font-hairline:hover{font-weight:100}.xl\:hover\:font-thin:hover{font-weight:200}.xl\:hover\:font-light:hover{font-weight:300}.xl\:hover\:font-normal:hover{font-weight:400}.xl\:hover\:font-medium:hover{font-weight:500}.xl\:hover\:font-semibold:hover{font-weight:600}.xl\:hover\:font-bold:hover{font-weight:700}.xl\:hover\:font-extrabold:hover{font-weight:800}.xl\:hover\:font-black:hover{font-weight:900}.xl\:focus\:font-hairline:focus{font-weight:100}.xl\:focus\:font-thin:focus{font-weight:200}.xl\:focus\:font-light:focus{font-weight:300}.xl\:focus\:font-normal:focus{font-weight:400}.xl\:focus\:font-medium:focus{font-weight:500}.xl\:focus\:font-semibold:focus{font-weight:600}.xl\:focus\:font-bold:focus{font-weight:700}.xl\:focus\:font-extrabold:focus{font-weight:800}.xl\:focus\:font-black:focus{font-weight:900}.xl\:h-0{height:0}.xl\:h-1{height:.25rem}.xl\:h-2{height:.5rem}.xl\:h-3{height:.75rem}.xl\:h-4{height:1rem}.xl\:h-5{height:1.25rem}.xl\:h-6{height:1.5rem}.xl\:h-8{height:2rem}.xl\:h-10{height:2.5rem}.xl\:h-12{height:3rem}.xl\:h-16{height:4rem}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-32{height:8rem}.xl\:h-40{height:10rem}.xl\:h-48{height:12rem}.xl\:h-56{height:14rem}.xl\:h-64{height:16rem}.xl\:h-auto{height:auto}.xl\:h-px{height:1px}.xl\:h-full{height:100%}.xl\:h-screen{height:100vh}.xl\:leading-none{line-height:1}.xl\:leading-tight{line-height:1.25}.xl\:leading-snug{line-height:1.375}.xl\:leading-normal{line-height:1.5}.xl\:leading-relaxed{line-height:1.625}.xl\:leading-loose{line-height:2}.xl\:list-inside{list-style-position:inside}.xl\:list-outside{list-style-position:outside}.xl\:list-none{list-style-type:none}.xl\:list-disc{list-style-type:disc}.xl\:list-decimal{list-style-type:decimal}.xl\:m-0{margin:0}.xl\:m-1{margin:.25rem}.xl\:m-2{margin:.5rem}.xl\:m-3{margin:.75rem}.xl\:m-4{margin:1rem}.xl\:m-5{margin:1.25rem}.xl\:m-6{margin:1.5rem}.xl\:m-8{margin:2rem}.xl\:m-10{margin:2.5rem}.xl\:m-12{margin:3rem}.xl\:m-16{margin:4rem}.xl\:m-20{margin:5rem}.xl\:m-24{margin:6rem}.xl\:m-32{margin:8rem}.xl\:m-40{margin:10rem}.xl\:m-48{margin:12rem}.xl\:m-56{margin:14rem}.xl\:m-64{margin:16rem}.xl\:m-auto{margin:auto}.xl\:m-px{margin:1px}.xl\:-m-1{margin:-.25rem}.xl\:-m-2{margin:-.5rem}.xl\:-m-3{margin:-.75rem}.xl\:-m-4{margin:-1rem}.xl\:-m-5{margin:-1.25rem}.xl\:-m-6{margin:-1.5rem}.xl\:-m-8{margin:-2rem}.xl\:-m-10{margin:-2.5rem}.xl\:-m-12{margin:-3rem}.xl\:-m-16{margin:-4rem}.xl\:-m-20{margin:-5rem}.xl\:-m-24{margin:-6rem}.xl\:-m-32{margin:-8rem}.xl\:-m-40{margin:-10rem}.xl\:-m-48{margin:-12rem}.xl\:-m-56{margin:-14rem}.xl\:-m-64{margin:-16rem}.xl\:-m-px{margin:-1px}.xl\:my-0{margin-top:0;margin-bottom:0}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:my-1{margin-top:.25rem;margin-bottom:.25rem}.xl\:mx-1{margin-left:.25rem;margin-right:.25rem}.xl\:my-2{margin-top:.5rem;margin-bottom:.5rem}.xl\:mx-2{margin-left:.5rem;margin-right:.5rem}.xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}.xl\:mx-3{margin-left:.75rem;margin-right:.75rem}.xl\:my-4{margin-top:1rem;margin-bottom:1rem}.xl\:mx-4{margin-left:1rem;margin-right:1rem}.xl\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.xl\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.xl\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.xl\:my-8{margin-top:2rem;margin-bottom:2rem}.xl\:mx-8{margin-left:2rem;margin-right:2rem}.xl\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.xl\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.xl\:my-12{margin-top:3rem;margin-bottom:3rem}.xl\:mx-12{margin-left:3rem;margin-right:3rem}.xl\:my-16{margin-top:4rem;margin-bottom:4rem}.xl\:mx-16{margin-left:4rem;margin-right:4rem}.xl\:my-20{margin-top:5rem;margin-bottom:5rem}.xl\:mx-20{margin-left:5rem;margin-right:5rem}.xl\:my-24{margin-top:6rem;margin-bottom:6rem}.xl\:mx-24{margin-left:6rem;margin-right:6rem}.xl\:my-32{margin-top:8rem;margin-bottom:8rem}.xl\:mx-32{margin-left:8rem;margin-right:8rem}.xl\:my-40{margin-top:10rem;margin-bottom:10rem}.xl\:mx-40{margin-left:10rem;margin-right:10rem}.xl\:my-48{margin-top:12rem;margin-bottom:12rem}.xl\:mx-48{margin-left:12rem;margin-right:12rem}.xl\:my-56{margin-top:14rem;margin-bottom:14rem}.xl\:mx-56{margin-left:14rem;margin-right:14rem}.xl\:my-64{margin-top:16rem;margin-bottom:16rem}.xl\:mx-64{margin-left:16rem;margin-right:16rem}.xl\:my-auto{margin-top:auto;margin-bottom:auto}.xl\:mx-auto{margin-left:auto;margin-right:auto}.xl\:my-px{margin-top:1px;margin-bottom:1px}.xl\:mx-px{margin-left:1px;margin-right:1px}.xl\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.xl\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.xl\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.xl\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.xl\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.xl\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.xl\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.xl\:-mx-4{margin-left:-1rem;margin-right:-1rem}.xl\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.xl\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.xl\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.xl\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.xl\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.xl\:-mx-8{margin-left:-2rem;margin-right:-2rem}.xl\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.xl\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.xl\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.xl\:-mx-12{margin-left:-3rem;margin-right:-3rem}.xl\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.xl\:-mx-16{margin-left:-4rem;margin-right:-4rem}.xl\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.xl\:-mx-20{margin-left:-5rem;margin-right:-5rem}.xl\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.xl\:-mx-24{margin-left:-6rem;margin-right:-6rem}.xl\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.xl\:-mx-32{margin-left:-8rem;margin-right:-8rem}.xl\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.xl\:-mx-40{margin-left:-10rem;margin-right:-10rem}.xl\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.xl\:-mx-48{margin-left:-12rem;margin-right:-12rem}.xl\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.xl\:-mx-56{margin-left:-14rem;margin-right:-14rem}.xl\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.xl\:-mx-64{margin-left:-16rem;margin-right:-16rem}.xl\:-my-px{margin-top:-1px;margin-bottom:-1px}.xl\:-mx-px{margin-left:-1px;margin-right:-1px}.xl\:mt-0{margin-top:0}.xl\:mr-0{margin-right:0}.xl\:mb-0{margin-bottom:0}.xl\:ml-0{margin-left:0}.xl\:mt-1{margin-top:.25rem}.xl\:mr-1{margin-right:.25rem}.xl\:mb-1{margin-bottom:.25rem}.xl\:ml-1{margin-left:.25rem}.xl\:mt-2{margin-top:.5rem}.xl\:mr-2{margin-right:.5rem}.xl\:mb-2{margin-bottom:.5rem}.xl\:ml-2{margin-left:.5rem}.xl\:mt-3{margin-top:.75rem}.xl\:mr-3{margin-right:.75rem}.xl\:mb-3{margin-bottom:.75rem}.xl\:ml-3{margin-left:.75rem}.xl\:mt-4{margin-top:1rem}.xl\:mr-4{margin-right:1rem}.xl\:mb-4{margin-bottom:1rem}.xl\:ml-4{margin-left:1rem}.xl\:mt-5{margin-top:1.25rem}.xl\:mr-5{margin-right:1.25rem}.xl\:mb-5{margin-bottom:1.25rem}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-6{margin-top:1.5rem}.xl\:mr-6{margin-right:1.5rem}.xl\:mb-6{margin-bottom:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:mt-8{margin-top:2rem}.xl\:mr-8{margin-right:2rem}.xl\:mb-8{margin-bottom:2rem}.xl\:ml-8{margin-left:2rem}.xl\:mt-10{margin-top:2.5rem}.xl\:mr-10{margin-right:2.5rem}.xl\:mb-10{margin-bottom:2.5rem}.xl\:ml-10{margin-left:2.5rem}.xl\:mt-12{margin-top:3rem}.xl\:mr-12{margin-right:3rem}.xl\:mb-12{margin-bottom:3rem}.xl\:ml-12{margin-left:3rem}.xl\:mt-16{margin-top:4rem}.xl\:mr-16{margin-right:4rem}.xl\:mb-16{margin-bottom:4rem}.xl\:ml-16{margin-left:4rem}.xl\:mt-20{margin-top:5rem}.xl\:mr-20{margin-right:5rem}.xl\:mb-20{margin-bottom:5rem}.xl\:ml-20{margin-left:5rem}.xl\:mt-24{margin-top:6rem}.xl\:mr-24{margin-right:6rem}.xl\:mb-24{margin-bottom:6rem}.xl\:ml-24{margin-left:6rem}.xl\:mt-32{margin-top:8rem}.xl\:mr-32{margin-right:8rem}.xl\:mb-32{margin-bottom:8rem}.xl\:ml-32{margin-left:8rem}.xl\:mt-40{margin-top:10rem}.xl\:mr-40{margin-right:10rem}.xl\:mb-40{margin-bottom:10rem}.xl\:ml-40{margin-left:10rem}.xl\:mt-48{margin-top:12rem}.xl\:mr-48{margin-right:12rem}.xl\:mb-48{margin-bottom:12rem}.xl\:ml-48{margin-left:12rem}.xl\:mt-56{margin-top:14rem}.xl\:mr-56{margin-right:14rem}.xl\:mb-56{margin-bottom:14rem}.xl\:ml-56{margin-left:14rem}.xl\:mt-64{margin-top:16rem}.xl\:mr-64{margin-right:16rem}.xl\:mb-64{margin-bottom:16rem}.xl\:ml-64{margin-left:16rem}.xl\:mt-auto{margin-top:auto}.xl\:mr-auto{margin-right:auto}.xl\:mb-auto{margin-bottom:auto}.xl\:ml-auto{margin-left:auto}.xl\:mt-px{margin-top:1px}.xl\:mr-px{margin-right:1px}.xl\:mb-px{margin-bottom:1px}.xl\:ml-px{margin-left:1px}.xl\:-mt-1{margin-top:-.25rem}.xl\:-mr-1{margin-right:-.25rem}.xl\:-mb-1{margin-bottom:-.25rem}.xl\:-ml-1{margin-left:-.25rem}.xl\:-mt-2{margin-top:-.5rem}.xl\:-mr-2{margin-right:-.5rem}.xl\:-mb-2{margin-bottom:-.5rem}.xl\:-ml-2{margin-left:-.5rem}.xl\:-mt-3{margin-top:-.75rem}.xl\:-mr-3{margin-right:-.75rem}.xl\:-mb-3{margin-bottom:-.75rem}.xl\:-ml-3{margin-left:-.75rem}.xl\:-mt-4{margin-top:-1rem}.xl\:-mr-4{margin-right:-1rem}.xl\:-mb-4{margin-bottom:-1rem}.xl\:-ml-4{margin-left:-1rem}.xl\:-mt-5{margin-top:-1.25rem}.xl\:-mr-5{margin-right:-1.25rem}.xl\:-mb-5{margin-bottom:-1.25rem}.xl\:-ml-5{margin-left:-1.25rem}.xl\:-mt-6{margin-top:-1.5rem}.xl\:-mr-6{margin-right:-1.5rem}.xl\:-mb-6{margin-bottom:-1.5rem}.xl\:-ml-6{margin-left:-1.5rem}.xl\:-mt-8{margin-top:-2rem}.xl\:-mr-8{margin-right:-2rem}.xl\:-mb-8{margin-bottom:-2rem}.xl\:-ml-8{margin-left:-2rem}.xl\:-mt-10{margin-top:-2.5rem}.xl\:-mr-10{margin-right:-2.5rem}.xl\:-mb-10{margin-bottom:-2.5rem}.xl\:-ml-10{margin-left:-2.5rem}.xl\:-mt-12{margin-top:-3rem}.xl\:-mr-12{margin-right:-3rem}.xl\:-mb-12{margin-bottom:-3rem}.xl\:-ml-12{margin-left:-3rem}.xl\:-mt-16{margin-top:-4rem}.xl\:-mr-16{margin-right:-4rem}.xl\:-mb-16{margin-bottom:-4rem}.xl\:-ml-16{margin-left:-4rem}.xl\:-mt-20{margin-top:-5rem}.xl\:-mr-20{margin-right:-5rem}.xl\:-mb-20{margin-bottom:-5rem}.xl\:-ml-20{margin-left:-5rem}.xl\:-mt-24{margin-top:-6rem}.xl\:-mr-24{margin-right:-6rem}.xl\:-mb-24{margin-bottom:-6rem}.xl\:-ml-24{margin-left:-6rem}.xl\:-mt-32{margin-top:-8rem}.xl\:-mr-32{margin-right:-8rem}.xl\:-mb-32{margin-bottom:-8rem}.xl\:-ml-32{margin-left:-8rem}.xl\:-mt-40{margin-top:-10rem}.xl\:-mr-40{margin-right:-10rem}.xl\:-mb-40{margin-bottom:-10rem}.xl\:-ml-40{margin-left:-10rem}.xl\:-mt-48{margin-top:-12rem}.xl\:-mr-48{margin-right:-12rem}.xl\:-mb-48{margin-bottom:-12rem}.xl\:-ml-48{margin-left:-12rem}.xl\:-mt-56{margin-top:-14rem}.xl\:-mr-56{margin-right:-14rem}.xl\:-mb-56{margin-bottom:-14rem}.xl\:-ml-56{margin-left:-14rem}.xl\:-mt-64{margin-top:-16rem}.xl\:-mr-64{margin-right:-16rem}.xl\:-mb-64{margin-bottom:-16rem}.xl\:-ml-64{margin-left:-16rem}.xl\:-mt-px{margin-top:-1px}.xl\:-mr-px{margin-right:-1px}.xl\:-mb-px{margin-bottom:-1px}.xl\:-ml-px{margin-left:-1px}.xl\:max-h-full{max-height:100%}.xl\:max-h-screen{max-height:100vh}.xl\:max-w-xs{max-width:20rem}.xl\:max-w-sm{max-width:24rem}.xl\:max-w-md{max-width:28rem}.xl\:max-w-lg{max-width:32rem}.xl\:max-w-xl{max-width:36rem}.xl\:max-w-2xl{max-width:42rem}.xl\:max-w-3xl{max-width:48rem}.xl\:max-w-4xl{max-width:56rem}.xl\:max-w-5xl{max-width:64rem}.xl\:max-w-6xl{max-width:72rem}.xl\:max-w-full{max-width:100%}.xl\:min-h-0{min-height:0}.xl\:min-h-full{min-height:100%}.xl\:min-h-screen{min-height:100vh}.xl\:min-w-0{min-width:0}.xl\:min-w-full{min-width:100%}.xl\:object-contain{-o-object-fit:contain;object-fit:contain}.xl\:object-cover{-o-object-fit:cover;object-fit:cover}.xl\:object-fill{-o-object-fit:fill;object-fit:fill}.xl\:object-none{-o-object-fit:none;object-fit:none}.xl\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.xl\:object-bottom{-o-object-position:bottom;object-position:bottom}.xl\:object-center{-o-object-position:center;object-position:center}.xl\:object-left{-o-object-position:left;object-position:left}.xl\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.xl\:object-left-top{-o-object-position:left top;object-position:left top}.xl\:object-right{-o-object-position:right;object-position:right}.xl\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.xl\:object-right-top{-o-object-position:right top;object-position:right top}.xl\:object-top{-o-object-position:top;object-position:top}.xl\:opacity-0{opacity:0}.xl\:opacity-25{opacity:.25}.xl\:opacity-50{opacity:.5}.xl\:opacity-75{opacity:.75}.xl\:opacity-100{opacity:1}.xl\:outline-none{outline:0}.xl\:focus\:outline-none:focus{outline:0}.xl\:overflow-auto{overflow:auto}.xl\:overflow-hidden{overflow:hidden}.xl\:overflow-visible{overflow:visible}.xl\:overflow-scroll{overflow:scroll}.xl\:overflow-x-auto{overflow-x:auto}.xl\:overflow-y-auto{overflow-y:auto}.xl\:overflow-x-hidden{overflow-x:hidden}.xl\:overflow-y-hidden{overflow-y:hidden}.xl\:overflow-x-visible{overflow-x:visible}.xl\:overflow-y-visible{overflow-y:visible}.xl\:overflow-x-scroll{overflow-x:scroll}.xl\:overflow-y-scroll{overflow-y:scroll}.xl\:scrolling-touch{-webkit-overflow-scrolling:touch}.xl\:scrolling-auto{-webkit-overflow-scrolling:auto}.xl\:p-0{padding:0}.xl\:p-1{padding:.25rem}.xl\:p-2{padding:.5rem}.xl\:p-3{padding:.75rem}.xl\:p-4{padding:1rem}.xl\:p-5{padding:1.25rem}.xl\:p-6{padding:1.5rem}.xl\:p-8{padding:2rem}.xl\:p-10{padding:2.5rem}.xl\:p-12{padding:3rem}.xl\:p-16{padding:4rem}.xl\:p-20{padding:5rem}.xl\:p-24{padding:6rem}.xl\:p-32{padding:8rem}.xl\:p-40{padding:10rem}.xl\:p-48{padding:12rem}.xl\:p-56{padding:14rem}.xl\:p-64{padding:16rem}.xl\:p-px{padding:1px}.xl\:py-0{padding-top:0;padding-bottom:0}.xl\:px-0{padding-left:0;padding-right:0}.xl\:py-1{padding-top:.25rem;padding-bottom:.25rem}.xl\:px-1{padding-left:.25rem;padding-right:.25rem}.xl\:py-2{padding-top:.5rem;padding-bottom:.5rem}.xl\:px-2{padding-left:.5rem;padding-right:.5rem}.xl\:py-3{padding-top:.75rem;padding-bottom:.75rem}.xl\:px-3{padding-left:.75rem;padding-right:.75rem}.xl\:py-4{padding-top:1rem;padding-bottom:1rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.xl\:px-6{padding-left:1.5rem;padding-right:1.5rem}.xl\:py-8{padding-top:2rem;padding-bottom:2rem}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.xl\:px-10{padding-left:2.5rem;padding-right:2.5rem}.xl\:py-12{padding-top:3rem;padding-bottom:3rem}.xl\:px-12{padding-left:3rem;padding-right:3rem}.xl\:py-16{padding-top:4rem;padding-bottom:4rem}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:py-20{padding-top:5rem;padding-bottom:5rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:py-24{padding-top:6rem;padding-bottom:6rem}.xl\:px-24{padding-left:6rem;padding-right:6rem}.xl\:py-32{padding-top:8rem;padding-bottom:8rem}.xl\:px-32{padding-left:8rem;padding-right:8rem}.xl\:py-40{padding-top:10rem;padding-bottom:10rem}.xl\:px-40{padding-left:10rem;padding-right:10rem}.xl\:py-48{padding-top:12rem;padding-bottom:12rem}.xl\:px-48{padding-left:12rem;padding-right:12rem}.xl\:py-56{padding-top:14rem;padding-bottom:14rem}.xl\:px-56{padding-left:14rem;padding-right:14rem}.xl\:py-64{padding-top:16rem;padding-bottom:16rem}.xl\:px-64{padding-left:16rem;padding-right:16rem}.xl\:py-px{padding-top:1px;padding-bottom:1px}.xl\:px-px{padding-left:1px;padding-right:1px}.xl\:pt-0{padding-top:0}.xl\:pr-0{padding-right:0}.xl\:pb-0{padding-bottom:0}.xl\:pl-0{padding-left:0}.xl\:pt-1{padding-top:.25rem}.xl\:pr-1{padding-right:.25rem}.xl\:pb-1{padding-bottom:.25rem}.xl\:pl-1{padding-left:.25rem}.xl\:pt-2{padding-top:.5rem}.xl\:pr-2{padding-right:.5rem}.xl\:pb-2{padding-bottom:.5rem}.xl\:pl-2{padding-left:.5rem}.xl\:pt-3{padding-top:.75rem}.xl\:pr-3{padding-right:.75rem}.xl\:pb-3{padding-bottom:.75rem}.xl\:pl-3{padding-left:.75rem}.xl\:pt-4{padding-top:1rem}.xl\:pr-4{padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:pl-4{padding-left:1rem}.xl\:pt-5{padding-top:1.25rem}.xl\:pr-5{padding-right:1.25rem}.xl\:pb-5{padding-bottom:1.25rem}.xl\:pl-5{padding-left:1.25rem}.xl\:pt-6{padding-top:1.5rem}.xl\:pr-6{padding-right:1.5rem}.xl\:pb-6{padding-bottom:1.5rem}.xl\:pl-6{padding-left:1.5rem}.xl\:pt-8{padding-top:2rem}.xl\:pr-8{padding-right:2rem}.xl\:pb-8{padding-bottom:2rem}.xl\:pl-8{padding-left:2rem}.xl\:pt-10{padding-top:2.5rem}.xl\:pr-10{padding-right:2.5rem}.xl\:pb-10{padding-bottom:2.5rem}.xl\:pl-10{padding-left:2.5rem}.xl\:pt-12{padding-top:3rem}.xl\:pr-12{padding-right:3rem}.xl\:pb-12{padding-bottom:3rem}.xl\:pl-12{padding-left:3rem}.xl\:pt-16{padding-top:4rem}.xl\:pr-16{padding-right:4rem}.xl\:pb-16{padding-bottom:4rem}.xl\:pl-16{padding-left:4rem}.xl\:pt-20{padding-top:5rem}.xl\:pr-20{padding-right:5rem}.xl\:pb-20{padding-bottom:5rem}.xl\:pl-20{padding-left:5rem}.xl\:pt-24{padding-top:6rem}.xl\:pr-24{padding-right:6rem}.xl\:pb-24{padding-bottom:6rem}.xl\:pl-24{padding-left:6rem}.xl\:pt-32{padding-top:8rem}.xl\:pr-32{padding-right:8rem}.xl\:pb-32{padding-bottom:8rem}.xl\:pl-32{padding-left:8rem}.xl\:pt-40{padding-top:10rem}.xl\:pr-40{padding-right:10rem}.xl\:pb-40{padding-bottom:10rem}.xl\:pl-40{padding-left:10rem}.xl\:pt-48{padding-top:12rem}.xl\:pr-48{padding-right:12rem}.xl\:pb-48{padding-bottom:12rem}.xl\:pl-48{padding-left:12rem}.xl\:pt-56{padding-top:14rem}.xl\:pr-56{padding-right:14rem}.xl\:pb-56{padding-bottom:14rem}.xl\:pl-56{padding-left:14rem}.xl\:pt-64{padding-top:16rem}.xl\:pr-64{padding-right:16rem}.xl\:pb-64{padding-bottom:16rem}.xl\:pl-64{padding-left:16rem}.xl\:pt-px{padding-top:1px}.xl\:pr-px{padding-right:1px}.xl\:pb-px{padding-bottom:1px}.xl\:pl-px{padding-left:1px}.xl\:pointer-events-none{pointer-events:none}.xl\:pointer-events-auto{pointer-events:auto}.xl\:static{position:static}.xl\:fixed{position:fixed}.xl\:absolute{position:absolute}.xl\:relative{position:relative}.xl\:sticky{position:-webkit-sticky;position:sticky}.xl\:inset-0{top:0;right:0;bottom:0;left:0}.xl\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.xl\:inset-y-0{top:0;bottom:0}.xl\:inset-x-0{right:0;left:0}.xl\:inset-y-auto{top:auto;bottom:auto}.xl\:inset-x-auto{right:auto;left:auto}.xl\:top-0{top:0}.xl\:right-0{right:0}.xl\:bottom-0{bottom:0}.xl\:left-0{left:0}.xl\:top-auto{top:auto}.xl\:right-auto{right:auto}.xl\:bottom-auto{bottom:auto}.xl\:left-auto{left:auto}.xl\:resize-none{resize:none}.xl\:resize-y{resize:vertical}.xl\:resize-x{resize:horizontal}.xl\:resize{resize:both}.xl\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:shadow-none{box-shadow:none}.xl\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:hover\:shadow-none:hover{box-shadow:none}.xl\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:focus\:shadow-none:focus{box-shadow:none}.xl\:fill-current{fill:currentColor}.xl\:stroke-current{stroke:currentColor}.xl\:table-auto{table-layout:auto}.xl\:table-fixed{table-layout:fixed}.xl\:text-left{text-align:left}.xl\:text-center{text-align:center}.xl\:text-right{text-align:right}.xl\:text-justify{text-align:justify}.xl\:text-transparent{color:transparent}.xl\:text-black{color:#000}.xl\:text-white{color:#fff}.xl\:text-gray-100{color:#f7fafc}.xl\:text-gray-200{color:#edf2f7}.xl\:text-gray-300{color:#e2e8f0}.xl\:text-gray-400{color:#cbd5e0}.xl\:text-gray-500{color:#a0aec0}.xl\:text-gray-600{color:#718096}.xl\:text-gray-700{color:#4a5568}.xl\:text-gray-800{color:#2d3748}.xl\:text-gray-900{color:#1a202c}.xl\:text-red-100{color:#fff5f5}.xl\:text-red-200{color:#fed7d7}.xl\:text-red-300{color:#feb2b2}.xl\:text-red-400{color:#fc8181}.xl\:text-red-500{color:#f56565}.xl\:text-red-600{color:#e53e3e}.xl\:text-red-700{color:#c53030}.xl\:text-red-800{color:#9b2c2c}.xl\:text-red-900{color:#742a2a}.xl\:text-orange-100{color:#fffaf0}.xl\:text-orange-200{color:#feebc8}.xl\:text-orange-300{color:#fbd38d}.xl\:text-orange-400{color:#f6ad55}.xl\:text-orange-500{color:#ed8936}.xl\:text-orange-600{color:#dd6b20}.xl\:text-orange-700{color:#c05621}.xl\:text-orange-800{color:#9c4221}.xl\:text-orange-900{color:#7b341e}.xl\:text-yellow-100{color:ivory}.xl\:text-yellow-200{color:#fefcbf}.xl\:text-yellow-300{color:#faf089}.xl\:text-yellow-400{color:#f6e05e}.xl\:text-yellow-500{color:#ecc94b}.xl\:text-yellow-600{color:#d69e2e}.xl\:text-yellow-700{color:#b7791f}.xl\:text-yellow-800{color:#975a16}.xl\:text-yellow-900{color:#744210}.xl\:text-green-100{color:#f0fff4}.xl\:text-green-200{color:#c6f6d5}.xl\:text-green-300{color:#9ae6b4}.xl\:text-green-400{color:#68d391}.xl\:text-green-500{color:#48bb78}.xl\:text-green-600{color:#38a169}.xl\:text-green-700{color:#2f855a}.xl\:text-green-800{color:#276749}.xl\:text-green-900{color:#22543d}.xl\:text-teal-100{color:#e6fffa}.xl\:text-teal-200{color:#b2f5ea}.xl\:text-teal-300{color:#81e6d9}.xl\:text-teal-400{color:#4fd1c5}.xl\:text-teal-500{color:#38b2ac}.xl\:text-teal-600{color:#319795}.xl\:text-teal-700{color:#2c7a7b}.xl\:text-teal-800{color:#285e61}.xl\:text-teal-900{color:#234e52}.xl\:text-blue-100{color:#ebf8ff}.xl\:text-blue-200{color:#bee3f8}.xl\:text-blue-300{color:#90cdf4}.xl\:text-blue-400{color:#63b3ed}.xl\:text-blue-500{color:#4299e1}.xl\:text-blue-600{color:#3182ce}.xl\:text-blue-700{color:#2b6cb0}.xl\:text-blue-800{color:#2c5282}.xl\:text-blue-900{color:#2a4365}.xl\:text-indigo-100{color:#ebf4ff}.xl\:text-indigo-200{color:#c3dafe}.xl\:text-indigo-300{color:#a3bffa}.xl\:text-indigo-400{color:#7f9cf5}.xl\:text-indigo-500{color:#667eea}.xl\:text-indigo-600{color:#5a67d8}.xl\:text-indigo-700{color:#4c51bf}.xl\:text-indigo-800{color:#434190}.xl\:text-indigo-900{color:#3c366b}.xl\:text-purple-100{color:#faf5ff}.xl\:text-purple-200{color:#e9d8fd}.xl\:text-purple-300{color:#d6bcfa}.xl\:text-purple-400{color:#b794f4}.xl\:text-purple-500{color:#9f7aea}.xl\:text-purple-600{color:#805ad5}.xl\:text-purple-700{color:#6b46c1}.xl\:text-purple-800{color:#553c9a}.xl\:text-purple-900{color:#44337a}.xl\:text-pink-100{color:#fff5f7}.xl\:text-pink-200{color:#fed7e2}.xl\:text-pink-300{color:#fbb6ce}.xl\:text-pink-400{color:#f687b3}.xl\:text-pink-500{color:#ed64a6}.xl\:text-pink-600{color:#d53f8c}.xl\:text-pink-700{color:#b83280}.xl\:text-pink-800{color:#97266d}.xl\:text-pink-900{color:#702459}.xl\:hover\:text-transparent:hover{color:transparent}.xl\:hover\:text-black:hover{color:#000}.xl\:hover\:text-white:hover{color:#fff}.xl\:hover\:text-gray-100:hover{color:#f7fafc}.xl\:hover\:text-gray-200:hover{color:#edf2f7}.xl\:hover\:text-gray-300:hover{color:#e2e8f0}.xl\:hover\:text-gray-400:hover{color:#cbd5e0}.xl\:hover\:text-gray-500:hover{color:#a0aec0}.xl\:hover\:text-gray-600:hover{color:#718096}.xl\:hover\:text-gray-700:hover{color:#4a5568}.xl\:hover\:text-gray-800:hover{color:#2d3748}.xl\:hover\:text-gray-900:hover{color:#1a202c}.xl\:hover\:text-red-100:hover{color:#fff5f5}.xl\:hover\:text-red-200:hover{color:#fed7d7}.xl\:hover\:text-red-300:hover{color:#feb2b2}.xl\:hover\:text-red-400:hover{color:#fc8181}.xl\:hover\:text-red-500:hover{color:#f56565}.xl\:hover\:text-red-600:hover{color:#e53e3e}.xl\:hover\:text-red-700:hover{color:#c53030}.xl\:hover\:text-red-800:hover{color:#9b2c2c}.xl\:hover\:text-red-900:hover{color:#742a2a}.xl\:hover\:text-orange-100:hover{color:#fffaf0}.xl\:hover\:text-orange-200:hover{color:#feebc8}.xl\:hover\:text-orange-300:hover{color:#fbd38d}.xl\:hover\:text-orange-400:hover{color:#f6ad55}.xl\:hover\:text-orange-500:hover{color:#ed8936}.xl\:hover\:text-orange-600:hover{color:#dd6b20}.xl\:hover\:text-orange-700:hover{color:#c05621}.xl\:hover\:text-orange-800:hover{color:#9c4221}.xl\:hover\:text-orange-900:hover{color:#7b341e}.xl\:hover\:text-yellow-100:hover{color:ivory}.xl\:hover\:text-yellow-200:hover{color:#fefcbf}.xl\:hover\:text-yellow-300:hover{color:#faf089}.xl\:hover\:text-yellow-400:hover{color:#f6e05e}.xl\:hover\:text-yellow-500:hover{color:#ecc94b}.xl\:hover\:text-yellow-600:hover{color:#d69e2e}.xl\:hover\:text-yellow-700:hover{color:#b7791f}.xl\:hover\:text-yellow-800:hover{color:#975a16}.xl\:hover\:text-yellow-900:hover{color:#744210}.xl\:hover\:text-green-100:hover{color:#f0fff4}.xl\:hover\:text-green-200:hover{color:#c6f6d5}.xl\:hover\:text-green-300:hover{color:#9ae6b4}.xl\:hover\:text-green-400:hover{color:#68d391}.xl\:hover\:text-green-500:hover{color:#48bb78}.xl\:hover\:text-green-600:hover{color:#38a169}.xl\:hover\:text-green-700:hover{color:#2f855a}.xl\:hover\:text-green-800:hover{color:#276749}.xl\:hover\:text-green-900:hover{color:#22543d}.xl\:hover\:text-teal-100:hover{color:#e6fffa}.xl\:hover\:text-teal-200:hover{color:#b2f5ea}.xl\:hover\:text-teal-300:hover{color:#81e6d9}.xl\:hover\:text-teal-400:hover{color:#4fd1c5}.xl\:hover\:text-teal-500:hover{color:#38b2ac}.xl\:hover\:text-teal-600:hover{color:#319795}.xl\:hover\:text-teal-700:hover{color:#2c7a7b}.xl\:hover\:text-teal-800:hover{color:#285e61}.xl\:hover\:text-teal-900:hover{color:#234e52}.xl\:hover\:text-blue-100:hover{color:#ebf8ff}.xl\:hover\:text-blue-200:hover{color:#bee3f8}.xl\:hover\:text-blue-300:hover{color:#90cdf4}.xl\:hover\:text-blue-400:hover{color:#63b3ed}.xl\:hover\:text-blue-500:hover{color:#4299e1}.xl\:hover\:text-blue-600:hover{color:#3182ce}.xl\:hover\:text-blue-700:hover{color:#2b6cb0}.xl\:hover\:text-blue-800:hover{color:#2c5282}.xl\:hover\:text-blue-900:hover{color:#2a4365}.xl\:hover\:text-indigo-100:hover{color:#ebf4ff}.xl\:hover\:text-indigo-200:hover{color:#c3dafe}.xl\:hover\:text-indigo-300:hover{color:#a3bffa}.xl\:hover\:text-indigo-400:hover{color:#7f9cf5}.xl\:hover\:text-indigo-500:hover{color:#667eea}.xl\:hover\:text-indigo-600:hover{color:#5a67d8}.xl\:hover\:text-indigo-700:hover{color:#4c51bf}.xl\:hover\:text-indigo-800:hover{color:#434190}.xl\:hover\:text-indigo-900:hover{color:#3c366b}.xl\:hover\:text-purple-100:hover{color:#faf5ff}.xl\:hover\:text-purple-200:hover{color:#e9d8fd}.xl\:hover\:text-purple-300:hover{color:#d6bcfa}.xl\:hover\:text-purple-400:hover{color:#b794f4}.xl\:hover\:text-purple-500:hover{color:#9f7aea}.xl\:hover\:text-purple-600:hover{color:#805ad5}.xl\:hover\:text-purple-700:hover{color:#6b46c1}.xl\:hover\:text-purple-800:hover{color:#553c9a}.xl\:hover\:text-purple-900:hover{color:#44337a}.xl\:hover\:text-pink-100:hover{color:#fff5f7}.xl\:hover\:text-pink-200:hover{color:#fed7e2}.xl\:hover\:text-pink-300:hover{color:#fbb6ce}.xl\:hover\:text-pink-400:hover{color:#f687b3}.xl\:hover\:text-pink-500:hover{color:#ed64a6}.xl\:hover\:text-pink-600:hover{color:#d53f8c}.xl\:hover\:text-pink-700:hover{color:#b83280}.xl\:hover\:text-pink-800:hover{color:#97266d}.xl\:hover\:text-pink-900:hover{color:#702459}.xl\:focus\:text-transparent:focus{color:transparent}.xl\:focus\:text-black:focus{color:#000}.xl\:focus\:text-white:focus{color:#fff}.xl\:focus\:text-gray-100:focus{color:#f7fafc}.xl\:focus\:text-gray-200:focus{color:#edf2f7}.xl\:focus\:text-gray-300:focus{color:#e2e8f0}.xl\:focus\:text-gray-400:focus{color:#cbd5e0}.xl\:focus\:text-gray-500:focus{color:#a0aec0}.xl\:focus\:text-gray-600:focus{color:#718096}.xl\:focus\:text-gray-700:focus{color:#4a5568}.xl\:focus\:text-gray-800:focus{color:#2d3748}.xl\:focus\:text-gray-900:focus{color:#1a202c}.xl\:focus\:text-red-100:focus{color:#fff5f5}.xl\:focus\:text-red-200:focus{color:#fed7d7}.xl\:focus\:text-red-300:focus{color:#feb2b2}.xl\:focus\:text-red-400:focus{color:#fc8181}.xl\:focus\:text-red-500:focus{color:#f56565}.xl\:focus\:text-red-600:focus{color:#e53e3e}.xl\:focus\:text-red-700:focus{color:#c53030}.xl\:focus\:text-red-800:focus{color:#9b2c2c}.xl\:focus\:text-red-900:focus{color:#742a2a}.xl\:focus\:text-orange-100:focus{color:#fffaf0}.xl\:focus\:text-orange-200:focus{color:#feebc8}.xl\:focus\:text-orange-300:focus{color:#fbd38d}.xl\:focus\:text-orange-400:focus{color:#f6ad55}.xl\:focus\:text-orange-500:focus{color:#ed8936}.xl\:focus\:text-orange-600:focus{color:#dd6b20}.xl\:focus\:text-orange-700:focus{color:#c05621}.xl\:focus\:text-orange-800:focus{color:#9c4221}.xl\:focus\:text-orange-900:focus{color:#7b341e}.xl\:focus\:text-yellow-100:focus{color:ivory}.xl\:focus\:text-yellow-200:focus{color:#fefcbf}.xl\:focus\:text-yellow-300:focus{color:#faf089}.xl\:focus\:text-yellow-400:focus{color:#f6e05e}.xl\:focus\:text-yellow-500:focus{color:#ecc94b}.xl\:focus\:text-yellow-600:focus{color:#d69e2e}.xl\:focus\:text-yellow-700:focus{color:#b7791f}.xl\:focus\:text-yellow-800:focus{color:#975a16}.xl\:focus\:text-yellow-900:focus{color:#744210}.xl\:focus\:text-green-100:focus{color:#f0fff4}.xl\:focus\:text-green-200:focus{color:#c6f6d5}.xl\:focus\:text-green-300:focus{color:#9ae6b4}.xl\:focus\:text-green-400:focus{color:#68d391}.xl\:focus\:text-green-500:focus{color:#48bb78}.xl\:focus\:text-green-600:focus{color:#38a169}.xl\:focus\:text-green-700:focus{color:#2f855a}.xl\:focus\:text-green-800:focus{color:#276749}.xl\:focus\:text-green-900:focus{color:#22543d}.xl\:focus\:text-teal-100:focus{color:#e6fffa}.xl\:focus\:text-teal-200:focus{color:#b2f5ea}.xl\:focus\:text-teal-300:focus{color:#81e6d9}.xl\:focus\:text-teal-400:focus{color:#4fd1c5}.xl\:focus\:text-teal-500:focus{color:#38b2ac}.xl\:focus\:text-teal-600:focus{color:#319795}.xl\:focus\:text-teal-700:focus{color:#2c7a7b}.xl\:focus\:text-teal-800:focus{color:#285e61}.xl\:focus\:text-teal-900:focus{color:#234e52}.xl\:focus\:text-blue-100:focus{color:#ebf8ff}.xl\:focus\:text-blue-200:focus{color:#bee3f8}.xl\:focus\:text-blue-300:focus{color:#90cdf4}.xl\:focus\:text-blue-400:focus{color:#63b3ed}.xl\:focus\:text-blue-500:focus{color:#4299e1}.xl\:focus\:text-blue-600:focus{color:#3182ce}.xl\:focus\:text-blue-700:focus{color:#2b6cb0}.xl\:focus\:text-blue-800:focus{color:#2c5282}.xl\:focus\:text-blue-900:focus{color:#2a4365}.xl\:focus\:text-indigo-100:focus{color:#ebf4ff}.xl\:focus\:text-indigo-200:focus{color:#c3dafe}.xl\:focus\:text-indigo-300:focus{color:#a3bffa}.xl\:focus\:text-indigo-400:focus{color:#7f9cf5}.xl\:focus\:text-indigo-500:focus{color:#667eea}.xl\:focus\:text-indigo-600:focus{color:#5a67d8}.xl\:focus\:text-indigo-700:focus{color:#4c51bf}.xl\:focus\:text-indigo-800:focus{color:#434190}.xl\:focus\:text-indigo-900:focus{color:#3c366b}.xl\:focus\:text-purple-100:focus{color:#faf5ff}.xl\:focus\:text-purple-200:focus{color:#e9d8fd}.xl\:focus\:text-purple-300:focus{color:#d6bcfa}.xl\:focus\:text-purple-400:focus{color:#b794f4}.xl\:focus\:text-purple-500:focus{color:#9f7aea}.xl\:focus\:text-purple-600:focus{color:#805ad5}.xl\:focus\:text-purple-700:focus{color:#6b46c1}.xl\:focus\:text-purple-800:focus{color:#553c9a}.xl\:focus\:text-purple-900:focus{color:#44337a}.xl\:focus\:text-pink-100:focus{color:#fff5f7}.xl\:focus\:text-pink-200:focus{color:#fed7e2}.xl\:focus\:text-pink-300:focus{color:#fbb6ce}.xl\:focus\:text-pink-400:focus{color:#f687b3}.xl\:focus\:text-pink-500:focus{color:#ed64a6}.xl\:focus\:text-pink-600:focus{color:#d53f8c}.xl\:focus\:text-pink-700:focus{color:#b83280}.xl\:focus\:text-pink-800:focus{color:#97266d}.xl\:focus\:text-pink-900:focus{color:#702459}.xl\:text-xs{font-size:.75rem}.xl\:text-sm{font-size:.875rem}.xl\:text-base{font-size:1rem}.xl\:text-lg{font-size:1.125rem}.xl\:text-xl{font-size:1.25rem}.xl\:text-2xl{font-size:1.5rem}.xl\:text-3xl{font-size:1.875rem}.xl\:text-4xl{font-size:2.25rem}.xl\:text-5xl{font-size:3rem}.xl\:text-6xl{font-size:4rem}.xl\:italic{font-style:italic}.xl\:not-italic{font-style:normal}.xl\:uppercase{text-transform:uppercase}.xl\:lowercase{text-transform:lowercase}.xl\:capitalize{text-transform:capitalize}.xl\:normal-case{text-transform:none}.xl\:underline{text-decoration:underline}.xl\:line-through{text-decoration:line-through}.xl\:no-underline{text-decoration:none}.xl\:hover\:underline:hover{text-decoration:underline}.xl\:hover\:line-through:hover{text-decoration:line-through}.xl\:hover\:no-underline:hover{text-decoration:none}.xl\:focus\:underline:focus{text-decoration:underline}.xl\:focus\:line-through:focus{text-decoration:line-through}.xl\:focus\:no-underline:focus{text-decoration:none}.xl\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.xl\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.xl\:tracking-tighter{letter-spacing:-.05em}.xl\:tracking-tight{letter-spacing:-.025em}.xl\:tracking-normal{letter-spacing:0}.xl\:tracking-wide{letter-spacing:.025em}.xl\:tracking-wider{letter-spacing:.05em}.xl\:tracking-widest{letter-spacing:.1em}.xl\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.xl\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.xl\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.xl\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.xl\:align-baseline{vertical-align:baseline}.xl\:align-top{vertical-align:top}.xl\:align-middle{vertical-align:middle}.xl\:align-bottom{vertical-align:bottom}.xl\:align-text-top{vertical-align:text-top}.xl\:align-text-bottom{vertical-align:text-bottom}.xl\:visible{visibility:visible}.xl\:invisible{visibility:hidden}.xl\:whitespace-normal{white-space:normal}.xl\:whitespace-no-wrap{white-space:nowrap}.xl\:whitespace-pre{white-space:pre}.xl\:whitespace-pre-line{white-space:pre-line}.xl\:whitespace-pre-wrap{white-space:pre-wrap}.xl\:break-normal{overflow-wrap:normal;word-break:normal}.xl\:break-words{overflow-wrap:break-word}.xl\:break-all{word-break:break-all}.xl\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xl\:w-0{width:0}.xl\:w-1{width:.25rem}.xl\:w-2{width:.5rem}.xl\:w-3{width:.75rem}.xl\:w-4{width:1rem}.xl\:w-5{width:1.25rem}.xl\:w-6{width:1.5rem}.xl\:w-8{width:2rem}.xl\:w-10{width:2.5rem}.xl\:w-12{width:3rem}.xl\:w-16{width:4rem}.xl\:w-20{width:5rem}.xl\:w-24{width:6rem}.xl\:w-32{width:8rem}.xl\:w-40{width:10rem}.xl\:w-48{width:12rem}.xl\:w-56{width:14rem}.xl\:w-64{width:16rem}.xl\:w-auto{width:auto}.xl\:w-px{width:1px}.xl\:w-1\/2{width:50%}.xl\:w-1\/3{width:33.33333%}.xl\:w-2\/3{width:66.66667%}.xl\:w-1\/4{width:25%}.xl\:w-2\/4{width:50%}.xl\:w-3\/4{width:75%}.xl\:w-1\/5{width:20%}.xl\:w-2\/5{width:40%}.xl\:w-3\/5{width:60%}.xl\:w-4\/5{width:80%}.xl\:w-1\/6{width:16.66667%}.xl\:w-2\/6{width:33.33333%}.xl\:w-3\/6{width:50%}.xl\:w-4\/6{width:66.66667%}.xl\:w-5\/6{width:83.33333%}.xl\:w-1\/12{width:8.33333%}.xl\:w-2\/12{width:16.66667%}.xl\:w-3\/12{width:25%}.xl\:w-4\/12{width:33.33333%}.xl\:w-5\/12{width:41.66667%}.xl\:w-6\/12{width:50%}.xl\:w-7\/12{width:58.33333%}.xl\:w-8\/12{width:66.66667%}.xl\:w-9\/12{width:75%}.xl\:w-10\/12{width:83.33333%}.xl\:w-11\/12{width:91.66667%}.xl\:w-full{width:100%}.xl\:w-screen{width:100vw}.xl\:z-0{z-index:0}.xl\:z-10{z-index:10}.xl\:z-20{z-index:20}.xl\:z-30{z-index:30}.xl\:z-40{z-index:40}.xl\:z-50{z-index:50}.xl\:z-auto{z-index:auto}} diff --git a/databases/EN_Constraint.pdf b/databases/EN_Constraint.pdf new file mode 100644 index 000000000..b26a1808a Binary files /dev/null and b/databases/EN_Constraint.pdf differ diff --git a/databases/ER.pptx b/databases/ER.pptx new file mode 100644 index 000000000..e4c051f1b Binary files /dev/null and b/databases/ER.pptx differ diff --git a/databases/ERD2023.pptx b/databases/ERD2023.pptx new file mode 100644 index 000000000..8cb808941 Binary files /dev/null and b/databases/ERD2023.pptx differ diff --git a/databases/ERDsummary.pdf b/databases/ERDsummary.pdf new file mode 100644 index 000000000..65bc78722 Binary files /dev/null and b/databases/ERDsummary.pdf differ diff --git a/databases/Practice01.pdf b/databases/Practice01.pdf new file mode 100644 index 000000000..6024be584 Binary files /dev/null and b/databases/Practice01.pdf differ diff --git a/databases/Practice02.pdf b/databases/Practice02.pdf new file mode 100644 index 000000000..38bf490eb Binary files /dev/null and b/databases/Practice02.pdf differ diff --git a/databases/Practice03.pdf b/databases/Practice03.pdf new file mode 100644 index 000000000..ed6cc5509 Binary files /dev/null and b/databases/Practice03.pdf differ diff --git a/databases/Practice04.pdf b/databases/Practice04.pdf new file mode 100644 index 000000000..162ee12da Binary files /dev/null and b/databases/Practice04.pdf differ diff --git a/databases/Practice05.pdf b/databases/Practice05.pdf new file mode 100644 index 000000000..dc5d67a51 Binary files /dev/null and b/databases/Practice05.pdf differ diff --git a/databases/Practice06.pdf b/databases/Practice06.pdf new file mode 100644 index 000000000..57c87796c Binary files /dev/null and b/databases/Practice06.pdf differ diff --git a/databases/SQL1.SQL b/databases/SQL1.SQL new file mode 100644 index 000000000..d3f750dd0 --- /dev/null +++ b/databases/SQL1.SQL @@ -0,0 +1,24 @@ + +set echo off +set verify off +alter session set NLS_DATE_FORMAT='2021-10-17'; +set serveroutput on +set feedback off + +prompt + +prompt +prompt +prompt + +prompt +prompt +prompt + +prompt \ No newline at end of file diff --git a/databases/bfa.JPG b/databases/bfa.JPG new file mode 100644 index 000000000..283743b2c Binary files /dev/null and b/databases/bfa.JPG differ diff --git a/databases/dfd.pdf b/databases/dfd.pdf new file mode 100644 index 000000000..5f4bd41d5 Binary files /dev/null and b/databases/dfd.pdf differ diff --git a/databases/docx-template.docx b/databases/docx-template.docx new file mode 100644 index 000000000..6c8977fee Binary files /dev/null and b/databases/docx-template.docx differ diff --git a/databases/exercises.sql b/databases/exercises.sql new file mode 100644 index 000000000..e7216f6f6 --- /dev/null +++ b/databases/exercises.sql @@ -0,0 +1,20 @@ +drop table cars; +drop table persons; +drop sequence carseq; +create table persons as +select nev name, szemelyi_szam personID, sysdate-trunc(dbms_random.value(1,30000)) birthdate from oktatas.szemelyek; +create sequence carseq start with 10000 increment by 1; +create table cars as +select carseq.nextval carID, personID, + case trunc(dbms_random.value(1,10)) + when 1 then 'Oltcit' + when 2 then 'Skoda' + when 3 then 'Lada' + when 4 then 'Trabant' + when 5 then 'Wartburg' + when 6 then 'Zaporozsec' + when 7 then 'Moszkvics' + when 8 then 'Polski Fiat' + else 'Zastava' + end manufacturer +from (select personID from persons order by dbms_random.value FETCH FIRST 3000 ROWS ONLY); \ No newline at end of file diff --git a/databases/gy2_hallgatoi_utmutato_ENG_2021.pdf b/databases/gy2_hallgatoi_utmutato_ENG_2021.pdf new file mode 100644 index 000000000..6c9a89cd1 Binary files /dev/null and b/databases/gy2_hallgatoi_utmutato_ENG_2021.pdf differ diff --git a/databases/gy2_hallgatoi_utmutato_eng_1.pdf b/databases/gy2_hallgatoi_utmutato_eng_1.pdf new file mode 100644 index 000000000..04b1a433f Binary files /dev/null and b/databases/gy2_hallgatoi_utmutato_eng_1.pdf differ diff --git a/databases/index.md b/databases/index.md new file mode 100644 index 000000000..3f412bcc3 --- /dev/null +++ b/databases/index.md @@ -0,0 +1,387 @@ +--- +layout: page +title: Databases (VITMAB04) +--- + +## 2024 + +## Facts and Learning Tips + +Databases will be one of the hardest subjects you have encountered during your studies. Although decades of experience suggests that the only thing needed to pass (with flying colors) is willing to obtain the knowledge presented to you during the course. Trust me, the knowledge you get here is basically a full-stack slice of _THE_ system engineering skillset, which can be directly applied in the industry. During the semester, me and my colleagues attemp to give you a profound knowledge of both practice and theory. This includes the tech skills introduced during lab sessions, but dives down all the way to database theory including high-level structural modeling, physical storage considerations, algorithms and detailed answers for many "why"-s. So now I'm giving you the "how": some tips and best practices for being a successful student of Databases: + + - Study every single week. For each lecture, practice and lab, you should be familiar with the whole material of the lectures presented to you at that given point in time. You also have to be familiar with the relevant sections of the reference book. Do not be surprised, if the quiz or midterm or exam asks for knowledge not discussed in class, but discussed by the reference book. During (self-)studying, your instructors are open to discussion via e-mail in case you don't understand something. + - Knowledge does not mean being able to recite the material word-by-word. Reciting the material word-by-word is completely useless in this course, as it is not what makes a good engineer. + - Knowledge means having a deep understanding of the material, seeing the connections between its different parts, and knowing the answer for all "why"-s. This knowledge can be obtained by trying to explain the material at home, in front of the mirror, to your teddy bear, your friend or roommate: Do this out loud, and while doing so, you will hear yourself and sense which parts are missing and have to be worked on. + - Knowledge also means being able to _apply_ your knowledge. For this, doing all the tutorial exercises, doing the whole exercise book, and checking it with your tutorial instructor is a very good way. + - It is OK to be wrong. It is a valuable and necessary step in any learning process. + - It is OK to ask. As being wrong is OK, don't be afraid to. All your questions will be appreciated! Ask during lectures, ask during tutorials, ask during labs or ask via e-mail: We are there to help and answer. Actually, that is why we're there. + - It is not okay to pretend you understand while you do not. Feel comfortable to stop the class at any time and ask any question. There is no such thing as dumb question. All questions are valuable! + - As the goal is a profound and practical knowledge, the tests will contain exercises for checking this. Test exercises might greatly differ from the ones in class, but will need the same skillset and knowledge. + - A prerequisite of this course is to speak, comprehend and read English fluently. If you feel you are not there yet, do drop the course, spend the same amount of time improving your English skills, and come back next fall. Background: This course is the so-called "mirror course" of the Hungarian Databases course. You will get the same degree eventually, so you have to meet the same requirements to pass Databases. Hungarian students speak Hungarian fluently, so you have to speak English fluently to avoid language skills from being a barrier of your Databases studies. + +## Material + +[Reference book](principles-of-database-and-knowledge-base-systems-volume-1-1.pdf). This is the book you have to self-study at home besides the class material. The relevant sections are defined below. + +PPT presentations: + + - Intro (read this if you missed it in the first class): [HERE](intro.pdf) + - ER: [Material here](ERD2023.pptx) + - Physical organization, indexing structures subtopic: [Material here](indexing_structures.pptx) + - Query optimization: [Material here](optimization.pptx) + - Normalization: [Material here](normalization.pptx) + - Transaction management: [Material here](transactions_2023.pptx) + +The rest of the topics do not and will not have PPTs. (This is a choice of the lecturer.) For these and basically all topics, use the reference book and more preferably your own notes made during lecture. (THe book does not contain the query optimization topic.) + +[Exercise book](http://db.bme.hu/~eros/exercises.pdf). If you do every single exercise, and discuss your questions with your instructors, your chances of getting a good grade will significantly improve (as decades of experience suggests). + +[Here](https://bmeedu-my.sharepoint.com/:f:/g/personal/eros_levente_vik_bme_hu/Em7xqripQdZGuQMJO00-B6kBGQhwykK1zm-46x_VYMOByw?e=QP6BgX) are the recordings of last year's Databases lectures and tutorials. The ones relevant for you are the ones under my name. "Databases, Lecture n" is the nth lecture, "Databases, Practice m" is the m tutorial session. Also, there is a "Databases, 7,5th Lecture". Don't miss that one. Note: These videos only cover like half of the complete material! + +## Lectures + +Lectures are held every Monday from 16:15 to 17:45. Location: IE.220 + +On week 1 there will be an extra lecture on Thursday, september 5th at 16:15, in room IE.220. + +On week 4 there will be an extra lecture on Thursday, september 26th at 16:15, in room IE.220. + +All further lectures will be on Monday. + +Topics and corresponding sections in the reference book: + + - ER modeling: p32-42. Notes for the ER modeling chapter of the book: + + - disregard p33/paragraph 2., as we don't talk about object-oriented data modeling + + - The book uses the term "relationship set" the same way as our course does. However, the book uses the word "relationship" as a synonym of "relationship type", which describes which entity sets are connected by the given relationship type. According to the book, the instances of a relationship (type) are all the exact representations of the given relationship type, which are relationship sets, where each relationship set contains different connections among the entities of the connected entity sets. This terminology of the book is a very nice, mathematically fair and consistent. However, in this class, we will use an rather lightweight terminology, where: + + - a relationship denotes an element of a relationship set, i.e. a relationship defines a connection among a pair of (or set of) entities (i.e. entity set elements) + + - a relationship set is the set of all relationships of the same semantics. There is only a single relationship set of the given semantics, and its elements (the relationships) may change by time + + - So whenever the book refers to a "relationship", it means "relationship set" in the terminology of our course. Some exact cases (not all of them) will be mentioned below. + + - As a consequence of the above, on p36, the first paragraph under section Relationships is adjusted to the terminology used in this course as follows: "A relationship set among entity sets is an ordered list of entity sets. A particular entity set may appear more than once on the list. If there is relationship R among entity sets E1, E2,..., Ek, then the current instance of R (i.e. the current relationship) is a set of k-tuples. Each k-tuple (e1,e2,...,ek) in relationship set R implies that entities e1,e2,...,ek, where e1 is in set E1, e2 is in set E2, and so on, stand in relationship to each other as group. The most common case, by far, is where k=2, but lists of three or more entity sets are sometimes related." + + - In Example 2.4 MOTHER_OF is a relationship set itself, not a relationship. (p1,p2) is a relationship (instance). + + - In section "Entity-Relationship Diagrams", under 3, "Diamonds represent relationship types" according to our terminology. + + - When the book writes about "Functionality of Relationships", according to our terminology, it writes about "Functionality of Relationship Sets" + + - Also note that "isa relationship" is separate from the notion of "relationship", as an isa relationship is defined between entity sets and not entities. + + - Note that the concept described in the "Borrowed key attributes" is the same as that of weak entity sets, except for the final example of the section about multiple citizenships: the toolset used in this course does not directly support modeling such cases. + - relational data model: p43-65 + - On page 49, in point 4 (top of page) k=1 that is, there is only a single entity set on the 'many' side of the relationship set, as we only define cardinality (functionality) for binary relationship sets. In conclusion when mapping a many-to-one (binary) relationship set to a relational scheme, the key of the relational scheme will be the key of the entity set on the 'many' side. + - Physical organization: p294-330 (Section 6.7 is not needed) + - skip the part from section "Variable-Length Records" on p300, all the way to the beginning of section 6.2 on p304 (Section 6.2 is needed) + - skip the part from section titled "Sorted Files with Pinned Records" on p318, all the way to the beginning of Section 6.5 on p321 (Aection 6.5 is needed) + - you can read Section 6.13 (p358) for fun (will not be part of midterm or exam) + - you might want to read Section 6.8, but in lecture we will have a more concise discussion on this (and we will only use dense indices for second indices) + - B*-tree example [here](bfa.JPG) + - Query optimization: See PPT + - Transaction management: p467-543 + - Section 9.6 is not needed, subsection "A Conservative Protocol" starting on page 512 is not needed, but the main idea from it (requesting all needed locks at once) is needed. + - Design theory: p376-390 plus section 7.6 + - p390 is needed until the section Minimal covers (which is not needed) + - please note that the lecture covers more of this topic than the book. + +### Instructors + + - [Levente Erős](https://db.bme.hu/~eros/index_en.html), eros -AT- db.bme.hu + - [Ruba AlMahasneh](https://www.tmit.bme.hu/node/3249), ruba.mahasneh -AT- db.bme.hu + +### Evaluation of results + +A single midterm test will be written. Passing the midterm test is a requirement for the signature. One retake is possible in case of failure on the midterm test. + +Furthermore, there will be a quiz (10 minutes) in class after each (sub)topic. You will be notified about the next quiz in the previous lecture. Quizzes are discussed right away (5 minutes). Quizzes and their discussion take 15 minutes at maximum. Further discussion is possible after class or via e-mail. The purpose of quizzes is to serve as a feedback for you on how clear you are with the material and how much you are on the good path on passing the midterm test or exam. Quizzes act as a "progress bar" if you like. Quizzes generally do not influence the signature or the final mark, but might convince me to or not to round your final mark up in case you are in between marks. + +Your final grade is calculated as follows: For each lab, you get a lab grade, depending on the grade you got for your work from the evaluator, and your classwork in lab. Note: Your grade for each lab will be assigned by your lab instructor. The evaluator only grades the work you handed in. The lab instructor has the right to give a different lab grade. + +You will get 4 lab grades in total (for the labs, except for the Team Workshop), which will be averaged (let's call this lab average L). Each of your lab grades must be greater than or equal to 2 to get the signature. A single lab can be retaken in case of failure. If you fail 2 labs or more, you will not get the signature. Failing a lab entry test makes you fail the given lab. + +The prerequisites of the signature are thus: Passing the midterm (or the midterm retake), and passing all labs. + +If you have the signature, you can take the exam. You also get a grade for your exam. Let E denote this grade. E must be greater than or equal to 2. + +Your final grade, registered in Neptun will be 0.6E+0.4L. + +Your performance on the Team workshop might increase your final mark. + +## Tutorials (practices) + +Tutorials are held on Thursdays, from 16:15 to 17:45 in room IE.220 (take the triple elevator to the 2nd floor), according to the following schedule. You should prepare for these classes, from all preceding lectures. + +### Instructor + + - [János Varga](https://www.linkedin.com/in/jvarga84), real.janos -at- gmail.com + +### Material and dates + +Please make sure you have this open at the beginning of each practice. + +Topic|Date|Exercise sheet +--|--|-- +LECTURE|Sep. 4|- +ER Modeling|Sep. 12|[HERE](Practice01.pdf) +Relational Queries|Sep. 19|[HERE](practice_rel_2022.pdf) +LECTURE|Sep. 26|- +Physical Storage|Oct. 10|[HERE](practice_stor.pdf) +Query Optimization|Oct. 24|[HERE](practice_opti.pdf) +Normalization|Nov. 7|[HERE](practice_norm.pdf) +Transaction Management|Nov. 28|[HERE](practice_tran.pdf) + +## Laboratories + +### Instructors and contact + +Lab responsible: + - Ruba Mahasneh, ruba.mahasneh -AT- db.bme.hu + +Lab instructors (name, e-mail, lab group): + - Ana Silkin, ana.silkin -AT- edu.bme.hu, cs16a-1 + - Csaba Hegedűs, hegeduscs -AT- edu.bme.hu, cs16a-1 + - Karam Abu Judom, karam.abujudom@edu.bme.hu, cs16a-2 + - Balkis Karoui, balkis.karoui@edu.bme.hu, cs16a-3 + - Klevis Imeri, klevis.imeri@edu.bme.hu, cs16a-2 + - Hossein Mousavi, mousavi.hossein@edu.bme.hu, cs16a-3 + +### Place of labs + +Below you can find the lab group and the room to which you should go for the labs. All rooms are located on the 4th floor of building R. + +Neptun ID|Lab group|Room +AGYM2S|cs16a-3|P +B6O03N|cs16a-2|O +B7U9YB|cs16a-3|P +B8RV40|cs16a-3|P +BG6WBF|cs16a-1|C +BKX9O1|cs16a-3|P +CEUQEJ|cs16a-2|O +CVDI73|cs16a-1|C +DUZJ06|cs16a-3|P +ENAIVQ|cs16a-3|P +F2VK4R|cs16a-1|C +FGLC9I|cs16a-2|O +FPQV85|cs16a-2|O +FSL7CU|cs16a-2|C +FUFL7C|cs16a-2|O +FWBC4A|cs16a-2|O +G4O8WB|cs16a-3|O +G4QJOR|cs16a-2|O +GQ1UJJ|cs16a-3|P +HE6HPK|cs16a-2|O +HFPDRL|cs16a-3|P +HW9NCU|cs16a-3|P +HZKYNF|cs16a-3|P +I31GPS|cs16a-1|C +IJV1HI|cs16a-2|O +IP5M0E|cs16a-1|C +IXF6DR|cs16a-1|C +IZHXR5|cs16a-2|O +JQUGGW|cs16a-1|C +K1TO74|cs16a-2|O +K20UXP|cs16a-3|P +KCP1K1|cs16a-3|P +KJD0JB|cs16a-2|O +M5UG9O|cs16a-2|O +N88G93|cs16a-2|O +NT9WUQ|cs16a-2|O +OI6VE6|cs16a-3|P +PDEIHU|cs16a-3|P +QDJK3I|cs16a-3|P +QN88Y3|cs16a-1|C +QZFOVG|cs16a-2|O +R3RJVD|cs16a-2|O +RQ74QO|cs16a-3|P +S0I2UA|cs16a-3|P +SDR1AO|cs16a-1|C +TDQWFF|cs16a-1|C +TFBB32|cs16a-3|P +VIUIQ5|cs16a-2|O +W0SKEL|cs16a-1|C +WYIH63|cs16a-2|O +X3L23S|cs16a-2|O +XB4NSE|cs16a-1|C +XGBLQQ|cs16a-2|O +YCVDZ2|cs16a-3|P +YDAQI0|cs16a-3|P +YLOA58|cs16a-3|P +YNY323|cs16a-2|O +ZTKDAD|cs16a-3|P + +### Time and date of labs + +Each lab is on Thursday, from 16:15 to 17:45, according to the following schedule: + +Topic|Date +--|-- +Oracle|Oct. 3 +SQL I|Oct. 17 +SQL II|Oct. 31 +SQL III|Nov. 14 +Team Workshop|TODO + +The Team workshop will be in room TODO + +### General information + +You should arrive at the lab prepared from the course material. At the beginning of each lab, an entry test will be written which is necessary for completing the given lab practice. The course material can be found below for each topic, separately. + +You will start solving the exercises during class. The amount of exercises that you get can be solved within a single class if you are prepared. Once finished, you can upload your solutions in a predefined format (see below) in the lab portal, which is [here](https://fecske.db.bme.hu). You always have to submit a lab report and in case of some labs, additional files too (see below). If you can’t finish the exercises during class, you can finish them at the Students’ Computer Center (HSZK, floor 4, building R), or at home, but 48 hours after the beginning of the given lab, your solution has to be uploaded. The deadline is thus, Saturday, 16:15. + +The labs are equipped with the hardware and software needed for the classes. Using your own computers during labs is allowed, although we cannot give support for installing/configuring or troubleshooting the necessary tools on your laptops. + +### Lab report requirements + +Each student has to submit a unique lab report about the work performed in the lab, which contains the unique solutions of the given student along with the underlying logic of the solutions. The lab report should thus, be a high-quality technical documentation of the work performed, and the evaluator of the report should be able to trace the student's chain of thoughts that led to the solution. +You can use [this](docx-template.docx) template for your lab report. + +1. **Not meeting the below requirements might yield in score deduction or failing the lab.** +2. The header of the lab report should be precisely filled out. +3. The exercise text should not be in the lab report. +4. Only include the numbers of those exercises that you have solved. +5. References (link, images, source code): + - Put all the references to the footer (if there are references). To avoid plagiarism, you should indice the source of **everything** that is not your own product (e.g.: Stackoverflow). + - Images should be placed close (above or under) the eplanation. If this is not possible, give them a number and reference them by this number + - Only use easily readable, good quality pictures in the document. + - Source code or text output -- if needed for the documentation -- must be included as text content. Screenshots in this case are not allowed. +6. Explanation: + - Do not include unexplained source codes or images without explanation. Evaluators will account these as non-existent. + - In case of an image, describe what can be seen on the image. + - In case of code, explain what the code does. + - In the explanation, include how you got to the solution! + - If you tried something out that didn't work, you can document it, as it was part of the way to the solution. + - Your goal is to convince the evaluator about the correctness of your solution. Thus, pay attention to your spelling, and professionalism, phrase your sentences so that they are easily understandable. THe evaluator should be able to reproduce your work based on your documentation. + - The correctness of your solution shall be proven by testing, as without this the evaluator might think you handed in a solution that you haven't tried out. +7. You should submit a PDF file from which it is easy to retrieve (copy) the textual contents. + +### Software you will need + + - [Oracle SQL Developer 4.2.0](https://db.bme.hu/r/sqldeveloper/sqldeveloper-4.2.0.17.089.1709-x64.zip). To run it: Unpack it, and execute sqldeveloper\sqldeveloper.exe. If it does not work, then run sqldeveloper\sqldeveloper\bin\sqldeveloper.bat. This is for Win64. You’ll need JRE to run this. + - For other platforms, you can download the same version of SQL Developer [here](http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html). You’ll need to install the appropriate Java 8 JDK to run this. Attention! On Oracle's website, SQL Developer 18.1 stable can be downloaded since April 5th 2018. However, in the lab we will use version 4.2. We are unaware of any significant issues caused by the differences between versions, but should there be any issue due to this, we might not know the solution. So please, use version 4.2 + +The work environment is provided and supported in HSZK. + +### Network settings for home + +SQL Developer connection: + + - Hostname: rapid.eik.bme.hu + - Port: 1521 + - SID: szglab + +### Useful material + + - [Preface of the course material](preface.pdf) + - [UNIX summary](unix.pdf) + - [Oracle SQL Reference](http://docs.oracle.com/database/121/SQLRF/toc.htm) + - [Oracle SQL quick reference](http://docs.oracle.com/database/121/SQLQR/toc.htm) + - [ER cheat sheet](ERDsummary.pdf) + - [LucidChart](https://www.lucidchart.com/) + +### Lab 1, Oracle + +Please prepare from the following PDF: + + - [Course material](oracle.pdf) + +You should upload a single PDF file to the [lab portal](http://fecske.db.bme.hu), containing your report. The name of the file should be NEPTUN-1-c16.pdf, where you should substitute NEPTUN with your actual NEPTUN code. + +Below is the SQL code that has to be executed after solving exercise 5. + +```sql +------------------------------------------------- +-- SQL code to be executed in the 5th exercise +------------------------------------------------- +column grantor format a8; +column grantee format a8; +column table_name format a20; +column privilege format a20; +select grantor + , grantee + , table_name + , privilege + , initcap(grantable) grant_opt + from all_tab_privs + where grantor = user + or grantee = user + order by grantor, grantee, table_name, privilege +; +``` + +### Labs 2, 3, and 4: SQL1, SQL2, SQL3 + +The material for the SQL labs (SQL1, SQL2, and SQL3) can be found [here](sql-2024.pdf). The appendix about SQL constraints is [here](EN_Constraint.pdf) + + - For the first SQL lab, you should be prepared from table definition, data manipulation statements and from the ER modeling and ER->relational mapping chapters of the Databases course. + - For the second SQL lab, you should be prepared from SQL queries. + - For the third SQL lab, you should be prepared from the entire SQL guide. + +For the requirements of completing this lab, and for some SQL tips, read [this](gy2_hallgatoi_utmutato_ENG_2021.pdf) Students’ guide! + +The skeleton of the script to be handed in is [here](https://db.bme.hu/~eros/SKELETON.sql), while [here](https://db.bme.hu/r/sql/sql123-beadando-generator.html) is a page that helps you create the SQL file if you don’t do it manually. + +USING THE GENERATOR PAGE IS PREFERRED. PLEASE NOTE THAT IF YOUR SCRIPT DOES NOT GENERATE A WELL-FORMED XML OUTPUT, YOU WILL FAIL. + +To check whether your output is well-formatted, do the following: + + - clean your script output in SQL Developer (rubber icon) + - run your SQL script using F5 + - save the output to an XML file + - open your XML file with your browser. There if you see the hierarchical structure, and the different tree nodes can be extended and collapsed then it is well-formatted. If you need help with this versification, reach out to your instructors. + +SQL 1 sample file is [here](SQL1.SQL) + +### Lab 5, Team workshop + +Before you join this workshop, make sure you are familiar with all of the material already +covered in the lectures, tutorials and previous labs. Exercises will only be shared with you +during the lab. + +Also, read [THIS](dfd.pdf) material about data flow diagrams. + +Are you ready for a challenge? + +Choose your teammates (3 or 4), then the first two teams to deliver the correct solution will be +entitled to upgrade their final grade. + +The aim of this workshop is to facilitate discussions and activities to explore ER modeling by +solving two real-life use cases. The only way you can claim the extra marks is by finishing the +two case studies within the lab time. The first 10 minutes will be dedicated to the instructors +explaining (going over) the use cases and to sharing the link were you can download them. + +Then the competition beings! + +Note: All the teams will be able to view the solutions, as they will be posted on the portal after +the lecture. + +## SQL exercises + +In order for you to be able to try writing SQL statements before the lab, and gain some practical knowledge, I made for you a script and some exercises you can do before the labs. + +To initialize the environment, run [this](https://www.db.bme.hu/databases/exercises.sql) script in SQL Developer. This creates two tables and fills them up with data you can work on. Then, query the following: + +- The name of each person. +- People and cars belonging to them. +- People without cars. +- Car types and number of owners of that type. +- People and number of cars they have in descending order of number of owned cars. +- People and number of cars they have, including those without a car (i.e. having 0 cars). Rows should be ordered by the number of cars owned, in ascending order. + +Create a table storing which person drove which car (not necessarily their own) and when. + +Insert example data into this newly created table. Try to insert data belonging to a nonexistent person or car. Do you get an error message? If not, create the appropriate constraints, which you have not created yet. + +Have fun! + +## Midterm + +November 12th from 8:15, location: TODO + +## Retakes + +Midterm retake: November 26th from 8:15, location: TODO diff --git a/databases/indexing_structures.pptx b/databases/indexing_structures.pptx new file mode 100644 index 000000000..80307172d Binary files /dev/null and b/databases/indexing_structures.pptx differ diff --git a/databases/intro.pdf b/databases/intro.pdf new file mode 100644 index 000000000..ca802aedd Binary files /dev/null and b/databases/intro.pdf differ diff --git a/databases/normalization.pptx b/databases/normalization.pptx new file mode 100644 index 000000000..6fca9d726 Binary files /dev/null and b/databases/normalization.pptx differ diff --git a/databases/optimization.pdf b/databases/optimization.pdf new file mode 100644 index 000000000..f09406054 Binary files /dev/null and b/databases/optimization.pdf differ diff --git a/databases/optimization.pptx b/databases/optimization.pptx new file mode 100644 index 000000000..5bb634c6d Binary files /dev/null and b/databases/optimization.pptx differ diff --git a/databases/optimization2021.pdf b/databases/optimization2021.pdf new file mode 100644 index 000000000..9f262a74a Binary files /dev/null and b/databases/optimization2021.pdf differ diff --git a/databases/oracle.pdf b/databases/oracle.pdf new file mode 100644 index 000000000..3754570fd Binary files /dev/null and b/databases/oracle.pdf differ diff --git a/databases/practice_er1.pdf b/databases/practice_er1.pdf new file mode 100644 index 000000000..0c5c2dcb2 Binary files /dev/null and b/databases/practice_er1.pdf differ diff --git a/databases/practice_er2.pdf b/databases/practice_er2.pdf new file mode 100644 index 000000000..17bdfe85e Binary files /dev/null and b/databases/practice_er2.pdf differ diff --git a/databases/practice_er_2022.pdf b/databases/practice_er_2022.pdf new file mode 100644 index 000000000..74f423521 Binary files /dev/null and b/databases/practice_er_2022.pdf differ diff --git a/databases/practice_norm.pdf b/databases/practice_norm.pdf new file mode 100644 index 000000000..128deff1c Binary files /dev/null and b/databases/practice_norm.pdf differ diff --git a/databases/practice_opti.pdf b/databases/practice_opti.pdf new file mode 100644 index 000000000..c374b5bcf Binary files /dev/null and b/databases/practice_opti.pdf differ diff --git a/databases/practice_ra.pdf b/databases/practice_ra.pdf new file mode 100644 index 000000000..beb1b3571 Binary files /dev/null and b/databases/practice_ra.pdf differ diff --git a/databases/practice_ra2.pdf b/databases/practice_ra2.pdf new file mode 100644 index 000000000..69a564a29 Binary files /dev/null and b/databases/practice_ra2.pdf differ diff --git a/databases/practice_rel_2022.pdf b/databases/practice_rel_2022.pdf new file mode 100644 index 000000000..6a63b89e3 Binary files /dev/null and b/databases/practice_rel_2022.pdf differ diff --git a/databases/practice_stor.pdf b/databases/practice_stor.pdf new file mode 100644 index 000000000..31ddad20b Binary files /dev/null and b/databases/practice_stor.pdf differ diff --git a/databases/practice_tran.pdf b/databases/practice_tran.pdf new file mode 100644 index 000000000..1486c0851 Binary files /dev/null and b/databases/practice_tran.pdf differ diff --git a/databases/preface.pdf b/databases/preface.pdf new file mode 100644 index 000000000..766921303 Binary files /dev/null and b/databases/preface.pdf differ diff --git a/databases/principles-of-database-and-knowledge-base-systems-volume-1-1.pdf b/databases/principles-of-database-and-knowledge-base-systems-volume-1-1.pdf new file mode 100644 index 000000000..f7c2a3078 Binary files /dev/null and b/databases/principles-of-database-and-knowledge-base-systems-volume-1-1.pdf differ diff --git a/databases/sql-2024.pdf b/databases/sql-2024.pdf new file mode 100644 index 000000000..e801aec15 Binary files /dev/null and b/databases/sql-2024.pdf differ diff --git a/databases/sql.pdf b/databases/sql.pdf new file mode 100644 index 000000000..b88cbb3c7 Binary files /dev/null and b/databases/sql.pdf differ diff --git a/databases/transactions_2023.pptx b/databases/transactions_2023.pptx new file mode 100644 index 000000000..1ad259d50 Binary files /dev/null and b/databases/transactions_2023.pptx differ diff --git a/databases/tw.pdf b/databases/tw.pdf new file mode 100644 index 000000000..d377c67c0 Binary files /dev/null and b/databases/tw.pdf differ diff --git a/databases/unix.pdf b/databases/unix.pdf new file mode 100644 index 000000000..0a6cd7ea1 Binary files /dev/null and b/databases/unix.pdf differ diff --git a/databases/workshopsolution.pdf b/databases/workshopsolution.pdf new file mode 100644 index 000000000..9f0a3f1d9 Binary files /dev/null and b/databases/workshopsolution.pdf differ diff --git a/halozati-adatb/Minta.docx b/halozati-adatb/Minta.docx new file mode 100644 index 000000000..adfe68209 Binary files /dev/null and b/halozati-adatb/Minta.docx differ diff --git a/halozati-adatb/index.md b/halozati-adatb/index.md new file mode 100644 index 000000000..f375a47fd --- /dev/null +++ b/halozati-adatb/index.md @@ -0,0 +1,58 @@ +--- +layout: page +title: Hálózatba kapcsolt adatbázisok (VITMM100) +--- + + +## 2024. tavaszi félév + +Kötelező tárgy az MSc gazdaságinformatikus szak hallgatói számára. + +A tantárgyi adatlap: [VITMM100](https://portal.vik.bme.hu/kepzes/targyak/VITMM100/) + +A tárgy szorosan ráépül az Adatbázisok ([VITMAB04](https://portal.vik.bme.hu/kepzes/targyak/VITMA004/), korábban [VITMAB00](https://portal.vik.bme.hu/kepzes/targyak/VITMAB00/), ill. még korábban [VITMA311](https://portal.vik.bme.hu/kepzes/targyak/VITMA311/)) c. tárgy anyagára, ezért csak azok vegyék fel, akik a félév elejére már ténylegesen elsajátították a kapcsolódó elméleti alapokat. A tantárgy keretében ezek aktív alkalmazására és továbbfejlesztésére kerül sor. + +### Az előadások helye, ideje + +Hétfő 14.15-16.00 valamint páros oktatási heteken szerda 8.15-10.00, mindkét napon a QFB08-ban. + +### Nagyfeladat + +Kiadása a 2. oktatási héten, beadása a 9. oktatási héten esedékes. A megoldásához használandó template file és feladatleírás [innen](Minta.docx) tölthető le. + +### Nagyzárthelyi, védés + +A 13. oktatási héten, május 15-én 18:15-től a QBF12-ben. A zárthelyi anyagát képezi az addig elhangzó előadások anyagán túl a relációs sématervezés is (ld. Adatbázisok jegyzet 9. fejezet a 9.2.8 kivételével). Az alábbi slideokból nem képezi a ZH/védés anyagát az, amire az előadásokon nem jutott idő. PZH: pótlási héten, máj. 27. hétfőn 10:15-től a QBF12-ben, anyaga azonos a ZH-val. A védésekre előzetesen egyeztetett időpontokban kerül sor a félév végén, amelynek során egy kötetlen beszélgetés keretében a nagyfeladat megoldásának részleteire valamint a tárgy anyagára vonatkozó kérdésekre egyaránt kell tudni válaszolni. + +### Idén (vagy korábban) elhangzott előadások + + - [Architektúrák](../adatb-elmelete/02_architekturak.pdf) + - [Párhuzamos adatfeldolgozás](../adatb-elmelete/parhuzamositas_2022_pub.pdf) + - [Elosztott technológiák](../adatb-elmelete/elosztott_kihivasok2024_pub.pptx) + - [Analitikus adatbáziskezelés 1...4](../adatb-elmelete/04_analitikus_rendszerek.pdf) + - [Memóriaadatbázisok](../adatb-elmelete/03_imdb.pdf) + - [Teljesítmény mérése és hangolása](../adatb-elmelete/09_Teljesitmeny_meres_hangolas.pdf) + - [Szemantikus adatbáziskezelés](../adatb-elmelete/08_szemantikus_adatbazisok.pdf) + - [Hadoop](../adatb-elmelete/15_Hadoop.pdf) + - [Gráfadatbázisok](../adatb-elmelete/10_Grafadatbazisok.pdf) + - [Oszlopalapú memória-adatbáziskezelés az Oracle 12c-ben](../adatb-elmelete/05_oracle_in-memorycolumnstore.pdf) + - [A Facebook technológiája](../adatb-elmelete/07_facebook.pdf) + + - Funkcionális programozás lehetőségei. Kapcsolódó előadás a Scala eXchange 2017 konferenciáról: [Automatic Parallelisation and Batching of Scala Code](https://skillsmatter.com/skillscasts/11182-automatic-parallelisation-and-batching-of-scala-code) + - [Adatbáziskezelés és a jog, GDPR](../adatb-elmelete/14_GDPR.pdf). + +Az adatbázis-kezelés aktuális kutatási irányairól érdeklődőknek javasoljuk a VLDB konferenciák keynote előadásait, [tavaly pl. ezek voltak](https://www.vldb.org/2023/?program-schedule-keynote-speakers). + +### Felhasználható segédanyagok +- [Gajdos: Adatbázisok, 2019.](https://db.bme.hu/~gajdos/Adatbazisok2019.pdf) +- [2024 Normalizalas, DW.pdf](https://github.com/bme-db-lab/bme-db-lab.github.io-internal/blob/main/adatb-elmelete/2024%20Normalizalas%2C%20DW.pdf) +- [2024 elosztott adatbázisok](../adatb-elmelete/Elosztott_adatbazisok_2024.pdf) +- [NoSQL-"bigdata" adatbáziskezelés](../adatb-elmelete/NoSQL_short.pdf) +- Silberschatz, H. F. Korth, S. Sudarshan: Database System Concepts, 7th Edition, McGraw-Hill 2019. [slideok](https://www.db-book.com/db7/slides-dir/index.html) +- [Oracle Database Concepts 18c, 2018.]( https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/index.html) +- [Oracle Exadata white paper, 2012.](http://www.oracle.com/technetwork/database/exadata/exadata-technical-whitepaper-134575.pdf) +- [Oracle Data Warehousing Guide 21c, 2020.](https://docs.oracle.com/en/database/oracle/oracle-database/21/dwhsg/database-data-warehousing-guide.pdf) +- [www.tpc.org](http://www.tpc.org) +- Web-en elérhető oldalak elsősorban a NoSQL körbe tartozó témák esetén +- [funkcionális függőség kalkulátor](http://tiresias.db.bme.hu:5000/) +{% include targykodok.md %} diff --git a/index.md b/index.md new file mode 100644 index 000000000..866015ba6 --- /dev/null +++ b/index.md @@ -0,0 +1,24 @@ +--- +# Feel free to add content and custom Front Matter to this file. +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults + +layout: home +title: Az Adatbázisok Laborról +--- +„Nem a tanulás, s a tudományok mennyisége teszi az embert okossá, hanem azok megemésztése és jó elrendeltetése.” +(Gr. Széchenyi István) + +Az Adatbázisok Labor 1996-tól működik a BME Távközlési és Médiainformatikai Tanszékén. A labor célja, hogy minél jobb és változatos lehetőségeket biztosítson az adatbázis-kezelés és tágabb környezete iránt érdeklődők számára, beleértve a hatékonyabb tanulást, a tudományos kutatást valamint projektek lebonyolítását egyaránt. A labor tagjai számos kiemelkedő eredményt értek már el az utóbbi években, így – többek között – a nevünkhöz fűződik az első magyarországi nagyvállalati adattárház tervezése és megvalósítása (MATÁV/T-Com), az első valós idejű adattárház tervezése és megvalósítása (MAVIR) – valamint számos egyéb kutatási projekt és ipari megvalósítás – mellett + + - 8 db TDK I. helyezés, + - 2 db OTDK I. díj, + - 2 db OTDK II. díj, + - 1 db Pro Scientia aranyérem, + - 1 db Pollák-Virág díj, + - 1 db ACM KDD Cup (a világ legrangosabb adatbányászati versenye) I. díj, + - 3 db ACM KDD Cup II. díj, + - NiSIS gyalogosfelismerési verseny különdíj (pontosság). + +A labor jellemzően az adatbázisok világának egy-egy nagyobb területét átfogó, produktív feldolgozását vállalja magára, a hallgatók választása szerint ipari vagy akadémiai területekre helyezve a hangsúlyt. Ennek megfelelően a labor tagjai főleg önálló laboros, illetve doktorandusz és diplomatervező hallgatók, míg az ő munkájukat ipari és az akadémiai világban jártas, tapasztalt munkatársak segítik, támogatják. A laborfeladatok mellett hangsúlyt helyezünk az általános elméleti problémák és az új eredmények szélesebb körű megismertetésére is, amelyet folyamatosan bővülő tárgykínálatunkkal igyekszünk lefedni. + +[Dr. Gajdos Sándor](https://db.bme.hu/~gajdos), a laboratórium vezetője diff --git a/jegyzokonyv/doc-sablon.doc b/jegyzokonyv/doc-sablon.doc new file mode 100644 index 000000000..2c7e11a43 Binary files /dev/null and b/jegyzokonyv/doc-sablon.doc differ diff --git a/jegyzokonyv/docx-sablon.docx b/jegyzokonyv/docx-sablon.docx new file mode 100644 index 000000000..88d9626ad Binary files /dev/null and b/jegyzokonyv/docx-sablon.docx differ diff --git a/jegyzokonyv/jegyzokonyv-sablon.doc b/jegyzokonyv/jegyzokonyv-sablon.doc new file mode 100644 index 000000000..314e86d08 Binary files /dev/null and b/jegyzokonyv/jegyzokonyv-sablon.doc differ diff --git a/jegyzokonyv/jegyzokonyv-sablon.docx b/jegyzokonyv/jegyzokonyv-sablon.docx new file mode 100644 index 000000000..125f69748 Binary files /dev/null and b/jegyzokonyv/jegyzokonyv-sablon.docx differ diff --git a/jegyzokonyv/jegyzokonyv-sablon.odt b/jegyzokonyv/jegyzokonyv-sablon.odt new file mode 100644 index 000000000..3c86a21c6 Binary files /dev/null and b/jegyzokonyv/jegyzokonyv-sablon.odt differ diff --git a/jegyzokonyv/jegyzokonyv-sablon.rtf b/jegyzokonyv/jegyzokonyv-sablon.rtf new file mode 100644 index 000000000..702d2f5ab --- /dev/null +++ b/jegyzokonyv/jegyzokonyv-sablon.rtf @@ -0,0 +1,422 @@ +{\rtf1\adeflang1025\ansi\ansicpg1250\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1038\deflangfe1038\themelang1038\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f2\fbidi \fmodern\fcharset238\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Wingdings;} +{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};}{\f24\fbidi \froman\fcharset1\fprq2{\*\panose 00000400000000000000}Mangal;} +{\f34\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604030504040204}Tahoma;} +{\f41\fbidi \froman\fcharset0\fprq0{\*\panose 00000000000000000000}Droid Sans Fallback;}{\f42\fbidi \froman\fcharset0\fprq0{\*\panose 00000000000000000000}Lucida Sans;} +{\f43\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light{\*\falt Arial};}{\f309\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;} +{\flomajor\f31500\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light{\*\falt Arial};}{\fbimajor\f31503\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f312\fbidi \froman\fcharset0\fprq2 Times New Roman;} +{\f311\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f313\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f314\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f315\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f316\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f317\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f318\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f322\fbidi \fswiss\fcharset0\fprq2 Arial;} +{\f321\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}{\f323\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f324\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f325\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\f326\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\f327\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f328\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f332\fbidi \fmodern\fcharset0\fprq1 Courier New;} +{\f331\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f333\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f334\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f335\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f336\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f337\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f338\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f652\fbidi \froman\fcharset0\fprq2 Cambria Math;} +{\f651\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f653\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f654\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f657\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} +{\f658\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f682\fbidi \fswiss\fcharset0\fprq2 Calibri;}{\f681\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f683\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;} +{\f684\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f687\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f688\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f692\fbidi \fswiss\fcharset0\fprq2 Tahoma;} +{\f691\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f694\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f696\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f740\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE{\*\falt Arial};} +{\f741\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr{\*\falt Arial};}{\f743\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek{\*\falt Arial};}{\f744\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur{\*\falt Arial};} +{\f745\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew){\*\falt Arial};}{\f746\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic){\*\falt Arial};}{\f747\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic{\*\falt Arial};} +{\f748\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese){\*\falt Arial};}{\flomajor\f31510\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbmajor\f31520\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE{\*\falt Arial};} +{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr{\*\falt Arial};}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek{\*\falt Arial};}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur{\*\falt Arial};} +{\fhimajor\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew){\*\falt Arial};}{\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic){\*\falt Arial};} +{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic{\*\falt Arial};}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese){\*\falt Arial};}{\fbimajor\f31540\fbidi \froman\fcharset0\fprq2 Times New Roman;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31550\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31560\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31570\fbidi \fswiss\fcharset0\fprq2 Calibri;} +{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31580\fbidi \froman\fcharset0\fprq2 Times New Roman;} +{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red119\green119\blue119;\red0\green0\blue10; +\red221\green221\blue221;}{\*\defchp \f31506\fs22\lang1038\langfe1033\langfenp1033 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{ +\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 +\snext0 \sqformat \spriority0 \styrsid10360120 Normal;}{\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb\brdrs\brdrw10\brdrcf17 \wrapdefault\hyphpar0\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af24\afs28\alang1025 \ltrch\fcs0 \b\fs32\cf18\lang1033\langfe1033\loch\f0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext1 \slink20 \spriority0 \styrsid3875544 heading 1;}{\s2\ql \li0\ri0\sb240\sl276\slmult1 +\keepn\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af24\afs26\alang1025 \ltrch\fcs0 \b\i\fs28\cf18\lang1033\langfe1033\loch\f0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext2 \slink21 \spriority0 \styrsid3875544 heading 2;}{\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af31503\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 \sbasedon0 \snext0 \slink27 \sunhideused \sqformat \spriority9 \styrsid6960745 heading 3;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 +Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1038\langfe1033\cgrid\langnp1038\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{ +\s15\qc \li284\ri0\sb120\sa120\sl100\slmult0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \ab\af42\afs52\alang1081 \ltrch\fcs0 +\b\fs44\expnd1\expndtw5\cf18\lang1038\langfe2052\loch\f0\hich\af0\dbch\af41\cgrid\langnp1038\langfenp2052 \sbasedon0 \snext15 \slink16 \spriority0 \styrsid10360120 Title;}{\*\cs16 \additive \rtlch\fcs1 \ab\af42\afs52\alang1081 \ltrch\fcs0 +\b\fs52\expnd1\expndtw5\cf18\lang0\langfe2052\loch\f0\hich\af0\dbch\af41\langfenp2052 \sbasedon10 \slink15 \slocked \spriority0 \styrsid10360120 C\'edm Char;}{\s17\qc \li284\ri0\sb120\sa240\sl276\slmult1\widctlpar +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \ai\af42\afs24\alang1081 \ltrch\fcs0 \i\fs36\expnd3\expndtw15\cf18\lang1038\langfe2052\loch\f0\hich\af0\dbch\af41\cgrid\langnp1038\langfenp2052 +\sbasedon0 \snext17 \slink18 \spriority0 \styrsid10360120 Subtitle;}{\*\cs18 \additive \rtlch\fcs1 \ai\af42\afs24\alang1081 \ltrch\fcs0 \i\fs24\expnd3\expndtw15\cf18\lang0\langfe2052\loch\f0\hich\af0\dbch\af41\langfenp2052 +\sbasedon10 \slink17 \slocked \spriority0 \styrsid10360120 Alc\'edm Char;}{\s19\ql \li284\ri0\sb120\sa120\sl276\slmult1\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \af42\afs24\alang1081 +\ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\f1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 \sbasedon0 \snext19 \spriority0 \styrsid10360120 T\'e1bl\'e1zat cella;}{\*\cs20 \additive \rtlch\fcs1 \ab\af24\afs28 \ltrch\fcs0 +\b\fs28\cf18\lang1033\langfe0\loch\f0\hich\af0\dbch\af13\langnp1033 \sbasedon10 \slink1 \slocked \spriority0 \styrsid3875544 C\'edmsor 1 Char;}{\*\cs21 \additive \rtlch\fcs1 \ab\ai\af24\afs26 \ltrch\fcs0 +\b\i\fs26\cf18\lang1033\langfe0\loch\f0\hich\af0\dbch\af13\langnp1033 \sbasedon10 \slink2 \slocked \spriority0 \styrsid3875544 C\'edmsor 2 Char;}{\s22\qj \li0\ri0\sa120\sl276\slmult1 +\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\f0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 +\sbasedon0 \snext22 \slink23 \spriority0 \styrsid3875544 Body Text;}{\*\cs23 \additive \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang0\langfe2052\loch\f0\hich\af0\dbch\af13\langfenp2052 +\sbasedon10 \slink22 \slocked \spriority0 \styrsid3875544 Sz\'f6vegt\'f6rzs Char;}{\s24\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 +\ltrch\fcs0 \fs22\lang1038\langfe1038\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 \sbasedon0 \snext24 \sqformat \spriority34 \styrsid1381961 List Paragraph;}{\s25\qj \li0\ri0\sa120\sl276\slmult1 +\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\f0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 +\sbasedon0 \snext25 \spriority0 \styrsid2622922 Sz\'f6vegt\'f6rzs1;}{\s26\ql \li284\ri0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\f2\hich\af2\dbch\af41\cgrid\langnp1038\langfenp2052 \sbasedon0 \snext26 \spriority0 \styrsid2622922 K\'f3d;}{\*\cs27 \additive \rtlch\fcs1 \ab\af31503 \ltrch\fcs0 +\b\lang0\langfe1038\loch\f31502\hich\af31502\dbch\af31501\langfenp1038 \sbasedon10 \slink3 \slocked \spriority9 \styrsid6960745 C\'edmsor 3 Char;}{\s28\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 \snext28 \shidden \ssemihidden \styrsid2622922 Revision;}{ +\s29\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs16\alang1025 \ltrch\fcs0 \fs16\lang1038\langfe1038\loch\f38\hich\af38\dbch\af31505\cgrid\langnp1038\langfenp1038 +\sbasedon0 \snext29 \slink30 \ssemihidden \sunhideused \styrsid2622922 Balloon Text;}{\*\cs30 \additive \rtlch\fcs1 \af38\afs16 \ltrch\fcs0 \fs16\lang0\langfe1038\loch\f38\hich\af38\dbch\af31505\langfenp1038 +\sbasedon10 \slink29 \slocked \ssemihidden \styrsid2622922 Bubor\'e9ksz\'f6veg Char;}}{\*\listtable{\list\listtemplateid1331492960{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext +\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi0\li0\lin0 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi0\li0\lin0 } +{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-720\li720\lin720 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0 +\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-864\li864\lin864 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext +\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1008\li1008\lin1008 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 +\fi-1152\li1152\lin1152 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1296\li1296\lin1296 }{\listlevel\levelnfc255\levelnfcn255 +\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1440\li1440\lin1440 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0 +\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1584\li1584\lin1584 }{\listname ;}\listid297419440}{\list\listtemplateid-715635450{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0 +\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi0\li0\lin0 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 +\ltrch\fcs0 \fi0\li0\lin0 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-720\li720\lin720 }{\listlevel\levelnfc255\levelnfcn255 +\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-864\li864\lin864 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0 +\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1008\li1008\lin1008 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 +\af0 \ltrch\fcs0 \fi-1152\li1152\lin1152 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1296\li1296\lin1296 }{\listlevel +\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1440\li1440\lin1440 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2 +\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1584\li1584\lin1584 }{\listname ;}\listid1515146474}{\list\listtemplateid-862581948\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid134807553\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1004\lin1004 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative +\levelspace0\levelindent0{\leveltext\leveltemplateid134807555\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1724\lin1724 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\leveltemplateid134807557\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2444\lin2444 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807553 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li3164\lin3164 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807555\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li3884\lin3884 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807557\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4604\lin4604 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807553\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5324\lin5324 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807555\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6044\lin6044 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807557\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6764\lin6764 }{\listname ;}\listid2016497688}}{\*\listoverridetable{\listoverride\listid297419440 +\listoverridecount0\ls1}{\listoverride\listid1515146474\listoverridecount0\ls2}{\listoverride\listid2016497688\listoverridecount0\ls3}}{\*\rsidtbl \rsid1381961\rsid1735947\rsid1789286\rsid2622922\rsid3736527\rsid3875544\rsid4946316\rsid5396656\rsid5531892 +\rsid6960745\rsid8202326\rsid9056847\rsid9794469\rsid10188095\rsid10315114\rsid10360120\rsid10505837\rsid10646117\rsid11297577\rsid11612628\rsid12537762\rsid13057920}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0 +\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Szepes N\'f3ra}{\operator Marton J\'f3zsef}{\creatim\yr2017\mo4\dy9\hr23\min14}{\revtim\yr2017\mo4\dy9\hr23\min14}{\version2}{\edmins0}{\nofpages4}{\nofwords237}{\nofchars1636}{\nofcharsws1870} +{\vern49273}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw11906\paperh16838\margl1417\margr424\margt1417\margb1417\gutter0\ltrsect +\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0 +\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot10360120\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid10360120\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}} +{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9 +\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s15\qc \li0\ri0\sb120\sa120\sl100\slmult0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid10360120 \rtlch\fcs1 +\ab\af42\afs52\alang1081 \ltrch\fcs0 \b\fs44\expnd1\expndtw5\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 M\'e9 +\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 si jegyz\'f5\loch\f0 \hich\f0 k\'f6\loch\f0 nyv \hich\f0 \endash \loch\f0 \hich\f0 Adatb\'e1\loch\f0 \hich\f0 zisok Laborat\'f3\loch\f0 rium +\par }\pard\plain \ltrpar\s17\qc \li284\ri0\sb120\sa240\sl276\slmult1\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0\pararsid10360120 \rtlch\fcs1 \ai\af42\afs24\alang1081 \ltrch\fcs0 +\i\fs36\expnd3\expndtw15\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \highlight7\insrsid12537762\charrsid13057920 \hich\af0\dbch\af41\loch\f0 X}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 . m\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 s: }{\rtlch\fcs1 \af0 \ltrch\fcs0 \highlight7\insrsid12537762\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 M\'e9\loch\f0 \hich\f0 r\'e9 +\loch\f0 s neve}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv +\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 N\'e9\loch\f0 v:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 Minta Andrea}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 Neptun k\'f3\loch\f0 d:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 ABC123}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow1\irowband1\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 Feladat k\'f3\loch\f0 dja:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 16 \hich\f0 \endash \loch\f0 BANK}{ +\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow2\irowband2\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 M\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 svezet\'f5\loch\f0 neve:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 +\hich\af0\dbch\af41\loch\f0 \hich\f0 M\'e1\loch\f0 sik Ember}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid10360120\charrsid13057920 \trowd \irow3\irowband3\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 +\trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 M\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 s id\'f5\loch\f0 pontja:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 +\hich\af0\dbch\af41\loch\f0 2011-03-28 8:00}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +\rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow4\irowband4\ltrrow +\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 M\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 s helysz\'ed\loch\f0 ne:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 +\hich\af0\dbch\af41\loch\f0 HSZK Q}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +\rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow5\irowband5\ltrrow +\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\trowd \irow6\irowband6\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 +\trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt +\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl +\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 A m\'fb\loch\f0 \hich\f0 k\'f6\loch\f0 \hich\f0 d\'f5\loch\f0 \hich\f0 alkalmaz\'e1\loch\f0 s \hich\af0\dbch\af41\loch\f0 \hich\f0 el\'e9\loch\f0 \hich\f0 rhet\'f5\loch\f0 +\hich\f0 s\'e9\loch\f0 ge:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid1789286\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 t\'f6\loch\f0 \hich\f0 rlend\'f5\loch\f0 \hich\f0 , ha nem k\'e9\loch\f0 \hich\f0 ri az \'fa\loch\f0 +\hich\f0 tmutat\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow6\irowband6\ltrrow +\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\insrsid10315114\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 Felhaszn\'e1\loch\f0 \hich\f0 l\'f3\loch\f0 \hich\f0 n\'e9\loch\f0 v:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid1789286\charrsid13057920 +\hich\af0\dbch\af41\loch\f0 \hich\f0 t\'f6\loch\f0 \hich\f0 rlend\'f5\loch\f0 \hich\f0 , ha nem k\'e9\loch\f0 \hich\f0 ri az \'fa\loch\f0 \hich\f0 tmutat\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid10315114\charrsid13057920 \cell +}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10315114\charrsid13057920 \trowd \irow7\irowband7\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\insrsid10315114\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 Jelsz\'f3\loch\f0 :\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid1789286\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 t\'f6\loch\f0 \hich\f0 rlend\'f5 +\loch\f0 \hich\f0 , ha nem k\'e9\loch\f0 \hich\f0 ri az \'fa\loch\f0 \hich\f0 tmutat\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid10315114\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid10315114\charrsid13057920 \trowd \irow8\irowband8\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 +\trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\trowd \irow9\irowband9\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb +\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt +\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\pard\plain \ltrpar +\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 Megoldott feladatok: \cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 +\b\f0\highlight7\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 1,2,3}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid1789286\charrsid13057920 \hich\af0\dbch\af41\loch\f0 a}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\b\f0\highlight7\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 ,4}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid10360120\charrsid13057920 \trowd \irow9\irowband9\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 +\trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s19\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af1\hich\af1\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 \hich\f0 El\'e9\loch\f0 \hich\f0 rhet\'f5\loch\f0 \hich\f0 pontsz\'e1\loch\f0 \hich\f0 m (plusz pontok n\'e9\loch\f0 \hich\f0 lk\'fc\loch\f0 l): \cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 +\b\f0\highlight7\insrsid10360120\charrsid13057920 \hich\af0\dbch\af41\loch\f0 40p}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid10360120\charrsid13057920 \trowd \irow10\irowband10\lastrow \ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh +\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl +\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row {\listtext\tab}}\pard\plain \ltrpar\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb +\brdrs\brdrw10\brdrcf17 \wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \ab\af24\afs28\alang1025 \ltrch\fcs0 +\b\fs32\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 Felhaszn\'e1\loch\f0 \hich\f0 l +\'f3\loch\f0 \hich\f0 i \'fa\loch\f0 \hich\f0 tmutat\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3875544\charrsid13057920 +\par {\listtext\tab}}\pard\plain \ltrpar\s22\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\highlight7\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 Csak a JDBC m\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 +\hich\f0 s eset\'e9\loch\f0 \hich\f0 n sz\'fc\loch\f0 \hich\f0 ks\'e9\loch\f0 \hich\f0 ges, egy\'e9\loch\f0 \hich\f0 bk\'e9\loch\f0 \hich\f0 nt t\'f6\loch\f0 \hich\f0 rlend\'f5\loch\f0 \hich\f0 . Kb. f\'e9\loch\f0 \hich\f0 l oldal terjedelm\'fb\loch\f0 +\hich\f0 haszn\'e1\loch\f0 \hich\f0 lati seg\'e9\loch\f0 \hich\f0 dlet, amely a laikus felhaszn\'e1\loch\f0 \hich\f0 l\'f3\loch\f0 \hich\f0 k sz\'e1\loch\f0 \hich\f0 m\'e1\loch\f0 \hich\f0 ra is \'e9\loch\f0 \hich\f0 rthet\'f5\loch\f0 \hich\f0 + nyelven le\'ed\loch\f0 \hich\f0 rja az alkalmaz\'e1\loch\f0 \hich\f0 s m\'fb\loch\f0 \hich\f0 k\'f6\loch\f0 \hich\f0 d\'e9\loch\f0 \hich\f0 s\'e9\loch\f0 t. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \highlight7\insrsid3875544\charrsid13057920 +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8202326 \page }{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 +\b\fs32\cf18\lang1038\langfe1033\loch\af0\hich\af0\dbch\af13\langfenp1033\insrsid8202326 +\par {\listtext\tab}}\pard\plain \ltrpar\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb\brdrs\brdrw10\brdrcf17 \wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 +\ab\af24\afs28\alang1025 \ltrch\fcs0 \b\fs32\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 +\hich\f0 M\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 si feladatok megold\'e1\loch\f0 sa}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3875544\charrsid13057920 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\fs28\cf18\dbch\af13\insrsid2622922 \hich\af0\dbch\af13\loch\f0 1.\tab}}\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sl276\slmult1 +\keepn\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \ab\ai\af24\afs26\alang1025 \ltrch\fcs0 +\b\i\fs28\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid2622922 \hich\af0\dbch\af13\loch\f0 f}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\lang1038\langfe1033\langnp1038\insrsid5396656\charrsid13057920 \hich\af0\dbch\af13\loch\f0 eladat}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid2622922 \hich\af0\dbch\af13\loch\f0 : }{\rtlch\fcs1 \af0 \ltrch\fcs0 +\lang1038\langfe1033\highlight7\langnp1038\insrsid1735947 \hich\af0\dbch\af13\loch\f0 \hich\f0 r\'f6\loch\f0 vid}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\highlight7\langnp1038\insrsid2622922\charrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 + c\'ed\loch\f0 m}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid5396656\charrsid13057920 +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid13057920\charrsid1381961 \hich\af0\dbch\af31505\loch\f0 \hich\f0 Ide ker\'fc\loch\f0 l a +\hich\af0\dbch\af31505\loch\f0 \hich\f0 feladat megold\'e1\loch\f0 \hich\f0 s\'e1\loch\f0 \hich\f0 nak magyar\'e1\loch\f0 \hich\f0 zata, esetleges k\'e9\loch\f0 \hich\f0 pekkel, forr\'e1\loch\f0 \hich\f0 sk\'f3\loch\f0 \hich\f0 d r\'e9\loch\f0 szletekkel} +{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 \'e9\loch\f0 \hich\f0 s a tesztel\'e9\loch\f0 \hich\f0 s menet\'e9\loch\f0 \hich\f0 nek le\'ed\loch\f0 \hich\f0 r\'e1\loch\f0 sa}{\rtlch\fcs1 \af0 +\ltrch\fcs0 \f0\highlight7\insrsid2622922 \hich\af0\dbch\af31505\loch\f0 \hich\f0 j\'f3\loch\f0 \hich\f0 l strukt\'fa\loch\f0 \hich\f0 r\'e1\loch\f0 \hich\f0 tlan. Ha az adott feladatra valamelyik r\'e9\loch\f0 \hich\f0 sz nem \'e9\loch\f0 \hich\f0 +rtelmezett, akkor az t\'f6\loch\f0 \hich\f0 rlend\'f5.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid8202326 +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af31503\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31503 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 A megold\'e1\loch\f31502 \hich\f31502 shoz haszn\'e1 +\loch\f31502 \hich\f31502 lt SQL utas\'ed\loch\f31502 \hich\f31502 t\'e1\loch\f31502 s +\par }\pard\plain \ltrpar\s25\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 Ha a feladat \hich\af0\dbch\af13\loch\f0 \hich\f0 megold\'e1\loch\f0 \hich\f0 s\'e1 +\loch\f0 \hich\f0 hoz sz\'fc\loch\f0 \hich\f0 ks\'e9\loch\f0 \hich\f0 g volt SQL utas\'ed\loch\f0 \hich\f0 t\'e1\loch\f0 \hich\f0 sra, azt itt t\'fc\loch\f0 \hich\f0 ntess\'fc\loch\f0 \hich\f0 k fel, a K\'f3\loch\f0 \hich\f0 d st\'ed\loch\f0 \hich\f0 +lus seg\'ed\loch\f0 \hich\f0 ts\'e9\loch\f0 \hich\f0 g\'e9\loch\f0 vel!}{\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par }\pard\plain \ltrpar\s26\ql \li284\ri0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0\pararsid2622922 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af2\hich\af2\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid2622922 \hich\af2\dbch\af41\loch\f2 SELECT * +\par \hich\af2\dbch\af41\loch\f2 FROM code +\par \hich\af2\dbch\af41\loch\f2 WHERE +\par \hich\af2\dbch\af41\loch\f2 egyik = 5 +\par \hich\af2\dbch\af41\loch\f2 AND masik = 6; +\par \hich\af2\dbch\af41\loch\f2 STB. STB. +\par }\pard\plain \ltrpar\s25\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 Hacsak m\'e1\loch\f0 \hich\f0 sk\'e9\loch\f0 \hich\f0 +nt nem indokolja a megold\'e1\loch\f0 \hich\f0 s logik\'e1\loch\f0 \hich\f0 ja, a k\'f3\loch\f0 d mindig maradjon egyben.}{\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af31503\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31503 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 Magyar\'e1\loch\f31502 za +\hich\af31502\dbch\af31501\loch\f31502 t +\par }\pard\plain \ltrpar\s25\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 A feladatot \'ed\loch\f0 \hich\f0 gy \'e9\loch\f0 \hich\f0 s \'ed\loch\f0 +gy oldottam meg. +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af31503\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31503 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 Tesztel\'e9\loch\f31502 s menete +\par }\pard\plain \ltrpar\s25\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 A feladatot \'ed\loch\f0 \hich\f0 gy \'e9\loch\f0 \hich\f0 s \'ed\loch\f0 +\hich\f0 gy teszteltem. Screenshot \'e9\loch\f0 \hich\f0 s/vagy konzolb\'f3\loch\f0 \hich\f0 l kim\'e1\loch\f0 \hich\f0 solt kimenet al\'e1\loch\f0 bb: +\par }\pard\plain \ltrpar\s26\ql \li284\ri0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0\pararsid2622922 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af2\hich\af2\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid2622922 \hich\af2\dbch\af41\loch\f2 $ curl https://vsza.hu/airports/BUD.json +\par \{ +\par \hich\af2\dbch\af41\loch\f2 "location": "Budapest, Hungary", +\par \hich\af2\dbch\af41\loch\f2 "name": "Budapest Ferihegy Inter\hich\af2\dbch\af41\loch\f2 national Airport" +\par \} +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af31503\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af31503 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 P\'e9\loch\f31502 ldaadatok +\par }\pard\plain \ltrpar\s25\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 Ha a feladat tesztel\'e9\loch\f0 \hich\f0 s\'e9\loch\f0 \hich\f0 hez sz\'fc +\loch\f0 \hich\f0 ks\'e9\loch\f0 \hich\f0 g van p\'e9\loch\f0 \hich\f0 ldaadatokra, azt itt t\'fc\loch\f0 \hich\f0 ntess\'fc\loch\f0 k fel:}{\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af42\alang1081 \ltrch\fcs0 \cf18\lang1038\langfe2052\loch\af3\hich\af3\dbch\af41\langfenp2052\insrsid2622922 \loch\af3\dbch\af41\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-360\li1004\ri0\widctlpar +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1004\itap0\pararsid2622922 \rtlch\fcs1 \af42\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\af2\hich\af2\dbch\af41\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 +\af42 \ltrch\fcs0 \insrsid2622922 \hich\af2\dbch\af41\loch\f2 ID = 42 +\par }\pard\plain \ltrpar\s25\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid2622922 +\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid5396656\charrsid13057920 \page }{\rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\fs28\cf18\lang1038\langfe1033\loch\af0\hich\af0\dbch\af13\langfenp1033\insrsid5396656\charrsid13057920 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\fs28\cf18\lang1033\langfe1033\dbch\af13\langnp1033\insrsid5531892 \hich\af0\dbch\af13\loch\f0 2.\tab}}\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sl276\slmult1 +\keepn\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \ab\ai\af24\afs26\alang1025 \ltrch\fcs0 +\b\i\fs28\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5531892 \hich\af0\dbch\af13\loch\f0 f}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5396656\charrsid13057920 +\hich\af0\dbch\af13\loch\f0 eladat +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9056847 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid1381961\charrsid1381961 \hich\af0\dbch\af31505\loch\f0 \hich\f0 Ide ker\'fc\loch\f0 \hich\f0 +l a feladat megold\'e1\loch\f0 \hich\f0 s\'e1\loch\f0 \hich\f0 nak magyar\'e1\loch\f0 \hich\f0 zata, esetleges k\'e9\loch\f0 \hich\f0 pekkel, forr\'e1\loch\f0 \hich\f0 sk\'f3\loch\f0 d }{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\highlight7\insrsid1381961\charrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 r\'e9\loch\f0 szletekkel}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid9056847\charrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 \'e9\loch\f0 \hich\f0 +s a tesztel\'e9\loch\f0 s }{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 menet\'e9\loch\f0 \hich\f0 nek le\'ed\loch\f0 \hich\f0 r\'e1\loch\f0 sa}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\highlight7\insrsid5531892 \hich\af0\dbch\af31505\loch\f0 \hich\f0 az 1. feladatn\'e1\loch\f0 \hich\f0 l r\'e9\loch\f0 szletezettek szerint}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid9056847\charrsid1381961 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid9056847 +\par {\listtext\tab}}\pard\plain \ltrpar\s24\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin0\itap0\pararsid1381961\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid1381961\charrsid1381961 +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8202326 \page }{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 +\b\fs32\cf18\lang1038\langfe1033\loch\af0\hich\af0\dbch\af13\langfenp1033\insrsid8202326 +\par {\listtext\tab}}\pard\plain \ltrpar\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb\brdrs\brdrw10\brdrcf17 \wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 +\ab\af24\afs28\alang1025 \ltrch\fcs0 \b\fs32\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 +\hich\f0 V\'e9\loch\f0 \hich\f0 lem\'e9\loch\f0 \hich\f0 ny(ek) a m\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 sr\'f5\loch\f0 l}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3875544\charrsid13057920 +\par }\pard\plain \ltrpar\s22\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\highlight7\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 V\'e9\loch\f0 \hich\f0 lem\'e9\loch\f0 \hich\f0 +ny, \'e9\loch\f0 \hich\f0 p\'ed\loch\f0 \hich\f0 t\'f5\loch\f0 \hich\f0 jelleg\'fb\loch\f0 kritika.}{\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\highlight7\insrsid3736527\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 Ha nincs, t\'f6\loch\f0 \hich\f0 +rlend\'f5.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3875544\charrsid13057920 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100c6a40aa5c1060000581a0000160000007468656d652f7468656d652f +7468656d65312e786d6cec59cf8f1b3514be23f13f8ce69ee6d7cc2459355b2593a40bdd6dab262dead1499c8cbb9e9968ecec36aa2aa1f688848428880395b8 +2184804aadc4a59cf853168aa048fc0b3c7b26133b71d876b58715eaee25e3f9def3e7f7ecefd9e3cb57ee87d43ac2092371d4b4cb974ab685a3513c26d1b469 +df1ef40a75db621c456344e30837ed0566f695ddf7dfbb8c767880436c817dc47650d30e389fed148b6c04cd885d8a673882779338091187c7645a1c27e818fc +86b4582995bc628848645b110ac1ed8dc9848c7081fffa5d88ecdda5f32e851e22ce44c388267de11a6b16123b3e2c0b045b309f26d611a24d1bfa19c7c7037c +9fdb16458cc38ba65d927f7671f77211ed6446946fb155ec7af22fb3cb0cc68715d967321de69d3a8eeb78addcbf0450be89ebd6ba5ed7cbfd49001a8d60a429 +17d5a7db6eb43b6e865540e94f83ef4ead532d6b78c57f758373cb15ff1a5e8252ffce06bed7f3218a1a5e8252bcbb81779c5ac57734bc04a5786f035f2bb53a +4e4dc34b50404974b8812eb95ed55f8e36874c62ba6784375ca757ab64ce5728980df9ec125d4ce2886f9b6b21ba17273d000820459c44165fccf0048d6016fb +88926142ac7d320db8e806ed60a4bc4f9b466ca349f468b1514266bc697f3843b02e565eff79f9c33f2f9f5b278f5e9c3cfaf9e4f1e393473fa58e34ab3d144d +55abd7df7ef6f7d38fadbf9e7ff3fac917663c53f1bffff8c96fbf7c6e06c2225ad179f5e5b33f5e3c7bf5d5a77f7effc4006f2568a8c20724c4ccba8e8fad5b +7108039351d199e361f27616830011d5a2154d198a90e8c5e0bfcb030d7d7d812832e0da588fe09d0444c404bc3abfa711ee07c99c1383c76b41a8010fe298b6 +e3c418856ba22f25cc83793435779ecc55dc2d848e4c7dfb28d2f2db9dcf403d89c9a51f608de64d8a228ea638c2dc12efe2438c0da3bb4b8816d703324a6216 +4fb87597586d448c211990a1369b56467b2484bc2c4c0421df5a6c0eee58ed989a46ddc1473a125605a206f2034cb5305e45738e4293cb010aa91af07dc40313 +c9fe2219a9b82ee390e929a6b1d51d63c64c36371218af92f46b2020e6b41fd045a823134e0e4d3ef7511cabc84e7ce807289c99b07d12052af6037608531459 +37636e821fc4fa0a11cf9007146d4df71d82b5749fae06b7413b554aab0922decc13432eafe2589bbffd059d202ca506a45d53ec9044a7ca77dac3f9093748e5 +abaf9f1a785f54c96e25c4b866f6d6847a1b6e5d9efd3819938bafce1d348f6e6258109b25ea9d38bf1367fb7f2fcedbd6f3f94bf24a8541a0c56630dd6ecbcd +77b875ef3d2194f6f982e27d26b7df0c6acfb8078dc24e9e3b717e169b05f053ac64e840c34d13246dac24e61f111ef4033483ad7bd9164ea62c733d65d62c66 +706494cd46df024fe7e1413c4e8f9ce5b2385ea6e2c1105fb597dcbc1d8e0b3c457bb5d5312a772fd94ee571774940d8be0d09a5339d44d540a2b66c14419287 +6b089a81841cd9b9b0681858d485fb65aa365800b53c2bb039b2604bd5b45d074cc008ce4c88e2b1c8539aea65766532cf33d3db82a9cd80127cd7c866c02ad3 +0dc175ebf0c4e8d2a9f60699d64828d34d272123236b180bd01867b353b4be098db7cd756395528d9e0845160b8546adfe5f2cce9a6bb05bd7061aa94a4123eb +b8697b5517a6cc08cd9af6048eeef0339cc1dc6162538be814be7f8d78922ef8b328cb2c61bc835890065c8a4eaa0621e138b128099bb6187e9e061a490d91dc +ca1510840b4bae01b272d1c841d2f524e3c9048fb89a76a545443a7d04854fb5c2f8569a9f1d2c2ce339a4bb1f8c8fad219d27b7104c31b75616011c1306df77 +ca6934c7043e49e642b69a7f6b8529935df59ba09c43693ba2b30065154515f3142ea53ca7239ff218284fd99821a04a48b242389c8a02ab0655aba679d54839 +6cadbaa71b89c829a2b9aa999aaa88aa695631ad876519588be5d98abcc26a196228976a854fa57b5d721b4bad5bdb27e45502029ec7cf5075dfa02028d4569d +69d404e34d19169a9db5eab56339c053a8bd49915054df5bba5d8b5b5e238cdd41e3992a3fd8adcf5a689a2cf79532d2f2ee42bd5e8887f7403c3af021774e39 +93a984cb8304c186a82ff724a96cc012b9cfb3a501bfac79429af68392db72fc8aeb174a75b75b70aa4ea950775bd542cb75abe5ae5b2e75da95875058781096 +ddf4dea4071f9be822bd3d69da76768d22011b5729e1f2c3daa5511c16637955529423905729e58ae12ac51a88bb12db22a03e0fbc4aaf516db4bd42a3daea15 +9c4ebb5e68f85ebbd0f1fc5aa7d7f1dd7aa3f7d0b68e24d869557dc7ebd60b5ed9f70b8e5712e3a8370a35a7526939b556bdebb41e66fb190841aa23595020ce +92d7eebf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d65 +4d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979d +c9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56 +e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df00 +0000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f547970 +65735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73 +504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d +616e616765722e786d6c504b01022d0014000600080000002100c6a40aa5c1060000581a00001600000000000000000000000000d60200007468656d652f7468 +656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000cb0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000c60a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority0 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdpriority0 \lsdlocked0 Body Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority39 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; +\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography; +\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000000000 +000000000000feffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/jegyzokonyv/jegyzokonyv-sablon.tex b/jegyzokonyv/jegyzokonyv-sablon.tex new file mode 100644 index 000000000..fef1ab422 --- /dev/null +++ b/jegyzokonyv/jegyzokonyv-sablon.tex @@ -0,0 +1,169 @@ +% Adatbazisok Laboratorium LaTeX jkv sablon +% +% Keszitette: Szepes Nora, 2017. +% Danyi Bence 2013-mas sablonja alapjan +% +% XeLaTex kell hozzá a különböző betűtípusok miatt. +% +% A sablon használata: +% A \fillme reszek kitoltese +% 1. A fedlap adatainak kitöltése +% 2. A feladatok rész kitöltése +% (3.) Megjegyések a méréshez +% + +% Minden egyéb dolgot figyelmen kívül lehet hagyni. +\documentclass[12pt]{article} +\usepackage{fontspec} +\setmainfont[Ligatures=TeX]{Arial} +\usepackage{amssymb,amsmath} +\usepackage{parskip} +\usepackage{graphicx} +\usepackage{moreverb} +\usepackage{array} +\usepackage{titlesec} +\usepackage[left=1.77cm,top=1.27cm,right=1.27cm,nohead,nofoot]{geometry} +\usepackage[magyar]{babel} +\usepackage{xcolor} +%sarga hatter a kitoltendo reszekhez +\usepackage{soul} +\sethlcolor{yellow} +\newcommand{\fillme}[1]{\emph{\hl{#1}}} + + +% Értelemszerűen kitöltendő +% A nem szükséges mezők törlendők +\newcommand{\nev}{\fillme{Minta Andrea}} +\newcommand{\neptun}{\fillme{ABCD123}} +\newcommand{\feladat}{\fillme{16 -- BANK}} +\newcommand{\meresvezeto}{\fillme{Másik Ember}} +\newcommand{\meresideje}{\fillme{2011-03-28 8:00}} +\newcommand{\mereshelye}{\fillme{HSZK Q}} +\newcommand{\elerhetoseg}{\fillme{törlendő, ha nem kéri az útmutató}} +\newcommand{\felhasznalonev}{\fillme{törlendő, ha nem kéri az útmutató}} +\newcommand{\jelszo}{\fillme{törlendő, ha nem kéri az útmutató}} +\newcommand{\megoldott}{\fillme{1, 2, 3a, 4}} +% a megoldottnak jelölt feladatok max pontszámának összege pluszpontok nélkül +\newcommand{\pont}{\fillme{2,5}} +% Ugorj a feladatokhoz! +% Itt ne bánts semmit... + +\renewcommand{\arraystretch}{1.2} +\renewcommand{\thesection}{\arabic{section}.} +\titleformat +{\section} +{\large\bfseries\itshape} +{\thesection} +{3.8cm}{\vspace{-0.5cm}} +\titlespacing{\section}{-0.5cm}{0pt}{12pt} + +\begin{document} +% FEJLEC ELKESZITESE +\begin{center} +\vspace{6pt} +\hspace{-0.5cm}{\Huge\textbf{Mérési jegyzőkönyv -- Adatbázisok Laboratórium}} + +\vspace{6pt} +\hspace{-0.5cm}{\Large\emph{\fillme{X}. mérés: \fillme{Mérés neve}}} + +\vspace{12pt} +\hspace{-0.5cm}\begin{tabular}[h]{|p{10cm}|p{8cm}|} +\hline {Név:} & \textbf{\nev} \\ +\hline {Neptun kód:} & \textbf{\neptun} \\ +\hline {Feladat kódja:} & \textbf{\feladat} \\ +\hline {Mérésvezető neve:} & \textbf{\meresvezeto} \\ +\hline {Mérés időpontja:} & \textbf{\meresideje} \\ +\hline {Mérés helyszíne:} & \textbf{\mereshelye} \\ +\hline {A működő alkalmazás elérhetősége:} & \textbf{\elerhetoseg} \\ +\hline {Felhasználónév:} & \textbf{\felhasznalonev} \\ +\hline {Jelszó:} & \textbf{\jelszo} \\ +\hline {Megoldott feladatok:} & \textbf{\megoldott} \\ +\hline {Elérhető pontszám (a megoldottnak jelölt feladatok max pontszámának összege pluszpontok nélkül):} & \textbf{\pont p} \\ +\hline +\end{tabular} +\end{center} + +% FELHASZNALOI UTMUTATO JDBC-HEZ +\vspace{24pt} +\hspace{-0.5cm}{\Large \textbf{Felhasználói útmutató}} + +\vspace{-0.5cm} +\hspace{-0.5cm}\rule{\textwidth}{0.4pt} + +\fillme{Csak a JDBC mérés esetén szükséges, egyébként törlendő. Kb. fél oldal terjedelmű használati segédlet, amely a laikus felhasználók számára is érthető nyelven leírja az alkalmazás működését.} +\newpage + +% FELADATOK MEGOLDASANAK LEIRASA +\vspace{24pt} +\hspace{-0.5cm}{\Large \textbf{Mérési feladatok megoldása}} + +\vspace{-0.5cm} +\hspace{-0.5cm}\rule{1.02\textwidth}{0.4pt} + + +% ITT KEZDODNEK A FELADATOK +% ERDEMES MINDNE FELADATOT UJ OLDALRA RAKNI +\section{Feladat} + +\textbf{\fillme{Magyarázat}} + +\fillme{Ide kerül a feladat megoldásának magyarázata, esetleges képekkel, forráskód részletekkel. Lehet menet közben kód az egyes feladatok megoldásában, erre használjuk a kód stílust! Forráskódot képként nem szúrhatsz be!} +% Ha szóközökkel indentálsz, akkor jó a sima verbatim környezet is +\begin{verbatimtab} + SELECT * + FROM CODE + WHERE + EGYIK = 5 + AND MASIK = 6; + STB. STB. +\end{verbatimtab} + + +\textbf{\fillme{Tesztelés menete}} + +\fillme{A feladatot így és így teszteltem. Parancsokat szövegként kell beilleszteni, egyéb esetben screenshot és/vagy konzolból kimásolt kimenet.} + +\textbf{\fillme{Példaadatok}} + +\fillme{Ha a feladat teszteléséhez szükség van példaadatokra, azt itt tüntessük fel.} + + + +\newpage +\section{Feladat} + + +\textbf{\fillme{Magyarázat}} + +\fillme{Ide kerül a feladat megoldásának magyarázata, esetleges képekkel, forráskód részletekkel. Lehet menet közben kód az egyes feladatok megoldásában, erre használjuk a kód stílust! Forráskódot képként nem szúrhatsz be!} +% Ha szóközökkel indentálsz, akkor jó a sima verbatim környezet is +\begin{verbatimtab} + SELECT * + FROM CODE + WHERE + EGYIK = 5 + AND MASIK = 6; + STB. STB. +\end{verbatimtab} + + +\textbf{\fillme{Tesztelés menete}} + +\fillme{A feladatot így és így teszteltem. Parancsokat szövegként kell beilleszteni, egyéb esetben screenshot és/vagy konzolból kimásolt kimenet.} + +\textbf{\fillme{Példaadatok}} + +\fillme{Ha a feladat teszteléséhez szükség van példaadatokra, azt itt tüntessük fel.} + + +% VELEMENY A MERESROL +\newpage +\vspace{24pt} +\hspace{-0.5cm}{\Large \textbf{Vélemény(ek) a mérésről}} + +\vspace{-0.5cm} +\hspace{-0.5cm}\rule{\textwidth}{0.4pt} +% Ide jöhetnek a megjegyzések + +\fillme{Vélemény, építő jellegű kritika. Ha nincs, törlendő.} +\end{document} diff --git a/jegyzokonyv/odt-sablon.odt b/jegyzokonyv/odt-sablon.odt new file mode 100644 index 000000000..3c86a21c6 Binary files /dev/null and b/jegyzokonyv/odt-sablon.odt differ diff --git a/jegyzokonyv/rtf-sablon.rtf b/jegyzokonyv/rtf-sablon.rtf new file mode 100644 index 000000000..725b27ed6 --- /dev/null +++ b/jegyzokonyv/rtf-sablon.rtf @@ -0,0 +1,407 @@ +{\rtf1\adeflang1025\ansi\ansicpg1250\uc1\adeff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1038\deflangfe1038\themelang1038\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f2\fbidi \fmodern\fcharset238\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a8\'a7?};}{\f24\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050203030202}Mangal;}{\f34\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria Math;} +{\f37\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f39\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0302020204030204}Calibri Light{\*\falt Arial};} +{\f41\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0703040504020204}Lucida Sans;}{\f42\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\flomajor\f31500\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0302020204030204}Calibri Light{\*\falt Arial};} +{\fbimajor\f31503\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f47\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\f46\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f48\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f49\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f50\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f51\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f52\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f53\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f57\fbidi \fswiss\fcharset0\fprq2 Arial;}{\f56\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\f58\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f59\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f60\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f61\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} +{\f62\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f63\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f67\fbidi \fmodern\fcharset0\fprq1 Courier New;}{\f66\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f68\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f69\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f70\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f71\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} +{\f72\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f73\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f177\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a8\'a7?};}{\f387\fbidi \froman\fcharset0\fprq2 Cambria Math;} +{\f386\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f388\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f389\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f392\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} +{\f393\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f417\fbidi \fswiss\fcharset0\fprq2 Calibri;}{\f416\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f418\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;} +{\f419\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f422\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f423\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f427\fbidi \fswiss\fcharset0\fprq2 Tahoma;} +{\f426\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f428\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f429\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f430\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);} +{\f431\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f432\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f433\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f434\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);} +{\f437\fbidi \fswiss\fcharset0\fprq2 Calibri Light{\*\falt Arial};}{\f436\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr{\*\falt Arial};}{\f438\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek{\*\falt Arial};} +{\f439\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur{\*\falt Arial};}{\f442\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic{\*\falt Arial};}{\f443\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese){\*\falt Arial};} +{\f467\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\flomajor\f31510\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbmajor\f31520\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31530\fbidi \fswiss\fcharset0\fprq2 Calibri Light{\*\falt Arial};} +{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr{\*\falt Arial};}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek{\*\falt Arial};}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur{\*\falt Arial};} +{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic{\*\falt Arial};}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese){\*\falt Arial};}{\fbimajor\f31540\fbidi \froman\fcharset0\fprq2 Times New Roman;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31550\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31560\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31570\fbidi \fswiss\fcharset0\fprq2 Calibri;} +{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31580\fbidi \froman\fcharset0\fprq2 Times New Roman;} +{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red119\green119\blue119;\red0\green0\blue10; +\red221\green221\blue221;}{\*\defchp \f31506\fs22\lang1038\langfe1033\langfenp1033 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{ +\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 +\snext0 \sqformat \spriority0 \styrsid10360120 Normal;}{\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb\brdrs\brdrw10\brdrcf17 \wrapdefault\hyphpar0\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af24\afs28\alang1025 \ltrch\fcs0 \b\fs32\cf18\lang1033\langfe1033\loch\f0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext1 \slink23 \spriority9 \styrsid3875544 heading 1;}{\s2\ql \li0\ri0\sb240\sl276\slmult1 +\keepn\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af24\afs26\alang1025 \ltrch\fcs0 \b\i\fs28\cf18\lang1033\langfe1033\loch\f0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext2 \slink15 \spriority9 \styrsid3875544 heading 2;}{\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 \sbasedon0 \snext0 \slink28 \sunhideused \sqformat \spriority9 \styrsid6960745 heading 3;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 +Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1038\langfe1033\cgrid\langnp1038\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\ai\af24\afs26 \ltrch\fcs0 \b\i\fs26\cf18\lang1033\langfe0\loch\f0\hich\af0\dbch\af13\langnp1033\langfenp0 \sbasedon10 \slink2 \slocked \spriority0 \styrsid3875544 Heading 2 Char;}{\s16\qj \li0\ri0\sa120\sl276\slmult1 +\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang1038\langfe2052\loch\f0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 +\sbasedon0 \snext16 \slink25 \styrsid3875544 Body Text;}{\s17\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 \snext17 \shidden \ssemihidden \styrsid2622922 Revision;}{\s18\qc \li284\ri0\sb120\sa120\sl100\slmult0\widctlpar +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \ab\af41\afs52\alang1081 \ltrch\fcs0 \b\fs44\expnd1\expndtw5\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 +\sbasedon0 \snext18 \slink20 \spriority10 \styrsid10360120 Title;}{\s19\qc \li284\ri0\sb120\sa240\sl276\slmult1\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \ai\af41\afs24\alang1081 \ltrch\fcs0 +\i\fs36\expnd3\expndtw15\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 \sbasedon0 \snext19 \slink22 \spriority11 \styrsid10360120 Subtitle;}{\*\cs20 \additive \rtlch\fcs1 \ab\af41\afs52\alang1081 \ltrch\fcs0 +\b\f0\fs52\expnd1\expndtw5\cf18\lang0\langfe2052\langnp0\langfenp2052 \sbasedon10 \slink18 \slocked \spriority0 \styrsid10360120 Title Char;}{\s21\ql \li284\ri0\sb120\sa120\sl276\slmult1\widctlpar +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 \sbasedon0 \snext21 \spriority0 \styrsid10360120 +T\'e1bl\'e1zat cella;}{\*\cs22 \additive \rtlch\fcs1 \ai\af41\afs24\alang1081 \ltrch\fcs0 \i\f0\fs24\expnd3\expndtw15\cf18\lang0\langfe2052\langnp0\langfenp2052 \sbasedon10 \slink19 \slocked \spriority0 \styrsid10360120 Subtitle Char;}{\*\cs23 \additive +\rtlch\fcs1 \ab\af24\afs28 \ltrch\fcs0 \b\fs28\cf18\lang1033\langfe0\loch\f0\hich\af0\dbch\af13\langnp1033\langfenp0 \sbasedon10 \slink1 \slocked \spriority0 \styrsid3875544 Heading 1 Char;}{\s24\ql \li720\ri0\sa160\sl259\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 +\sbasedon0 \snext24 \sqformat \spriority34 \styrsid1381961 List Paragraph;}{\*\cs25 \additive \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 \fs24\cf18\lang0\langfe2052\loch\f0\hich\af0\dbch\af13\langnp0\langfenp2052 +\sbasedon10 \slink16 \slocked \spriority0 \styrsid3875544 Body Text Char;}{\s26\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\f0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 \sbasedon0 \snext26 \spriority0 \styrsid2622922 Sz\'f6vegt\'f6rzs1;}{\s27\ql \li284\ri0\widctlpar +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f2\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 \sbasedon0 \snext27 \spriority0 \styrsid2622922 K\'f3d;}{\* +\cs28 \additive \rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\lang0\langfe1038\loch\f31502\hich\af31502\dbch\af31501\langnp0\langfenp1038 \sbasedon10 \slink3 \slocked \spriority9 \styrsid6960745 Heading 3 Char;}{ +\s29\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs16\alang1025 \ltrch\fcs0 \fs16\lang1038\langfe1038\loch\f38\hich\af38\dbch\af31505\cgrid\langnp1038\langfenp1038 +\sbasedon0 \snext29 \slink31 \ssemihidden \sunhideused \styrsid2622922 Balloon Text;}{\*\cs31 \additive \rtlch\fcs1 \af38\afs16 \ltrch\fcs0 \fs16\lang0\langfe1038\loch\f38\hich\af38\dbch\af31505\langnp0\langfenp1038 +\sbasedon10 \slink29 \slocked \ssemihidden \styrsid2622922 Balloon Text Char;}}{\*\listtable{\list\listtemplateid1331492960{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext +\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 }{\listlevel\levelnfc255 +\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-720\li720\lin720 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1 +\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-864\li864\lin864 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;} +\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1008\li1008\lin1008 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1152\li1152\lin1152 } +{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1296\li1296\lin1296 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0 +\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1440\li1440\lin1440 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0 +{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1584\li1584\lin1584 }{\listname ;}\listid297419440}{\list\listtemplateid-715635450{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0 +{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 }{\listlevel +\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-720\li720\lin720 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2 +\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-864\li864\lin864 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext +\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1008\li1008\lin1008 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 +\fi-1152\li1152\lin1152 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1296\li1296\lin1296 }{\listlevel\levelnfc255\levelnfcn255 +\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1440\li1440\lin1440 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0 +\levelindent0{\leveltext\'00;}{\levelnumbers;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-1584\li1584\lin1584 }{\listname ;}\listid1515146474}{\list\listtemplateid-862581948\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid134807553\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1004\lin1004 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0 +{\leveltext\leveltemplateid134807555\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1724\lin1724 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807557 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2444\lin2444 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807553\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li3164\lin3164 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807555\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3884\lin3884 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807557\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4604\lin4604 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807553\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5324\lin5324 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid134807555\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6044\lin6044 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\leveltemplateid134807557\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6764\lin6764 }{\listname ;}\listid2016497688}}{\*\listoverridetable{\listoverride\listid297419440\listoverridecount0\ls1}{\listoverride\listid1515146474 +\listoverridecount0\ls2}{\listoverride\listid2016497688\listoverridecount0\ls3}}{\*\rsidtbl \rsid1381961\rsid1735947\rsid1789286\rsid2622922\rsid3736527\rsid3875544\rsid4946316\rsid5396656\rsid5531892\rsid6960745\rsid8202326\rsid9056847\rsid9134525 +\rsid9794469\rsid10188095\rsid10315114\rsid10360120\rsid10505837\rsid10646117\rsid11297577\rsid11612628\rsid12537762\rsid13057920\rsid14943677}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440 +\mintLim0\mnaryLim1}{\info{\author Szepes N\'f3ra}{\operator Gajdos, S\'e1ndor}{\creatim\yr2017\mo4\dy9\hr23\min14}{\revtim\yr2021\mo9\dy21\hr23\min40}{\version3}{\edmins0}{\nofpages4}{\nofwords237}{\nofchars1636}{\nofcharsws1870}{\vern49169}} +{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw11906\paperh16838\margl1417\margr424\margt1417\margb1417\gutter0\ltrsect +\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0 +\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot10360120\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid10360120\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}} +{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9 +\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s18\qc \li0\ri0\sb120\sa120\sl100\slmult0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid10360120 \rtlch\fcs1 +\ab\af41\afs52\alang1081 \ltrch\fcs0 \b\fs44\expnd1\expndtw5\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14943677 Labor dokument\'e1ci\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 +\endash Adatb\'e1zisok Laborat\'f3rium +\par }\pard\plain \ltrpar\s19\qc \li284\ri0\sb120\sa240\sl276\slmult1\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0\pararsid10360120 \rtlch\fcs1 \ai\af41\afs24\alang1081 \ltrch\fcs0 +\i\fs36\expnd3\expndtw15\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \highlight7\insrsid12537762\charrsid13057920 X}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 . m\'e9r\'e9s: }{\rtlch\fcs1 \af0 +\ltrch\fcs0 \highlight7\insrsid12537762\charrsid13057920 M\'e9r\'e9s neve}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv +\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 N\'e9v:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 Minta Andrea}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar +\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 +\trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl +\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 Neptun k\'f3d:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 ABC123}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar +\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow1\irowband1\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 +\trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl +\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 Feladat k\'f3dja:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 16 \endash BANK}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar +\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow2\irowband2\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 +\trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl +\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 M\'e9r\'e9svezet\'f5 neve:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 M\'e1sik Ember}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell +}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow3\irowband3\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 M\'e9r\'e9s id\'f5pontja:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 2011-03-28 8:00}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell +}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow4\irowband4\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 M\'e9r\'e9s helysz\'edne:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 HSZK Q}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell +}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow5\irowband5\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\insrsid10360120\charrsid13057920 A m\'fbk\'f6d\'f5 alkalmaz\'e1s el\'e9rhet\'f5s\'e9ge:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid1789286\charrsid13057920 t\'f6rlend\'f5, ha nem k\'e9ri az \'fatmutat\'f3}{\rtlch\fcs1 \af0 +\ltrch\fcs0 \i\f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow6\irowband6\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\insrsid10315114\charrsid13057920 Felhaszn\'e1l\'f3n\'e9v:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid1789286\charrsid13057920 t\'f6rlend\'f5, ha nem k\'e9ri az \'fatmutat\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\highlight7\insrsid10315114\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10315114\charrsid13057920 \trowd \irow7\irowband7\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\insrsid10315114\charrsid13057920 Jelsz\'f3:\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\f0\highlight7\insrsid1789286\charrsid13057920 t\'f6rlend\'f5, ha nem k\'e9ri az \'fatmutat\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\i\f0\highlight7\insrsid10315114\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10315114\charrsid13057920 \trowd \irow8\irowband8\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 +\trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 Megoldott feladatok: \cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 1,2,3}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid1789286\charrsid13057920 a}{\rtlch\fcs1 \af0 +\ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 ,4}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\insrsid10360120\charrsid13057920 \trowd \irow9\irowband9\ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 +\trbrdrv\brdrs\brdrw10\brdrcf19 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb +\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row \ltrrow}\pard\plain \ltrpar\s21\ql \li0\ri0\sb40\sa40\sl100\slmult0\widctlpar\intbl +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9134525 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f1\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid10360120\charrsid13057920 El\'e9rhet\'f5 pontsz\'e1m (plusz pontok n\'e9lk\'fcl): \cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\f0\highlight7\insrsid10360120\charrsid13057920 40p}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\highlight7\insrsid10360120\charrsid13057920 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10360120\charrsid13057920 \trowd \irow10\irowband10\lastrow \ltrrow\ts11\trqc\trgaph100\trleft-93\trbrdrt +\brdrs\brdrw10\brdrcf19 \trbrdrl\brdrs\brdrw10\brdrcf19 \trbrdrb\brdrs\brdrw10\brdrcf19 \trbrdrr\brdrs\brdrw10\brdrcf19 \trbrdrh\brdrs\brdrw10\brdrcf19 \trbrdrv\brdrs\brdrw10\brdrcf19 +\trftsWidth1\trftsWidthB3\trautofit1\trpaddl93\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid9134525\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr +\brdrs\brdrw10\brdrcf19 \clcbpat8\cltxlrtb\clftsWidth3\clwWidth4228\clpadt93\clpadft3\clcbpatraw8 \cellx4072\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf19 \clbrdrl\brdrs\brdrw10\brdrcf19 \clbrdrb\brdrs\brdrw10\brdrcf19 \clbrdrr\brdrs\brdrw10\brdrcf19 +\clcbpat8\cltxlrtb\clftsWidth3\clwWidth6235\clpadt93\clpadft3\clcbpatraw8 \cellx10173\row {\listtext\tab}}\pard\plain \ltrpar\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb\brdrs\brdrw10\brdrcf17 +\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \ab\af24\afs28\alang1025 \ltrch\fcs0 \b\fs32\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 Felhaszn\'e1\loch\f0 \hich\f0 l\'f3\loch\f0 \hich\f0 i \'fa\loch\f0 \hich\f0 tmutat\'f3}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\insrsid3875544\charrsid13057920 +\par {\listtext\tab}}\pard\plain \ltrpar\s16\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\highlight7\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 Csak a JDBC m\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 +\hich\f0 s eset\'e9\loch\f0 \hich\f0 n sz\'fc\loch\f0 \hich\f0 ks\'e9\loch\f0 \hich\f0 ges, egy\'e9\loch\f0 \hich\f0 bk\'e9\loch\f0 \hich\f0 nt t\'f6\loch\f0 \hich\f0 rlend\'f5\loch\f0 \hich\f0 . Kb. f\'e9\loch\f0 \hich\f0 l oldal terjedelm\'fb\loch\f0 +\hich\f0 haszn\'e1\loch\f0 \hich\f0 lati seg\'e9\loch\f0 \hich\f0 dlet, amely a laikus felhaszn\'e1\loch\f0 \hich\f0 l\'f3\loch\f0 \hich\f0 k sz\'e1\loch\f0 \hich\f0 m\'e1\loch\f0 \hich\f0 ra is \'e9\loch\f0 \hich\f0 rthet\'f5\loch\f0 \hich\f0 + nyelven le\'ed\loch\f0 \hich\f0 rja az alkalmaz\'e1\loch\f0 \hich\f0 s m\'fb\loch\f0 \hich\f0 k\'f6\loch\f0 \hich\f0 d\'e9\loch\f0 s\loch\af0\dbch\af13\hich\f0 \'e9\loch\f0 t. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \highlight7\insrsid3875544\charrsid13057920 + +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8202326 \page }{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 +\b\fs32\cf18\lang1038\langfe1033\loch\af0\hich\af0\dbch\af13\langfenp1033\insrsid8202326 +\par {\listtext\tab}}\pard\plain \ltrpar\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb\brdrs\brdrw10\brdrcf17 \wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 +\ab\af24\afs28\alang1025 \ltrch\fcs0 \b\fs32\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 +\hich\f0 M\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 si feladatok megold\'e1\loch\f0 sa}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3875544\charrsid13057920 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\fs28\cf18\dbch\af13\insrsid2622922 \hich\af0\dbch\af13\loch\f0 1.\tab}}\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sl276\slmult1 +\keepn\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \ab\ai\af24\afs26\alang1025 \ltrch\fcs0 +\b\i\fs28\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid2622922 \hich\af0\dbch\af13\loch\f0 f}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\lang1038\langfe1033\langnp1038\insrsid5396656\charrsid13057920 \hich\af0\dbch\af13\loch\f0 eladat}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid2622922 \hich\af0\dbch\af13\loch\f0 : }{\rtlch\fcs1 \af0 \ltrch\fcs0 +\lang1038\langfe1033\highlight7\langnp1038\insrsid1735947 \hich\af0\dbch\af13\loch\f0 \hich\f0 r\'f6\loch\f0 vid}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\highlight7\langnp1038\insrsid2622922\charrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 + c\'ed\loch\f0 m}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid5396656\charrsid13057920 +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid13057920\charrsid1381961 \hich\af0\dbch\af31505\loch\f0 \hich\f0 Ide ker\'fc\loch\f0 \hich\f0 +l a feladat megold\'e1\loch\f0 \hich\f0 s\'e1\loch\f0 \hich\f0 nak magyar\'e1\loch\f0 \hich\f0 zata, esetleges k\'e9\loch\f0 \hich\f0 pekkel, forr\'e1\loch\f0 \hich\f0 sk\'f3\loch\f0 \hich\f0 d r\'e9\loch\f0 szletekkel}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\highlight7\insrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 \'e9\loch\f0 \hich\f0 s a tesztel\'e9\loch\f0 \hich\f0 s menet\'e9\loch\f0 \hich\f0 nek le\'ed\loch\f0 \hich\f0 r\'e1\loch\f0 sa}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\highlight7\insrsid2622922 \hich\af0\dbch\af31505\loch\f0 \hich\f0 j\'f3\loch\f0 \hich\f0 l strukt\'fa\loch\f0 \hich\f0 r\'e1\loch\f0 \hich\f0 tlan. Ha az adott feladatra valamelyik r\'e9\loch\f0 \hich\f0 sz nem \'e9\hich\af0\dbch\af31505\loch\f0 +\hich\f0 rtelmezett, akkor az t\'f6\loch\f0 \hich\f0 rlend\'f5.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid8202326 +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af0\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 A megold\'e1\loch\f31502 \hich\f31502 shoz haszn\'e1 +\loch\f31502 \hich\f31502 lt SQL utas\'ed\loch\f31502 \hich\f31502 t\'e1\loch\f31502 s +\par }\pard\plain \ltrpar\s26\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 Ha a feladat megold\'e1\loch\f0 \hich\f0 s\'e1\loch\f0 \hich\f0 hoz sz\'fc +\loch\f0 \hich\f0 ks\'e9\loch\f0 \hich\f0 g volt SQL utas\'ed\loch\f0 \hich\f0 t\'e1\loch\f0 \hich\f0 sra, azt itt t\'fc\loch\f0 \hich\f0 ntess\'fc\loch\f0 \hich\f0 k fel, a K\'f3\loch\f0 \hich\f0 d st\'ed\loch\f0 \hich\f0 lus seg\'ed\loch\f0 \hich\f0 ts +\'e9\loch\f0 \hich\f0 g\'e9\loch\f0 vel!}{\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par }\pard\plain \ltrpar\s27\ql \li284\ri0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0\pararsid2622922 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 +\f2\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid2622922 SELECT * +\par FROM code +\par WHERE +\par egyik = 5 +\par AND masik = 6; +\par STB. STB. +\par }\pard\plain \ltrpar\s26\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 Hacsak m\'e1\hich\af0\dbch\af13\loch\f0 \hich\f0 sk\'e9\loch\f0 \hich\f0 +nt nem indokolja a megold\'e1\loch\f0 \hich\f0 s logik\'e1\loch\f0 \hich\f0 ja, a k\'f3\loch\f0 d mindig maradjon egyben.}{\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af0\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 Magyar\'e1\loch\f31502 zat +\par }\pard\plain \ltrpar\s26\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 A feladatot \'ed\loch\f0 \hich\f0 gy \'e9\loch\f0 \hich\f0 s \'ed\loch\f0 +gy oldottam meg. +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af0\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 Tesztel\'e9\loch\f31502 s menete +\par }\pard\plain \ltrpar\s26\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 A feladatot \'ed\loch\f0 \hich\f0 gy \'e9\loch\f0 \hich\f0 s \'ed\loch\f0 +\hich\f0 gy teszteltem. Screenshot \'e9\loch\f0 \hich\f0 s/vagy konzolb\'f3\loch\f0 \hich\f0 l kim\'e1\loch\f0 \hich\f0 solt kimenet al\'e1\loch\f0 bb: +\par }\pard\plain \ltrpar\s27\ql \li284\ri0\widctlpar\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin284\itap0\pararsid2622922 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 +\f2\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid2622922 $ curl https://vsza.hu/airports/BUD.json +\par \{ +\par "location": "Budapest, Hungary", +\par "name": "Budapest Ferihegy International Airport" +\par \} +\par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb200\sl259\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \ab\af0\afs22\alang1025 \ltrch\fcs0 +\b\fs22\lang1038\langfe1038\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2622922 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 P\'e9\loch\f31502 ldaadatok +\par }\pard\plain \ltrpar\s26\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af24 \ltrch\fcs0 \i\insrsid2622922 \hich\af0\dbch\af13\loch\f0 \hich\f0 Ha a feladat tesztel\'e9\loch\f0 \hich\f0 s\'e9\loch\f0 \hich\f0 hez sz\'fc +\loch\f0 \hich\f0 ks\'e9\loch\f0 \hich\f0 g van p\'e9\loch\f0 \hich\f0 ldaadatokra, azt itt t\'fc\loch\f0 \hich\f0 ntess\'fc\loch\f0 k fel:}{\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af41\alang1081 \ltrch\fcs0 \f3\cf18\lang1038\langfe2052\langfenp2052\insrsid2622922 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-360\li1004\ri0\widctlpar +\tx3264\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1004\itap0\pararsid2622922 \rtlch\fcs1 \af41\afs24\alang1081 \ltrch\fcs0 \f2\fs24\cf18\lang1038\langfe2052\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\insrsid2622922 ID = 42 +\par }\pard\plain \ltrpar\s26\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2622922 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \af24 \ltrch\fcs0 \insrsid2622922 +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid2622922 +\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid5396656\charrsid13057920 \page }{\rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\fs28\cf18\lang1038\langfe1033\loch\af0\hich\af0\dbch\af13\langfenp1033\insrsid5396656\charrsid13057920 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\fs28\cf18\lang1033\langfe1033\dbch\af13\langnp1033\insrsid5531892 \hich\af0\dbch\af13\loch\f0 2.\tab}}\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sl276\slmult1 +\keepn\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \ab\ai\af24\afs26\alang1025 \ltrch\fcs0 +\b\i\fs28\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5531892 \hich\af0\dbch\af13\loch\f0 f}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5396656\charrsid13057920 +\hich\af0\dbch\af13\loch\f0 eladat +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9056847 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid1381961\charrsid1381961 \hich\af0\dbch\af31505\loch\f0 \hich\f0 Ide ker\'fc\loch\f0 \hich\f0 +l a feladat megold\'e1\loch\f0 \hich\f0 s\'e1\loch\f0 \hich\f0 nak magyar\'e1\hich\af0\dbch\af31505\loch\f0 \hich\f0 zata, esetleges k\'e9\loch\f0 \hich\f0 pekkel, forr\'e1\loch\f0 \hich\f0 sk\'f3\loch\f0 d }{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\highlight7\insrsid1381961\charrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 r\'e9\loch\f0 szletekkel}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid9056847\charrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 \'e9\loch\f0 \hich\f0 +s a tesztel\'e9\loch\f0 s }{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid9056847 \hich\af0\dbch\af31505\loch\f0 \hich\f0 menet\'e9\loch\f0 \hich\f0 nek le\'ed\loch\f0 \hich\f0 r\'e1\loch\f0 sa}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\highlight7\insrsid5531892 \hich\af0\dbch\af31505\loch\f0 \hich\f0 az 1. feladatn\'e1\loch\f0 \hich\f0 l r\'e9\loch\f0 szletezettek szerint}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\highlight7\insrsid9056847\charrsid1381961 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f0\insrsid9056847 +\par {\listtext\tab}}\pard\plain \ltrpar\s24\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin0\itap0\pararsid1381961\contextualspace \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\insrsid1381961\charrsid1381961 +\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1038\langfe1038\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1038\langfenp1038 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8202326 \page }{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 +\b\fs32\cf18\lang1038\langfe1033\loch\af0\hich\af0\dbch\af13\langfenp1033\insrsid8202326 +\par {\listtext\tab}}\pard\plain \ltrpar\s1\ql \li0\ri0\sb480\sl276\slmult1\keepn\nowidctlpar\noline\brdrb\brdrs\brdrw10\brdrcf17 \wrapdefault\hyphpar0\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 +\ab\af24\afs28\alang1025 \ltrch\fcs0 \b\fs32\cf18\lang1033\langfe1033\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1038\langfe1033\langnp1038\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 +\hich\f0 V\'e9\loch\f0 \hich\f0 lem\'e9\loch\f0 \hich\f0 ny(ek) a m\'e9\loch\f0 \hich\f0 r\'e9\loch\f0 \hich\f0 sr\'f5\loch\f0 l}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3875544\charrsid13057920 +\par }\pard\plain \ltrpar\s16\qj \li0\ri0\sa120\sl276\slmult1\nowidctlpar\wrapdefault\hyphpar0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3875544 \rtlch\fcs1 \af24\afs24\alang1081 \ltrch\fcs0 +\fs24\cf18\lang1038\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1038\langfenp2052 {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\highlight7\insrsid3875544\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 V\'e9\loch\f0 \hich\f0 lem\'e9\loch\f0 \hich\f0 +ny, \'e9\loch\f0 \hich\f0 p\'ed\loch\f0 \hich\f0 t\'f5\loch\f0 \hich\f0 jelleg\'fb\loch\f0 kritika.}{\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\highlight7\insrsid3736527\charrsid13057920 \hich\af0\dbch\af13\loch\f0 \hich\f0 Ha nincs, t\'f6\loch\f0 \hich\f0 +rlend\'f5.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3875544\charrsid13057920 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100e3281357c2060000581a0000160000007468656d652f7468656d652f +7468656d65312e786d6cec59cf8f1b3514be23f13f8ce69ee6d7cc2459355b2593a40bdd6dab262dead1499c8cbb9e9968ecec36aa2aa1f688848428880395b8 +2184804aadc4a59cf853168aa048fc0b3c7b26133b71d876b58715eaee25e3f9def3e7f7ecefd9e3cb57ee87d43ac2092371d4b4cb974ab685a3513c26d1b469 +df1ef40a75db621c456344e30837ed0566f695ddf7dfbb8c767880436c817dc47650d30e389fed148b6c04cd885d8a673882779338091187c7645a1c27e818fc +86b4582995bc628848645b110ac1ed8dc9848c7081fffa5d88ecdda5f32e851e22ce44c388267de11a6b16123b3e2c0b045b309f26d611a24d1bfa19c7c7037c +9fdb16458cc38ba65d927f7671f77211ed6446946fb155ec7af22fb3cb0cc68715d967321de69d3a8eeb78addcbf0450be89ebd6ba5ed7cbfd49001a8d60a429 +17d5a7db6eb43b6e865540e94f83ef4ead532d6b78c57f758373cb15ff1a5e8252ffce06bed7f3218a1a5e8252bcbb81779c5ac57734bc04a5786f035f2bb53a +4e4dc34b50404974b8812eb95ed55f8e36874c62ba6784375ca757ab64ce5728980df9ec125d4ce2886f9b6b21ba17273d000820459c44165fccf0048d6016fb +88926142ac7d320db8e806ed60a4bc4f9b466ca349f468b1514266bc697f3843b02e565eff79f9c33f2f9f5b278f5e9c3cfaf9e4f1e393473fa58e34ab3d144d +55abd7df7ef6f7d38fadbf9e7ff3fac917663c53f1bffff8c96fbf7c6e06c2225ad179f5e5b33f5e3c7bf5d5a77f7effc4006f2568a8c20724c4ccba8e8fad5b +7108039351d199e361f27616830011d5a2154d198a90e8c5e0bfcb030d7d7d812832e0da588fe09d0444c404bc3abfa711ee07c99c1383c76b41a8010fe298b6 +e3c418856ba22f25cc83793435779ecc55dc2d848e4c7dfb28d2f2db9dcf403d89c9a51f608de64d8a228ea638c2dc12efe2438c0da3bb4b8816d703324a6216 +4fb87597586d448c211990a1369b56467b2484bc2c4c0421df5a6c0eee58ed989a46ddc1473a125605a206f2034cb5305e45738e4293cb010aa91af07dc40313 +c9fe2219a9b82ee390e929a6b1d51d63c64c36371218af92f46b2020e6b41fd045a823134e0e4d3ef7511cabc84e7ce807289c99b07d12052af6037608531459 +37636e821fc4fa0a11cf9007146d4df71d82b5749fae06b7413b554aab0922decc13432eafe2589bbffd059d202ca506a45d53ec9044a7ca77dac3f9093748e5 +abaf9f1a785f54c96e25c4b866f6d6847a1b6e5d9efd3819938bafce1d348f6e6258109b25ea9d38bf1367fb7f2fcedbd6f3f94bf24a8541a0c56630dd6ecbcd +77b875ef3d2194f6f982e27d26b7df0c6acfb8078dc24e9e3b717e169b05f053ac64e840c34d13246dac24e61f111ef4033483ad7bd9164ea62c733d65d62c66 +706494cd46df024fe7e1413c4e8f9ce5b2385ea6e2c1105fb597dcbc1d8e0b3c457bb5d5312a772fd94ee571774940d8be0d09a5339d44d540a2b66c14419287 +6b089a81841cd9b9b0681858d485fb65aa365800b53c2bb039b2604bd5b45d074cc008ce4c88e2b1c8539aea65766532cf33d3db82a9cd80127cd7c866c02ad3 +0dc175ebf0c4e8d2a9f60699d64828d34d272123236b180bd01867b353b4be098db7cd756395528d9e0845160b8546adfe5f2cce9a6bb05bd7061aa94a4123eb +b8697b5517a6cc08cd9af6048eeef0339cc1dc6162538be814be7f8d78922ef8b328cb2c61bc835890065c8a4eaa0621e138b128099bb6187e9e061a490d91dc +ca1510840b4bae01b272d1c841d2f524e3c9048fb89a76a545443a7d04854fb5c2f8569a9f1d2c2ce339a4bb1f8c8fad219d27b7104c31b75616011c1306df77 +ca6934c7043e49e642b69a7f6b8529935df59ba09c43693ba2b30065154515f3142ea53ca7239ff218284fd99821a04a48b242389c8a02ab0655aba679d54839 +6cadbaa71b89c829a2b9aa999aaa88aa695631ad876519588be5d98abcc26a196228976a854fa57b5d721b4bad5bdb27e45502029ec7cf5075dfa02028d4569d +69d404e34d19169a9db5eab56339c053a8bd49915054df5bba5d8b5b5e238cdd41e3992a3fd8adcf5a689a2cf79532d2f2ee42bd5e8887f7403c3af021774e39 +93a984cb8304c186a82ff724a96cc012b9cfb3a501bfac79429af68392db72fc8aeb174a75b75b70aa4ea950775bd542cb75abe5ae5b2e75da95875058781096 +ddf4dea4071f9be822bb3d91ed1b3728e1f27bdaa5511c166379435294c4e50d4ab992dda0c81b98a6ad5fa558037157625b04d4e78157e935aa8db65768545b +bd82d369d70b0ddf6b173a9e5febf43abe5b6ff41edad691043badaaef78dd7ac12bfb7ec1f14a621cf546a1e6542a2da7d6aa779dd6c36c3f03214875240b0a +c45912dcfd170000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d +654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb97 +9dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f +56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df +000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f5479 +7065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c +73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d65 +4d616e616765722e786d6c504b01022d0014000600080000002100e3281357c2060000581a00001600000000000000000000000000d60200007468656d652f74 +68656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000cc0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000c70a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority0 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdpriority0 \lsdlocked0 Body Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority39 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; +\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography; +\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000f088 +0b4931afd701feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/jegyzokonyv/tex-sablon.tex b/jegyzokonyv/tex-sablon.tex new file mode 100644 index 000000000..b11d53ff4 --- /dev/null +++ b/jegyzokonyv/tex-sablon.tex @@ -0,0 +1,169 @@ +% Adatbazisok Laboratorium LaTeX sablon +% +% Keszitette: Szepes Nora, 2017. +% Danyi Bence 2013-mas sablonja alapjan +% +% XeLaTex kell hozz a klnbz bettpusok miatt. +% +% A sablon hasznlata: +% A \fillme reszek kitoltese +% 1. A fedlap adatainak kitltse +% 2. A feladatok rsz kitltse +% (3.) Megjegysek a mrshez +% + +% Minden egyb dolgot figyelmen kvl lehet hagyni. +\documentclass[12pt]{article} +\usepackage{fontspec} +\setmainfont[Ligatures=TeX]{Arial} +\usepackage{amssymb,amsmath} +\usepackage{parskip} +\usepackage{graphicx} +\usepackage{moreverb} +\usepackage{array} +\usepackage{titlesec} +\usepackage[left=1.77cm,top=1.27cm,right=1.27cm,nohead,nofoot]{geometry} +\usepackage[magyar]{babel} +\usepackage{xcolor} +%sarga hatter a kitoltendo reszekhez +\usepackage{soul} +\sethlcolor{yellow} +\newcommand{\fillme}[1]{\emph{\hl{#1}}} + + +% rtelemszeren kitltend +% A nem szksges mezk trlendk +\newcommand{\nev}{\fillme{Minta Andrea}} +\newcommand{\neptun}{\fillme{ABCD123}} +\newcommand{\feladat}{\fillme{16 -- BANK}} +\newcommand{\meresvezeto}{\fillme{Msik Ember}} +\newcommand{\meresideje}{\fillme{2011-03-28 8:00}} +\newcommand{\mereshelye}{\fillme{HSZK Q}} +\newcommand{\elerhetoseg}{\fillme{trlend, ha nem kri az tmutat}} +\newcommand{\felhasznalonev}{\fillme{trlend, ha nem kri az tmutat}} +\newcommand{\jelszo}{\fillme{trlend, ha nem kri az tmutat}} +\newcommand{\megoldott}{\fillme{1, 2, 3a, 4}} +% a megoldottnak jellt feladatok max pontszmnak sszege pluszpontok nlkl +\newcommand{\pont}{\fillme{2,5}} +% Ugorj a feladatokhoz! +% Itt ne bnts semmit... + +\renewcommand{\arraystretch}{1.2} +\renewcommand{\thesection}{\arabic{section}.} +\titleformat +{\section} +{\large\bfseries\itshape} +{\thesection} +{3.8cm}{\vspace{-0.5cm}} +\titlespacing{\section}{-0.5cm}{0pt}{12pt} + +\begin{document} +% FEJLEC ELKESZITESE +\begin{center} +\vspace{6pt} +\hspace{-0.5cm}{\Huge\textbf{Labor dokumentci -- Adatbzisok Laboratrium}} + +\vspace{6pt} +\hspace{-0.5cm}{\Large\emph{\fillme{X}. mrs: \fillme{Mrs neve}}} + +\vspace{12pt} +\hspace{-0.5cm}\begin{tabular}[h]{|p{10cm}|p{8cm}|} +\hline {Nv:} & \textbf{\nev} \\ +\hline {Neptun kd:} & \textbf{\neptun} \\ +\hline {Feladat kdja:} & \textbf{\feladat} \\ +\hline {Mrsvezet neve:} & \textbf{\meresvezeto} \\ +\hline {Mrs idpontja:} & \textbf{\meresideje} \\ +\hline {Mrs helyszne:} & \textbf{\mereshelye} \\ +\hline {A mkd alkalmazs elrhetsge:} & \textbf{\elerhetoseg} \\ +\hline {Felhasznlnv:} & \textbf{\felhasznalonev} \\ +\hline {Jelsz:} & \textbf{\jelszo} \\ +\hline {Megoldott feladatok:} & \textbf{\megoldott} \\ +\hline {Elrhet pontszm (a megoldottnak jellt feladatok max pontszmnak sszege pluszpontok nlkl):} & \textbf{\pont p} \\ +\hline +\end{tabular} +\end{center} + +% FELHASZNALOI UTMUTATO JDBC-HEZ +\vspace{24pt} +\hspace{-0.5cm}{\Large \textbf{Felhasznli tmutat}} + +\vspace{-0.5cm} +\hspace{-0.5cm}\rule{\textwidth}{0.4pt} + +\fillme{Csak a JDBC mrs esetn szksges, egybknt trlend. Kb. fl oldal terjedelm hasznlati segdlet, amely a laikus felhasznlk szmra is rthet nyelven lerja az alkalmazs mkdst.} +\newpage + +% FELADATOK MEGOLDASANAK LEIRASA +\vspace{24pt} +\hspace{-0.5cm}{\Large \textbf{Mrsi feladatok megoldsa}} + +\vspace{-0.5cm} +\hspace{-0.5cm}\rule{1.02\textwidth}{0.4pt} + + +% ITT KEZDODNEK A FELADATOK +% ERDEMES MINDNE FELADATOT UJ OLDALRA RAKNI +\section{Feladat} + +\textbf{\fillme{Magyarzat}} + +\fillme{Ide kerl a feladat megoldsnak magyarzata, esetleges kpekkel, forrskd rszletekkel. Lehet menet kzben kd az egyes feladatok megoldsban, erre hasznljuk a kd stlust! Forrskdot kpknt nem szrhatsz be!} +% Ha szkzkkel indentlsz, akkor j a sima verbatim krnyezet is +\begin{verbatimtab} + SELECT * + FROM CODE + WHERE + EGYIK = 5 + AND MASIK = 6; + STB. STB. +\end{verbatimtab} + + +\textbf{\fillme{Tesztels menete}} + +\fillme{A feladatot gy s gy teszteltem. Parancsokat szvegknt kell beilleszteni, egyb esetben screenshot s/vagy konzolbl kimsolt kimenet.} + +\textbf{\fillme{Pldaadatok}} + +\fillme{Ha a feladat tesztelshez szksg van pldaadatokra, azt itt tntessk fel.} + + + +\newpage +\section{Feladat} + + +\textbf{\fillme{Magyarzat}} + +\fillme{Ide kerl a feladat megoldsnak magyarzata, esetleges kpekkel, forrskd rszletekkel. Lehet menet kzben kd az egyes feladatok megoldsban, erre hasznljuk a kd stlust! Forrskdot kpknt nem szrhatsz be!} +% Ha szkzkkel indentlsz, akkor j a sima verbatim krnyezet is +\begin{verbatimtab} + SELECT * + FROM CODE + WHERE + EGYIK = 5 + AND MASIK = 6; + STB. STB. +\end{verbatimtab} + + +\textbf{\fillme{Tesztels menete}} + +\fillme{A feladatot gy s gy teszteltem. Parancsokat szvegknt kell beilleszteni, egyb esetben screenshot s/vagy konzolbl kimsolt kimenet.} + +\textbf{\fillme{Pldaadatok}} + +\fillme{Ha a feladat tesztelshez szksg van pldaadatokra, azt itt tntessk fel.} + + +% VELEMENY A MERESROL +\newpage +\vspace{24pt} +\hspace{-0.5cm}{\Large \textbf{Vlemny(ek) a mrsrl}} + +\vspace{-0.5cm} +\hspace{-0.5cm}\rule{\textwidth}{0.4pt} +% Ide jhetnek a megjegyzsek + +\fillme{Vlemny, pt jelleg kritika. Ha nincs, trlend.} +\end{document} \ No newline at end of file diff --git a/jegyzokonyv/tudnivalok/index.md b/jegyzokonyv/tudnivalok/index.md new file mode 100644 index 000000000..a512e43d0 --- /dev/null +++ b/jegyzokonyv/tudnivalok/index.md @@ -0,0 +1,66 @@ +--- +layout: page +title: Labormunka dokumentálása +--- + +## Tudnivalók a laborokban végzett munkáról készítendő dokumentum elkészítéséhez + +Az adatbáziskezeléshez kapcsolódó, különböző laborokban végzett munkáról nem egy típusjegyzőkönyv, hanem egy minden hallgató számára egyedi dokumentum készítendő, amely a hallgató saját megoldásmenetét, egyedi megoldásait kell, hogy tartalmazza ("szerzői mű"). Az oktatás sajátosságai miatt a különböző hallgatók dokumentumainak lesznek közös tartalmi és formai elemei, amelyek betartásához sablon fileok szolgálnak segítségül. + +Sablonok: +[doc](../doc-sablon.doc) +[docx](../docx-sablon.docx) +[odt](../odt-sablon.odt) +[rtf](../rtf-sablon.rtf) +[LaTeX](../tex-sablon.tex) + +1. **Az alábbi szabályok be nem tartása pontlevonással, vagy a laborban végzett munka elutasításával járhat.** +2. A dokumentum fejlécében minden adat pontosan és helyesen kitöltendő. +3. A feladat szövegét a dokumentum ne tartalmazza! +4. A nem megoldott feladatok sorszámát ki kell törölni. A feladatok sorszáma egyezzen meg a kiadott feladatsorban található sorszámokkal! +5. A vélemény rész csak vélemény írása esetén szerepeljen, különben ez is törlendő. +6. Hivatkozások (link, képek, forráskód): + - A hivatkozásokat tedd lábjegyzetbe! A plágiumvád elkerülése érdekében **mindennek** megjelölendő a forrása, ami nem saját alkotás (pl.: Stackoverflow), ez alól csak a hivatalosan kiadott anyagok tartalma képez kivételt. + - A képeket a magyarázat közelébe (pl. elé vagy alá) helyezd el! Amennyiben ez nem lehetséges, akkor adj nekik sorszámot és/vagy címet, és úgy hivatkozz rá! + - Csak jó minőségű, könnyen olvasható képeket helyezz el a dokumentumban! + - Forráskód, parancssori művelet ill. ezek szöveges kimenete, ha szükséges a megoldás dokumentálására, akkor szöveges tartalomként jelenjen meg a dokumentumban. Csak képként beszúrva nem elfogadható! + - Lehet hivatkozni a forrásra fájlnév/sor módon is, de be is másolhatók a releváns részletek. A forráskódot a magyarázat közelébe (pl. elé vagy alá) helyezd el! Az egész forráskódot nem szabad/felesleges bemásolni a dokumentumba, mert a forrásfájlokat úgyis mellékelni kell. + - A kód igényesen formázandó, ehhez segítség pl. itt http://hilite.me/ található. +7. Magyarázat: + - Magyarázat nélküli képeket, forráskódokat ne hagyj a dokumentumban, mert ezt úgy veszik a javítók, mintha ott sem lenne: + - Kép esetében írd le, hogy mi látható a képen! + - Forráskód esetén írd le, hogy mit csinál (szerinted) az adott kódrészlet! + - A magyarázatban szerepeltesd, hogy miképpen jutottál el a megoldásig! + - Ha esetleg valamit kipróbáltál, de nem működött, az is dokumentálható, hiszen ez is a feladat megoldásához vezető út része volt. + - Figyelj a helyesírásra, a szakmaiságra és a könnyen érthető megfogalmazásra, mert a cél az, hogy az értékelőt meg tudd győzni a feladat megoldásáról, annak megalapozottságáról, helyességéről! A leírtak alapján a munka reprodukálható kell, hogy legyen. + - A működést a tesztelés részletezésével kell bizonyítani, mert enélkül úgy tűnhet a javító számára, hogy az elkészült programot, szkriptet kipróbálás nélkül adtad be. + - Ahol a feladat kéri, ott mintaadatokat is adj meg, amivel a javító is tesztelhet. +8. A dokumentumot olyan pdf formátumban kell beadni, amiből minden szöveges tartalom könnyen kinyerhető. Az egyéb fájlformátumokat a javítók nem fogják elfogadni. +9. A dokumentumot az útmutatóban szerepeltetett kiírás figyelembevételével kell feltölteni. + - A fájlok neveit célszerű gondosan ellenőrizni, mert a fájlokat feldolgozó programok csak a megadott inputot fogadják el. + +  + + +## Minta a dokumentumhoz + +### 1. Feladat (mintamegoldás) + +A feladat megoldásához le kellett kérnem az adatbázisból a megfelelő rekordokat. Ehhez a következő SQL utasítást használtam: +``` SQL +SELECT nev, cim FROM ember WHERE kor = 54 +``` +Ezzel az utasítással kiválasztom azokat az embereket, akik 54 évesek, majd lekérem a nevüket és a címüket. + +Ezután a Java kódot készítettem el. Ehhez a HelloWorldApp.java fájl HelloWorldApp osztály main metódusában végeztem el a kezdeti módosításokat, ez a fájl 31. sorában található. +``` java + public static void main(String[] args) { + System.out.println("Hello World!"); + } +``` + +A metüdus kiírja a megadott sztringet. + +A tesztelés során lefuttattam a programot. Az alábbi képen látszik, hogy az elkészült program az elvárt kimenetet adja. + +![Tesztelés](teszt.png) diff --git a/jegyzokonyv/tudnivalok/teszt.png b/jegyzokonyv/tudnivalok/teszt.png new file mode 100644 index 000000000..580b94dc8 Binary files /dev/null and b/jegyzokonyv/tudnivalok/teszt.png differ diff --git a/sajtohibak.md b/sajtohibak.md new file mode 100644 index 000000000..20e752f26 --- /dev/null +++ b/sajtohibak.md @@ -0,0 +1,4 @@ +--- +redirect_to: + - /adatbazisok/jegyzet-sajtohibak +--- diff --git a/scripts/MathJax.js b/scripts/MathJax.js new file mode 100644 index 000000000..c54a1ed2d --- /dev/null +++ b/scripts/MathJax.js @@ -0,0 +1,19 @@ +/* + * /MathJax.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.5";MathJax.fileversion="2.7.5";MathJax.cdnVersion="2.7.5";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1&&typeof(args[0])==="function"){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; diff --git a/scripts/config/TeX-AMS_CHTML.js b/scripts/config/TeX-AMS_CHTML.js new file mode 100644 index 000000000..d531549af --- /dev/null +++ b/scripts/config/TeX-AMS_CHTML.js @@ -0,0 +1,57 @@ +/* + * /MathJax/config/TeX-AMS_CHTML.js + * + * Copyright (c) 2010-2018 The MathJax Consortium + * + * Part of the MathJax library. + * See http://www.mathjax.org for details. + * + * Licensed under the Apache License, Version 2.0; + * you may not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +MathJax.Ajax.Preloading( + "[MathJax]/jax/input/TeX/config.js", + "[MathJax]/jax/output/CommonHTML/config.js", + "[MathJax]/jax/output/PreviewHTML/config.js", + "[MathJax]/extensions/tex2jax.js", + "[MathJax]/extensions/MathEvents.js", + "[MathJax]/extensions/MathZoom.js", + "[MathJax]/extensions/MathMenu.js", + "[MathJax]/jax/element/mml/jax.js", + "[MathJax]/extensions/toMathML.js", + "[MathJax]/extensions/TeX/noErrors.js", + "[MathJax]/extensions/TeX/noUndefined.js", + "[MathJax]/jax/input/TeX/jax.js", + "[MathJax]/extensions/TeX/AMSmath.js", + "[MathJax]/extensions/TeX/AMSsymbols.js", + "[MathJax]/jax/output/PreviewHTML/jax.js", + "[MathJax]/extensions/fast-preview.js", + "[MathJax]/extensions/AssistiveMML.js", + "[MathJax]/extensions/a11y/accessibility-menu.js" +); + +MathJax.Hub.Config({ + extensions: ['[a11y]/accessibility-menu.js'] +}); + +MathJax.InputJax.TeX=MathJax.InputJax({id:"TeX",version:"2.7.5",directory:MathJax.InputJax.directory+"/TeX",extensionDir:MathJax.InputJax.extensionDir+"/TeX",config:{TagSide:"right",TagIndent:"0.8em",MultLineWidth:"85%",equationNumbers:{autoNumber:"none",formatNumber:function(a){return a},formatTag:function(a){return"("+a+")"},formatID:function(a){return"mjx-eqn-"+String(a).replace(/\s/g,"_")},formatURL:function(b,a){return a+"#"+encodeURIComponent(b)},useLabelIds:true}},resetEquationNumbers:function(){}});MathJax.InputJax.TeX.Register("math/tex");MathJax.InputJax.TeX.loadComplete("config.js"); +MathJax.OutputJax.CommonHTML=MathJax.OutputJax({id:"CommonHTML",version:"2.7.5",directory:MathJax.OutputJax.directory+"/CommonHTML",extensionDir:MathJax.OutputJax.extensionDir+"/CommonHTML",autoloadDir:MathJax.OutputJax.directory+"/CommonHTML/autoload",fontDir:MathJax.OutputJax.directory+"/CommonHTML/fonts",webfontDir:MathJax.OutputJax.fontDir+"/HTML-CSS",config:{matchFontHeight:true,scale:100,minScaleAdjust:50,mtextFontInherit:false,undefinedFamily:"STIXGeneral,'Cambria Math','Arial Unicode MS',serif",EqnChunk:(MathJax.Hub.Browser.isMobile?20:100),EqnChunkFactor:1.5,EqnChunkDelay:100,linebreaks:{automatic:false,width:"container"}}});if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax.CommonHTML.Register("jax/mml")}MathJax.OutputJax.CommonHTML.loadComplete("config.js"); +MathJax.OutputJax.PreviewHTML=MathJax.OutputJax({id:"PreviewHTML",version:"2.7.5",directory:MathJax.OutputJax.directory+"/PreviewHTML",extensionDir:MathJax.OutputJax.extensionDir+"/PreviewHTML",noFastPreview:true,config:{scale:100,minScaleAdjust:50,mtextFontInherit:false,linebreaks:{automatic:false,width:"container"}}});if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax.PreviewHTML.Register("jax/mml")}MathJax.OutputJax.PreviewHTML.loadComplete("config.js"); +MathJax.Extension.tex2jax={version:"2.7.5",config:{inlineMath:[["\\(","\\)"]],displayMath:[["$$","$$"],["\\[","\\]"]],skipTags:["script","noscript","style","textarea","pre","code","annotation","annotation-xml"],ignoreClass:"tex2jax_ignore",processClass:"tex2jax_process",processEscapes:false,processEnvironments:true,processRefs:true,preview:"TeX"},ignoreTags:{br:(MathJax.Hub.Browser.isMSIE&&document.documentMode<9?"\n":" "),wbr:"","#comment":""},PreProcess:function(a){if(!this.configured){this.config=MathJax.Hub.CombineConfig("tex2jax",this.config);if(this.config.Augment){MathJax.Hub.Insert(this,this.config.Augment)}if(typeof(this.config.previewTeX)!=="undefined"&&!this.config.previewTeX){this.config.preview="none"}this.configured=true}if(typeof(a)==="string"){a=document.getElementById(a)}if(!a){a=document.body}if(this.createPatterns()){this.scanElement(a,a.nextSibling)}},createPatterns:function(){var d=[],e=[],c,a,b=this.config;this.match={};for(c=0,a=b.inlineMath.length;c0)},patternQuote:function(a){return a.replace(/([\^$(){}+*?\-|\[\]\:\\])/g,"\\$1")},endPattern:function(a){return new RegExp(this.patternQuote(a)+"|\\\\.|[{}]","g")},sortLength:function(d,c){if(d.length!==c.length){return c.length-d.length}return(d==c?0:(d0){this.HoverFadeTimer(q,q.hover.inc);return}s.parentNode.removeChild(s);if(r){r.parentNode.removeChild(r)}if(q.hover.remove){clearTimeout(q.hover.remove)}delete q.hover},HoverFadeTimer:function(q,s,r){q.hover.inc=s;if(!q.hover.timer){q.hover.timer=setTimeout(g(["HoverFade",this,q]),(r||o.fadeDelay))}},HoverMenu:function(q){if(!q){q=window.event}return b[this.jax].ContextMenu(q,this.math,true)},ClearHover:function(q){if(q.hover.remove){clearTimeout(q.hover.remove)}if(q.hover.timer){clearTimeout(q.hover.timer)}f.ClearHoverTimer();delete q.hover},Px:function(q){if(Math.abs(q)<0.006){return"0px"}return q.toFixed(2).replace(/\.?0+$/,"")+"px"},getImages:function(){if(k.discoverable){var q=new Image();q.src=o.button.src}}};var a=c.Touch={last:0,delay:500,start:function(r){var q=new Date().getTime();var s=(q-a.lastt){z.style.height=t+"px";z.style.width=(x.zW+this.scrollSize)+"px"}if(z.offsetWidth>l){z.style.width=l+"px";z.style.height=(x.zH+this.scrollSize)+"px"}}if(this.operaPositionBug){z.style.width=Math.min(l,x.zW)+"px"}if(z.offsetWidth>m&&z.offsetWidth-m=9);h.msiePositionBug=!m;h.msieSizeBug=l.versionAtLeast("7.0")&&(!document.documentMode||n===7||n===8);h.msieZIndexBug=(n<=7);h.msieInlineBlockAlignBug=(n<=7);h.msieTrapEventBug=!window.addEventListener;if(document.compatMode==="BackCompat"){h.scrollSize=52}if(m){delete i.styles["#MathJax_Zoom"].filter}},Opera:function(l){h.operaPositionBug=true;h.operaRefreshBug=true}});h.topImg=(h.msieInlineBlockAlignBug?d.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}):d.Element("span",{style:{width:0,height:0,display:"inline-block"}}));if(h.operaPositionBug||h.msieTopBug){h.topImg.style.border="1px solid"}MathJax.Callback.Queue(["StartupHook",MathJax.Hub.Register,"Begin Styles",{}],["Styles",f,i.styles],["Post",a.Startup.signal,"MathZoom Ready"],["loadComplete",f,"[MathJax]/extensions/MathZoom.js"])})(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.OutputJax["HTML-CSS"],MathJax.OutputJax.NativeMML); +(function(f,o,q,e,r){var p="2.7.5";var d=MathJax.Callback.Signal("menu");MathJax.Extension.MathMenu={version:p,signal:d};var t=function(u){return MathJax.Localization._.apply(MathJax.Localization,[["MathMenu",u]].concat([].slice.call(arguments,1)))};var i=MathJax.Object.isArray;var a=f.Browser.isPC,l=f.Browser.isMSIE,m=((document.documentMode||0)>8);var j=(a?null:"5px");var s=f.CombineConfig("MathMenu",{delay:150,showRenderer:true,showMathPlayer:true,showFontMenu:false,showContext:false,showDiscoverable:false,showLocale:true,showLocaleURL:false,semanticsAnnotations:{TeX:["TeX","LaTeX","application/x-tex"],StarMath:["StarMath 5.0"],Maple:["Maple"],ContentMathML:["MathML-Content","application/mathml-content+xml"],OpenMath:["OpenMath"]},windowSettings:{status:"no",toolbar:"no",locationbar:"no",menubar:"no",directories:"no",personalbar:"no",resizable:"yes",scrollbars:"yes",width:400,height:300,left:Math.round((screen.width-400)/2),top:Math.round((screen.height-300)/3)},styles:{"#MathJax_About":{position:"fixed",left:"50%",width:"auto","text-align":"center",border:"3px outset",padding:"1em 2em","background-color":"#DDDDDD",color:"black",cursor:"default","font-family":"message-box","font-size":"120%","font-style":"normal","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":"15px","-webkit-border-radius":"15px","-moz-border-radius":"15px","-khtml-border-radius":"15px","box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},"#MathJax_About.MathJax_MousePost":{outline:"none"},".MathJax_Menu":{position:"absolute","background-color":"white",color:"black",width:"auto",padding:(a?"2px":"5px 0px"),border:"1px solid #CCCCCC",margin:0,cursor:"default",font:"menu","text-align":"left","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":j,"-webkit-border-radius":j,"-moz-border-radius":j,"-khtml-border-radius":j,"box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},".MathJax_MenuItem":{padding:(a?"2px 2em":"1px 2em"),background:"transparent"},".MathJax_MenuArrow":{position:"absolute",right:".5em","padding-top":".25em",color:"#666666","font-family":(l?"'Arial unicode MS'":null),"font-size":".75em"},".MathJax_MenuActive .MathJax_MenuArrow":{color:"white"},".MathJax_MenuArrow.RTL":{left:".5em",right:"auto"},".MathJax_MenuCheck":{position:"absolute",left:".7em","font-family":(l?"'Arial unicode MS'":null)},".MathJax_MenuCheck.RTL":{right:".7em",left:"auto"},".MathJax_MenuRadioCheck":{position:"absolute",left:(a?"1em":".7em")},".MathJax_MenuRadioCheck.RTL":{right:(a?"1em":".7em"),left:"auto"},".MathJax_MenuLabel":{padding:(a?"2px 2em 4px 1.33em":"1px 2em 3px 1.33em"),"font-style":"italic"},".MathJax_MenuRule":{"border-top":(a?"1px solid #CCCCCC":"1px solid #DDDDDD"),margin:(a?"4px 1px 0px":"4px 3px")},".MathJax_MenuDisabled":{color:"GrayText"},".MathJax_MenuActive":{"background-color":(a?"Highlight":"#606872"),color:(a?"HighlightText":"white")},".MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus":{"background-color":"#E8E8E8"},".MathJax_ContextMenu:focus":{outline:"none"},".MathJax_ContextMenu .MathJax_MenuItem:focus":{outline:"none"},"#MathJax_AboutClose":{top:".2em",right:".2em"},".MathJax_Menu .MathJax_MenuClose":{top:"-10px",left:"-10px"},".MathJax_MenuClose":{position:"absolute",cursor:"pointer",display:"inline-block",border:"2px solid #AAA","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","font-family":"'Courier New',Courier","font-size":"24px",color:"#F0F0F0"},".MathJax_MenuClose span":{display:"block","background-color":"#AAA",border:"1.5px solid","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","line-height":0,padding:"8px 0 6px"},".MathJax_MenuClose:hover":{color:"white!important",border:"2px solid #CCC!important"},".MathJax_MenuClose:hover span":{"background-color":"#CCC!important"},".MathJax_MenuClose:hover:focus":{outline:"none"}}});var n,k,b;f.Register.StartupHook("MathEvents Ready",function(){n=MathJax.Extension.MathEvents.Event.False;k=MathJax.Extension.MathEvents.Hover;b=MathJax.Extension.MathEvents.Event.KEY});var h=MathJax.Object.Subclass({Keydown:function(u,v){switch(u.keyCode){case b.ESCAPE:this.Remove(u,v);break;case b.RIGHT:this.Right(u,v);break;case b.LEFT:this.Left(u,v);break;case b.UP:this.Up(u,v);break;case b.DOWN:this.Down(u,v);break;case b.RETURN:case b.SPACE:this.Space(u,v);break;default:return;break}return n(u)},Escape:function(u,v){},Right:function(u,v){},Left:function(u,v){},Up:function(u,v){},Down:function(u,v){},Space:function(u,v){}},{});var g=MathJax.Menu=h.Subclass({version:p,items:[],posted:false,title:null,margin:5,Init:function(u){this.items=[].slice.call(arguments,0)},With:function(u){if(u){f.Insert(this,u)}return this},Post:function(M,E,B){if(!M){M=window.event||{}}var I=document.getElementById("MathJax_MenuFrame");if(!I){I=g.Background(this);delete c.lastItem;delete c.lastMenu;delete g.skipUp;d.Post(["post",g.jax]);g.isRTL=(MathJax.Localization.fontDirection()==="rtl")}var v=o.Element("div",{onmouseup:g.Mouseup,ondblclick:n,ondragstart:n,onselectstart:n,oncontextmenu:n,menuItem:this,className:"MathJax_Menu",onkeydown:g.Keydown,role:"menu"});if(M.type==="contextmenu"||M.type==="mouseover"){v.className+=" MathJax_ContextMenu"}if(!B){MathJax.Localization.setCSS(v)}for(var N=0,K=this.items.length;NA-this.margin){H=A-v.offsetWidth-this.margin}if(g.isMobile){H=Math.max(5,H-Math.floor(v.offsetWidth/2));F-=20}g.skipUp=M.isContextMenu}else{var z="left",J=E.offsetWidth;H=(g.isMobile?30:J-2);F=0;while(E&&E!==I){H+=E.offsetLeft;F+=E.offsetTop;E=E.parentNode}if(!g.isMobile){if((g.isRTL&&H-J-v.offsetWidth>this.margin)||(!g.isRTL&&H+v.offsetWidth>A-this.margin)){z="right";H=Math.max(this.margin,H-J-v.offsetWidth+6)}}if(!a){v.style["borderRadiusTop"+z]=0;v.style["WebkitBorderRadiusTop"+z]=0;v.style["MozBorderRadiusTop"+z]=0;v.style["KhtmlBorderRadiusTop"+z]=0}}v.style.left=H+"px";v.style.top=F+"px";if(document.selection&&document.selection.empty){document.selection.empty()}var G=window.pageXOffset||document.documentElement.scrollLeft;var D=window.pageYOffset||document.documentElement.scrollTop;g.Focus(v);if(M.type==="keydown"){g.skipMouseoverFromKey=true;setTimeout(function(){delete g.skipMouseoverFromKey},s.delay)}window.scrollTo(G,D);return n(M)},Remove:function(u,v){d.Post(["unpost",g.jax]);var w=document.getElementById("MathJax_MenuFrame");if(w){w.parentNode.removeChild(w);if(this.msieFixedPositionBug){detachEvent("onresize",g.Resize)}}if(g.jax.hover){delete g.jax.hover.nofade;k.UnHover(g.jax)}g.Unfocus(v);if(u.type==="mousedown"){g.CurrentNode().blur()}return n(u)},Find:function(u){return this.FindN(1,u,[].slice.call(arguments,1))},FindId:function(u){return this.FindN(0,u,[].slice.call(arguments,1))},FindN:function(y,v,x){for(var w=0,u=this.items.length;w0){u.oldTabIndex=u.tabIndex}u.tabIndex=-1}},SetTabIndex:function(){var v=g.AllNodes();for(var w=0,u;u=v[w];w++){if(u.oldTabIndex!==undefined){u.tabIndex=u.oldTabIndex;delete u.oldTabIndex}else{u.tabIndex=f.getTabOrder(u)}}},Mod:function(u,v){return((u%v)+v)%v},IndexOf:(Array.prototype.indexOf?function(u,v,w){return u.indexOf(v,w)}:function(u,x,y){for(var w=(y||0),v=u.length;w=0&&c.GetMenuNode(w).menuItem!==v[u].menuItem){v[u].menuItem.posted=false;v[u].parentNode.removeChild(v[u]);u--}},Touchstart:function(u,v){return this.TouchEvent(u,v,"Mousedown")},Touchend:function(u,v){return this.TouchEvent(u,v,"Mouseup")},TouchEvent:function(v,w,u){if(this!==c.lastItem){if(c.lastMenu){g.Event(v,c.lastMenu,"Mouseout")}g.Event(v,w,"Mouseover",true);c.lastItem=this;c.lastMenu=w}if(this.nativeTouch){return null}g.Event(v,w,u);return false},Remove:function(u,v){v=v.parentNode.menuItem;return v.Remove(u,v)},With:function(u){if(u){f.Insert(this,u)}return this},isRTL:function(){return g.isRTL},rtlClass:function(){return(this.isRTL()?" RTL":"")}},{GetMenuNode:function(u){return u.parentNode}});g.ENTRY=g.ITEM.Subclass({role:"menuitem",Attributes:function(u){u=f.Insert({onmouseover:g.Mouseover,onmouseout:g.Mouseout,onmousedown:g.Mousedown,onkeydown:g.Keydown,"aria-disabled":!!this.disabled},u);u=this.SUPER(arguments).Attributes.call(this,u);if(this.disabled){u.className+=" MathJax_MenuDisabled"}return u},MoveVertical:function(u,E,w){var x=c.GetMenuNode(E);var D=[];for(var z=0,C=x.menuItem.items,y;y=C[z];z++){if(!y.hidden){D.push(y)}}var B=g.IndexOf(D,this);if(B===-1){return}var A=D.length;var v=x.childNodes;do{B=g.Mod(w(B),A)}while(D[B].hidden||!v[B].role||v[B].role==="separator");this.Deactivate(E);D[B].Activate(u,v[B])},Up:function(v,u){this.MoveVertical(v,u,function(w){return w-1})},Down:function(v,u){this.MoveVertical(v,u,function(w){return w+1})},Right:function(v,u){this.MoveHorizontal(v,u,g.Right,!this.isRTL())},Left:function(v,u){this.MoveHorizontal(v,u,g.Left,this.isRTL())},MoveHorizontal:function(A,z,u,B){var x=c.GetMenuNode(z);if(x.menuItem===g.menu&&A.shiftKey){u(A,z)}if(B){return}if(x.menuItem!==g.menu){this.Deactivate(z)}var v=x.previousSibling.childNodes;var y=v.length;while(y--){var w=v[y];if(w.menuItem.submenu&&w.menuItem.submenu===x.menuItem){g.Focus(w);break}}this.RemoveSubmenus(z)},Space:function(u,v){this.Mouseup(u,v)},Activate:function(u,v){this.Deactivate(v);if(!this.disabled){v.className+=" MathJax_MenuActive"}this.DeactivateSubmenus(v);g.Focus(v)},Deactivate:function(u){u.className=u.className.replace(/ MathJax_MenuActive/,"")}});g.ITEM.COMMAND=g.ENTRY.Subclass({action:function(){},Init:function(u,w,v){if(!i(u)){u=[u,u]}this.name=u;this.action=w;this.With(v)},Label:function(u,v){return[this.Name()]},Mouseup:function(u,v){if(!this.disabled){this.Remove(u,v);d.Post(["command",this]);this.action.call(this,u)}return n(u)}});g.ITEM.SUBMENU=g.ENTRY.Subclass({submenu:null,marker:"\u25BA",markerRTL:"\u25C4",Attributes:function(u){u=f.Insert({"aria-haspopup":"true"},u);u=this.SUPER(arguments).Attributes.call(this,u);return u},Init:function(u,w){if(!i(u)){u=[u,u]}this.name=u;var v=1;if(!(w instanceof g.ITEM)){this.With(w),v++}this.submenu=g.apply(g,[].slice.call(arguments,v))},Label:function(u,v){this.submenu.posted=false;return[this.Name()+" ",["span",{className:"MathJax_MenuArrow"+this.rtlClass()},[this.isRTL()?this.markerRTL:this.marker]]]},Timer:function(u,v){this.ClearTimer();u={type:u.type,clientX:u.clientX,clientY:u.clientY};this.timer=setTimeout(e(["Mouseup",this,u,v]),s.delay)},ClearTimer:function(){if(this.timer){clearTimeout(this.timer)}},Touchend:function(v,x){var w=this.submenu.posted;var u=this.SUPER(arguments).Touchend.apply(this,arguments);if(w){this.Deactivate(x);delete c.lastItem;delete c.lastMenu}return u},Mouseout:function(u,v){if(!this.submenu.posted){this.Deactivate(v)}this.ClearTimer()},Mouseover:function(u,v){this.Activate(u,v)},Mouseup:function(u,v){if(!this.disabled){if(!this.submenu.posted){this.ClearTimer();this.submenu.Post(u,v,this.ltr);g.Focus(v)}else{this.DeactivateSubmenus(v)}}return n(u)},Activate:function(u,v){if(!this.disabled){this.Deactivate(v);v.className+=" MathJax_MenuActive"}if(!this.submenu.posted){this.DeactivateSubmenus(v);if(!g.isMobile){this.Timer(u,v)}}g.Focus(v)},MoveVertical:function(w,v,u){this.ClearTimer();this.SUPER(arguments).MoveVertical.apply(this,arguments)},MoveHorizontal:function(w,y,v,x){if(!x){this.SUPER(arguments).MoveHorizontal.apply(this,arguments);return}if(this.disabled){return}if(!this.submenu.posted){this.Activate(w,y);return}var u=c.GetMenuNode(y).nextSibling.childNodes;if(u.length>0){this.submenu.items[0].Activate(w,u[0])}}});g.ITEM.RADIO=g.ENTRY.Subclass({variable:null,marker:(a?"\u25CF":"\u2713"),role:"menuitemradio",Attributes:function(v){var u=s.settings[this.variable]===this.value?"true":"false";v=f.Insert({"aria-checked":u},v);v=this.SUPER(arguments).Attributes.call(this,v);return v},Init:function(v,u,w){if(!i(v)){v=[v,v]}this.name=v;this.variable=u;this.With(w);if(this.value==null){this.value=this.name[0]}},Label:function(v,w){var u={className:"MathJax_MenuRadioCheck"+this.rtlClass()};if(s.settings[this.variable]!==this.value){u={style:{display:"none"}}}return[["span",u,[this.marker]]," "+this.Name()]},Mouseup:function(x,y){if(!this.disabled){var z=y.parentNode.childNodes;for(var v=0,u=z.length;v/g,">");var y=t("EqSource","MathJax Equation Source");if(g.isMobile){u.document.open();u.document.write(""+y+"");u.document.write("
"+z+"
");u.document.write("
");u.document.write("");u.document.close()}else{u.document.open();u.document.write(""+y+"");u.document.write("
"+z+"
");u.document.write("");u.document.close();var v=u.document.body.firstChild;setTimeout(function(){var B=(u.outerHeight-u.innerHeight)||30,A=(u.outerWidth-u.innerWidth)||30,w,E;A=Math.max(140,Math.min(Math.floor(0.5*screen.width),v.offsetWidth+A+25));B=Math.max(40,Math.min(Math.floor(0.5*screen.height),v.offsetHeight+B+25));if(g.prototype.msieHeightBug){B+=35}u.resizeTo(A,B);var D;try{D=x.screenX}catch(C){}if(x&&D!=null){w=Math.max(0,Math.min(x.screenX-Math.floor(A/2),screen.width-A-20));E=Math.max(0,Math.min(x.screenY-Math.floor(B/2),screen.height-B-20));u.moveTo(w,E)}},50)}};g.Scale=function(){var z=["CommonHTML","HTML-CSS","SVG","NativeMML","PreviewHTML"],u=z.length,y=100,w,v;for(w=0;w7;g.Augment({margin:20,msieBackgroundBug:((document.documentMode||0)<9),msieFixedPositionBug:(v||!w),msieAboutBug:v,msieHeightBug:((document.documentMode||0)<9)});if(m){delete s.styles["#MathJax_About"].filter;delete s.styles[".MathJax_Menu"].filter}},Firefox:function(u){g.skipMouseover=u.isMobile&&u.versionAtLeast("6.0");g.skipMousedown=u.isMobile}});g.isMobile=f.Browser.isMobile;g.noContextMenu=f.Browser.noContextMenu;g.CreateLocaleMenu=function(){if(!g.menu){return}var z=g.menu.Find("Language").submenu,w=z.items;var v=[],B=MathJax.Localization.strings;for(var A in B){if(B.hasOwnProperty(A)){v.push(A)}}v=v.sort();z.items=[];for(var x=0,u=v.length;x0||this.Get("scriptlevel")>0)&&g>=0){return""}return this.TEXSPACELENGTH[Math.abs(g)]},TEXSPACELENGTH:["",a.LENGTH.THINMATHSPACE,a.LENGTH.MEDIUMMATHSPACE,a.LENGTH.THICKMATHSPACE],TEXSPACE:[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]],autoDefault:function(e){return""},isSpacelike:function(){return false},isEmbellished:function(){return false},Core:function(){return this},CoreMO:function(){return this},childIndex:function(g){if(g==null){return}for(var f=0,e=this.data.length;f=55296&&e.charCodeAt(0)<56320)?a.VARIANT.ITALIC:a.VARIANT.NORMAL)}return""},setTeXclass:function(f){this.getPrevClass(f);var e=this.data.join("");if(e.length>1&&e.match(/^[a-z][a-z0-9]*$/i)&&this.texClass===a.TEXCLASS.ORD){this.texClass=a.TEXCLASS.OP;this.autoOP=true}return this}});a.mn=a.mbase.Subclass({type:"mn",isToken:true,texClass:a.TEXCLASS.ORD,defaults:{mathvariant:a.INHERIT,mathsize:a.INHERIT,mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT}});a.mo=a.mbase.Subclass({type:"mo",isToken:true,defaults:{mathvariant:a.INHERIT,mathsize:a.INHERIT,mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT,form:a.AUTO,fence:a.AUTO,separator:a.AUTO,lspace:a.AUTO,rspace:a.AUTO,stretchy:a.AUTO,symmetric:a.AUTO,maxsize:a.AUTO,minsize:a.AUTO,largeop:a.AUTO,movablelimits:a.AUTO,accent:a.AUTO,linebreak:a.LINEBREAK.AUTO,lineleading:a.INHERIT,linebreakstyle:a.AUTO,linebreakmultchar:a.INHERIT,indentalign:a.INHERIT,indentshift:a.INHERIT,indenttarget:a.INHERIT,indentalignfirst:a.INHERIT,indentshiftfirst:a.INHERIT,indentalignlast:a.INHERIT,indentshiftlast:a.INHERIT,texClass:a.AUTO},defaultDef:{form:a.FORM.INFIX,fence:false,separator:false,lspace:a.LENGTH.THICKMATHSPACE,rspace:a.LENGTH.THICKMATHSPACE,stretchy:false,symmetric:false,maxsize:a.SIZE.INFINITY,minsize:"0em",largeop:false,movablelimits:false,accent:false,linebreak:a.LINEBREAK.AUTO,lineleading:"1ex",linebreakstyle:"before",indentalign:a.INDENTALIGN.AUTO,indentshift:"0",indenttarget:"",indentalignfirst:a.INDENTALIGN.INDENTALIGN,indentshiftfirst:a.INDENTSHIFT.INDENTSHIFT,indentalignlast:a.INDENTALIGN.INDENTALIGN,indentshiftlast:a.INDENTSHIFT.INDENTSHIFT,texClass:a.TEXCLASS.REL},SPACE_ATTR:{lspace:1,rspace:2},useMMLspacing:3,hasMMLspacing:function(){if(this.useMMLspacing){return true}return this.form&&(this.OPTABLE[this.form]||{})[this.data.join("")]},autoDefault:function(g,n){var l=this.def;if(!l){if(g==="form"){return this.getForm()}var k=this.data.join("");var f=[this.Get("form"),a.FORM.INFIX,a.FORM.POSTFIX,a.FORM.PREFIX];for(var h=0,e=f.length;h=55296&&k<56320){k=(((k-55296)<<10)+(j.charCodeAt(1)-56320))+65536}for(var g=0,e=this.RANGES.length;g=0;e--){if(this.data[0]&&!this.data[e].isSpacelike()){return this.data[e]}}return null},Core:function(){if(!(this.isEmbellished())||typeof(this.core)==="undefined"){return this}return this.data[this.core]},CoreMO:function(){if(!(this.isEmbellished())||typeof(this.core)==="undefined"){return this}return this.data[this.core].CoreMO()},toString:function(){if(this.inferred){return"["+this.data.join(",")+"]"}return this.SUPER(arguments).toString.call(this)},setTeXclass:function(g){var f,e=this.data.length;if((this.open||this.close)&&(!g||!g.fnOP)){this.getPrevClass(g);g=null;for(f=0;f0){e++}return e},adjustChild_texprimestyle:function(e){if(e==this.den){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setSeparateTeXclasses});a.msqrt=a.mbase.Subclass({type:"msqrt",inferRow:true,linebreakContainer:true,texClass:a.TEXCLASS.ORD,setTeXclass:a.mbase.setSeparateTeXclasses,adjustChild_texprimestyle:function(e){return true}});a.mroot=a.mbase.Subclass({type:"mroot",linebreakContainer:true,texClass:a.TEXCLASS.ORD,adjustChild_displaystyle:function(e){if(e===1){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(f){var e=this.Get("scriptlevel");if(f===1){e+=2}return e},adjustChild_texprimestyle:function(e){if(e===0){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setSeparateTeXclasses});a.mstyle=a.mbase.Subclass({type:"mstyle",isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,inferRow:true,defaults:{scriptlevel:a.INHERIT,displaystyle:a.INHERIT,scriptsizemultiplier:Math.sqrt(1/2),scriptminsize:"8pt",mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT,infixlinebreakstyle:a.LINEBREAKSTYLE.BEFORE,decimalseparator:"."},adjustChild_scriptlevel:function(g){var f=this.scriptlevel;if(f==null){f=this.Get("scriptlevel")}else{if(String(f).match(/^ *[-+]/)){var e=this.Get("scriptlevel",null,true);f=e+parseInt(f)}}return f},inheritFromMe:true,noInherit:{mpadded:{width:true,height:true,depth:true,lspace:true,voffset:true},mtable:{width:true,height:true,depth:true,align:true}},getRemoved:{fontfamily:"fontFamily",fontweight:"fontWeight",fontstyle:"fontStyle",fontsize:"fontSize"},setTeXclass:a.mbase.setChildTeXclass});a.merror=a.mbase.Subclass({type:"merror",inferRow:true,linebreakContainer:true,texClass:a.TEXCLASS.ORD});a.mpadded=a.mbase.Subclass({type:"mpadded",inferRow:true,isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,width:"",height:"",depth:"",lspace:0,voffset:0},setTeXclass:a.mbase.setChildTeXclass});a.mphantom=a.mbase.Subclass({type:"mphantom",texClass:a.TEXCLASS.ORD,inferRow:true,isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,setTeXclass:a.mbase.setChildTeXclass});a.mfenced=a.mbase.Subclass({type:"mfenced",defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,open:"(",close:")",separators:","},addFakeNodes:function(){var f=this.getValues("open","close","separators");f.open=f.open.replace(/[ \t\n\r]/g,"");f.close=f.close.replace(/[ \t\n\r]/g,"");f.separators=f.separators.replace(/[ \t\n\r]/g,"");if(f.open!==""){this.SetData("open",a.mo(f.open).With({fence:true,form:a.FORM.PREFIX,texClass:a.TEXCLASS.OPEN}))}if(f.separators!==""){while(f.separators.length0){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(f){var e=this.Get("scriptlevel");if(f>0){e++}return e},adjustChild_texprimestyle:function(e){if(e===this.sub){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setBaseTeXclasses});a.msub=a.msubsup.Subclass({type:"msub"});a.msup=a.msubsup.Subclass({type:"msup",sub:2,sup:1});a.mmultiscripts=a.msubsup.Subclass({type:"mmultiscripts",adjustChild_texprimestyle:function(e){if(e%2===1){return true}return this.Get("texprimestyle")}});a.mprescripts=a.mbase.Subclass({type:"mprescripts"});a.none=a.mbase.Subclass({type:"none"});a.munderover=a.mbase.Subclass({type:"munderover",base:0,under:1,over:2,sub:1,sup:2,ACCENTS:["","accentunder","accent"],linebreakContainer:true,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,accent:a.AUTO,accentunder:a.AUTO,align:a.ALIGN.CENTER,texClass:a.AUTO,subscriptshift:"",superscriptshift:""},autoDefault:function(e){if(e==="texClass"){return(this.isEmbellished()?this.CoreMO().Get(e):a.TEXCLASS.ORD)}if(e==="accent"&&this.data[this.over]){return this.data[this.over].CoreMO().Get("accent")}if(e==="accentunder"&&this.data[this.under]){return this.data[this.under].CoreMO().Get("accent")}return false},adjustChild_displaystyle:function(e){if(e>0){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(g){var f=this.Get("scriptlevel");var e=(this.data[this.base]&&!this.Get("displaystyle")&&this.data[this.base].CoreMO().Get("movablelimits"));if(g==this.under&&(e||!this.Get("accentunder"))){f++}if(g==this.over&&(e||!this.Get("accent"))){f++}return f},adjustChild_texprimestyle:function(e){if(e===this.base&&this.data[this.over]){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setBaseTeXclasses});a.munder=a.munderover.Subclass({type:"munder"});a.mover=a.munderover.Subclass({type:"mover",over:1,under:2,sup:1,sub:2,ACCENTS:["","accent","accentunder"]});a.mtable=a.mbase.Subclass({type:"mtable",defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,align:a.ALIGN.AXIS,rowalign:a.ALIGN.BASELINE,columnalign:a.ALIGN.CENTER,groupalign:"{left}",alignmentscope:true,columnwidth:a.WIDTH.AUTO,width:a.WIDTH.AUTO,rowspacing:"1ex",columnspacing:".8em",rowlines:a.LINES.NONE,columnlines:a.LINES.NONE,frame:a.LINES.NONE,framespacing:"0.4em 0.5ex",equalrows:false,equalcolumns:false,displaystyle:false,side:a.SIDE.RIGHT,minlabelspacing:"0.8em",texClass:a.TEXCLASS.ORD,useHeight:1},adjustChild_displaystyle:function(){return(this.displaystyle!=null?this.displaystyle:this.defaults.displaystyle)},inheritFromMe:true,noInherit:{mover:{align:true},munder:{align:true},munderover:{align:true},mtable:{align:true,rowalign:true,columnalign:true,groupalign:true,alignmentscope:true,columnwidth:true,width:true,rowspacing:true,columnspacing:true,rowlines:true,columnlines:true,frame:true,framespacing:true,equalrows:true,equalcolumns:true,displaystyle:true,side:true,minlabelspacing:true,texClass:true,useHeight:1}},linebreakContainer:true,Append:function(){for(var f=0,e=arguments.length;f>10)+55296)+String.fromCharCode((e&1023)+56320)}});a.xml=a.mbase.Subclass({type:"xml",Init:function(){this.div=document.createElement("div");return this.SUPER(arguments).Init.apply(this,arguments)},Append:function(){for(var f=0,e=arguments.length;f":d.REL,"?":[1,1,b.CLOSE],"\\":d.ORD,"^":d.ORD11,_:d.ORD11,"|":[2,2,b.ORD,{fence:true,stretchy:true,symmetric:true}],"#":d.ORD,"$":d.ORD,"\u002E":[0,3,b.PUNCT,{separator:true}],"\u02B9":d.ORD,"\u0300":d.ACCENT,"\u0301":d.ACCENT,"\u0303":d.WIDEACCENT,"\u0304":d.ACCENT,"\u0306":d.ACCENT,"\u0307":d.ACCENT,"\u0308":d.ACCENT,"\u030C":d.ACCENT,"\u0332":d.WIDEACCENT,"\u0338":d.REL4,"\u2015":[0,0,b.ORD,{stretchy:true}],"\u2017":[0,0,b.ORD,{stretchy:true}],"\u2020":d.BIN3,"\u2021":d.BIN3,"\u20D7":d.ACCENT,"\u2111":d.ORD,"\u2113":d.ORD,"\u2118":d.ORD,"\u211C":d.ORD,"\u2205":d.ORD,"\u221E":d.ORD,"\u2305":d.BIN3,"\u2306":d.BIN3,"\u2322":d.REL4,"\u2323":d.REL4,"\u2329":d.OPEN,"\u232A":d.CLOSE,"\u23AA":d.ORD,"\u23AF":[0,0,b.ORD,{stretchy:true}],"\u23B0":d.OPEN,"\u23B1":d.CLOSE,"\u2500":d.ORD,"\u25EF":d.BIN3,"\u2660":d.ORD,"\u2661":d.ORD,"\u2662":d.ORD,"\u2663":d.ORD,"\u3008":d.OPEN,"\u3009":d.CLOSE,"\uFE37":d.WIDEACCENT,"\uFE38":d.WIDEACCENT}}},{OPTYPES:d});var c=a.mo.prototype.OPTABLE;c.infix["^"]=d.WIDEREL;c.infix._=d.WIDEREL;c.prefix["\u2223"]=d.OPEN;c.prefix["\u2225"]=d.OPEN;c.postfix["\u2223"]=d.CLOSE;c.postfix["\u2225"]=d.CLOSE})(MathJax.ElementJax.mml);MathJax.ElementJax.mml.loadComplete("jax.js"); +MathJax.Hub.Register.LoadHook("[MathJax]/jax/element/mml/jax.js",function(){var c="2.7.5";var a=MathJax.ElementJax.mml,b=MathJax.Hub.config.menuSettings;a.mbase.Augment({toMathML:function(l){var h=(this.inferred&&this.parent.inferRow);if(l==null){l=""}var f=this.type,e=this.toMathMLattributes();if(f==="mspace"){return l+"<"+f+e+" />"}var k=[],j=(this.isToken?"":l+(h?"":" "));for(var g=0,d=this.data.length;g")}}}if(this.isToken||this.isChars){return l+"<"+f+e+">"+k.join("")+""}if(h){return k.join("\n")}if(k.length===0||(k.length===1&&k[0]==="")){return l+"<"+f+e+" />"}return l+"<"+f+e+">\n"+k.join("\n")+"\n"+l+""},toMathMLattributes:function(){var j=(this.type==="mstyle"?a.math.prototype.defaults:this.defaults);var h=(this.attrNames||a.copyAttributeNames),g=a.skipAttributes,l=a.copyAttributes;var e=[];if(this.type==="math"&&(!this.attr||!("xmlns" in this.attr))){e.push('xmlns="http://www.w3.org/1998/Math/MathML"')}if(!this.attrNames){for(var k in j){if(!g[k]&&!l[k]&&j.hasOwnProperty(k)){if(this[k]!=null&&this[k]!==j[k]){if(this.Get(k,null,1)!==this[k]){e.push(k+'="'+this.toMathMLattribute(this[k])+'"')}}}}}for(var f=0,d=h.length;f126||(k<32&&k!==10&&k!==13&&k!==9)){f[g]="&#x"+k.toString(16).toUpperCase()+";"}else{var j={"&":"&","<":"<",">":">",'"':"""}[f[g]];if(j){f[g]=j}}}else{if(g+11);var p=this.type,k=this.toMathMLattributes();var j=[],o=d+(g?" "+(n?" ":""):"")+" ";for(var h=0,f=this.data.length;h")}}if(j.length===0||(j.length===1&&j[0]==="")){if(!g){return"<"+p+k+" />"}j.push(o+"")}if(g){if(n){j.unshift(d+" ");j.push(d+" ")}j.unshift(d+" ");var l=e.originalText.replace(/[&<>]/g,function(i){return{">":">","<":"<","&":"&"}[i]});j.push(d+' '+l+"");j.push(d+" ")}return d+"<"+p+k+">\n"+j.join("\n")+"\n"+d+""}});a.msubsup.Augment({toMathML:function(j){var f=this.type;if(this.data[this.sup]==null){f="msub"}if(this.data[this.sub]==null){f="msup"}var e=this.toMathMLattributes();delete this.data[0].inferred;var h=[];for(var g=0,d=this.data.length;g\n"+h.join("\n")+"\n"+j+""}});a.munderover.Augment({toMathML:function(k){var f=this.type;var j=this.data[this.base];if(j&&j.isa(a.TeXAtom)&&j.movablelimits&&!j.Get("displaystyle")){type="msubsup";if(this.data[this.under]==null){f="msup"}if(this.data[this.over]==null){f="msub"}}else{if(this.data[this.under]==null){f="mover"}if(this.data[this.over]==null){f="munder"}}var e=this.toMathMLattributes();delete this.data[0].inferred;var h=[];for(var g=0,d=this.data.length;g\n"+h.join("\n")+"\n"+k+""}});a.TeXAtom.Augment({toMathML:function(e){var d=this.toMathMLattributes();if(!d&&this.data[0].data.length===1){return e.substr(2)+this.data[0].toMathML(e)}return e+"\n"+this.data[0].toMathML(e+" ")+"\n"+e+""}});a.chars.Augment({toMathML:function(d){return(d||"")+this.toMathMLquote(this.toString())}});a.entity.Augment({toMathML:function(d){return(d||"")+"&"+this.toMathMLquote(this.data[0])+";"}});a.xml.Augment({toMathML:function(d){return(d||"")+this.toString()}});MathJax.Hub.Register.StartupHook("TeX mathchoice Ready",function(){a.TeXmathchoice.Augment({toMathML:function(d){return this.Core().toMathML(d)}})});MathJax.Hub.Startup.signal.Post("toMathML Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/toMathML.js"); +(function(b,e){var d="2.7.5";var a=b.CombineConfig("TeX.noErrors",{disabled:false,multiLine:true,inlineDelimiters:["",""],style:{"font-size":"90%","text-align":"left",color:"black",padding:"1px 3px",border:"1px solid"}});var c="\u00A0";MathJax.Extension["TeX/noErrors"]={version:d,config:a};b.Register.StartupHook("TeX Jax Ready",function(){var f=MathJax.InputJax.TeX.formatError;MathJax.InputJax.TeX.Augment({formatError:function(j,i,k,g){if(a.disabled){return f.apply(this,arguments)}var h=j.message.replace(/\n.*/,"");b.signal.Post(["TeX Jax - parse error",h,i,k,g]);var m=a.inlineDelimiters;var l=(k||a.multiLine);if(!k){i=m[0]+i+m[1]}if(l){i=i.replace(/ /g,c)}else{i=i.replace(/\n/g," ")}return MathJax.ElementJax.mml.merror(i).With({isError:true,multiLine:l})}})});b.Register.StartupHook("HTML-CSS Jax Config",function(){b.Config({"HTML-CSS":{styles:{".MathJax .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("HTML-CSS Jax Ready",function(){var g=MathJax.ElementJax.mml;var h=MathJax.OutputJax["HTML-CSS"];var f=g.math.prototype.toHTML,i=g.merror.prototype.toHTML;g.math.Augment({toHTML:function(j,k){var l=this.data[0];if(l&&l.data[0]&&l.data[0].isError){j.style.fontSize="";j=this.HTMLcreateSpan(j);j.bbox=l.data[0].toHTML(j).bbox}else{j=f.apply(this,arguments)}return j}});g.merror.Augment({toHTML:function(p){if(!this.isError){return i.apply(this,arguments)}p=this.HTMLcreateSpan(p);p.className="noError";if(this.multiLine){p.style.display="inline-block"}var r=this.data[0].data[0].data.join("").split(/\n/);for(var o=0,l=r.length;o1){var n=(q.h+q.d)/2,j=h.TeX.x_height/2;p.parentNode.style.verticalAlign=h.Em(q.d+(j-n));q.h=j+n;q.d=n-j}p.bbox={h:q.h,d:q.d,w:k,lw:0,rw:k};return p}})});b.Register.StartupHook("SVG Jax Config",function(){b.Config({SVG:{styles:{".MathJax_SVG .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("SVG Jax Ready",function(){var g=MathJax.ElementJax.mml;var f=g.math.prototype.toSVG,h=g.merror.prototype.toSVG;g.math.Augment({toSVG:function(i,j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){i=k.data[0].toSVG(i)}else{i=f.apply(this,arguments)}return i}});g.merror.Augment({toSVG:function(n){if(!this.isError||this.Parent().type!=="math"){return h.apply(this,arguments)}n=e.addElement(n,"span",{className:"noError",isMathJax:true});if(this.multiLine){n.style.display="inline-block"}var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,j=o.length;l1){var k=n.offsetHeight/2;n.style.verticalAlign=(-k+(k/j))+"px"}return n}})});b.Register.StartupHook("NativeMML Jax Ready",function(){var h=MathJax.ElementJax.mml;var g=MathJax.Extension["TeX/noErrors"].config;var f=h.math.prototype.toNativeMML,i=h.merror.prototype.toNativeMML;h.math.Augment({toNativeMML:function(j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){j=k.data[0].toNativeMML(j)}else{j=f.apply(this,arguments)}return j}});h.merror.Augment({toNativeMML:function(n){if(!this.isError){return i.apply(this,arguments)}n=n.appendChild(document.createElement("span"));var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,k=o.length;l1){n.style.verticalAlign="middle"}}for(var p in g.style){if(g.style.hasOwnProperty(p)){var j=p.replace(/-./g,function(m){return m.charAt(1).toUpperCase()});n.style[j]=g.style[p]}}return n}})});b.Register.StartupHook("PreviewHTML Jax Config",function(){b.Config({PreviewHTML:{styles:{".MathJax_PHTML .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("PreviewHTML Jax Ready",function(){var f=MathJax.ElementJax.mml;var h=MathJax.HTML;var g=f.merror.prototype.toPreviewHTML;f.merror.Augment({toPreviewHTML:function(l){if(!this.isError){return g.apply(this,arguments)}l=this.PHTMLcreateSpan(l);l.className="noError";if(this.multiLine){l.style.display="inline-block"}var n=this.data[0].data[0].data.join("").split(/\n/);for(var k=0,j=n.length;k1){var l=1.2*j/2;o.h=l+0.25;o.d=l-0.25;n.style.verticalAlign=g.Em(0.45-l)}else{o.h=1;o.d=0.2+2/g.em}return n}})});b.Startup.signal.Post("TeX noErrors Ready")})(MathJax.Hub,MathJax.HTML);MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noErrors.js"); +MathJax.Extension["TeX/noUndefined"]={version:"2.7.5",config:MathJax.Hub.CombineConfig("TeX.noUndefined",{disabled:false,attributes:{mathcolor:"red"}})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var b=MathJax.Extension["TeX/noUndefined"].config;var a=MathJax.ElementJax.mml;var c=MathJax.InputJax.TeX.Parse.prototype.csUndefined;MathJax.InputJax.TeX.Parse.Augment({csUndefined:function(d){if(b.disabled){return c.apply(this,arguments)}MathJax.Hub.signal.Post(["TeX Jax - undefined control sequence",d]);this.Push(a.mtext(d).With(b.attributes))}});MathJax.Hub.Startup.signal.Post("TeX noUndefined Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noUndefined.js"); +(function(d,c,j){var i,h="\u00A0";var k=function(m){return MathJax.Localization._.apply(MathJax.Localization,[["TeX",m]].concat([].slice.call(arguments,1)))};var f=MathJax.Object.isArray;var e=MathJax.Object.Subclass({Init:function(n,m){this.global={isInner:m};this.data=[b.start(this.global)];if(n){this.data[0].env=n}this.env=this.data[0].env},Push:function(){var o,n,p,q;for(o=0,n=arguments.length;o":"27E9","\\lt":"27E8","\\gt":"27E9","/":"/","|":["|",{texClass:i.TEXCLASS.ORD}],".":"","\\\\":"\\","\\lmoustache":"23B0","\\rmoustache":"23B1","\\lgroup":"27EE","\\rgroup":"27EF","\\arrowvert":"23D0","\\Arrowvert":"2016","\\bracevert":"23AA","\\Vert":["2016",{texClass:i.TEXCLASS.ORD}],"\\|":["2016",{texClass:i.TEXCLASS.ORD}],"\\vert":["|",{texClass:i.TEXCLASS.ORD}],"\\uparrow":"2191","\\downarrow":"2193","\\updownarrow":"2195","\\Uparrow":"21D1","\\Downarrow":"21D3","\\Updownarrow":"21D5","\\backslash":"\\","\\rangle":"27E9","\\langle":"27E8","\\rbrace":"}","\\lbrace":"{","\\}":"}","\\{":"{","\\rceil":"2309","\\lceil":"2308","\\rfloor":"230B","\\lfloor":"230A","\\lbrack":"[","\\rbrack":"]"},macros:{displaystyle:["SetStyle","D",true,0],textstyle:["SetStyle","T",false,0],scriptstyle:["SetStyle","S",false,1],scriptscriptstyle:["SetStyle","SS",false,2],rm:["SetFont",i.VARIANT.NORMAL],mit:["SetFont",i.VARIANT.ITALIC],oldstyle:["SetFont",i.VARIANT.OLDSTYLE],cal:["SetFont",i.VARIANT.CALIGRAPHIC],it:["SetFont","-tex-mathit"],bf:["SetFont",i.VARIANT.BOLD],bbFont:["SetFont",i.VARIANT.DOUBLESTRUCK],scr:["SetFont",i.VARIANT.SCRIPT],frak:["SetFont",i.VARIANT.FRAKTUR],sf:["SetFont",i.VARIANT.SANSSERIF],tt:["SetFont",i.VARIANT.MONOSPACE],tiny:["SetSize",0.5],Tiny:["SetSize",0.6],scriptsize:["SetSize",0.7],small:["SetSize",0.85],normalsize:["SetSize",1],large:["SetSize",1.2],Large:["SetSize",1.44],LARGE:["SetSize",1.73],huge:["SetSize",2.07],Huge:["SetSize",2.49],arcsin:["NamedFn"],arccos:["NamedFn"],arctan:["NamedFn"],arg:["NamedFn"],cos:["NamedFn"],cosh:["NamedFn"],cot:["NamedFn"],coth:["NamedFn"],csc:["NamedFn"],deg:["NamedFn"],det:"NamedOp",dim:["NamedFn"],exp:["NamedFn"],gcd:"NamedOp",hom:["NamedFn"],inf:"NamedOp",ker:["NamedFn"],lg:["NamedFn"],lim:"NamedOp",liminf:["NamedOp","lim inf"],limsup:["NamedOp","lim sup"],ln:["NamedFn"],log:["NamedFn"],max:"NamedOp",min:"NamedOp",Pr:"NamedOp",sec:["NamedFn"],sin:["NamedFn"],sinh:["NamedFn"],sup:"NamedOp",tan:["NamedFn"],tanh:["NamedFn"],limits:["Limits",1],nolimits:["Limits",0],overline:["UnderOver","00AF",null,1],underline:["UnderOver","005F"],overbrace:["UnderOver","23DE",1],underbrace:["UnderOver","23DF",1],overparen:["UnderOver","23DC"],underparen:["UnderOver","23DD"],overrightarrow:["UnderOver","2192"],underrightarrow:["UnderOver","2192"],overleftarrow:["UnderOver","2190"],underleftarrow:["UnderOver","2190"],overleftrightarrow:["UnderOver","2194"],underleftrightarrow:["UnderOver","2194"],overset:"Overset",underset:"Underset",stackrel:["Macro","\\mathrel{\\mathop{#2}\\limits^{#1}}",2],over:"Over",overwithdelims:"Over",atop:"Over",atopwithdelims:"Over",above:"Over",abovewithdelims:"Over",brace:["Over","{","}"],brack:["Over","[","]"],choose:["Over","(",")"],frac:"Frac",sqrt:"Sqrt",root:"Root",uproot:["MoveRoot","upRoot"],leftroot:["MoveRoot","leftRoot"],left:"LeftRight",right:"LeftRight",middle:"Middle",llap:"Lap",rlap:"Lap",raise:"RaiseLower",lower:"RaiseLower",moveleft:"MoveLeftRight",moveright:"MoveLeftRight",",":["Spacer",i.LENGTH.THINMATHSPACE],":":["Spacer",i.LENGTH.MEDIUMMATHSPACE],">":["Spacer",i.LENGTH.MEDIUMMATHSPACE],";":["Spacer",i.LENGTH.THICKMATHSPACE],"!":["Spacer",i.LENGTH.NEGATIVETHINMATHSPACE],enspace:["Spacer",".5em"],quad:["Spacer","1em"],qquad:["Spacer","2em"],thinspace:["Spacer",i.LENGTH.THINMATHSPACE],negthinspace:["Spacer",i.LENGTH.NEGATIVETHINMATHSPACE],hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",rule:"rule",Rule:["Rule"],Space:["Rule","blank"],big:["MakeBig",i.TEXCLASS.ORD,0.85],Big:["MakeBig",i.TEXCLASS.ORD,1.15],bigg:["MakeBig",i.TEXCLASS.ORD,1.45],Bigg:["MakeBig",i.TEXCLASS.ORD,1.75],bigl:["MakeBig",i.TEXCLASS.OPEN,0.85],Bigl:["MakeBig",i.TEXCLASS.OPEN,1.15],biggl:["MakeBig",i.TEXCLASS.OPEN,1.45],Biggl:["MakeBig",i.TEXCLASS.OPEN,1.75],bigr:["MakeBig",i.TEXCLASS.CLOSE,0.85],Bigr:["MakeBig",i.TEXCLASS.CLOSE,1.15],biggr:["MakeBig",i.TEXCLASS.CLOSE,1.45],Biggr:["MakeBig",i.TEXCLASS.CLOSE,1.75],bigm:["MakeBig",i.TEXCLASS.REL,0.85],Bigm:["MakeBig",i.TEXCLASS.REL,1.15],biggm:["MakeBig",i.TEXCLASS.REL,1.45],Biggm:["MakeBig",i.TEXCLASS.REL,1.75],mathord:["TeXAtom",i.TEXCLASS.ORD],mathop:["TeXAtom",i.TEXCLASS.OP],mathopen:["TeXAtom",i.TEXCLASS.OPEN],mathclose:["TeXAtom",i.TEXCLASS.CLOSE],mathbin:["TeXAtom",i.TEXCLASS.BIN],mathrel:["TeXAtom",i.TEXCLASS.REL],mathpunct:["TeXAtom",i.TEXCLASS.PUNCT],mathinner:["TeXAtom",i.TEXCLASS.INNER],vcenter:["TeXAtom",i.TEXCLASS.VCENTER],mathchoice:["Extension","mathchoice"],buildrel:"BuildRel",hbox:["HBox",0],text:"HBox",mbox:["HBox",0],fbox:"FBox",strut:"Strut",mathstrut:["Macro","\\vphantom{(}"],phantom:"Phantom",vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute:["Accent","00B4"],grave:["Accent","0060"],ddot:["Accent","00A8"],tilde:["Accent","007E"],bar:["Accent","00AF"],breve:["Accent","02D8"],check:["Accent","02C7"],hat:["Accent","005E"],vec:["Accent","2192"],dot:["Accent","02D9"],widetilde:["Accent","007E",1],widehat:["Accent","005E",1],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")"],cases:["Matrix","{","","left left",null,".1em",null,true],eqalign:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D"],displaylines:["Matrix",null,null,"center",null,".5em","D"],cr:"Cr","\\":"CrLaTeX",newline:"Cr",hline:["HLine","solid"],hdashline:["HLine","dashed"],eqalignno:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D",null,"right"],leqalignno:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D",null,"left"],hfill:"HFill",hfil:"HFill",hfilll:"HFill",bmod:["Macro",'\\mmlToken{mo}[lspace="thickmathspace" rspace="thickmathspace"]{mod}'],pmod:["Macro","\\pod{\\mmlToken{mi}{mod}\\kern 6mu #1}",1],mod:["Macro","\\mathchoice{\\kern18mu}{\\kern12mu}{\\kern12mu}{\\kern12mu}\\mmlToken{mi}{mod}\\,\\,#1",1],pod:["Macro","\\mathchoice{\\kern18mu}{\\kern8mu}{\\kern8mu}{\\kern8mu}(#1)",1],iff:["Macro","\\;\\Longleftrightarrow\\;"],skew:["Macro","{{#2{#3\\mkern#1mu}\\mkern-#1mu}{}}",3],mathcal:["Macro","{\\cal #1}",1],mathscr:["Macro","{\\scr #1}",1],mathrm:["Macro","{\\rm #1}",1],mathbf:["Macro","{\\bf #1}",1],mathbb:["Macro","{\\bbFont #1}",1],Bbb:["Macro","{\\bbFont #1}",1],mathit:["Macro","{\\it #1}",1],mathfrak:["Macro","{\\frak #1}",1],mathsf:["Macro","{\\sf #1}",1],mathtt:["Macro","{\\tt #1}",1],textrm:["Macro","\\mathord{\\rm\\text{#1}}",1],textit:["Macro","\\mathord{\\it\\text{#1}}",1],textbf:["Macro","\\mathord{\\bf\\text{#1}}",1],textsf:["Macro","\\mathord{\\sf\\text{#1}}",1],texttt:["Macro","\\mathord{\\tt\\text{#1}}",1],pmb:["Macro","\\rlap{#1}\\kern1px{#1}",1],TeX:["Macro","T\\kern-.14em\\lower.5ex{E}\\kern-.115em X"],LaTeX:["Macro","L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX"]," ":["Macro","\\text{ }"],not:"Not",dots:"Dots",space:"Tilde","\u00A0":"Tilde",begin:"BeginEnd",end:"BeginEnd",newcommand:["Extension","newcommand"],renewcommand:["Extension","newcommand"],newenvironment:["Extension","newcommand"],renewenvironment:["Extension","newcommand"],def:["Extension","newcommand"],let:["Extension","newcommand"],verb:["Extension","verb"],boldsymbol:["Extension","boldsymbol"],tag:["Extension","AMSmath"],notag:["Extension","AMSmath"],label:["Extension","AMSmath"],ref:["Extension","AMSmath"],eqref:["Extension","AMSmath"],nonumber:["Macro","\\notag"],unicode:["Extension","unicode"],color:"Color",href:["Extension","HTML"],"class":["Extension","HTML"],style:["Extension","HTML"],cssId:["Extension","HTML"],bbox:["Extension","bbox"],mmlToken:"MmlToken",require:"Require"},environment:{array:["AlignedArray"],matrix:["Array",null,null,null,"c"],pmatrix:["Array",null,"(",")","c"],bmatrix:["Array",null,"[","]","c"],Bmatrix:["Array",null,"\\{","\\}","c"],vmatrix:["Array",null,"\\vert","\\vert","c"],Vmatrix:["Array",null,"\\Vert","\\Vert","c"],cases:["Array",null,"\\{",".","ll",null,".2em","T"],equation:[null,"Equation"],"equation*":[null,"Equation"],eqnarray:["ExtensionEnv",null,"AMSmath"],"eqnarray*":["ExtensionEnv",null,"AMSmath"],align:["ExtensionEnv",null,"AMSmath"],"align*":["ExtensionEnv",null,"AMSmath"],aligned:["ExtensionEnv",null,"AMSmath"],multline:["ExtensionEnv",null,"AMSmath"],"multline*":["ExtensionEnv",null,"AMSmath"],split:["ExtensionEnv",null,"AMSmath"],gather:["ExtensionEnv",null,"AMSmath"],"gather*":["ExtensionEnv",null,"AMSmath"],gathered:["ExtensionEnv",null,"AMSmath"],alignat:["ExtensionEnv",null,"AMSmath"],"alignat*":["ExtensionEnv",null,"AMSmath"],alignedat:["ExtensionEnv",null,"AMSmath"]},p_height:1.2/0.85});if(this.config.Macros){var m=this.config.Macros;for(var n in m){if(m.hasOwnProperty(n)){if(typeof(m[n])==="string"){g.macros[n]=["Macro",m[n]]}else{g.macros[n]=["Macro"].concat(m[n])}g.macros[n].isUser=true}}}};var a=MathJax.Object.Subclass({Init:function(n,o){this.string=n;this.i=0;this.macroCount=0;var m;if(o){m={};for(var p in o){if(o.hasOwnProperty(p)){m[p]=o[p]}}}this.stack=d.Stack(m,!!o);this.Parse();this.Push(b.stop())},Parse:function(){var o,m;while(this.i=55296&&m<56320){o+=this.string.charAt(this.i++)}if(g.special.hasOwnProperty(o)){this[g.special[o]](o)}else{if(g.letter.test(o)){this.Variable(o)}else{if(g.digit.test(o)){this.Number(o)}else{this.Other(o)}}}}},Push:function(){this.stack.Push.apply(this.stack,arguments)},mml:function(){if(this.stack.Top().type!=="mml"){return null}return this.stack.Top().data[0]},mmlToken:function(m){return m},ControlSequence:function(p){var m=this.GetCS(),o=this.csFindMacro(m);if(o){if(!f(o)){o=[o]}var n=o[0];if(!(n instanceof Function)){n=this[n]}n.apply(this,[p+m].concat(o.slice(1)))}else{if(g.mathchar0mi.hasOwnProperty(m)){this.csMathchar0mi(m,g.mathchar0mi[m])}else{if(g.mathchar0mo.hasOwnProperty(m)){this.csMathchar0mo(m,g.mathchar0mo[m])}else{if(g.mathchar7.hasOwnProperty(m)){this.csMathchar7(m,g.mathchar7[m])}else{if(g.delimiter.hasOwnProperty("\\"+m)){this.csDelimiter(m,g.delimiter["\\"+m])}else{this.csUndefined(p+m)}}}}}},csFindMacro:function(m){return(g.macros.hasOwnProperty(m)?g.macros[m]:null)},csMathchar0mi:function(m,o){var n={mathvariant:i.VARIANT.ITALIC};if(f(o)){n=o[1];o=o[0]}this.Push(this.mmlToken(i.mi(i.entity("#x"+o)).With(n)))},csMathchar0mo:function(m,o){var n={stretchy:false};if(f(o)){n=o[1];n.stretchy=false;o=o[0]}this.Push(this.mmlToken(i.mo(i.entity("#x"+o)).With(n)))},csMathchar7:function(m,o){var n={mathvariant:i.VARIANT.NORMAL};if(f(o)){n=o[1];o=o[0]}if(this.stack.env.font){n.mathvariant=this.stack.env.font}this.Push(this.mmlToken(i.mi(i.entity("#x"+o)).With(n)))},csDelimiter:function(m,o){var n={};if(f(o)){n=o[1];o=o[0]}if(o.length===4){o=i.entity("#x"+o)}else{o=i.chars(o)}this.Push(this.mmlToken(i.mo(o).With({fence:false,stretchy:false}).With(n)))},csUndefined:function(m){d.Error(["UndefinedControlSequence","Undefined control sequence %1",m])},Variable:function(n){var m={};if(this.stack.env.font){m.mathvariant=this.stack.env.font}this.Push(this.mmlToken(i.mi(i.chars(n)).With(m)))},Number:function(p){var m,o=this.string.slice(this.i-1).match(g.number);if(o){m=i.mn(o[0].replace(/[{}]/g,""));this.i+=o[0].length-1}else{m=i.mo(i.chars(p))}if(this.stack.env.font){m.mathvariant=this.stack.env.font}this.Push(this.mmlToken(m))},Open:function(m){this.Push(b.open())},Close:function(m){this.Push(b.close())},Tilde:function(m){this.Push(i.mtext(i.chars(h)))},Space:function(m){},Superscript:function(r){if(this.GetNext().match(/\d/)){this.string=this.string.substr(0,this.i+1)+" "+this.string.substr(this.i+1)}var q,o,p=this.stack.Top();if(p.type==="prime"){o=p.data[0];q=p.data[1];this.stack.Pop()}else{o=this.stack.Prev();if(!o){o=i.mi("")}}if(o.isEmbellishedWrapper){o=o.data[0].data[0]}var n=o.movesupsub,m=o.sup;if((o.type==="msubsup"&&o.data[o.sup])||(o.type==="munderover"&&o.data[o.over]&&!o.subsupOK)){d.Error(["DoubleExponent","Double exponent: use braces to clarify"])}if(o.type!=="msubsup"){if(n){if(o.type!=="munderover"||o.data[o.over]){if(o.movablelimits&&o.isa(i.mi)){o=this.mi2mo(o)}o=i.munderover(o,null,null).With({movesupsub:true})}m=o.over}else{o=i.msubsup(o,null,null);m=o.sup}}this.Push(b.subsup(o).With({position:m,primes:q,movesupsub:n}))},Subscript:function(r){if(this.GetNext().match(/\d/)){this.string=this.string.substr(0,this.i+1)+" "+this.string.substr(this.i+1)}var q,o,p=this.stack.Top();if(p.type==="prime"){o=p.data[0];q=p.data[1];this.stack.Pop()}else{o=this.stack.Prev();if(!o){o=i.mi("")}}if(o.isEmbellishedWrapper){o=o.data[0].data[0]}var n=o.movesupsub,m=o.sub;if((o.type==="msubsup"&&o.data[o.sub])||(o.type==="munderover"&&o.data[o.under]&&!o.subsupOK)){d.Error(["DoubleSubscripts","Double subscripts: use braces to clarify"])}if(o.type!=="msubsup"){if(n){if(o.type!=="munderover"||o.data[o.under]){if(o.movablelimits&&o.isa(i.mi)){o=this.mi2mo(o)}o=i.munderover(o,null,null).With({movesupsub:true})}m=o.under}else{o=i.msubsup(o,null,null);m=o.sub}}this.Push(b.subsup(o).With({position:m,primes:q,movesupsub:n}))},PRIME:"\u2032",SMARTQUOTE:"\u2019",Prime:function(o){var n=this.stack.Prev();if(!n){n=i.mi()}if(n.type==="msubsup"&&n.data[n.sup]){d.Error(["DoubleExponentPrime","Prime causes double exponent: use braces to clarify"])}var m="";this.i--;do{m+=this.PRIME;this.i++,o=this.GetNext()}while(o==="'"||o===this.SMARTQUOTE);m=["","\u2032","\u2033","\u2034","\u2057"][m.length]||m;this.Push(b.prime(n,this.mmlToken(i.mo(m))))},mi2mo:function(m){var n=i.mo();n.Append.apply(n,m.data);var o;for(o in n.defaults){if(n.defaults.hasOwnProperty(o)&&m[o]!=null){n[o]=m[o]}}for(o in i.copyAttributes){if(i.copyAttributes.hasOwnProperty(o)&&m[o]!=null){n[o]=m[o]}}n.lspace=n.rspace="0";n.useMMLspacing&=~(n.SPACE_ATTR.lspace|n.SPACE_ATTR.rspace);return n},Comment:function(m){while(this.id.config.MAXMACROS){d.Error(["MaxMacroSub1","MathJax maximum macro substitution count exceeded; is there a recursive macro call?"])}},Matrix:function(n,p,v,r,u,o,m,w,t){var s=this.GetNext();if(s===""){d.Error(["MissingArgFor","Missing argument for %1",n])}if(s==="{"){this.i++}else{this.string=s+"}"+this.string.slice(this.i+1);this.i=0}var q=b.array().With({requireClose:true,arraydef:{rowspacing:(o||"4pt"),columnspacing:(u||"1em")}});if(w){q.isCases=true}if(t){q.isNumbered=true;q.arraydef.side=t}if(p||v){q.open=p;q.close=v}if(m==="D"){q.arraydef.displaystyle=true}if(r!=null){q.arraydef.columnalign=r}this.Push(q)},Entry:function(p){this.Push(b.cell().With({isEntry:true,name:p}));if(this.stack.Top().isCases){var o=this.string;var t=0,s=-1,q=this.i,n=o.length;while(qd.config.MAXMACROS){d.Error(["MaxMacroSub2","MathJax maximum substitution count exceeded; is there a recursive latex environment?"])}if(q[0]&&this[q[0]]){n=this[q[0]].apply(this,[n].concat(q.slice(2)))}}this.Push(n)},envFindName:function(m){return(g.environment.hasOwnProperty(m)?g.environment[m]:null)},Equation:function(m,n){return n},ExtensionEnv:function(n,m){this.Extension(n.name,m,"environment")},Array:function(n,p,u,s,t,o,m,q){if(!s){s=this.GetArgument("\\begin{"+n.name+"}")}var v=("c"+s).replace(/[^clr|:]/g,"").replace(/[^|:]([|:])+/g,"$1");s=s.replace(/[^clr]/g,"").split("").join(" ");s=s.replace(/l/g,"left").replace(/r/g,"right").replace(/c/g,"center");var r=b.array().With({arraydef:{columnalign:s,columnspacing:(t||"1em"),rowspacing:(o||"4pt")}});if(v.match(/[|:]/)){if(v.charAt(0).match(/[|:]/)){r.frame.push("left");r.frame.dashed=v.charAt(0)===":"}if(v.charAt(v.length-1).match(/[|:]/)){r.frame.push("right")}v=v.substr(1,v.length-2);r.arraydef.columnlines=v.split("").join(" ").replace(/[^|: ]/g,"none").replace(/\|/g,"solid").replace(/:/g,"dashed")}if(p){r.open=this.convertDelimiter(p)}if(u){r.close=this.convertDelimiter(u)}if(m==="D"){r.arraydef.displaystyle=true}else{if(m){r.arraydef.displaystyle=false}}if(m==="S"){r.arraydef.scriptlevel=1}if(q){r.arraydef.useHeight=false}this.Push(n);return r},AlignedArray:function(m){var n=this.GetBrackets("\\begin{"+m.name+"}");return this.setArrayAlign(this.Array.apply(this,arguments),n)},setArrayAlign:function(n,m){m=this.trimSpaces(m||"");if(m==="t"){n.arraydef.align="baseline 1"}else{if(m==="b"){n.arraydef.align="baseline -1"}else{if(m==="c"){n.arraydef.align="center"}else{if(m){n.arraydef.align=m}}}}return n},convertDelimiter:function(m){if(m){m=(g.delimiter.hasOwnProperty(m)?g.delimiter[m]:null)}if(m==null){return null}if(f(m)){m=m[0]}if(m.length===4){m=String.fromCharCode(parseInt(m,16))}return m},trimSpaces:function(n){if(typeof(n)!="string"){return n}var m=n.replace(/^\s+|\s+$/g,"");if(m.match(/\\$/)&&n.match(/ $/)){m+=" "}return m},nextIsSpace:function(){return this.string.charAt(this.i).match(/\s/)},GetNext:function(){while(this.nextIsSpace()){this.i++}return this.string.charAt(this.i)},GetCS:function(){var m=this.string.slice(this.i).match(/^([a-z]+|.) ?/i);if(m){this.i+=m[1].length;return m[1]}else{this.i++;return" "}},GetArgument:function(n,o){switch(this.GetNext()){case"":if(!o){d.Error(["MissingArgFor","Missing argument for %1",n])}return null;case"}":if(!o){d.Error(["ExtraCloseMissingOpen","Extra close brace or missing open brace"])}return null;case"\\":this.i++;return"\\"+this.GetCS();case"{":var m=++this.i,p=1;while(this.i1){n=[i.mrow.apply(i,n)]}}return n},InternalText:function(n,m){n=n.replace(/^\s+/,h).replace(/\s+$/,h);return i.mtext(i.chars(n)).With(m)},setDef:function(m,n){n.isUser=true;g.macros[m]=n},setEnv:function(m,n){n.isUser=true;g.environment[m]=n},SubstituteArgs:function(n,m){var q="";var p="";var r;var o=0;while(on.length){d.Error(["IllegalMacroParam","Illegal macro parameter reference"])}p=this.AddArgs(this.AddArgs(p,q),n[r-1]);q=""}}else{q+=r}}}return this.AddArgs(p,q)},AddArgs:function(n,m){if(m.match(/^[a-z]/i)&&n.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)){n+=" "}if(n.length+m.length>d.config.MAXBUFFER){d.Error(["MaxBufferSize","MathJax internal buffer size exceeded; is there a recursive macro call?"])}return n+m}});d.Augment({Stack:e,Parse:a,Definitions:g,Startup:l,config:{MAXMACROS:10000,MAXBUFFER:5*1024},sourceMenuTitle:["TeXCommands","TeX Commands"],annotationEncoding:"application/x-tex",prefilterHooks:MathJax.Callback.Hooks(true),postfilterHooks:MathJax.Callback.Hooks(true),Config:function(){this.SUPER(arguments).Config.apply(this,arguments);if(this.config.equationNumbers.autoNumber!=="none"){if(!this.config.extensions){this.config.extensions=[]}this.config.extensions.push("AMSmath.js")}},Translate:function(m){var n,o=false,q=MathJax.HTML.getScript(m);var s=(m.type.replace(/\n/g," ").match(/(;|\s|\n)mode\s*=\s*display(;|\s|\n|$)/)!=null);var r={math:q,display:s,script:m};var t=this.prefilterHooks.Execute(r);if(t){return t}q=r.math;try{n=d.Parse(q).mml()}catch(p){if(!p.texError){throw p}n=this.formatError(p,q,s,m);o=true}if(n.isa(i.mtable)&&n.displaystyle==="inherit"){n.displaystyle=s}if(n.inferred){n=i.apply(MathJax.ElementJax,n.data)}else{n=i(n)}if(s){n.root.display="block"}if(o){n.texError=true}r.math=n;return this.postfilterHooks.Execute(r)||r.math},prefilterMath:function(n,o,m){return n},postfilterMath:function(n,o,m){this.combineRelations(n.root);return n},formatError:function(p,o,q,m){var n=p.message.replace(/\n.*/,"");c.signal.Post(["TeX Jax - parse error",n,o,q,m]);return i.Error(n)},Error:function(m){if(f(m)){m=k.apply(k,m)}throw c.Insert(Error(m),{texError:true})},Macro:function(m,n,o){g.macros[m]=["Macro"].concat([].slice.call(arguments,1));g.macros[m].isUser=true},fenced:function(o,n,p){var m=i.mrow().With({open:o,close:p,texClass:i.TEXCLASS.INNER});m.Append(i.mo(o).With({fence:true,stretchy:true,symmetric:true,texClass:i.TEXCLASS.OPEN}));if(n.type==="mrow"&&n.inferred){m.Append.apply(m,n.data)}else{m.Append(n)}m.Append(i.mo(p).With({fence:true,stretchy:true,symmetric:true,texClass:i.TEXCLASS.CLOSE}));return m},fixedFence:function(o,n,p){var m=i.mrow().With({open:o,close:p,texClass:i.TEXCLASS.ORD});if(o){m.Append(this.mathPalette(o,"l"))}if(n.type==="mrow"){m.Append.apply(m,n.data)}else{m.Append(n)}if(p){m.Append(this.mathPalette(p,"r"))}return m},mathPalette:function(p,n){if(p==="{"||p==="}"){p="\\"+p}var o="{\\bigg"+n+" "+p+"}",m="{\\big"+n+" "+p+"}";return d.Parse("\\mathchoice"+o+m+m+m,{}).mml()},combineRelations:function(q){var r,n,p,o;for(r=0,n=q.data.length;r0){p+="rl";o.push("0em 0em");q--}o=o.join(" ");if(i){return this.AMSarray(l,j,i,p,o)}var m=this.AMSarray(l,j,i,p,o);return this.setArrayAlign(m,k)},EquationBegin:function(i,j){this.checkEqnEnv();this.stack.global.forcetag=(j&&a.autoNumber!=="none");return i},EquationStar:function(i,j){this.stack.global.tagged=true;return j},checkEqnEnv:function(){if(this.stack.global.eqnenv){h.Error(["ErroneousNestingEq","Erroneous nesting of equation structures"])}this.stack.global.eqnenv=true},MultiIntegral:function(j,m){var l=this.GetNext();if(l==="\\"){var k=this.i;l=this.GetArgument(j);this.i=k;if(l==="\\limits"){if(j==="\\idotsint"){m="\\!\\!\\mathop{\\,\\,"+m+"}"}else{m="\\!\\!\\!\\mathop{\\,\\,\\,"+m+"}"}}}this.string=m+" "+this.string.slice(this.i);this.i=0},xArrow:function(k,o,n,i){var m={width:"+"+(n+i)+"mu",lspace:n+"mu"};var p=this.GetBrackets(k),q=this.ParseArg(k);var s=b.mo(b.chars(String.fromCharCode(o))).With({stretchy:true,texClass:b.TEXCLASS.REL});var j=b.munderover(s);j.SetData(j.over,b.mpadded(q).With(m).With({voffset:".15em"}));if(p){p=h.Parse(p,this.stack.env).mml();j.SetData(j.under,b.mpadded(p).With(m).With({voffset:"-.24em"}))}this.Push(j.With({subsupOK:true}))},GetDelimiterArg:function(i){var j=this.trimSpaces(this.GetArgument(i));if(j==""){return null}if(j in d.delimiter){return j}h.Error(["MissingOrUnrecognizedDelim","Missing or unrecognized delimiter for %1",i])},GetStar:function(){var i=(this.GetNext()==="*");if(i){this.i++}return i}});f.Augment({autoTag:function(){var j=this.global;if(!j.notag){g.number++;j.tagID=a.formatNumber(g.number.toString());var i=h.Parse("\\text{"+a.formatTag(j.tagID)+"}",{}).mml();j.tag=b.mtd(i).With({id:a.formatID(j.tagID)})}},getTag:function(){var m=this.global,k=m.tag;m.tagged=true;if(m.label){if(a.useLabelIds){k.id=a.formatID(m.label)}g.eqlabels[m.label]={tag:m.tagID,id:k.id}}if(document.getElementById(k.id)||g.IDs[k.id]||g.eqIDs[k.id]){var l=0,j;do{l++;j=k.id+"_"+l}while(document.getElementById(j)||g.IDs[j]||g.eqIDs[j]);k.id=j;if(m.label){g.eqlabels[m.label].id=j}}g.eqIDs[k.id]=1;this.clearTag();return k},clearTag:function(){var i=this.global;delete i.tag;delete i.tagID;delete i.label},fixInitialMO:function(l){for(var k=0,j=l.length;k *":{display:"table-row!important"},".MJXp-surd":{"vertical-align":"top"},".MJXp-surd > *":{display:"block!important"},".MJXp-script-box > * ":{display:"table!important",height:"50%"},".MJXp-script-box > * > *":{display:"table-cell!important","vertical-align":"top"},".MJXp-script-box > *:last-child > *":{"vertical-align":"bottom"},".MJXp-script-box > * > * > *":{display:"block!important"},".MJXp-mphantom":{visibility:"hidden"},".MJXp-munderover, .MJXp-munder":{display:"inline-table!important"},".MJXp-over":{display:"inline-block!important","text-align":"center"},".MJXp-over > *":{display:"block!important"},".MJXp-munderover > *, .MJXp-munder > *":{display:"table-row!important"},".MJXp-mtable":{"vertical-align":".25em",margin:"0 .125em"},".MJXp-mtable > *":{display:"inline-table!important","vertical-align":"middle"},".MJXp-mtr":{display:"table-row!important"},".MJXp-mtd":{display:"table-cell!important","text-align":"center",padding:".5em 0 0 .5em"},".MJXp-mtr > .MJXp-mtd:first-child":{"padding-left":0},".MJXp-mtr:first-child > .MJXp-mtd":{"padding-top":0},".MJXp-mlabeledtr":{display:"table-row!important"},".MJXp-mlabeledtr > .MJXp-mtd:first-child":{"padding-left":0},".MJXp-mlabeledtr:first-child > .MJXp-mtd":{"padding-top":0},".MJXp-merror":{"background-color":"#FFFF88",color:"#CC0000",border:"1px solid #CC0000",padding:"1px 3px","font-style":"normal","font-size":"90%"}};(function(){for(var n=0;n<10;n++){var o="scaleX(."+n+")";m[".MJXp-scale"+n]={"-webkit-transform":o,"-moz-transform":o,"-ms-transform":o,"-o-transform":o,transform:o}}})();var k=1000000;var c="V",l="H";g.Augment({settings:b.config.menuSettings,config:{styles:m},hideProcessedMath:false,maxStretchyParts:1000,Config:function(){if(!this.require){this.require=[]}this.SUPER(arguments).Config.call(this);var n=this.settings;if(n.scale){this.config.scale=n.scale}this.require.push(MathJax.OutputJax.extensionDir+"/MathEvents.js")},Startup:function(){j=MathJax.Extension.MathEvents.Event;a=MathJax.Extension.MathEvents.Touch;d=MathJax.Extension.MathEvents.Hover;this.ContextMenu=j.ContextMenu;this.Mousedown=j.AltContextMenu;this.Mouseover=d.Mouseover;this.Mouseout=d.Mouseout;this.Mousemove=d.Mousemove;var n=e.addElement(document.body,"div",{style:{width:"5in"}});this.pxPerInch=n.offsetWidth/5;n.parentNode.removeChild(n);return i.Styles(this.config.styles,["InitializePHTML",this])},InitializePHTML:function(){},preTranslate:function(p){var s=p.jax[this.id],t,q=s.length,u,r,v,o,n;for(t=0;tthis.PHTML.h){this.PHTML.h=q.PHTML.h}if(q.PHTML.d>this.PHTML.d){this.PHTML.d=q.PHTML.d}if(q.PHTML.t>this.PHTML.t){this.PHTML.t=q.PHTML.t}if(q.PHTML.b>this.PHTML.b){this.PHTML.b=q.PHTML.b}}}else{if(n.forceChild){e.addElement(p,"span")}}},PHTMLstretchChild:function(q,p,s){var r=this.data[q];if(r&&r.PHTMLcanStretch("Vertical",p,s)){var t=this.PHTML,o=r.PHTML,n=o.w;r.PHTMLstretchV(p,s);t.w+=o.w-n;if(o.h>t.h){t.h=o.h}if(o.d>t.d){t.d=o.d}}},PHTMLcreateSpan:function(n){if(!this.PHTML){this.PHTML={}}this.PHTML={w:0,h:0,d:0,l:0,r:0,t:0,b:0};if(this.inferred){return n}if(this.type==="mo"&&this.data.join("")==="\u222B"){g.lastIsInt=true}else{if(this.type!=="mspace"||this.width!=="negativethinmathspace"){g.lastIsInt=false}}if(!this.PHTMLspanID){this.PHTMLspanID=g.GetID()}var o=(this.id||"MJXp-Span-"+this.PHTMLspanID);return e.addElement(n,"span",{className:"MJXp-"+this.type,id:o})},PHTMLspanElement:function(){if(!this.PHTMLspanID){return null}return document.getElementById(this.id||"MJXp-Span-"+this.PHTMLspanID)},PHTMLhandleToken:function(o){var n=this.getValues("mathvariant");if(n.mathvariant!==h.VARIANT.NORMAL){o.className+=" "+g.VARIANT[n.mathvariant]}},PHTMLhandleStyle:function(n){if(this.style){n.style.cssText=this.style}},PHTMLhandleColor:function(n){if(this.mathcolor){n.style.color=this.mathcolor}if(this.mathbackground){n.style.backgroundColor=this.mathbackground}},PHTMLhandleScriptlevel:function(n){var o=this.Get("scriptlevel");if(o){n.className+=" MJXp-script"}},PHTMLhandleText:function(y,A){var v,p;var z=0,o=0,q=0;for(var s=0,r=A.length;s=55296&&p<56319){s++;p=(((p-55296)<<10)+(A.charCodeAt(s)-56320))+65536}var t=0.7,u=0.22,x=0.5;if(p<127){if(v.match(/[A-Za-ehik-or-xz0-9]/)){u=0}if(v.match(/[A-HK-Z]/)){x=0.67}else{if(v.match(/[IJ]/)){x=0.36}}if(v.match(/[acegm-su-z]/)){t=0.45}else{if(v.match(/[ij]/)){t=0.75}}if(v.match(/[ijlt]/)){x=0.28}}if(g.DELIMITERS[v]){x=g.DELIMITERS[v].w||0.4}if(t>z){z=t}if(u>o){o=u}q+=x}if(!this.CHML){this.PHTML={}}this.PHTML={h:0.9,d:0.3,w:q,l:0,r:0,t:z,b:o};e.addText(y,A)},PHTMLbboxFor:function(o){if(this.data[o]&&this.data[o].PHTML){return this.data[o].PHTML}return{w:0,h:0,d:0,l:0,r:0,t:0,b:0}},PHTMLcanStretch:function(q,o,p){if(this.isEmbellished()){var n=this.Core();if(n&&n!==this){return n.PHTMLcanStretch(q,o,p)}}return false},PHTMLstretchV:function(n,o){},PHTMLstretchH:function(n){},CoreParent:function(){var n=this;while(n&&n.isEmbellished()&&n.CoreMO()===this&&!n.isa(h.math)){n=n.Parent()}return n},CoreText:function(n){if(!n){return""}if(n.isEmbellished()){return n.CoreMO().data.join("")}while((n.isa(h.mrow)||n.isa(h.TeXAtom)||n.isa(h.mstyle)||n.isa(h.mphantom))&&n.data.length===1&&n.data[0]){n=n.data[0]}if(!n.isToken){return""}else{return n.data.join("")}}});h.chars.Augment({toPreviewHTML:function(n){var o=this.toString().replace(/[\u2061-\u2064]/g,"");this.PHTMLhandleText(n,o)}});h.entity.Augment({toPreviewHTML:function(n){var o=this.toString().replace(/[\u2061-\u2064]/g,"");this.PHTMLhandleText(n,o)}});h.math.Augment({toPreviewHTML:function(n){n=this.PHTMLdefaultSpan(n);if(this.Get("display")==="block"){n.className+=" MJXp-display"}return n}});h.mo.Augment({toPreviewHTML:function(o){o=this.PHTMLdefaultSpan(o);this.PHTMLadjustAccent(o);var n=this.getValues("lspace","rspace","scriptlevel","displaystyle","largeop");if(n.scriptlevel===0){this.PHTML.l=g.length2em(n.lspace);this.PHTML.r=g.length2em(n.rspace);o.style.marginLeft=g.Em(this.PHTML.l);o.style.marginRight=g.Em(this.PHTML.r)}else{this.PHTML.l=0.15;this.PHTML.r=0.1}if(n.displaystyle&&n.largeop){var p=e.Element("span",{className:"MJXp-largeop"});p.appendChild(o.firstChild);o.appendChild(p);this.PHTML.h*=1.2;this.PHTML.d*=1.2;if(this.data.join("")==="\u222B"){p.className+=" MJXp-int"}}return o},PHTMLadjustAccent:function(p){var o=this.CoreParent();if(o&&o.isa(h.munderover)&&this.CoreText(o.data[o.base]).length===1){var q=o.data[o.over],n=o.data[o.under];var s=this.data.join(""),r;if(q&&this===q.CoreMO()&&o.Get("accent")){r=g.REMAPACCENT[s]}else{if(n&&this===n.CoreMO()&&o.Get("accentunder")){r=g.REMAPACCENTUNDER[s]}}if(r){s=p.innerHTML=r}if(s.match(/[\u02C6-\u02DC\u00A8]/)){this.PHTML.acc=-0.52}else{if(s==="\u2192"){this.PHTML.acc=-0.15;this.PHTML.vec=true}}}},PHTMLcanStretch:function(q,o,p){if(!this.Get("stretchy")){return false}var r=this.data.join("");if(r.length>1){return false}r=g.DELIMITERS[r];var n=(r&&r.dir===q.substr(0,1));if(n){n=(this.PHTML.h!==o||this.PHTML.d!==p||(this.Get("minsize",true)||this.Get("maxsize",true)))}return n},PHTMLstretchV:function(p,u){var o=this.PHTMLspanElement(),t=this.PHTML;var n=this.getValues("symmetric","maxsize","minsize");if(n.symmetric){l=2*Math.max(p-0.25,u+0.25)}else{l=p+u}n.maxsize=g.length2em(n.maxsize,t.h+t.d);n.minsize=g.length2em(n.minsize,t.h+t.d);l=Math.max(n.minsize,Math.min(n.maxsize,l));var s=l/(t.h+t.d-0.3);var q=e.Element("span",{style:{"font-size":g.Em(s)}});if(s>1.25){var r=Math.ceil(1.25/s*10);q.className="MJXp-right MJXp-scale"+r;q.style.marginLeft=g.Em(t.w*(r/10-1)+0.07);t.w*=s*r/10}q.appendChild(o.firstChild);o.appendChild(q);if(n.symmetric){o.style.verticalAlign=g.Em(0.25*(1-s))}}});h.mspace.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q);var o=this.getValues("height","depth","width");var n=g.length2em(o.width),p=g.length2em(o.height),s=g.length2em(o.depth);var r=this.PHTML;r.w=n;r.h=p;r.d=s;if(n<0){if(!g.lastIsInt){q.style.marginLeft=g.Em(n)}n=0}q.style.width=g.Em(n);q.style.height=g.Em(p+s);if(s){q.style.verticalAlign=g.Em(-s)}return q}});h.mpadded.Augment({toPreviewHTML:function(u){u=this.PHTMLdefaultSpan(u,{childSpans:true,className:"MJXp-box",forceChild:true});var o=u.firstChild;var v=this.getValues("width","height","depth","lspace","voffset");var s=this.PHTMLdimen(v.lspace);var q=0,n=0,t=s.len,r=-s.len,p=0;if(v.width!==""){s=this.PHTMLdimen(v.width,"w",0);if(s.pm){r+=s.len}else{u.style.width=g.Em(s.len)}}if(v.height!==""){s=this.PHTMLdimen(v.height,"h",0);if(!s.pm){q+=-this.PHTMLbboxFor(0).h}q+=s.len}if(v.depth!==""){s=this.PHTMLdimen(v.depth,"d",0);if(!s.pm){n+=-this.PHTMLbboxFor(0).d;p+=-s.len}n+=s.len}if(v.voffset!==""){s=this.PHTMLdimen(v.voffset);q-=s.len;n+=s.len;p+=s.len}if(q){o.style.marginTop=g.Em(q)}if(n){o.style.marginBottom=g.Em(n)}if(t){o.style.marginLeft=g.Em(t)}if(r){o.style.marginRight=g.Em(r)}if(p){u.style.verticalAlign=g.Em(p)}return u},PHTMLdimen:function(q,r,n){if(n==null){n=-k}q=String(q);var o=q.match(/width|height|depth/);var p=(o?this.PHTML[o[0].charAt(0)]:(r?this.PHTML[r]:0));return{len:g.length2em(q,p)||0,pm:!!q.match(/^[-+]/)}}});h.munderover.Augment({toPreviewHTML:function(r){var t=this.getValues("displaystyle","accent","accentunder","align");var n=this.data[this.base];if(!t.displaystyle&&n!=null&&(n.movablelimits||n.CoreMO().Get("movablelimits"))){r=h.msubsup.prototype.toPreviewHTML.call(this,r);r.className=r.className.replace(/munderover/,"msubsup");return r}r=this.PHTMLdefaultSpan(r,{childSpans:true,className:"",noBBox:true});var p=this.PHTMLbboxFor(this.over),v=this.PHTMLbboxFor(this.under),u=this.PHTMLbboxFor(this.base),s=this.PHTML,o=p.acc;if(this.data[this.over]){if(r.lastChild.firstChild){r.lastChild.firstChild.style.marginLeft=p.l=r.lastChild.firstChild.style.marginRight=p.r=0}var q=e.Element("span",{},[["span",{className:"MJXp-over"}]]);q.firstChild.appendChild(r.lastChild);if(r.childNodes.length>(this.data[this.under]?1:0)){q.firstChild.appendChild(r.firstChild)}this.data[this.over].PHTMLhandleScriptlevel(q.firstChild.firstChild);if(o!=null){if(p.vec){q.firstChild.firstChild.firstChild.style.fontSize="60%";p.h*=0.6;p.d*=0.6;p.w*=0.6}o=o-p.d+0.1;if(u.t!=null){o+=u.t-u.h}q.firstChild.firstChild.style.marginBottom=g.Em(o)}if(r.firstChild){r.insertBefore(q,r.firstChild)}else{r.appendChild(q)}}if(this.data[this.under]){if(r.lastChild.firstChild){r.lastChild.firstChild.style.marginLeft=v.l=r.lastChild.firstChild.marginRight=v.r=0}this.data[this.under].PHTMLhandleScriptlevel(r.lastChild)}s.w=Math.max(0.8*p.w,0.8*v.w,u.w);s.h=0.8*(p.h+p.d+(o||0))+u.h;s.d=u.d+0.8*(v.h+v.d);return r}});h.msubsup.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q,{noBBox:true});if(!this.data[this.base]){if(q.firstChild){q.insertBefore(e.Element("span"),q.firstChild)}else{q.appendChild(e.Element("span"))}}var s=this.data[this.base],p=this.data[this.sub],n=this.data[this.sup];if(!s){s={bbox:{h:0.8,d:0.2}}}q.firstChild.style.marginRight=".05em";var o=Math.max(0.4,s.PHTML.h-0.4),u=Math.max(0.2,s.PHTML.d+0.1);var t=this.PHTML;if(n&&p){var r=e.Element("span",{className:"MJXp-script-box",style:{height:g.Em(o+n.PHTML.h*0.8+u+p.PHTML.d*0.8),"vertical-align":g.Em(-u-p.PHTML.d*0.8)}},[["span",{},[["span",{},[["span",{style:{"margin-bottom":g.Em(-(n.PHTML.d-0.05))}}]]]]],["span",{},[["span",{},[["span",{style:{"margin-top":g.Em(-(n.PHTML.h-0.05))}}]]]]]]);p.PHTMLhandleScriptlevel(r.firstChild);n.PHTMLhandleScriptlevel(r.lastChild);r.firstChild.firstChild.firstChild.appendChild(q.lastChild);r.lastChild.firstChild.firstChild.appendChild(q.lastChild);q.appendChild(r);t.h=Math.max(s.PHTML.h,n.PHTML.h*0.8+o);t.d=Math.max(s.PHTML.d,p.PHTML.d*0.8+u);t.w=s.PHTML.w+Math.max(n.PHTML.w,p.PHTML.w)+0.07}else{if(n){q.lastChild.style.verticalAlign=g.Em(o);n.PHTMLhandleScriptlevel(q.lastChild);t.h=Math.max(s.PHTML.h,n.PHTML.h*0.8+o);t.d=Math.max(s.PHTML.d,n.PHTML.d*0.8-o);t.w=s.PHTML.w+n.PHTML.w+0.07}else{if(p){q.lastChild.style.verticalAlign=g.Em(-u);p.PHTMLhandleScriptlevel(q.lastChild);t.h=Math.max(s.PHTML.h,p.PHTML.h*0.8-u);t.d=Math.max(s.PHTML.d,p.PHTML.d*0.8+u);t.w=s.PHTML.w+p.PHTML.w+0.07}}}return q}});h.mfrac.Augment({toPreviewHTML:function(r){r=this.PHTMLdefaultSpan(r,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});var o=this.getValues("linethickness","displaystyle");if(!o.displaystyle){if(this.data[0]){this.data[0].PHTMLhandleScriptlevel(r.firstChild)}if(this.data[1]){this.data[1].PHTMLhandleScriptlevel(r.lastChild)}}var n=e.Element("span",{className:"MJXp-box"},[["span",{className:"MJXp-denom"},[["span",{},[["span",{className:"MJXp-rule",style:{height:"1em"}}]]],["span"]]]]);n.firstChild.lastChild.appendChild(r.lastChild);r.appendChild(n);var s=this.PHTMLbboxFor(0),p=this.PHTMLbboxFor(1),v=this.PHTML;v.w=Math.max(s.w,p.w)*0.8;v.h=s.h+s.d+0.1+0.25;v.d=p.h+p.d-0.25;v.l=v.r=0.125;o.linethickness=Math.max(0,g.length2em(o.linethickness||"0",0));if(o.linethickness){var u=n.firstChild.firstChild.firstChild;var q=g.Em(o.linethickness);u.style.borderTop="none";u.style.borderBottom=(o.linethickness<0.15?"1px":q)+" solid";u.style.margin=q+" 0";q=o.linethickness;n.style.marginTop=g.Em(3*q-1.2);r.style.verticalAlign=g.Em(1.5*q+0.1);v.h+=1.5*q-0.1;v.d+=1.5*q}else{n.style.marginTop="-.7em"}return r}});h.msqrt.Augment({toPreviewHTML:function(n){n=this.PHTMLdefaultSpan(n,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});this.PHTMLlayoutRoot(n,n.firstChild);return n},PHTMLlayoutRoot:function(u,n){var v=this.PHTMLbboxFor(0);var q=Math.ceil((v.h+v.d+0.14)*100),w=g.Em(14/q);var r=e.Element("span",{className:"MJXp-surd"},[["span",{style:{"font-size":q+"%","margin-top":w}},["\u221A"]]]);var s=e.Element("span",{className:"MJXp-root"},[["span",{className:"MJXp-rule",style:{"border-top":".08em solid"}}]]);var p=(1.2/2.2)*q/100;if(q>150){var o=Math.ceil(150/q*10);r.firstChild.className="MJXp-right MJXp-scale"+o;r.firstChild.style.marginLeft=g.Em(p*(o/10-1)/q*100);p=p*o/10;s.firstChild.style.borderTopWidth=g.Em(0.08/Math.sqrt(o/10))}s.appendChild(n);u.appendChild(r);u.appendChild(s);this.PHTML.h=v.h+0.18;this.PHTML.d=v.d;this.PHTML.w=v.w+p;return u}});h.mroot.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});var p=this.PHTMLbboxFor(1),n=q.removeChild(q.lastChild);var t=this.PHTMLlayoutRoot(e.Element("span"),q.firstChild);n.className="MJXp-script";var u=parseInt(t.firstChild.firstChild.style.fontSize);var o=0.55*(u/120)+p.d*0.8,s=-0.6*(u/120);if(u>150){s*=0.95*Math.ceil(150/u*10)/10}n.style.marginRight=g.Em(s);n.style.verticalAlign=g.Em(o);if(-s>p.w*0.8){n.style.marginLeft=g.Em(-s-p.w*0.8)}q.appendChild(n);q.appendChild(t);this.PHTML.w+=Math.max(0,p.w*0.8+s);this.PHTML.h=Math.max(this.PHTML.h,p.h*0.8+o);return q},PHTMLlayoutRoot:h.msqrt.prototype.PHTMLlayoutRoot});h.mfenced.Augment({toPreviewHTML:function(q){q=this.PHTMLcreateSpan(q);this.PHTMLhandleStyle(q);this.PHTMLhandleColor(q);this.addFakeNodes();this.PHTMLaddChild(q,"open",{});for(var p=0,n=this.data.length;ps){s=x.w}}}var o=this.PHTML;o.w=s;o.h=y/2+0.25;o.d=y/2-0.25;o.l=o.r=0.125;return E}});h.mlabeledtr.Augment({PHTMLdefaultSpan:function(q,o){if(!o){o={}}q=this.PHTMLcreateSpan(q);this.PHTMLhandleStyle(q);this.PHTMLhandleColor(q);if(this.isToken){this.PHTMLhandleToken(q)}for(var p=1,n=this.data.length;p/g,"")}catch(k){if(!k.restart){throw k}return MathJax.Callback.After(["HandleMML",this,l],k.restart)}n.setAttribute("data-mathml",i);j=f.addElement(n,"span",{isMathJax:true,unselectable:"on",className:"MJX_Assistive_MathML"+(h.root.Get("display")==="block"?" MJX_Assistive_MathML_Block":"")});try{j.innerHTML=i}catch(k){}n.style.position="relative";n.setAttribute("role","presentation");n.firstChild.setAttribute("aria-hidden","true");j.setAttribute("role","presentation")}l.i++}l.callback()}};b.Startup.signal.Post("AssistiveMML Ready")})(MathJax.Ajax,MathJax.Callback,MathJax.Hub,MathJax.HTML);MathJax.Callback.Queue(["Require",MathJax.Ajax,"[MathJax]/extensions/toMathML.js"],["loadComplete",MathJax.Ajax,"[MathJax]/extensions/AssistiveMML.js"],function(){MathJax.Hub.Register.StartupHook("End Config",["Config",MathJax.Extension.AssistiveMML])}); +!function(a,b){var c,d,e=a.config.menuSettings,f=Function.prototype.bind?function(a,b){return a.bind(b)}:function(a,b){return function(){a.apply(b,arguments)}},g=Object.keys||function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},h=MathJax.Ajax.config.path;h.a11y||(h.a11y=a.config.root+"/extensions/a11y");var i=b["accessibility-menu"]={version:"1.5.0",prefix:"",defaults:{},modules:[],MakeOption:function(a){return i.prefix+a},GetOption:function(a){return e[i.MakeOption(a)]},AddDefaults:function(){for(var a,b=g(i.defaults),c=0;a=b[c];c++){var d=i.MakeOption(a);void 0===e[d]&&(e[d]=i.defaults[a])}},AddMenu:function(){for(var a,b=Array(this.modules.length),e=0;a=this.modules[e];e++)b[e]=a.placeHolder;var f=d.FindId("Accessibility");if(f)b.unshift(c.RULE()),f.submenu.items.push.apply(f.submenu.items,b);else{var g=(d.FindId("Settings","Renderer")||{}).submenu;g&&(b.unshift(c.RULE()),b.unshift(g.items.pop()),b.unshift(g.items.pop())),b.unshift("Accessibility");var f=c.SUBMENU.apply(c.SUBMENU,b),h=d.IndexOfId("Locale");h?d.items.splice(h,0,f):d.items.push(c.RULE(),f)}},Register:function(a){i.defaults[a.option]=!1,i.modules.push(a)},Startup:function(){c=MathJax.Menu.ITEM,d=MathJax.Menu.menu;for(var a,b=0;a=this.modules[b];b++)a.CreateMenu();this.AddMenu()},LoadExtensions:function(){for(var b,c=[],d=0;b=this.modules[d];d++)e[b.option]&&c.push(b.module);return c.length?a.Startup.loadArray(c):null}},j=MathJax.Extension.ModuleLoader=MathJax.Object.Subclass({option:"",name:["",""],module:"",placeHolder:null,submenu:!1,extension:null,Init:function(a,b,c,d,e){this.option=a,this.name=[b.replace(/ /g,""),b],this.module=c,this.extension=d,this.submenu=e||!1},CreateMenu:function(){var a=f(this.Load,this);this.submenu?this.placeHolder=c.SUBMENU(this.name,c.CHECKBOX(["Activate","Activate"],i.MakeOption(this.option),{action:a}),c.RULE(),c.COMMAND(["OptionsWhenActive","(Options when Active)"],null,{disabled:!0})):this.placeHolder=c.CHECKBOX(this.name,i.MakeOption(this.option),{action:a})},Load:function(){a.Queue(["Require",MathJax.Ajax,this.module,["Enable",this]])},Enable:function(a){var b=MathJax.Extension[this.extension];b&&(b.Enable(!0,!0),MathJax.Menu.saveCookie())}});i.Register(j("collapsible","Collapsible Math","[a11y]/collapsible.js","collapsible")),i.Register(j("autocollapse","Auto Collapse","[a11y]/auto-collapse.js","auto-collapse")),i.Register(j("explorer","Explorer","[a11y]/explorer.js","explorer",!0)),i.AddDefaults(),a.Register.StartupHook("End Extensions",function(){a.Register.StartupHook("MathMenu Ready",function(){i.Startup(),a.Startup.signal.Post("Accessibility Menu Ready")},5)},5),MathJax.Hub.Register.StartupHook("End Cookie",function(){MathJax.Callback.Queue(["LoadExtensions",i],["loadComplete",MathJax.Ajax,"[a11y]/accessibility-menu.js"])})}(MathJax.Hub,MathJax.Extension);MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_CHTML.js"); diff --git a/scripts/extensions/AssistiveMML.js b/scripts/extensions/AssistiveMML.js new file mode 100644 index 000000000..935fcc62e --- /dev/null +++ b/scripts/extensions/AssistiveMML.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/AssistiveMML.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a,e,b,f){var c=b.config.menuSettings;var d=MathJax.Extension.AssistiveMML={version:"2.7.5",config:b.CombineConfig("AssistiveMML",{disabled:false,styles:{".MJX_Assistive_MathML":{position:"absolute!important",top:0,left:0,clip:(b.Browser.isMSIE&&(document.documentMode||0)<8?"rect(1px 1px 1px 1px)":"rect(1px, 1px, 1px, 1px)"),padding:"1px 0 0 0!important",border:"0!important",height:"1px!important",width:"1px!important",overflow:"hidden!important",display:"block!important","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none"},".MJX_Assistive_MathML.MJX_Assistive_MathML_Block":{width:"100%!important"}}}),Config:function(){if(!this.config.disabled&&c.assistiveMML==null){b.Config({menuSettings:{assistiveMML:true}})}a.Styles(this.config.styles);b.Register.MessageHook("End Math",function(g){if(c.assistiveMML){return d.AddAssistiveMathML(g[1])}})},AddAssistiveMathML:function(g){var h={jax:b.getAllJax(g),i:0,callback:MathJax.Callback({})};this.HandleMML(h);return h.callback},RemoveAssistiveMathML:function(k){var h=b.getAllJax(k),l;for(var j=0,g=h.length;j/g,"")}catch(k){if(!k.restart){throw k}return MathJax.Callback.After(["HandleMML",this,l],k.restart)}n.setAttribute("data-mathml",i);j=f.addElement(n,"span",{isMathJax:true,unselectable:"on",className:"MJX_Assistive_MathML"+(h.root.Get("display")==="block"?" MJX_Assistive_MathML_Block":"")});try{j.innerHTML=i}catch(k){}n.style.position="relative";n.setAttribute("role","presentation");n.firstChild.setAttribute("aria-hidden","true");j.setAttribute("role","presentation")}l.i++}l.callback()}};b.Startup.signal.Post("AssistiveMML Ready")})(MathJax.Ajax,MathJax.Callback,MathJax.Hub,MathJax.HTML);MathJax.Callback.Queue(["Require",MathJax.Ajax,"[MathJax]/extensions/toMathML.js"],["loadComplete",MathJax.Ajax,"[MathJax]/extensions/AssistiveMML.js"],function(){MathJax.Hub.Register.StartupHook("End Config",["Config",MathJax.Extension.AssistiveMML])}); diff --git a/scripts/extensions/CHTML-preview.js b/scripts/extensions/CHTML-preview.js new file mode 100644 index 000000000..bd6020938 --- /dev/null +++ b/scripts/extensions/CHTML-preview.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/CHTML-preview.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Callback.Queue(["Require",MathJax.Ajax,"[MathJax]/extensions/fast-preview.js"],["loadComplete",MathJax.Ajax,"[MathJax]/extensions/CHTML-preview.js"]); diff --git a/scripts/extensions/FontWarnings.js b/scripts/extensions/FontWarnings.js new file mode 100644 index 000000000..baac36562 --- /dev/null +++ b/scripts/extensions/FontWarnings.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/FontWarnings.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(b,d){var i="2.7.5";var a="http://www.stixfonts.org/";var f="https://github.com/mathjax/MathJax/tree/master/fonts/HTML-CSS/TeX/otf";var h=b.CombineConfig("FontWarnings",{messageStyle:{position:"fixed",bottom:"4em",left:"3em",width:"40em",border:"3px solid #880000","background-color":"#E0E0E0",color:"black",padding:"1em","font-size":"small","white-space":"normal","border-radius":".75em","-webkit-border-radius":".75em","-moz-border-radius":".75em","-khtml-border-radius":".75em","box-shadow":"4px 4px 10px #AAAAAA","-webkit-box-shadow":"4px 4px 10px #AAAAAA","-moz-box-shadow":"4px 4px 10px #AAAAAA","-khtml-box-shadow":"4px 4px 10px #AAAAAA",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=3, OffY=3, Color='gray', Positive='true')"},Message:{webFont:[["closeBox"],["webFont","MathJax is using web-based fonts to display the mathematics on this page. These take time to download, so the page would render faster if you installed math fonts directly in your system's font folder."],["fonts"]],imageFonts:[["closeBox"],["imageFonts","MathJax is using its image fonts rather than local or web-based fonts. This will render slower than usual, and the mathematics may not print at the full resolution of your printer."],["fonts"],["webFonts"]],noFonts:[["closeBox"],["noFonts","MathJax is unable to locate a font to use to display its mathematics, and image fonts are not available, so it is falling back on generic unicode characters in hopes that your browser will be able to display them. Some characters may not show up properly, or possibly not at all."],["fonts"],["webFonts"]]},HTML:{closeBox:[["div",{style:{position:"absolute",overflow:"hidden",top:".1em",right:".1em",border:"1px outset",width:"1em",height:"1em","text-align":"center",cursor:"pointer","background-color":"#EEEEEE",color:"#606060","border-radius":".5em","-webkit-border-radius":".5em","-moz-border-radius":".5em","-khtml-border-radius":".5em"},onclick:function(){if(c.div&&c.fade===0){if(c.timer){clearTimeout(c.timer)}c.div.style.display="none"}}},[["span",{style:{position:"relative",bottom:".2em"}},["x"]]]]],webFonts:[["p"],["webFonts","Most modern browsers allow for fonts to be downloaded over the web. Updating to a more recent version of your browser (or changing browsers) could improve the quality of the mathematics on this page."]],fonts:[["p"],["fonts","MathJax can use either the [STIX fonts](%1) or the [MathJax TeX fonts](%2). Download and install one of those fonts to improve your MathJax experience.",a,f]],STIXfonts:[["p"],["STIXPage","This page is designed to use the [STIX fonts](%1). Download and install those fonts to improve your MathJax experience.",a]],TeXfonts:[["p"],["TeXPage","This page is designed to use the [MathJax TeX fonts](%1). Download and install those fonts to improve your MathJax experience.",f]]},removeAfter:12*1000,fadeoutSteps:10,fadeoutTime:1.5*1000});if(MathJax.Hub.Browser.isIE9&&document.documentMode>=9){delete h.messageStyle.filter}var c={div:null,fade:0};var e=function(m){if(c.div){return}var j=MathJax.OutputJax["HTML-CSS"],n=document.body;if(b.Browser.isMSIE){if(h.messageStyle.position==="fixed"){MathJax.Message.Init();n=document.getElementById("MathJax_MSIE_Frame")||n;if(n!==document.body){h.messageStyle.position="absolute"}}}else{delete h.messageStyle.filter}h.messageStyle.maxWidth=(document.body.clientWidth-75)+"px";var k=0;while(k1?z/h:1);C=Math.floor(Math.max(this.config.minScaleAdjust/100,C)*this.config.scale);if(C/100!==g.scale){o.push([v.style,C])}g.scale=C/100;g.fontScale=C+"%";g.ex=z;g.mex=h}if("scrollWidth" in g&&(r||g.scrollWidth!==k.firstChild.scrollWidth)){g.scrollWidth=k.firstChild.scrollWidth;t.push([k.parentNode.style,g.scrollWidth/g.ex/g.scale])}if(k.MathJaxMtds){for(var u=0,p=k.MathJaxMtds.length;u0){this.HoverFadeTimer(q,q.hover.inc);return}s.parentNode.removeChild(s);if(r){r.parentNode.removeChild(r)}if(q.hover.remove){clearTimeout(q.hover.remove)}delete q.hover},HoverFadeTimer:function(q,s,r){q.hover.inc=s;if(!q.hover.timer){q.hover.timer=setTimeout(g(["HoverFade",this,q]),(r||o.fadeDelay))}},HoverMenu:function(q){if(!q){q=window.event}return b[this.jax].ContextMenu(q,this.math,true)},ClearHover:function(q){if(q.hover.remove){clearTimeout(q.hover.remove)}if(q.hover.timer){clearTimeout(q.hover.timer)}f.ClearHoverTimer();delete q.hover},Px:function(q){if(Math.abs(q)<0.006){return"0px"}return q.toFixed(2).replace(/\.?0+$/,"")+"px"},getImages:function(){if(k.discoverable){var q=new Image();q.src=o.button.src}}};var a=c.Touch={last:0,delay:500,start:function(r){var q=new Date().getTime();var s=(q-a.last=0){h=a.cloneNode(h,true)}var i=a.cloneNode(h);for(var g=0,f=h.childNodes.length;g1){a.applyTransform(o,p[0],g)}a.appendToken(o,"mo",f);if(p.length>0){var q=p[(p.length===1)?0:1];a.applyTransform(o,q,g)}if(k){a.appendToken(o,"mo",")")}n.appendChild(o)}},infix:function(f,g){return function(r,k,o,t,i,p,h){var s=a.createElement("mrow");var n=h>g;if(n){a.appendToken(s,"mo","(")}for(var q=0,m=t.length;q0){a.appendToken(s,"mo",f)}a.applyTransform(s,t[q],g)}if(n){a.appendToken(s,"mo",")")}r.appendChild(s)}},iteration:function(f,g){return function(q,y,C,l,h,u,m){var t=a.createElement("mrow");var x=a.createElement("mo");a.setTextContent(x,f);var o=a.createElement("munderover");o.appendChild(x);var k=a.createElement("mrow");var A,w,v,B,n,s,z,r;for(A=0,v=u.length;A0){a.appendToken(y,"mo",",")}n=a.getChildren(t);if(n.length){a.applyTransform(y,n[0],0)}}var x=a.createElement("mrow");var A=false;for(v=0,p=s.length;v0){a.appendToken(n,"mo",",")}a.applyTransform(n,s[p],0)}if(o.length){a.appendToken(n,"mo","|");for(p=0,k=o.length;p",1),lt:a.transforms.infix("<",1),geq:a.transforms.infix("\u2265",1),leq:a.transforms.infix("\u2264",1),equivalent:a.transforms.infix("\u2261",1),approx:a.transforms.infix("\u2248",1),subset:a.transforms.infix("\u2286",2),prsubset:a.transforms.infix("\u2282",2),cartesianproduct:a.transforms.infix("\u00D7",2),cartesian_product:a.transforms.infix("\u00D7",2),vectorproduct:a.transforms.infix("\u00D7",2),scalarproduct:a.transforms.infix(".",2),outerproduct:a.transforms.infix("\u2297",2),sum:a.transforms.iteration("\u2211","="),product:a.transforms.iteration("\u220F","="),forall:a.transforms.bind("\u2200",".",","),exists:a.transforms.bind("\u2203",".",","),lambda:a.transforms.bind("\u03BB",".",","),limit:a.transforms.iteration("lim","\u2192"),sdev:a.transforms.fn("\u03c3"),determinant:a.transforms.fn("det"),max:a.transforms.minmax("max"),min:a.transforms.minmax("min"),real:a.transforms.fn("\u211b"),imaginary:a.transforms.fn("\u2111"),set:a.transforms.set("{","}"),list:a.transforms.set("(",")"),exp:function(h,k,g,j,i,m,f){var l=a.createElement("msup");a.appendToken(l,"mi","e");a.applyTransform(l,j[0],0);h.appendChild(l)},union:function(h,k,g,j,i,l,f){if(i.length){a.transforms.iteration("\u22C3","=")(h,k,g,j,i,l,f)}else{a.transforms.infix("\u222A",2)(h,k,g,j,i,l,f)}},intersect:function(q,i,n,s,g,o,f){if(g.length){a.transforms.iteration("\u22C2","=")(q,i,n,s,g,o,f)}else{var r=a.createElement("mrow");var m=f>2;if(m){a.appendToken(r,"mo","(")}for(var p=0,k=s.length;p0){a.appendToken(r,"mo","\u2229");if(s[p].nodeName==="apply"){var h=a.getChildren(s[p])[0];t=h.nodeName==="union"}}if(t){a.appendToken(r,"mo","(")}a.applyTransform(r,s[p],2);if(t){a.appendToken(r,"mo",")")}}if(m){a.appendToken(r,"mo",")")}q.appendChild(r)}},floor:function(h,l,g,k,j,m,f){var i=a.createElement("mrow");a.appendToken(i,"mo","\u230a");a.applyTransform(i,k[0],0);a.appendToken(i,"mo","\u230b");h.appendChild(i)},conjugate:function(h,l,g,k,j,m,f){var i=a.createElement("mover");a.applyTransform(i,k[0],0);a.appendToken(i,"mo","\u00af");h.appendChild(i)},abs:function(h,l,g,k,j,m,f){var i=a.createElement("mrow");a.appendToken(i,"mo","|");a.applyTransform(i,k[0],0);a.appendToken(i,"mo","|");h.appendChild(i)},and:function(h,k,g,j,i,l,f){if(i.length||l.length){a.transforms.iteration("\u22c0","=")(h,k,g,j,i,l,4)}else{a.transforms.infix("\u2227",2)(h,k,g,j,i,l,f)}},or:function(h,k,g,j,i,l,f){if(i.length||l.length){a.transforms.iteration("\u22c1","=")(h,k,g,j,i,l,4)}else{a.transforms.infix("\u2228",2)(h,k,g,j,i,l,f)}},xor:function(h,k,g,j,i,l,f){if(i.length||l.length){a.transforms.iteration("xor","=")(h,k,g,j,i,l,4)}else{a.transforms.infix("xor",2)(h,k,g,j,i,l,f)}},card:function(h,l,g,k,j,m,f){var i=a.createElement("mrow");a.appendToken(i,"mo","|");a.applyTransform(i,k[0],0);a.appendToken(i,"mo","|");h.appendChild(i)},mean:function(h,l,g,k,j,m,f){if(k.length===1){var i=a.createElement("mover");a.applyTransform(i,k[0],0);a.appendToken(i,"mo","\u00af");h.appendChild(i)}else{h.appendChild(a.createmfenced(k,"\u27e8","\u27e9"))}},moment:function(s,k,o,w,g,p,f){var n,v,h,r,q,m;for(r=0,m=p.length;r1){y.appendChild(a.createmfenced(w,"(",")"))}else{a.applyTransform(y,w[0],0)}if(n){var x=a.createElement("msup");x.appendChild(y);h=a.getChildren(n);for(q=0,m=h.length;q3;if(k){a.appendToken(q,"mo","(")}for(var o=0,i=r.length;o0){a.appendToken(q,"mo",(r[o].nodeName==="cn")?"\u00D7":"\u2062")}a.applyTransform(q,r[o],3)}if(k){a.appendToken(q,"mo",")")}p.appendChild(q)},plus:function(s,k,p,u,g,q,f){var t=a.createElement("mrow");var o=f>2;if(o){a.appendToken(t,"mo","(")}for(var r=0,m=u.length;r0){var i;if(a.settings.collapsePlusMinus){if(v.nodeName==="cn"&&!(h.length)&&(i=Number(a.getTextContent(v)))<0){a.appendToken(t,"mo","\u2212");a.appendToken(t,"mn",-i)}else{if(v.nodeName==="apply"&&h.length===2&&h[0].nodeName==="minus"){a.appendToken(t,"mo","\u2212");a.applyTransform(t,h[1],2)}else{if(v.nodeName==="apply"&&h.length>2&&h[0].nodeName==="times"&&h[1].nodeName==="cn"&&(i=Number(a.getTextContent(h[1])))<0){a.appendToken(t,"mo","\u2212");h[1].textContent=-i;a.applyTransform(t,v,2)}else{a.appendToken(t,"mo","+");a.applyTransform(t,v,2)}}}}else{a.appendToken(t,"mo","+");a.applyTransform(t,v,2)}}else{a.applyTransform(t,v,2)}}if(o){a.appendToken(t,"mo",")")}s.appendChild(t)},transpose:function(h,k,g,j,i,m,f){var l=a.createElement("msup");a.applyTransform(l,j[0],f);a.appendToken(l,"mi","T");h.appendChild(l)},power:function(h,k,g,j,i,m,f){var l=a.createElement("msup");a.applyTransform(l,j[0],3);a.applyTransform(l,j[1],f);h.appendChild(l)},selector:function(p,h,k,s,g,n,f){var r=a.createElement("msub");var q=s?s[0]:a.createElement("mrow");a.applyTransform(r,q,0);var m=a.createElement("mrow");for(var o=1,j=s.length;o1){a.applyTransform(i,k[1],0)}}a.appendToken(i,"mo","\u230B");h.appendChild(i)},factorial:function(h,l,g,k,j,m,f){var i=a.createElement("mrow");a.applyTransform(i,k[0],4);a.appendToken(i,"mo","!");h.appendChild(i)},root:function(p,j,m,q,h,n,f){var g;if(m.nodeName==="root"&&(n.length===0||(n[0].nodeName==="degree"&&a.getTextContent(n[0])==="2"))){g=a.createElement("msqrt");for(var o=0,k=q.length;o1){var i=a.createElement("msup");a.applyTransform(i,j,0);a.appendToken(i,"mn",l);M.appendChild(i)}else{a.applyTransform(M,j,0)}}for(K=0,F=z.length;K0){if(x){a.appendToken(s,"mo","+")}a.appendToken(s,"mn",m)}}if(g.length){L=g[0]}for(K=0,F=f.length;K ltr ) ( ] [ } { ) ( ] [ } { \ )(}{>< top right 0 decimalpoint decimalpoint . decimalpoint * 0.1em 0.15em 0.2em 0.15em 0 ) ( / : = top ) ';var b;if(window.XSLTProcessor){if(!d.ParseXML){d.ParseXML=d.createParser()}d.mml3XSLT=new XSLTProcessor();d.mml3XSLT.importStylesheet(d.ParseXML(e))}else{if(MathJax.Hub.Browser.isMSIE){if(MathJax.Hub.Browser.versionAtLeast("9.0")||(document.documentMode||0)>=9){b=new ActiveXObject("Msxml2.FreeThreadedDOMDocument");b.loadXML(e);var a=new ActiveXObject("Msxml2.XSLTemplate");a.stylesheet=b;d.mml3XSLT={mml3:a.createProcessor(),transformToDocument:function(h){this.mml3.input=h;this.mml3.transform();return this.mml3.output}}}else{b=d.createMSParser();b.async=false;b.loadXML(e);d.mml3XSLT={mml3:b,transformToDocument:function(h){return h.documentElement.transformNode(this.mml3)}}}}else{d.mml3XSLT=null}}MathJax.Ajax.Styles({".MathJax .mi, .MathJax .mo, .MathJax .mn, .MathJax .mtext":{direction:"ltr",display:"inline-block"},".MathJax .ms, .MathJax .mspace, .MathJax .mglyph":{direction:"ltr",display:"inline-block"}});MathJax.Hub.Startup.signal.Post("MathML mml3.js Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/MathML/mml3.js"); diff --git a/scripts/extensions/MathMenu.js b/scripts/extensions/MathMenu.js new file mode 100644 index 000000000..0018b80c5 --- /dev/null +++ b/scripts/extensions/MathMenu.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/MathMenu.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(f,o,q,e,r){var p="2.7.5";var d=MathJax.Callback.Signal("menu");MathJax.Extension.MathMenu={version:p,signal:d};var t=function(u){return MathJax.Localization._.apply(MathJax.Localization,[["MathMenu",u]].concat([].slice.call(arguments,1)))};var i=MathJax.Object.isArray;var a=f.Browser.isPC,l=f.Browser.isMSIE,m=((document.documentMode||0)>8);var j=(a?null:"5px");var s=f.CombineConfig("MathMenu",{delay:150,showRenderer:true,showMathPlayer:true,showFontMenu:false,showContext:false,showDiscoverable:false,showLocale:true,showLocaleURL:false,semanticsAnnotations:{TeX:["TeX","LaTeX","application/x-tex"],StarMath:["StarMath 5.0"],Maple:["Maple"],ContentMathML:["MathML-Content","application/mathml-content+xml"],OpenMath:["OpenMath"]},windowSettings:{status:"no",toolbar:"no",locationbar:"no",menubar:"no",directories:"no",personalbar:"no",resizable:"yes",scrollbars:"yes",width:400,height:300,left:Math.round((screen.width-400)/2),top:Math.round((screen.height-300)/3)},styles:{"#MathJax_About":{position:"fixed",left:"50%",width:"auto","text-align":"center",border:"3px outset",padding:"1em 2em","background-color":"#DDDDDD",color:"black",cursor:"default","font-family":"message-box","font-size":"120%","font-style":"normal","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":"15px","-webkit-border-radius":"15px","-moz-border-radius":"15px","-khtml-border-radius":"15px","box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},"#MathJax_About.MathJax_MousePost":{outline:"none"},".MathJax_Menu":{position:"absolute","background-color":"white",color:"black",width:"auto",padding:(a?"2px":"5px 0px"),border:"1px solid #CCCCCC",margin:0,cursor:"default",font:"menu","text-align":"left","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":j,"-webkit-border-radius":j,"-moz-border-radius":j,"-khtml-border-radius":j,"box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},".MathJax_MenuItem":{padding:(a?"2px 2em":"1px 2em"),background:"transparent"},".MathJax_MenuArrow":{position:"absolute",right:".5em","padding-top":".25em",color:"#666666","font-family":(l?"'Arial unicode MS'":null),"font-size":".75em"},".MathJax_MenuActive .MathJax_MenuArrow":{color:"white"},".MathJax_MenuArrow.RTL":{left:".5em",right:"auto"},".MathJax_MenuCheck":{position:"absolute",left:".7em","font-family":(l?"'Arial unicode MS'":null)},".MathJax_MenuCheck.RTL":{right:".7em",left:"auto"},".MathJax_MenuRadioCheck":{position:"absolute",left:(a?"1em":".7em")},".MathJax_MenuRadioCheck.RTL":{right:(a?"1em":".7em"),left:"auto"},".MathJax_MenuLabel":{padding:(a?"2px 2em 4px 1.33em":"1px 2em 3px 1.33em"),"font-style":"italic"},".MathJax_MenuRule":{"border-top":(a?"1px solid #CCCCCC":"1px solid #DDDDDD"),margin:(a?"4px 1px 0px":"4px 3px")},".MathJax_MenuDisabled":{color:"GrayText"},".MathJax_MenuActive":{"background-color":(a?"Highlight":"#606872"),color:(a?"HighlightText":"white")},".MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus":{"background-color":"#E8E8E8"},".MathJax_ContextMenu:focus":{outline:"none"},".MathJax_ContextMenu .MathJax_MenuItem:focus":{outline:"none"},"#MathJax_AboutClose":{top:".2em",right:".2em"},".MathJax_Menu .MathJax_MenuClose":{top:"-10px",left:"-10px"},".MathJax_MenuClose":{position:"absolute",cursor:"pointer",display:"inline-block",border:"2px solid #AAA","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","font-family":"'Courier New',Courier","font-size":"24px",color:"#F0F0F0"},".MathJax_MenuClose span":{display:"block","background-color":"#AAA",border:"1.5px solid","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","line-height":0,padding:"8px 0 6px"},".MathJax_MenuClose:hover":{color:"white!important",border:"2px solid #CCC!important"},".MathJax_MenuClose:hover span":{"background-color":"#CCC!important"},".MathJax_MenuClose:hover:focus":{outline:"none"}}});var n,k,b;f.Register.StartupHook("MathEvents Ready",function(){n=MathJax.Extension.MathEvents.Event.False;k=MathJax.Extension.MathEvents.Hover;b=MathJax.Extension.MathEvents.Event.KEY});var h=MathJax.Object.Subclass({Keydown:function(u,v){switch(u.keyCode){case b.ESCAPE:this.Remove(u,v);break;case b.RIGHT:this.Right(u,v);break;case b.LEFT:this.Left(u,v);break;case b.UP:this.Up(u,v);break;case b.DOWN:this.Down(u,v);break;case b.RETURN:case b.SPACE:this.Space(u,v);break;default:return;break}return n(u)},Escape:function(u,v){},Right:function(u,v){},Left:function(u,v){},Up:function(u,v){},Down:function(u,v){},Space:function(u,v){}},{});var g=MathJax.Menu=h.Subclass({version:p,items:[],posted:false,title:null,margin:5,Init:function(u){this.items=[].slice.call(arguments,0)},With:function(u){if(u){f.Insert(this,u)}return this},Post:function(M,E,B){if(!M){M=window.event||{}}var I=document.getElementById("MathJax_MenuFrame");if(!I){I=g.Background(this);delete c.lastItem;delete c.lastMenu;delete g.skipUp;d.Post(["post",g.jax]);g.isRTL=(MathJax.Localization.fontDirection()==="rtl")}var v=o.Element("div",{onmouseup:g.Mouseup,ondblclick:n,ondragstart:n,onselectstart:n,oncontextmenu:n,menuItem:this,className:"MathJax_Menu",onkeydown:g.Keydown,role:"menu"});if(M.type==="contextmenu"||M.type==="mouseover"){v.className+=" MathJax_ContextMenu"}if(!B){MathJax.Localization.setCSS(v)}for(var N=0,K=this.items.length;NA-this.margin){H=A-v.offsetWidth-this.margin}if(g.isMobile){H=Math.max(5,H-Math.floor(v.offsetWidth/2));F-=20}g.skipUp=M.isContextMenu}else{var z="left",J=E.offsetWidth;H=(g.isMobile?30:J-2);F=0;while(E&&E!==I){H+=E.offsetLeft;F+=E.offsetTop;E=E.parentNode}if(!g.isMobile){if((g.isRTL&&H-J-v.offsetWidth>this.margin)||(!g.isRTL&&H+v.offsetWidth>A-this.margin)){z="right";H=Math.max(this.margin,H-J-v.offsetWidth+6)}}if(!a){v.style["borderRadiusTop"+z]=0;v.style["WebkitBorderRadiusTop"+z]=0;v.style["MozBorderRadiusTop"+z]=0;v.style["KhtmlBorderRadiusTop"+z]=0}}v.style.left=H+"px";v.style.top=F+"px";if(document.selection&&document.selection.empty){document.selection.empty()}var G=window.pageXOffset||document.documentElement.scrollLeft;var D=window.pageYOffset||document.documentElement.scrollTop;g.Focus(v);if(M.type==="keydown"){g.skipMouseoverFromKey=true;setTimeout(function(){delete g.skipMouseoverFromKey},s.delay)}window.scrollTo(G,D);return n(M)},Remove:function(u,v){d.Post(["unpost",g.jax]);var w=document.getElementById("MathJax_MenuFrame");if(w){w.parentNode.removeChild(w);if(this.msieFixedPositionBug){detachEvent("onresize",g.Resize)}}if(g.jax.hover){delete g.jax.hover.nofade;k.UnHover(g.jax)}g.Unfocus(v);if(u.type==="mousedown"){g.CurrentNode().blur()}return n(u)},Find:function(u){return this.FindN(1,u,[].slice.call(arguments,1))},FindId:function(u){return this.FindN(0,u,[].slice.call(arguments,1))},FindN:function(y,v,x){for(var w=0,u=this.items.length;w0){u.oldTabIndex=u.tabIndex}u.tabIndex=-1}},SetTabIndex:function(){var v=g.AllNodes();for(var w=0,u;u=v[w];w++){if(u.oldTabIndex!==undefined){u.tabIndex=u.oldTabIndex;delete u.oldTabIndex}else{u.tabIndex=f.getTabOrder(u)}}},Mod:function(u,v){return((u%v)+v)%v},IndexOf:(Array.prototype.indexOf?function(u,v,w){return u.indexOf(v,w)}:function(u,x,y){for(var w=(y||0),v=u.length;w=0&&c.GetMenuNode(w).menuItem!==v[u].menuItem){v[u].menuItem.posted=false;v[u].parentNode.removeChild(v[u]);u--}},Touchstart:function(u,v){return this.TouchEvent(u,v,"Mousedown")},Touchend:function(u,v){return this.TouchEvent(u,v,"Mouseup")},TouchEvent:function(v,w,u){if(this!==c.lastItem){if(c.lastMenu){g.Event(v,c.lastMenu,"Mouseout")}g.Event(v,w,"Mouseover",true);c.lastItem=this;c.lastMenu=w}if(this.nativeTouch){return null}g.Event(v,w,u);return false},Remove:function(u,v){v=v.parentNode.menuItem;return v.Remove(u,v)},With:function(u){if(u){f.Insert(this,u)}return this},isRTL:function(){return g.isRTL},rtlClass:function(){return(this.isRTL()?" RTL":"")}},{GetMenuNode:function(u){return u.parentNode}});g.ENTRY=g.ITEM.Subclass({role:"menuitem",Attributes:function(u){u=f.Insert({onmouseover:g.Mouseover,onmouseout:g.Mouseout,onmousedown:g.Mousedown,onkeydown:g.Keydown,"aria-disabled":!!this.disabled},u);u=this.SUPER(arguments).Attributes.call(this,u);if(this.disabled){u.className+=" MathJax_MenuDisabled"}return u},MoveVertical:function(u,E,w){var x=c.GetMenuNode(E);var D=[];for(var z=0,C=x.menuItem.items,y;y=C[z];z++){if(!y.hidden){D.push(y)}}var B=g.IndexOf(D,this);if(B===-1){return}var A=D.length;var v=x.childNodes;do{B=g.Mod(w(B),A)}while(D[B].hidden||!v[B].role||v[B].role==="separator");this.Deactivate(E);D[B].Activate(u,v[B])},Up:function(v,u){this.MoveVertical(v,u,function(w){return w-1})},Down:function(v,u){this.MoveVertical(v,u,function(w){return w+1})},Right:function(v,u){this.MoveHorizontal(v,u,g.Right,!this.isRTL())},Left:function(v,u){this.MoveHorizontal(v,u,g.Left,this.isRTL())},MoveHorizontal:function(A,z,u,B){var x=c.GetMenuNode(z);if(x.menuItem===g.menu&&A.shiftKey){u(A,z)}if(B){return}if(x.menuItem!==g.menu){this.Deactivate(z)}var v=x.previousSibling.childNodes;var y=v.length;while(y--){var w=v[y];if(w.menuItem.submenu&&w.menuItem.submenu===x.menuItem){g.Focus(w);break}}this.RemoveSubmenus(z)},Space:function(u,v){this.Mouseup(u,v)},Activate:function(u,v){this.Deactivate(v);if(!this.disabled){v.className+=" MathJax_MenuActive"}this.DeactivateSubmenus(v);g.Focus(v)},Deactivate:function(u){u.className=u.className.replace(/ MathJax_MenuActive/,"")}});g.ITEM.COMMAND=g.ENTRY.Subclass({action:function(){},Init:function(u,w,v){if(!i(u)){u=[u,u]}this.name=u;this.action=w;this.With(v)},Label:function(u,v){return[this.Name()]},Mouseup:function(u,v){if(!this.disabled){this.Remove(u,v);d.Post(["command",this]);this.action.call(this,u)}return n(u)}});g.ITEM.SUBMENU=g.ENTRY.Subclass({submenu:null,marker:"\u25BA",markerRTL:"\u25C4",Attributes:function(u){u=f.Insert({"aria-haspopup":"true"},u);u=this.SUPER(arguments).Attributes.call(this,u);return u},Init:function(u,w){if(!i(u)){u=[u,u]}this.name=u;var v=1;if(!(w instanceof g.ITEM)){this.With(w),v++}this.submenu=g.apply(g,[].slice.call(arguments,v))},Label:function(u,v){this.submenu.posted=false;return[this.Name()+" ",["span",{className:"MathJax_MenuArrow"+this.rtlClass()},[this.isRTL()?this.markerRTL:this.marker]]]},Timer:function(u,v){this.ClearTimer();u={type:u.type,clientX:u.clientX,clientY:u.clientY};this.timer=setTimeout(e(["Mouseup",this,u,v]),s.delay)},ClearTimer:function(){if(this.timer){clearTimeout(this.timer)}},Touchend:function(v,x){var w=this.submenu.posted;var u=this.SUPER(arguments).Touchend.apply(this,arguments);if(w){this.Deactivate(x);delete c.lastItem;delete c.lastMenu}return u},Mouseout:function(u,v){if(!this.submenu.posted){this.Deactivate(v)}this.ClearTimer()},Mouseover:function(u,v){this.Activate(u,v)},Mouseup:function(u,v){if(!this.disabled){if(!this.submenu.posted){this.ClearTimer();this.submenu.Post(u,v,this.ltr);g.Focus(v)}else{this.DeactivateSubmenus(v)}}return n(u)},Activate:function(u,v){if(!this.disabled){this.Deactivate(v);v.className+=" MathJax_MenuActive"}if(!this.submenu.posted){this.DeactivateSubmenus(v);if(!g.isMobile){this.Timer(u,v)}}g.Focus(v)},MoveVertical:function(w,v,u){this.ClearTimer();this.SUPER(arguments).MoveVertical.apply(this,arguments)},MoveHorizontal:function(w,y,v,x){if(!x){this.SUPER(arguments).MoveHorizontal.apply(this,arguments);return}if(this.disabled){return}if(!this.submenu.posted){this.Activate(w,y);return}var u=c.GetMenuNode(y).nextSibling.childNodes;if(u.length>0){this.submenu.items[0].Activate(w,u[0])}}});g.ITEM.RADIO=g.ENTRY.Subclass({variable:null,marker:(a?"\u25CF":"\u2713"),role:"menuitemradio",Attributes:function(v){var u=s.settings[this.variable]===this.value?"true":"false";v=f.Insert({"aria-checked":u},v);v=this.SUPER(arguments).Attributes.call(this,v);return v},Init:function(v,u,w){if(!i(v)){v=[v,v]}this.name=v;this.variable=u;this.With(w);if(this.value==null){this.value=this.name[0]}},Label:function(v,w){var u={className:"MathJax_MenuRadioCheck"+this.rtlClass()};if(s.settings[this.variable]!==this.value){u={style:{display:"none"}}}return[["span",u,[this.marker]]," "+this.Name()]},Mouseup:function(x,y){if(!this.disabled){var z=y.parentNode.childNodes;for(var v=0,u=z.length;v/g,">");var y=t("EqSource","MathJax Equation Source");if(g.isMobile){u.document.open();u.document.write(""+y+"");u.document.write("
"+z+"
");u.document.write("
");u.document.write("");u.document.close()}else{u.document.open();u.document.write(""+y+"");u.document.write("
"+z+"
");u.document.write("");u.document.close();var v=u.document.body.firstChild;setTimeout(function(){var B=(u.outerHeight-u.innerHeight)||30,A=(u.outerWidth-u.innerWidth)||30,w,E;A=Math.max(140,Math.min(Math.floor(0.5*screen.width),v.offsetWidth+A+25));B=Math.max(40,Math.min(Math.floor(0.5*screen.height),v.offsetHeight+B+25));if(g.prototype.msieHeightBug){B+=35}u.resizeTo(A,B);var D;try{D=x.screenX}catch(C){}if(x&&D!=null){w=Math.max(0,Math.min(x.screenX-Math.floor(A/2),screen.width-A-20));E=Math.max(0,Math.min(x.screenY-Math.floor(B/2),screen.height-B-20));u.moveTo(w,E)}},50)}};g.Scale=function(){var z=["CommonHTML","HTML-CSS","SVG","NativeMML","PreviewHTML"],u=z.length,y=100,w,v;for(w=0;w7;g.Augment({margin:20,msieBackgroundBug:((document.documentMode||0)<9),msieFixedPositionBug:(v||!w),msieAboutBug:v,msieHeightBug:((document.documentMode||0)<9)});if(m){delete s.styles["#MathJax_About"].filter;delete s.styles[".MathJax_Menu"].filter}},Firefox:function(u){g.skipMouseover=u.isMobile&&u.versionAtLeast("6.0");g.skipMousedown=u.isMobile}});g.isMobile=f.Browser.isMobile;g.noContextMenu=f.Browser.noContextMenu;g.CreateLocaleMenu=function(){if(!g.menu){return}var z=g.menu.Find("Language").submenu,w=z.items;var v=[],B=MathJax.Localization.strings;for(var A in B){if(B.hasOwnProperty(A)){v.push(A)}}v=v.sort();z.items=[];for(var x=0,u=v.length;xt){z.style.height=t+"px";z.style.width=(x.zW+this.scrollSize)+"px"}if(z.offsetWidth>l){z.style.width=l+"px";z.style.height=(x.zH+this.scrollSize)+"px"}}if(this.operaPositionBug){z.style.width=Math.min(l,x.zW)+"px"}if(z.offsetWidth>m&&z.offsetWidth-m=9);h.msiePositionBug=!m;h.msieSizeBug=l.versionAtLeast("7.0")&&(!document.documentMode||n===7||n===8);h.msieZIndexBug=(n<=7);h.msieInlineBlockAlignBug=(n<=7);h.msieTrapEventBug=!window.addEventListener;if(document.compatMode==="BackCompat"){h.scrollSize=52}if(m){delete i.styles["#MathJax_Zoom"].filter}},Opera:function(l){h.operaPositionBug=true;h.operaRefreshBug=true}});h.topImg=(h.msieInlineBlockAlignBug?d.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}):d.Element("span",{style:{width:0,height:0,display:"inline-block"}}));if(h.operaPositionBug||h.msieTopBug){h.topImg.style.border="1px solid"}MathJax.Callback.Queue(["StartupHook",MathJax.Hub.Register,"Begin Styles",{}],["Styles",f,i.styles],["Post",a.Startup.signal,"MathZoom Ready"],["loadComplete",f,"[MathJax]/extensions/MathZoom.js"])})(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.OutputJax["HTML-CSS"],MathJax.OutputJax.NativeMML); diff --git a/scripts/extensions/Safe.js b/scripts/extensions/Safe.js new file mode 100644 index 000000000..34c7d7416 --- /dev/null +++ b/scripts/extensions/Safe.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/Safe.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(d,c){var f="2.7.5";var a=MathJax.Hub.CombineConfig("Safe",{allow:{URLs:"safe",classes:"safe",cssIDs:"safe",styles:"safe",fontsize:"all",require:"safe"},sizeMin:0.7,sizeMax:1.44,lengthMax:3,safeProtocols:{http:true,https:true,file:true,javascript:false},safeStyles:{color:true,backgroundColor:true,border:true,cursor:true,margin:true,padding:true,textShadow:true,fontFamily:true,fontSize:true,fontStyle:true,fontWeight:true,opacity:true,outline:true},safeRequire:{action:true,amscd:true,amsmath:true,amssymbols:true,autobold:false,"autoload-all":false,bbox:true,begingroup:true,boldsymbol:true,cancel:true,color:true,enclose:true,extpfeil:true,HTML:true,mathchoice:true,mhchem:true,newcommand:true,noErrors:false,noUndefined:false,unicode:true,verb:true},styleParts:{border:true,padding:true,margin:true,outline:true},styleLengths:{borderTop:"borderTopWidth",borderRight:"borderRightWidth",borderBottom:"borderBottomWidth",borderLeft:"borderLeftWidth",paddingTop:true,paddingRight:true,paddingBottom:true,paddingLeft:true,marginTop:true,marginRight:true,marginBottom:true,marginLeft:true,outlineTop:true,outlineRight:true,outlineBottom:true,outlineLeft:true,fontSize:[0.7,1.44]}});var e=a.allow;if(e.fontsize!=="all"){a.safeStyles.fontSize=false}var b=MathJax.Extension.Safe={version:f,config:a,div1:document.createElement("div"),div2:document.createElement("div"),filter:{href:"filterURL",src:"filterURL",altimg:"filterURL","class":"filterClass",style:"filterStyles",id:"filterID",fontsize:"filterFontSize",mathsize:"filterFontSize",scriptminsize:"filterFontSize",scriptsizemultiplier:"filterSizeMultiplier",scriptlevel:"filterScriptLevel"},filterURL:function(g){var h=(g.match(/^\s*([a-z]+):/i)||[null,""])[1].toLowerCase();if(e.URLs==="none"||(e.URLs!=="all"&&!a.safeProtocols[h])){g=null}return g},filterClass:function(g){if(e.classes==="none"||(e.classes!=="all"&&!g.match(/^MJX-[-a-zA-Z0-9_.]+$/))){g=null}return g},filterID:function(g){if(e.cssIDs==="none"||(e.cssIDs!=="all"&&!g.match(/^MJX-[-a-zA-Z0-9_.]+$/))){g=null}return g},filterStyles:function(l){if(e.styles==="all"){return l}if(e.styles==="none"){return null}try{var k=this.div1.style,j=this.div2.style,m;k.cssText=l;j.cssText="";for(var g in a.safeStyles){if(a.safeStyles.hasOwnProperty(g)){if(a.styleParts[g]){for(var h=0;h<4;h++){var o=g+["Top","Right","Bottom","Left"][h];m=this.filterStyle(o,k);if(m){j[o]=m}}}else{m=this.filterStyle(g,k);if(m){j[g]=m}}}}l=j.cssText}catch(n){l=null}return l},filterStyle:function(g,h){var i=h[g];if(typeof i!=="string"||i===""){return null}if(i.match(/^\s*expression/)){return null}if(i.match(/javascript:/)){return null}var j=g.replace(/Top|Right|Left|Bottom/,"");if(!a.safeStyles[g]&&!a.safeStyles[j]){return null}if(!a.styleLengths[g]){return i}return(this.filterStyleLength(g,i,h)?i:null)},filterStyleLength:function(g,i,h){if(typeof a.styleLengths[g]==="string"){i=h[a.styleLengths[g]]}i=this.length2em(i);if(i==null){return false}var j=[-a.lengthMax,a.lengthMax];if(MathJax.Object.isArray(a.styleLengths[g])){j=a.styleLengths[g]}return(i>=j[0]&&i<=j[1])},unit2em:{em:1,ex:0.5,ch:0.5,rem:1,px:1/16,mm:96/25.4/16,cm:96/2.54/16,"in":96/16,pt:96/72/16,pc:96/6/16},length2em:function(h){var g=h.match(/(.+)(em|ex|ch|rem|px|mm|cm|in|pt|pc)/);if(!g){return null}return parseFloat(g[1])*this.unit2em[g[2]]},filterSize:function(g){if(e.fontsize==="none"){return null}if(e.fontsize!=="all"){g=Math.min(Math.max(g,a.sizeMin),a.sizeMax)}return g},filterFontSize:function(g){return(e.fontsize==="all"?g:null)},filterSizeMultiplier:function(g){if(e.fontsize==="none"){g=null}else{if(e.fontsize!=="all"){g=Math.min(1,Math.max(0.6,g)).toString()}}return g},filterScriptLevel:function(g){if(e.fontsize==="none"){g=null}else{if(e.fontsize!=="all"){g=Math.max(0,g).toString()}}return g},filterRequire:function(g){if(e.require==="none"||(e.require!=="all"&&!a.safeRequire[g.toLowerCase()])){g=null}return g}};d.Register.StartupHook("TeX HTML Ready",function(){var g=MathJax.InputJax.TeX;g.Parse.Augment({HREF_attribute:function(j){var i=b.filterURL(this.GetArgument(j)),h=this.GetArgumentMML(j);if(i){h.With({href:i})}this.Push(h)},CLASS_attribute:function(i){var j=b.filterClass(this.GetArgument(i)),h=this.GetArgumentMML(i);if(j){if(h["class"]!=null){j=h["class"]+" "+j}h.With({"class":j})}this.Push(h)},STYLE_attribute:function(i){var j=b.filterStyles(this.GetArgument(i)),h=this.GetArgumentMML(i);if(j){if(h.style!=null){if(j.charAt(j.length-1)!==";"){j+=";"}j=h.style+" "+j}h.With({style:j})}this.Push(h)},ID_attribute:function(j){var i=b.filterID(this.GetArgument(j)),h=this.GetArgumentMML(j);if(i){h.With({id:i})}this.Push(h)}})});d.Register.StartupHook("TeX Jax Ready",function(){var i=MathJax.InputJax.TeX,h=i.Parse,g=b.filter;h.Augment({Require:function(j){var k=this.GetArgument(j).replace(/.*\//,"").replace(/[^a-z0-9_.-]/ig,"");k=b.filterRequire(k);if(k){this.Extension(null,k)}},MmlFilterAttribute:function(j,k){if(g[j]){k=b[g[j]](k)}return k},SetSize:function(j,k){k=b.filterSize(k);if(k){this.stack.env.size=k;this.Push(i.Stack.Item.style().With({styles:{mathsize:k+"em"}}))}}})});d.Register.StartupHook("TeX bbox Ready",function(){var g=MathJax.InputJax.TeX;g.Parse.Augment({BBoxStyle:function(h){return b.filterStyles(h)},BBoxPadding:function(i){var h=b.filterStyles("padding: "+i);return(h?i:0)}})});d.Register.StartupHook("MathML Jax Ready",function(){var h=MathJax.InputJax.MathML.Parse,g=b.filter;h.Augment({filterAttribute:function(i,j){if(g[i]){j=b[g[i]](j)}return j}})});d.Startup.signal.Post("Safe Extension Ready");c.loadComplete("[MathJax]/extensions/Safe.js")})(MathJax.Hub,MathJax.Ajax); diff --git a/scripts/extensions/TeX/AMScd.js b/scripts/extensions/TeX/AMScd.js new file mode 100644 index 000000000..3a30fdc2b --- /dev/null +++ b/scripts/extensions/TeX/AMScd.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/AMScd.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/AMScd"]={version:"2.7.5",config:MathJax.Hub.CombineConfig("TeX.CD",{colspace:"5pt",rowspace:"5pt",harrowsize:"2.75em",varrowsize:"1.75em",hideHorizontalLabels:false})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var b=MathJax.ElementJax.mml,e=MathJax.InputJax.TeX,d=e.Stack.Item,c=e.Definitions,a=MathJax.Extension["TeX/AMScd"].config;c.environment.CD="CD_env";c.special["@"]="CD_arrow";c.macros.minCDarrowwidth="CD_minwidth";c.macros.minCDarrowheight="CD_minheight";e.Parse.Augment({CD_env:function(f){this.Push(f);return d.array().With({arraydef:{columnalign:"center",columnspacing:a.colspace,rowspacing:a.rowspace,displaystyle:true},minw:this.stack.env.CD_minw||a.harrowsize,minh:this.stack.env.CD_minh||a.varrowsize})},CD_arrow:function(g){var l=this.string.charAt(this.i);if(!l.match(/[>":"\u2192","<":"\u2190",V:"\u2193",A:"\u2191"}[l];var p=this.GetUpTo(g+l,l),m=this.GetUpTo(g+l,l);if(l===">"||l==="<"){h=b.mo(r).With(f);if(!p){p="\\kern "+o.minw}if(p||m){var j={width:"+11mu",lspace:"6mu"};h=b.munderover(this.mmlToken(h));if(p){p=e.Parse(p,this.stack.env).mml();h.SetData(h.over,b.mpadded(p).With(j).With({voffset:".1em"}))}if(m){m=e.Parse(m,this.stack.env).mml();h.SetData(h.under,b.mpadded(m).With(j))}if(a.hideHorizontalLabels){h=b.mpadded(h).With({depth:0,height:".67em"})}}}else{h=r=this.mmlToken(b.mo(r).With(k));if(p||m){h=b.mrow();if(p){h.Append(e.Parse("\\scriptstyle\\llap{"+p+"}",this.stack.env).mml())}h.Append(r.With({texClass:b.TEXCLASS.ORD}));if(m){h.Append(e.Parse("\\scriptstyle\\rlap{"+m+"}",this.stack.env).mml())}}}}}}if(h){this.Push(h)}this.CD_cell(g)},CD_cell:function(f){var g=this.stack.Top();if((g.table||[]).length%2===0&&(g.row||[]).length===0){this.Push(b.mpadded().With({height:"8.5pt",depth:"2pt"}))}this.Push(d.cell().With({isEntry:true,name:f}))},CD_minwidth:function(f){this.stack.env.CD_minw=this.GetDimen(f)},CD_minheight:function(f){this.stack.env.CD_minh=this.GetDimen(f)}})});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/AMScd.js"); diff --git a/scripts/extensions/TeX/AMSmath.js b/scripts/extensions/TeX/AMSmath.js new file mode 100644 index 000000000..2504c5cb4 --- /dev/null +++ b/scripts/extensions/TeX/AMSmath.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/AMSmath.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/AMSmath"]={version:"2.7.5",number:0,startNumber:0,IDs:{},eqIDs:{},labels:{},eqlabels:{},refs:[]};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var b=MathJax.ElementJax.mml,h=MathJax.InputJax.TeX,g=MathJax.Extension["TeX/AMSmath"];var d=h.Definitions,f=h.Stack.Item,a=h.config.equationNumbers;var c=function(k){var n=[];for(var l=0,j=k.length;l0){p+="rl";o.push("0em 0em");q--}o=o.join(" ");if(i){return this.AMSarray(l,j,i,p,o)}var m=this.AMSarray(l,j,i,p,o);return this.setArrayAlign(m,k)},EquationBegin:function(i,j){this.checkEqnEnv();this.stack.global.forcetag=(j&&a.autoNumber!=="none");return i},EquationStar:function(i,j){this.stack.global.tagged=true;return j},checkEqnEnv:function(){if(this.stack.global.eqnenv){h.Error(["ErroneousNestingEq","Erroneous nesting of equation structures"])}this.stack.global.eqnenv=true},MultiIntegral:function(j,m){var l=this.GetNext();if(l==="\\"){var k=this.i;l=this.GetArgument(j);this.i=k;if(l==="\\limits"){if(j==="\\idotsint"){m="\\!\\!\\mathop{\\,\\,"+m+"}"}else{m="\\!\\!\\!\\mathop{\\,\\,\\,"+m+"}"}}}this.string=m+" "+this.string.slice(this.i);this.i=0},xArrow:function(k,o,n,i){var m={width:"+"+(n+i)+"mu",lspace:n+"mu"};var p=this.GetBrackets(k),q=this.ParseArg(k);var s=b.mo(b.chars(String.fromCharCode(o))).With({stretchy:true,texClass:b.TEXCLASS.REL});var j=b.munderover(s);j.SetData(j.over,b.mpadded(q).With(m).With({voffset:".15em"}));if(p){p=h.Parse(p,this.stack.env).mml();j.SetData(j.under,b.mpadded(p).With(m).With({voffset:"-.24em"}))}this.Push(j.With({subsupOK:true}))},GetDelimiterArg:function(i){var j=this.trimSpaces(this.GetArgument(i));if(j==""){return null}if(j in d.delimiter){return j}h.Error(["MissingOrUnrecognizedDelim","Missing or unrecognized delimiter for %1",i])},GetStar:function(){var i=(this.GetNext()==="*");if(i){this.i++}return i}});f.Augment({autoTag:function(){var j=this.global;if(!j.notag){g.number++;j.tagID=a.formatNumber(g.number.toString());var i=h.Parse("\\text{"+a.formatTag(j.tagID)+"}",{}).mml();j.tag=b.mtd(i).With({id:a.formatID(j.tagID)})}},getTag:function(){var m=this.global,k=m.tag;m.tagged=true;if(m.label){if(a.useLabelIds){k.id=a.formatID(m.label)}g.eqlabels[m.label]={tag:m.tagID,id:k.id}}if(document.getElementById(k.id)||g.IDs[k.id]||g.eqIDs[k.id]){var l=0,j;do{l++;j=k.id+"_"+l}while(document.getElementById(j)||g.IDs[j]||g.eqIDs[j]);k.id=j;if(m.label){g.eqlabels[m.label].id=j}}g.eqIDs[k.id]=1;this.clearTag();return k},clearTag:function(){var i=this.global;delete i.tag;delete i.tagID;delete i.label},fixInitialMO:function(l){for(var k=0,j=l.length;k0){this.stack[i].Undef(e,f);i--}if(!MathJax.Object.isArray(h)){h=[h]}if(this.isEqn){h.global=true}}this.stack[i].Def(e,h,f)},Push:function(e){this.stack.push(e);this.top=this.stack.length},Pop:function(){var e;if(this.top>1){e=this.stack[--this.top];if(this.isEqn){this.stack.pop()}}else{if(this.isEqn){this.Clear()}}return e},Find:function(e,g){for(var f=this.top-1;f>=0;f--){var h=this.stack[f].Find(e,g);if(h){return h}}return null},Merge:function(e){e.stack[0].MergeGlobals(this);this.stack[this.top-1].Merge(e.stack[0]);var f=[this.top,this.stack.length-this.top].concat(e.stack.slice(1));this.stack.splice.apply(this.stack,f);this.top=this.stack.length},Reset:function(){this.top=this.stack.length},Clear:function(e){this.stack=[this.stack[0].Clear()];this.top=this.stack.length}},{nsFrame:a});b.Add({macros:{begingroup:"BeginGroup",endgroup:"EndGroup",global:"Global",gdef:["Macro","\\global\\def"]}},null,true);d.Parse.Augment({BeginGroup:function(e){d.eqnStack.Push(a())},EndGroup:function(e){if(d.eqnStack.top>1){d.eqnStack.Pop()}else{if(d.rootStack.top===1){d.Error(["ExtraEndMissingBegin","Extra %1 or missing \\begingroup",e])}else{d.eqnStack.Clear();d.rootStack.Pop()}}},csFindMacro:function(e){return(d.eqnStack.Find(e,"macros")||d.rootStack.Find(e,"macros"))},envFindName:function(e){return(d.eqnStack.Find(e,"environments")||d.rootStack.Find(e,"environments"))},setDef:function(e,f){f.isUser=true;d.eqnStack.Def(e,f,"macros",this.stack.env.isGlobal);delete this.stack.env.isGlobal},setEnv:function(e,f){f.isUser=true;d.eqnStack.Def(e,f,"environments")},Global:function(e){var f=this.i;var g=this.GetCSname(e);this.i=f;if(g!=="let"&&g!=="def"&&g!=="newcommand"&&g!=="DeclareMathOperator"&&g!=="Newextarrow"){d.Error(["GlobalNotFollowedBy","%1 not followed by \\let, \\def, or \\newcommand",e])}this.stack.env.isGlobal=true}});d.rootStack=c();d.eqnStack=c(true);d.prefilterHooks.Add(function(){d.rootStack.Reset();d.eqnStack.Clear(true)});d.postfilterHooks.Add(function(){d.rootStack.Merge(d.eqnStack)});MathJax.Hub.Startup.signal.Post("TeX begingroup Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/begingroup.js"); diff --git a/scripts/extensions/TeX/boldsymbol.js b/scripts/extensions/TeX/boldsymbol.js new file mode 100644 index 000000000..b3a5dbaf2 --- /dev/null +++ b/scripts/extensions/TeX/boldsymbol.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/boldsymbol.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/boldsymbol"]={version:"2.7.5"};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var a=MathJax.ElementJax.mml;var d=MathJax.InputJax.TeX;var b=d.Definitions;var c={};c[a.VARIANT.NORMAL]=a.VARIANT.BOLD;c[a.VARIANT.ITALIC]=a.VARIANT.BOLDITALIC;c[a.VARIANT.FRAKTUR]=a.VARIANT.BOLDFRAKTUR;c[a.VARIANT.SCRIPT]=a.VARIANT.BOLDSCRIPT;c[a.VARIANT.SANSSERIF]=a.VARIANT.BOLDSANSSERIF;c["-tex-caligraphic"]="-tex-caligraphic-bold";c["-tex-oldstyle"]="-tex-oldstyle-bold";b.Add({macros:{boldsymbol:"Boldsymbol"}},null,true);d.Parse.Augment({mmlToken:function(f){if(this.stack.env.boldsymbol){var e=f.Get("mathvariant");if(e==null){f.mathvariant=a.VARIANT.BOLD}else{f.mathvariant=(c[e]||e)}}return f},Boldsymbol:function(h){var e=this.stack.env.boldsymbol,f=this.stack.env.font;this.stack.env.boldsymbol=true;this.stack.env.font=null;var g=this.ParseArg(h);this.stack.env.font=f;this.stack.env.boldsymbol=e;this.Push(g)}});MathJax.Hub.Startup.signal.Post("TeX boldsymbol Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/boldsymbol.js"); diff --git a/scripts/extensions/TeX/cancel.js b/scripts/extensions/TeX/cancel.js new file mode 100644 index 000000000..2b8424e65 --- /dev/null +++ b/scripts/extensions/TeX/cancel.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/cancel.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/cancel"]={version:"2.7.5",ALLOWED:{color:1,mathcolor:1,background:1,mathbackground:1,padding:1,thickness:1}};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var c=MathJax.InputJax.TeX,a=MathJax.ElementJax.mml,b=MathJax.Extension["TeX/cancel"];b.setAttributes=function(h,e){if(e!==""){e=e.replace(/ /g,"").split(/,/);for(var g=0,d=e.length;g1){this.TEX.Error(["ModelArg2","Color values for the %1 model must be between %2 and %3","rgb",0,1])}d=Math.floor(d*255).toString(16);if(d.length<2){d="0"+d}a+=d}return a},get_RGB:function(b){b=b.replace(/^\s+/,"").replace(/\s+$/,"").split(/\s*,\s*/);var a="#";if(b.length!==3){this.TEX.Error(["ModelArg1","Color values for the %1 model require 3 numbers","RGB"])}for(var c=0;c<3;c++){if(!b[c].match(/^\d+$/)){this.TEX.Error(["InvalidNumber","Invalid number"])}var d=parseInt(b[c]);if(d>255){this.TEX.Error(["ModelArg2","Color values for the %1 model must be between %2 and %3","RGB",0,255])}d=d.toString(16);if(d.length<2){d="0"+d}a+=d}return a},get_gray:function(a){if(!a.match(/^\s*(\d+(\.\d*)?|\.\d+)\s*$/)){this.TEX.Error(["InvalidDecimalNumber","Invalid decimal number"])}var b=parseFloat(a);if(b<0||b>1){this.TEX.Error(["ModelArg2","Color values for the %1 model must be between %2 and %3","gray",0,1])}b=Math.floor(b*255).toString(16);if(b.length<2){b="0"+b}return"#"+b+b+b},get_named:function(a){if(this.colors.hasOwnProperty(a)){return this.colors[a]}return a},padding:function(){var c="+"+this.config.padding;var a=this.config.padding.replace(/^.*?([a-z]*)$/,"$1");var b="+"+(2*parseFloat(c))+a;return{width:b,height:c,depth:c,lspace:this.config.padding}}};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var d=MathJax.InputJax.TeX,a=MathJax.ElementJax.mml;var c=d.Stack.Item;var b=MathJax.Extension["TeX/color"];b.TEX=d;d.Definitions.Add({macros:{color:"Color",textcolor:"TextColor",definecolor:"DefineColor",colorbox:"ColorBox",fcolorbox:"fColorBox"}},null,true);d.Parse.Augment({Color:function(h){var g=this.GetBrackets(h),e=this.GetArgument(h);e=b.getColor(g,e);var f=c.style().With({styles:{mathcolor:e}});this.stack.env.color=e;this.Push(f)},TextColor:function(h){var g=this.GetBrackets(h),f=this.GetArgument(h);f=b.getColor(g,f);var e=this.stack.env.color;this.stack.env.color=f;var i=this.ParseArg(h);if(e){this.stack.env.color}else{delete this.stack.env.color}this.Push(a.mstyle(i).With({mathcolor:f}))},DefineColor:function(g){var f=this.GetArgument(g),e=this.GetArgument(g),h=this.GetArgument(g);b.colors[f]=b.getColor(e,h)},ColorBox:function(g){var f=this.GetArgument(g),e=this.InternalMath(this.GetArgument(g));this.Push(a.mpadded.apply(a,e).With({mathbackground:b.getColor("named",f)}).With(b.padding()))},fColorBox:function(g){var h=this.GetArgument(g),f=this.GetArgument(g),e=this.InternalMath(this.GetArgument(g));this.Push(a.mpadded.apply(a,e).With({mathbackground:b.getColor("named",f),style:"border: "+b.config.border+" solid "+b.getColor("named",h)}).With(b.padding()))}});MathJax.Hub.Startup.signal.Post("TeX color Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/color.js"); diff --git a/scripts/extensions/TeX/enclose.js b/scripts/extensions/TeX/enclose.js new file mode 100644 index 000000000..38273a232 --- /dev/null +++ b/scripts/extensions/TeX/enclose.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/enclose.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/enclose"]={version:"2.7.5",ALLOWED:{arrow:1,color:1,mathcolor:1,background:1,mathbackground:1,padding:1,thickness:1}};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var c=MathJax.InputJax.TeX,a=MathJax.ElementJax.mml,b=MathJax.Extension["TeX/enclose"].ALLOWED;c.Definitions.Add({macros:{enclose:"Enclose"}},null,true);c.Parse.Augment({Enclose:function(g){var k=this.GetArgument(g),e=this.GetBrackets(g),j=this.ParseArg(g);var l={notation:k.replace(/,/g," ")};if(e){e=e.replace(/ /g,"").split(/,/);for(var h=0,d=e.length;h0){f=Math.min(3,e.scriptlevel+1)}else{f=(e.displaystyle?0:1)}var g=this.inherit;while(g&&g.type!=="math"){g=g.inherit}if(g){this.selection=f}this.choosing=false;return f},selected:function(){return this.data[this.choice()]},setTeXclass:function(e){return this.selected().setTeXclass(e)},isSpacelike:function(){return this.selected().isSpacelike()},isEmbellished:function(){return this.selected().isEmbellished()},Core:function(){return this.selected()},CoreMO:function(){return this.selected().CoreMO()},toHTML:function(e){e=this.HTMLcreateSpan(e);e.bbox=this.Core().toHTML(e).bbox;if(e.firstChild&&e.firstChild.style.marginLeft){e.style.marginLeft=e.firstChild.style.marginLeft;e.firstChild.style.marginLeft=""}return e},toSVG:function(){var e=this.Core().toSVG();this.SVGsaveData(e);return e},toCommonHTML:function(e){e=this.CHTMLcreateNode(e);this.CHTMLhandleStyle(e);this.CHTMLhandleColor(e);this.CHTMLaddChild(e,this.choice(),{});return e},toPreviewHTML:function(e){e=this.PHTMLcreateSpan(e);this.PHTMLhandleStyle(e);this.PHTMLhandleColor(e);this.PHTMLaddChild(e,this.choice(),{});return e}});MathJax.Hub.Startup.signal.Post("TeX mathchoice Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/mathchoice.js"); diff --git a/scripts/extensions/TeX/mediawiki-texvc.js b/scripts/extensions/TeX/mediawiki-texvc.js new file mode 100644 index 000000000..7318577bf --- /dev/null +++ b/scripts/extensions/TeX/mediawiki-texvc.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/mediawiki-texvc.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/mediawiki-texvc"]={version:"2.7.5"};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){MathJax.InputJax.TeX.Definitions.Add({macros:{AA:["Macro","\u00c5"],alef:["Macro","\\aleph"],alefsym:["Macro","\\aleph"],Alpha:["Macro","\\mathrm{A}"],and:["Macro","\\land"],ang:["Macro","\\angle"],Bbb:["Macro","\\mathbb"],Beta:["Macro","\\mathrm{B}"],bold:["Macro","\\mathbf"],bull:["Macro","\\bullet"],C:["Macro","\\mathbb{C}"],Chi:["Macro","\\mathrm{X}"],clubs:["Macro","\\clubsuit"],cnums:["Macro","\\mathbb{C}"],Complex:["Macro","\\mathbb{C}"],coppa:["Macro","\u03D9"],Coppa:["Macro","\u03D8"],Dagger:["Macro","\\ddagger"],Digamma:["Macro","\u03DC"],darr:["Macro","\\downarrow"],dArr:["Macro","\\Downarrow"],Darr:["Macro","\\Downarrow"],dashint:["Macro","\\unicodeInt{x2A0D}"],ddashint:["Macro","\\unicodeInt{x2A0E}"],diamonds:["Macro","\\diamondsuit"],empty:["Macro","\\emptyset"],Epsilon:["Macro","\\mathrm{E}"],Eta:["Macro","\\mathrm{H}"],euro:["Macro","\u20AC"],exist:["Macro","\\exists"],geneuro:["Macro","\u20AC"],geneuronarrow:["Macro","\u20AC"],geneurowide:["Macro","\u20AC"],H:["Macro","\\mathbb{H}"],hAar:["Macro","\\Leftrightarrow"],harr:["Macro","\\leftrightarrow"],Harr:["Macro","\\Leftrightarrow"],hearts:["Macro","\\heartsuit"],image:["Macro","\\Im"],infin:["Macro","\\infty"],Iota:["Macro","\\mathrm{I}"],isin:["Macro","\\in"],Kappa:["Macro","\\mathrm{K}"],koppa:["Macro","\u03DF"],Koppa:["Macro","\u03DE"],lang:["Macro","\\langle"],larr:["Macro","\\leftarrow"],Larr:["Macro","\\Leftarrow"],lArr:["Macro","\\Leftarrow"],lrarr:["Macro","\\leftrightarrow"],Lrarr:["Macro","\\Leftrightarrow"],lrArr:["Macro","\\Leftrightarrow"],Mu:["Macro","\\mathrm{M}"],N:["Macro","\\mathbb{N}"],natnums:["Macro","\\mathbb{N}"],Nu:["Macro","\\mathrm{N}"],O:["Macro","\\emptyset"],oint:["Macro","\\unicodeInt{x222E}"],oiint:["Macro","\\unicodeInt{x222F}"],oiiint:["Macro","\\unicodeInt{x2230}"],ointctrclockwise:["Macro","\\unicodeInt{x2233}"],officialeuro:["Macro","\u20AC"],Omicron:["Macro","\\mathrm{O}"],or:["Macro","\\lor"],P:["Macro","\u00B6"],pagecolor:["Macro","",1],part:["Macro","\\partial"],plusmn:["Macro","\\pm"],Q:["Macro","\\mathbb{Q}"],R:["Macro","\\mathbb{R}"],rang:["Macro","\\rangle"],rarr:["Macro","\\rightarrow"],Rarr:["Macro","\\Rightarrow"],rArr:["Macro","\\Rightarrow"],real:["Macro","\\Re"],reals:["Macro","\\mathbb{R}"],Reals:["Macro","\\mathbb{R}"],Rho:["Macro","\\mathrm{P}"],sdot:["Macro","\\cdot"],sampi:["Macro","\u03E1"],Sampi:["Macro","\u03E0"],sect:["Macro","\\S"],spades:["Macro","\\spadesuit"],stigma:["Macro","\u03DB"],Stigma:["Macro","\u03DA"],sub:["Macro","\\subset"],sube:["Macro","\\subseteq"],supe:["Macro","\\supseteq"],Tau:["Macro","\\mathrm{T}"],textvisiblespace:["Macro","\u2423"],thetasym:["Macro","\\vartheta"],uarr:["Macro","\\uparrow"],uArr:["Macro","\\Uparrow"],Uarr:["Macro","\\Uparrow"],unicodeInt:["Macro","\\mathop{\\vcenter{\\mathchoice{\\huge\\unicode{#1}\\,}{\\unicode{#1}}{\\unicode{#1}}{\\unicode{#1}}}\\,}\\nolimits",1],varcoppa:["Macro","\u03D9"],varstigma:["Macro","\u03DB"],varointclockwise:["Macro","\\unicodeInt{x2232}"],vline:["Macro","\\smash{\\large\\lvert}",0],weierp:["Macro","\\wp"],Z:["Macro","\\mathbb{Z}"],Zeta:["Macro","\\mathrm{Z}"]}})});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/mediawiki-texvc.js"); diff --git a/scripts/extensions/TeX/mhchem.js b/scripts/extensions/TeX/mhchem.js new file mode 100644 index 000000000..672d1fdc4 --- /dev/null +++ b/scripts/extensions/TeX/mhchem.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/mhchem.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(MathJax.Extension["TeX/mhchem"]){MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/mhchem.js")}else{MathJax.Extension["TeX/mhchem"]={version:"2.7.5",config:MathJax.Hub.CombineConfig("TeX.mhchem",{legacy:true})};if(!MathJax.Extension["TeX/mhchem"].config.legacy){if(!MathJax.Ajax.config.path.mhchem){MathJax.Ajax.config.path.mhchem=MathJax.Hub.config.root+"/extensions/TeX/mhchem3"}MathJax.Callback.Queue(["Require",MathJax.Ajax,"[mhchem]/mhchem.js"],["loadComplete",MathJax.Ajax,"[MathJax]/extensions/TeX/mhchem.js"])}else{MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var b=MathJax.InputJax.TeX;var a=MathJax.Object.Subclass({string:"",i:0,tex:"",TEX:"",atom:false,sup:"",sub:"",presup:"",presub:"",Init:function(c){this.string=c},ParseTable:{"-":"Minus","+":"Plus","(":"Open",")":"Close","[":"Open","]":"Close","<":"Less","^":"Superscript",_:"Subscript","*":"Dot",".":"Dot","=":"Equal","#":"Pound","$":"Math","\\":"Macro"," ":"Space"},Arrows:{"->":"rightarrow","<-":"leftarrow","<->":"leftrightarrow","<=>":"rightleftharpoons","<=>>":"Rightleftharpoons","<<=>":"Leftrightharpoons","^":"uparrow",v:"downarrow"},Bonds:{"-":"-","=":"=","#":"\\equiv","~":"\\tripledash","~-":"\\begin{CEstack}{}\\tripledash\\\\-\\end{CEstack}","~=":"\\raise2mu{\\begin{CEstack}{}\\tripledash\\\\-\\\\-\\end{CEstack}}","~--":"\\raise2mu{\\begin{CEstack}{}\\tripledash\\\\-\\\\-\\end{CEstack}}","-~-":"\\raise2mu{\\begin{CEstack}{}-\\\\\\tripledash\\\\-\\end{CEstack}}","...":"{\\cdot}{\\cdot}{\\cdot}","....":"{\\cdot}{\\cdot}{\\cdot}{\\cdot}","->":"\\rightarrow","<-":"\\leftarrow","??":"\\text{??}"},Parse:function(){this.tex="";this.atom=false;while(this.i"){this.i+=2;this.AddArrow("->");return}else{this.tex+="{-}"}}this.i++},ParsePlus:function(d){if(this.atom){this.sup+=d}else{this.FinishAtom();this.tex+=d}this.i++},ParseDot:function(d){this.FinishAtom();this.tex+="\\cdot ";this.i++},ParseEqual:function(d){this.FinishAtom();this.tex+="{=}";this.i++},ParsePound:function(d){this.FinishAtom();this.tex+="{\\equiv}";this.i++},ParseOpen:function(e){this.FinishAtom();var d=this.Match(/^\([v^]\)/);if(d){this.tex+="{\\"+this.Arrows[d.charAt(1)]+"}"}else{this.tex+="{"+e;this.i++}},ParseClose:function(d){this.FinishAtom();this.atom=true;this.tex+=d+"}";this.i++},ParseLess:function(e){this.FinishAtom();var d=this.Match(/^(<->?|<=>>?|<<=>)/);if(!d){this.tex+=e;this.i++}else{this.AddArrow(d)}},ParseSuperscript:function(f){f=this.string.charAt(++this.i);if(f==="{"){this.i++;var d=this.Find("}");if(d==="-."){this.sup+="{-}{\\cdot}"}else{if(d){this.sup+=a(d).Parse().replace(/^\{-\}/,"-")}}}else{if(f===" "||f===""){this.tex+="{\\"+this.Arrows["^"]+"}";this.i++}else{var e=this.Match(/^(\d+|-\.)/);if(e){this.sup+=e}}}},ParseSubscript:function(e){if(this.string.charAt(++this.i)=="{"){this.i++;this.sub+=a(this.Find("}")).Parse().replace(/^\{-\}/,"-")}else{var d=this.Match(/^\d+/);if(d){this.sub+=d}}},ParseMath:function(d){this.FinishAtom();this.i++;this.tex+=this.Find(d)},ParseMacro:function(f){this.FinishAtom();this.i++;var d=this.Match(/^([a-z]+|.)/i)||" ";if(d==="sbond"){this.tex+="{-}"}else{if(d==="dbond"){this.tex+="{=}"}else{if(d==="tbond"){this.tex+="{\\equiv}"}else{if(d==="bond"){var e=(this.Match(/^\{.*?\}/)||"");e=e.substr(1,e.length-2);this.tex+="{"+(this.Bonds[e]||"\\text{??}")+"}"}else{if(d==="{"){this.tex+="{\\{"}else{if(d==="}"){this.tex+="\\}}";this.atom=true}else{this.tex+=f+d}}}}}}},ParseSpace:function(d){this.FinishAtom();this.i++},ParseOther:function(d){this.FinishAtom();this.tex+=d;this.i++},AddArrow:function(e){var g=this.Match(/^[CT]\[/);if(g){this.i--;g=g.charAt(0)}var d=this.GetBracket(g),f=this.GetBracket(g);e=this.Arrows[e];if(d||f){if(f){e+="["+f+"]"}e+="{"+d+"}";e="\\mathrel{\\x"+e+"}"}else{e="\\long"+e+" "}this.tex+=e},FinishAtom:function(c){if(this.sup||this.sub||this.presup||this.presub){if(!c&&!this.atom){if(this.tex===""&&!this.sup&&!this.sub){return}if(!this.presup&&!this.presub&&(this.tex===""||this.tex==="{"||(this.tex==="}"&&this.TEX.substr(-1)==="{"))){this.presup=this.sup,this.presub=this.sub;this.sub=this.sup="";this.TEX+=this.tex;this.tex="";return}}if(this.sub&&!this.sup){this.sup="\\Space{0pt}{0pt}{.2em}"}if((this.presup||this.presub)&&this.tex!=="{"){if(!this.presup&&!this.sup){this.presup="\\Space{0pt}{0pt}{.2em}"}this.tex="\\CEprescripts{"+(this.presub||"\\CEnone")+"}{"+(this.presup||"\\CEnone")+"}{"+(this.tex!=="}"?this.tex:"")+"}{"+(this.sub||"\\CEnone")+"}{"+(this.sup||"\\CEnone")+"}"+(this.tex==="}"?"}":"");this.presub=this.presup=""}else{if(this.sup){this.tex+="^{"+this.sup+"}"}if(this.sub){this.tex+="_{"+this.sub+"}"}}this.sup=this.sub=""}this.TEX+=this.tex;this.tex="";this.atom=false},GetBracket:function(e){if(this.string.charAt(this.i)!=="["){return""}this.i++;var d=this.Find("]");if(e==="C"){d="\\ce{"+d+"}"}else{if(e==="T"){if(!d.match(/^\{.*\}$/)){d="{"+d+"}"}d="\\text"+d}}return d},Match:function(d){var c=d.exec(this.string.substr(this.i));if(c){c=c[0];this.i+=c.length}return c},Find:function(h){var d=this.string.length,e=this.i,g=0;while(this.i0))return i;if(c.s||(n=f.t),!c.u)break n}}}if(u<=0)throw["MhchemBugU","mhchem bug U. Please report."]}}, +t.j= +function(n,r){return r?n?n.concat(r):[].concat(r):n},t.w={"~C":/^$/,"~A":/^./,"~B":/^./,"%m":/^\s/,"%l":/^\s(?=[A-Z\\$])/,"~@":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,"~M":/^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,"@z":/^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,"~P":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,"@%":/^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,"~O":/^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,"~u":/^[0-9]+/,"@h":/^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,"@g":/^[+\-]?[0-9]+(?:[.,][0-9]+)?/,"%T": +function(n){var r=n.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);return r&&r[0]?{h:r.splice(1),t:n.substr(r[0].length)}:null},aj: +function(n){var r=n.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);return r&&r[0]?{h:r.splice(1),t:n.substr(r[0].length)}:null},"%n": +function(n){var r=this["@W"](n,"",/^\([a-z]{1,3}(?=[\),])/,")","");if(r&&r.t.match(/^($|[\s,;\)\]\}])/))return r;var t=n.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/);return t?{h:t[0],t:n.substr(t[0].length)}:null},ae:/^_\{(\([a-z]{1,3}\))\}/,"@K":/^(?:\\\{|\[|\()/,"@c":/^(?:\)|\]|\\\})/,", ":/^[,;]\s*/,",":/^[,;]/,".":/^[.]/,". ":/^([.\u22C5\u00B7\u2022])\s*/,"@i":/^\.\.\.(?=$|[^.])/,"* ":/^([*])\s*/,"@P": +function(n){return this["@W"](n,"^{","","","}")},"@L": +function(n){return this["@W"](n,"^","$","$","")},"^a":/^\^([0-9]+|[^\\_])/,"@O": +function(n){return this["@W"](n,"^",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"@N": +function(n){return this["@W"](n,"^",/^\\[a-zA-Z]+\{/,"}","")},"^\\x":/^\^(\\[a-zA-Z]+)\s*/,"%U":/^\^(-?\d+)/,"'":/^'/,"@Y": +function(n){return this["@W"](n,"_{","","","}")},"@Q": +function(n){return this["@W"](n,"_","$","$","")},_9:/^_([+\-]?[0-9]+|[^\\])/,"@T": +function(n){return this["@W"](n,"_",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"@S": +function(n){return this["@W"](n,"_",/^\\[a-zA-Z]+\{/,"}","")},"@R":/^_(\\[a-zA-Z]+)\s*/,"^_":/^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,"{}":/^\{\}/,"%B": +function(n){return this["@W"](n,"","{","}","")},"%A": +function(n){return this["@W"](n,"{","","","}")},"@~": +function(n){return this["@W"](n,"","$","$","")},"@a": +function(n){return this["@W"](n,"${","","","}$")},"@@": +function(n){return this["@W"](n,"$","","","$")},"%D":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]\/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"@f":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,ai:/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,"~Q":/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,"~c":/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"@r": +function(n){return this["@W"](n,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,"@m":/^[CMT](?=\[)/,"@o": +function(n){return this["@W"](n,"[","","","]")},al:/^(&|@q|\\hline)\s*/,"@p":/^(?:\\[,\ ;:])/,"@G": +function(n){return this["@W"](n,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"@F": +function(n){return this["@W"](n,"",/^\\[a-zA-Z]+\{/,"}","")},"@t":/^\\ca(?:\s+|(?![a-zA-Z]))/,"@E":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,"~R":/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,"~S":/^[\/~|]/,"@y": +function(n){return this["@W"](n,"\\frac{","","","}","{","","","}")},"@A": +function(n){return this["@W"](n,"\\overset{","","","}","{","","","}")},"@C": +function(n){return this["@W"](n,"\\underset{","","","}","{","","","}")},"@B": +function(n){return this["@W"](n,"\\underbrace{","","","}_","{","","","}")},"@w": +function(n){return this["@W"](n,"\\color{","","","}")},"@x": +function(n){return this["@W"](n,"\\color{","","","}","{","","","}")},"@v": +function(n){return this["@W"](n,"\\color","\\","",/^(?=\{)/,"{","","","}")},"@u": +function(n){return this["@W"](n,"\\ce{","","","}")},"~Z":/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"a~":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"%d":/^[IVX]+/,"@j":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,"~%": +function(n){var r;if(r=n.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{h:r[0],t:n.substr(r[0].length)};var t=this["@W"](n,"","$","$","");return t&&(r=t.h.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{h:r[0],t:n.substr(r[0].length)}:null},"~a": +function(n){return this["~%"](n)},"@b":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,"~E": +function(n){if(n.match(/^\([a-z]+\)$/))return null;var r=n.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return r?{h:r[0],t:n.substr(r[0].length)}:null},"%z":/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*\*\s*/,"@W": +function(n,r,t,o,e,a,u,i,s,l){var h=this["@V"](n,r);if(null===h)return null;if(n=n.substr(h.length),h=this["@V"](n,t),null===h)return null;var p=this["@U"](n,h.length,o||e);if(null===p)return null;var c=n.substring(0,o?p.y:p.z);if(a||u){var f=this["@W"](n.substr(p.y),a,u,i,s);if(null===f)return null;var m=[c,f.h];return l&&(m=m.join("")),{h:m,t:f.t}}return{h:c,t:n.substr(p.y)}}, +"@V": +function(n,r){if("string"==typeof r)return 0!==n.indexOf(r)?null:r;var t=n.match(r);return t?t[0]:null},"@U": +function(n,r,t){for(var o=0;r":{"0|1|2|3":{k:"r=",n:"r"},"a|as":{k:["~T","r="],n:"r"},"*":{k:["~T","r="],n:"r"}}, +"+":{o:{k:"~t",n:"d"},"d|D":{k:"d=",n:"d"},q:{k:"d=",n:"qd"},"qd|qD":{k:"d=",n:"qd"},dq:{k:["~T","d="],n:"d"},3:{k:["%j","~T","~Q"],n:"0"}}, +"~%":{"0|2":{k:"a=",n:"a"}}, +ai:{"0|1|2|a|as":{k:["%j","~T",{l:"~Q",m:"\\pm"}],n:"0"}}, +"~Q":{"0|1|2|a|as":{k:["%j","~T","~Q"],n:"0"}}, +"-$":{"o|q":{k:["~g","~T"],n:"qd"},d:{k:"d=",n:"d"},D:{k:["~T",{l:"~f",m:"-"}],n:"3"},q:{k:"d=",n:"qd"},qd:{k:"d=",n:"qd"},"qD|dq":{k:["~T",{l:"~f",m:"-"}],n:"3"}}, +"-9":{"3|o":{k:["~T",{l:"~J",m:"~I"}],n:"3"}}, +"@f":{o:{k:{l:"@e",m:!0},n:"2"},d:{k:{l:"@d",m:!0},n:"2"}}, +"-":{"0|1|2":{k:[{l:"~T",m:1},"%E",{l:"~f",m:"-"}],n:"3"},3:{k:{l:"~f",m:"-"}}, +a:{k:["~T",{l:"~J",m:"~I"}],n:"2"},as:{k:[{l:"~T",m:2},{l:"~f",m:"-"}],n:"3"},b:{k:"b="},o:{k:"@e",n:"2"},q:{k:"@e",n:"2"},"d|qd|dq":{k:"@d",n:"2"},"D|qD|p":{k:["~T",{l:"~f",m:"-"}],n:"3"}}, +"~a":{"1|3":{k:"a=",n:"a"}}, +"~M":{"0|1|2|3|a|as|b|p|bp|o":{k:"o=",n:"o"},"q|dq":{k:["~T","o="],n:"o"},"d|D|qd|qD":{k:"~N",n:"o"}}, +"~u":{o:{k:"q=",n:"q"},"d|D":{k:"q=",n:"dq"},q:{k:["~T","o="],n:"o"},a:{k:"o=",n:"o"}}, +"%l":{"b|p|bp":{}}, +"%m":{a:{n:"as"},0:{k:"%j"},"1|2":{k:"%k"},"r|rt|rd|%i|%h":{k:"~T",n:"0"},"*":{k:["~T","%k"],n:"1"}}, +al:{"1|2":{k:["~T",{l:"~K",m:"al"}]}, +"*":{k:["~T",{l:"~K",m:"al"}],n:"0"}}, +"@o":{"r|rt":{k:"%a",n:"rd"},"rd|%i":{k:"%f",n:"%h"}}, +"@i":{"o|d|D|dq|qd|qD":{k:["~T",{l:"~f",m:"..."}],n:"3"},"*":{k:[{l:"~T",m:1},{l:"~J",m:"~z"}],n:"1"}}, +". |* ":{"*":{k:["~T",{l:"~J",m:"~~"}],n:"1"}}, +"%n":{"*":{k:["~T","%p"],n:"1"}}, +"@K":{"a|as|o":{k:["o=","~T","%G"],n:"2"},"0|1|2|3":{k:["o=","~T","%G"],n:"2"},"*":{k:["~T","o=","~T","%G"],n:"2"}}, +"@c":{"0|1|2|3|b|p|bp|o":{k:["o=","%H"],n:"o"},"a|as|d|D|q|qd|qD|dq":{k:["~T","o=","%H"],n:"o"}}, +", ":{"*":{k:["~T","~q"],n:"0"}}, +"^_":{"*":{}}, +"@P|@L":{"0|1|2|as":{k:"b=",n:"b"},p:{k:"b=",n:"bp"},"3|o":{k:"~t",n:"D"},q:{k:"d=",n:"qD"},"d|D|qd|qD|dq":{k:["~T","d="],n:"D"}}, +"^a|@O|@N|^\\x|'":{"0|1|2|as":{k:"b=",n:"b"},p:{k:"b=",n:"bp"},"3|o":{k:"~t",n:"d"},q:{k:"d=",n:"qd"},"d|qd|D|qD":{k:"d="},dq:{k:["~T","d="],n:"d"}}, +ae:{"d|D|q|qd|qD|dq":{k:["~T","q="],n:"q"}}, +"@Y|@Q|_9|@T|@S|@R":{"0|1|2|as":{k:"p=",n:"p"},b:{k:"p=",n:"bp"},"3|o":{k:"q=",n:"q"},"d|D":{k:"q=",n:"dq"},"q|qd|qD|dq":{k:["~T","q="],n:"q"}}, +"%D":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{k:[{l:"~T",m:2},"~f"],n:"3"}}, +"#":{"0|1|2|3|a|as|o":{k:[{l:"~T",m:2},{l:"~f",m:"#"}],n:"3"}}, +"{}":{"*":{k:{l:"~T",m:1},n:"1"}}, +"%B":{"0|1|2|3|a|as|b|p|bp":{k:"o=",n:"o"},"o|d|D|q|qd|qD|dq":{k:["~T","o="],n:"o"}}, +"@~":{a:{k:"a="},"0|1|2|3|as|b|p|bp|o":{k:"o=",n:"o"},"as|o":{k:"o="},"q|d|D|qd|qD|dq":{k:["~T","o="],n:"o"}}, +"@r":{"*":{k:[{l:"~T",m:2},"~f"],n:"3"}}, +"@y":{"*":{k:[{l:"~T",m:1},"~H"],n:"3"}}, +"@A":{"*":{k:[{l:"~T",m:2},"~X"],n:"3"}}, +"@C":{"*":{k:[{l:"~T",m:2},"%y"],n:"3"}}, +"@B":{"*":{k:[{l:"~T",m:2},"%w"],n:"3"}}, +"@x|@v":{"*":{k:[{l:"~T",m:2},"~k"],n:"3"}}, +"@w":{"*":{k:[{l:"~T",m:2},"~m"]}}, +"@u":{"*":{k:[{l:"~T",m:2},"ce"],n:"3"}}, +"@p":{"*":{k:[{l:"~T",m:1},"~s"],n:"1"}}, +"@G|@F|@E":{"0|1|2|3|a|as|b|p|bp|o|c0":{k:["o=","~T"],n:"3"},"*":{k:["~T","o=","~T"],n:"3"}}, +"~S":{"*":{k:[{l:"~T",m:1},"~s"],n:"3"}}, +"~B":{a:{k:"@Z",n:"o",s:!0},as:{k:[{l:"~T"},"%k"],n:"1",s:!0},"r|rt|rd|%i|%h":{k:["~T"],n:"0",s:!0},"*":{k:["~T","~s"],n:"3"}}}),g:{"~N": +function(n,r){var o;if(n.d.match(/^[0-9]+$/)){var e=n.d;n.d=void 0,o=this["~T"](n),n.b=e}else o=this["~T"](n);return t.g["o="](n,r),o},"~t": +function(n,r){n.d=r,n["%I"]="kv"},"~g": +function(n,r){if(n.yB){var o=t.j(o,this["~T"](n));return o=t.j(o,t.g["~f"](n,r,"-"))}n.d=r},"@e": +function(n,r,o){var e=o||this["@X"](n,r),a=t.j(null,this["~T"](n,r));return a=e?t.j(a,{l:"~I"}):t.j(a,t.g["~f"](n,r,"-"))},"@d": +function(n,r,o){var e,a=o||this["@X"](n,r);if(a)e=t.j(e,this["~T"](n,r)),e=t.j(e,{l:"~I"});else{var u=t.h("~u",n.d||"");u&&""===u.t?(e=t.j(null,t.g["d="](n,r)),e=t.j(e,this["~T"](n))):(e=t.j(e,this["~T"](n,r)),e=t.j(e,t.g["~f"](n,r,"-")))}return e},"@X": +function(n,r){var o=t.h("~R",n.o||""),e=t.h("~O",n.o||""),a=t.h("~P",n.o||""),u=t.h("@%",n.o||""),i="-"===r&&(o&&""===o.t||e||a||u);return!i||n.a||n.b||n.p||n.d||n.q||o||!a||(n.o="$"+n.o+"$"),i},"@Z": +function(n,r){n.o=n.a,n.a=void 0},"%k": +function(n,r){n.sb=!0},"%j": +function(n,r){n.sb=!1},"%E": +function(n,r){n.yB=!0},"%F": +function(n,r){n.yB=!1},"%G": +function(n,r){n.pL++},"%H": +function(n,r){n.pL--},"%p": +function(n,r){return r=t.go(r,"o"),{l:"%p",p1:r}}, +"~q": +function(n,r){var t=r.replace(/\s*$/,""),o=t!==r;return o&&0===n.pL?{l:"~n",p1:t}:{l:"~o",p1:t}}, +"~T": +function(n,r,o){var e;n.r?("M"===n.rdt?n.rd=t.go(n.rd,"%r"):"T"===n.rdt?n.rd=[{l:"%s",p1:n.rd}]:n.rd=t.go(n.rd),"M"===n.rqt?n.rq=t.go(n.rq,"%r"):"T"===n.rqt?n.rq=[{l:"%s",p1:n.rq}]:n.rq=t.go(n.rq),e={l:"~b",r:n.r,rd:n.rd,rq:n.rq}):(e=[],n.a||n.b||n.p||n.o||n.q||n.d||o?(n.sb&&e.push({l:"~D"}),n.o||n.q||n.d||n.b||n.p||2===o?n.o||n.q||n.d||!n.b&&!n.p?n.o&&"kv"===n["%I"]&&t.h("a~",n.d||"")?n["%I"]="~Y":n.o&&"kv"===n["%I"]&&!n.q&&(n["%I"]=void 0):(n.o=n.a,n.d=n.b,n.q=n.p,n.a=n.b=n.p=void 0):(n.o=n.a,n.a=void 0),n.a=t.go(n.a,"a"),n.b=t.go(n.b,"bd"),n.p=t.go(n.p,"pq"),n.o=t.go(n.o,"o"),"~Y"===n["%I"]?n.d=t.go(n.d,"~Y"):n.d=t.go(n.d,"bd"),n.q=t.go(n.q,"pq"),e.push({l:"~h",a:n.a,b:n.b,p:n.p,o:n.o,q:n.q,d:n.d,"%I":n["%I"]})):e=null);for(var a in n)"pL"!==a&&"yB"!==a&&delete n[a];return e},"a%": +function(n,r){var o=["{"];return o=t.j(o,t.go(r,"~Y")),o=o.concat(["}"])},"~H": +function(n,r){return{l:"~G",p1:t.go(r[0]),p2:t.go(r[1])}}, +"~X": +function(n,r){return{l:"~W",p1:t.go(r[0]),p2:t.go(r[1])}}, +"%y": +function(n,r){return{l:"%x",p1:t.go(r[0]),p2:t.go(r[1])}}, +"%w": +function(n,r){return{l:"%v",p1:t.go(r[0]),p2:t.go(r[1])}}, +"~k": +function(n,r){return{l:"~j",F:r[0],G:t.go(r[1])}}, +"r=": +function(n,r){n.r=(n.r||"")+r},"%b": +function(n,r){n.rdt=(n.rdt||"")+r},"%a": +function(n,r){n.rd=(n.rd||"")+r},"%g": +function(n,r){n.rqt=(n.rqt||"")+r},"%f": +function(n,r){n.rq=(n.rq||"")+r},"~Q": +function(n,r,t){return{l:"~Q",A:t||r}}}}, +t.c.a={e:t.C({"~C":{"*":{}}, +"@j":{0:{k:"@k"}}, +"~A":{0:{n:"1",s:!0}}, +"@@":{"*":{k:"%q",n:"1"}}, +",":{"*":{k:{l:"~J",m:"~r"}}}, +"~B":{"*":{k:"~s"}}}),g:{}}, +t.c.o={e:t.C({"~C":{"*":{}}, +"@j":{0:{k:"@k"}}, +"~A":{0:{n:"1",s:!0}}, +"~M":{"*":{k:"rm"}}, +"@t":{"*":{k:{l:"~J",m:"~i"}}}, +"@G|@F|@E":{"*":{k:"~s"}}, +"@a|@@":{"*":{k:"%r"}}, +"%A":{"*":{k:"%C"}}, +"~B":{"*":{k:"~s"}}}),g:{}}, +t.c["%s"]={e:t.C({"~C":{"*":{k:"~T"}}, +"%B":{"*":{k:"%t"}}, +"@a|@@":{"*":{k:"%r"}}, +"@z":{"*":{k:["~T","rm"]}}, +"@p|@G|@F|@E":{"*":{k:["~T","~s"]}}, +"~A":{"*":{k:"%t"}}}),g:{"~T": +function(n,r){if(n.text){var t={l:"%s",p1:n.text};for(var o in n)delete n[o];return t}return null}}}, +t.c.pq={e:t.C({"~C":{"*":{}}, +"%n":{"*":{k:"%p"}}, +i$:{0:{n:"!f",s:!0}}, +"@b":{0:{k:"rm",n:"0"}}, +"~E":{0:{n:"f",s:!0}}, +"@j":{0:{k:"@k"}}, +"~A":{0:{n:"!f",s:!0}}, +"@a|@@":{"*":{k:"%r"}}, +"%A":{"*":{k:"%s"}}, +"~@":{f:{k:"%r"}}, +"~M":{"*":{k:"rm"}}, +"@h":{"*":{k:"@l"}}, +",":{"*":{k:{l:"~K",m:"~p"}}}, +"@x|@v":{"*":{k:"~k"}}, +"@w":{"*":{k:"~m"}}, +"@u":{"*":{k:"ce"}}, +"@p|@G|@F|@E":{"*":{k:"~s"}}, +"~B":{"*":{k:"~s"}}}),g:{"%p": +function(n,r){return r=t.go(r,"o"),{l:"%K",p1:r}}, +"~k": +function(n,r){return{l:"~j",F:r[0],G:t.go(r[1],"pq")}}}}, +t.c.bd={e:t.C({"~C":{"*":{}}, +x$:{0:{n:"!f",s:!0}}, +"~E":{0:{n:"f",s:!0}}, +"~A":{0:{n:"!f",s:!0}}, +"@g":{"*":{k:"@l"}}, +".":{"*":{k:{l:"~J",m:"~y"}}}, +"~@":{f:{k:"%r"}}, +x:{"*":{k:{l:"~J",m:"@n"}}}, +"~M":{"*":{k:"rm"}}, +"'":{"*":{k:{l:"~J",m:"%%"}}}, +"@a|@@":{"*":{k:"%r"}}, +"%A":{"*":{k:"%s"}}, +"@x|@v":{"*":{k:"~k"}}, +"@w":{"*":{k:"~m"}}, +"@u":{"*":{k:"ce"}}, +"@p|@G|@F|@E":{"*":{k:"~s"}}, +"~B":{"*":{k:"~s"}}}),g:{"~k": +function(n,r){return{l:"~j",F:r[0],G:t.go(r[1],"bd")}}}}, +t.c["~Y"]={e:t.C({"~C":{"*":{}}, +"%d":{"*":{k:"%e"}}, +"@a|@@":{"*":{k:"%r"}}, +"~A":{"*":{k:"~s"}}}),g:{"%e": +function(n,r){return{l:"%d",p1:r}}}}, +t.c["%r"]={e:t.C({"~C":{"*":{k:"~T"}}, +"@u":{"*":{k:["~T","ce"]}}, +"%B|@p|@G|@F|@E":{"*":{k:"o="}}, +"~A":{"*":{k:"o="}}}),g:{"~T": +function(n,r){if(n.o){var t={l:"%r",p1:n.o};for(var o in n)delete n[o];return t}return null}}}, +t.c["%q"]={e:t.C({"~C":{"*":{k:"~T"}}, +"@u":{"*":{k:["~T","ce"]}}, +"%B|@p|@G|@F|@E":{"*":{k:"o="}}, +"-|+":{"*":{k:"%u"}}, +"~A":{"*":{k:"o="}}}),g:{"%u": +function(n,r){n.o=(n.o||"")+"{"+r+"}"},"~T": +function(n,r){if(n.o){var t={l:"%r",p1:n.o};for(var o in n)delete n[o];return t}return null}}}, +t.c["@l"]={e:t.C({"~C":{"*":{}}, +",":{"*":{k:"~q"}}, +"~A":{"*":{k:"~s"}}}),g:{"~q": +function(n,r){return{l:"~r"}}}}, +t.c.pu={e:t.C({"~C":{"*":{k:"~T"}}, +"@K|@c":{"0|a":{k:"~s"}}, +aj:{0:{k:"ak",n:"a"}}, +"%T":{0:{k:"%Z",n:"a"}}, +"%m":{"0|a":{}}, +ai:{"0|a":{k:{l:"~Q",m:"\\pm"},n:"0"}}, +"~Q":{"0|a":{k:"~s",n:"0"}}, +"//":{d:{k:"o=",n:"/"}}, +"/":{d:{k:"o=",n:"/"}}, +"%B|~A":{"0|d":{k:"d=",n:"d"},a:{k:["%m","d="],n:"d"},"/|q":{k:"q=",n:"q"}}}),g:{"%Z": +function(n,r){var o=[];return"+-"===r[0]||"+/-"===r[0]?o.push("\\pm "):r[0]&&o.push(r[0]),r[1]&&(o=t.j(o,t.go(r[1],"%X")),r[2]&&(r[2].match(/[,.]/)?o=t.j(o,t.go(r[2],"%X")):o.push(r[2])),r[3]=r[4]||r[3],r[3]&&(r[3]=r[3].trim(),"e"===r[3]||"*"===r[3].substr(0,1)?o.push({l:"%N"}):o.push({l:"%P"}))),r[3]&&o.push("10^{"+r[5]+"}"),o},ak: +function(n,r){var o=[];return"+-"===r[0]||"+/-"===r[0]?o.push("\\pm "):r[0]&&o.push(r[0]),o=t.j(o,t.go(r[1],"%X")),o.push("^{"+r[2]+"}"),o},"~Q": +function(n,r,t){return{l:"~Q",A:t||r}}, +"%m": +function(n,r){return{l:"%Q"}}, +"~T": +function(n,r){var o,e=t.h("%A",n.d||"");e&&""===e.t&&(n.d=e.h);var a=t.h("%A",n.q||"");a&&""===a.t&&(n.q=a.h),n.d&&(n.d=n.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),n.d=n.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),n.q?(n.d=t.go(n.d,"pu"),n.q=n.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),n.q=n.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F"),n.q=t.go(n.q,"pu"),"//"===n.o?o={l:"%S",p1:n.d,p2:n.q}:(o=n.d,o=n.d.length>1||n.q.length>1?t.j(o,{l:"%V"}):t.j(o,{l:"/"}),o=t.j(o,n.q))):o=t.go(n.d,"%R");for(var u in n)delete n[u];return o}}}, +t.c["%R"]={e:t.C({"~C":{"*":{k:"~T"}}, +"*":{"*":{k:["~T","%N"],n:"0"}}, +"@E":{"*":{k:"%c"},n:"1"},"%m":{"*":{k:["~T","%m"],n:"0"}}, +"@P|%U":{1:{k:"%U"}}, +"@h":{0:{k:"%c",n:"0"},1:{k:"%U",n:"0"}}, +"%B|~A":{"*":{k:"%c",n:"1"}}}),g:{"%N": +function(n,r){return{l:"%O"}}, +"%U": +function(n,r){n.rm+="^{"+r+"}"},"%m": +function(n,r){return{l:"ah"}}, +"~T": +function(n,r){var o;if(n.rm){var e=t.h("%A",n.rm||"");o=e&&""===e.t?t.go(e.h,"pu"):{l:"rm",p1:n.rm}}for(var a in n)delete n[a];return o}}}, +t.c["%X"]={e:t.C({"~C":{0:{k:"~U"},o:{k:"~V"}}, +",":{0:{k:["~U","~q"],n:"o"}}, +".":{0:{k:["~U","~s"],n:"o"}}, +"~A":{"*":{k:"%t"}}}),g:{"~q": +function(n,r){return{l:"~r"}}, +"~U": +function(n,r){var t=[];if(n.text.length>4){var o=n.text.length%3;0===o&&(o=3);for(var e=n.text.length-3;e>0;e-=3)t.push(n.text.substr(e,3)),t.push({l:"%W"});t.push(n.text.substr(0,o)),t.reverse()}else t.push(n.text);for(var a in n)delete n[a];return t},"~V": +function(n,r){var t=[];if(n.text.length>4){for(var o=n.text.length-3,e=0;e"===n.r||"<=>>"===n.r||"<<=>"===n.r||"<-->"===n.r?(r="\\long"+r,n.rd&&(r="\\overset{"+n.rd+"}{"+r+"}"),n.rq&&(r="\\underset{\\lower7mu{"+n.rq+"}}{"+r+"}"),r=" {}\\mathrel{"+r+"}{} "):(n.rq&&(r+="[{"+n.rq+"}]"),r+="{"+n.rd+"}",r=" {}\\mathrel{\\x"+r+"}{} "):r=" {}\\mathrel{\\long"+r+"}{} ",r},"~Q": +function(n){return o.K[n.A]}}, +J:{"->":"rightarrow","\u2192":"rightarrow","\u27f6":"rightarrow","<-":"leftarrow","<->":"leftrightarrow","<-->":"leftrightarrows","<=>":"rightleftharpoons","\u21cc":"rightleftharpoons","<=>>":"Rightleftharpoons","<<=>":"Leftrightharpoons"},I:{"-":"{-}",1:"{-}","=":"{=}",2:"{=}","#":"{\\equiv}",3:"{\\equiv}","~":"{\\tripledash}","~-":"{\\rlap{\\lower.1em{-}}\\raise.1em{\\tripledash}}","~=":"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}","~--":"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}","-~-":"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{-}}\\tripledash}","...":"{{\\cdot}{\\cdot}{\\cdot}}","....":"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}","->":"{\\rightarrow}","<-":"{\\leftarrow}","<":"{<}",">":"{>}"},L:{"%m":" ","~D":"~","%Q":"~",ah:"\\mkern3mu ","%W":"\\mkern2mu ","~r":"{,}","~n":"{{0}}\\mkern6mu ","~o":"{{0}}\\mkern3mu ","~p":"{{0}}\\mkern1mu ","~I":"\\text{-}","~~":"\\,{\\cdot}\\,","~y":"\\mkern1mu \\bullet\\mkern1mu ","@n":"{\\times}","%%":"\\prime ","%N":"\\cdot ","%O":"\\mkern1mu{\\cdot}\\mkern1mu ","%P":"\\times ","~i":"{\\sim}","^":"uparrow",v:"downarrow","~z":"\\ldots ","/":"/","%V":"\\,/\\,",al:"{0} "},K:{"+":" {}+{} ","-":" {}-{} ","=":" {}={} ","<":" {}<{} ",">":" {}>{} ","<<":" {}\\ll{} ",">>":" {}\\gg{} ","\\pm":" {}\\pm{} ","\\approx":" {}\\approx{} ","$\\approx$":" {}\\approx{} ",v:" \\downarrow{} ","(v)":" \\downarrow{} ","^":" \\uparrow{} ","(^)":" \\uparrow{} "},go: +function(n,r){if(!n)return n;for(var t="",o=!1,e=0;e0){return[h,g]}else{return h}}}this.i++}b.Error(["MissingReplacementString","Missing replacement string for definition of %1",f])},MacroWithTemplate:function(d,g,h,f){if(h){var c=[];this.GetNext();if(f[0]&&!this.MatchParam(f[0])){b.Error(["MismatchUseDef","Use of %1 doesn't match its definition",d])}for(var e=0;eb.config.MAXMACROS){b.Error(["MaxMacroSub1","MathJax maximum macro substitution count exceeded; is there a recursive macro call?"])}},BeginEnv:function(g,k,c,j,h){if(j){var e=[];if(h!=null){var d=this.GetBrackets("\\begin{"+name+"}");e.push(d==null?h:d)}for(var f=e.length;f1){var n=(q.h+q.d)/2,j=h.TeX.x_height/2;p.parentNode.style.verticalAlign=h.Em(q.d+(j-n));q.h=j+n;q.d=n-j}p.bbox={h:q.h,d:q.d,w:k,lw:0,rw:k};return p}})});b.Register.StartupHook("SVG Jax Config",function(){b.Config({SVG:{styles:{".MathJax_SVG .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("SVG Jax Ready",function(){var g=MathJax.ElementJax.mml;var f=g.math.prototype.toSVG,h=g.merror.prototype.toSVG;g.math.Augment({toSVG:function(i,j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){i=k.data[0].toSVG(i)}else{i=f.apply(this,arguments)}return i}});g.merror.Augment({toSVG:function(n){if(!this.isError||this.Parent().type!=="math"){return h.apply(this,arguments)}n=e.addElement(n,"span",{className:"noError",isMathJax:true});if(this.multiLine){n.style.display="inline-block"}var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,j=o.length;l1){var k=n.offsetHeight/2;n.style.verticalAlign=(-k+(k/j))+"px"}return n}})});b.Register.StartupHook("NativeMML Jax Ready",function(){var h=MathJax.ElementJax.mml;var g=MathJax.Extension["TeX/noErrors"].config;var f=h.math.prototype.toNativeMML,i=h.merror.prototype.toNativeMML;h.math.Augment({toNativeMML:function(j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){j=k.data[0].toNativeMML(j)}else{j=f.apply(this,arguments)}return j}});h.merror.Augment({toNativeMML:function(n){if(!this.isError){return i.apply(this,arguments)}n=n.appendChild(document.createElement("span"));var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,k=o.length;l1){n.style.verticalAlign="middle"}}for(var p in g.style){if(g.style.hasOwnProperty(p)){var j=p.replace(/-./g,function(m){return m.charAt(1).toUpperCase()});n.style[j]=g.style[p]}}return n}})});b.Register.StartupHook("PreviewHTML Jax Config",function(){b.Config({PreviewHTML:{styles:{".MathJax_PHTML .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("PreviewHTML Jax Ready",function(){var f=MathJax.ElementJax.mml;var h=MathJax.HTML;var g=f.merror.prototype.toPreviewHTML;f.merror.Augment({toPreviewHTML:function(l){if(!this.isError){return g.apply(this,arguments)}l=this.PHTMLcreateSpan(l);l.className="noError";if(this.multiLine){l.style.display="inline-block"}var n=this.data[0].data[0].data.join("").split(/\n/);for(var k=0,j=n.length;k1){var l=1.2*j/2;o.h=l+0.25;o.d=l-0.25;n.style.verticalAlign=g.Em(0.45-l)}else{o.h=1;o.d=0.2+2/g.em}return n}})});b.Startup.signal.Post("TeX noErrors Ready")})(MathJax.Hub,MathJax.HTML);MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noErrors.js"); diff --git a/scripts/extensions/TeX/noUndefined.js b/scripts/extensions/TeX/noUndefined.js new file mode 100644 index 000000000..b0fb0dfe7 --- /dev/null +++ b/scripts/extensions/TeX/noUndefined.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/noUndefined.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/noUndefined"]={version:"2.7.5",config:MathJax.Hub.CombineConfig("TeX.noUndefined",{disabled:false,attributes:{mathcolor:"red"}})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var b=MathJax.Extension["TeX/noUndefined"].config;var a=MathJax.ElementJax.mml;var c=MathJax.InputJax.TeX.Parse.prototype.csUndefined;MathJax.InputJax.TeX.Parse.Augment({csUndefined:function(d){if(b.disabled){return c.apply(this,arguments)}MathJax.Hub.signal.Post(["TeX Jax - undefined control sequence",d]);this.Push(a.mtext(d).With(b.attributes))}});MathJax.Hub.Startup.signal.Post("TeX noUndefined Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noUndefined.js"); diff --git a/scripts/extensions/TeX/unicode.js b/scripts/extensions/TeX/unicode.js new file mode 100644 index 000000000..4d77d451d --- /dev/null +++ b/scripts/extensions/TeX/unicode.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/unicode.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/unicode"]={version:"2.7.5",unicode:{},config:MathJax.Hub.CombineConfig("TeX.unicode",{fonts:"STIXGeneral,'Arial Unicode MS'"})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var c=MathJax.InputJax.TeX;var a=MathJax.ElementJax.mml;var b=MathJax.Extension["TeX/unicode"].unicode;c.Definitions.Add({macros:{unicode:"Unicode"}},null,true);c.Parse.Augment({Unicode:function(e){var i=this.GetBrackets(e),d;if(i){if(i.replace(/ /g,"").match(/^(\d+(\.\d*)?|\.\d+),(\d+(\.\d*)?|\.\d+)$/)){i=i.replace(/ /g,"").split(/,/);d=this.GetBrackets(e)}else{d=i;i=null}}var j=this.trimSpaces(this.GetArgument(e)).replace(/^0x/,"x");if(!j.match(/^(x[0-9A-Fa-f]+|[0-9]+)$/)){c.Error(["BadUnicode","Argument to \\unicode must be a number"])}var h=parseInt(j.match(/^x/)?"0"+j:j);if(!b[h]){b[h]=[800,200,d,h]}else{if(!d){d=b[h][2]}}if(i){b[h][0]=Math.floor(i[0]*1000);b[h][1]=Math.floor(i[1]*1000)}var f=this.stack.env.font,g={};if(d){b[h][2]=g.fontfamily=d.replace(/"/g,"'");if(f){if(f.match(/bold/)){g.fontweight="bold"}if(f.match(/italic|-mathit/)){g.fontstyle="italic"}}}else{if(f){g.mathvariant=f}}g.unicode=[].concat(b[h]);this.Push(a.mtext(a.entity("#"+j)).With(g))}});MathJax.Hub.Startup.signal.Post("TeX unicode Ready")});MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var a=MathJax.ElementJax.mml;var c=MathJax.Extension["TeX/unicode"].config.fonts;var b=a.mbase.prototype.HTMLgetVariant;a.mbase.Augment({HTMLgetVariant:function(){var d=b.apply(this,arguments);if(d.unicode){delete d.unicode;delete d.FONTS}if(!this.unicode){return d}d.unicode=true;if(!d.defaultFont){d=MathJax.Hub.Insert({},d);d.defaultFont={family:c}}var e=this.unicode[2];if(e){e+=","+c}else{e=c}d.defaultFont[this.unicode[3]]=[this.unicode[0],this.unicode[1],500,0,500,{isUnknown:true,isUnicode:true,font:e}];return d}})});MathJax.Hub.Register.StartupHook("SVG Jax Ready",function(){var a=MathJax.ElementJax.mml;var c=MathJax.Extension["TeX/unicode"].config.fonts;var b=a.mbase.prototype.SVGgetVariant;a.mbase.Augment({SVGgetVariant:function(){var d=b.call(this);if(d.unicode){delete d.unicode;delete d.FONTS}if(!this.unicode){return d}d.unicode=true;if(!d.forceFamily){d=MathJax.Hub.Insert({},d)}d.defaultFamily=c;d.noRemap=true;d.h=this.unicode[0];d.d=this.unicode[1];return d}})});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/unicode.js"); diff --git a/scripts/extensions/TeX/verb.js b/scripts/extensions/TeX/verb.js new file mode 100644 index 000000000..9c2939fd1 --- /dev/null +++ b/scripts/extensions/TeX/verb.js @@ -0,0 +1,19 @@ +/* + * /MathJax/extensions/TeX/verb.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MathJax.Extension["TeX/verb"]={version:"2.7.5"};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var a=MathJax.ElementJax.mml;var c=MathJax.InputJax.TeX;var b=c.Definitions;b.Add({macros:{verb:"Verb"}},null,true);c.Parse.Augment({Verb:function(d){var g=this.GetNext();var f=++this.i;if(g==""){c.Error(["MissingArgFor","Missing argument for %1",d])}while(this.i=0;f--){var g=this.dependents[f];g.Disable&&g.Disable(!1,e)}d&&a.Queue(["Rerender",a])},Dependent:function(a){this.dependents.push(a)},Startup:function(){var b=MathJax.Extension.collapsible;b&&b.Dependent(this),a.postInputHooks.Add(["Filter",e],150),a.Queue(function(){return e.CollapseWideMath()}),window.addEventListener?window.addEventListener("resize",e.resizeHandler,!1):window.attachEvent?window.attachEvent("onresize",e.resizeHandler):window.onresize=e.resizeHandler},Filter:function(a,b,c){a.enriched&&!this.config.disabled&&("block"===a.root.Get("display")||c.parentNode.childNodes.length<=3)&&(a.root.SRE={action:this.Actions(a.root)})},Actions:function(a){var b=[];return this.getActions(a,0,b),this.sortActions(b)},getActions:function(a,b,c){if(!a.isToken&&a.data){b++;for(var d=0,e=a.data.length;db?1:0},CollapseWideMath:function(b){if(!this.config.disabled){this.GetContainerWidths(b);var c=a.getAllJax(b),d={collapse:[],jax:c,m:c.length,i:0,changed:!1};return this.collapseState(d)}},collapseState:function(b){for(var c=b.collapse;b.ie.M)){var f=this.getActionWidths(d,b);if(f)return f;this.collapseActions(e,b),b.changed&&c.push(d.SourceElement())}b.i++}if(0!==c.length)return 1===c.length&&(c=c[0]),a.Rerender(c)},collapseActions:function(a,b){for(var c=a.width,d=c,e=1e6,f=a.action.length-1;f>=0;f--){var g=a.action[f],h=g.selection;c>a.cwidth?(g.selection=1,d=g.SREwidth,e=c):g.selection=2,c=g.SREwidth,a.DOMupdate?document.getElementById(g.id).setAttribute("selection",g.selection):g.selection!==h&&(b.changed=!0)}a.m=d,a.M=e},getActionWidths:function(a,b){if(!a.root.SRE.actionWidths){MathJax.OutputJax[a.outputJax].getMetrics(a);try{this.computeActionWidths(a)}catch(a){if(!a.restart)throw a;return MathJax.Callback.After(["collapseState",this,b],a.restart)}b.changed=!0}return null},computeActionWidths:function(a){var b,c=a.root.SRE,d=c.action,e={};for(c.width=a.sreGetRootWidth(e),b=d.length-1;b>=0;b--)d[b].selection=2;for(b=d.length-1;b>=0;b--){var f=d[b];null==f.SREwidth&&(f.selection=1,f.SREwidth=a.sreGetActionWidth(e,f))}c.actionWidths=!0},GetContainerWidths:function(b){var c,d,e,f,g,h=a.getAllJax(b),i=MathJax.HTML.Element("span",{style:{display:"block"}}),j=[];for(c=0,d=h.length;c=0;f--){var g=this.dependents[f];g.Disable&&g.Disable(!1,e)}b&&a.Queue(["Reprocess",a])},Dependent:function(a){this.dependents.push(a)},Startup:function(){b=MathJax.ElementJax.mml;var c=MathJax.Extension["semantic-enrich"];c&&c.Dependent(this),a.postInputHooks.Add(["Filter",g],100)},Filter:function(a,b,c){a.enriched&&!this.config.disabled&&(a.root=a.root.Collapse(),a.root.inputID=c.id)},Marker:function(a){return b.mtext("\u25c2"+a+"\u25b8").With({mathcolor:"blue",attr:{},attrNames:[]})},MakeAction:function(a,c){var d=b.maction(a).With({id:this.getActionID(),actiontype:"toggle",complexity:a.getComplexity(),collapsible:!0,attrNames:["id","actiontype","selection",e],attr:{},selection:2});if(d.attr[e]=d.complexity,"math"===c.type){var f=b.mrow().With({complexity:c.complexity,attrNames:[],attr:{}});f.Append.apply(f,c.data);for(var g,h=c.attrNames.length-1;g=c.attrNames[h];h--)"data-semantic-"===g.substr(0,14)&&(f.attr[g]=c.attr[g],f.attrNames.push(g),delete c.attr[g],c.attrNames.splice(h,1));f.complexity=c.complexity,d.Append(f),c.data=[],c.Append(d),c.complexity=d.complexity,d=c}else d.Append(c);return d},actionID:1,getActionID:function(){return"MJX-Collapse-"+this.actionID++},Collapse:function(a){a.getComplexity();var b=(a.attr||{})["data-semantic-type"];if(b)if(this["Collapse_"+b])a=this["Collapse_"+b](a);else if(this.COLLAPSE[b]&&this.MARKER[b]){var c=a.attr["data-semantic-role"],d=this.COLLAPSE[b];if("number"!=typeof d&&(d=d[c]||d.value),a.complexity>d){var e=this.MARKER[b];"string"!=typeof e&&(e=e[c]||e.value),a=this.MakeAction(this.Marker(e),a)}}return a},UncollapseChild:function(a,b,c){if(null==c&&(c=1),this.SplitAttribute(a,"children").length===c){var d=1===a.data.length&&a.data[0].inferred?a.data[0]:a;if(d&&d.data[b]&&d.data[b].collapsible)return d.SetData(b,d.data[b].data[1]),a.complexity=d.complexity=null,a.getComplexity(),1}return 0},FindChildText:function(a,b){var c=this.FindChild(a,b);return c?(c.CoreMO()||c).data.join(""):"?"},FindChild:function(a,b){if(a){if(a.attr&&a.attr["data-semantic-id"]===b)return a;if(!a.isToken)for(var c=0,d=a.data.length;cthis.COLLAPSE.fenced&&"leftright"===a.attr["data-semantic-role"]){var b=a.data[0].data.join("")+a.data[a.data.length-1].data.join("");a=this.MakeAction(this.Marker(b),a)}return a},Collapse_appl:function(a){if(this.UncollapseChild(a,2,2)){var b=this.MARKER.appl;b=b[a.attr["data-semantic-role"]]||b.value,a=this.MakeAction(this.Marker(b),a)}return a},Collapse_sqrt:function(a){return this.UncollapseChild(a,0),a.complexity>this.COLLAPSE.sqrt&&(a=this.MakeAction(this.Marker(this.MARKER.sqrt),a)),a},Collapse_root:function(a){return this.UncollapseChild(a,0),a.complexity>this.COLLAPSE.sqrt&&(a=this.MakeAction(this.Marker(this.MARKER.sqrt),a)),a},Collapse_enclose:function(a){if(1===this.SplitAttribute(a,"children").length){var b=1===a.data.length&&a.data[0].inferred?a.data[0]:a;if(b.data[0]&&b.data[0].collapsible){var c=b.data[0];b.SetData(0,c.data[1]),c.SetData(1,a),a=c}}return a},Collapse_bigop:function(a){if(a.complexity>this.COLLAPSE.bigop||"mo"!==a.data[0].type){var b=this.SplitAttribute(a,"content").pop(),c=g.FindChildText(a,b);a=this.MakeAction(this.Marker(c),a)}return a},Collapse_integral:function(a){if(a.complexity>this.COLLAPSE.integral||"mo"!==a.data[0].type){var b=this.SplitAttribute(a,"content")[0],c=g.FindChildText(a,b);a=this.MakeAction(this.Marker(c),a)}return a},Collapse_relseq:function(a){if(a.complexity>this.COLLAPSE.relseq){var b=this.SplitAttribute(a,"content"),c=g.FindChildText(a,b[0]);b.length>1&&(c+="\u22ef"),a=this.MakeAction(this.Marker(c),a)}return a},Collapse_multirel:function(a){if(a.complexity>this.COLLAPSE.multirel){var b=this.SplitAttribute(a,"content"),c=g.FindChildText(a,b[0])+"\u22ef";a=this.MakeAction(this.Marker(c),a)}return a},Collapse_superscript:function(a){return this.UncollapseChild(a,0,2),a.complexity>this.COLLAPSE.superscript&&(a=this.MakeAction(this.Marker(this.MARKER.superscript),a)),a},Collapse_subscript:function(a){return this.UncollapseChild(a,0,2),a.complexity>this.COLLAPSE.subscript&&(a=this.MakeAction(this.Marker(this.MARKER.subscript),a)),a},Collapse_subsup:function(a){return this.UncollapseChild(a,0,3),a.complexity>this.COLLAPSE.subsup&&(a=this.MakeAction(this.Marker(this.MARKER.subsup),a)),a}};a.Register.StartupHook("End Extensions",function(){null==c.collapsible?c.collapsible=!g.config.disabled:g.config.disabled=!c.collapsible,a.Register.StartupHook("MathMenu Ready",function(){d=MathJax.Menu.cookie;var a,b=function(a){g[c.collapsible?"Enable":"Disable"](!0,!0),MathJax.Menu.saveCookie()},e=MathJax.Menu.ITEM,f=MathJax.Menu.menu,h=e.CHECKBOX(["CollapsibleMath","Collapsible Math"],"collapsible",{action:b}),i=(f.FindId("Accessibility")||{}).submenu;i?(a=i.IndexOfId("CollapsibleMath"),null!==a?i.items[a]=h:i.items.push(e.RULE(),h)):(a=f.IndexOfId("About"),f.items.splice(a,0,h,e.RULE()))},15)},15)}(MathJax.Hub),MathJax.Ajax.Require("[a11y]/semantic-enrich.js"),MathJax.Hub.Register.StartupHook("Semantic Enrich Ready",function(){var a=MathJax.ElementJax.mml,b=MathJax.Extension.collapsible,c=b.COMPLEXITY,d=b.COMPLEXATTR;b.Startup(),a.mbase.Augment({Collapse:function(){return b.Collapse(this)},getComplexity:function(){if(null==this.complexity){var a=0;if(this.isToken)a=c.TEXT*this.data.join("").length+c.TOKEN;else{for(var b=0,e=this.data.length;b1&&(a+=e*c.CHILD)}!this.attrNames||"complexity"in this||this.attrNames.push(d),this.attr&&(this.attr[d]=a),this.complexity=a}return this.complexity},reportComplexity:function(){!this.attr||!this.attrNames||d in this.attr||(this.attrNames.push(d),this.attr[d]=this.complexity)}}),a.mfrac.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity*=c.SCRIPT,this.complexity+=c.FRACTION,this.attr[d]=this.complexity),this.complexity}}),a.msqrt.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity+=c.SQRT,this.attr[d]=this.complexity),this.complexity}}),a.mroot.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity-=(1-c.SCRIPT)*this.data[1].getComplexity(),this.complexity+=c.SQRT,this.attr[d]=this.complexity),this.complexity}}),a.msubsup.Augment({getComplexity:function(){if(null==this.complexity){var a=0;this.data[this.sub]&&(a=this.data[this.sub].getComplexity()+c.CHILD),this.data[this.sup]&&(a=Math.max(this.data[this.sup].getComplexity(),a)),a*=c.SCRIPT,this.data[this.sub]&&(a+=c.CHILD),this.data[this.sup]&&(a+=c.CHILD),this.data[this.base]&&(a+=this.data[this.base].getComplexity()+c.CHILD),this.complexity=a+c.SUBSUP,this.reportComplexity()}return this.complexity}}),a.munderover.Augment({getComplexity:function(){if(null==this.complexity){var a=0;this.data[this.sub]&&(a=this.data[this.sub].getComplexity()+c.CHILD),this.data[this.sup]&&(a=Math.max(this.data[this.sup].getComplexity(),a)),a*=c.SCRIPT,this.data[this.base]&&(a=Math.max(this.data[this.base].getComplexity(),a)),this.data[this.sub]&&(a+=c.CHILD),this.data[this.sup]&&(a+=c.CHILD),this.data[this.base]&&(a+=c.CHILD),this.complexity=a+c.UNDEROVER,this.reportComplexity()}return this.complexity}}),a.mphantom.Augment({getComplexity:function(){return this.complexity=c.PHANTOM,this.reportComplexity(),this.complexity}}),a.ms.Augment({getComplexity:function(){return this.SUPER(arguments).getComplexity.call(this),this.complexity+=this.Get("lquote").length*c.TEXT,this.complexity+=this.Get("rquote").length*c.TEXT,this.attr[d]=this.complexity,this.complexity}}),a.menclose.Augment({getComplexity:function(){return null==this.complexity&&(this.SUPER(arguments).getComplexity.call(this),this.complexity+=c.ACTION,this.attr[d]=this.complexity),this.complexity}}),a.maction.Augment({getComplexity:function(){return this.complexity=(this.collapsible?this.data[0]:this.selected()).getComplexity(),this.reportComplexity(),this.complexity}}),a.semantics.Augment({getComplexity:function(){return null==this.complexity&&(this.complexity=this.data[0]?this.data[0].getComplexity():0,this.reportComplexity()),this.complexity}}),a["annotation-xml"].Augment({getComplexity:function(){return this.complexity=c.XML,this.reportComplexity(),this.complexity}}),a.annotation.Augment({getComplexity:function(){return this.complexity=c.XML,this.reportComplexity(),this.complexity}}),a.mglyph.Augment({getComplexity:function(){return this.complexity=c.GLYPH,this.reportComplexity(),this.complexity}}),MathJax.Hub.Startup.signal.Post("Collapsible Ready"),MathJax.Ajax.loadComplete("[a11y]/collapsible.js")}); \ No newline at end of file diff --git a/scripts/extensions/a11y/explorer.js b/scripts/extensions/a11y/explorer.js new file mode 100644 index 000000000..5478cce7a --- /dev/null +++ b/scripts/extensions/a11y/explorer.js @@ -0,0 +1 @@ +MathJax.Hub.Register.StartupHook("Sre Ready",function(){var a,b,c=MathJax.Hub.config.menuSettings,d={};MathJax.Hub.Register.StartupHook("MathEvents Ready",function(){a=MathJax.Extension.MathEvents.Event.False,b=MathJax.Extension.MathEvents.Event.KEY});var e=MathJax.Extension.explorer={version:"1.5.0",dependents:[],defaults:{walker:"table",highlight:"none",background:"blue",foreground:"black",speech:!0,generation:"lazy",subtitle:!1,ruleset:"mathspeak-default"},eagerComplexity:80,prefix:"Assistive-",hook:null,locHook:null,oldrules:null,addMenuOption:function(a,b){c[e.prefix+a]=b},addDefaults:function(){for(var a,b=MathJax.Hub.CombineConfig("explorer",e.defaults),d=Object.keys(b),f=0;a=d[f];f++)void 0===c[e.prefix+a]&&e.addMenuOption(a,b[a]);e.setSpeechOption(),h.Reset()},setOption:function(a,b){c[e.prefix+a]!==b&&(e.addMenuOption(a,b),h.Reset())},getOption:function(a){return c[e.prefix+a]},speechOption:function(a){e.oldrules!==a.value&&(e.setSpeechOption(),h.Regenerate())},setSpeechOption:function(){var a=c[e.prefix+"ruleset"],b=a.split("-");sre.System.getInstance().setupEngine({locale:MathJax.Localization.locale,domain:e.Domain(b[0]),style:b[1],rules:e.RuleSet(b[0])}),e.oldrules=a},Domain:function(a){switch(a){case"chromevox":return"default";case"mathspeak":default:return"mathspeak"}},RuleSet:function(a){switch(a){case"chromevox":return["AbstractionRules","SemanticTreeRules"];case"mathspeak":default:return["AbstractionRules","AbstractionSpanish","MathspeakRules","MathspeakSpanish"]}},hook:null,locHook:null,Enable:function(a,b){c.explorer=!0,b&&(d.explorer=!0),MathJax.Extension.collapsible.Enable(!1,b),MathJax.Extension.AssistiveMML&&(MathJax.Extension.AssistiveMML.config.disabled=!0,c.assistiveMML=!1,b&&(d.assistiveMML=!1)),this.DisableMenus(!1),this.hook||(this.hook=MathJax.Hub.Register.MessageHook("New Math",["Register",this.Explorer])),this.locHook||(this.locHook=MathJax.Hub.Register.MessageHook("Locale Reset",["RemoveSpeech",this.Explorer])),a&&MathJax.Hub.Queue(["Reprocess",MathJax.Hub])},Disable:function(a,b){c.explorer=!1,b&&(d.explorer=!1),this.DisableMenus(!0),this.hook&&(MathJax.Hub.UnRegister.MessageHook(this.hook),this.hook=null);for(var e=this.dependents.length-1;e>=0;e--){var f=this.dependents[e];f.Disable&&f.Disable(!1,b)}},DisableMenus:function(a){if(MathJax.Menu){var b=MathJax.Menu.menu.FindId("Accessibility","Explorer");if(b){b=b.submenu;for(var d,f=b.items,g=2;d=f[g];g++)d.disabled=a;a||!b.FindId("SpeechOutput")||c[e.prefix+"speech"]||(b.FindId("Subtitles").disabled=!0)}}},Dependent:function(a){this.dependents.push(a)}},f=MathJax.Object.Subclass({div:null,inner:null,Init:function(){this.div=f.Create("assertive"),this.inner=MathJax.HTML.addElement(this.div,"div")},Add:function(){f.added||(document.body.appendChild(this.div),f.added=!0)},Show:function(a,b){this.div.classList.add("MJX_LiveRegion_Show");var c=a.getBoundingClientRect(),d=c.bottom+10+window.pageYOffset,e=c.left+window.pageXOffset;this.div.style.top=d+"px",this.div.style.left=e+"px";var f=b.colorString();this.inner.style.backgroundColor=f.background,this.inner.style.color=f.foreground},Hide:function(a){this.div.classList.remove("MJX_LiveRegion_Show")},Clear:function(){this.Update(""),this.inner.style.top="",this.inner.style.backgroundColor=""},Update:function(a){e.getOption("speech")&&f.Update(this.inner,a)}},{ANNOUNCE:"Navigatable Math in page. Explore with shift space and arrow keys. Expand or collapse elements hitting enter.",announced:!1,added:!1,styles:{".MJX_LiveRegion":{position:"absolute",top:"0",height:"1px",width:"1px",padding:"1px",overflow:"hidden"},".MJX_LiveRegion_Show":{top:"0",position:"absolute",width:"auto",height:"auto",padding:"0px 0px",opacity:1,"z-index":"202",left:0,right:0,margin:"0 auto","background-color":"white","box-shadow":"0px 10px 20px #888",border:"2px solid #CCCCCC"}},Create:function(a){var b=MathJax.HTML.Element("div",{className:"MJX_LiveRegion"});return b.setAttribute("aria-live",a),b},Update:MathJax.Hub.Browser.isPC?function(a,b){a.textContent="",setTimeout(function(){a.textContent=b},100)}:function(a,b){a.textContent="",a.textContent=b},Announce:function(){if(e.getOption("speech")){f.announced=!0,MathJax.Ajax.Styles(f.styles);var a=f.Create("polite");document.body.appendChild(a),f.Update(a,f.ANNOUNCE),setTimeout(function(){document.body.removeChild(a)},1e3)}}});MathJax.Extension.explorer.LiveRegion=f;var g=MathJax.Ajax.fileURL(MathJax.Ajax.config.path.a11y),h=MathJax.Extension.explorer.Explorer={liveRegion:f(),walker:null,highlighter:null,hoverer:null,flamer:null,speechDiv:null,earconFile:g+"/invalid_keypress"+(-1!==["Firefox","Chrome","Opera"].indexOf(MathJax.Hub.Browser.name)?".ogg":".mp3"),expanded:!1,focusoutEvent:MathJax.Hub.Browser.isFirefox?"blur":"focusout",focusinEvent:"focus",ignoreFocusOut:!1,jaxCache:{},messageID:null,Reset:function(){h.FlameEnriched()},Register:function(a){if(e.hook){var b=document.getElementById(a[1]);if(b&&b.id){var c=MathJax.Hub.getJaxFor(b.id);c&&c.enriched&&(h.StateChange(b.id,c),h.liveRegion.Add(),h.AddEvent(b))}}},StateChange:function(a,b){h.GetHighlighter(.2);var c=h.jaxCache[a];c&&c===b.root||(c&&h.highlighter.resetState(a+"-Frame"),h.jaxCache[a]=b.root)},AddAria:function(a){a.setAttribute("role","application"),a.setAttribute("aria-label","Math")},AddHook:function(a){h.RemoveHook(),h.hook=MathJax.Hub.Register.MessageHook("End Math",function(b){var c=b[1].id+"-Frame",d=document.getElementById(c);a&&c===h.expanded&&(h.ActivateWalker(d,a),d.focus(),h.expanded=!1)})},RemoveHook:function(){h.hook&&(MathJax.Hub.UnRegister.MessageHook(h.hook),h.hook=null)},AddMessage:function(){return MathJax.Message.Set("Generating Speech Output")},RemoveMessage:function(a){a&&MathJax.Message.Clear(a)},AddEvent:function(a){var b=a.id+"-Frame",c=a.previousSibling;if(c){var d=c.id!==b?c.firstElementChild:c;h.AddAria(d),h.AddMouseEvents(d),"MathJax_MathML"===d.className&&(d=d.firstElementChild),d&&(d.onkeydown=h.Keydown,h.Flame(d),d.addEventListener(h.focusinEvent,function(a){e.hook&&(f.announced||f.Announce())}),d.addEventListener(h.focusoutEvent,function(a){if(e.hook)return h.ignoreFocusOut&&(h.ignoreFocusOut=!1,"enter"===h.walker.moved)?void a.target.focus():void(h.walker&&h.DeactivateWalker())}),e.getOption("speech")&&h.AddSpeech(d))}},AddSpeech:function(a){var b=a.id,c=MathJax.Hub.getJaxFor(b),d=c.root.toMathML();if(a.getAttribute("haslabel")||h.AddMathLabel(d,b),!a.getAttribute("hasspeech"))switch(MathJax.Hub.config.explorer.generation){case"eager":h.AddSpeechEager(d,b);break;case"mixed":a.querySelectorAll("[data-semantic-complexity]").length>=e.eagerComplexity&&h.AddSpeechEager(d,b)}},AddSpeechLazy:function(a){var b=new sre.TreeSpeechGenerator;b.setRebuilt(h.walker.rebuilt),b.getSpeech(h.walker.rootNode,h.walker.xml),a.setAttribute("hasspeech","true")},AddSpeechEager:function(a,b){h.MakeSpeechTask(a,b,sre.TreeSpeechGenerator,function(a,b){a.setAttribute("hasspeech","true")},5)},AddMathLabel:function(a,b){h.MakeSpeechTask(a,b,sre.SummarySpeechGenerator,function(a,b){a.setAttribute("haslabel","true"),a.setAttribute("aria-label",b)},5)},MakeSpeechTask:function(a,b,c,d,e){var f=h.AddMessage();setTimeout(function(){var e=new c,g=document.getElementById(b),i=new sre.DummyWalker(g,e,h.highlighter,a),j=i.speech();j&&d(g,j),h.RemoveMessage(f)},e)},Keydown:function(c){if(c.keyCode===b.ESCAPE){if(!h.walker)return;return h.RemoveHook(),h.DeactivateWalker(),void a(c)}if(h.walker&&h.walker.isActive()){void 0!==h.walker.modifier&&(h.walker.modifier=c.shiftKey);var d=h.walker.move(c.keyCode);if(null===d)return;if(d){if("expand"===h.walker.moved){if(h.expanded=h.walker.node.id,MathJax.Hub.Browser.isEdge)return h.ignoreFocusOut=!0,void h.DeactivateWalker();if(MathJax.Hub.Browser.isFirefox||MathJax.Hub.Browser.isMSIE)return void h.DeactivateWalker()}h.liveRegion.Update(h.walker.speech()),h.Highlight()}else h.PlayEarcon();return void a(c)}var f=c.target;if(c.keyCode===b.SPACE){if(c.shiftKey&&e.hook){var g=MathJax.Hub.getJaxFor(f);h.ActivateWalker(f,g),h.AddHook(g)}else MathJax.Extension.MathEvents.Event.ContextMenu(c,f);return void a(c)}},GetHighlighter:function(a){h.highlighter=sre.HighlighterFactory.highlighter({color:e.getOption("background"),alpha:a},{color:e.getOption("foreground"),alpha:1},{renderer:MathJax.Hub.outputJax["jax/mml"][0].id,browser:MathJax.Hub.Browser.name})},AddMouseEvents:function(a){sre.HighlighterFactory.addEvents(a,{mouseover:h.MouseOver,mouseout:h.MouseOut},{renderer:MathJax.Hub.outputJax["jax/mml"][0].id,browser:MathJax.Hub.Browser.name})},MouseOver:function(b){if("none"!==e.getOption("highlight")){if("hover"===e.getOption("highlight")){var c=b.currentTarget;h.GetHighlighter(.1),h.highlighter.highlight([c]),h.hoverer=!0}a(b)}},MouseOut:function(b){return h.hoverer&&(h.highlighter.unhighlight(),h.hoverer=!1),a(b)},Flame:function(a){if("flame"===e.getOption("highlight"))return h.GetHighlighter(.05),h.highlighter.highlightAll(a),void(h.flamer=!0)},UnFlame:function(){h.flamer&&(h.highlighter.unhighlightAll(),h.flamer=null)},FlameEnriched:function(){h.UnFlame();for(var a,b=0,c=MathJax.Hub.getAllJax();a=c[b];b++)h.Flame(a.SourceElement().previousSibling)},Walkers:{syntactic:sre.SyntaxWalker,table:sre.TableWalker,semantic:sre.SemanticWalker,none:sre.DummyWalker},ActivateWalker:function(a,b){var c=e.getOption("speech"),d=e.getOption("walker")?h.Walkers[MathJax.Hub.config.explorer.walker]:h.Walkers.none,f=c?new sre.DirectSpeechGenerator:new sre.DummySpeechGenerator;h.GetHighlighter(.2),h.walker=new d(a,f,h.highlighter,b.root.toMathML()),c&&!a.getAttribute("hasspeech")&&h.AddSpeechLazy(a),h.walker.activate(),c&&(e.getOption("subtitle")&&h.liveRegion.Show(a,h.highlighter),h.liveRegion.Update(h.walker.speech())),h.Highlight(),h.ignoreFocusOut&&setTimeout(function(){h.ignoreFocusOut=!1},500)},DeactivateWalker:function(){h.liveRegion.Clear(),h.liveRegion.Hide(),h.Unhighlight(),h.currentHighlight=null,h.walker.deactivate(),h.walker=null},Highlight:function(){h.Unhighlight(),h.highlighter.highlight(h.walker.getFocus().getNodes())},Unhighlight:function(){h.highlighter.unhighlight()},PlayEarcon:function(){new Audio(h.earconFile).play()},SpeechOutput:function(){h.Reset(),["Subtitles"].forEach(function(a){var b=MathJax.Menu.menu.FindId("Accessibility","Explorer",a);b&&(b.disabled=!b.disabled)}),h.Regenerate()},RemoveSpeech:function(){e.setSpeechOption();for(var a,b=0,c=MathJax.Hub.getAllJax();a=c[b];b++){var d=document.getElementById(a.inputID+"-Frame");d&&(d.removeAttribute("hasspeech"),d.removeAttribute("haslabel"))}},Regenerate:function(){for(var a,b=0,c=MathJax.Hub.getAllJax();a=c[b];b++){var d=document.getElementById(a.inputID+"-Frame");d&&(d.removeAttribute("hasspeech"),h.AddSpeech(d))}},Startup:function(){var a=MathJax.Extension.collapsible;a&&a.Dependent(e),e.addDefaults()}};MathJax.Hub.Register.StartupHook("End Extensions",function(){e[!1===c.explorer?"Disable":"Enable"](),MathJax.Hub.Startup.signal.Post("Explorer Ready"),MathJax.Hub.Register.StartupHook("MathMenu Ready",function(){d=MathJax.Menu.cookie;var a,b=function(a){e[c.explorer?"Enable":"Disable"](!0,!0),MathJax.Menu.saveCookie()},f=MathJax.Menu.ITEM,g=MathJax.Menu.menu,i={action:h.Reset},j={action:e.speechOption},k=f.SUBMENU(["Explorer","Explorer"],f.CHECKBOX(["Active","Active"],"explorer",{action:b}),f.RULE(),f.CHECKBOX(["Walker","Walker"],"Assistive-walker"),f.SUBMENU(["Highlight","Highlight"],f.RADIO(["none","None"],"Assistive-highlight",i),f.RADIO(["hover","Hover"],"Assistive-highlight",i),f.RADIO(["flame","Flame"],"Assistive-highlight",i)),f.SUBMENU(["Background","Background"],f.RADIO(["blue","Blue"],"Assistive-background",i),f.RADIO(["red","Red"],"Assistive-background",i),f.RADIO(["green","Green"],"Assistive-background",i),f.RADIO(["yellow","Yellow"],"Assistive-background",i),f.RADIO(["cyan","Cyan"],"Assistive-background",i),f.RADIO(["magenta","Magenta"],"Assistive-background",i),f.RADIO(["white","White"],"Assistive-background",i),f.RADIO(["black","Black"],"Assistive-background",i)),f.SUBMENU(["Foreground","Foreground"],f.RADIO(["black","Black"],"Assistive-foreground",i),f.RADIO(["white","White"],"Assistive-foreground",i),f.RADIO(["magenta","Magenta"],"Assistive-foreground",i),f.RADIO(["cyan","Cyan"],"Assistive-foreground",i),f.RADIO(["yellow","Yellow"],"Assistive-foreground",i),f.RADIO(["green","Green"],"Assistive-foreground",i),f.RADIO(["red","Red"],"Assistive-foreground",i),f.RADIO(["blue","Blue"],"Assistive-foreground",i)),f.RULE(),f.CHECKBOX(["SpeechOutput","Speech Output"],"Assistive-speech",{action:h.SpeechOutput}),f.CHECKBOX(["Subtitles","Subtitles"],"Assistive-subtitle",{disabled:!c["Assistive-speech"]}),f.RULE(),f.SUBMENU(["Mathspeak","Mathspeak Rules"],f.RADIO(["mathspeak-default","Verbose"],"Assistive-ruleset",j),f.RADIO(["mathspeak-brief","Brief"],"Assistive-ruleset",j),f.RADIO(["mathspeak-sbrief","Superbrief"],"Assistive-ruleset",j)),f.SUBMENU(["Chromevox","ChromeVox Rules"],f.RADIO(["chromevox-default","Verbose"],"Assistive-ruleset",j),f.RADIO(["chromevox-short","Short"],"Assistive-ruleset",j),f.RADIO(["chromevox-alternative","Alternative"],"Assistive-ruleset",j))),l=(g.FindId("Accessibility")||{}).submenu;l?(a=l.IndexOfId("Explorer"),null!==a?l.items[a]=k:(a=l.IndexOfId("CollapsibleMath"),l.items.splice(a+1,0,k))):(a=g.IndexOfId("CollapsibleMath"),g.items.splice(a+1,0,k)),c.explorer||e.DisableMenus(!0)},20)},20)}),MathJax.Hub.Register.StartupHook("SVG Jax Ready",function(){MathJax.Hub.Config({SVG:{addMMLclasses:!0}});var a=MathJax.OutputJax.SVG;if(parseFloat(a.version)<2.7){var b=a.getJaxFromMath;a.Augment({getJaxFromMath:function(a){return a.parentNode.className.match(/MathJax_SVG_Display/)&&(a=a.parentNode),b.call(this,a)}})}}),MathJax.Ajax.config.path.a11y||(MathJax.Ajax.config.path.a11y=MathJax.Hub.config.root+"/extensions/a11y"),MathJax.Ajax.Require("[a11y]/collapsible.js"),MathJax.Hub.Register.StartupHook("Collapsible Ready",function(){MathJax.Extension.explorer.Explorer.Startup(),MathJax.Ajax.loadComplete("[a11y]/explorer.js")}); \ No newline at end of file diff --git a/scripts/extensions/a11y/invalid_keypress.mp3 b/scripts/extensions/a11y/invalid_keypress.mp3 new file mode 100644 index 000000000..cba44de08 Binary files /dev/null and b/scripts/extensions/a11y/invalid_keypress.mp3 differ diff --git a/scripts/extensions/a11y/invalid_keypress.ogg b/scripts/extensions/a11y/invalid_keypress.ogg new file mode 100755 index 000000000..292cefdde Binary files /dev/null and b/scripts/extensions/a11y/invalid_keypress.ogg differ diff --git a/scripts/extensions/a11y/mathjax-sre.js b/scripts/extensions/a11y/mathjax-sre.js new file mode 100644 index 000000000..40a6151f2 --- /dev/null +++ b/scripts/extensions/a11y/mathjax-sre.js @@ -0,0 +1,985 @@ +// Copyright 2014-2018 Volker Sorge +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_"; +$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.Symbol=function(){var a=0;return function(b){return $jscomp.SYMBOL_PREFIX+(b||"")+a++}}(); +$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(a){var b=0;return $jscomp.iteratorPrototype(function(){return b>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid; +goog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=goog.typeOf(a);if("object"==b||"array"==b){if("function"===typeof a.clone)return a.clone();b="array"==b?[]:{};for(var c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)}; +goog.bindJs_=function(a,b,c){if(!a)throw Error();if(2Number(a[1])?!1:b('(()=>{"use strict";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()')});a("es6-impl",function(){return!0});a("es7",function(){return b("2 ** 2 == 4")}); +a("es8",function(){return b("async () => 1, true")});a("es9",function(){return b("({...rest} = {}), true")});a("es_next",function(){return!1});return c},goog.Transpiler.prototype.needsTranspile=function(a,b){if("always"==goog.TRANSPILE)return!0;if("never"==goog.TRANSPILE)return!1;this.requiresTranspilation_||(this.requiresTranspilation_=this.createRequiresTranspilation_());if(a in this.requiresTranspilation_)return this.requiresTranspilation_[a]?!0:!goog.inHtmlDocument_()||"es6"!=b||"noModule"in goog.global.document.createElement("script")? +!1:!0;throw Error("Unknown language mode: "+a);},goog.Transpiler.prototype.transpile=function(a,b){return goog.transpile_(a,b)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(a){return a.replace(/<\/(SCRIPT)/ig,"\\x3c/$1")},goog.DebugLoader_=function(){this.dependencies_={};this.idToPath_={};this.written_={};this.loadingDeps_=[];this.depsToLoad_=[];this.paused_=!1;this.factory_=new goog.DependencyFactory(goog.transpiler_);this.deferredCallbacks_={};this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap= +function(a,b){function c(){d&&(goog.global.setTimeout(d,0),d=null)}var d=b;if(a.length){b=[];for(var e=0;e\x3c/script>")}else{var d=b.createElement("script");d.defer=goog.Dependency.defer_;d.async=!1;d.type="text/javascript";var e=goog.getScriptNonce();e&&(d.nonce=e);goog.DebugLoader_.IS_OLD_IE_?(a.pause(),d.onreadystatechange=function(){if("loaded"==d.readyState||"complete"==d.readyState)a.loaded(), +a.resume()}):d.onload=function(){d.onload=null;a.loaded()};d.src=this.path;b.head.appendChild(d)}}else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."),"deps.js"==this.relativePath?(goog.logToConsole_("Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or seting CLOSURE_NO_DEPS to true."),a.loaded()):a.pause()},goog.Es6ModuleDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load= +function(a){function b(a,b){b?d.write('