From 3280fb0286fcd904d071323cd6c427fe05ee7ca9 Mon Sep 17 00:00:00 2001 From: trbKnl Date: Wed, 13 Nov 2024 10:33:53 +0000 Subject: [PATCH] deploy: ed16db266b03e40eb3bc16e6b1707939e591eaa4 --- .buildinfo | 4 + .doctrees/api/api.doctree | Bin 0 -> 501784 bytes .doctrees/api/index.doctree | Bin 0 -> 2810 bytes ...eating-your-own-data-donation-task.doctree | Bin 0 -> 63400 bytes .../articles/data-donation-checklist.doctree | Bin 0 -> 21770 bytes .doctrees/articles/deployment.doctree | Bin 0 -> 23800 bytes .doctrees/articles/index.doctree | Bin 0 -> 3044 bytes .doctrees/articles/installation.doctree | Bin 0 -> 23744 bytes .../introduction-to-data-donation.doctree | Bin 0 -> 4089 bytes .doctrees/articles/next-in-docker.doctree | Bin 0 -> 20640 bytes .doctrees/articles/visualizations.doctree | Bin 0 -> 50773 bytes .doctrees/environment.pickle | Bin 0 -> 137443 bytes .doctrees/index.doctree | Bin 0 -> 6819 bytes .doctrees/standard_scripts/index.doctree | Bin 0 -> 6566 bytes .nojekyll | 0 _sources/api/api.md.txt | 29 + _sources/api/index.rst.txt | 7 + ...reating-your-own-data-donation-task.md.txt | 413 ++++ .../articles/data-donation-checklist.md.txt | 59 + _sources/articles/deployment.md.txt | 100 + _sources/articles/index.rst.txt | 13 + _sources/articles/installation.md.txt | 89 + .../introduction-to-data-donation.md.txt | 5 + _sources/articles/next-in-docker.md.txt | 198 ++ _sources/articles/visualizations.md.txt | 195 ++ _sources/index.rst.txt | 43 + _sources/standard_scripts/index.rst.txt | 32 + _static/basic.css | 914 ++++++++ _static/basic_mod.css | 1194 ++++++++++ _static/basic_mod.css.map | 1 + _static/doctools.js | 149 ++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/fonts/roboto-mono/LICENSE.txt | 202 ++ .../roboto-mono/roboto-mono-bold-italic.woff2 | Bin 0 -> 41628 bytes .../fonts/roboto-mono/roboto-mono-bold.woff2 | Bin 0 -> 37732 bytes .../roboto-mono/roboto-mono-italic.woff2 | Bin 0 -> 41252 bytes _static/fonts/roboto-mono/roboto-mono.woff2 | Bin 0 -> 97472 bytes _static/fonts/roboto/LICENSE.txt | 202 ++ _static/fonts/roboto/roboto-bold.woff2 | Bin 0 -> 50452 bytes _static/fonts/roboto/roboto-italic.woff2 | Bin 0 -> 54380 bytes _static/fonts/roboto/roboto.woff2 | Bin 0 -> 50640 bytes _static/js/petite-vue.js | 1 + _static/js/theme.js | 108 + _static/language_data.js | 192 ++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 75 + _static/searchtools.js | 632 ++++++ _static/sphinx_highlight.js | 154 ++ api/api.html | 1946 +++++++++++++++++ api/index.html | 246 +++ .../creating-your-own-data-donation-task.html | 573 +++++ articles/data-donation-checklist.html | 220 ++ articles/deployment.html | 301 +++ articles/index.html | 224 ++ articles/installation.html | 300 +++ articles/introduction-to-data-donation.html | 189 ++ articles/next-in-docker.html | 386 ++++ articles/visualizations.html | 419 ++++ genindex.html | 609 ++++++ index.html | 249 +++ objects.inv | Bin 0 -> 1416 bytes py-modindex.html | 218 ++ search.html | 182 ++ searchindex.js | 1 + standard_scripts/index.html | 216 ++ 67 files changed, 11303 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/api/api.doctree create mode 100644 .doctrees/api/index.doctree create mode 100644 .doctrees/articles/creating-your-own-data-donation-task.doctree create mode 100644 .doctrees/articles/data-donation-checklist.doctree create mode 100644 .doctrees/articles/deployment.doctree create mode 100644 .doctrees/articles/index.doctree create mode 100644 .doctrees/articles/installation.doctree create mode 100644 .doctrees/articles/introduction-to-data-donation.doctree create mode 100644 .doctrees/articles/next-in-docker.doctree create mode 100644 .doctrees/articles/visualizations.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/standard_scripts/index.doctree create mode 100644 .nojekyll create mode 100644 _sources/api/api.md.txt create mode 100644 _sources/api/index.rst.txt create mode 100644 _sources/articles/creating-your-own-data-donation-task.md.txt create mode 100644 _sources/articles/data-donation-checklist.md.txt create mode 100644 _sources/articles/deployment.md.txt create mode 100644 _sources/articles/index.rst.txt create mode 100644 _sources/articles/installation.md.txt create mode 100644 _sources/articles/introduction-to-data-donation.md.txt create mode 100644 _sources/articles/next-in-docker.md.txt create mode 100644 _sources/articles/visualizations.md.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/standard_scripts/index.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/basic_mod.css create mode 100644 _static/basic_mod.css.map create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/fonts/roboto-mono/LICENSE.txt create mode 100644 _static/fonts/roboto-mono/roboto-mono-bold-italic.woff2 create mode 100644 _static/fonts/roboto-mono/roboto-mono-bold.woff2 create mode 100644 _static/fonts/roboto-mono/roboto-mono-italic.woff2 create mode 100644 _static/fonts/roboto-mono/roboto-mono.woff2 create mode 100644 _static/fonts/roboto/LICENSE.txt create mode 100644 _static/fonts/roboto/roboto-bold.woff2 create mode 100644 _static/fonts/roboto/roboto-italic.woff2 create mode 100644 _static/fonts/roboto/roboto.woff2 create mode 100644 _static/js/petite-vue.js create mode 100644 _static/js/theme.js create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx_highlight.js create mode 100644 api/api.html create mode 100644 api/index.html create mode 100644 articles/creating-your-own-data-donation-task.html create mode 100644 articles/data-donation-checklist.html create mode 100644 articles/deployment.html create mode 100644 articles/index.html create mode 100644 articles/installation.html create mode 100644 articles/introduction-to-data-donation.html create mode 100644 articles/next-in-docker.html create mode 100644 articles/visualizations.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 standard_scripts/index.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..6a118b89 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: e26001d7ff39a6e1aa0c173411608fc6 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api/api.doctree b/.doctrees/api/api.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2b8baf7482f6c75c8281392e663c1045be9cf944 GIT binary patch literal 501784 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ÐJ~)7yTE>7d3RNizA&oB|PFbY^9n<&-x6)K7($!J&I} z`{azkkA>hY3+qm(lx#}(P}sua8G-vmv)UPfhCQ>$a-U!YWzDk<&NYu}AleE3 zSJ6EZKHKnT(1y&EIPz3@!aw)Q=K<5E9lJ7a_`f(-MFx8MqadJ|7H zO!Mu`H*(M<$&|}iNjY}MzyS0Zgyq<2Vo{k^kAlzuuzVejY=A=z7isHb|3<7SGW{#x zXS(M!*cUjzVpQ`SZ{V?TT+^4g2U=O=Ze5qz|dH#`o0 z%$|CYm{a0-gP3R6;_-&ZkUh>~o0^reFTCPD=x{C2$8(nl0E%=D4J%~s9(PH#JKm{_ zR3^+`>eZ?xo~&XzClfZHq>{?Bi3FB^$Sh?U;K7Gysv-1m^<{4(c@I9cbJ0c{N7Gno zJ(CEl#C!)Io{!ZrxhYrh;l;s}>aKs@?Ibhwp(pwX#TEx22qpO7!wZ86Q%0D1hvyP* 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

Z`gTnV(4 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 JMyq!bdjDJ4xpv))qrQ2Nx;r((K0xL zf%YLG2E9f7o&5{_G&4K9UTPS;IyyR+?|kP-f3^Pkx4&2Z`LWHpP^)vArb?&G2H#C} zQe;fI@F_g|JG=`|eb3MPx9l{S~tlsY;|wW1M;iKF)aMLL;Q@lI(jrb4A` zb#5%u`r=~0m;;AyqO)8VD&2ytLX+U$-HfhMmOCCU4gej^%PIrtrPT9q@qUc=5|!u zAv6@^&;31TsIszT0m+SC8fGgBww!iUR&dlhB|1g)cgK&C!bF0ThR%bvq@uO&TIQTk zOLXi>(}D}5m1AIwZ@;3lKE8Jr8LMKaL52 zc$NbniG(moB~{CUE*aoXvEE0k`n!fD+N1=14cfp>oCY)BPPAGeN5CP{H5+)_k7(gE z*@*nU0M~|Tk>#Y}BTy{`0#r1L%4l$0O3H4CrQe8h%ZgN!RTkNF%vQO!jBKAQDUvwy zR#;K-bxcxW>0HJ{>L@$wK0(h7kc>rVluZYt!&;53XPN&j{(=+BOdMe-OthAw-bWZl z&GO=oKZ(r-+NdR1C`Be*`2F~aALT43&8&#Y45DOC5qs*)bm_8}r|+&Btpd^7WFLbHUuA^nqzG z0d@hvpzn%fOEFckT0S?qd;WSPO zTg-RVL>9R#HLW@^UhkIyl)=T4qJ6Is0cXs?$NdCamxN_hNP>q=9J*!HC-u_=T$PJz zpxyWbrryS9g6~$N1icF;;w~2G4M!X`ONP;eC&CGW0<#>RJ75hi$2iLU=`CsXaDW)r z7R{m^=PBMCkawc6`psYSSJwBUz+LBv@Lk}qZ!G@`|6lQe^~3F2m8XY^K*ghbSga(m zCD(dYnA?&{55c3h*<8z}{H5x>9bu#0yJfMr_F5h~y=5Px)wqCOxxZ_x-ob^Bfsx=5 z16JTVNwkyz7CGR)==@sCKOy<|;U&nAmmS&&Z!wE{R}P!GaZ7yEh|7{4)sGHPWErc~ PPvdB-r$D^Ci~0F~Bl}<; literal 0 HcmV?d00001 diff --git a/.doctrees/articles/creating-your-own-data-donation-task.doctree b/.doctrees/articles/creating-your-own-data-donation-task.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d35c84e6d6dfed194a81256adea35d5a5e25fb2e GIT binary patch literal 63400 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 GTl{}X9Kt*R literal 0 HcmV?d00001 diff --git a/.doctrees/articles/deployment.doctree b/.doctrees/articles/deployment.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d75df0f65bd61f13542aea37cf3dd39a31f1ec2d GIT binary patch literal 23800 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 literal 0 HcmV?d00001 diff --git a/.doctrees/articles/introduction-to-data-donation.doctree b/.doctrees/articles/introduction-to-data-donation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dc91f02396f7d8e9f1e003566aaa62d227c76df8 GIT binary patch literal 4089 zcmcIn%Wot{8DFn=Y>%I7C%cK1b?77t*%j-VfFcp#gouRD3JU>(!)n#4>8hD3xx1_B zs+~CabtA5OkV`n)KOCxuE{nhvUeUE-I_`|;rZpA-; zU@ED~%Ms(e)LfY0x46z+Axay*2#k4B+^%zdAJ!v=>IGl<=oVkeJJ z<-33dMG%P?PN(>hqF=BBM_HA{+M$`Ma%Mh z{y5^|X$y=S)BcEHNbobs%qh+gYQmJ%7t{)ju!*Y@U~d_KiLs8)f0P(iRQWuKIU;TX z?fbu|1(iPTM6UM}%O(pf9evfrrAYj0ITP~J-m%Tri!QbOd6C4Y%U5qsqWr0U>xS(0 z=^C`@iq^z*ssD43zI^egD`EQb#h;r%Ej(HY#_M6xS>3{7als#dZPyB{1Ntf>C3Ge0 zU~DUakhtBn*NE$Niapx+jnM6zzI^Q8v^6VD9*0W`?9FPlve@(oR$G>bC%61|$0In7 zj`Xeh{mj)gQqq2a>~@r9koYaY)uMZ1h934qaa!xrijt##f5UQz3DR{EzoDJ2oDHY) z;M5Oi0t13sT?ZWCxiFR$6%ISK))uCUsk#h)Z5;egV?qkOXJFWFkFL&f+Os-KX(-WK zm@bL(iQ3DRM$m#>GusLVU=dOpcTMC;5!XPt~bmmC1_j6{5LI28O|&dQl%Gl6h(oNr^J z@^924(=|`Ir~n(NQNYZp-@rJY!bgNd@eU1g!|yX^b-Ez=+X`6QA>B%l&S zjrL3e4ZLc+AhduRL!l_@t;VCUg7%-aEM_-0zwKdtv%Jhmtl3)En{K9MfE9tPSmPCb0%) zNPJUlh;j@eZlAddDrkX^TY1|9UI9HiQ{@yGXq&Q806b1#Q3gR0IHN1|mN$E1B;X|TP zImJZhJ$@qVn^%ZE_i#nxu+thZ9j(a6-~!griSAvM)xN?0fOZ_QL_=pM(|HaM!Us&_ z&7Tm)K>q^He;$5`)`E2vO$y(Z2G!Ik?7Q*`d8a2wc<-n(%N?fzoDs6OISr1s$I?pV Qw_}l*++iho9^7Q~U+O777ytkO literal 0 HcmV?d00001 diff --git a/.doctrees/articles/next-in-docker.doctree b/.doctrees/articles/next-in-docker.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0ff4d174e473e6d90b90e27a21cdd4707ba8ef3e GIT binary patch literal 20640 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 literal 0 HcmV?d00001 diff --git a/.doctrees/articles/visualizations.doctree b/.doctrees/articles/visualizations.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5f3c53c786d4274146d4d6bcf0d1be4cabb3e4d1 GIT binary patch literal 50773 zcmeHwd$1%|d7t)mckkVocJ)A(R#NNo(7ogPu$Co)8_RgLdargPv@2MMvY8q46>0S3E?3iU{WbNP&haSDhU-;upNg~5~_krf5b&4c2c

4k-}jyK^*P-h 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

P7c-e-x*#_y|7h4Pb^V^?mO`KNeG^zHjnJ4^k|c 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 literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..582cecf92a5715db36fae3ba7f698741967e0aa1 GIT binary patch literal 137443 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 z zVTp^^JWrj&gfO{JnQ{zFQaCMv-^2U26eMQR?^!FM6(jz`ulr1S5o zbC*!(|D;SgWPiTJNSrvIM$WDD1z1Px$CkyC0a!Pb*^gNb68-Uddk@A#^$LMvg*s;m zK{2FEdDcN8Ct>=+!>10**e9VI7u⪻wEJoCG8k`Ct*faEd-70)tO5Ojcb%C&pI^Z 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 literal 0 HcmV?d00001 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_sources/api/api.md.txt b/_sources/api/api.md.txt new file mode 100644 index 00000000..46cd77ef --- /dev/null +++ b/_sources/api/api.md.txt @@ -0,0 +1,29 @@ +# API Reference + +## Props + +```{eval-rst} +.. automodule:: port.api.props + :members: +``` + +## Extraction helpers + +```{eval-rst} +.. automodule:: port.helpers.extraction_helpers + :members: +``` + +## Port helpers + +```{eval-rst} +.. automodule:: port.helpers.port_helpers + :members: +``` + +## Validation + +```{eval-rst} +.. automodule:: port.helpers.validate + :members: +``` diff --git a/_sources/api/index.rst.txt b/_sources/api/index.rst.txt new file mode 100644 index 00000000..15da24b5 --- /dev/null +++ b/_sources/api/index.rst.txt @@ -0,0 +1,7 @@ +API Reference +============= + +.. toctree:: + :maxdepth: 3 + + api.md diff --git a/_sources/articles/creating-your-own-data-donation-task.md.txt b/_sources/articles/creating-your-own-data-donation-task.md.txt new file mode 100644 index 00000000..ed54f970 --- /dev/null +++ b/_sources/articles/creating-your-own-data-donation-task.md.txt @@ -0,0 +1,413 @@ +# Creating your own donation task + +The donation task is at the core of a data donation study. +It is the step where the participant is actually going to donate their data. + +The data donation task goes as follows: + +1. The participant goes to your data donation task app in a browser +2. The participant is prompted to submit their data download package (DDP) +3. A Python script you wrote, extracts the data you need for your research +4. That data gets presented to the participant on screen +5. The participants decides to donate and you receive the data + +## Using the data donation task in a data donation study + +The data donation task needs to be used in together with Next. Next is the backend for the data donation task. With Next you can configure a data donation study: i.e. configure: + +* Your data donation task +* An information page +* An informed consent page +* A privacy policy +* Instruction manuals for participants +* Configure where the data should go +* and more + +You can find more information on how to deploy a study in the wiki + + +## How does the data donation task work? + +**The idea behind the data donation task** +The data donation task repository is in essence a toolkit with which you can build your own custom data donation task. +It is designed as a toolkit because researchers need to tailor the data donation task to their own interests; they interested in different DDPs and are interested in different data within those DDPs. + +This toolkit approach has several benefits: + +1. It allows for a bespoke experience for the participant +2. You can only extract (and possibly aggregate) the data you need for you study, which we think is important in order to preserve the privacy of the participant and is often a requirement from your data steward/ethical review board + +These benefits come at the cost of added complexity compared to a one size fits all approach that extracts most or all data from the participant. + +**The design of the data donation task** +The data donation task contains reusable components (such as: a screen that prompts the participant to submit their DDP and a screen with tables that the participants need to review prior to donation) that you can use and combine in creative ways to make your own study. +These components are combined in a Python script that is created by the researcher. + +On a high level the script works as follows: + +1. The Python script determines which user interface (UI) component needs to be shown to the participant +2. Whenever the participant is done interacting with the UI component, the result of that interaction is returned to the script +3. The script handles the return result en determine the next UI component that the participant needs to see or interact with, go back to step 1 until the end of the donation task + +**The architecture of the data donation task** +The data donation task is a web application (build with [React](https://react.dev/) and [Pyodide](https://pyodide.org/en/stable/)) that completely runs in the browser of the participant. +The Python script and the UI components will run completely in the browser of the participant. +Data is only sent to the server upon the participant clicking a consent button. + + +## Start writing your first data donation task script + +After you have forked or cloned and installed this repository (see [instruction](https://github.com/d3i-infra/feldspar/wiki/Installation)) you can start creating your own donation task. + +You can create your own study by changing and/or adapting the code in the following directory `port/src/framework/processing/py/port/` +This directory contains the following files: + +* `script.py`: Contains your donation task logic; which screen the participants will see and in what order +* `api/props.py`: Contains all the UI elements you can use; you can use this file for reference +* `api/commands.py`: Contains the Render and the Donate commands +* `main.py`: The main driver of you donation task, you don't need to touch this file + +### `script.py` + +`script.py` is the most important file and the one we will be working with the most + +Lets look at a full example of a `script.py`. In this example we will be extracting data from a fictional DDP. +Participants are asked to submit a zip file (any zip file will do in this case), and we will extract the file names and some meta data from this zip file. +In a real study you would extract something substantial from the data. + +`script.py` must contain a function called `process` this function determines the whole data donation task from start to finish (Which screens the participant will see and in what order, and what kind of data extraction will take place). +At the time of writing this example is also the default `script.py`. + +In this example process defines the following data donation task: + +1. Ask the participant to submit a zip file +2. Perform validation on the submitted zip file, if not valid return to step 1 +3. Extract the data from the submitted zip file +4. Render the extract data on screen in a table +5. Send the data to the data storage upon consent + +Although these can vary per data donation task, they will be more or less similar. + +Below you can find the annotated example `process` function: + +```python +# script.py +import port.api.props as props +from port.api.commands import (CommandSystemDonate, CommandUIRender, CommandSystemExit) + +import pandas as pd +import zipfile + +def process(session_id: str): + platform = "Platform of interest" + + # Start of the data donation task + while True: + # Ask the participant to submit a file + file_prompt = generate_file_prompt(platform, "application/zip, text/plain") + file_prompt_result = yield render_page(platform, file_prompt) + + # If the participant submitted a file: continue + if file_prompt_result.__type__ == 'PayloadString': + + # Validate the file the participant submitted + # In general this is wise to do + is_data_valid = validate_the_participants_input(file_prompt_result.value) + + # Happy flow (all is well): + # The file the participant submitted is valid + if is_data_valid == True: + + # Extract the data you as a researcher are interested in, and put it in a pandas DataFrame + # Show this data to the participant in a table on screen + # The participant can now decide to donate + extracted_data = extract_the_data_you_are_interested_in(file_prompt_result.value) + consent_prompt = generate_consent_prompt(extracted_data) + consent_prompt_result = yield render_page(platform, consent_prompt) + + # If the participant wants to donate the data gets donated + if consent_prompt_result.__type__ == "PayloadJSON": + yield donate(f"{session_id}-{platform}", consent_prompt_result.value) + + break + + # Sad flow + # The data was not valid, ask the participant to retry + if is_data_valid == False: + retry_prompt = generate_retry_prompt(platform) + retry_prompt_result = yield render_page(platform, retry_prompt) + + # The participant wants to retry: start from the beginning + if retry_prompt_result.__type__ == 'PayloadTrue': + continue + # The participant does not want to retry or pressed skip + else: + break + + # The participant did not submit a file and pressed skip + else: + break + + yield exit_port(0, "Success") + yield render_end_page() + +``` + +**The functions used in `process`** + +These are all the functions used in `process` together they make up `script.py`. + +

+extract_the_data_you_are_interested_in + +```python +def extract_the_data_you_are_interested_in(zip_file: str) -> pd.DataFrame: + """ + This function extracts the data the researcher is interested in + + In this case we extract from the zipfile: + * The filesnames + * The compressed file size + * The file size + + You could extract anything here + """ + names = [] + out = pd.DataFrame() + + try: + file = zipfile.ZipFile(zip_file) + data = [] + for name in file.namelist(): + names.append(name) + info = file.getinfo(name) + data.append((name, info.compress_size, info.file_size)) + + out = pd.DataFrame(data, columns=["File name", "Compressed file size", "File size"]) + + except Exception as e: + print(f"Something went wrong: {e}") + + return out +``` + +
+ +
+validate_the_participants_input + +```python +def validate_the_participants_input(zip_file: str) -> bool: + """ + Check if the participant actually submitted a zipfile + Returns True if participant submitted a zipfile, otherwise False + + In reality you need to do a lot more validation. + Some things you could check: + - Check if the the file(s) are the correct format (json, html, binary, etc.) + - If the files are in the correct language + """ + + try: + with zipfile.ZipFile(zip_file) as zf: + return True + except zipfile.BadZipFile: + return False +``` + +
+ +
+render_end_page + +```python +def render_end_page(): + """ + Renders a thank you page + """ + page = props.PropsUIPageEnd() + return CommandUIRender(page) + +``` + +
+ +
+render_page + +```python +def render_page(platform: str, body, progress: int): + """ + Renders the UI components + """ + header = props.PropsUIHeader(props.Translatable({"en": platform, "nl": platform })) + footer = props.PropsUIFooter(progress) + page = props.PropsUIPageDonation(platform, header, body, footer) + return CommandUIRender(page) +``` + +
+ +
+generate_retry_prompt + +```python +def generate_retry_prompt(platform: str) -> props.PropsUIPromptConfirm: + """ + Generates a retry screen, this can be used if validation failed for example. + You can aks the participant to try again, and go back to the submit file prompt + """ + text = props.Translatable({ + "en": f"Unfortunately, we cannot process your {platform} file. Continue, if you are sure that you selected the right file. Try again to select a different file.", + "nl": f"Helaas, kunnen we uw {platform} bestand niet verwerken. Weet u zeker dat u het juiste bestand heeft gekozen? Ga dan verder. Probeer opnieuw als u een ander bestand wilt kiezen." + }) + ok = props.Translatable({ + "en": "Try again", + "nl": "Probeer opnieuw" + }) + cancel = props.Translatable({ + "en": "Continue", + "nl": "Verder" + }) + return props.PropsUIPromptConfirm(text, ok, cancel) +``` + +
+ + +
+generate_file_prompt + +```python +def generate_file_prompt(platform: str) -> props.PropsUIPromptFileInput: + """ + Generates a prompt that asks the participant to input a file + """ + description = props.Translatable({ + "en": f"Please follow the download instructions and choose the file that you stored on your device. Click “Skip” at the right bottom, if you do not have a {platform} file. ", + "nl": f"Volg de download instructies en kies het bestand dat u opgeslagen heeft op uw apparaat. Als u geen {platform} bestand heeft klik dan op “Overslaan” rechts onder." + }) + + return props.PropsUIPromptFileInput(description, "application/zip, text/plain") +``` + +
+ +
+generate_consent_prompt + +```python +def generate_consent_prompt(df: pd.DataFrame) -> props.PropsUIPromptConsentForm: + """ + Generates a prompt screen with table(s) with the extract data for the participant to review + """ + table_title = props.Translatable({ + "en": "Zip file contents", + "nl": "Inhoud zip bestand" + }) + table = props.PropsUIPromptConsentFormTable("zip_contents", table_title, df) + return props.PropsUIPromptConsentForm([table], []) +``` + +
+ +
+donate + +```python +def donate(key, json_string): + """ + Sends data to the backend + """ + return CommandSystemDonate(key, json_string) +``` + +
+ + +
+exit_port + +```python +def exit_port(code, info): + """ + When in Next this function exits the data donation task, and lets the participant return to Next + """ + return CommandSystemExit(code, info) +``` + +
+ + +### Start writing your own `script.py` using the api + +Now that you have seen a full example, you can start to try and create your own data donation task. With the elements from the example you can already build some pretty intricate data donation tasks. +Start creating your own by `script.py` by adapting this example to your own needs, for example, instead of file names you could extract data you would actually like to extract yourself. + +If you want to see which up what UI elements are available to you checkout `api/props.py`. In general you need to construct your own pages (prompts) and render them with `render_page` (dont forget `yield`). + +### The usage of `yield` in `script.py` + +Did you notice `yield` instead of return? `yield` makes sure that whenever the code resumes after a page render, it starts where it left off. +If you render a page you need to use yield instead of return, just like in the example. + +### Install Python packages + +The data donation task runs in the browser of the participant, it is important to understand that when Python is running in your browser it is not using the Python version you have installed on your system. +The data donation task is using [Pyodide](https://pyodide.org/en/stable/) this is Python compiled to web assembly that runs in the browser. +This means that packages you have available on your system install of Python, won't be available in the browser. + +If you want to use external packages they should be available for Pyodide, you can check the list of available packages [here](https://pyodide.org/en/stable/usage/packages-in-pyodide.html). +If you have found a package you want to use you can installed it by adding it to the array in the `loadPackages` function in `src/framework/processing/py_worker.js` as shown below: + +```javascript +// src/framework/processing/py_worker.js +function loadPackages() { + console.log('[ProcessingWorker] loading packages') + // These packages are now installed and usable: micropip, numpy, pandas, and lxml + return self.pyodide.loadPackage(['micropip', 'numpy', 'pandas', 'lxml']) +} +``` + +You can now import the packages as you would normally do in Python. + +### Try the donation task from the perspective of the participant + +If you want to try out the above example, follow the installation instructions and start the server with `npm run start`. + +### Tips when writing your own `script.py` + +**Split the extraction logic from the data donation task logic** +You can define your own modules where you create your data extraction, you can `import` those modules in `script.py` + +**Develop in separate script** +You are better off engineering your extraction logic in different scripts and put them in `script.py` whenever you are finished developing. Only do small tweaks in `script.py` + +**Use the console in your browser** +In case of errors they will show up in the browser console. You can use `print` in the Python script and it will show up in the browser console. + +**Keep the diverse nature of DDPs into account** +At least check a couple of DDPs to make sure its reflective of the population you are interesed in. Thinks you can check are: data formats (html, json, plain text, csv, etc.), language settings (they somethines lead to json keys being in a different language or file names other than English). + +**Keep your code efficient** +If your code is not efficient the extraction will take longer, which can result in a bad experience for the participant. In practice I have found that in most cases it's not really an issue, and don't have to pay that much attention to efficiency of your code. +Where efficiency really matters is when you have parse huge html files, beautifulsoup4 is a library that is commonly used to do this, this library is too slow however. As an alternative you can use lxml which is fast enough. + + +**Don't let your code crash** +You cannot have your script crash, if your Python script crashes the task stops as well. This is not a good experience for your participant. +For example in the code you do the following: `value_i_want_to_extract = extracted_data_in_a_dictionary["interesting key"]` if the key `"interesting key"` does not exists, because it does not occur in the data of the participant, the script crashes and the participant cannot continue the data donation task. + +**Data donation checklist** +Creating a good data donation task can be hard due to the variety of DDPs you will encounted. +Check out the following [wiki article](https://github.com/d3i-infra/data-donation-task/wiki/Data-donation-checklist) + + +## Limits of the data donation task + +Currently the data donation task has the following limitations: + +* The data donation task is a frontend, you need to package this together with Next to deploy it. If you want to use it with your own backend you have to make the data donation task compatible with it yourself. A tutorial on how to do this might be added in the future. +* The data donation task is running in the browser of the participant that brings in limitations, such as constraints on the files participant can submit. The limits are around 2GiB thats what Pyodide can handle. But less is better. So keep that in mind whenever you, for example, want to collect data from YouTube: your participants should exclude their own personal videos from their DDP (including these would result in a huge number of separate DDPs of around 2GiB). +* The data donation currently works with text data, nothing keeps us from using other formats in the future (but the constraints on file sizes are still there) +* The data donation task should run fine on mobile, however its not optimized for it, you might need to do some tweaking to the UI yourself diff --git a/_sources/articles/data-donation-checklist.md.txt b/_sources/articles/data-donation-checklist.md.txt new file mode 100644 index 00000000..efc5088e --- /dev/null +++ b/_sources/articles/data-donation-checklist.md.txt @@ -0,0 +1,59 @@ +# Data donation checklist + +Writing data donation scripts can be challenging due to the diverse nature of data download packages (DDPs) your participants will try to submit. +If your participants try to submit a DDP that you did not anticipate your extraction might fail, or your script might crash, in that case you will end up with a non-response and a frustrated participant. + +In order to minimize the number of problems you encounter. We developed a list of points you can pay attention to when developing scripts or performing your own study. + + +**Inspect at least 5 DDPs from persons in the population you are going to sample from** + +Because DDPs will be different for different people, you need to inspect a couple of them (preferably from people from your target population) to learn what those differences are. +You need to verify that the extraction you have in mind works for all DDPs you might encounter. + + +**DDP formats will change over time** + +DDP formats will change over time. Organization providing you with a DDP are under no obligation to keep the format of their DDP the same. The formats could change during data collection, be mindful of this fact. +Before going live with a study request a fresh package of your own and check whether your extraction still works as expected, and in the worst case scenario be ready to change your script during your data donation study. + + +**Validate the DDPs your participant submit and log the results** + +This is crucial to do for two reasons: + +1. If there are multiple versions of a DDP, you need to know which version the participant submitted so you can handle it appropriately. As an example consider the Youtube DDP: depending on the language setting files in the DDP are named differently. Another example is for the Instagram DDPs, keys in json files can be different depending on the language. +2. You probably want to give participants an incentive whenever they did a serious attempt of donating their data. In order to know whether they did a serious attempt you need to validate their DDP to see whether they submitted a package you expect. Example: a participant wants to participate in your study, but finds out its way too much work to request and download a DDP. They submit a random zipfile containing garbage, and they claim they completed the process succesfully. The only way for you to verify whether the participant gave it a fair shot is, to check what they submitted and why that did not result in you receiving data from that participant (If you would have received data its easy to verify they participated). + + +**Write your extraction so it matches the DDP request defaults** + +Often when requesting a DDP participants have a choice, for example you can request a portion of the DDP in html format or json format. The most human readible format (html) is often the default. It will be worth while to tailor your extraction script to the request defaults because participants will not read your instructions where you tell them to get the DDP in json format instead of html. This goes wrong quite often. + +Our way of dealing with this is to bite the bullet and deal with the default DDP formats. This prevents mistakes and keeps the requests instruction for the participant as simple as possible. +Another way of dealing with it is to provide feedback to the participant whenever you detected they submitted the DDP in a format you did not anticipate. + + +**Make sure your code will not crash** + +A crash in your code causes the data donation task to be stuck. The participant will see an error screen with the stacktrace displayed. You don't want this to happen. Carefull programming can prevent your code from crashing. +A common cause for crashes is trying to access a key value pair in a dict that does not exist or sorting a `pd.DataFrame` column that does not exist. Most crashes will be caused by your expectation that the extraction is in a certain format, while in some cases it won't be. + + +**Make the least amount of assumptions possible about the data in a DDP** + +The more assumptions you make about the data the more opportunities your code has to fail. Some examples: + +* Date parsing: Only parse date when its absolutely required. Date formats can be wildly different between participants, anticipating them all or writing code that can parse all dates you might encounter is less trivial than you might think. +* Files in a zip: You can look for file paths you are interested in, or only file names you are interested in. If the file name is unique, there is no need to check for the full file path. Example: if the folder structure in a zip changes but files remain the same, the code that looks only at file names will still work. +* Nested dictionaries: Sometimes you are interested in a value in a dict that is heavily nested. An approach you can take, instead of doing `dict["key1"]["key2"]["key3"]["key_that_sometimes_is_called_something_different"]["key_which_value_you_want"]`, you can to first denest or flatten the dictionary start looking directly for "key_which_value_you_want". You can find an example [here](https://github.com/d3i-infra/port-vu-pilot/blob/master/src/framework/processing/py/port/helpers.py), look for `dict_denester` and `find_items`. + + +**The researcher is responsible for providing you with DDPs and should be knowledgeable about the data** + +If you are reading this checklist chances are you are going to create a data donation task. It could be the case that you are not the principal investigator of the project but just an engineer or person with some coding experience helping the researcher out. Some researchers expect you to be the one to have knowledge about a certain DDP they are interested in. Some researchers believe that because you are working with data, you also have that data available to you, know what it all means or whether data is present in a DDP. This is of course not always the case. Communicate clearly to the researcher that they responsible for the contents of their study, they should know what the data means and that they should tell you what to extract. In some cases the researcher might not even use the platform they are interested in, if that is the case, tell the researcher to start using the platform they are interested in so they can start instructing you on what to extract. + + +**Test a study carefully before you go live** + +All researchers involved in the research group should test the study before you go live. A data donation study has more points of failure compared to traditional survey research, therefore its crucial that every researcher that is involved will test the complete data donation flow and shares their findings with you. diff --git a/_sources/articles/deployment.md.txt b/_sources/articles/deployment.md.txt new file mode 100644 index 00000000..13b8d6fe --- /dev/null +++ b/_sources/articles/deployment.md.txt @@ -0,0 +1,100 @@ +# Deployment of the data donation task + +This article will discuss the option you have when using the data donation task in a data donation study. +The data donation task is designed to be used with Next. + +## The data donation task with Next + +Next is a software as a service platform developed by [Eyra](https://eyra.co/). +As a researcher you can log in to Next and configure data donation study, this means: + +1. Configuring a landing zone for your participants: I.e. a Consent form page, an information page, a privacy policy +2. Configure a task list for your participants to complete: After the landing zone participants see a list of task they have to complete, typically these tasks are: viewing instruction on how to request and download data from a specific platform and administering the data donation task that you developed using this repository +3. Configuring where the donated data should be stored. Next has solutions for: AWS, Azure and Yoda. + +After configuration participants can be sent to Next with a unique id in the url. This unique key id be used when storing the data, so you know who donated their data + +### Next as a paid service + +You can use Next as a paid service provided by [Eyra](https://eyra.co/). +Please contact Eyra if this is something you are interested in. + + +### Self service Next (community version) on Surf Research Cloud + +Next is available as an offering on [Surf Research Cloud](https://www.surf.nl/en/services/surf-research-cloud) available for Researchers at Dutch universities and universities of applied sciences. +This offering on Surf Research Cloud comes with no service or warranties. + +#### Applying for an EINFRA grant + +In order to use Surf Research Cloud you need credits. + +Dutch researchers can get credits on Surf Research Cloud by applying for an EINFRA grant. You can apply for an EINFRA grant [here](https://www.surf.nl/en/small-compute-applications-nwo), then: + +1. Click "Straight to the request portal". +2. Under "Apply for access" click "Small Compute applications (NWO)" +3. Fill in and submit the form (see the instructions below) + +#### Instructions to fill in the EINFRA grant form + +Most fields in the form are self explanatory or optional. Here we explain the fields that aren't self explanatory: + +*Description* + +Put here a small description of what you intent to do. Explain that you want to do a data donation study. + +*Scientific project descrition* + +Put down the description of your research project, you could copy and paste this from a grant proposal. + +*Technical project requirements* + +In this section you need to explain what resources you need. Based on the resources you need you will receive the appropriate amount of credits. +This is an example descrition of the technical project requirements for data donation: + + We want to do a data donation study using the "Next for data donation" catalog item. This catalog item provisions a workspace running software that we can use to configure a data donation study. + This workspace needs to be available for the duration of our study. The workspaces uses 8 GiB of Memory and uses 2 cores. The workspace needs to be available for weeks. + Therefore we need: * 7 (days) * 24 (hours) * 2 (cores) * 1.1 (10 percent extra) = X core/hours. We would need 50 GiB of storage. From SURF we do not request assistance with the deployment. + +You need to adapt it to your situation. You should realize that if the workspace is provisioned (meaning its "on" or "running") credits will be deducted. Try to be realistic for the amounts of weeks you need, but take into account unforseen events. + +*Resources* + +Research Cloud - HPC Cloud + +*Research Drive: Do you need storage in Research Drive?* + +50 GiB + +#### After you received the EINFRA grant + +You need to contact [datadonation.eu](https://datadonation.eu/) they will make the "Next self service" catalog item available to you. + + +### Self service Next (community version) + +Next is a free and open source tool and you could host it yourself. You can find Next [here](https://github.com/eyra/mono/blob/master/SELFHOSTING.md). You can try it out using Docker, check the tutorial {doc}`./next-in-docker` + + + +### Which option should I choose? + +* Next as a paid service: If you have research budget; want to be unburdened and get your data donation study done, this is the best option. +* Self service community Next on Surf Research Cloud: You are a researcher at a Dutch university with no budget this is the best option. When choosing this option you have to realize that it comes with no service or warranties, you have to know what you are doing. +* Self service community Next: If you want to provide Next as a service to your organization. + + +### Add data donation task to your data donation study on Next + +After you have created your data donation task with this repository, you can use this task directly in Next. You can do this as follows: + +1. In the data donation task run the command `npm run release`, this creates a zip file named `release.zip` +2. In Next when configuring your data donation study, go to work flow and create a new item task list item called data donation task +3. In the newly created task list item select the `release.zip` you have just created + +Your data donation task list item is configured! + + +## Use the data donation task without Next + +The data donation task can be adapted so it works with your own bespoke back end. A tutorial on how to do this is might be added in the future. diff --git a/_sources/articles/index.rst.txt b/_sources/articles/index.rst.txt new file mode 100644 index 00000000..c1474238 --- /dev/null +++ b/_sources/articles/index.rst.txt @@ -0,0 +1,13 @@ +Articles +======== + +.. toctree:: + :maxdepth: 2 + + introduction-to-data-donation.md + installation.md + creating-your-own-data-donation-task.md + visualizations.md + data-donation-checklist.md + deployment.md + next-in-docker.md diff --git a/_sources/articles/installation.md.txt b/_sources/articles/installation.md.txt new file mode 100644 index 00000000..8137653f --- /dev/null +++ b/_sources/articles/installation.md.txt @@ -0,0 +1,89 @@ +# Installation + +This guide covers the installation of the data donation task locally, so you can start creating your own data donation study! + +## Installation Guide for the Pre-requisites + +You need to install the following software: + +- Python: Make sure it is at least version 3.10 +- Node.js: Make sure it is at least version 16 +- [Poetry](https://python-poetry.org/): It is a build system for Python packages that the data donation task uses. + +Below you can find more detailed instructions on how to install the required software depending on your operating system. +These instructions are just suggestions, always prefer the official instructions that suite your situation best. + +### Linux + +You can install Python and Node.js from the official repositories of your distribution. Here are the general steps: + +1. Open your terminal +2. Use your package manager to install Python and Node.js +3. Install Poetry using pipx, see the instruction [manual](https://python-poetry.org/docs/) + +### Mac OSX + +If you are using a Mac OSX, you can install Python and Node.js using the [HomeBrew](https://brew.sh/) package manager. Follow these steps: + +1. Open your terminal +2. Install HomeBrew following [instructions](https://brew.sh/) if you haven't already +3. Install Python and Node.js by runnning: `brew install python node` +4. Install Poetry using pipx, see the instruction [manual](https://python-poetry.org/docs/) + + +### Windows + +In order to develop on Windows we recommend using Windows Subsystem for Linux (WSL) in combination with VSCode. +Windows subsystem for Linux is a convenient way of running Linux on Windows. +This section will contain a bit more context because the steps might be less familiar to Windows only users. + +If you are already familiar with WSL/Linux, VSCode or both, the installation won't give you too much trouble. +If you are completely new to WSL (or Linux) expect a certain amount of problem solving you have to do. +Key topics to understand are: WSL, and the Ubuntu basics; knowledge on these topics will help you a lot. + +1. Install WSL, see the official installation [instructions](https://learn.microsoft.com/en-us/windows/wsl/install) +2. Install the default Linux distro (Ubuntu 22.04 at the time of writing) and choose a username and password +3. Download and install VSCode +4. Connect VSCode to WSL, see [instructions](https://code.visualstudio.com/docs/remote/wsl-tutorial) +5. Now you can follow the instructions for Linux, Note that Python will be already installed for you + +In theory these steps should cause no problems but in reality you have a couple of issues you could run into. I will discuss some of them I encountered here: + +* You have the be an administrator of your own device. If you are not an administrator you cannot continue the installation +* In order to install WSL, kernel virtualization needs to be on. You can go into the Windows Task Manager and check whether it is on. If its not on, you have to turn it on in the bios of your motherboard. Check what CPU you have (AMD or Intel) and check what the settings is called. If the setting is not present in the bios your CPU might not support virtualization, this means you cannot run WSL +* If you have WSL 1 installed make sure you continue with WSL 2 +* Make sure you don't forget the username and password you chose during the installation +* If you have VSCode open make sure you are connected to WSL, you can check this by looking at the "><" icon in the lower left corner of VSCode +* Remember that if you are connected to WSL with VSCode you are working in Ubuntu. Programs and files are not shared between Windows and Ubuntu, meaning if you have installed a program on Windows is not available for Ubuntu and vice versa. +* Remember to not use Powershell when connected to WSL use bash +* If you see error messages related to Windows in the terminal (something with cmd.exe for example), you know that Ubuntu is trying to open a program on Windows. This will never work. This is happening because Windows manipulates the PATH variable on Ubuntu that contains information about where the programs Ubuntu can open are. Example: you want to check which version of node you have `node -v` and you get an error with cmd.exe in the error message. Solutions: uninstall the windows version of the Node.js or manipulate the PATH variable so it does not try to open the Windows version of Nodejs. How to do that is outside the scope of this manual. +* To run port you need version Nodejs version 18 this version is not in the official Ubuntu 22.04 repositories. See for example this [guide](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04) on how to get nodejs version 18. If you run into errors you are expected to search for them and to solve them + +#### Don't want to use WSL? + +That's completely fine too, you can change the commands in `package.json` so they work on Windows instead. + +## Installation of the data donation task + +If you have the Pre-requisites installed the installation of the data donation task should be straightforward. + +1. Clone the repository: + +``` +git clone https://github.com/d3i-infra/data-donation-task.git +``` + +2. Install the dependencies by running the following commands: + +``` +cd ./data-donation-task +npm install +``` + +3. Start a local web server to server the data donation app: + +``` +npm run start +``` + +You can now go to the browser: [`http://localhost:3000`](http://localhost:3000) and you should be greeted by a mock data donation task diff --git a/_sources/articles/introduction-to-data-donation.md.txt b/_sources/articles/introduction-to-data-donation.md.txt new file mode 100644 index 00000000..e4b24f63 --- /dev/null +++ b/_sources/articles/introduction-to-data-donation.md.txt @@ -0,0 +1,5 @@ +# Introduction to Data Donation + +We have produced 2 videos detailing the concept of data donation, accessible on our website at [datadonation.eu/data-donation](https://datadonation.eu/data-donation/). + +Additionally, our [website](https://datadonation.eu) provides guidance on how to set up a data donation study; simply refer to the "Prepare a study" tab. diff --git a/_sources/articles/next-in-docker.md.txt b/_sources/articles/next-in-docker.md.txt new file mode 100644 index 00000000..ed0beaff --- /dev/null +++ b/_sources/articles/next-in-docker.md.txt @@ -0,0 +1,198 @@ +# Try out Next with Docker + +This tutorial outlines how you can run Next in a docker container. + +This is great for trying out the Next platform and will show you the necessary settings so you could use it in production. + +## Prerequisites + +In order for you to try out Next you need to set up some prerequisites. + +### Unsplash + +Configure a developer account at [unsplash](https://unsplash.com/) and get an API key. You can do this for free. + +Unsplash is used as the source for banner images used to customize studies. + + +### Google OIDC + +Configure a google OIDC connect application in the [google cloud console](https://console.cloud.google.com/welcome?project=stalwart-yen-241815). For the details check the [official instructions](https://developers.google.com/identity/openid-connect/openid-connect). + +Google OIDC (OpenID Connect) is used to manage user authentication and account sign-ins. + + +## Run Next in a Docker container + +In this step, we will create and run the necessary containers using Docker Compose. + +We are going to create a folder with the following structure: + +``` +. +├── docker-compose.yaml +├── proxy +│   ├── certs +│   │   ├── nginx-selfsigned.crt +│   │   └── nginx-selfsigned.key +│   └── conf +│   └── nginx.conf +``` + +In the next step we are going to create the files. + + +### Build the Next Docker image + +Clone or fork [Next](https://github.com/eyra/mono) + +`cd` into `/core` + +and build the image with: + +``` +docker build --build-arg VERSION=1.0.0 --build-arg BUNDLE=self . -t self-d3i:latest +``` + +### Setup certificates for TLS + +Create certificates and put them in `proxy/certs` + +``` +openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx-selfsigned.key -out nginx-selfsigned.crt +``` + +### Nginx configuration + +We are going to use Nginx as [reverse proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/). + +Nginx will be used to provide TLS for our HTTP connections. + +Paste the following nginx configuration in `proxy/conf`: + +``` +# nginx.conf +events {} +http { + server { + listen 80; + listen [::]:80; + server_name localhost; + + # Redirect all HTTP requests to HTTPS + return 301 https://$server_name$request_uri; + } + + server { + server_name localhost; + + if ($scheme != "https") { + return 301 https://$host$request_uri; + } + + location / { + allow all; + proxy_pass http://app:8000; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_max_temp_file_size 1m; + } + + listen 443 ssl; + ssl_certificate /etc/nginx/certs/nginx-selfsigned.crt; + ssl_certificate_key /etc/nginx/certs/nginx-selfsigned.key; + } +} +``` + +This Nginx configuration works with websocket connections which Next (Phoenix web application) uses. + + +### Docker compose yaml + +Now create the docker-compose.yaml: + +``` +#docker-compose.yaml +services: + app: + image: self-d3i:latest + container_name: self-d3i + restart: always + environment: + APP_NAME: next + APP_DOMAIN: localhost + APP_MAIL_DOMAIN: "@gmail" + APP_ADMINS: youremail@gmail.com + DB_USER: user + DB_PASS: password + DB_HOST: db + DB_NAME: test_database + SECRET_KEY_BASE: "aUMZobj7oJn58XIlMGVcwTYrCsAllwDCGlwDCGlwDCGwDChdhsjahdghaggdgdGt7MoQYJtJbA=" + STATIC_PATH: "/tmp" + UNSPLASH_ACCESS_KEY: "" + UNSPLASH_APP_NAME: "" + GOOGLE_SIGN_IN_CLIENT_ID: "" + GOOGLE_SIGN_IN_CLIENT_SECRET: "" + STORAGE_SERVICES: "builtin, yoda, azure" + volumes: + - app_data:/tmp + depends_on: + - db + + db: + image: postgres:latest + container_name: db-next + restart: always + environment: + POSTGRES_USER: user + POSTGRES_PASSWORD: password + POSTGRES_DB: test_database + volumes: + - postgres_data:/var/lib/postgresql/data + + proxy: + image: nginx:latest + container_name: nginx + ports: + - 443:443 + volumes: + - ./proxy/conf/nginx.conf:/etc/nginx/nginx.conf + - ./proxy/certs:/etc/nginx/certs + depends_on: + - app + +volumes: + postgres_data: + app_data: +``` + +and replace the following variables with the values you obtained in the previous steps: + +``` +UNSPLASH_ACCESS_KEY: "" +UNSPLASH_APP_NAME: "" +GOOGLE_SIGN_IN_CLIENT_ID: "" +GOOGLE_SIGN_IN_CLIENT_SECRET: "" +``` + +If you want to learn more about the variables you can read the [documentation](https://github.com/eyra/mono/blob/master/SELFHOSTING.md). + +Now you are ready to start the containers with: + +``` +docker compose up +``` + +Go to `https://localhost:80` and if everything went well you should see Next. + +Note: because you self-signed your TLS certificates your browser will complain: accept all the risks and continue. + +## Next steps in Next + +Now you can play around in Next. If you want to login as admin go to `/admin/login`. diff --git a/_sources/articles/visualizations.md.txt b/_sources/articles/visualizations.md.txt new file mode 100644 index 00000000..e6012616 --- /dev/null +++ b/_sources/articles/visualizations.md.txt @@ -0,0 +1,195 @@ +# Adding data visualizations + +You can add data visualizations to the consent form page, that will be shown below a data table. These visualizations will dynamically aggregate and visualize the data, responding to search queries and deleted items. + +Good visualizations can help participants to see and explore what data they are about to donate, and thereby support informed consent. Furthermore, it can make the data donation process more educational and enjoyable. + +## Adding visualizations to tables + +Visualizations are always directly connected to a **consent form table**. When in script.py you create a consent form table, you can implement visualizations as follows: + +```python +table_title = props.Translatable({ + "en": "Table title", + "nl": "Tabel titel" +}) + +table = props.PropsUIPromptConsentFormTable( + id = "tableId", + title = table_title, + data_frame = df, + visualizations = []) +``` + +You can now add one or multiple **visualization specifications** to the `visualizations` list. + +## Visualization Specification + +A visualization specification provides instructions for creating a visualization based on the data in the table. This visualization will then be created dynamically, so that when the table is updated (e.g., when participants search the data or remove rows) the visualization is updated as well. + +A specification covers three main components: + +- **Aggregation**: How should the table data be aggregated. e.g., count the number of rows per day +- **Display**: How should the aggregated data be displayed? e.g., line chart, bar chart, wordcloud +- **Labels**: Any labels to help along interpretation, optionally with translations (as seen above in the table_title) + +A detailed explanation of the visualizatoin specification is shown below in the **Specification Guide**. But we recommend first having a look at the following examples. + +## Examples + +Say we have data about every time a participant viewed a certain channel, and we also also know the channel category (e.g., sports, entertainment) and the exact timestampe. We have put this in a `data_frame` with the columns: **channel**, **category** and **timestamp**. We can then make a number of different visualizations. + +### Categorical variables | Bar chart of views per category + +```python +vis1 = dict( + title = dict(en= "views per category", ...), + type = "bar", + group = dict(column = "category", label = "Category") + values = [dict(aggregate = "count", label = dict(en = "number of views", ...))] +) +``` + +The **type** determines the chart type, and can in this case be "bar","line" or "area". The **group** determines how the data should be grouped and aggregated, which in this case is per category. The **values** determines the values to calculate per group, which here is just the count of the rows. + +**!!!** Notice that `values` is a list, and not a single dictionary. Adding multiple value dictionaries will create multiple y-values, for grouped barcharts or multiple lines or areas. + +The **label**'s can be either a single _string_ (as in the `group`) or a dictionary with different languages, where keys are country codes, and values are labels (as in the `values`). + +### Date variables | Area chart of views per month + +```python +vis2 = dict( + title = dict(en= "views over time", ...), + type = "area", + group = dict(column = "timestamp", dateFormat = "month", label = "Month") + values = [dict(aggregate = "count", label = dict(en = "number of views", ...))] +) +``` + +In this area chart (i.e. a line chart where the area below the line is coloured) we group the data by month, and use the same aggregation values as in the previous example to count the number of views per group. + +The **dateFormat** grouping variable can be set if the column is a date string in ISO format: `YYYY-MM-DD` for date or `YYYY-MM-DD HH:MM:SS` for datetime (You can also use `YYYY-MM-DDTHH:SS:MM)`, but that doesn't look niced in the table). + +The following formats are supported: + +- **Fixed interval**: "year", "quarter", "month", "day", "hour" +- **Automatic interval**: "auto" will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with "hour" interval) +- **cycles / season**: "month_cycle" (January - December), "weekday_cycle" (Monday - Sunday) and "hour_cycle" (1 - 24). + +### Second-level aggregation | Line chart of views over time per category + +Above we mentioned that you can add multiple values to create multiple y-values. But this only works if your data is _wide_. Alternatively, you can also perform a second-level aggregation on _long_ data. + +```python +vis3 = dict( + title = dict(en= "views per category over time", ...), + type = "line", + group = dict(column = "timestamp", dateFormat = "auto", label = "Month") + values = [dict( + aggregate = "count", + label = dict(en = "number of views", ...), + group_by = "category" + )] +) +``` + +Here we changed three things. First, we changed the type to "line", because that's a bit easier on the eye with multiple y-values. Second, we added `group_by` to the aggregation value, setting it to "category". This will break the values data into groups for categories, and calculate the aggregation statistic per category. This will be visualized as a line chart where the frequency of each category (e.g., sport, entertainment) will be displayed on separate lines. + +A third change is that we set the dateFormat to "auto" instead of fixing it to "month". This will automatically pick a suitable time interval based on the range of column (last date - first date). This could mean that different participants see different intervals, depending on what works best for their own data. + +### Text variables | A wordcloud + +As a final example, we'll look at a different sub-specification for visualizing textual data. We'll make a wordcloud of channels, based on their frequency in the data. + +```python +vis4 = dict( + title = dict(en= "Most viewed channels", ...), + type = "wordcloud", + textColumn = 'channel', + tokenize = False, +) +``` + +This creates a wordcloud of the full channel names. Note that we could also have tokenized the texts, but for channels (e.g., YouTube channels) the full names are probably most informative. + +## Example wrap-up + +Now that we have created visualizations, we can add them to the consent form table. Note that above we assigned our specifications to **vis1** to **vis4**. We can now simply add them to the visualiations list. + +```python +table = props.PropsUIPromptConsentFormTable( + id = "tableId", + title = table_title, + data_frame = df, + visualizations = [vis1, vis2, vis3, vis4]) +``` + +## Specification guide + +This is an overview of the visualiation specification. First, there are some **general visualization arguments** that every visualization has. Second, there are specific arguments depending on the visualization **type** + +### General visualization arguments + +Every visualization has the following arguments + +- **title**: A title for the visualization. This has to be a translation dictionary (see **translation** spec below) +- **type**: The type of the visualization. The type determines what specification you need to follow + - **Chart visualiation**: "line", "bar" or "area" + - **Text visualization**: "wordcloud" +- **height (optional)**: The height of the chart in pixels + +### Chart visualization arguments + +Chart visualizations work by aggregating the data into X, Y and optionally Z axes. It's the basis for most common charts. + +- **type**: "line", "bar" or "area" +- **group**: specifies the column to group and aggregate the data by. The group is visualized on the x-axis. + - **label**: x-axis label. Either a string or translation dictionary (see **translation** spec below) + - **column**: the name of the column + - **dateFormat (optional)**: if column is a date, select how it should be grouped. (see **dateFormat** spec below) + - **levels (optional)**. A list of strings with the specific column values to use. This also makes sure these values are displayed if they are missing in a participants data (also see **values** -> **addZeroes**) +- **values**: A list (**!!**) of objects. Each object specifies an (aggregate) value to calculate per group. A value is visualized on the y-axis. Multiple values can be given for multiple y-values + - **label**: y-axis label. Either a string or translation dictionary (see **translation** spec below) + - **column (optional)**: the column based on which the value is calculated. Can be empty if just counting rows. + - **aggregate**: The aggregation function. (see **aggregate** spec below) + - **addZeroes**: Boolean. If true, add zeroes for empty groups. If **levels** are specified, participants will explicitly see that they occured zero times in their data. If **dateFormat** is used, this fills possible gaps (note that this mostly makes sense for row "count" aggregations where absense implies zero) + - **group_by (optional)**: the name of a column to do a second-level aggregation. This will create multiple y-values where the value in the column becomes the label. + +### Text visualization arguments + +Text visualizations take a text column as input. + +- **type**: "wordcloud" +- **textColumn**: A text (string) column in the data +- **tokenize (optional)**: Boolean. If true, the text will be tokenized +- **valueColumn (optional)**: By default, every text or token will be given a value based on the number of rows in which it occurs. Alternatively, you can specify a numeric column, in which case (the sum of) the values in this column will be used. +- **extract (optional)**: Normally, all preprocessing of the data should be handled in the import scripts, but for convenience we will provide some common methods for extracting parts of a string. Currently supports: + - "url_domain": If the column contains URLs, extract only the domain. + +### Spec details + +Here are some details for the more complicated spec components. + +#### - translation + +A translation dictionary has country codes as keys and the translations as values: `dict(en = "english label", nl = "dutch label")`. (This is identical to the dictionary used in the `props.Translatable`) + +#### - dateFormat + +If column is a date (`YYYY-MM-DD`, `YYYY-MM-DD HH:MM` or `YYYY-MM-DD HH:MM:SS`), select how the date is grouped. options are: + +- **Fixed interval**: "year", "quarter", "month", "day", "hour" +- **Automatic interval**: "auto" will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with "hour" interval) +- **cycles / season**: "month_cycle" (January - December), "weekday_cycle" (Monday - Sunday) and "hour_cycle" (1 - 24). + +#### - aggregate + +The function by which to aggregate the column in `values`. The following functions are currently supported + +- "count" just counts the rows +- "mean" and "sum" require the value column to be numeric. +- "count_pct" gives the count as a percentage of the total number of rows.\* +- "pct" sums the values of a numeric column and divides by the total sum.\* + +**\*** _If a secondary aggregation is used, percentages are calculated within the primary aggregation group_ diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..bb6395e0 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,43 @@ +The Data Donation Task Documentation +==================================== + +Welcome to the Data Donation Task Documentation! + +This is the place to learn about the data donation task. + +Getting started +--------------- + +Checkout the following wiki articles to get started: + +.. toctree:: + :maxdepth: 2 + + articles/index + +API Reference +----------------- + +You can find the API documentation here: + +.. toctree:: + :maxdepth: 3 + + api/index + +Standard scripts +---------------- + +We provide standard extraction scripts for a various platforms which you can find here: + +.. toctree:: + :maxdepth: 1 + + standard_scripts/index + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_sources/standard_scripts/index.rst.txt b/_sources/standard_scripts/index.rst.txt new file mode 100644 index 00000000..f38e98ce --- /dev/null +++ b/_sources/standard_scripts/index.rst.txt @@ -0,0 +1,32 @@ +Platform Documentation +============================= + +For various platforms we provide default extraction scripts, so you do not have to invent the wheel. + +Freel free to use the extraction scripts as you see fit. + +In order to use the scripts open the file `src/framework/processing/py/port/main.py` and change this line: + +.. code-block:: python + + from port.script import process + +to: + +.. code-block:: python + + #from port.script import process + + # Change to (in this case the standard script for instagram will be used): + from port.platforms.instagram import process + +Available platforms +------------------- + +.. automodule:: port.platforms.chatgpt + + +Instagram +--------- + +.. automodule:: port.platforms.instagram diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..7ebbd6d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,914 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/basic_mod.css b/_static/basic_mod.css new file mode 100644 index 00000000..0df77588 --- /dev/null +++ b/_static/basic_mod.css @@ -0,0 +1,1194 @@ +@font-face { + font-family: Roboto; + font-style: normal; + font-weight: 400; + src: local("Roboto"), local("Roboto-Regular"), url(fonts/roboto/roboto.woff2) format("woff2"); +} +@font-face { + font-family: Roboto; + font-style: italic; + font-weight: 400; + src: local("Roboto Italic"), local("Roboto-Italic"), url(fonts/roboto/roboto-italic.woff2) format("woff2"); +} +@font-face { + font-family: Roboto; + font-style: normal; + font-weight: 700; + src: local("Roboto Bold"), local("Roboto-Bold"), url(fonts/roboto/roboto-bold.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: normal; + font-weight: 400; + src: local("Roboto Mono Regular"), local("RobotoMono-Regular"), url(fonts/roboto-mono/roboto-mono.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: italic; + font-weight: 400; + src: local("Roboto Mono Italic"), local("RobotoMono-Italic"), url(fonts/roboto-mono/roboto-mono-italic.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: normal; + font-weight: 700; + src: local("Roboto Mono Bold"), local("RobotoMono-Bold"), url(fonts/roboto-mono/roboto-mono-bold.woff2) format("woff2"); +} +@font-face { + font-family: Roboto Mono; + font-style: italic; + font-weight: 700; + src: local("Roboto Mono Bold Italic"), local("RobotoMono-BoldItalic"), url(fonts/roboto-mono/roboto-mono-bold-italic.woff2) format("woff2"); +} +/*****************************************************************************/ +/* Typography */ +:root { + --codeBackgroundColor: #f8f8f8; + --inlineCodeBackgroundColor: #f8f8f8; + --codeBlue: #0000ff; + --codeGreen: #008000; + --dividerColor: rgba(0, 0, 0, 0.08); + --faintFontColor: rgba(0, 0, 0, 0.6); + --fontColor: #252630; + --linkColor: #2980b9; + --mainBackgroundColor: white; + --mainNavColor: #3889ce; + --notificationBannerColor: #176bb0; + --searchHighlightColor: #fff150; + --sidebarColor: white; + --navbarHeight: 4rem; +} +:root[data-mode=darkest] { + --mainBackgroundColor: black; + --sidebarColor: black; + --codeBackgroundColor: rgba(255, 255, 255, 0.1); + --inlineCodeBackgroundColor: rgba(255, 255, 255, 0.1); +} +:root[data-mode=dark] { + --mainBackgroundColor: #242429; + --sidebarColor: #242429; + --codeBackgroundColor: rgba(0, 0, 0, 0.1); + --inlineCodeBackgroundColor: rgba(255, 255, 255, 0.06); +} +:root[data-mode=dark], :root[data-mode=darkest] { + --codeBlue: #77baff; + --codeGreen: #38c038; + --dividerColor: rgba(255, 255, 255, 0.1); + --faintFontColor: rgba(255, 255, 255, 0.6); + --fontColor: white; + --linkColor: #319be0; + --searchHighlightColor: #fe8e04; +} + +body { + font-family: Roboto, "OpenSans", sans-serif; + background-color: var(--mainBackgroundColor); + color: var(--fontColor); +} + +h1 { + font-size: 2rem; +} + +h2 { + font-size: 1.5rem; +} + +h3 { + font-size: 1.17rem; +} + +a { + color: var(--linkColor); + text-decoration: none; +} + +/*****************************************************************************/ +html { + height: 100%; + scroll-padding-top: var(--navbarHeight); +} + +html, +body { + padding: 0; + margin: 0; + min-height: 100%; +} + +body { + display: flex; + flex-direction: column; +} + +/*****************************************************************************/ +/* Top nav */ +#searchbox h3#searchlabel { + display: none; +} +#searchbox form.search { + display: flex; + flex-direction: row; +} +#searchbox form.search input { + display: block; + box-sizing: border-box; + padding: 0.3rem; + color: rgba(0, 0, 0, 0.7); + border-radius: 0.2rem; +} +#searchbox form.search input[type=text] { + border: none; + background-color: rgba(255, 255, 255, 0.6); + flex-grow: 1; + margin-right: 0.2rem; +} +#searchbox form.search input[type=text]::placeholder { + color: rgba(0, 0, 0, 0.6); +} +#searchbox form.search input[type=submit] { + cursor: pointer; + color: var(--mainNavColor); + flex-grow: 0; + border: none; + background-color: white; +} + +div#top_nav { + position: fixed; + top: 0; + left: 0; + right: 0; + color: white; + z-index: 100; +} +div#top_nav div#notification_banner { + background-color: var(--notificationBannerColor); + box-sizing: border-box; + padding: 0.1rem 1rem; + display: flex; + flex-direction: row; + align-items: center; + justify-content: right; +} +div#top_nav div#notification_banner a.close { + flex-grow: 0; + flex-shrink: 0; + color: rgba(255, 255, 255, 0.85); + text-align: right; + font-size: 0.6rem; + text-transform: uppercase; + display: block; + text-decoration: none; + margin-left: 0.5rem; +} +div#top_nav div#notification_banner a.close:hover { + color: white; +} +div#top_nav div#notification_banner p { + flex-grow: 1; + margin: 0; + text-align: center; + font-size: 0.9rem; + line-height: 1.2; + padding: 0.4rem 0; +} +div#top_nav div#notification_banner p a { + color: white; + text-decoration: underline; +} +div#top_nav nav { + background-color: var(--mainNavColor); + box-sizing: border-box; + padding: 1rem; + display: flex; + flex-direction: row; + align-items: center; +} +div#top_nav nav h1 { + flex-grow: 1; + font-size: 1.2rem; + margin: 0; + padding: 0 0 0 0.8rem; + line-height: 1; +} +div#top_nav nav h1 a { + color: white; +} +div#top_nav nav h1 img { + height: 1.3rem; + width: auto; +} +div#top_nav nav p#toggle_sidebar { + transform: rotate(90deg); + letter-spacing: 0.1rem; + flex-grow: 0; + margin: 0; + padding: 0; +} +div#top_nav nav p#toggle_sidebar a { + color: white; + font-weight: bold; +} +div#top_nav nav a#mode_toggle, div#top_nav nav a#source_link { + margin-right: 1rem; + display: block; + flex-grow: 0; +} +div#top_nav nav a#mode_toggle svg, div#top_nav nav a#source_link svg { + height: 1.3rem; + width: 1.3rem; + vertical-align: middle; +} +div#top_nav nav p.mobile_search_link { + margin: 0; +} +@media (min-width: 50rem) { + div#top_nav nav p.mobile_search_link { + display: none; + } +} +div#top_nav nav p.mobile_search_link a { + color: white; +} +div#top_nav nav p.mobile_search_link a svg { + height: 1rem; + vertical-align: middle; +} +@media (max-width: 50rem) { + div#top_nav nav div.searchbox_wrapper { + display: none; + } +} +div#top_nav nav div.searchbox_wrapper #searchbox { + align-items: center; + display: flex !important; + flex-direction: row-reverse; +} +div#top_nav nav div.searchbox_wrapper #searchbox p.highlight-link { + margin: 0 0.5rem 0 0; +} +div#top_nav nav div.searchbox_wrapper #searchbox p.highlight-link a { + color: rgba(255, 255, 255, 0.8); + font-size: 0.8em; + padding-right: 0.5rem; + text-decoration: underline; +} +div#top_nav nav div.searchbox_wrapper #searchbox p.highlight-link a:hover { + color: white; +} + +/*****************************************************************************/ +/* Main content */ +div.document { + flex-grow: 1; + margin-top: 2rem; + margin-bottom: 5rem; + margin-left: 15rem; + margin-right: 15rem; + padding-top: var(--navbarHeight); + /***************************************************************************/ + /***************************************************************************/ +} +@media (max-width: 50rem) { + div.document { + margin-left: 0px; + margin-right: 0px; + } +} +div.document section, +div.document div.section { + margin: 4rem 0; +} +div.document section:first-child, +div.document div.section:first-child { + margin-top: 0; +} +div.document section > section, +div.document div.section > div.section { + margin: 4rem 0; +} +div.document section > section > section, +div.document div.section > div.section > div.section { + margin: 2rem 0 0 0; +} +div.document section > section > section > section, +div.document div.section > div.section > div.section > div.section { + margin: 1.5rem 0 0 0; +} +div.document h1 + section, +div.document h1 + div.section { + margin-top: 2.5rem !important; +} +div.document h2 + section, +div.document h2 + div.section { + margin-top: 1.5rem !important; +} +div.document img { + max-width: 100%; +} +div.document code { + padding: 2px 4px; + background-color: var(--inlineCodeBackgroundColor); + border-radius: 0.2rem; + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; + font-size: 0.9em; +} +div.document div.documentwrapper { + max-width: 45rem; + margin: 0 auto; + flex-grow: 1; + box-sizing: border-box; + padding: 1rem; +} +div.document div.highlight { + color: #252630; + box-sizing: border-box; + padding: 0.2rem 1rem; + margin: 0.5rem 0; + border-radius: 0.2rem; + font-size: 0.9rem; +} +div.document div.highlight pre { + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; +} +div.document div[class*=highlight] { + overflow-x: auto; +} +div.document a.headerlink { + font-size: 0.6em; + display: none; + padding-left: 0.5rem; + vertical-align: middle; +} +div.document h1, +div.document h2, +div.document h3, +div.document h4, +div.document h5, +div.document h6, +div.document str, +div.document b { + font-weight: 700; +} +div.document h1 { + margin: 0.8rem 0 0.5rem 0; +} +div.document h2 { + margin: 0.8rem 0 0.5rem 0; +} +div.document h3, div.document h4 { + margin: 1rem 0 0.5rem 0; +} +div.document h1:hover a.headerlink, +div.document h2:hover a.headerlink, +div.document h3:hover a.headerlink, +div.document h4:hover a.headerlink { + display: inline-block; +} +div.document p, +div.document li { + font-size: 1rem; + line-height: 1.5; +} +div.document li p { + margin: 0 0 0.5rem 0; +} +div.document ul, div.document ol { + padding-left: 2rem; +} +div.document ol.loweralpha { + list-style: lower-alpha; +} +div.document ol.arabic { + list-style: decimal; +} +div.document ol.lowerroman { + list-style: lower-roman; +} +div.document ol.upperalpha { + list-style: upper-alpha; +} +div.document ol.upperroman { + list-style: upper-roman; +} +div.document dd { + margin-left: 1.5rem; +} +div.document hr { + border: none; + height: 1px; + background-color: var(--dividerColor); + margin: 2rem 0; +} +div.document table.docutils { + border-collapse: collapse; +} +div.document table.docutils th, div.document table.docutils td { + border: 1px solid var(--dividerColor); + box-sizing: border-box; + padding: 0.5rem 1rem; +} +div.document table.docutils th p, div.document table.docutils th ul, div.document table.docutils td p, div.document table.docutils td ul { + margin: 0.3rem 0; +} +div.document table.docutils th ul, div.document table.docutils td ul { + padding-left: 1rem; +} +div.document form input { + padding: 0.5rem; +} +div.document form input[type=submit], div.document form button { + border: none; + background-color: var(--mainNavColor); + color: white; + padding: 0.5rem 1rem; + border-radius: 0.2rem; +} +div.document span.highlighted { + background-color: var(--searchHighlightColor); + padding: 0 0.1em; +} +div.document div#search-results { + padding-top: 2rem; +} +div.document div#search-results p.search-summary { + font-size: 0.8em; +} +div.document div#search-results ul.search { + list-style: none; + padding-left: 0; +} +div.document div#search-results ul.search li { + border-bottom: 1px solid var(--dividerColor); + margin: 0; + padding: 2rem 0; +} +div.document div#search-results ul.search li > a:first-child { + font-size: 1.2rem; +} +div.document dd ul, div.document dd ol { + padding-left: 1rem; +} +div.document dl.py { + margin-bottom: 2rem; +} +div.document dl.py dt.sig { + background-color: var(--codeBackgroundColor); + color: var(--fontColor); + box-sizing: border-box; + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; + font-size: 0.9rem; + padding: 1rem; + border-left: 5px solid rgba(0, 0, 0, 0.1); + border-radius: 0.2rem; +} +div.document dl.py em.property { + color: var(--sidebarColor); + font-weight: bold; +} +div.document dl.py span.sig-name { + color: var(--codeBlue); + font-weight: bold; +} +div.document dl.py em.property { + color: var(--codeGreen); +} +div.document dl.py em.sig-param { + margin-left: 2rem; +} +div.document dl.py em.sig-param span.default_value { + color: var(--codeGreen); +} +div.document dl.py span.sig-return span.sig-return-typehint { + color: var(--fontColor); +} +div.document dl.py span.sig-return span.sig-return-typehint pre { + color: var(--fontColor); +} +div.document dl.py em.sig-param > span:first-child { + font-weight: bold; +} +div.document dl.cpp, div.document dl.c { + margin-bottom: 1rem; +} +div.document dl.cpp dt.sig, div.document dl.c dt.sig { + background-color: var(--codeBackgroundColor); + color: var(--fontColor); + box-sizing: border-box; + font-family: "Roboto Mono", monospace, Monaco, Consolas, Andale Mono; + font-size: 0.9rem; + padding: 1rem; + border-left: 5px solid rgba(0, 0, 0, 0.1); + border-radius: 0.2rem; + line-height: 1.4; +} +div.document dl.cpp span.sig-name, div.document dl.c span.sig-name { + color: var(--codeBlue); + font-weight: bold; +} +div.document dl.cpp span.sig-indent, div.document dl.c span.sig-indent { + margin-left: 2rem; +} +div.document dl.cpp span.target + span, div.document dl.c span.target + span { + color: var(--codeGreen); +} +div.document dl.cpp span.sig-param > span:first-child, div.document dl.c span.sig-param > span:first-child { + font-weight: bold; +} +div.document div.admonition { + box-shadow: 0px 0px 0px 1px var(--dividerColor); + border-radius: 0.2rem; + margin: 1rem 0; + overflow: hidden; +} +div.document div.admonition p { + box-sizing: border-box; + font-size: 0.9rem; + padding: 0.5rem; + margin: 0; +} +div.document div.admonition p:first-child { + padding-bottom: 0; + margin-bottom: 0; +} +div.document div.admonition p + p { + padding-top: 0.2rem; +} +div.document div.admonition p.admonition-title { + font-weight: bolder; + letter-spacing: 0.01rem; +} +div.document div.admonition.hint, div.document div.admonition.important, div.document div.admonition.tip { + border-left: 5px solid #56b79c; +} +div.document div.admonition.hint p.admonition-title, div.document div.admonition.important p.admonition-title, div.document div.admonition.tip p.admonition-title { + color: #56b79c; +} +div.document div.admonition.note { + border-left: 5px solid #587f9f; +} +div.document div.admonition.note p.admonition-title { + color: #587f9f; +} +div.document div.admonition.danger, div.document div.admonition.error { + border-left: 5px solid #e6a39a; +} +div.document div.admonition.danger p.admonition-title, div.document div.admonition.error p.admonition-title { + color: #e6a39a; +} +div.document div.admonition.attention, div.document div.admonition.caution, div.document div.admonition.warning { + border-left: 5px solid #e7b486; +} +div.document div.admonition.attention p.admonition-title, div.document div.admonition.caution p.admonition-title, div.document div.admonition.warning p.admonition-title { + color: #e7b486; +} + +/*****************************************************************************/ +/* Sidebar */ +div.sphinxsidebar { + background-color: var(--sidebarColor); + border-right: 1px solid var(--dividerColor); + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: 15rem; + box-sizing: border-box; + padding: var(--navbarHeight) 1rem 1rem; + z-index: 50; +} +@media (max-width: 50rem) { + div.sphinxsidebar { + display: none; + } +} +div.sphinxsidebar div.sphinxsidebarwrapper { + height: 100%; + overflow-y: auto; +} +div.sphinxsidebar ul { + padding-left: 0rem; + list-style: none; +} +div.sphinxsidebar ul li { + font-size: 0.9rem; + line-height: 1.2; +} +div.sphinxsidebar ul li a { + display: block; + box-sizing: border-box; + padding: 0 0.2rem 0.6rem; + color: var(--fontColor); + text-decoration: none; +} +div.sphinxsidebar ul li a.current { + color: var(--linkColor); +} +div.sphinxsidebar ul li a:hover { + color: var(--linkColor); +} +div.sphinxsidebar ul li > ul { + padding-left: 1rem; +} +div.sphinxsidebar p { + color: var(--faintFontColor); +} + +/*****************************************************************************/ +/* The right sidebar, showing the table of contents for the current page. */ +div#show_right_sidebar { + position: fixed; + right: 0; + top: 0; + z-index: 20; + background-color: var(--sidebarColor); + border-left: 1px solid var(--dividerColor); + border-bottom: 1px solid var(--dividerColor); + padding: var(--navbarHeight) 1rem 0rem; +} +div#show_right_sidebar p { + font-size: 0.9em; +} +div#show_right_sidebar p span { + color: var(--faintFontColor); + vertical-align: middle; +} +div#show_right_sidebar p span.icon { + color: var(--linkColor); + font-size: 0.9em; + padding-right: 0.2rem; +} + +div#right_sidebar { + position: fixed; + right: 0; + top: 0; + z-index: 50; + background-color: var(--sidebarColor); + width: 15rem; + border-left: 1px solid var(--dividerColor); + box-sizing: border-box; + padding: var(--navbarHeight) 1rem 1rem; + height: 100%; + overflow-y: auto; +} +div#right_sidebar p span { + color: var(--faintFontColor); + vertical-align: middle; +} +div#right_sidebar p span.icon { + color: var(--linkColor); + font-size: 0.9em; + padding-right: 0.2rem; +} +div#right_sidebar ul { + padding-left: 0rem; + list-style: none; +} +div#right_sidebar ul li { + font-size: 0.9rem; + line-height: 1.2; +} +div#right_sidebar ul li a { + display: block; + box-sizing: border-box; + padding: 0 0.2rem 0.6rem; + color: var(--fontColor); + text-decoration: none; +} +div#right_sidebar ul li a.current { + color: var(--linkColor); +} +div#right_sidebar ul li a:hover { + color: var(--linkColor); +} +div#right_sidebar ul li > ul { + padding-left: 1rem; +} +div#right_sidebar p { + color: var(--faintFontColor); +} +@media (max-width: 50rem) { + div#right_sidebar { + display: none; + } +} + +/*****************************************************************************/ +/* Footer */ +div.footer { + box-sizing: border-box; + padding-top: 2rem; + font-size: 0.7rem; + text-align: center; + text-transform: uppercase; + color: var(--faintFontColor); +} + +p#theme_credit { + font-size: 0.6rem; + text-transform: uppercase; + text-align: center; + color: var(--faintFontColor); +} + +/*****************************************************************************/ +/* Buttons */ +div.button_nav_wrapper { + margin-left: 15rem; + margin-right: 15rem; +} +@media (max-width: 50rem) { + div.button_nav_wrapper { + margin-left: 0px; + margin-right: 0px; + } +} +div.button_nav_wrapper div.button_nav { + max-width: 45rem; + margin: 0 auto; + display: flex; + flex-direction: row; + width: 100%; +} +div.button_nav_wrapper div.button_nav div { + box-sizing: border-box; + padding: 1rem; + flex: 50%; +} +div.button_nav_wrapper div.button_nav div a { + display: block; +} +div.button_nav_wrapper div.button_nav div a span { + vertical-align: middle; +} +div.button_nav_wrapper div.button_nav div a span.icon { + font-weight: bold; + font-size: 0.8em; +} +div.button_nav_wrapper div.button_nav div.left a { + text-align: left; +} +div.button_nav_wrapper div.button_nav div.left a span.icon { + padding-right: 0.4rem; +} +div.button_nav_wrapper div.button_nav div.right a { + text-align: right; +} +div.button_nav_wrapper div.button_nav div.right a span.icon { + padding-left: 0.4rem; +} + +/*****************************************************************************/ +/* Pygments overrides in dark mode */ +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight { + --black: #000000; + --red: #ff9393; + --darkBlue: #6b83fe; + --grey: #a8a8a8; + --pink: #ff99d8; + --torquoise: #68e9e9; + --brown: #d48a00; + --purple: #ce04e9; + --paleYellow: #454534; + background: var(--codeBackgroundColor); + color: var(--fontColor); + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Hashbang */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.PreprocFile */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Namespace */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Decorator */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Label */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Bin */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Affix */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Delimiter */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Function.Magic */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Name.Variable.Magic */ + /* Literal.Number.Integer.Long */ +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight pre, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight pre { + line-height: 125%; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight td.linenos .normal, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight td.linenos .normal { + color: inherit; + background-color: transparent; + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight span.linenos, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight span.linenos { + color: inherit; + background-color: transparent; + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight td.linenos .special, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight td.linenos .special { + color: var(--black); + background-color: var(--paleYellow); + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight span.linenos.special, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight span.linenos.special { + color: var(--black); + background-color: var(--paleYellow); + padding-left: 5px; + padding-right: 5px; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .hll, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .hll { + background-color: var(--paleYellow); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .c, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .c { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .err, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .err { + border: 1px solid var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .k, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .k { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .o, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .o { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ch, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ch { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cm, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cm { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cp { + color: var(--brown); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cpf, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cpf { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .c1, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .c1 { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .cs, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .cs { + color: var(--torquoise); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gd { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ge, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ge { + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gr, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gr { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gh, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gh { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gi, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gi { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .go, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .go { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gp { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gs, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gs { + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gu, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gu { + color: var(--purple); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .gt, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .gt { + color: var(--codeBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kc { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kd { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kn, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kn { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kp { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kr, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kr { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .kt, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .kt { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .m, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .m { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .s, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .s { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .na, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .na { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nb, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nb { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nc { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .no, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .no { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nd { + color: var(--purple); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ni, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ni { + color: var(--grey); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ne, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ne { + color: var(--red); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nf, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nf { + color: var(--codeBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nl, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nl { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nn, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nn { + color: var(--codeBlue); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nt, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nt { + color: var(--codeGreen); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .nv, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .nv { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ow, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ow { + color: var(--pink); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .w, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .w { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mb, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mb { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mf, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mf { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mh, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mh { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mi, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mi { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .mo, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .mo { + color: var(--grey); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sa, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sa { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sb, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sb { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sc { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .dl, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .dl { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sd, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sd { + color: var(--red); + font-style: italic; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .s2, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .s2 { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .se, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .se { + color: var(--brown); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sh, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sh { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .si, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .si { + color: var(--pink); + font-weight: bold; +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sx, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sx { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .sr, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .sr { + color: var(--pink); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .s1, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .s1 { + color: var(--red); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .ss, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .ss { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .bp, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .bp { + color: var(--codeGreen); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .fm, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .fm { + color: var(--codeBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vc, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vc { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vg, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vg { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vi, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vi { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .vm, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .vm { + color: var(--darkBlue); +} +:root[data-mode=dark] body[data-dark_mode_code_blocks=true] .highlight .il, +:root[data-mode=darkest] body[data-dark_mode_code_blocks=true] .highlight .il { + color: var(--grey); +} + +/*# sourceMappingURL=basic_mod.css.map */ diff --git a/_static/basic_mod.css.map b/_static/basic_mod.css.map new file mode 100644 index 00000000..332d772f --- /dev/null +++ b/_static/basic_mod.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../src/sass/basic_mod.scss"],"names":[],"mappings":"AAGA;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAID;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAaD;AACA;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;EAEA;;;AAGF;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AACA;AAKE;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA,eAhHS;;AAmHX;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE,OA9Na;EA+Nb;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAKJ;EACE;;AAEA;EAHF;IAII;;;AAGF;EACE;;AAEA;EACE;EACA;;AAOJ;EADF;IAEI;;;AAKF;EACE;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AASd;AACA;AAEA;EACE;EACA;EACA;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;AAGA;AAIA;AAIA;AAGA;AAGA;AAIA;AAIA;AAGA;AAIA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAIA;AAGA;AAIA;AAGA;AAIA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;;AA9PF;AAAA;EACE;;AAGF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE","file":"basic_mod.css"} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..0398ebb9 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,149 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..89435bb4 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.0.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto-mono/LICENSE.txt b/_static/fonts/roboto-mono/LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/_static/fonts/roboto-mono/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/_static/fonts/roboto-mono/roboto-mono-bold-italic.woff2 b/_static/fonts/roboto-mono/roboto-mono-bold-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..595f902d68935d83d57867dd7db0cb06c6caddfa GIT binary patch literal 41628 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 literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto-mono/roboto-mono.woff2 b/_static/fonts/roboto-mono/roboto-mono.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9e69f6d1a0ba027ab480c536dd4d7887d5735a58 GIT binary patch literal 97472 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 z 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 z z$1|1SCJ71sGfVXr!KbrWSnODejSYmv^7ugL)dAP9>zPM_Q@$-?$8Eq!*me(ihIQ_;Khh`MLkZU2>s{nWD`_Hg

{((>2{#~@dzWO)WUb%8VSZJQ&u&7dR z@UyF0NIkPA@Z@d7JK7!u*{%RXVZi!f4$#WW+PP9{J9-I)2!;b&J7%%J@|Qd04zuOg zceF3y#b4Yh$C(r5@SN-}s8b_tP31&i%wi=-iByD&@wmdoxFx(Y*_Pvbm_aIUt+fN+ zRTruNOSvpgFe0^f4J}vNZne(dS`IV7MAY3Tv|6A(v!4!loqDhnZ^q5P-rLoqjTFOh z7%tNKqV@{@;M3Szv5>z$(05#~n9_L!T$E%{6n;3JV*UDA0J5Z}8IIQDcb1>Zg}qKS zXQr6xdbZr^T?CAUsd=F}%3EhU6Ck({_vg`P+sj%9m^+1XrCKqvo12Q>VGpx2b5>d= z;ic%Q3^f=MLor4|FuZ8Zo+Bf)Hz$>h2Q2GXaIYj^Q;)H-C>aToF>&>v9BoBIMK!(k zuFw6DIgnqtF&>A(ms)RwdkMQ9NF`u{wg4Ofm0->&%8>D7sPkc6 z{!^ z(&Sv<=v7K)Z-pD)`D|jDo;{L&I1OhS%AZ#b#)Z&U!gSh(#&S%lJ_46^bG#Pr^&{Jt z8+9LAeTE@0LHw04e>~Mtrf0J)OGDp(?1D0j)$S^t@1lWO0NajS!aiQiGrPM8CMm9q z1aw@`^>8i8pTdB=Vz2($zbK1saf|d&M%_8ycW^{r{p>X#?GNPOw=NWufY=lcms0ZO zYPH^jNzD(!fI$1PRbMAzxZlTBFWm-88D+)`F zK_#b#T{uNxZ|*eS#8Ct+%T=D=|MKqn!GSDDO5>)nD_dx*B1YVCigvLL13xLilfY(CO}ma~hQ#1k-ECPd@>~{^nBz@t`l2 zfrWj=YinoIUj25h4DZR~MW6ta9&hyGOvPZp_dGv>p%zpGYv#pHp9kiMU-fF`7*w5| z`3*0=`dc`li#Rmch;U**Hf@FGI9&nRFy(7Ro?OM+EI zR&YK?p-S)wgp)f{omu0mnjQ_R)gi5zfv4ID1yZGwft!iz;%=fvI!b*q(M&7+*$NjlSA=}( zZ6c=TL{UDe4`cF_a*C=R%NGdDdSPWnI#3ro`A)I?g29XOi3|Pnq2FHn~oofJc3i4;7zK2FFL4ZvS4mfUqn%cfIEO+ zN-qXA={(?c)P_)=ORMx$ubP@44JYH%dNOhG^wD?`WN=Evs#l3POfnITCbAS7jm}`p z#cPDcyGUi=8>HHYKR+E0a>O^;Hgi(p+8W6Tf>h=lYD3^T!wu-t0q(Zjn<#M53q`Em z3fd+y8DTcbw^_n_ z6ga80y@rA(3k`B5%<(&{*jmFtx{UTUDM{?AkP_noPFY}6-=GKr1i^avAMA5ryDRV_ zM^}me7V3_6F-$&WvkwK5|^wG&wNUsIFj8>jF#SOqa_SNb;;Ttbn+5Jf`Zht{=jv+UQDJF`KJ9 z9vwSJhrB{nQ5CC=a)5QR-EbSh2#Q|^CPD~`>_qtj^A%YdnHsZNcZVEbdB8wO>p)ZB zzwSgbLVdEH9*}j@vcAR8x*MggfWT#%W{m4pn%GLipS<7i|8T@ZEXYfpcjd8S$Mbfu zAhR{1IC)XsvxCCZ1prTuc%%v3il~|$1+Ek3eKeWjN~eLe>~>A3*LwcU9w&^kY9+TP zq$k~nVHH_jhhebaTYD_>0C}w&%@E_QQv`^<86v8S!nm+R?N6^Xw6kKTM+zt80zxx- zTT4+q<@$?y_vt6~n-c1HMVcrlk#)FL7hY zH;{m0c?DJefIDfV!_xoY+G(zJlXl&|sVDVx=d|8^5f)zG8zdgnjk3)KaS?JMVbj_H zE14#C;aHQ!%@Je=7qZd$pu5EEi>v>7cQmXsZfipxIx`-Wt1lLop`>Pgrp(#(Cpq+T z8}Ya2b&z)n5R94eV;m>SVBfRFy^^kCZaARi+1SL142eQ>#{I8g9?XifN^c6j^ztY1 z8I@X^D@2RX@XTNQAP6qw51xZ zisfGO7;=0qWG=!Ua;=j|Q|0-K_xEJnf~rR$jFCswrh>w$nj#9Ez-M~r^fT@_rjV?Z(Cs{*eG0kWS~#{w7qU1eR9`F+aPU@@c%3BhJGY4Ezy%D32yS4n9n!Knd|6L= z^b`{+@j4=e)r6H3nJ5NejnRP(Yjf0w2q$SVWp}fNbAsnM8b|!`WOhK*GnneWaY%HO znTo1%YlEwsXD<%pp!2_`9aXL+`fLL!Y0*b*=37Z?$|MMKQE_S#hBL{uA>3esQX))3 z5hOuZk_gTkPBfb1yub=@AYwYz5ywyjc^Lh)t{y8nQ^jVEK9^YG2PV+eBPSP@l41|U^NRGFlh53W`Ow(Y5Q@~=_c)8>K$%kT4w zMRp(C^L~HzL-Adt)`EB;akRp-yrh^g9$qWcYbW-w8}POuxeMg?qGI!L6bj{ENCqr} z<($}Qi`{hT5lS!&&;q#Ud&!%W7xybFyG8Tqaaj-N|xwlf?sd%;*+| z>+(N88TJxaAW4KRjY5wP2PXC`X>Ip z$jm6+1K#W2y8t`0uhMYmayS&Nk^0(D`{%PYEAg~qxY2H*EEG=G+SkF)^zOF!HdZl) zCTNOyz+^!3YUdJ;g#C+QtSCM_zs+gRBBVD?DfF4P5f~np#>O%<)t5q6xW*zv@dX6M zPy|UNR$!G+Mmhus-0@c3x__LFSf0q>m!~tVTNOn&#|T>I>OKe)CzFN?piHg-iri(3z8fs8Vge;zzSF~am_ywa_imY<~-?xDsGhIrtyxv z=%#U^D>*r(qHX919|bwQy?uSX6;4gcoClT<>hGa*08$OuxK@Fg$4ZL49o7DlkVJ8B z%XZ&8y42s437MQ1_tWiph1M4(r0U??Y z2Un=B`kQjg>CHV9*KPsa10&U_+(I5T+?PXW-TavE}UHvka0V0h3=Vgzg&FZiOy zCI2shSz-+&vJH~u1yNF5)m9YUv^>uRpkie&K6t@x1tX2x3&j^=Bz@c!*&FPIc)lFkthphD56v-`Nkyyo0~0#>3y==tE0S z?KzhRJE_D3bxIIU>4u`V_$Nd0cc$zd0{Id<;(ssY176_ihOZPg3t}LdbP}D^@iv@L ziMO0oqBo$(Z1Jlwh6$Qv-3UJ!14mOBGL1B0Aw=ZE(x3#YzKSS62z=|b3oV_{9FLB^ zl;mKa#NZu4YPq6YBvzMb5<}WQ|3kXpwZnLf1ZSXZ8c%jDFo4>xpHUusmV-91A7z+m zFBnXnFCh@vYiM+GHF;^=L7I-m>gzuMVEeIiN-NszwKQtGnm3BZh!)H3e~An67^vU zkv9Xp{FULx+S;JosW|F|?sS*xciQz@t+F#6Md8S(h%9h^`*#wHv$NB)0CpJ{q0sFP zwYIsiBYj07?j6ruOp{%TXS%g6Ef!g#d!xmOGz+&cqA0>w*EDq)0$CKE7Oc=);|jB7 zY^du(+e?LLBtoiPXRsR#nwWUQQmoZw{(=s}r9#RP4X)Kg^EDlIg3_H9;d@sAwil*x%2f1DksGYLLXq`D* zY~*hF1rnaO+R0VeM8dgQaX zzSOx2BbH(3F%$Iu@9-QWLl@}$pu;S6*vjs=fJJv$KtTm6q}P+WdCDk37~fylI7wBb zZMrg87gD*{>{F*gh|q$pNxQbfimFC|A;Oix-r7r#l=fbV3qTY%A8K@a{RA<$GJDis z-0RZtUB~QxuiGeJU-t;!t=tH>fqgNZzRl$Eh|QC2Yh?s_S}Lvkh^J?S zQgCO3qu0Irsr6AGQ4wGkQsKc62mH2*HkB74)S(y#HF|~yn5MlP8J@2RC=xF+RJOk3 zaJ1L$wwo(05LgIhLDws}iN`(AF6W<}`&FNI-LNs6G0zR6;(0zXv$51daok0g5i-jR4**cs{S2@xb8 zHRG-bqG2TkuLOLH4MaUiC%d#DTFSC25Xf`R3D!$T+bmV^W?F@d4c6&)+q2?A20-{3 z);Q(1Jhtlr;fQf>-@8+2H0rgQMFp@Wgi}&^!LHNLj;fEWZM+xXLBelCMhFS#Rn#JZ z)?XuQ-%LSp-U=;r6-#f)V>s7)-7B-rlzs=i&!H|AI)!#>)#?T%T8g|+vn>G@?edEI zWoJs9JX~_hZL9XWc)C}ZKb}XY*YzdE)w>DYRri@&a6jRN)q*{Nwx26oY?NJn zt+q&{F$~AC5Ej z^&TN{_5Kaf5ynMB0ANm-@Py87(ZL_y3OK@XM)svr49h-7Es^y%?O8vYSkL3)^R2EE zLEyk*@P1X>FUJ5?R*COeDsvjPKd8*W>#=3O5auEfI^LX4HT^c3iU`;}L8Go=KlupM+gDZvF* z)&1q1_J?bW#z5%3EDFKWKhXMwZF?e-hH87`@Q4Oa4-bAXdfZ8=y<72Z`1mlQjQ`=jYPefbBYAk`X&YE=OMrQbE)3@W*0CET?#+(Ezu)2eO4 zyI!v|8P)#R=QftO7;VrW4hHD;v&913cjGF&R6fJ8i`X~3s0nQQJikl4zgc@PdSrGY z$TKXDfz1}TTiN)+y7jxh!@XX+i_qa#=Gbj4g&!jX^C2w~MwizA`_*6i#Q;t!p+M5vy7XU)hsC^G*|EE*cW=5_0I9qH=G{^h zSh!PP(e-b1aV(8=PIs!g4B|R2cCiFMV@S>h$jB58SWKm}iXUKAUE*v>uWnh@!~Mx2 zoj*p><6eJa(udyjE5Or|RZP||iOdp)!r*Q+|ExY^Kf8@1u}Nw>VVtw?n|;sf|6lsy zh0B+boKmjT>wuZ@@26q+hQjIU?QhOSlOwZ_b+j3O)^&Svw87*X<}nD2>5HxF+v+KX z5oB57#T(yS|3T_+_TLu$#ny*O9E;?=;Fgqn>4uSOTz$*tyvRA5BhLiL!W8}Zyq}9# z66C$NG%c`@3_TDU9V`2l+`7x+2<@A@_0BPQhunDSFG`L=bX&|mrSr0eCTXW(tquHW zLJagI4aCI;dQ$q()v@-S{S@_mp;-EQOSA7piht}_;=3F8=E6W&JK^RBGm5WA{KEKL5TQz zEP98mT$grDa2Q%o&6U$-3M&#Y9$% zD>%sj-X^XQSrR9RN8>0CeO)B?E9Bk05UvfJQ6B#jkC7@*Y>*0)qA`!@Mbo2lSnov@ zNx(sca7pRwbsAdc!0t@IT55$0Bc@KQM=LbC@cG!axk|lJ@#3OWqH5?bn2qP~f*}e3 zur)nutv(;fjnIbnJwdLa0m>d3R*=1_5ZrPHb0_M2pg=G!E6S6E1*0ltLaC)>cqQ6H zEOTc(Y8CxjGH=*+l_@?sCif**~SIz-W1tc;bYn4r(2}T^+D%;t7ToP?| z&WZ>XM0*n?_{sX1%yE2$K2w`Vd|=1|sAUI&7R1t*sGZ%XziU7gYhp5bqaR9yN9iWy zwLK#I?+}o_YCT8Ac#g4gDUR3_;cd1|`LV;q^d0|qujTFwkgngWSx%t<^jnz6v-bZg zZDRvL#RPE>C7k{IX_;C|z*mXJ1%bairXL5c6I<(*cD?|>F1|0MJXh?NDsy~MI?y+1;q)!PA6CJ4~mn{ac3`uB}?H!wm)1F09+A z+J_wNqhx&GO9xh0?BXc4-xX>T?HOI>K;3nbPuPWt<0m9mA2pE;lr-d+{or@{D^iJq zDM{KY`@zd+Ov=e#{8M4IfD6xS@G=wu>B@b}H$0N&nBl>0PgG4^_|t7#ml}DS#q=&W zpFa$xt8q=pr*y}++Lv%(GmP+`+DjM9Yk{v+Ua}PIMh-GVHYMHcfAH;>r}Q&Kwlpgn9{Ga<*}7S=g~oCBUnky8o%FVwwX)m`I@$65 zTDIjG3x8d&Z!a=hL%ch}T9j9(3Od^1L*EM{2fUc=g9HIx!CvD}DXD*jDRG6diar_8LYN$U6sJepqt?3WGyCB6FXS9#9f3cUqVtxSnDJ>{$wuF|8 z`TTZ{Jvv@&s#(|li`_-hXvx6f-ZvAlxgrZCy1)yhe}wIZKS9&kJA}*gng#!6eoGou zNmNckK$(OfO+4zdNWJQaovJ244(ed7f0-<}1XoyD$8~GVtj)Vfvny`71NCYCxkAF4 zO){MB%#pClzwXH;kd+YZ)bY_&d8SmN8a|L3tgQ{5LnFgTrMYPV^-fKB(^9V}q8(}E z8hE3g9Fz~Uk`UJ`7TbE?1 z!D}pTcpt&TBkn&t*hV-{qkyM{hW_u0K6KgX-_dMIKvA<)dqK@{J81QbBfF631ZqVj z3Tl@Yg9G0)rImf;Z30VS*wG(R(`?EN3)gOk5CRA8ZrigvNvVPe6k6?69ATgaRg!eG z7sqcOP+%EF3#8J$3B`@UHd3K>V_D;+qh)Qkc1fSZbG5E-G}J2Pb9x)zd^+e$aX#CL z{1GXJw^5xoyurK|!=>`?+B-M?RS)CF`+uSUGz3r4VG-j%*i1EBb9^rqws{LzH^k`zA_i&rOQpZVkg;G4&J{yAs* z_DkQna_f~N9nrnyH4zQ^m>&nh5mRn~UT4g}15W)V?o{Fhg`EOM%Ph~E&A4E2bz4H` z-ED!5jvM32Ec4$x+r*t?U3zwMH(q<&{@Qj9S&~=Kpf$i*nH*cgfEQ}yY~yq?^fL1Tv$Pg&MoW>ChY9FYFGRR5)g;kKl|GQH-*0U zXFI-5>Q6Vry((k9>(OBN3Hq^*9pl^2hL$>xK7j({9`}o%zxs{#=k9)^_!;G`dMG`E zB_-u-kGmW8f#H8bpYBbbo-uN5i4T*eKrfxHc~po!+VZbnT};v_)JY8VV!U!Nix&z- znr7=SV^;vUuQ}mc%gbKBZ_x+$fjt=Nt{wHP*WJr`$>&?GPNxT>q^$diKQTQ@kf4FA zj~&~6oqr!hwV%jFG@H#YF}u<>WdMKl=wvXU)WT{7^=DBlcVd43qHBNsOyz0w4DfyF z>Ac32dv8B}*+qZm1^-U{h1*`s9`HV@p^1(>1-;mSEh_ZHXaBnY_RpT;k20kJTjC>w zrH_4NLfo#fT$%iRpLpawKa-Ou9{cF(;tQi{y2$v#@PPoY%Ly@WE?@13i%}fH7TD5s zRE%P*WE7kDl?JL>zI&v$XQ}AK^$PCOMP_3co6-#$eduKCE&tgzpe3I>yTS(d%YcFVf~R5_vF#brx)ZpmmZY(x7TVW`-D}0;> zc0jeUnq^^BThrly2+k-|X|s(HeyT75>bSFZ9?yPmKMyZql^~HV__+0F+xhBR3P5e6 z)NeS~)crl)dTpXWc@K7<2Y#UEJqCgIK@ucHD*UECuZxSiEZNQg*jRWG4MBhUS92&Q6`!N}!i5 z{U+lqsG4CJLbvg;H}7gUHHiLL2;`r%l5X#B#X5iM|6Wu0Jo5OH_ntg$FnAxx5~4mm zw)9tfNRbKv^>=^udcGz4>PGSn}fsDUgY`G79yI_K8Ou^ zqXnmXB5=sS#HLMG`A&TT5c##a-w&qW7k(`J`(s0MjUfUim!ZbSW}c1wt%k@vlmTp~ z1>?d@!o68`TA?D`$`M#*p4&vHhx#ZL4Cy;_fwN@!{N$8!`&nP2k$Q+DwB!f3myqW; zFcV&cU^qe3rPql)TG*kj_0!=6TS<^0xA)x`a-vpl^aMk}X1RLu?UUj`vA74@C)Qt> zPy@2vX;&p%(n!|2ciI`-k}s^hbb(9l^KfJPJ{6BQpq|cMB9cN`q}uSp$|H3J;w*;&dP|-uKVHFZ}6AJ;@&LE;hQ$IbxWs zOtlMhMtINmF`>Xj7+zNRf7+#W>1mNuxvWn;ONOM}c)B^zYU8x>(6+G-5|N`C5=P_2 zojcr^B-`fVAua8CtNHB_1FacXcz@zVhmf~I!VHUb^tH5@%3g@mOyHp@3?x(3)@Xgg zvag|KP6Efb!Ps%Oy=o7Y3L&9PV_ATJ%WTpb&lVnsUJSeIZtBQLrz#hU+#0?R68qr! z`($|D1vwUf*!S&F={$mcsJd`AF<&k z0-STZ4*GPpdMsax9=ak}9EC6%V1TFb?7M16;%#HzvY7stTW+4R8@#x(78h)DmKW73%}>_?z;evM3ruiFU)f!g;Q;`_pG0r5@QLpkPlX ztofb6aJo)-H3!b|(h8H{cI}xTtfM>ivTVe>hgOgoz@K|sofYlAM3T(3iN^pk6=#7t@=C@mCFVj z=HQChN0*b@7nZglxy^|%0GVtHnH17O{5JJk1!u>>bR4JMLNi0eZomnJ!4L%Z`!LGM zq^_t=J_{07wn8IH!Q&Oji~GZ2NexF@8S@E;$^0IBV=V{OnlP!k4=01^I_2jj$wzEP zkZK{Mn*w91?BPWy#vNf|QsMA8`kCFocQwIPp5C$-vV~$k&T*2S*Kxu~reT;8gV$O% zH$+bTq6GUqsLY+4(KfAXMQcxwyH>eE`?t)Ko$_EpBoVL*abfSOF$+fq1?U854rw^}gz+hsg@oe)p z-kFKT!)PoTgRS6Xv;RLMwBnPGT7zs_JGLAcB1B7-513WnSPXVgd_T~boB43~=@3zP z3T(DWJ1X|qBZiR-Cq#8p4#p-zFv7ud-N-t3jRcKRef6oQb8MM?mmf-|pep|(J!@j4G z*Oz=nBvTj$_RFeciverDYRk;(mxE#P{ih$ecTlZ*q(V1OJ&^vfDwIlsq92`y?y6mY zCPtbMrxn4N8x57XKivUJ^wi4#5kBAq_?dPQ7DI&gR%|aQK~|Kn;+UXXu1Ym4RHRP5 zC*!I^z4$7j-aC%!YoAFY{fcR$o{zuBUHi@pY`;k^~!{sop~^ZmbWC8E`Mn<(I8{H?E}I-wf`|jsl~!bu0eS!EBHz z-!rhf;<*`(SblkXyCvdh(OVO_SvIuyt-;~5;_5NC!uTg9Kp#_yRrFfB>AHvjs2&9L znxpwvrE=w79)Gr6LQz!eW;99TE5Y zHb>EDKTgNJ$!LMgkU#dTnFt+j%brh^ai=WC>^FMf7U^mBz*e%R0;JR2OT%#*`;zOb z$cf9}T2mvby(=)%tH0R!cI=%DahsT&_7_|?J#cF-hZ{`@&WjkO6-%X6f-2i6|7&aC zL{|}wp59(LqKtcYKX`p}9VwoDDIH<^?k<%Hk>DOQ@ndi&=VE4&O?xBa2Zb||QPf`A zRFdRVAYM8qDp=xGoAPt6>$tmHg`9*hJFCtJz_57JUCpS~&(xCfz`dAz+^uJ%GvE$eOZUlb4N z2bkcnJ;T;-PFdij|Cg;Vg|@?&jXS$?^Ae47VcC)Xn{Md@ zXG`Uac>w&tiwDmh#-09b7URtyAouhxZ95n$yt=e{zYobCC(D(c$DFBM3#Qx{l)zo5 zlz;8zUO9ip(6pt8&Ux`pF>QS}8H_%VHFzqLs8{z^eDHhdkR^qQw%uU`)9?KyJ&Pla zLxZ)hUpe;hAW@PnUe6YW8cQc{UymhX4;l ze)2@pZzv8?x6;iy#QnE!MN><{pieC}TCh85EXFR@OQPmdeBM2;97ATBPIho1&@6G) zH+zlh4kgh>`gd<}EN|JW$nyZ?qPAZ*KSi9zT9am)yR!bq^ptlrTHnwy$w^rD<`4!|h@~1mr56^k0Cx66A6)8N8=PBx;T`Zhk)wpuwjXfH@QGXIn z#!DWgUmEx5GGu${eH(p=UU+=Cqvva{r}+tNLqpMm_11FnkDIUd%M1N?$)yv!-M$zN zCm7Y)&*gP82<(IZJwN$wwhy_1{5MsYr!uZOgIG1v$vvWr_USi@@M8C7!VGZ`Lf4j> z0Im$;LE=U;C(G#Zq^Q9~QOh^F7xm9#U!`OvkGL&QK0SGJsAtLq-YsiiV$d#lis%Yt zgqX1zO^_t9f8_%QGwq{N1P-?<9epr$kxIy~^+?H#)5C879#b7J4!mqLUL}`b!NFEl zEPzSXE-#8ZJp^8cwFzExQLq+Ph0He6#gN%#{63nrNV#^|%?_%1!gjZG?jqei*2WnK zKH$^U$l&J7#G~?GUH2OKX!DIXar#pp(w~!bY(&z(_aa!r59FXqJNk;xnBR9l0gud> z;^1v^?;HSiY>_(BeRN#2HjeWv^{ImW0neQKaaDdl^f>mM_0KEHPqtQ{o70aH)dE%S zh^oN-slbb*oJa@z#2w$8{9LqSd+6F7B>PR;W@&ThZEXkMb=zC^<3T)xbMTuKjHN8s zpW;4p#FLVR?)3fZlXu5G#(eucV*a29Uo|N?#e4W#d+U8_LQO2v0=7>h%nD})O5HSs zA8v1>*Hpp=w>-N04r!6-Txzk?I)|<0z~`anNpBOI_?pN1-RJyw@4GcZ_{YZm&4Xv4 zZ?hMk-f!F^GGDT5X?`&+gwFry6A-AABOhIQ^uml&Xno6+zNa4Os_acKdPN!}08)cS zMRf-aGynF;n8+ig;E)|+3Q{Y47KLIT{1 zN4r$#AT<9E4Lho}9dEUlWj(c;9@lM;#JSU2tF@>w=iSC5n^nCfzW(L&o3DG_mCvYY z>YI4umU$N5gBP~S^9yt^nr>4>;CYD`L~#Y7c_joqhNexmZS9?bIaOKVDHonUw#+^md#c&VJ? zTW1p4XM~t{{?LyVDOtO{Jxko|jB)|V!U$=Vb;I7t(>TtaBx)+nmp#Dz_nRzoj#`he zqu;at`NNhMx~~8EPMcQ3{HgiG^@BgteHlxlpYXG2M~EMM&N9x7cU(CRO`je6ZxijQ z)#QzR^uPRbZ{W{xCmCkmBolDgI^gWj@vr;8@pfwN8$PJL-7pkcpzv$zaXpHH+N?2= zegR4fLZ}Fr7I$HucTEG%a$LtruM2d|Q;z4yE3FQSAie%o5o;@gScUD+7dJ&?>T-h6 z!u?G#oJe)5y^r&tp9A_D;;)SOI{B0Ql*+&``fvLvuH4D4l3Disb7ajrii@hMe`2xH z0o!jaj<8;Fyl>c6@sInTHI2Ukuw#Dsq0BqrTc=1{1gT3RD(h#%$*)}#pVUSHs+S>d(a zKJk|Z8yvIkDMyQK$O6x@^UiXdWO*%8*1WS;vl#+L?0_8Q#yaW(#xlZG8E^S8LO+{I zsDbb2w(95W_v3rE(s%jI!wb|%ZBK--H&^_8;j>`_r=rw<_-CfQQ+G^ub~3(GXj1m021r5Tl*%{$2;c6AehP#lJgy&I=qEs#UQlpN&->g}^RYs|Q(o zmi8l*fP;d@adomxojlIs09XitzV(bcyIj*OGTI4r%IA6Od@oJWfM*vNX@$jey8qM{ivbx_Z*1AsJ-^qlrmez2{T6eqiE!JXNyUe7rQ z4tPNzK(&CMJdh|1j zq^7x&H7|l?@5M9F@pGNdqc+v`7xZ0PgONx-CM&0lf}p4ZmuJThPF!Mi;x2x*2uDc! zK@SEz8&VW+g^@2*8!yO<=5nQ#ew8@O0&20a4FkCh7{V|r`Wu4J+{vAOwbk!qBB;7B zWq6*g+YG~Ufw8>gPufriJqivE14>9*i`9#sE^wE!s)&q>14h8>xnt+b*2ZEBt0=`} zGRrV8wb|-)h#evgc&8V`iop@H6J2G11gU8|_Rc zswz)%3H@eW_$(nr2tyZp1&O4r$rksAznqkfmwMxiKCR?0 zbJhKgSdrV+)uVLo{_dGmpy}dzl4-ZWc+O11$%zfpJ2pdZEyKM_H%Agr@5EJ4^MEkp zzreu_Ttu?p5 z6F{UCN)t#m|KDw*f8EcPSEy+O_-_gwaijcu3NXUG?g!<^($#IWA&qK42f>0?`BHc) z@Qyc)AHHa+vOuG0`Q)~0~F1x>NUzXVBN)Av#p=rs*5cPg{4IQ>^@d;2IG!tg9uu= z^B{sJ3JZPGFfx*YlkM~Qmd`Tg*P zrAR`xHKo%8Y@2>`>rpK`=jzn(uY3P+cvgasGocjS3y)nP&ZeW6Z~Q0N)^y{4!2qeN zntro4$3H3MeCyVqug-r=m0;zW)+n9euG90qzH;I|eAVpST#(*S81&0Za6<54AqiPj zD3?lJUpqV6?~2-slF^bRZY8zpGXxURL2XL!1$s2&5YzQ0u;D@(ES&HfHRz^^`WEwrH8Ra0AXXkaQRh zwVBkMp0SNpkrgKDb=EGZ4)Nc`MsobI(MYgjWs2Qo!P7IY%x3)E{`)j~#J9K2U85*Q#0uKk%Na+5`V?E}(=e}V zJj)He5~d9;*9n7YwNuJJHxoiJUicKD)XZ8Zw*7AusDPNiE+R8}bQmyoxmzQ8y9H6_ z^eNJ?G<*e@6E`alkKCK^@xJ17Sz%XnVaE8A_b`9)M%Ee;8JgP(91piqWPpd zR@qPUr9>hR^pLk!{HB~)a$9*#dq1oMv{V5D{rv+F7*g~!Yf~bA-CzDTKJ>ott)@yT z6YE$?uEn&W8fgd1DDy6h~74&CC7@O^cpF0X0XV z@_=j*T;AC2uNn~&tg|?CO1sry5R8EJU<25MRY0&(r#EL8*ETe_wigki{pR$AI-S&x zAo7oe!MK#vyAE^kY;AlBc7G^!|K(dA7c|vYb6C4Q-|6Jl6Sev6P4!gqwtno+^k;~v z9b{{~?TkO}^;>u7er@iZLvAvQ`foPnBNk>B zsq|V2OX03;Re`~+5V5l%AN~Cajm(zibY`3MYI$acfwT#vki!}+oRO*2<@CX}xO`DH zb{U>brqYJcJSS^{A5r+7Y488~H4Gms}Pet_Ds63y|a#;tiBRT ziRW3C6C_bG#LkfvnI$y=LwhSyoxoAwXQ&amukgVoh#S$bp)Cr;aTynJ3a8s;%)@bH zXI7CX+DEnk_iANbJCw#oz0eTQi#u<=pCNTzvN!?6U!R=izqOz;S{rk0+hNddPjHJ< z<*dKctSsUAem~Yh5ctFC?a$hiWmWg%<=xk7%cF6Kw5M)Jjvw0E%kcExSA|-=**vFe@LW~JdH*ZdBDT(EomaC@%R1^K9p(_fo;eUFu`jd7$Rcd)Lvkj=-ViA7V? zm)adxPmc|WIu6Lr!Mlw_mO_1r%Ap$>${IC-&RJ>j>l3VYfs6rcGU{F&r6Y%D0c z<3S9dgi_k^)}qyHV*AWIfZ_l}z?6ctDmJk|6=~Cw)KJ2VN;$88TRf8vG{Dq}CX_p? zYhGod;EWI(k!{zdla6omb>LY}V3l#0a&9tM&_Z~WJE}mU*VIK6r;O1eR`B>^o5h!= zhudf>&j69W%eBqbCYj(ak#Ji80yT$pB+>}$41qjDh#*pVQDWNwj`V!mgq(;Uj{*Y^ zA-hsi8)CB+Ii&8(gClc^{ZiQ`Op=hZhft+zke->#YV9y zu8zL_MsQ|wa-yH5$Azxvb53o9u^nJArkfmeUFTNam9S}M@2UB1%PS|Bo_WLTO2)>9 zck$lVtk#)9s?T;VCj0ng`A1d4a=D@oEavBq3w9)Jn&<-^nbW9aRS1k@xl4UqoH!Rz z@z{o%=1j1+Dl2{Kl5Se{+$#%K+{oF;5l({VK&EEU_M*)eOd$U%N#;j5emX75=~-0{&MFXYVSbdS>RdZVQ*~wiO%T+N#B`w zuSDlLaI*hC{4V-b0zsC*aaj@gVB0|?OM;S*Vw-{qu8r&kLH1R=|Fwf>YcGx-7@yDcIIQ+bqi*<(zIs$>H(3A6vi?-V-{L1NA%)YMgS$4+uFT~ry zV3St;o_KS~Efo;I?~M_Hun7X+_goO$G-RF!4hRo|`7HYK@~Zml9Jq+8g$YrbZjx)s zUCe|yb~YL>T#OZ`VHTOyK6-u}wW4}{8+7P2T z7K*7B(mccVdN+$aOG7;LSX0N@K$bq;e6h@P{2z3G_jtsW9cR!1sQIWA6~y9eG9W++ z4$=Ys;O~pK%v5jN>+e)`(LNT3SEfCHwbk{UGjI9`vLaxtDEu2%rgIsI)}O-uf#|sm6Dbi3Em`QcJYb?bd#Lo+}VIC2jsGhV+_l+X)5~J|@rys=|U+DPVoKUFSghp2$sr31wVRpIhiRXu@!e zyKz^3$OCIgD?!on8zWELc;bzx-gvq{=Z`H7w7mfD#|K$QbETyJF^6;`q;fH_mLbFc z`}u$R{6BvFFFya5ndgy%c2t zm$8QLbWXFA#uTVuYZBL#vyBWH#YbbG{K?`<-7h;#gqj#1ZN}7^@*I0G{I7bN^t2Ux z@e3dM%<1?;|M$6HNS8SJ@?9GEQu?s(oL}z9i>t(M`OgWPVO{f4^+)ggiYW5cP_izX zj!F8UrFp2;b1H}`nj)#R%R_`PsR?IhoA%v zUEq0+V}r0phZvYx)cw(78d^mSJDNn-Y?tY|QtFFnnn@^Q3vQyAsJGiipAT!tawIgT zrd4Q$7prp5`>Ff?2wvGx1?A_>v*4oh72V(Cw(k7Ik>5j%BKT45xr$p=3>jo(6f{eT zqWIvUC&z1kwt%215qecunO>{57EZ0zV~lzR9H6aLD;*16;$ZYfC0DcquD#(b?!b2# zW$b;LHzuBuIyJ`9(y1W$erUG_+x?$*Wvh{ncTEABiK5W;!Qgv5)ToUJkA1eWEgu|H+3&j? zm#HqTL|m2pl}zICcN-oiR_!O%AImy*I*iQx>^I(i%Pwb+cb&>k$6n7wRqe{d9CY2u z!~_oB{`5B=vL-YZ6Ti|bruK%Ci zFE0wOYDpx~4E`eFEt(@z?ZIEWcXR3!W<>h5Nl`iKd8!~xku)@qU)=#iPYY?m>zLeU zs$k4*{F}|6e52Vs3sclRGx{dcNlj>OZiICAdVe=F{^7s);w{-T7C~6%cm(>yv3(Ht z^R*~4vGd(ylCPzoQUa$)aWXy(d_ymq^0#jNup|1gvNn`zkwQDfs`9#=;Qvp;Uy!DL z$~^qS$A55Uf6a${E6o9OfCSy7%mo6@&i?)La?frR`um4qw*ed20j9tt7zLZ!HS57T zW25MFXaelX=&IP(md?gXeNuGzvIs?B$Vyv5UG)eEOgMuksZBBGYlW#eL~sm=jwgiu z`Kz}Fj*(}(vm|mx%x@q6THHSVOGr2(78!YGh&kcXr7jW{4Sro6=xJ-Hug7-2`?0#Y zyRmVLu#&>UqGA<_PNwE{cR5l=fM0@+oymJjKPM{-bBh~ajci^sBvE;6QatL;@Y2!g z_SDMnKU)inefe4MA$~rzCJfOzCMRtQAO94$);6{_HPqKuS9v`OMy$7^#-a-R5>>Gm z*9UJcFM{xV27zA`z>_iu7rdm+Q~f>WqmRfX`g+WSW* zs8ceKVMG!uW9s5QjY-+b?r!M!T)6S|(Bj;jcZ!B{{s3Am|9yq7jXU1c3jBPN(dLw) zwW94S>3=LFgcZ;3kM5}qw~4qlXy+E8SJ!AP06dKUu!&ZCv%2dk-&v45^q9~Mq$;1j zygptEjq3C^yP$08`@l29KH5%1R*$xeWpJ*s&50ts*RQ=d(i~UEkEbzfRPa=9Jqhkn z^ab(e_vqXBrP25Pc7)A1cYjaZ({g5}G}zu=AJ***0ft0}dTHR<1`TD7Y+?U=*1y{^ zCE3j2$(M5y9P;%#i$hS0H=Vc-Jl}-*);by~W(OoaIV51Eo}(5GxJ4a@VETN}-%REj zLvI!LM_2-(OCX+-QB{KE9-;gV`owEHQp~A&4?#>F7E=joXi|DWwv;4dKDn z*+8dX-3*2+x2!x*AyV6=m9TouE&9Q&OTo_kO7f$_Ed)$rJJf7#HA$cdTA?vOHe2i} z-HpZ*@v$(0*CPn16@v*Q>OQ<6497pbURvJ~)45(ihc_Z>hV9pl@ z3z~xsI0RHFUr#Nlnw#*)uyNRXWo`rT450-x>69zQtQw{hCP(2=bWTEHTQ@B*=sMiR ztfO+UM*U}eTI7((qT?)-W#EK9EaE-*LYR&~g>s?n1u?DYCQxLQhrXo=IMSgcE>UT) z`G9*?&|mXb^%*0XaN%qp8P2T(;Ami1xM>gz<%=7ar*jx0I8F#V?CS@m(>r<)N)hul1=o&>xXe#F*Fvby$~y){W8a{ zE>OQj9`8vXFLfjnCV|fn;>xlxl0QABH}|+X-~6;JaxA)RK&09~<|MWCF}F--nAFJS zhk$ROL=wVY84mkNq}52L&Mlu=YNNC^!>VDD4}(08xcTB7d+V6TJN4_hNX@jjDd*ssZAz^GFGV5EE$^qf@!I;C|lP0XTr2a zNf6R;SJo^ErtPsAwS)Wh`3~eFmag@~{Rc75AGB9>CmW0`%Ch00x}-0^QVazwzi!|j zIp=of6?J6a=fZ;gB(p5Ug0C!K=qFpKZXd`uwXB!7=J9Q5~{ePS6j-u7z+(l zC}`Lp{^D!6OD-Q8vP{V^vLJ-d1gxyqxH+n}t5UV)^whglTXXH&*4uFbqc)23iL1Lq z0>=f-8`SQsa!eun?nR^7#!{n7qh{*`$X2f3ydl_yW`8jB%GTbpZ1;+*t0@9vQzi3f z@Fg~vil%g!!Q$zYKtPb?QmCx8d#)f55?yv$4JR*t*qErcSQZUje2+oV$@8J~B&~gt~qvSS4!)oAT zQ6D0m6@kxT@nz$IE5YcHr_lbb0@{_1ZtZ$sOysMret%HUnm+mcbE?u~Db>yM7$X6N zJ9@-y9SGhPq2tG?3suia=l*_#UhUQ^6H7CkYwqyE%p$Vp0MmmSHiSA)*X#J`4M}bO z`?UJKRi@g;HufO`#|Tmlc!K8KsQ>@be=n5aq)D?VaP?q!Cz&gnhU`pByc^|Q)B@n0 z@P)6unM6=y%REfpCf!r3;s|Fgot`FGJf9>R{*s*ZZ?30s7pacZ%i86$G~L?Hc3kf( zy_3!0rg<3ij##-$A-|7f1S1HHy^4*|(K2zNoitVnUi`=m^DKxUk{agotcCQ5g~D3r@Dayg{pv|4o1*`|Lur$RYwfJFTFPbtjD^we zD(hpv@xyPRRM9Lr6nxmqx0=mL-nMi;6o+aXm!)^gH>LJ_0Q#v+pZdUXOpyyfcgTul zuk|h-0%MO`yUezmJUvB>0IryI&mXiTO-{-t7(vfVqR8`#ZVwh(Gjcg8#(m=rrwiHk zK&He)EsL*ckM;9OyN}{@(~xQU1f6ZG@H%Omk?z10Do|Hwbnb&yh znPfZ`iu+=_S!qL}z_l+G=79FLQ^^DS)8mHu9RAIn`d63d#>Za@@XlK0L4P!%1#roh z$YmR~lC^nr;cI0^5gDKT_7s!6-wOc({%hGWPl<~Zm+1}$U zuxuxVrG}Jm4(r^cwE4Icg&SSYC?o}_XPdh?$7Mj5dd%l$6}MuaP_(1@~^&hREnm*VEn~t{WKI@ z>T&Jns-(;gdXV(TTo-pzes;kB$9b{cpj`xJbbrXbgbgaVTP|lG{h_;@6>Dq~#|WBe z5+W?_4l7Y&g;9apsr*{3s8DG?XskSL?TW9(*@uIQ%W1o2>6tAfZ9-8CbBZy5S< zt+J6YJpy1X;%TJXdUMp_{_1d(k`)zw_cpuHL-fybP8tTILWS4^hv{Mt_jyo)Trsvv zED>pUdZQ`qU>Fi-=|-hV8>i<#9`#laZNo1oxLAVM+NGu+I-Q3?cu+ACO5-F!t0KEc ziIc%>TS)yNgmsS%8QDMTfjN;Gr^}rEQSXsN|$FUL5Th}lbsi` z4ZY>Yw3`%nKmf4C<> z6}%Mu!2D>t++tbR{W&{f#HlK=y7(@XAT|WsHO)=sxEkMiaO!j6W1?GTS;f3!LC&a# zcR@XJeG ziGO)+gwRCCB1v+UT$;&EMqsh1$iNqu$8augaReYRs94$4-O{{3um zc6NStZg%=%QLc=Uo)8lf8W9$ajK>rfy7OJR5EJ*eZ|mbX{<~YTu3=*E&+Dgc?0^4P zfLoj1!tzA@$E1LnWG-E%$>F6*gf#^q5J7R<@c0TZy>u%}+Xt-a{?tka%&VP#7IfE zvkB=lE4x9bKdL!!f>G^w2IAxXf|IJgmjjVyVAwA~wAWlfbh!y>QG^SQK98Y^P;ZD!M% zxMF3$5)6YOFhp9})$CG9)038YVnHo^8C%=j`bXnu{+#F}3@sxdAVXKvqXp~0-t8;b zPA~@6hj!McrZNpBWtC;H=NS?`l2CZh0i!J?$#yj&!mLE^(MTO3Z!6vZnp;jHNR3Oc z*KrI*5g1^x>MlY73ChQiAeKpSp_GM|Ms4;fi4UhXRmu;6^S0+`-X@U|hLdba5Fb6v z3zDkPzFyGJ#9I+9Swd8SZq#u^a0(obL@IP3rx#yjF|fh>VNMD1$MDI%K%qUr&QVnr zja_Eqs`-3>y^S%Hs0M;VVb_cN!)gNiLb7Q!r_f04@ITXAtRh)tNV!WyTV}_x9r{oC zU6ajjxY~b?C=%Z46Gc?#(Q3r|JHD7%k>HYBZY)Ad&x>M^rEa&088)8fjdNuBNJsil z-`n2a>Xi~_Zp^OuW~(ff1YW9Ej7p``Z?^%Pj07}uX;)@Gmrd(Fp}uRHwq?Ca;5Zgm z+9j78!DQUnzL%wJWxZ$U0a*^>2!5Gve8a(% zc~P~lPa1RY<{L7D7>Cs3NvI|VBms-1Dk@nNW#uc~P6#eKvxETIuC2yCXKy-5bPnqH zK|v`0aF??p9$YqqaTNzP-Qxr)*})W*6u)jaotkfO&;ymo@ie)fW-bYmswk2K_x?L@ z+D;HAH5VpVu!Ms?BiUM7*UOYwxtT5O>e+++X3xwp)Alhebr9_94A}2~fW2KK2O6;~ zZ?1Dh+N`LJCmzOLm>sY+R+iA15Kx)}yex(%Q4)Go#WR;M;rxHz$|`!R;LXsZu2qgt4f^Wu=if)rI9lM=uSTd&SL;ZafYQeA9AJtQ_Pk zzUHJ$TXl}6O9BhRw4mkcfu`%F=i5R=kJ`ZTuA@R{-XkGKy~CQ>tPJ|}WgcKY3zKMo zUPbkQ5o`u~!0AF}%Q*v1f#YBrjI!$M>uRA*I40uf?O!vqv)3qC$cZs_dRi);&dHF8 z`OHmcFjXa7R*Ab+3s!+ia3KuY1=a_26_w}%VlV7d+u_9?Sw%fnIKo*te-mGBV$@&{ zx>OAM-$jAVwbJ|#N2)K(wv40;iu|aN1(I;vrQR$%lh4`k(VIsi%`yz&X~-f=lh{x& z6w$3--Ow;}&D^F`GnLO5^b-jjU+O>&M0q{n8m2+0$l!I<`4KvN5Iqd;?II*&gkH|j zg<%B6Na|oFq%vt)JKPOyO+pDlwa4y?9TbDCzU7BDG8f3@H*`Z&bjOcInd+*vd!%Sj zTY*|%2p8anm|Rw`rWInpu@wHlRyw;JB{mIS+YW zoaAdXC$QLgwCStBI>sxTSSr!^d=@xWj8n;4ew*40gYmwqv(bSH*wGQ5C8!V~uMn;O z_eYWlqO8kvl(WTLa>by#@1mY^aj#)YxWjIcO34ooI^jl&Ro>(BGYr)h86wR*y4{3a z7|#!az$j&dM==7wi8W&dW7GOE&Z?&Ex*pzId?+q?>3$TgE%aKg?!KcLrUp-Yeh`GE zU6cyGEzbLVd_VOUv{7wB4(JApZy`XkDB>rK;f)T*0tAr`CN4)D=Qa!<^gmGG$2r`> z4Ytv~^Ou<0?C2T5*~excv#wA$@XyIC(e`^HbhSNACtg8F|)9vF9ddffgeFOT~d zeefO-^ce<7$xez?-gDf4Na4s?6|ZKkEI(|uuH_j?;8})Yc;3=^0c$RvZFWuC7Ry=R zav_ZiLkYf~tXHy^x~U3x6WI(4L>?x{UR4+QT5??3)%e)3=Tf%qZ<=^%jvy$(O38-l z`d)~Wf`!S6l{J@x6(V&ekCSP(4h$nhqW$mJlx93DnFD9eFwl)T1|cKvWt^HUg>;6@ z#AN{|czMk7;AQa=T~19+p^4|fVl~M)G%N~y)+1i^s`2^MRXM6hb(K3uFX2!ySQQ9) zWtsSnt*NT*$D{F2=G|P5Wp^|ZniA^!wqaP7;{dSfI|jHyBYkodBhHKHo&_d{?sVRZ z_87x6>@r**dy50V>W}iZEp=D+ExjD^`eN(3;r9j6ZjSbv%u)sMp>dfQFGgtfk~mJ% zA3Lt;?cC)`y#?9RCYBK=DY{-Z*AK<1;I4BIaP)$U?x#MkIO?DVBEev_V&%bxqNG{F zqj8l2PfYXhsy)J7T2mVP$SlLq8cllNL-`41wy)60=uWLWmga*iMdLNi1@T6c zyot05R@pX<-Bp`ro8;_w^t&puu{@HAJrdxSXw+))>^euP1&h*}ua`g8Y_*zc2|Gi+ z@vUVNv!dK$Nh&wV?Lmi&o9cK_pX1(^rE9uTWm&*r2q~3~8xe3N)Gmbdx317h1W{L| z%`DB_j?>|q=Bqq{PJ<w1B`YiLq)^gKW$9VnV^(=9@o=4Y8(MOJsSn4s&mgr0rcoGI zz(PpIawY=%)}EkkOIQv|Tx)t4{W4|G?nvgux>4McbOb^u+8VU0G0Cwk#}G($ys&I1 ziqkOs@nWadr03X6xlu4(kQ)B{fNZ?ek?pS*Z(~W$GCme$5hf!53X@PAHlsSV2-*2D2gMEE;Lbn21|#KFrW1z#tPCwkf96T%=FUzr7?_+rZ$j; zyS**f!W`rVMKY%c_b{l;M5IYsw4Pa5!WzY76G9pm!~F7u0GBRa+OoM~U;#@bUsc^O zjC|iKMn7Dt*4$UlaebKrc(T~kvjv3?mA%>wOKE#z(RpiRgl%QVB`*G-_ z3A#mdyQrYljG#!!{nRA1z#URK5t7BRgh4z0<-_ccW3Y21PH`VN2v_hh5hijfgGhYd zq?g?JT2{|=lR35Fs_NBvY0Lo!l_arO1S@(J;>vK7 z;m}!n?c&A6P4v*Q5$1U1^#=hMZ;TxFBAhc|tX)eC!uCFE)OUITCrj6w53gS{6nzY9dDw z`D5SlP?{tV2q8$C1^T;=@<=t=XL;7eznsl961>5LZqAMbS#@%opT(gHn_-=`2Eas+ z3@0;bY&C0PKk7r%K3$X#K}kj=${%Oj7V9)G6$l{5 z%DR8HE{zY`aj+7;zzEsKab`qRqy}(K%w%AfsB(7h0YoA&n8eGk9+ZlW>&QN0bfDSG z<0U+ALR+@Cz??;ZAix=^|6pZxcmn&I`S1W2!a4b+<64=87ajvbBM7?8gB;vi#64ci zvC`iDYB9X9HxO+1d)__GevjX|Z2h$9CELHBTfKw-6>e0Qk#vp zA6yQ58^`3N-yuGX1hUxVP+3)V0g!k?MJa@s0Fs{iJwlLCMt8GKhL@%CBAR_<&ey9i z*P5$>0v|hZF+{nJXSB3SM0SI4fTC0eG{pA)E`FQ4Sq5*R3QBph+hZXcog2goU(BSV z%_65AGn|~-k^ixyTD3_Tc2W@JPhry4wm~;4s(fcmKM5RJXTxP)Fp< zOfgLv%QJG2t+>%-rqx2mwAHeiaH&0JmYUST*39_Lkaql1g_nnkSMJ~*OkW>ZgT>#h+jBb2{p zz)UDKY&HQiG7%zOZ?X`;Cz~zBn;O>!0DHiLD{a?!vN_q1%(Ae5hE~G4RAL3$Ib%yj zE4U1ieIQcTE;*Oh?|Zp^!; zys7V?RM<5BxrJY#MZM4BM~jeas&@bD7m>t1r*IAIlwt7lKO71Dj~JN45uA&fIsep5 zUw`r78R$Y7cto(N25IXA$B(m6S7lbp;hIRTR2%3Iqein?EI=FefK39tNI&!vDDkLS=nw_3Rv|)RJZ+>dZ!ATK< zkS8%E$}}UZ)m(0T6NxOpp3Qt4eSj$N<8xgMM(Bs{$Tw!+MH_7EYKEPgH!z=G#fH(v zQ>V{aI~43cI%mc^6+0Fm-M-=@Hx4S^aoOHoH0(7t#{;>`*7IUYwtexPxf>hGt$GKs z;H}ka=T^MBZ@PI58fI#=Z&@NtGszS-c2}HHhV07tDeM@)9AAdr!RNfFL7oYT+LC7= zz*Qu7*C@t3Z?;NEvsZcC@`@>|^c#9GIFv~*waHz<=zw8>4cy4G@5w9`rF!DWZ;0G)z>!#z5^RlkX(DuWN7n@=X>#+jpTlIZ%;{ z2(I#ONqCovP0KLQB?lDvu8c18{qnlt?upPHY#86q9-_>S)dNxRN!kLb^G*Oh|v0VuvJ?CqUG@N7DM$t(Wh5`J*Ra*M)yL7ufknUcg z7B~upJ622jQ>Pf=o^P}^FgC(yju-igrkkcN3zB@9yGJd{uxP8M8)-hK#1kmemN1vn z+R#r}!>x+%*KAFqP_(095uwii^YkQ)KSsHC=pqbP;0n*^cyjZJZ|}jNz}a2vMHfPY z5!sq%7eN?uq|j(ML|65P7vvcK6lGid^wLcw9cDP6!hLCQ@Plq+*!Nb&-SsM9RQWV3m zSl;f>w+GeJI*E+*_!LDH4uRAXIt!BT%;t(g!le^%V$rrWNpS6JA&!lwYkGV zO9=S_MpVjw%ew4p?%?%t;ekv9%ElNgE0W+*kPZiFly^?8LOIg~n&-2_=Wl`awK@$z zT%P45syT?7?^qX@9tnhG8RA%@C4~`lykadNF+*brqS?BHCegd?-5(6smmg!`NjwHI;koos zw~QHj>(-nDjNhLdnVGvz*QtMd4KRhpbFe5fh&KnfF6Mm{g)e9eVn2EmHd_WV zbG#|D1SgQi=e(r-)*zTZ{^xzJs|C+L#P4-1kzb|k4*%NA@s+2Zd-zQoqu{N>q_3xe zsXMM4;P=8A4ZnM#jHC!C!H^*CLaA9M5k_EI=%Qri<2H@(C~|p*QNuA1PE9AH-VPMs z7EuU6-ljGzO%XZlJlUSLz9I?YGp8g-c#5A*&A^_MqM1m<|5VX)MT%3ZXTymKDOI;j zO*1WBrQznRV9O#?EG$O>S3J3HWkcV2*Imv^r{gH}l7l`CJ2w|c+vAuFbcrRde5byu zMaSPy4~ZxbV&ukd#XX!Ckcm#tg+K5pLdaMt8KWiSX}pvYt-_uopEMS|AEtuFafV&J z`}N&#v_r4$&iBplnY@{9>E&Z>{)jgHk2sjbNfa^XaCl?-p&j&1w%!>=_74v0Yy7xp z6t2!U*IF4>n>X5*h!4{xPK=d~yR&1i|MlI&J=@)fZQ0%{{AO?J8z#2$M0biCA95(k$mR7FF5yf)Pzc<6)hbEOTuMOGH?gW?ej!q zPM`rIBkPW55nVc-+4ErA)8Qpa5MbUf*C){}Tvb85iS;ly0*F@WXD(rBm*rqbwC2@; zhal0ELu<`33AgJP3o%EI$g4Fpm$+K!To(YiF(YW3yuHnPLVttZKa$fw+PlFb7bU6# zr7cZRvGUWWr8zm33bPZ+m!0yRz56ym|l)!xUVeamFGRB-^_CBn2|=;qrrUKsDj zd$vZXqBRh+kBL|jFDnUc4dP74i-Mwv6jqh#bI6oneuzZsBDfYUR66) zLyfhXX2!r7(mXxqM3yE;Nq>$r?vfOiL~sV@B@Fko{-Z9tzx&XBs{Pu3iYdo58)UcS zpqU=77(Md@nKgsY9bQGltbFUfzXh7OE)LQf+Dd2)$Y>xXsr*m6Kjid!od1*4!c3Ui zyy!;xbgXDRLlV5G8Mb4nB-~*|V5$=4uVkV8^A69? z&&{eFjHidRns7p;h2g9q8>S^vR%qH<5!p1jPQWh*_rd4a7t)2?pQ3uzDjW3gVN!j~}#~*XI*a*G4jAVpW#8p6l4=`#7#2Zi(W2hhZ=@MC_VB z=ySr`{^B1$Xawi}3&Tmm=CLq09i*AO(!yQO=ZQ|a_55AHkTw)0$QuF8lPRRt4ud3# zEf#LI>VJHA0WJ{%OIVIwdX;sc2<^pob4d_&r);6`M+f+G2U_by1YXG) z?h4yZOiSw7LqaGgVhJwbbampaBX3{$*yGz5Y7c@Wv(DsCJe#6I-Wxj(^hsG5Gl|u7 z>CR5>h_8r?=;ezSjDd%9+irWjwEg-i8azARz;GN=kRpy((W?!{TMH1 zfbac{@8=UcXOIf1f<>}t9vYs1jT8*!CL@PBRaS>w^_ZJnoy;631}tAB37+rMi?W~? zPI2LUpP6zM$f&xoyyzod)K4KPhHEqFpdCsCzmgP84|}{H=fje9&%GjbU@jO9R5){R z0-JD8X+caruRo>lGERYTSN;?HsArE5gakV;of7XC(xB~QEN-~M=FvyUS%p}JZXx3<$~$DDAi&kpqb>40cv7J&CE1BAbdMoMHmUy1_swRUaUP2?$r=tc2sPiFQeIY{tgs z{zQhFw7?iRFppZ=1qR9uDUc#i-2Vi(?DDJNmNIrp-0LLAF+r=NQ^W8dz3~G9_mHJpuRo&q)t(n{4nRabkHzlk>g%sg zgj@-hZ=!W@jTW!%yfC|puE(`bsi`Y3JzO;~O~v+beLZFyyl;M$r5pAtFKxTr-~Lom zbs?%GVBvk&R0Yba>Gt>Q>+jO1lE zyNQHA;}>Sfo(lk8oOjpSIcZ(}0CO6j0lU$=79ol#?7HCY9laqx4_3n0j$0TaAsi~Rim2F-sV?AJ%ba%6H=t4}8 z1uuYGJ2M$<*J7*HlSYp31z{#t7OOSKSFVaX6SMV!c;149Meitj9Z4g8dZ*&9mFUu zqc8-FdmaX7CXwojRPpe9cETck*8)HFcFHfaLU2YOs{WT+&0nTdt(dEKk)I73$LX)W4V(cMU)v$ z+h;DkE)^-k%D%Q`EiiJl2`d>+d(kf5vzLTIKinfwTE_PaT=ky@ZRyrB#c5|jZzFR@ z{&F*SCB_u;D<#)$nv>!=R~@cz5lA>ZR*&p$?AKZ8cGzw>)BI#Hw?FOP^icAe+{ zss3W^ZA?x)RG@$Bh5;Bi*GS7yK^oS3>$;JneT`uM5vRZUWW#=FZSA22^juvx%GeD? zVf5{;`$+^{+V9X8W>Dil(abOYGBJ3mJlY%zvxjx8NFlYqf{T}Zhfq);Nrr(CDFt{j zCboJecNINMtl3E<;vY}iH8*66us|UFU5EQu!jBc}EStw?7xCQR6B(7sWl|EOV$mcT zi@gpJy^5h_r5>yUTfsK45sW@|gss{R*7~)OM=%c>>)6?;<*QWSH(%`8e6e|g`||rb z6nigxfH&t@znv=Wm#g6U2RCgu*KaOw!+qmfXG3Fm zXKkSkyABa&2zc8DATauh>d)g#L;@ilJyL#hU-0NpgQ5y67)MVQx7@lZ@Lue?Eh55y z<-dq5E!J%Pp7mk>eP)3w`??k&`%5|uQ`-sFKd&RzR|3d3N>*%}r|k~28CaWxa z+u^(w=*bP@h7fZx=+Y+O$zIT~bMzH3YN7PM(D{K&AB5H*GB5p7Tq2%mcPIM%y9|X0 zNLX+0deREr`b`v1ja#B9)r2~ic*|@hA7}f1f}RMCNqQKeHRV9T#NS}t6CKw^vnNSP zYIb1*tAEWm>&vlZk6Pru0bm0`jxOI3Z&?(w%}Ni`stm+Csa?&=o2$1(hj;NaZ5=&l z4Ew6=Rbsf7>u{LRy$<4JCdVd}pWyvb@PU_ut49H`A==J?evt5BqRJJPo34H~Fr~18(y2yrm>wB6y#MD!n`KDv!w2H^xT_p`(ViA~`@PR61$89=H zq$$Aq?G$oP_&*r%glc34hvn(n7v5_9@TXmPx$sT&e<8lDr9%8)+e#dG@e0m5zqVc< z2sA%4;tTB_$G~>`sau3@Zg=A*4)7chE_^4 z9*5y`g?(#RJ+Wt)MDeTWlKxNA^b9WSz-JJ8fDu2DlMSy;Z;umL!85BuJ`DpA5#heA z&Pdwo3#Jx0G=X;n+R816Xhty}oWXuBZX6EE{UmcaEOI0O?qdM33AM zO=Ss?bvb0>q?ddE&u?h9RMwyhhfll!ex`-tf<3j93DL9Q;Oc}+j=*fn=y7WpkQ{ru z!r+3H&xgEwgzWq~({GTk9=})I>K7Y7#>tC(tE4qSJ>?yo1Gx)5C794Hf(>0H_@Zxw zXULgQj~)LjqE(r1kFw}?2Pk#5^SVexz{PsH7?5jMIzE!kug#6Pr z`5`b~FSWG?Twbm`_usnqxf?%O%x6Uv^$*@;9sd~~uic&dD9~5X%@x=2UKoKGV_`TI z<5((g)WZ!AyB)v$KZka_lJeY8Js@Q_JnXhmdA4$YMq&#RO8ie-Klw8HIOIqud?zZbwPO@+Jo^h}!sPtOg|a+Ha@}F51F)$yIkv9L{1UduGVK5kd1d)o*Iy!! zJn+&6v{!dWdVf!DM{aLI&%CDNly2|H_{AE@3U^5`+#?C$Jqd#&VcP%&UoV=%-?sn# z!Joe|`JLj-_oh#pNkh~CX2mB?z@`J|!Pd??s9;iaIafvl+#eHPxsKj^78y;BXV*}d z_w-n=5K`ipx^-1jZJN)(Lg0~`e8(1_{>sz}e)ii}j+p>%hEqL}@O`uJMz>Ge+aat% zR7Tyz1IIr3F(KyrpF017PdPj(*OXKghI?ye_8%33?EBc0erN^v|BwFW?h}1W_Ar0% z93sBR*MT|e1Wl8&JfbJF&7(!Bqn_F!|5x|c3@yBxEX*jPf3Uoi5Vrm(Q+!cS&yhFQ zDgS=*CvLkuw0zk-G=FBohc5anHrNb=sH1`2-P0!@rCDt}{rvhx?)7Nbsz=i*<9efR zecdj>%vH_VMZP5I|GBaQpZ`DdkN;Gg_~yV!v_JdCccP$j)0Jzl-}41)Hx6v?R++K0 zYGn)(`2U8OBL6B$-~2V)*}Ebkqo2x8H1SfTQy*t(UU6(@_;=Fjd5)j@LmfgGNTE%a z1tkHBwaBoQr}CwiSH}EycY8Cwf6~G=ON}lq(zSDh;!8uBOkYj#kiIw4_-U1!cqvL< ztb)M}g%^?#W1@7`Y1X4&s|wltaVSI0LkzcU>J;@EkE4z;XaALv@COu9WX@2=Ih3RJ z^;x~rm59V%T<#(jH7Hl=(@DK4q3RXu5UBb2txeP5wKw{exV9A`gvku7x+PQ?D;C`1 zK^Y}pRQR#|&@R+ndOVWX_f*tv^iZ`R8< zpW^DeN|OQe6&Hkxy*Fo(p2F*mP65Ja+ku(TO>EvN+H}OLXUezS9F5Wg6}kM8!N}Dv!KqqXH%*aZ?qo_SsjSw13h8{2qQMqPYeO88dYOrc#r% zzUdr-3`$EqfX8KNb7N|+5Tb>_EB3B^w-?>#Q{}z-E4ig^L#uTP7_dT8FERXMCwk8r&l`FdXXij8#+l^8~^z8j%jUPoW7kkdU+U+m*WqG^hI3d>u`putyG zyR;ZHMDNnE;tre7Z+dOrRos7>0ntozZ8#N{U=8&u(e?`4&v_7qcgzgE&a7&sb%JM+ zwF=em&~Nk~^pyj|5u#CRl=g?s8MNRlg&5gfIcoMc;?oraB`v%~55PVwAA|}dUK7;+ z_Fub`P<+c$v_Daa#=(*5RY_CLfO`vQhf%FVmkiM9$}2Sec*X?!7cPe+h=*#?Fa#Ct z2gd)~a8_F}czWWpcEkKQ7v(Pt9^4;y<^ceyb`U&1fr&Q*!8^*@Mjwt*-utQNv3%qD&)m zH!9!NNi>^j)c^Oz>^w{W4{qEAL6U$XP8!nv11@4(5XXg}Kwwz-eyL0ZT;iD*PDzcb zU|W($kpybNpDpO(Cl#95Y}|MR?+@lkloJadMjj#9H@&%V%`8FXTnt%B>+^g&0+m#z zTzGUaZw>-Trc>y;0&T`qw4b(WCFP!PBZ4bxb5w+9E@;nqgc8V7SDjx9!k?Sa2TwHg z{FZT&+lb0X%S6ocIO*m2(zpl$A;vL%!**Sxw@Wg``AASM^ zefh155GD4|{>&suk|IrpEIIPf6exa}Hfz$NO@}UYn|=d^j2K&GV@eB$s{dcZoP`H0 zS+Qor7A-pT7%*bO42}h>6Q_PFQR>XOKVB$<)oPbPNAR#K_`t}KBu|aMA)r4>5O5Kv z3RDQOVb^HD4r*XtYeNdkLtO^l*I_7727(QTWGWuA_f8*5IvsJW8&ZZ^2pn?cszT$A zUc|gJ%eHO$?U5{10t)Cb@$kemsvL}l81JbxhlC-R8#3GpIS98N9MwDEdiu7*;Cl7Z z1fhk&3tGp3M4^MhLqgkZ0t*gLAd<)wY9?+vqo3?6zKDLRANbjv{?WC)>pH$bnB5kX zSQ1S#rk`$#luWMBH!w6ZHYuXqDvx=aRP%u3m3N*{SibOl5ZwUKGZJN@pP?}Y6o}0q zhbMHwm_()&L@lJyf@yRHlO--8Db*TV8Fr5g;}lV3;j&!0%6+RS1w|$0HrnQ)s#dgm zvBCXSLsLsz$BI>5J^l8D*5h~9+7h06X`M|-OiJ$WdNeIVL`&%+!-IUG3Y`&U+m26w zjRPi3n&LHW#%wur<}EmEk&i!wH4aK$BBEkQ7vr39*1)8s0pt9>wlRkaWO1A{}uA4f(%jS1f1TycIKKYmV5P0!5E%`Yr2EfdE1eOTYv+}hsR z-P=DnJUTu({e6ZSXW-)U>bha$#i^fPz!p**lpe))T+fFQayWmOI6+c0!*aYJO0uGA zx?x(j<9dD&MscE^+{^xa75%|*G@eXnb1(!7gCmeAG-gboR?X>L4j;tf2}BZ^LZ#6e zOqRHWq}0@gFUznwvRpZN1>idOtD>r=uAvEC2PKrKq6#IdM#9#a0YC1PcY0=aZhnEW z&cKnSKoGAERX2!$)#0U{3{J4rp^7T1sLGXoStX7aL`hauO*hIFlsa&MO$V5C07*wc z(fPZD5fsA-lA;+Fh|d50WkuC=!?bM2_52`=;v~&-h%ljy3#qiR?(0Yb3W$=dsG4q= zmhHG;2owfKAW>)x7KbMgNn{F@MrSZtYz~*l7YIdSiBwM}SLhoU8X23InwbY-6sx4y z9}Gw1$#gbfELZEzcDFwqPv^_^cGt!_c%(>KUX-4zx@kLkzTThj?|(=Ac6{)8Y@7I{)lvv~orA{u6kD2y8K^&=>x zIgsrqSZtv(+ta26cc#v#oNZ`(%GrB0#9~z9N@D{nKRK>-m)}!yT=Zlu$`7oPzInRa z??>PdlI0Fk0~-7A-LenHAL_^)MQof@da#u25o7h$v9r0&YmPx4%LIg?XOs+rTI+RS#M zOLZxkl)2)HE0dCv)GPBf^-8@mKdDdZJN5OPg+W0|`U&2E217&{EpR{6jf-ET<~Ob# zyGpW!Vdu8_6zO5^DnYi}VGk0*eL6nbTaYBSL?6(dV&iTWpgnyYL%7EGjvBlDy8+Oi z(46Rsrf37tak2D?pMoxcS@>+Sd>_yY2Zz`LCe}O zQgoznrvBh^S`}BgWIt;tmu7+l|1f)Sj1GH6KtxEDDh!aOdO zHn|EB=5ZmFHa1r!BBaXI0AfO!$Awhd*jyiBLb;Gi8=I>GM3_*ArDg1tQI6$2nlDD$|GN*kMdAiT8%h%lkd<3hR@)gS&QCX=Vu(Cq>UbIk}NSBTUbp`6*j$E;?pq^STdn1>p#wEP;q*MzP^6jiiu%a4-@Z20zbb&Y-L?^|BD(Ah^v|L}jm!X=qkUa6M|Qgu5) z6Mwyy;M3~Wo@cX8o4`Fc+!W`Pjog@j0wc%_Xh|sR#TM$0>b5Mo1D-}=#y`qGdCARz zp*OR0tU3L&*mgOhfte*?nJd#eadea>iXWJc^!W^EB4{dHe>YyD#cS=0_J_q0E@GfI z_}ZBBcX>JwbKn-Zg@S)8JtBoVPe6%t)C?rd-zcm`Ua-YQP|;&ZAmaIUjeJk0m|KPF z8}JjR%!}W+0%!{mreYe#&H+F~qMHF!WGeu1w2GKAkL&;T3-5l1W9atnsSdu{#D7#% z{B&sx@=$j>{ZH;gGX&OD1cSu#8lGsTvbi=ulBvLk6(3L1va zvn;@}k$z9k!Sf`cH9l&;-F663Vf~2uD)`Ddnb}hdj?)*=-^|yb1jND%N H3Qq$7iB`6k literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto/LICENSE.txt b/_static/fonts/roboto/LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/_static/fonts/roboto/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/_static/fonts/roboto/roboto-bold.woff2 b/_static/fonts/roboto/roboto-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ed8b5520cabda5a8856fd0cf64afa7d72be193f3 GIT binary patch literal 50452 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 literal 0 HcmV?d00001 diff --git a/_static/fonts/roboto/roboto-italic.woff2 b/_static/fonts/roboto/roboto-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..719979294248cc489ad409e0bcf82b66c9a4ee79 GIT binary patch literal 54380 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 z�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

e0Vtxj!gu5E0!#@$Ma8+HkhD;stN z#H}n2A@@OyP!IuvB55EnLQ$D9LX>f6jFP<;ny|H$lFp-MQ`VJn%*0X|hEm`%Rf0QF z!aGqew$k}Ptu$N7(NdtUDzjK!K=HT|0gBKdAwtazAt7R{oQ}JujAg2rrmCPoRZ~P& zSGJPeU3Dn28>~%I)2uF1om5(^%hc`4aACeMT$&!Crks?JgHlS0`mR!2?eeNo+_zKP z7Jr21*<;N_keihLD*a>f*X+MuPDztntg+8Zx-Th3PLtQ*O~jB)>ch-RJgHU~{WLM2 z>sgi?XUu7oZbjlYcCR6I#DbsyIimEg+VipxZvPnV<0mg10D#6B5l9cjU`o?{gI$Sz@WW&^Rta@9rR_v7Fp)<=t)v=57&t;f|JL#vL;lqiIcTVZM>` zZfGT01qxsP8K!iu+VQdjZr>d3;ukLrLaf;rkvV4o03K@?#uMkTA{vrB91a%*q(!R|u7!*F+V@9FNe z>(f3*<2Gzxp$+F*ITxWPKYLa=*-|p(m!7(XTL++DMIcdZHGa{eXc0V z;#(sj_iQvF{4dGWY&a(*=bTp2JkRkY0(tU4rkZ~t?6HJ`ksSs=c_yQKVDTSA0T3-7 zYLqyj&qRq?G~<7~50{y(UXMEI=~b%R-OdB#@Vi9X!|~*M^~fy5nzPn}&{{)GYb{i* z$ErpOiOI6S*aA#S*hgl}7;|t=nc`zL10;$HK;ij-LLxBM`ib!-CB)etDT-pKE>~$F zKwyFpQJB#f9BMWigdG$WqZDfn$(R}?$+LZ;D9f{|y|cT$az1^UUEInN$+|yz{4c3* zeCMELt*qYO_~A9p+2@kg(;aU{SS^OZG7c-t!{=atdkUcYV&*f3bxs-cW4Ag!Vq2z( zIVuqG77_84jmJ)H2Gho(YH_jSXvK#TolI~z#RpZLRCU&QuQ=V-E4VGz4E#Ov&br-p zk%tP$f{za>a!|xODfChIksx>|RLxgC)5TUnX8l@8CX@SGtKn8J>ZVJ#x0Q}s0D-b< z4rmu9#9D8Z4^y~G<+BHv;Ng8B2tptpl~S5iO4(uq0|0;n5h-RG0D$4BZ5o0Fx|&k! zjZ&+%)Nj~s*V)C?i?b{WZRa26UT^ja1eTxMJm)8#q@vB&~kK)5Cb=S1L~62pC1 zq>hfslgupQ&@4jNw#2rrBGarg)2u<&olw<_y^1RZ<#+4Q@o!1a*6lg5b&V~Hw=r*m zu9fz+e%cR~P1y^!`;gQxrSvnieNc*VRx3n_FDB*uqLlM4byB~cVi%S(+Io_GIXhhK z{&u*_r1gl~fN^CUF||N|B?h=ifaFYo_Dq0} zEpj{-C&?0Ywg9Xxz$#J%9=>d0zwj5DSJ2f64&e*tBIe8x78BZgt8%7HzqFli2Tj|* zaP8L5dUeMCt7Ton^AI;b*1f+%-DF3wBsYm^d};&R7$G7gt-h34?xFrNg5D&GsI60b z9bZYeZ#ptepTW~=#kHL8o&IeBK6X|4-Q1$R;}|2lN#|s&-)5{HlS2<)CaKdmrVz9D zzLQxIHZtn=h;-Zd=*ndQZy%=RSE7zNG!&mLcKgWd^2nz!))v&DClPE=h>($m?!};q z(G}{-b=C94yvu`;`e-BgjV2)a{hyooKaodWfha-98&5d0QVDY|?OAi-sG_hca$Eao z{2nNBQ>h&-<3X?THWGa_xH+%K2ut({jq+t`yU143<3N`96fC>cIBinkoy;yLp?|Ld zFA5s%%vWy7J+I4^Nh5;iC zBUb#dY$Jn5F`18&AQUD{I@*Ht$?eHeOy!=t{z!&zh0XZp+r`9XdM(<*@KQP85aGSl z&RlSZSB_{Uf)Gj>S)6iZ{>YNTn7t~lqrY}kXc<+`$~wAiD;cAnkH?Ftw^ep3)I~0q z#3wBFh)PvQn%5WZIpq_>t7%L%x@1;paDf(cMU5#DmVt+ed4w^q;@h}zjk3vz=7l^D z6HCh69Xs2{>2yfZLquZeegqv|oqc2)Pt%khMCV#^c06aP@DGK+j77ccRXU( zCwdc(ja2MnC-bh2ABC;^3=^~%!%2T90T`tP`6-8{`V#ycdmY1fkF6vQC5y{7XrLo2 zsxhl1Y?X2hQ^~zMsasxuCcD%Rvod&$v6uJaw?1i-nf*7(YUq=;FDiHVTN$M=rAT_! zNN6^Cy1_hSlQVEIQ|n2BDo@+FbIo>0P4Bd>A?L^%NWmz{XucODDkPnDg`Zo<(BLpq zHc4c>QX&(-HU8_o}s-A0|e0dW0j{80hZ zuaQ%q%FLPr!8^nnKcgsb^l)79D9I|ja&D2ao$_^wsv-R?0g_H5N(Ga{B63Xi`wewD zEFT~+C=?nEg3de!Dz*ONm*l)^Ti<^PUH>GxH1vk8{ERXrM#I+ z4WnfPm&@tg8Zw^o&hSF9CEt$fQNCDn-tHwqhTF|%8c>N24Jp<5x0DYUAAB~%hq?9) zv7V!s;R=?7N!@KYPn-u!pJ?gm5Q*9L&$S7HKD2d3Vtz7rIc9w>jA5y~cWu{U9^!~7 zH2t_%z0^4$Q0!5mpdzh7Z}mG^-vqfVi^j`nNQUxVAxCm6#}6Ym2LCF}%4x4{S@Rs%8-No|M7;|fQggG2w0!P&wp8sA)Jn2f$t~dAY`(mZ8fB6FRjDElnu}6&?*`?e5^L5MO1#435*Jq zqoFBkVx#roJZh~GRgb}Z=_-&Y)CK3`A0TTzr$!tjgp$|mr{`Sc`y-tZ(Q0?SQO14s zoQxRG?<WF=4m4yF*qsSt2WP-K%>X8j3)}BapVNj8( zx7@rTr6kj5G{;QqBojzPvt}r+IvK}&&Qngn9n5X13_R6LztQe_G@geBi2!m zw$GrP-y6T~S6UUZq3*V|PE8zN3FUl9`N(M0_2|r@;ZiZhy6*w*?*;FC8b!iEBoPt> zAz5g6fR-}wcmVc~D8>#P?%Z!Nz6gentjOaRk&HHu@l{j{r|~<f$IyT{i;trr*q>IiSm!Qklf z-VIhb_?Kchq1BvPj{v(^;L>=*^(+tXW51ydR- zIw+-Y*YFEk=y;z9yU}cJx(5m9S~HtubFwol;g7v?PG2f%C6^(8GM;LABlHpnP2R(E z$yx}~uHDj-tG~PPpULRD8%BoXU*vuXzw{x+K*@&-s>hNK*iDvDmmhytA)=l~L?}=* z7gI{-XHcfVrZTg$4~2LsCn)GF5kmB?eQ}3KXi*V?j`UQG*FK6IH#%?o<-;V$&{57j z3?*H@YmknKAO7ZXw&*CWO)LnvA>e18Hp=rV4nF)AsuJ6Li{vrEkVU+fYDk7C15 z(#id>&77>uRta4y`_;%l@sUteC1g~1gDTXhyu=(k-&Umc=VesmO+7OV5vxwCfKMK8{=a8hESo6ILIFX9u$~}j=qlW*|Fck z7DQ3Sh9mOun_ z&;{j&trxk-w9(;wYGj;lIAc)rJvkmg6MsGq#)oBtQ2M=KS}4}TFkJRZL<(!{bvo+# z|7)1ZA=!k2lEv_2LVmXpk8-MsB0)x=vgOBd+7X;+Pc z^_yV1jCmye2K~6~mc^Fdki8f6-4Va_w+R;7<09RcXg8JFGhEY3)ua#Im_dl$Moh z?xL#6StaG>d4-j-*j=B!rS$`X;vEzg}J6B}tVOb3~oW<5;vIqq(aAIHh?{ojvA`0R9c zgP{-dCC*v(5(w{%#r(G+f+Z{2)U$6wKb*dV`!~zuNJNy z^xbmsi&u{r%wXi#89EMEr(yc=@Q+@hN^FR7yCx*I%9BY~l8H+8SuJ{I6X&Q2k`fw(jH;qjsp@j#>Y-K+0d7qKz98MiZU~cH8qXb*N#X`4^B>#C@9I) z)a5GcGNrY-YU=#Cg@$6rM>1t=nYOmhoE*n)PV+|>y61aX55cei00<)bbuSDx9Iz9V zT&AN^BOmhBn)W8?!u6MX8Dwukq>-#o6R}W^Mfykv&vy;3&9MgS7Z=3p*wNC(TGZ78 zM~**R`14!fUk%3f9p3hxUugk@LVmGbBC>i=Qvqf`pL<+1E2QVt`#!#}V^@evX9bl7;kx^$#H$YvXXXBdc=P z3i#2Oe%c~91nVNEa5C%%m(cYoQg3$7AAs$RppMG}Ad5@O;yOVt%}ANLn0h@v=pJBn zt}H&05mb99GsuHJ|l;*hHuL~{-)aUlW)DAX{-maqT$H*AUkoyMM* z%Dazw9?BVUFOh#-aK#2~PT{PRM33;+t&okGrS9Lo`e^Vn&PNa2{mGMR^=0Foi)At~ zBhcZ}2uX#@WI9LW_YUBqgzP|gO=jS?_gy4Tvb4#tdKp#=>HnLT!&!h-UK)E}56^S( z+=sq!2JH0DXQvk(4^lkCOB>nOVFly&cu+idUXzWq{6LB|(%iKiu?-uR*Z_nPS~oc!}S+i_HX-^{U*V>>HELGV9iK1vo?ZAL;m z5`1w^Y7Ye-j5aE23j|~PdamlGH+1JY?;pA6U>GqIUw!XCFkyIDUEHaj_|Yf3;FoXp zKIv8DpV5FDkS>e9_781=uY2fw?Zx-a?jLMc&$ywit$E~H z9IaE^4bEHBvlsrcstTb27jW1jR54OM2WQ?e#4$5OraM67Lqs@0M30z=Eux6rvWTq1 zh`c?IU&M&lXGC=-#K{Pu-3SF6UOZYpo!s<2xjOqZ1V~%Cf(xvgfF*o7Um3P`YyI{4 z1_~1T2@!ScitJWPO`z*@Cl zty6B-`vFrfPkVc9Q&xO4{({5hcFj}49mp|lrkD=@LEjFk*B413P*q1hx6g6}8%y;> zWBR_?^&A_8!iLi%D=US+hYpIyO-B&=IBuZ|+9;)22<#Y(BQBr5hZ4#a5Q9}MQ*n)` zz8tQ~1lu&PxZhBT$!@pW)-$4bdeDIaZyo-c78lCbLja>5N$^KDG=pxFE-evQfU5)& z?Jm`_8Y}`DGuI$#iJGf{s%Nub<;C$2Cz@B8$~pYQXz zYqmcX=Xn14&f#~WLU#fU`pueFc)ru2hH1cPwV|!ir4+Py2Xj(muMWR#-K>bJ_EjZ(epC8^sOHJ{~o*}nA_JIJ^w7h+FqXx-si zp={7)4x&ux_4GHR-s00b@qF_%_w^}&h4Z7Z+HV9Sf@Ukqk|So{9sJ+p{0>j{lJ)hq zfi9R?sl>-)?w|}JZh)I?IXMoCM+}A8jGoWj3k>tI%OWEvQ&eP?XuCS$*bMYet(*}N z7dM0&_l9p6I8kLq?UJ#2gT5lTu1&?nry$RU9QR?u1s64E_H}+#hj+E7nPH(VkeVF> zbT9Req7S;LgnSwp(iGdyy44pMDBS>;C>xk_Q-%n2GC{-FY%llL=aC2>+)0bDTpus#GdGg-ALJ zrlJA-`UmZUU_cq*&|8fs`QULCW%g;@8^gIxPD<1<2#z!#Z(0Z8i&up0ATm{^zOqt5qPcR1KPwt z>~UnLMeFN+KfH?@2;1OK)&SOHZnG1RVqY9^Z5Iv*1r4PRC%uyl?_d`4G~<4ypA*bn zJ?~EcFs`Fwj8?wI%W|ism88(+(y}byy-?J(q!`t$XbNOjWQ31JMr^=?WlL-v1MewP zN}{QO^vg`njGWC$cUD_WEJrEbisv9R50)7KcLKoBdPLgATV9BKqPuTTv2R3R2?r3g?q2vxHaDYZ_)^k&IFF%sRwhn{zX{jbRw%M7F@1}nMr~c=(p=Zr~Y71OVjjN+-eb;J-UftW(6H=XE z!xDR#{~hc1nS*0SvVMmTaDh&q(<-IRiHRvN`JO!fRq4g0%hM8kxp?^B?X~)_yTBi` z`zs`RwvL-~%^S0TJL&B{8{N)S?C%5n=3|tn$#34B5J@N=rvL>QWP50oNIWK@Xp|k z$@Tl)#*K!3&w9G+<%5Ck@al3=+9_>HeDw91IsbRxQ#>p@{ezl*{?nARr_@K-&a5IH zjTLX>Wk@q!*KHm-BHz(fdjF4C;v|n$&M*C+etLc8ybv1k3=-v?E+IseLEed{hgT@X z@X>5He154I!t=>CJbi2okvT)wjM^fjN{y|}jnNw)ogX;l?PL-yI4<#`F^vt54v$X| ziKHh2V)8^PIlrdUFBEEGQewFTrD7{eY8K3Yuz}j%efI zC94HZA!Kif8Et7x+M1eJcU%+Kbn1F&V5N4vp6{pi=YcuxKkM~M?Rvl9Fh5o+AE+YM z_RXO*TW&Y)Hmlm65r1q~ZCI=DZTE;0CEe;7leYhck@yLw95H==K|)lNaRhl1C1OX% zzn!1k&KiB%t99zn*!44g)btX5oke`i=2V){^rHglaTFyP$hg5Fn&6_c+_)yX5_DRx zPb!r1G{cw}giRH(kr@(Y^hJmUPWfSEBWb;28ACHf7-|BcEE#PgQ953!6{aFgfonZY zQ|H1%{VPSA0yP1b;E6g$S_-q8jZ>9lnzhxSBz0t=)+&hx#ULr|6Rt9xn`K%bL{atR zHY#PswtERzDh22Ow`tUsGsPxANai%0j}j^ZcBr-7>XI``$Q^D6007pDUuKl*_EsP~ z?{(5YxYf3BYiO4bbKXE5kHzmvW9X5SQ~`P)`ZGPfAauQNR)rVX&~C;7-g5Ohm-rk# zxZ6dZz5x|`u1Q-WEp)vy0Q#bKc6j`|qZfva_ng~Sy_v~CP;7=#Ge$#e02RuQ`I%Gh zLrXqiL)iDb_^OGWXPaTh*Mh;ZDf)whgE%A}S{baoCU9ObDk+XATrLNW`MzHfnvsi; zc>h9iTOMpiD4-@zcWgbpFyq+}r@66!@Uy39-@K5TY2b!1K-Hoxk00XVc022G64sX9 zJRH+_9Jhu*g8^^zVkMm^N*N?rFxsy{;#k_tA2RGT)&s?35ARqu8VD;7HD-@kfoS9> zPE5A7IA(>W|JX_ptz86m44Y46N`i%M8PIFNE+wItnj`)MWq^EzO8voO-(rGhtOHt+Vpw=eP*{ZrEG&l!H9~|YloZ`* zwI2iPrwOwFMtb*&zK2UB(?F~j(e;|yp!{7KcD>;@#8fK_Kwb}Ez3f*$M`Xf&jgy9KC^IcE^+>f9h&UZwg!l|J5*FqBc}y{l%@=s$v+IZC0FK_>F?l zfQZifa1c=5Krp3hg`_X24z`*%s+=%-8?)GOEK6R2>B8R*?2EEqsC#=czpq3ryqD=kBL0`O~Jm~IrW%d>>ROVsWhl2DZEJ^LJ~N8~a@AFf(QfM291tfR~9 z46iVdK?iYc9~Y}+`P7)1u{-yI+`+Frj!;Gv0of_0DMbnKt$4O`CT;PVDLxx90U!iG zuncUKiBo`t*E!jBLKoh<6E}-k$#nhn;~dlFIUaquo)%LsnH?wksl^xh{HGC`T9T6i z2pnm!2HA?I*u1Jy^rwMp;S53s^93*+e~R1yyi900CLX?wQu3v>%Rps<1`jS?U+N z*phu)sh?6M%LU#y3_K4f&uG{bR|@g{%>A6f%zp41Q60!WQ~{CAg+a(YWL-v$79iKj zq*+UL75@Ica}SNX?lf&S>TPeQJq&s&9CM!CyE5`4-$XHF8j9*HQPs4ktS^qDSYAiU z5fUg)C`rsqby5MKb*C_AQZve;CN%^W7>qONg&60cBz;9$Qc3~E*9cY%L(jNFCSl5v z&Z$d<2-vv$$0ANK>o^1(`8w>i;+{r5V=a%$%G|b2#03khA1Lo$A=ecDlL6%P5H>Y`~h&pOxjC3`%pj z#F@kcb+gsG@6>Gxve1?*+n_2TwsE1%YkJ`I2@QOiiuteXT#caFKaI_s6hlN z?*q9G3a5#Yk{hYCsJS&gm@2iOL}+Vu)-7|R?TWot&YMKkKU3`u9olXMQX` zPh%J6zP0$4_2#VmIHFCC29yHvap1rEHx)%IG z$4N4V1BBI9i)7DwJ6OO@{Asc=ybht2u&tWimfdk~Xh@KbWA6a;VuPx-T5-%KnGa4&N7ZAL1kM^r)+b?#VC0oQq(TsBj}oIgj$4L& zOMZ@XyQM%A_}0C2;R(EgI}d9_Ve!-z<%{JxyPLpKoQrPQRONy!T`JW$B7SuxG{)-h14-nA?tLrmW8Xz>2EVVWW1?H`Mz_@s)#Rch>*Y78(4dX5p z(A&di?g`UK;+GJ0&fvaYL)?4PdiNsUXlq(QcbmBhIglWAG@=kx$+`&xA+;~>n3}H>-oL?f|aagB^E0VOb-*~$kjCShJ!L~*R5AnMhAdbf44~A~~ z8COY1E<+0NwW(pCu$GcxNRIawrZga^gEhq|Enc=t7?e|XX!ghuTz)tXpg}$=m4bAh z_+YtETo%ab44s4-nXF?yl!;S3X4G3DY&LRgzg{Xmlh26a4IQsSkelNeYVuwT+i~a9 zep8Qr%PNMdBlg7AA6k!Ixd=7}uB)#$vl}r!%yi40K|Ha_&fiY#qD^clnoJ2b8kQ%* zf^loggZ5W(fWI%pyVJH5DtiGqks4?Ai;Lo}Wl7WB3Z@olkdj>#j3YVe6kSO-y{=ZC zX`ZEFiS4stykN&E1&sUL5{&WBa=YUvd}c6=J_gLT&by*?jg_BMH;9_i&3Rc_t81gW z%*8^j)Qbu(6CG*WvJO%WSLmhO?GS`rsOXNjESjv{$-KP9Z|uXXci1)0Hd zPidc1{xI*vXWk=QzACOLQ*?;OOw|-hu~g^rK6g)d7%9+8qvhy8`vI0lLRGmSq-Fk5 zGX7xu#jALIsv9Hi%&lXaTm$tZQjFhjiX$n2trLT6kh<>zSA86h(3v(yFm$sCf_uY( z(!oBV)kueb^dYU0w*icQ!{=_d{`LGAD$9b*j@Q_>Q)NJaoK4iK=dkz=cc}W9!5ljw zcsjN*@QzL54%+&|VZ##KUUDobeywDiRTz_O+k z>grF2!)C0s4AxTUb+!I$v2RX{opVD6h!tWaY6J1bfjZQgS>%fGZYdn9kv9p?O~J2K zy};`!=w#Mj>F@kbyh(q+w`WlVFL<9Jd{G=;Dxq~p`=|BTTuI}Q9u-=`aHAGjYsnyc zlS7%yry}J0UD&}_=3-Zbd!n}_cQ&e~wEwRQTjt@UHHs5?^2rv68b?^=+d{$K)|JiG z9qFP^f?(^Yj2DOA+N+B(D}QpD^h)kh>`_W)LCdc8eo}kor~vw}!ptaRuC*u1PSNe(jmQ$@A6}j(uzTtxk4?IRdxVrW-gpJm{aAxD-r!*GLNI zIog1hU?{f1Bhi+?)KNR_$x1E(Sq6bkpA0%>`7ww_f4J=kR4W^v2dk-{zfH&2y^sWkynCa%WL1h=gBO>Ws4p2Ty{8Q=xGC%T(V~jB%exBk-z_@S3%tSo<*ZhiO<#NT zd?tQBznWQOGucy#H_}t)pD}~~QQ9+xCQqbq-6lNnb%Dl7=sMOrU$OEgn{aUK01F;2 zPgl*$%RBF%IW$?r4jvq~q2l+49@`wiiNg7AwC5PS=+NHa`{wlaN(uNdi7#2|f(v!W zqc7Yl%t^!TzK1}Z90lAK?2MNd?~>~z=Du|U|CjTio?WX)qUR9B12DqVeU;;Gfal z{iw(6{2}T|MiikJ`%In+#TT_z<;R3Y-__BLxi?bsme4 z1s9Sds#90o%?=ebrWO;4xdLC0ua)+_G7^7|(dT6lU>h2#^+kAr+A}G91iD7jvQ(jF zC=yo7PMuax_tnlM)pp5IJQycT1G@J19_A<@rC={y+_B0=|0~`wM7u9fhj1NCU>gh` zHe_FUQF(Ok+hTFRI7cVPb$FJK!9v_zEfsnoo~9_f51lmoQf_h8@d1|}Q4%9qT#oZ( zq6SRVC0v)sd|XBjgkKfafym2pZa!nR6M;V3{mqC}kR6Tz3gY|-{EOYiW4Pyk=va8pP)aMF=%i2IS~Ar+al~2 z$DrwMd_W9#s9fre6qf^rCKW+Gp8(LNKZlki1ommQmQ|oWTTH#qZG!YG#~eKG^`cA$ zvG(_?F++A1U5JV|PsDz_U4i&6Mn(m1<DD~5=gNKKu02{-nvcLTLM3qf-oE}3nWGjiA#5{&2yiaY_2Syr=H&o#`ICzLh6b-m-(c3 z$YmK`w@881lGCwIJ!m`%kzC<@k{UNlfEpRYrDA+AFU7I}ebIBU9=8%(_YsGo5d(s( zhagf^hVo{5J%{QlI+5BbuPk zh0NtWxSI82wQl84dkpp@)N}~U`4KSTqHmGGS@$(494hK))p$rq1NDr<0c=1>t!7@} zwebT2I(0S`dd z!@)@Kb|8Xb@m`txw#1D zJSN6Yc?Ax^ibcCUaD$@z&svG4={nx^u}GgG!K_?@N>BZCu$M_r$JvbmRzG_8M9sYh#evP)o()`?MC2@hg9_7rnEjiwH|3a!_XsTL7-qum(O&=NxEV*-R;2Y16h z7X^u4pZ4S}Wzygo65%G9Tp&A-avEZnLF;DBnyatM%<0^9A*;;r2Cq?VNQ3HBMi$R7 zwO(oI-;THHb64l=(``mEXTusb9AGb3;<45z&NIs>o6T72VJB-{ z#EWSWJ$TQ|*twWI6hW*akc(%rgIZzQQ?-cDF00Lqt3@^*W^BSx8~1@KD?y&#CC7q- zQ@u92f}7D1w`Pooel2?Gn{wKkOZ4Qn;)_)Xa`)>}O+076=aHe#9HFP4AQr}N+17+# z#kFr5ph|PK#I|4$={m3~vvc1>ABPV5G#HVGyV!zQ^13FBiKHSAj#2Pbxy1LQBU z-r`5lYZn4ssBMShwv}SO?dr?s=GNI&u?j0!tO|e=BU~#RE7+C%SkFk~dS!&wFlg@= z&Oo2lyn#EQ5&c$e!1%N%5%yO8y`>g)3pC8PuVj`mr+2DM`{{WcDPvJcZ8REb%oG-> z?f0g*pHBDEF}k!vBnOb@W=uIr=vd-#LVm%gADZ-j9_47AUSAdm8N^$aXQYCn*tYU2 zVK9qwrmhFR@u36$xH;P$SBIG#M1qR>jmTUA0+t4woWhlW(RR{7kpV4|O3NxlH&*8f z&6&qG5woeS0=|Zm$L3j)SD)YFZZn|hTbyrus0lOzog~15pG9l|^rdrd?WI;~V?Wnm zdbkoMCc@+r0eHNH(4@3Y?h~Vtgit-rf_3BtE>^#s)d*~1Y)(&r{o&Nv6w^?|v$9fs zLo}y(n8|}%qB4EN?|mRseT!_# zRP5T`Vo%foq|!1#Y<6EvRC{_ex|>4ju{-F~7Szt7aw7g4f%F!U&mb4L{nW8%a@{Y`+dYE6pOfW+xs^7Y}phSE#vR!u8gUT9Lj;H{O=Oc6+uCUhG!-s1=(p7 zjn{dbW)1T`_A3e=RDXC` zD3)bZXqAqmyZb*7BsLMJm{a((bPZEBP00t%s)c4&wPQT_*Q5npUy)vkpX>fX(FuXi+|5#J29uDyS|bpaCFCGa+78J(NF1a6&qhuqCV zr7l2T++1VMg(Is)N916UYiZvu2k9~goEj~YbHx?>dXV%{Suo;Uvup~`-H5skKT&(G>OD@ zC1`7~O@&x0JvBNd%0d|Rs+pp^0{wUAyP+wgeb4z9pM4genS<(oGQ!^5Z)18L?K~Oc zN=rFL+lY?u>?9ELx~!9F7@yLEr6=C(=QD^?{Je~hN+7nsb z8xqD1l`RIGe7nMCy<6c8W$D+pca9KTaI~BQ&%JPW3pLFB) zlr2}c7AyJqnHD(}@$D!U}9GkeK!+7O;RWwEV_%r&%#R}wYAjYN}(JlluIUdb=9v=lwpM}z>tmc<># z{($Mr#_04hkpOZv@T_v1#saVcR_Jyp+dJx>3+1jHr?a`|e*T_YI~*Qk#Ury2QN08p zc$OL2jsgMEjA@{+g)3@&+G)b;zC=U?$V%Sh}v zLd`yJ`*)bvr_t58xTX>`3D6MGn!n!NogvqY?QRm^ge6Tzvs0^x`MK0MS&lv?U-V6k z+icLX_~J_o`Zmx5upfk#4rD># zv)#URYC|KftiFM|p_BPnhGThNX_#KC)J~tf{(M5V|4h9Y^lhmq?)&K``9UF-J+|aA zLzCE$s-)Cb3Q_wUk>oV69-KkeJ`TP=Ik&vE=Xp)C_rc26)Z8k95Y3M>T$ zLC>bz^)Z9-lX+@;2vO>{oV)JFU-bjHtbTGdz~Vu)w@Cw?eu^uYE)M9EVgMEoVusiN zE{lCyX0E&US^c@?#ItwmPT!~|;Ys)ta&zm&pz4mwna{lG)oHCIQ*Bu_K*Q@cd!9*Q}NLA&1CQ3ruL)CxWU2_+_@k=mSsmuNb?l4q?2CWRu)F513W?%Po?!BXkYAOFwE=iS>&{e6KonhXF3mUzOXO(Q+;G`@Fnb&+P%=~m;1 zHspFFY0k?G@{73Qb7fl0$Iaa2h1bWRgnQ89mZ40yCd&wfJge!cSlC7|sZdXuvc z0b~Slz-US{!Wg6S7mErj>E(q5Nzh}k&g-%X;r-tYd>Q)2Q#(&(6+y)y8|&tdS2 zm*`A$(~<>S<%3HRYZ3Mtt_pJEb1;r#ZQH~P>jo|JgU(u^S;=k2M7XcAQqmOjh2%Tt z@Vl2Ch9i;;7#wm8#@Q4*I#$QeurNEi?_}JkZ4`P-MD72ARQUVdEbOL;+D8UYTjg4I zPQ~VEOZ8?ps%q_y!F|zh&n~iugX64>0CuQ`CraKnKKNXf>m;{a zAME7w`SqD$R$vl$z!HERVsHc%uMNGr^1F+hS+tN=aj!?rp|dodviRhzs-LLVp+5pV zgtbB9=-pLUdyT?8-0*UWecYTaQAKXp?QH7W>%}w8s-N&hiYzoT4+%{;U{5K@>Ur77 zK#V>Lo^vsBJZ=q8=IJto_8PeP2702{AR3NvFV`DGP!*K}nZ?8CVJ_E*YX1V=^@g@F zpyer}`|H@^9f~*uMz?$VQ)E!DSNb-rLpl}Kd;Rv*zb&Af4DmJ?Q6wx142mL(m&3XQ zZ3A{)JV$VO-FT3>>MB|2dFMyz5By4iGSBvo?Rz2N!Sf@snp+-%zbN0{t`~R8#d`?- zitN2ZHcW5mqX!=~tJ*rG4Qr;{EiN*swe0nb9`$1uKfMAw8h2aNRh65DG8-={?=L)f zGy@TvHc&_I7yxjO3F2b!C-k|jHea^c9<%;yQs$|ls?wm=ybC;-KUl;p9(DG#J!@1` zC%)jNGFMT?RZ;tKCSCzVYCd}kEa{xiGHcUoD*3@Sb5e0q7VD~kez^ewg4tL+O(L?54W)sw|G5pesIS><}dT7dQz^G6@!p+p(T-|6HK+@E%ac zLoqK2uLYegEjBACB|Om4&y!<)TMNzo{5PS4Et z9-Wv8D#a3$Gq40o)Wsnxyq}bUB<4SvnH=(@=Au(FV36{1<;}t9=Yui9H)6?sa0ni( zxEK|B(?IFyaSi=a;4Ei+%KYt$l;m|o-HOC{-FOS>_p2dTK`Exx81pMr+Nh_gmtmI@ zhHmoM4;|SH9=mqu%hup;86cvSScI$y=jL?yZ0fXM?hj;+1g*6@Ai`3cJQnyyw_ib@ zO*7*66=da>gz`~)Nsaohr2R&6Zfv!D?E^cUBgq;kM5RWP>J6OI4dxK45S85;P|s!0 zkZrIImN|5e)_*IwqMqC5*OyQ!J@XxbhQ9g2lDaYi)}5WfU>CH+DoP4koS00i=>IA8 z#V5t)^>@z~pRBK?D2Xl5O2o^lDxr%L%m=tDNhVjA4>pEd9dMf?!=^Ls4#U3Zo9*$m z>ZqDniEJV2U_ew;9EunnImPdNAQ_dGpPR1j>Of|c1!nD8%MGRgvaKT7vbe1%CQlko zPd4X=awL^k>ZMl+O}x5DslKjAQT*~bsQmn=b-9Ov<7`QQuva(fGW^Lq(Cc>{#M$F5>iV_{fa%w8O^ z5Qh!->$_Jt7%)*qO(rE%sw5;{+#=t?EEPBu209dqP~ji7|4YTkj)yMbc=8jZx%v52 z;*mV`J#fEQ1`Zt`7W~)U8@LGnakrV6ik3on?p_ofVc&lS?Y9`$oLUiIFmcf$4w;IH zi&Tt)_uIusfKievLFHH!tQ0WgH5z_Zhos1aRq=!}8*6b^nA=>`EY2bl-yCW4AylrxQok=lo=Ts^v;#XEzR(80p-En>q%~EYlOv| z`$YFZL18zm(sYu^*6d|hlyZ7-6&X~vQbZJR71VT25s;e<27~eYfEX#8! zV;k#rd(o1wM=RuGuQLnmwfp;+c+WRy$U&A(U+u^rTXN_R{GiX=YHB>f7*%Tu&I_ z-hUx>V-3Ix7(L3zI*W<$@=0O_5WqG%Y|gx4whgru$5(CK(ZI1!q3xT@CMTLZtdE_4 z6fh#3eqO6U&Z0zNIj6DrTC8(gXY8CL`Po0I`V)VX;B0Eur)@drRCU*rD9;&-OIc268O1um8+?tkAR2cAM0gM;7M}5@wkc2e|zCz z+Y>4wj~NY$3hS>G$&^v3Ps2`V+_8Dfo$oji{&5AJp0SYx|6e*T=+BwtD3-FGtP<8CH8kmZl*ixYh_kgq=x`)LQ6=R@7}`zIT=V)NHWR}P972u znL+NkaVrZDbwpTscc!BrfoGLlG&bO=DYKQgh>&l)^%s~hcX>D9Q7aKT^M{Zn1T1OQXNvqGmc}iL-_?j-Qz%iU_l)$N6rvrS0Xqv1 zvG>548w&$(h%UZU@K5W=T+~>&wg4`=7#jTj>p#E4XSiz0hSGbY3b2*UDPJkbONLLE-3g_~P(m{C&4m1tM&No=Z|O~2sBK3~ z-u#`vY&$KwuvUUDxXWn3=Qw>e%(soCNXT31v4Y5s-N zDbRsQNL5uwfsW{o-pyMEsS>8?0dyT4xX{>5yJ-ux>3tA?06Gve8E#p-N>2seD!dNx z9e*C9|HXm&j|BzJ=FHmEDs%IAmjl4!87O4tSg*F!wSVF`NSk)1&Ss$QS|qtw6IEu^ zjazCYXC7-?Nc~rr1V_u6W~4}a^;#A?^zBXO=}Vz}+-6+yJpCz~9|5$^qw~j%L7Ga= zm|MNfYr|rTp?3^WKe@>!DYt+~PiJ%?&o%?rS6kCezNz-=0PU@PXBA#rZVI0Nagq@G zW+gisu=(T9&+uuks*+J8Go}Dj(UvCiV$zLRCV>>Be|Y(X2_N(26Ke1^`2t^rgQJ{n zXahARe1Akk-iz{$EAj=Wtwfh&1uAgx!Mk`OHkC*~@3Fk?u+iQ>96UAE4&`bFvrKa^ zru1Y?DUKGJj0_J$BKXNE;SmT_fNm_9o{1rb#cnS_1=4fGlFXcj{FuEFk&iY5Vj3R% zA9YDMc;f7YTC90NNt>gWiWBSM7WgGH818fXUzWh7nt+hYYnO;O? z#HR6BnJHdLsh?F2KT}bKL^;)KOd7lLa^@S3zsjGvv<93pHAT4)>AraLyn%c#S^|NT z_5~o7=Js%}MvZstFM;@lcjnsY=a$*SdgmRz#xSzn#nraC$HSsY@1$tK9n<}n=14Q^ zK7auB8Ay;A!Jp42kf!vSVxW)A&luEd-4agsT2BroOaa4$A%-otQL<-x%3`uHv} z4Vm6ebc{JWhdMs;k{KmcL%ougVOA|_tcFs<8J6^%@`+PJsGo|rA%g+y04p;?04qib zEMuQd_goPk|91(Q?B30rp>8tI>qdFMDS-ej=pRMY+#i3DWzeR9rk~Jjm!9I|{tGj1 zy|)Ts3}|h2u}7Psysgmwaadk^J8S&*9~ONRfolA1qmm8FwSsJs;)Iv)uv8(xb-#T{ z5r30^rCFlDO!+cix}5E}OGC-z%R>H2f64yh)&JxFkdH;D^JGikQMPCzY>vb zjXOs$0~rn0#y-1K)#>=>iK@4U*l*SwAMpkqg3E$x2N2WWr>5JZ*k3aNY;8d4sTn`7 zdatH*|H6SBAlC9ITGy#Dzc@LvtvtX)Pqr_q)D~JnMC(rVO0|J&%w4I$pH0^VZ+*#{ zpf+WtT?HqJu((ViI;Zpes9TT-0k!zkT*WW zO?@81@4n^?jgL0KSxcxA&xdIbley{kuZ^tiQnQG_l!60>(LCxyb-Un{NJ5r4h(45z z!006moG`2$GKbW|_?n_d$NCzEfUaPMb+dnY_2Zg*9)#U%Fgt{2wZT6&I~(u+gGNs4 zyfxq1esc>Nv3*{3?}N;b$n>m_FHX*=o_>V+!I6CcJ|{>G!OkYh;9&&-{T*xUyHkq( zVA^B1D3Uwd@tA$Y6%`w^!JFp@1n&fzGwG3)=mY*4>2glzzrD?aw}AXYo4r1kbt_ zuO+!mf?a!OFY|hQ^@P+3}$wu`UgW|E!Xy_ z!T(Gp@*uyY^wwn%1_r0|cG4ocR%#x2-LmN2UuCpCDU0b>ZFBEUwPPIns1<$fAW8k`IYKkpcwZ^kNgkX56e&+Pp&JQC+@*Fr=`$Z$QL40-MsAU{}nv0ELO4PNxmS8PpjeL%?!rXNX)e|M$l zquu*6;j{4K(=%7Z-5TFKGU^RmwXs|P=l9-^O@0-w7%@PruB?JMbq$7GxhgNw)s7P{5yw+!Pnc+OMsam@yvmWa~GAA z6g!lY4LUIuqH~@$;`0Eqmz5_K?zp88C;^zs_T9M>@m``%;HRG}3s*}nBD2U9g`|(K z|GjE@fry%ipNCTsQTGQM<;%c>j2pN8)%%h8N%h%2=fe|Dyzt8WEVw@C89N^s3ZRLG zRQ~^5{LU+-H-#0}PR^zpY<=`m_6211C}AYaj`S8}^>3t1-J97!UBgEe(>_~?53 zvn+ChzA)cW)I6gRmcuQHV34xS1|Nd*B7}9S_uWimR{p!zAg?e7NS-G0RaBA$`H5wq z$`EttM3o4M$Zw(N7a>)hm|-q?^sMhs&#dkB%XqJOJD*#AGcmUOdeD*YRnKZCnJ@aU zVUB-%S_7S0y&n0v9FPorcen!C9+d&h`i8VRjO=U->-ZOf^oxE<$h*k_c+w{62U5g| zeyMQghUIaEJ56egC`Z)IC+^GX`V1i=Fxs?PfvaVD{{P`ZIFxhDnrlg?L}t2vGt&(VO) zRezBGDYK7#G9%IsTFF(6Kg)e(E}r!6FM0}@MqlMM_P@xMmtC_8iuu;s-$ClSDYAd` z62J=7G~T6_7h?gX#NA`%ICo#w$EnX!JEHj!Pd8KZ)_Ik`JhcCa`FcJ}+7+EN6fbX! zb#9R_KULl(osX?)Bq57CN<|t=CQzBhlSBC>T^{4G%GG@$_P?BxEH|F5w!v{=oicWL z{jR!NNh8jDIEOpnxblVL4@NU=`iRDaHC#Xt^(+e7grr1{Fv_x)7`jKg44|KW_}!cj zC}PM;TwX>jGnNsTmfj#PJ6ioF*`Iix!Ag)mx9h}Ld+814;*pq{DqF;_^+cV_dE46D zw@^wl$top#o!09i{NKRp{?t*_W!WB_mtW&bWE2ur#-i~a4wPmpi~(aDQ;4)N!Wfcw zewoTp%QTPnzqVV)J*)N>t{(-9@8Psyn|@JA{XrRr>Fli>E5a$hKjJf%KR-)BQGdV~ z;>R9{CrR3RdmCXN9{|Rg!(JwgxperJkp(hnpJ+^&XKWm3&VP)9SSU zILlbNqs%@zr*-nl)8n14DQ*WC)dtSA)u+e5+-3<+W$ni5JrHKyifit_ab=|=xjP27 zC7P!bQ@57PI|O5veJW#=C5x_98id53VIrg5swWp`!TwuD6VqpVNzrbOYeqIg*lhNk zL0M%?m>nDd!$OaJXOxkP!YR2^F%9?-_A}!632>>KR=P3BoG3MT7e*5IQRK7eQl$XM zqg_hh9gJbv4`ZVF4SNL&v`98WP8*Tj>pI-K<1-D8n#Dm6zndIazA9|czLVK@uv10% z>d5pe9`58XA(HWe7y>=bUTO+m;o+KC6qMt8$g5w)iaA~p;UA$Z3>brPrmb>KrhIFp zxoRsrvudqGI~)dEtC0FzJ|@iaR+Ucp^>4K?fMFNQ0&X_ISMr6VR4DL`GRi|N0<@Fb zQx7`UJ9{r6L>KpxT!q{auM4A`T;9ZJlFu-*irB)y;aI$H&@J#+$Z5cJGW_*Q+J9{H z+m}ymKApD+PsZ~Wlk1ChKEsOS+adF9c-(w<2V{k2Z96Y6G5Vq$G?=x`uu5AHn3ohf zr4a%VsdF>a6&yaG(s$}GpFvS>g+8SdNvq7>3BE%fd`};JxEg1v%p-JdE zMxAEth=WfLF_^8;=#c|UmCy{zBfA@ePipUlWk+T&-&34fUI&^r*ebD#7B^)LGS2I& zN_=^fZ+>ZWyeE%-3${idA8s7Ek8|pqsp=m9Zf`QSfQUdfl`k!p{K#DM_9$lN2-N`5 zu$dgtGfNHxs{i_@-tSaYt{l4@+ zsaaSz-!{X+`AnW9FVjz1HCDEnwXrKguhwig`_HrypA+8xD>g@Wo_bOpN;|22!jxf( zA=m$4g|}EwnK0()bxcQXM^6Wp)IO}ZM6Xl4V;FXM&^Kc2@b8%jf8*IWt=}2ha#*qK zBCKzpbvY4cmu;7w)pEZ{+&1fR8A5w;8kA1+la$Gyw9PcV#B0tAL*UO6k1l#h_@3)$ zm@wuT{37L4--ZM@y?na>SxI2Sfv(t^d@#*0Z#{AtNllIcwWqQYAa~y`9BF5ywYW5h z9RK4ET;Bnm8lRivl;7@G*q-Jang?ean9U$2v^ra>w3*R;Ke0W$64>8Ndt|wKN29q6 z2UaX{C-61xnEIeGrIn4e1`XLs&POa~C@9$mR9b2X=}ln$9ZBgWCXBf~C%;woVEB44 zunO4QbQuGNE|#AQ97}9cC!gQuTxs#HE(;B+IfJZ64DsykYGy;8TfYqCs4TDsRAgC_i^ z#xeDx8#Ik8k7=oL)r6@4CWroKTq*^TZ6d`5`{Y))*m9;u&31>0!0N0R^qB>6wNa_ZsCS zkrX|3eOi=c6R6hzAa84*(p0NJpg%QQzbPrO7mUf9J*zj`1MM4?Q#kiq3}@CMwFv7q zBF)sOfYSTQ$&AE@@BYf*5M7HNF*DjeSTiMm<(JNmny5qQACXSK! zGJ13>5&53mJ@mb?aJEY+*cfC~SUtTZvbuS?{e-_U;HdoSsm(j-Zmybd>M&v7dnoXY zt~__e_Z8US4L2pR@gd=OQ}^n@GHh}6pgVZkE;1`J>xiA)xbhM@WxBZXv5D#~A46$p zhm5d;n0}C5A5)VVCXkJ0!;pa!9+LIM^W++(PRlrZg?v}_$v|C!)DI0lYn|tKE(k#i z%p3QLpsSD6-u6z}-@iVf#O`0Ke(Hq3WIAfXpJmNLnd`|b&lUZ$RwXoU6YidW>9f1;I1q;?ek~JQTRta{!M`!xWfi1 zZFRJgDd^(o&LNH>XdHez-WY6~*sX5z?9B44FI;O^s3xo@L!RKX z&M4O1D)U@y*WbUJqgZ>Z%zJ4nKxyeth38VY>HI$FWUW!D+oJg8Xs^n7065A(!DZmR zjP$~>AYFmfyILq%8L%FBsrg0(Fg~F$&+)v?U2vHH{AO%xHY_X+zTN$cq!}Eh0<^Wq zZVyd8vI~`*4U=TZLwv(Ryu5i@(=f{&~vHYA= zjN#^gr+Vyqqk`VhEu{C=D+{3_Nkg|&e6F5*0pjk!Q!byo3UUGaZX;4Jp1T2o_>1fj zA;Ko}09K)&+|OpR4J07!ugv1ySQulxJ~{qQ>~NClC97-+5Vw*eV)jeRc*7aBj(k8nIuY28PW48;o#7HykGc1Raf;j^WS`Qg)2>!v7{FAO5v2BJqW zKDw)Om6{|HS@{TpdvWb}1B*2^m+in^EGriGxTv{(_Yn1|aT(fEcumaZOF3rjBDr(hv z)^u?9j9zUsO6-=DPb2#?hQum{O34pN6`7D@Ir6`0M2PI;l+1;XFbiH7R4GPlA1H7SR~k^GPy7*rd=3NduBT zb4R^7CJ_9S=ez7aNXkRA#=-HCxe-8)qZ3?^pMKWnD7aJ?E3*#m`F4FjvmR3pwwS5( zLXGdnO8FSDQ&^VciCw!H1X|3zJ(bL6)=0F$lpy1AwYAM;ZMB`fTy0kj(GupKv9}!U z4Cf^i&Lpc$Jo8!G!0bBrQCGFwVwqHbKt<`ZRl!&LBZC4jchlE>BF-RKp@sReEu|Rv zcts91hvXM_kp>_31ZeUl}!ca-6yJ!34UNRE~;4OPMg z04q@1<2jrh{rhVN8gTo%b9)IP2|=Zz058W!JV)arz{F>WU&1JVyf^gq6Vg8##1dyoBnlm&0ya!TyP!<{yG%)k&^1UR=;N0&qlVl&&EO@C=x~5| zd=Yfu$bgy=2og#*m~Xp~CY5Ljn%Y0;N{1kW%xjItSEoS&D;g;B!_g|38Z$G3^dMxT zl1%9~Ij#X+c0UXstSJM|#WiqV6&_T22|1b@f4=9wbq8uuQ-gQqUNzIpLz9&|iVBWG zYS9Tj*-_l}PTE#-}xbYpw-&SKc)}D2Sn#uI~Z-Ak&x*-YF3Oovg7ig zgj86z3ay1U>u$wH07Ou5kwDkbv1`5XFit0q{kK2CEx3h1I^vlOoR@qbLxtz1lj~f#&mLKfh;?sPF1CuD5ve&CHvRCYIw7*%$XkGj%4t$gXfP_o@a27ktq4W(b+V zC=cM@*wp*vbY{6fcT>#}IgO_=X?gj1k!z9tW>NYQW=Reyhc72TM~9U@pU6i{u$<*^ zkjj`0MIp;4tEh<0l1j7f(({9vF)a9N`~)Id0u^n^67DX&Q-n3A|X?*jwSUih}i@f`)khDiZn%Zez%7_tHtfB((F z1h@`e!>Om`RDta|r&7dE)#r!^sg94SdWc*w2h0^IeNx$xW(5(Ruak?xwqQA6UuyRu zT{(e)g%L}NcH!xFEFs8%uxvNEy%fIy%_xl@=j?C|GtzAJab*^$$#%qEb#RBggC|

c# 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 in e?pn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,C=(e,t,n)=>(hn(e,"symbol"!=typeof t?t+"":t,n),n),PetiteVue=function(e){"use strict";function t(e){if(a(e)){const n={};for(let s=0;s{if(e){const n=e.split(s);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function i(e){let t="";if(d(e))t=e;else if(a(e))for(let n=0;no(e,t)))}const l=Object.assign,f=Object.prototype.hasOwnProperty,u=(e,t)=>f.call(e,t),a=Array.isArray,p=e=>"[object Map]"===y(e),h=e=>e instanceof Date,d=e=>"string"==typeof e,m=e=>"symbol"==typeof e,g=e=>null!==e&&"object"==typeof e,v=Object.prototype.toString,y=e=>v.call(e),b=e=>d(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,x=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},_=/-(\w)/g,w=x((e=>e.replace(_,((e,t)=>t?t.toUpperCase():"")))),$=/\B([A-Z])/g,k=x((e=>e.replace($,"-$1").toLowerCase())),O=e=>{const t=parseFloat(e);return isNaN(t)?e:t};function S(e,t){(t=t||undefined)&&t.active&&t.effects.push(e)}const E=e=>{const t=new Set(e);return t.w=0,t.n=0,t},j=e=>(e.w&N)>0,A=e=>(e.n&N)>0,P=new WeakMap;let R=0,N=1;const T=[];let M;const B=Symbol(""),L=Symbol("");class W{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],S(this,n)}run(){if(!this.active)return this.fn();if(!T.includes(this))try{return T.push(M=this),F.push(V),V=!0,N=1<<++R,R<=30?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s0?T[e-1]:void 0}}stop(){this.active&&(I(this),this.onStop&&this.onStop(),this.active=!1)}}function I(e){const{deps:t}=e;if(t.length){for(let n=0;n{("length"===t||t>=s)&&c.push(e)}));else switch(void 0!==n&&c.push(o.get(n)),t){case"add":a(e)?b(n)&&c.push(o.get("length")):(c.push(o.get(B)),p(e)&&c.push(o.get(L)));break;case"delete":a(e)||(c.push(o.get(B)),p(e)&&c.push(o.get(L)));break;case"set":p(e)&&c.push(o.get(B))}if(1===c.length)c[0]&&Z(c[0]);else{const e=[];for(const t of c)t&&e.push(...t);Z(E(e))}}function Z(e,t){for(const n of a(e)?e:[...e])(n!==M||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const q=function(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r!!n[e.toLowerCase()]:e=>!!n[e]}("__proto__,__v_isRef,__isVue"),D=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(m)),G=X(),U=X(!0),Q=function(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=le(this);for(let t=0,r=this.length;t{e[t]=function(...e){F.push(V),V=!1;const n=le(this)[t].apply(this,e);return z(),n}})),e}();function X(e=!1,t=!1){return function(n,s,r){if("__v_isReactive"===s)return!e;if("__v_isReadonly"===s)return e;if("__v_raw"===s&&r===(e?t?re:se:t?ne:te).get(n))return n;const i=a(n);if(!e&&i&&u(Q,s))return Reflect.get(Q,s,r);const o=Reflect.get(n,s,r);return(m(s)?D.has(s):q(s))||(e||H(n,0,s),t)?o:fe(o)?i&&b(s)?o:o.value:g(o)?e?function(e){return ce(e,!0,ee,null,se)}(o):oe(o):o}}const Y={get:G,set:function(e=!1){return function(t,n,s,r){let i=t[n];if(!e&&!function(e){return!(!e||!e.__v_isReadonly)}(s)&&(s=le(s),i=le(i),!a(t)&&fe(i)&&!fe(s)))return i.value=s,!0;const o=a(t)&&b(n)?Number(n)!Object.is(e,t))(s,i)&&J(t,"set",n,s):J(t,"add",n,s)),c}}(),deleteProperty:function(e,t){const n=u(e,t);e[t];const s=Reflect.deleteProperty(e,t);return s&&n&&J(e,"delete",t,void 0),s},has:function(e,t){const n=Reflect.has(e,t);return(!m(t)||!D.has(t))&&H(e,0,t),n},ownKeys:function(e){return H(e,0,a(e)?"length":B),Reflect.ownKeys(e)}},ee={get:U,set:(e,t)=>!0,deleteProperty:(e,t)=>!0},te=new WeakMap,ne=new WeakMap,se=new WeakMap,re=new WeakMap;function ie(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>y(e).slice(8,-1))(e))}function oe(e){return e&&e.__v_isReadonly?e:ce(e,!1,Y,null,te)}function ce(e,t,n,s,r){if(!g(e)||e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=ie(e);if(0===o)return e;const c=new Proxy(e,2===o?s:n);return r.set(e,c),c}function le(e){const t=e&&e.__v_raw;return t?le(t):e}function fe(e){return Boolean(e&&!0===e.__v_isRef)}Promise.resolve();let ue=!1;const ae=[],pe=Promise.resolve(),he=e=>pe.then(e),de=e=>{ae.includes(e)||ae.push(e),ue||(ue=!0,he(me))},me=()=>{for(const e of ae)e();ae.length=0,ue=!1},ge=/^(spellcheck|draggable|form|list|type)$/,ve=({el:e,get:t,effect:n,arg:s,modifiers:r})=>{let i;"class"===s&&(e._class=e.className),n((()=>{let n=t();if(s)(null==r?void 0:r.camel)&&(s=w(s)),ye(e,s,n,i);else{for(const t in n)ye(e,t,n[t],i&&i[t]);for(const t in i)(!n||!(t in n))&&ye(e,t,null)}i=n}))},ye=(e,n,s,r)=>{if("class"===n)e.setAttribute("class",i(e._class?[e._class,s]:s)||"");else if("style"===n){s=t(s);const{style:n}=e;if(s)if(d(s))s!==r&&(n.cssText=s);else{for(const e in s)xe(n,e,s[e]);if(r&&!d(r))for(const e in r)null==s[e]&&xe(n,e,"")}else e.removeAttribute("style")}else e instanceof SVGElement||!(n in e)||ge.test(n)?"true-value"===n?e._trueValue=s:"false-value"===n?e._falseValue=s:null!=s?e.setAttribute(n,s):e.removeAttribute(n):(e[n]=s,"value"===n&&(e._value=s))},be=/\s*!important$/,xe=(e,t,n)=>{a(n)?n.forEach((n=>xe(e,t,n))):t.startsWith("--")?e.setProperty(t,n):be.test(n)?e.setProperty(k(t),n.replace(be,""),"important"):e[t]=n},_e=(e,t)=>{const n=e.getAttribute(t);return null!=n&&e.removeAttribute(t),n},we=(e,t,n,s)=>{e.addEventListener(t,n,s)},$e=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ke=["ctrl","shift","alt","meta"],Oe={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>ke.some((n=>e[`${n}Key`]&&!t[n]))},Se=({el:e,get:t,exp:n,arg:s,modifiers:r})=>{if(!s)return;let i=$e.test(n)?t(`(e => ${n}(e))`):t(`($event => { ${n} })`);if("vue:mounted"!==s){if("vue:unmounted"===s)return()=>i();if(r){"click"===s&&(r.right&&(s="contextmenu"),r.middle&&(s="mouseup"));const e=i;i=t=>{if(!("key"in t)||k(t.key)in r){for(const e in r){const n=Oe[e];if(n&&n(t,r))return}return e(t)}}}we(e,s,i,r)}else he(i)},Ee=({el:e,get:t,effect:n})=>{n((()=>{e.textContent=Ce(t())}))},Ce=e=>null==e?"":g(e)?JSON.stringify(e,null,2):String(e),je=e=>"_value"in e?e._value:e.value,Ae=(e,t)=>{const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t},Pe=e=>{e.target.composing=!0},Re=e=>{const t=e.target;t.composing&&(t.composing=!1,Ne(t,"input"))},Ne=(e,t)=>{const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)},Te=Object.create(null),Me=(e,t,n)=>Be(e,`return(${t})`,n),Be=(e,t,n)=>{const s=Te[t]||(Te[t]=Le(t));try{return s(e,n)}catch(r){console.error(r)}},Le=e=>{try{return new Function("$data","$el",`with($data){${e}}`)}catch(t){return console.error(`${t.message} in expression: ${e}`),()=>{}}},We={bind:ve,on:Se,show:({el:e,get:t,effect:n})=>{const s=e.style.display;n((()=>{e.style.display=t()?s:"none"}))},text:Ee,html:({el:e,get:t,effect:n})=>{n((()=>{e.innerHTML=t()}))},model:({el:e,exp:t,get:n,effect:s,modifiers:r})=>{const i=e.type,l=n(`(val) => { ${t} = val }`),{trim:f,number:u="number"===i}=r||{};if("SELECT"===e.tagName){const t=e;we(e,"change",(()=>{const e=Array.prototype.filter.call(t.options,(e=>e.selected)).map((e=>u?O(je(e)):je(e)));l(t.multiple?e:e[0])})),s((()=>{const e=n(),s=t.multiple;for(let n=0,r=t.options.length;n-1:r.selected=e.has(i);else if(o(je(r),e))return void(t.selectedIndex!==n&&(t.selectedIndex=n))}!s&&-1!==t.selectedIndex&&(t.selectedIndex=-1)}))}else if("checkbox"===i){let t;we(e,"change",(()=>{const t=n(),s=e.checked;if(a(t)){const n=je(e),r=c(t,n),i=-1!==r;if(s&&!i)l(t.concat(n));else if(!s&&i){const e=[...t];e.splice(r,1),l(e)}}else l(Ae(e,s))})),s((()=>{const s=n();a(s)?e.checked=c(s,je(e))>-1:s!==t&&(e.checked=o(s,Ae(e,!0))),t=s}))}else if("radio"===i){let t;we(e,"change",(()=>{l(je(e))})),s((()=>{const s=n();s!==t&&(e.checked=o(s,je(e)))}))}else{const t=e=>f?e.trim():u?O(e):e;we(e,"compositionstart",Pe),we(e,"compositionend",Re),we(e,(null==r?void 0:r.lazy)?"change":"input",(()=>{e.composing||l(t(e.value))})),f&&we(e,"change",(()=>{e.value=e.value.trim()})),s((()=>{if(e.composing)return;const s=e.value,r=n();document.activeElement===e&&t(s)===r||s!==r&&(e.value=r)}))}},effect:({el:e,ctx:t,exp:n,effect:s})=>{he((()=>s((()=>Be(t.scope,n,e)))))}},Ie=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Ke=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ve=/^\(|\)$/g,Fe=/^[{[]\s*((?:[\w_$]+\s*,?\s*)+)[\]}]$/,ze=(e,t,n)=>{const s=t.match(Ie);if(!s)return;const r=e.nextSibling,i=e.parentElement,o=new Text("");i.insertBefore(o,e),i.removeChild(e);const c=s[2].trim();let l,f,u,p,h=s[1].trim().replace(Ve,"").trim(),d=!1,m="key",v=e.getAttribute(m)||e.getAttribute(m=":key")||e.getAttribute(m="v-bind:key");v&&(e.removeAttribute(m),"key"===m&&(v=JSON.stringify(v))),(p=h.match(Ke))&&(h=h.replace(Ke,"").trim(),f=p[1].trim(),p[2]&&(u=p[2].trim())),(p=h.match(Fe))&&(l=p[1].split(",").map((e=>e.trim())),d="["===h[0]);let y,b,x,_=!1;const w=(e,t,s,r)=>{const i={};l?l.forEach(((e,n)=>i[e]=t[d?n:e])):i[h]=t,r?(f&&(i[f]=r),u&&(i[u]=s)):f&&(i[f]=s);const o=et(n,i),c=v?Me(o.scope,v):s;return e.set(c,s),o.key=c,o},$=(t,n)=>{const s=new nt(e,t);return s.key=t.key,s.insert(i,n),s};return n.effect((()=>{const e=Me(n.scope,c),t=x;if([b,x]=(e=>{const t=new Map,n=[];if(a(e))for(let s=0;s$(e,o))),_=!0})),r},He=({el:e,ctx:{scope:{$refs:t}},get:n,effect:s})=>{let r;return s((()=>{const s=n();t[s]=e,r&&s!==r&&delete t[r],r=s})),()=>{r&&delete t[r]}},Je=/^(?:v-|:|@)/,Ze=/\.([\w-]+)/g;let qe=!1;const De=(e,t)=>{const n=e.nodeType;if(1===n){const n=e;if(n.hasAttribute("v-pre"))return;let s;if(_e(n,"v-cloak"),s=_e(n,"v-if"))return((e,t,n)=>{const s=e.parentElement,r=new Comment("v-if");s.insertBefore(r,e);const i=[{exp:t,el:e}];let o,c;for(;(o=e.nextElementSibling)&&(c=null,""===_e(o,"v-else")||(c=_e(o,"v-else-if")));)s.removeChild(o),i.push({exp:c,el:o});const l=e.nextSibling;s.removeChild(e);let f,u=-1;const a=()=>{f&&(s.insertBefore(r,f.el),f.remove(),f=void 0)};return n.effect((()=>{for(let e=0;e{let n=e.firstChild;for(;n;)n=De(n,t)||n.nextSibling},Ue=(e,t,n,s)=>{let r,i,o;if(":"===(t=t.replace(Ze,((e,t)=>((o||(o={}))[t]=!0,""))))[0])r=ve,i=t.slice(1);else if("@"===t[0])r=Se,i=t.slice(1);else{const e=t.indexOf(":"),n=e>0?t.slice(2,e):t.slice(2);r=We[n]||s.dirs[n],i=e>0?t.slice(e+1):void 0}r&&(r===ve&&"ref"===i&&(r=He),Qe(e,r,n,s,i,o),e.removeAttribute(t))},Qe=(e,t,n,s,r,i)=>{const o=t({el:e,get:(t=n)=>Me(s.scope,t,e),effect:s.effect,ctx:s,exp:n,arg:r,modifiers:i});o&&s.cleanups.push(o)},Xe=(e,t)=>{if("#"!==t[0])e.innerHTML=t;else{const n=document.querySelector(t);e.appendChild(n.content.cloneNode(!0))}},Ye=e=>{const t={delimiters:["{{","}}"],delimitersRE:/\{\{([^]+?)\}\}/g,...e,scope:e?e.scope:oe({}),dirs:e?e.dirs:{},effects:[],blocks:[],cleanups:[],effect:e=>{if(qe)return de(e),e;const n=function(e,t){e.effect&&(e=e.effect.fn);const n=new W(e);t&&(l(n,t),t.scope&&S(n,t.scope)),(!t||!t.lazy)&&n.run();const s=n.run.bind(n);return s.effect=n,s}(e,{scheduler:()=>de(n)});return t.effects.push(n),n}};return t},et=(e,t={})=>{const n=e.scope,s=Object.create(n);Object.defineProperties(s,Object.getOwnPropertyDescriptors(t)),s.$refs=Object.create(n.$refs);const r=oe(new Proxy(s,{set:(e,t,s,i)=>i!==r||e.hasOwnProperty(t)?Reflect.set(e,t,s,i):Reflect.set(n,t,s)}));return tt(r),{...e,scope:r}},tt=e=>{for(const t of Object.keys(e))"function"==typeof e[t]&&(e[t]=e[t].bind(e))};class nt{constructor(e,t,n=!1){C(this,"template"),C(this,"ctx"),C(this,"key"),C(this,"parentCtx"),C(this,"isFragment"),C(this,"start"),C(this,"end"),this.isFragment=e instanceof HTMLTemplateElement,n?this.template=e:this.isFragment?this.template=e.content.cloneNode(!0):this.template=e.cloneNode(!0),n?this.ctx=t:(this.parentCtx=t,t.blocks.push(this),this.ctx=Ye(t)),De(this.template,this.ctx)}get el(){return this.start||this.template}insert(e,t=null){if(this.isFragment)if(this.start){let n,s=this.start;for(;s&&(n=s.nextSibling,e.insertBefore(s,t),s!==this.end);)s=n}else this.start=new Text(""),this.end=new Text(""),e.insertBefore(this.end,t),e.insertBefore(this.start,this.end),e.insertBefore(this.template,this.end);else e.insertBefore(this.template,t)}remove(){if(this.parentCtx&&((e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)})(this.parentCtx.blocks,this),this.start){const e=this.start.parentNode;let t,n=this.start;for(;n&&(t=n.nextSibling,e.removeChild(n),n!==this.end);)n=t}else this.template.parentNode.removeChild(this.template);this.teardown()}teardown(){this.ctx.blocks.forEach((e=>{e.teardown()})),this.ctx.effects.forEach(K),this.ctx.cleanups.forEach((e=>e()))}}const st=e=>e.replace(/[-.*+?^${}()|[\]\/\\]/g,"\\$&"),rt=e=>{const t=Ye();if(e&&(t.scope=oe(e),tt(t.scope),e.$delimiters)){const[n,s]=t.delimiters=e.$delimiters;t.delimitersRE=new RegExp(st(n)+"([^]+?)"+st(s),"g")}let n;return t.scope.$s=Ce,t.scope.$nextTick=he,t.scope.$refs=Object.create(null),{directive(e,n){return n?(t.dirs[e]=n,this):t.dirs[e]},mount(e){if("string"==typeof e&&!(e=document.querySelector(e)))return;let s;return s=(e=e||document.documentElement).hasAttribute("v-scope")?[e]:[...e.querySelectorAll("[v-scope]")].filter((e=>!e.matches("[v-scope] [v-scope]"))),s.length||(s=[e]),n=s.map((e=>new nt(e,t,!0))),this},unmount(){n.forEach((e=>e.teardown()))}}},it=document.currentScript;return it&&it.hasAttribute("init")&&rt().mount(),e.createApp=rt,e.nextTick=he,e.reactive=oe,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module",e}({}); diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 00000000..bf36d744 --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1,108 @@ + +/** + * We add extra br tags to the autodoc output, so each parameter is shown on + * its own line. + */ +function setupAutodocPy() { + const paramElements = document.querySelectorAll('.py .sig-param') + + Array(...paramElements).forEach((element) => { + let brElement = document.createElement('br') + element.parentNode.insertBefore(brElement, element) + }) + + const lastParamElements = document.querySelectorAll('.py em.sig-param:last-of-type') + + Array(...lastParamElements).forEach((element) => { + let brElement = document.createElement('br') + element.after(brElement) + }) +} + +function setupAutodocCpp() { + const highlightableElements = document.querySelectorAll(".c dt.sig-object, .cpp dt.sig-object") + + Array(...highlightableElements).forEach((element) => { + element.classList.add("highlight"); + }) + + const documentables = document.querySelectorAll("dt.sig-object.c,dt.sig-object.cpp"); + + Array(...documentables).forEach((element) => { + element.classList.add("highlight"); + + var parens = element.querySelectorAll(".sig-paren"); + var commas = Array(...element.childNodes).filter(e => e.textContent == ", ") + + if (parens.length != 2) return; + + commas.forEach(c => { + if (c.compareDocumentPosition(parens[0]) == Node.DOCUMENT_POSITION_PRECEDING && + c.compareDocumentPosition(parens[1]) == Node.DOCUMENT_POSITION_FOLLOWING + ) { + let brElement = document.createElement('br') + let spanElement = document.createElement('span') + spanElement.className = "sig-indent" + c.after(brElement) + brElement.after(spanElement) + } + }); + + if (parens[0].nextSibling != parens[1]) { + // not an empty argument list + let brElement = document.createElement('br') + let spanElement = document.createElement('span') + spanElement.className = "sig-indent" + parens[0].after(brElement) + brElement.after(spanElement) + let brElement1 = document.createElement('br') + parens[1].parentNode.insertBefore(brElement1, parens[1]); + } + }) +} + +function setupSearchSidebar() { + const searchInput = document.querySelector('form.search input[type=text]') + if (searchInput) { + searchInput.placeholder = 'Search...' + } + + const searchButton = document.querySelector('form.search input[type=submit]') + if (searchButton) { + searchButton.value = 'Search' + } +} + +function setupSidebarToggle() { + const sidebar = document.querySelector('.sphinxsidebar') + document.querySelector('#toggle_sidebar a').onclick = (event) => { + console.log("Toggling sidebar") + event.preventDefault() + sidebar.style.display = window.getComputedStyle(sidebar, null).display == 'none' ? 'block' : 'none' + } +} + +function setupRightSidebarToggle() { + const sidebar = document.querySelector('#right_sidebar') + + const links = document.querySelectorAll('a.toggle_right_sidebar') + + Array(...links).forEach((element) => { + element.onclick = (event) => { + console.log("Toggling right sidebar") + event.preventDefault() + sidebar.style.display = window.getComputedStyle(sidebar, null).display == 'none' ? 'block' : 'none' + } + }) +} + + +document.addEventListener("DOMContentLoaded", function() { + console.log("custom theme loaded") + + setupAutodocPy() + setupAutodocCpp() + setupSearchSidebar() + setupSidebarToggle() + setupRightSidebarToggle() +}) diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..c7fe6c6f --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,192 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..84ab3030 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..2c774d17 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,632 @@ +/* + * Sphinx JavaScript utilities for the full-text search. + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/api/api.html b/api/api.html new file mode 100644 index 00000000..52ff07b5 --- /dev/null +++ b/api/api.html @@ -0,0 +1,1946 @@ + + + + + + + + API Reference — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

API Reference

+
+

Props

+
+
+class port.api.props.PropsUIFooter
+

Page footer.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIHeader(title: Translatable)
+

Page header.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPageDonation(platform: str, header: PropsUIHeader, body: PropsUIPromptRadioInput | PropsUIPromptConsentForm | PropsUIPromptFileInput | PropsUIPromptFileInputMultiple | PropsUIPromptConfirm | PropsUIPromptQuestionnaire, footer: PropsUIFooter | None = None)
+

A multi-purpose page that gets shown to the user.

+
+
+platform
+

The platform name the user is currently in the process of donating data from.

+
+
Type:
+

str

+
+
+
+ +
+
+header
+

Page header.

+
+
Type:
+

PropsUIHeader

+
+
+
+ +
+
+body (PropsUIPromptRadioInput | PropsUIPromptConsentForm |
+

PropsUIPromptFileInput | PropsUIPromptFileInputMultiple | +PropsUIPromptConfirm | PropsUIPromptQuestionnaire): +Main body of the page.

+
+ +
+
+footer
+

Optional page footer.

+
+
Type:
+

Optional[PropsUIFooter]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPageEnd
+

An ending page to show the user they are done.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptConfirm(text: Translatable, ok: Translatable, cancel: Translatable)
+

Retry submitting a file page.

+

Prompt the user if they want to submit a new file. +This can be used in case a file could not be processed.

+
+
+text
+

Message to display.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+ok
+

Message to display if the user wants to try again.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+cancel
+

Message to display if the user wants to continue regardless.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptConsentForm(id: str, tables: list[PropsUIPromptConsentFormTable], meta_tables: list[PropsUIPromptConsentFormTable], description: Translatable | None = None, donate_question: Translatable | None = None, donate_button: Translatable | None = None)
+

Tables to be shown to the participant prior to donation.

+
+
+id
+

will be used as part of the filename when the data is stored

+
+
Type:
+

str

+
+
+
+ +
+
+tables
+

A list of tables.

+
+
Type:
+

list[PropsUIPromptConsentFormTable]

+
+
+
+ +
+
+meta_tables
+

A list of optional tables, for example for logging data.

+
+
Type:
+

list[PropsUIPromptConsentFormTable]

+
+
+
+ +
+
+description
+

Optional description of the consent form.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+donate_question
+

Optional donation question.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+donate_button
+

Optional text for the donate button.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+
+translate_meta_tables()
+

Translate the meta tables to a list of dictionaries.

+
+
Returns:
+

A list of dictionaries representing the meta tables.

+
+
Return type:
+

list

+
+
+
+ +
+
+translate_tables()
+

Translate the tables to a list of dictionaries.

+
+
Returns:
+

A list of dictionaries representing the tables.

+
+
Return type:
+

list

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptConsentFormTable(id: str, title: Translatable, data_frame: pandas.DataFrame | Dict[str, Dict[str, Any]], description: Translatable | None = None, visualizations: list | None = None, folded: bool | None = False, delete_option: bool | None = True)
+

Table to be shown to the participant prior to donation.

+
+
+id
+

A unique string to identify the table after donation.

+
+
Type:
+

str

+
+
+
+ +
+
+title
+

Title of the table.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+data_frame
+

Table to be shown can be a pandas DataFrame or a dictionary.

+
+
Type:
+

pd.DataFrame | Dict[str, Dict[str, Any]]

+
+
+
+ +
+
+description
+

Optional description of the table.

+
+
Type:
+

Optional[Translatable]

+
+
+
+ +
+
+visualizations
+

Optional visualizations to be shown.

+
+
Type:
+

Optional[list]

+
+
+
+ +
+
+folded
+

Whether the table should be initially folded.

+
+
Type:
+

Optional[bool]

+
+
+
+ +
+
+delete_option
+

Whether to show a delete option for the table.

+
+
Type:
+

Optional[bool]

+
+
+
+ +

Examples:

+
data_frame_df = pd.DataFrame([
+    {"column1": 1, "column2": 4},
+    {"column1": 2, "column2": 5},
+    {"column1": 3, "column2": 6},
+])
+
+example1 = PropsUIPromptConsentFormTable(
+    id="example1",
+    title=Translatable("Table as DataFrame"),
+    data_frame=data_frame_df,
+)
+
+data_frame_dict = {
+    "column1": {"0": 1, "1": 4},
+    "column2": {"0": 2, "1": 5},
+    "column3": {"0": 3, "1": 6},
+}
+
+example2 = PropsUIPromptConsentFormTable(
+    id="example2",
+    title=Translatable("Table as Dictionary"),
+    data_frame=data_frame_dict,
+)
+
+
+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptFileInput(description: Translatable, extensions: str)
+

Prompt the user to submit a file.

+
+
+description
+

Text with an explanation.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+extensions
+

Accepted mime types, example: “application/zip, text/plain”.

+
+
Type:
+

str

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptFileInputMultiple(description: Translatable, extensions: str)
+

Prompt the user to submit multiple files.

+
+
+description
+

Text with an explanation.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+extensions
+

Accepted mime types, example: “application/zip, text/plain”.

+
+
Type:
+

str

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptProgress(description: Translatable, message: str, percentage: int | None = None)
+

Prompt the user information during the extraction.

+
+
+description
+

Text with an explanation.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+message
+

Can be used to show extraction progress.

+
+
Type:
+

str

+
+
+
+ +
+
+percentage
+

Optional percentage of progress.

+
+
Type:
+

Optional[int]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptQuestionnaire(description: Translatable, questions: list[PropsUIQuestionMultipleChoice | PropsUIQuestionMultipleChoiceCheckbox | PropsUIQuestionOpen])
+

Questionnaire containing multiple questions.

+
+
+description
+

Description of the questionnaire.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+questions
+

List of questions in the questionnaire.

+
+
Type:
+

list[PropsUIQuestionMultipleChoice | PropsUIQuestionMultipleChoiceCheckbox | PropsUIQuestionOpen]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIPromptRadioInput(title: Translatable, description: Translatable, items: list[RadioItem])
+

Radio group.

+

This radio group can be used to get a multiple choice answer from a user.

+
+
+title
+

Title of the radio group.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+description
+

Short description of the radio group.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+items
+

A list of radio buttons.

+
+
Type:
+

list[RadioItem]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIQuestionMultipleChoice(id: int, question: Translatable, choices: list[Translatable])
+

Multiple choice question with radio buttons.

+
+
+id
+

Question ID.

+
+
Type:
+

int

+
+
+
+ +
+
+question
+

The question text.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+choices
+

List of choices.

+
+
Type:
+

list[Translatable]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIQuestionMultipleChoiceCheckbox(id: int, question: Translatable, choices: list[Translatable])
+

Multiple choice question with checkboxes.

+
+
+id
+

Question ID.

+
+
Type:
+

int

+
+
+
+ +
+
+question
+

The question text.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+choices
+

List of choices.

+
+
Type:
+

list[Translatable]

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.PropsUIQuestionOpen(id: int, question: Translatable)
+

Open-ended question.

+
+
+id
+

Question ID.

+
+
Type:
+

int

+
+
+
+ +
+
+question
+

The question text.

+
+
Type:
+

Translatable

+
+
+
+ +
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.RadioItem
+

Radio button.

+
+
+id
+

ID of radio button.

+
+
Type:
+

int

+
+
+
+ +
+
+value
+

Text to be displayed.

+
+
Type:
+

str

+
+
+
+ +
+ +
+
+class port.api.props.Translatable(translations: Translations)
+

Wrapper class for Translations.

+
+
+toDict()
+

Convert the object to a dictionary.

+
+
Returns:
+

A dictionary representation of the object.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+class port.api.props.Translations
+

Typed dict containing text that is displayed in a specific language.

+
+ +
+
+

Extraction helpers

+

This module contains helper functions that can be used during the data extraction process

+
+
+exception port.helpers.extraction_helpers.FileNotFoundInZipError
+

The File you are looking for is not present in a zipfile

+
+ +
+
+port.helpers.extraction_helpers.dict_denester(inp: dict[Any, Any] | list[Any], new: dict[Any, Any] | None = None, name: str = '', run_first: bool = True) dict[Any, Any]
+

Denests a dictionary or list, returning a new flattened dictionary.

+
+
Parameters:
+
    +
  • inp (dict[Any, Any] | list[Any]) – The input dictionary or list to be denested.

  • +
  • new (dict[Any, Any] | None, optional) – The dictionary to store denested key-value pairs. Defaults to None.

  • +
  • name (str, optional) – The current key name in the denesting process. Defaults to “”.

  • +
  • run_first (bool, optional) – Flag to indicate if this is the first run of the function. Defaults to True.

  • +
+
+
Returns:
+

A new denested dictionary.

+
+
Return type:
+

dict[Any, Any]

+
+
+

Examples:

+
>>> nested_dict = {"a": {"b": {"c": 1}}, "d": [2, 3]}
+>>> dict_denester(nested_dict)
+{"a-b-c": 1, "d-0": 2, "d-1": 3}
+
+
+
+ +
+
+port.helpers.extraction_helpers.epoch_to_iso(epoch_timestamp: str | int | float) str
+

Convert epoch timestamp to an ISO 8601 string, assuming UTC.

+
+
Parameters:
+

epoch_timestamp (str | int) – The epoch timestamp to convert.

+
+
Returns:
+

The ISO 8601 formatted string, or the original input if conversion fails.

+
+
Return type:
+

str

+
+
Raises:
+

Exception – Logs an error message if conversion fails.

+
+
+

Examples:

+
>>> epoch_to_iso(1632139200)
+"2021-09-20T12:00:00+00:00"
+
+
+
+ +
+
+port.helpers.extraction_helpers.extract_file_from_zip(zfile: str, file_to_extract: str) BytesIO
+

Extracts a specific file from a zipfile and returns it as a BytesIO buffer.

+
+
Parameters:
+
    +
  • zfile (str) – Path to the zip file.

  • +
  • file_to_extract (str) – Name or path of the file to extract from the zip.

  • +
+
+
Returns:
+

+
A BytesIO buffer containing the extracted file’s content of the first file found.

Returns an empty BytesIO if the file is not found or an error occurs.

+
+
+

+
+
Return type:
+

io.BytesIO

+
+
Raises:
+
    +
  • FileNotFoundInZipError – Logs an error if the specified file is not found in the zip.

  • +
  • zipfile.BadZipFile – Logs an error if the zip file is invalid.

  • +
  • Exception – Logs any other unexpected errors.

  • +
+
+
+

Examples:

+
>>> extracted_file = extract_file_from_zip("archive.zip", "data.txt")
+>>> content = extracted_file.getvalue().decode('utf-8')
+
+
+
+ +
+
+port.helpers.extraction_helpers.find_item(d: dict[Any, Any], key_to_match: str) str
+

Finds the least nested value in a denested dictionary whose key contains the given key_to_match.

+
+
Parameters:
+
    +
  • d (dict[Any, Any]) – A denested dictionary to search in.

  • +
  • key_to_match (str) – The substring to match in the keys.

  • +
+
+
Returns:
+

+
The value of the least nested key containing key_to_match.

Returns an empty string if no match is found.

+
+
+

+
+
Return type:
+

str

+
+
Raises:
+

Exception – Logs an error message if an exception occurs during the search.

+
+
+

Examples:

+
>>> d = {"asd-asd-asd": 1, "asd-asd": 2, "qwe": 3}
+>>> find_item(d, "asd")
+"2"
+
+
+
+ +
+
+port.helpers.extraction_helpers.find_items(d: dict[Any, Any], key_to_match: str) list
+

Finds all values in a denested dictionary whose keys contain the given key_to_match.

+
+
Parameters:
+
    +
  • d (dict[Any, Any]) – A denested dictionary to search in.

  • +
  • key_to_match (str) – The substring to match in the keys.

  • +
+
+
Returns:
+

A list of all values whose keys contain key_to_match.

+
+
Return type:
+

list

+
+
Raises:
+

Exception – Logs an error message if an exception occurs during the search.

+
+
+

Examples:

+
>>> d = {"asd-1": "a", "asd-2": "b", "qwe": "c"}
+>>> find_items(d, "asd")
+["a", "b"]
+
+
+
+ +
+
+port.helpers.extraction_helpers.fix_ascii_string(input: str) str
+

Fixes the string encoding by removing non-ASCII characters.

+
+
Parameters:
+

input (str) – The input string that needs to be fixed.

+
+
Returns:
+

The fixed string with only ASCII characters, or the original string if an exception occurs.

+
+
Return type:
+

str

+
+
+

Examples:

+
>>> fix_ascii_string("Hello, 世界!")
+"Hello, !"
+
+
+
+ +
+
+port.helpers.extraction_helpers.fix_latin1_string(input: str) str
+

Fixes the string encoding by attempting to encode it using the ‘latin1’ encoding and then decoding it.

+
+
Parameters:
+

input (str) – The input string that needs to be fixed.

+
+
Returns:
+

The fixed string after encoding and decoding, or the original string if an exception occurs.

+
+
Return type:
+

str

+
+
+

Examples:

+
>>> fix_latin1_string("café")
+"café"
+
+
+
+ +
+
+port.helpers.extraction_helpers.json_dumper(zfile: str) pandas.DataFrame
+

Reads all JSON files in a zip file, flattens them, and combines them into a single DataFrame.

+
+
Parameters:
+

zfile (str) – Path to the zip file containing JSON files.

+
+
Returns:
+

A DataFrame containing flattened data from all JSON files in the zip.

+
+
Return type:
+

pd.DataFrame

+
+
Raises:
+

Exception – Logs an error message if an exception occurs during the process.

+
+
+

Examples:

+
>>> df = json_dumper("data.zip")
+>>> print(df.head())
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_csv_from_bytes(json_bytes: BytesIO) list[dict[Any, Any]]
+

Reads CSV data from a BytesIO buffer and returns it as a list of dictionaries.

+
+
Parameters:
+

json_bytes (io.BytesIO) – A BytesIO buffer containing CSV data.

+
+
Returns:
+

+
A list of dictionaries, where each dictionary represents a row in the CSV.

Returns an empty list if parsing fails.

+
+
+

+
+
Return type:
+

list[dict[Any, Any]]

+
+
+

Examples

+
>>> buffer = io.BytesIO(b'name,age\nAlice,30\nBob,25')
+>>> data = read_csv_from_bytes(buffer)
+>>> print(data)
+[{'name': 'Alice', 'age': '30'}, {'name': 'Bob', 'age': '25'}]
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_csv_from_bytes_to_df(json_bytes: BytesIO) pandas.DataFrame
+

Reads CSV data from a BytesIO buffer and returns it as a pandas DataFrame.

+
+
Parameters:
+

json_bytes (io.BytesIO) – A BytesIO buffer containing CSV data.

+
+
Returns:
+

A pandas DataFrame containing the CSV data.

+
+
Return type:
+

pd.DataFrame

+
+
+

Examples

+
>>> buffer = io.BytesIO(b'name,age\nAlice,30\nBob,25')
+>>> df = read_csv_from_bytes_to_df(buffer)
+>>> print(df)
+   name  age
+0  Alice   30
+1    Bob   25
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_json_from_bytes(json_bytes: BytesIO) dict[Any, Any] | list[Any]
+

Reads JSON data from a BytesIO buffer.

+
+
Parameters:
+

json_bytes (io.BytesIO) – A BytesIO buffer containing JSON data.

+
+
Returns:
+

+
The parsed JSON data as a dictionary or list.

Returns an empty dictionary if parsing fails.

+
+
+

+
+
Return type:
+

dict[Any, Any] | list[Any]

+
+
+

Examples:

+
>>> buffer = io.BytesIO(b'{"key": "value"}')
+>>> data = read_json_from_bytes(buffer)
+>>> print(data)
+{'key': 'value'}
+
+
+
+ +
+
+port.helpers.extraction_helpers.read_json_from_file(json_file: str) dict[Any, Any] | list[Any]
+

Reads JSON data from a file.

+
+
Parameters:
+

json_file (str) – Path to the JSON file.

+
+
Returns:
+

+
The parsed JSON data as a dictionary or list.

Returns an empty dictionary if parsing fails.

+
+
+

+
+
Return type:
+

dict[Any, Any] | list[Any]

+
+
+

Examples:

+
>>> data = read_json_from_file("data.json")
+>>> print(data)
+{'key': 'value'}
+
+
+
+ +
+
+port.helpers.extraction_helpers.replace_months(input_string: str) str
+

Replaces Dutch month abbreviations with English equivalents in the input string.

+
+
Parameters:
+

input_string (str) – The input string containing potential Dutch month abbreviations.

+
+
Returns:
+

The input string with Dutch month abbreviations replaced by English equivalents.

+
+
Return type:
+

str

+
+
+

Examples:

+
>>> replace_months("15 mei 2023")
+"15 may 2023"
+
+
+
+ +
+
+port.helpers.extraction_helpers.sort_isotimestamp_empty_timestamp_last(timestamp_series: pandas.Series) pandas.Series
+

Creates a key for sorting a pandas Series of ISO timestamps, placing empty timestamps last.

+
+
Parameters:
+

timestamp_series (pd.Series) – A pandas Series containing ISO formatted timestamps.

+
+
Returns:
+

A Series of sorting keys, with -timestamp for valid dates and infinity for invalid/empty dates.

+
+
Return type:
+

pd.Series

+
+
+

Examples:

+
>>> df = df.sort_values(by="Date", key=sort_isotimestamp_empty_timestamp_last)
+
+
+
+ +
+
+

Port helpers

+
+
+port.helpers.port_helpers.donate(key: str, json_string: str) CommandSystemDonate
+

Initiates a donation process using the provided key and data.

+

This function triggers the donation process by passing a key and a JSON-formatted string +that contains donation information.

+
+
Parameters:
+
    +
  • key (str) – The key associated with the donation process. The key will be used in the file name.

  • +
  • json_string (str) – A JSON-formatted string containing the donated data.

  • +
+
+
Returns:
+

A system command that initiates the donation process. Must be yielded.

+
+
Return type:
+

CommandSystemDonate

+
+
+
+ +
+
+port.helpers.port_helpers.exit(code: int, info: str) CommandSystemExit
+

Exits Next with the provided exit code and additional information. +This if the code reaches this function, it will return to the task list in Next.

+
+
Parameters:
+
    +
  • code (int) – The exit code representing the type or status of the exit.

  • +
  • info (str) – A string containing additional information about the exit.

  • +
+
+
Returns:
+

A system command that initiates the exit process in Next.

+
+
Return type:
+

CommandSystemExit

+
+
+

Examples:

+
yield exit(0, "Success")
+
+
+
+ +
+
+port.helpers.port_helpers.generate_file_prompt(extensions: str) PropsUIPromptFileInput
+

Generates a file input prompt for selecting a file for a platform.

+

This function creates a bilingual (English and Dutch) file input prompt +that instructs the user to select a file they’ve received from a platform +and stored on their device.

+
+
Parameters:
+
    +
  • extensions (str) – A collection of allowed MIME types.

  • +
  • example (For) – “application/zip, text/plain, application/json”

  • +
+
+
Returns:
+

A file input prompt object containing +the description text and allowed file extensions.

+
+
Return type:
+

props.PropsUIPromptFileInput

+
+
+
+ +
+
+port.helpers.port_helpers.generate_retry_prompt(platform_name: str) PropsUIPromptConfirm
+

Generates a confirmation prompt for retrying file processing.

+

This function creates a bilingual (English and Dutch) confirmation prompt +when a file from a specific platform cannot be processed. It allows the user +to either try again with a different file or continue with the current file.

+
+
Parameters:
+

platform_name (str) – The name of the platform associated with the file +that couldn’t be processed. This is inserted into the prompt text.

+
+
Returns:
+

A confirmation prompt object containing +the message, and labels for the “OK” (try again) and “Cancel” (continue) buttons.

+
+
Return type:
+

props.PropsUIPromptConfirm

+
+
+
+ +
+
+port.helpers.port_helpers.generate_review_data_prompt(id: str, description: Translatable, table_list: list[PropsUIPromptConsentFormTable]) PropsUIPromptConsentForm
+

Generates a data review form with a list of tables and a description, including default donate question and button. +The participant can review these tables before they will be send to the researcher. If the participant consents to sharing the data +the data will be stored at the configured storage location.

+
+
Parameters:
+
    +
  • id (str) – will be used as part of the filename when the data is stored

  • +
  • table_list (list[props.PropsUIPromptConsentFormTable]) – A list of consent form tables to be included in the prompt.

  • +
  • description (props.Translatable) – A translatable description text for the consent prompt.

  • +
+
+
Returns:
+

A structured consent form object containing the provided table list, description, +and default values for donate question and button.

+
+
Return type:
+

props.PropsUIPromptConsentForm

+
+
+
+ +
+
+port.helpers.port_helpers.render_end_page()
+

Renders a thank you page, must be yielded.

+
+ +
+
+port.helpers.port_helpers.render_page(header_text: Translatable, body: PropsUIPromptRadioInput | PropsUIPromptConsentForm | PropsUIPromptFileInput | PropsUIPromptFileInputMultiple | PropsUIPromptConfirm | PropsUIPromptQuestionnaire) CommandUIRender
+

Renders the UI components for a donation page.

+

This function assembles various UI components including a header, body, and footer +to create a complete donation page. It uses the provided header text and body content +to customize the page.

+
+
Parameters:
+
    +
  • header_text (props.Translatable) – The text to be displayed in the header. +This should be a translatable object to support multiple languages.

  • +
  • ( (body) – props.PropsUIPromptRadioInput | +props.PropsUIPromptConsentForm | +props.PropsUIPromptFileInput | +props.PropsUIPromptFileInputMultiple | +props.PropsUIPromptConfirm | +props.PropsUIPromptQuestionnaire

  • +
  • ) – The main content of the page. It must be compatible with props.PropsUIPageDonation.

  • +
+
+
Returns:
+

A render command object containing the fully assembled page. Must be yielded.

+
+
Return type:
+

CommandUIRender

+
+
+
+ +
+
+

Validation

+

Contains classes to deal with input validation of DDPs

+

The idea of this module is to provide a uniform way to assign a validation status to a DDP validation +Which can be used and acted upon

+
+
+class port.helpers.validate.DDPCategory(id: str, ddp_filetype: DDPFiletype, language: Language, known_files: list[str])
+

Represents characteristics that define a DDP (Data Delivery Package) category.

+
+
Parameters:
+
    +
  • id (str) – Unique identifier for the DDP category.

  • +
  • ddp_filetype (DDPFiletype) – The file type of the DDP.

  • +
  • language (Language) – The language of the DDP.

  • +
  • known_files (List[str]) – A list of known files associated with this DDP category.

  • +
+
+
+

Examples

+
>>> category = DDPCategory("cat1", DDPFiletype.JSON, Language.EN, ["file1.json", "file2.json"])
+>>> print(category.id)
+cat1
+>>> print(category.language)
+<Language.EN: 1>
+
+
+
+ +
+
+class port.helpers.validate.DDPFiletype(value)
+

Enumeration of supported DDP file types.

+
+ +
+
+class port.helpers.validate.Language(value)
+

Enumeration of supported languages.

+
+ +
+
+class port.helpers.validate.StatusCode(id: int, description: str)
+

Represents a status code that can be used to set a DDP status.

+
+
Parameters:
+
    +
  • id (int) – The numeric identifier of the status code.

  • +
  • description (str) – A brief description of what the status code represents.

  • +
+
+
+

Examples

+
>>> status = StatusCode(0, "Success")
+>>> print(status.id)
+0
+>>> print(status.description)
+Success
+
+
+
+ +
+
+class port.helpers.validate.ValidateInput(all_status_codes: list[StatusCode], all_ddp_categories: list[DDPCategory], current_status_code: StatusCode | None = None, current_ddp_category: DDPCategory | None = None)
+

A class for validating input data against predefined categories and status codes.

+
+
Parameters:
+
    +
  • all_status_codes (List[StatusCode]) – A list of valid status codes.

  • +
  • all_ddp_categories (List[DDPCategory]) – A list of valid DDP categories.

  • +
  • current_status_code (Optional[StatusCode]) – The current status code. Defaults to None.

  • +
  • current_ddp_category (Optional[DDPCategory]) – The current DDP category. Defaults to None.

  • +
+
+
+
+
+ddp_categories_lookup
+

A lookup dictionary for DDP categories.

+
+
Type:
+

Dict[str, DDPCategory]

+
+
+
+ +
+
+status_codes_lookup
+

A lookup dictionary for status codes.

+
+
Type:
+

Dict[int, StatusCode]

+
+
+
+ +

Examples

+
>>> status_codes = [StatusCode(id=0, description="Success"), StatusCode(id=1, description="Error")]
+>>> ddp_categories = [DDPCategory(id="cat1", ddp_filetype=DDPFiletype.JSON, language=Language.EN, known_files=["file1.txt", "file2.txt"])]
+>>> validator = ValidateInput(all_status_codes=status_codes, all_ddp_categories=ddp_categories)
+
+
+
+
+get_status_code_id() int
+

Return the current assigned status code ID. Note: zero is always used for OK. +Non-zero otherwise.

+
+
Returns:
+

The ID of the current status code, or 1 if no status code is set.

+
+
Return type:
+

int

+
+
+

Examples

+
>>> validator.get_status_code_id()
+
+
+
+ +
+
+infer_ddp_category(file_list_input: list[str]) bool
+

Compares a list of files to a list of known files and infers the DDPCategory.

+
+
Parameters:
+

file_list_input (List[str]) – A list of input files to compare against known files.

+
+
Returns:
+

True if a valid DDP category is inferred, False otherwise. It sets the current_status_code +and current_ddp_category to either the DDP catogory match, or to an unknown category.

+
+
Return type:
+

bool

+
+
+

Examples

+
>>> validator.infer_ddp_category(["file1.txt", "file2.txt"])
+
+
+
+ +
+
+set_current_status_code_by_id(id: int) None
+

Set the status code based on the provided ID.

+
+
Parameters:
+

id (int) – The ID of the status code to set.

+
+
+

Examples

+
>>> validator.set_current_status_code_by_id(0)
+
+
+
+ +
+ +
+
+port.helpers.validate.validate_zip(ddp_categories: list[DDPCategory], path_to_zip: str) ValidateInput
+

Validates a DDP zip file against a list of DDP categories.

+

This function attempts to open and read the contents of a zip file, then uses +the ValidateInput class to infer the DDP category based on the files in the zip. +If the zip file is invalid or cannot be read, it sets an error status code (an integer greather than 0).

+
+
Parameters:
+
    +
  • ddp_categories (List[DDPCategory]) – A list of valid DDP categories to compare against.

  • +
  • path_to_zip (str) – The file path to the zip file to be validated.

  • +
+
+
Returns:
+

An instance of ValidateInput containing the validation results.

+
+
Return type:
+

ValidateInput

+
+
Raises:
+

zipfile.BadZipFile – This exception is caught internally and results in an error status code.

+
+
+

Examples

+
>>> categories = [DDPCategory(id="cat1", ddp_filetype=DDPFiletype.JSON, language=Language.EN, known_files=["file1.txt", "file2.txt"])]
+>>> result = validate_zip(categories, "path/to/valid.zip")
+>>> result.get_status_code_id()
+0
+
+
+
>>> result = validate_zip(categories, "path/to/invalid.zip")
+>>> result.get_status_code_id()
+1
+
+
+
+ +
+
+ + +
+
+
+
+ + + + + + +
+
+
+ +
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/api/index.html b/api/index.html new file mode 100644 index 00000000..1a9a6045 --- /dev/null +++ b/api/index.html @@ -0,0 +1,246 @@ + + + + + + + + API Reference — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ +
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/creating-your-own-data-donation-task.html b/articles/creating-your-own-data-donation-task.html new file mode 100644 index 00000000..f19e7413 --- /dev/null +++ b/articles/creating-your-own-data-donation-task.html @@ -0,0 +1,573 @@ + + + + + + + + Creating your own donation task — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Creating your own donation task

+

The donation task is at the core of a data donation study. +It is the step where the participant is actually going to donate their data.

+

The data donation task goes as follows:

+
    +
  1. The participant goes to your data donation task app in a browser

  2. +
  3. The participant is prompted to submit their data download package (DDP)

  4. +
  5. A Python script you wrote, extracts the data you need for your research

  6. +
  7. That data gets presented to the participant on screen

  8. +
  9. The participants decides to donate and you receive the data

  10. +
+
+

Using the data donation task in a data donation study

+

The data donation task needs to be used in together with Next. Next is the backend for the data donation task. With Next you can configure a data donation study: i.e. configure:

+
    +
  • Your data donation task

  • +
  • An information page

  • +
  • An informed consent page

  • +
  • A privacy policy

  • +
  • Instruction manuals for participants

  • +
  • Configure where the data should go

  • +
  • and more

  • +
+

You can find more information on how to deploy a study in the wiki

+
+
+

How does the data donation task work?

+

The idea behind the data donation task +The data donation task repository is in essence a toolkit with which you can build your own custom data donation task. +It is designed as a toolkit because researchers need to tailor the data donation task to their own interests; they interested in different DDPs and are interested in different data within those DDPs.

+

This toolkit approach has several benefits:

+
    +
  1. It allows for a bespoke experience for the participant

  2. +
  3. You can only extract (and possibly aggregate) the data you need for you study, which we think is important in order to preserve the privacy of the participant and is often a requirement from your data steward/ethical review board

  4. +
+

These benefits come at the cost of added complexity compared to a one size fits all approach that extracts most or all data from the participant.

+

The design of the data donation task +The data donation task contains reusable components (such as: a screen that prompts the participant to submit their DDP and a screen with tables that the participants need to review prior to donation) that you can use and combine in creative ways to make your own study. +These components are combined in a Python script that is created by the researcher.

+

On a high level the script works as follows:

+
    +
  1. The Python script determines which user interface (UI) component needs to be shown to the participant

  2. +
  3. Whenever the participant is done interacting with the UI component, the result of that interaction is returned to the script

  4. +
  5. The script handles the return result en determine the next UI component that the participant needs to see or interact with, go back to step 1 until the end of the donation task

  6. +
+

The architecture of the data donation task +The data donation task is a web application (build with React and Pyodide) that completely runs in the browser of the participant. +The Python script and the UI components will run completely in the browser of the participant. +Data is only sent to the server upon the participant clicking a consent button.

+
+
+

Start writing your first data donation task script

+

After you have forked or cloned and installed this repository (see instruction) you can start creating your own donation task.

+

You can create your own study by changing and/or adapting the code in the following directory port/src/framework/processing/py/port/ +This directory contains the following files:

+
    +
  • script.py: Contains your donation task logic; which screen the participants will see and in what order

  • +
  • api/props.py: Contains all the UI elements you can use; you can use this file for reference

  • +
  • api/commands.py: Contains the Render and the Donate commands

  • +
  • main.py: The main driver of you donation task, you don’t need to touch this file

  • +
+
+

script.py

+

script.py is the most important file and the one we will be working with the most

+

Lets look at a full example of a script.py. In this example we will be extracting data from a fictional DDP. +Participants are asked to submit a zip file (any zip file will do in this case), and we will extract the file names and some meta data from this zip file. +In a real study you would extract something substantial from the data.

+

script.py must contain a function called process this function determines the whole data donation task from start to finish (Which screens the participant will see and in what order, and what kind of data extraction will take place). +At the time of writing this example is also the default script.py.

+

In this example process defines the following data donation task:

+
    +
  1. Ask the participant to submit a zip file

  2. +
  3. Perform validation on the submitted zip file, if not valid return to step 1

  4. +
  5. Extract the data from the submitted zip file

  6. +
  7. Render the extract data on screen in a table

  8. +
  9. Send the data to the data storage upon consent

  10. +
+

Although these can vary per data donation task, they will be more or less similar.

+

Below you can find the annotated example process function:

+
# script.py
+import port.api.props as props
+from port.api.commands import (CommandSystemDonate, CommandUIRender, CommandSystemExit)
+
+import pandas as pd
+import zipfile
+
+def process(session_id: str):
+    platform = "Platform of interest"
+
+    # Start of the data donation task
+    while True:
+        # Ask the participant to submit a file
+        file_prompt = generate_file_prompt(platform, "application/zip, text/plain")
+        file_prompt_result = yield render_page(platform, file_prompt)
+
+        # If the participant submitted a file: continue
+        if file_prompt_result.__type__ == 'PayloadString':
+
+            # Validate the file the participant submitted
+            # In general this is wise to do 
+            is_data_valid = validate_the_participants_input(file_prompt_result.value)
+
+            # Happy flow (all is well):
+            # The file the participant submitted is valid
+            if is_data_valid == True:
+
+                # Extract the data you as a researcher are interested in, and put it in a pandas DataFrame
+                # Show this data to the participant in a table on screen
+                # The participant can now decide to donate
+                extracted_data = extract_the_data_you_are_interested_in(file_prompt_result.value)
+                consent_prompt = generate_consent_prompt(extracted_data)
+                consent_prompt_result = yield render_page(platform, consent_prompt)
+
+                # If the participant wants to donate the data gets donated
+                if consent_prompt_result.__type__ == "PayloadJSON":
+                    yield donate(f"{session_id}-{platform}", consent_prompt_result.value)
+
+                break
+
+            # Sad flow
+            # The data was not valid, ask the participant to retry
+            if is_data_valid == False:
+                retry_prompt = generate_retry_prompt(platform)
+                retry_prompt_result = yield render_page(platform, retry_prompt)
+
+                # The participant wants to retry: start from the beginning
+                if retry_prompt_result.__type__ == 'PayloadTrue':
+                    continue
+                # The participant does not want to retry or pressed skip
+                else:
+                    break
+
+        # The participant did not submit a file and pressed skip
+        else:
+            break
+
+    yield exit_port(0, "Success")
+    yield render_end_page()
+
+
+
+

The functions used in process

+

These are all the functions used in process together they make up script.py.

+
+extract_the_data_you_are_interested_in +
def extract_the_data_you_are_interested_in(zip_file: str) -> pd.DataFrame:
+    """
+    This function extracts the data the researcher is interested in
+
+    In this case we extract from the zipfile:
+    * The filesnames
+    * The compressed file size
+    * The file size
+
+    You could extract anything here
+    """
+    names = []
+    out = pd.DataFrame()
+
+    try:
+        file = zipfile.ZipFile(zip_file)
+        data = []
+        for name in file.namelist():
+            names.append(name)
+            info = file.getinfo(name)
+            data.append((name, info.compress_size, info.file_size))
+
+        out = pd.DataFrame(data, columns=["File name", "Compressed file size", "File size"])
+
+    except Exception as e:
+        print(f"Something went wrong: {e}")
+
+    return out
+
+
+
+
+validate_the_participants_input +
def validate_the_participants_input(zip_file: str) -> bool:
+    """
+    Check if the participant actually submitted a zipfile
+    Returns True if participant submitted a zipfile, otherwise False
+
+    In reality you need to do a lot more validation.
+    Some things you could check:
+    - Check if the the file(s) are the correct format (json, html, binary, etc.)
+    - If the files are in the correct language
+    """
+
+    try:
+        with zipfile.ZipFile(zip_file) as zf:
+            return True
+    except zipfile.BadZipFile:
+        return False
+
+
+
+
+render_end_page +
def render_end_page():
+    """
+    Renders a thank you page
+    """
+    page = props.PropsUIPageEnd()
+    return CommandUIRender(page)
+
+
+
+
+
+render_page +
def render_page(platform: str, body, progress: int):
+    """
+    Renders the UI components
+    """
+    header = props.PropsUIHeader(props.Translatable({"en": platform, "nl": platform }))
+    footer = props.PropsUIFooter(progress)
+    page = props.PropsUIPageDonation(platform, header, body, footer)
+    return CommandUIRender(page)
+
+
+
+
+generate_retry_prompt +
def generate_retry_prompt(platform: str) -> props.PropsUIPromptConfirm:
+    """
+    Generates a retry screen, this can be used if validation failed for example.
+    You can aks the participant to try again, and go back to the submit file prompt
+    """
+    text = props.Translatable({
+        "en": f"Unfortunately, we cannot process your {platform} file. Continue, if you are sure that you selected the right file. Try again to select a different file.",
+        "nl": f"Helaas, kunnen we uw {platform} bestand niet verwerken. Weet u zeker dat u het juiste bestand heeft gekozen? Ga dan verder. Probeer opnieuw als u een ander bestand wilt kiezen."
+    })
+    ok = props.Translatable({
+        "en": "Try again",
+        "nl": "Probeer opnieuw"
+    })
+    cancel = props.Translatable({
+        "en": "Continue",
+        "nl": "Verder"
+    })
+    return props.PropsUIPromptConfirm(text, ok, cancel)
+
+
+
+
+generate_file_prompt +
def generate_file_prompt(platform: str) -> props.PropsUIPromptFileInput:
+    """
+    Generates a prompt that asks the participant to input a file
+    """
+    description = props.Translatable({
+        "en": f"Please follow the download instructions and choose the file that you stored on your device. Click “Skip” at the right bottom, if you do not have a {platform} file. ",
+        "nl": f"Volg de download instructies en kies het bestand dat u opgeslagen heeft op uw apparaat. Als u geen {platform} bestand heeft klik dan op “Overslaan” rechts onder."
+    })
+ 
+    return props.PropsUIPromptFileInput(description, "application/zip, text/plain")
+
+
+
+
+generate_consent_prompt +
def generate_consent_prompt(df: pd.DataFrame) -> props.PropsUIPromptConsentForm:
+    """
+    Generates a prompt screen with table(s) with the extract data for the participant to review
+    """
+    table_title = props.Translatable({
+        "en": "Zip file contents",
+        "nl": "Inhoud zip bestand"
+    })
+    table = props.PropsUIPromptConsentFormTable("zip_contents", table_title, df)
+    return props.PropsUIPromptConsentForm([table], [])
+
+
+
+
+donate +
def donate(key, json_string):
+    """
+    Sends data to the backend
+    """
+    return CommandSystemDonate(key, json_string)
+
+
+
+
+exit_port +
def exit_port(code, info):
+    """
+    When in Next this function exits the data donation task, and lets the participant return to Next
+    """
+    return CommandSystemExit(code, info)
+
+
+
+
+
+

Start writing your own script.py using the api

+

Now that you have seen a full example, you can start to try and create your own data donation task. With the elements from the example you can already build some pretty intricate data donation tasks. +Start creating your own by script.py by adapting this example to your own needs, for example, instead of file names you could extract data you would actually like to extract yourself.

+

If you want to see which up what UI elements are available to you checkout api/props.py. In general you need to construct your own pages (prompts) and render them with render_page (dont forget yield).

+
+
+

The usage of yield in script.py

+

Did you notice yield instead of return? yield makes sure that whenever the code resumes after a page render, it starts where it left off. +If you render a page you need to use yield instead of return, just like in the example.

+
+
+

Install Python packages

+

The data donation task runs in the browser of the participant, it is important to understand that when Python is running in your browser it is not using the Python version you have installed on your system. +The data donation task is using Pyodide this is Python compiled to web assembly that runs in the browser. +This means that packages you have available on your system install of Python, won’t be available in the browser.

+

If you want to use external packages they should be available for Pyodide, you can check the list of available packages here. +If you have found a package you want to use you can installed it by adding it to the array in the loadPackages function in src/framework/processing/py_worker.js as shown below:

+
// src/framework/processing/py_worker.js
+function loadPackages() {
+  console.log('[ProcessingWorker] loading packages')
+  // These packages are now installed and usable: micropip, numpy, pandas, and lxml
+  return self.pyodide.loadPackage(['micropip', 'numpy', 'pandas', 'lxml'])
+}
+
+
+

You can now import the packages as you would normally do in Python.

+
+
+

Try the donation task from the perspective of the participant

+

If you want to try out the above example, follow the installation instructions and start the server with npm run start.

+
+
+

Tips when writing your own script.py

+

Split the extraction logic from the data donation task logic +You can define your own modules where you create your data extraction, you can import those modules in script.py

+

Develop in separate script +You are better off engineering your extraction logic in different scripts and put them in script.py whenever you are finished developing. Only do small tweaks in script.py

+

Use the console in your browser +In case of errors they will show up in the browser console. You can use print in the Python script and it will show up in the browser console.

+

Keep the diverse nature of DDPs into account +At least check a couple of DDPs to make sure its reflective of the population you are interesed in. Thinks you can check are: data formats (html, json, plain text, csv, etc.), language settings (they somethines lead to json keys being in a different language or file names other than English).

+

Keep your code efficient +If your code is not efficient the extraction will take longer, which can result in a bad experience for the participant. In practice I have found that in most cases it’s not really an issue, and don’t have to pay that much attention to efficiency of your code. +Where efficiency really matters is when you have parse huge html files, beautifulsoup4 is a library that is commonly used to do this, this library is too slow however. As an alternative you can use lxml which is fast enough.

+

Don’t let your code crash +You cannot have your script crash, if your Python script crashes the task stops as well. This is not a good experience for your participant. +For example in the code you do the following: value_i_want_to_extract = extracted_data_in_a_dictionary["interesting key"] if the key "interesting key" does not exists, because it does not occur in the data of the participant, the script crashes and the participant cannot continue the data donation task.

+

Data donation checklist +Creating a good data donation task can be hard due to the variety of DDPs you will encounted. +Check out the following wiki article

+
+
+
+

Limits of the data donation task

+

Currently the data donation task has the following limitations:

+
    +
  • The data donation task is a frontend, you need to package this together with Next to deploy it. If you want to use it with your own backend you have to make the data donation task compatible with it yourself. A tutorial on how to do this might be added in the future.

  • +
  • The data donation task is running in the browser of the participant that brings in limitations, such as constraints on the files participant can submit. The limits are around 2GiB thats what Pyodide can handle. But less is better. So keep that in mind whenever you, for example, want to collect data from YouTube: your participants should exclude their own personal videos from their DDP (including these would result in a huge number of separate DDPs of around 2GiB).

  • +
  • The data donation currently works with text data, nothing keeps us from using other formats in the future (but the constraints on file sizes are still there)

  • +
  • The data donation task should run fine on mobile, however its not optimized for it, you might need to do some tweaking to the UI yourself

  • +
+
+
+ + +
+
+
+
+ + + + + + +
+
+
+ +
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/data-donation-checklist.html b/articles/data-donation-checklist.html new file mode 100644 index 00000000..e4c35c04 --- /dev/null +++ b/articles/data-donation-checklist.html @@ -0,0 +1,220 @@ + + + + + + + + Data donation checklist — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Data donation checklist

+

Writing data donation scripts can be challenging due to the diverse nature of data download packages (DDPs) your participants will try to submit. +If your participants try to submit a DDP that you did not anticipate your extraction might fail, or your script might crash, in that case you will end up with a non-response and a frustrated participant.

+

In order to minimize the number of problems you encounter. We developed a list of points you can pay attention to when developing scripts or performing your own study.

+

Inspect at least 5 DDPs from persons in the population you are going to sample from

+

Because DDPs will be different for different people, you need to inspect a couple of them (preferably from people from your target population) to learn what those differences are. +You need to verify that the extraction you have in mind works for all DDPs you might encounter.

+

DDP formats will change over time

+

DDP formats will change over time. Organization providing you with a DDP are under no obligation to keep the format of their DDP the same. The formats could change during data collection, be mindful of this fact. +Before going live with a study request a fresh package of your own and check whether your extraction still works as expected, and in the worst case scenario be ready to change your script during your data donation study.

+

Validate the DDPs your participant submit and log the results

+

This is crucial to do for two reasons:

+
    +
  1. If there are multiple versions of a DDP, you need to know which version the participant submitted so you can handle it appropriately. As an example consider the Youtube DDP: depending on the language setting files in the DDP are named differently. Another example is for the Instagram DDPs, keys in json files can be different depending on the language.

  2. +
  3. You probably want to give participants an incentive whenever they did a serious attempt of donating their data. In order to know whether they did a serious attempt you need to validate their DDP to see whether they submitted a package you expect. Example: a participant wants to participate in your study, but finds out its way too much work to request and download a DDP. They submit a random zipfile containing garbage, and they claim they completed the process succesfully. The only way for you to verify whether the participant gave it a fair shot is, to check what they submitted and why that did not result in you receiving data from that participant (If you would have received data its easy to verify they participated).

  4. +
+

Write your extraction so it matches the DDP request defaults

+

Often when requesting a DDP participants have a choice, for example you can request a portion of the DDP in html format or json format. The most human readible format (html) is often the default. It will be worth while to tailor your extraction script to the request defaults because participants will not read your instructions where you tell them to get the DDP in json format instead of html. This goes wrong quite often.

+

Our way of dealing with this is to bite the bullet and deal with the default DDP formats. This prevents mistakes and keeps the requests instruction for the participant as simple as possible. +Another way of dealing with it is to provide feedback to the participant whenever you detected they submitted the DDP in a format you did not anticipate.

+

Make sure your code will not crash

+

A crash in your code causes the data donation task to be stuck. The participant will see an error screen with the stacktrace displayed. You don’t want this to happen. Carefull programming can prevent your code from crashing. +A common cause for crashes is trying to access a key value pair in a dict that does not exist or sorting a pd.DataFrame column that does not exist. Most crashes will be caused by your expectation that the extraction is in a certain format, while in some cases it won’t be.

+

Make the least amount of assumptions possible about the data in a DDP

+

The more assumptions you make about the data the more opportunities your code has to fail. Some examples:

+
    +
  • Date parsing: Only parse date when its absolutely required. Date formats can be wildly different between participants, anticipating them all or writing code that can parse all dates you might encounter is less trivial than you might think.

  • +
  • Files in a zip: You can look for file paths you are interested in, or only file names you are interested in. If the file name is unique, there is no need to check for the full file path. Example: if the folder structure in a zip changes but files remain the same, the code that looks only at file names will still work.

  • +
  • Nested dictionaries: Sometimes you are interested in a value in a dict that is heavily nested. An approach you can take, instead of doing dict["key1"]["key2"]["key3"]["key_that_sometimes_is_called_something_different"]["key_which_value_you_want"], you can to first denest or flatten the dictionary start looking directly for “key_which_value_you_want”. You can find an example here, look for dict_denester and find_items.

  • +
+

The researcher is responsible for providing you with DDPs and should be knowledgeable about the data

+

If you are reading this checklist chances are you are going to create a data donation task. It could be the case that you are not the principal investigator of the project but just an engineer or person with some coding experience helping the researcher out. Some researchers expect you to be the one to have knowledge about a certain DDP they are interested in. Some researchers believe that because you are working with data, you also have that data available to you, know what it all means or whether data is present in a DDP. This is of course not always the case. Communicate clearly to the researcher that they responsible for the contents of their study, they should know what the data means and that they should tell you what to extract. In some cases the researcher might not even use the platform they are interested in, if that is the case, tell the researcher to start using the platform they are interested in so they can start instructing you on what to extract.

+

Test a study carefully before you go live

+

All researchers involved in the research group should test the study before you go live. A data donation study has more points of failure compared to traditional survey research, therefore its crucial that every researcher that is involved will test the complete data donation flow and shares their findings with you.

+
+ + +
+
+
+
+ + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/deployment.html b/articles/deployment.html new file mode 100644 index 00000000..616227cf --- /dev/null +++ b/articles/deployment.html @@ -0,0 +1,301 @@ + + + + + + + + Deployment of the data donation task — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Deployment of the data donation task

+

This article will discuss the option you have when using the data donation task in a data donation study. +The data donation task is designed to be used with Next.

+
+

The data donation task with Next

+

Next is a software as a service platform developed by Eyra. +As a researcher you can log in to Next and configure data donation study, this means:

+
    +
  1. Configuring a landing zone for your participants: I.e. a Consent form page, an information page, a privacy policy

  2. +
  3. Configure a task list for your participants to complete: After the landing zone participants see a list of task they have to complete, typically these tasks are: viewing instruction on how to request and download data from a specific platform and administering the data donation task that you developed using this repository

  4. +
  5. Configuring where the donated data should be stored. Next has solutions for: AWS, Azure and Yoda.

  6. +
+

After configuration participants can be sent to Next with a unique id in the url. This unique key id be used when storing the data, so you know who donated their data

+
+

Next as a paid service

+

You can use Next as a paid service provided by Eyra. +Please contact Eyra if this is something you are interested in.

+
+
+

Self service Next (community version) on Surf Research Cloud

+

Next is available as an offering on Surf Research Cloud available for Researchers at Dutch universities and universities of applied sciences. +This offering on Surf Research Cloud comes with no service or warranties.

+
+

Applying for an EINFRA grant

+

In order to use Surf Research Cloud you need credits.

+

Dutch researchers can get credits on Surf Research Cloud by applying for an EINFRA grant. You can apply for an EINFRA grant here, then:

+
    +
  1. Click “Straight to the request portal”.

  2. +
  3. Under “Apply for access” click “Small Compute applications (NWO)”

  4. +
  5. Fill in and submit the form (see the instructions below)

  6. +
+
+
+

Instructions to fill in the EINFRA grant form

+

Most fields in the form are self explanatory or optional. Here we explain the fields that aren’t self explanatory:

+

Description

+

Put here a small description of what you intent to do. Explain that you want to do a data donation study.

+

Scientific project descrition

+

Put down the description of your research project, you could copy and paste this from a grant proposal.

+

Technical project requirements

+

In this section you need to explain what resources you need. Based on the resources you need you will receive the appropriate amount of credits. +This is an example descrition of the technical project requirements for data donation:

+
We want to do a data donation study using the "Next for data donation" catalog item. This catalog item provisions a workspace running software that we can use to configure a data donation study.
+This workspace needs to be available for the duration of our study. The workspaces uses 8 GiB of Memory and uses 2 cores. The workspace needs to be available for <number of weeks you need the server> weeks.
+Therefore we need: <number of weeks> * 7 (days) * 24 (hours) * 2 (cores) * 1.1 (10 percent extra) = X core/hours. We would need 50 GiB  of storage. From SURF we do not request assistance with the deployment.
+
+
+

You need to adapt it to your situation. You should realize that if the workspace is provisioned (meaning its “on” or “running”) credits will be deducted. Try to be realistic for the amounts of weeks you need, but take into account unforseen events.

+

Resources

+

Research Cloud - HPC Cloud

+

Research Drive: Do you need storage in Research Drive?

+

50 GiB

+
+
+

After you received the EINFRA grant

+

You need to contact datadonation.eu they will make the “Next self service” catalog item available to you.

+
+
+
+

Self service Next (community version)

+

Next is a free and open source tool and you could host it yourself. You can find Next here. You can try it out using Docker, check the tutorial Try out Next with Docker

+
+
+

Which option should I choose?

+
    +
  • Next as a paid service: If you have research budget; want to be unburdened and get your data donation study done, this is the best option.

  • +
  • Self service community Next on Surf Research Cloud: You are a researcher at a Dutch university with no budget this is the best option. When choosing this option you have to realize that it comes with no service or warranties, you have to know what you are doing.

  • +
  • Self service community Next: If you want to provide Next as a service to your organization.

  • +
+
+
+

Add data donation task to your data donation study on Next

+

After you have created your data donation task with this repository, you can use this task directly in Next. You can do this as follows:

+
    +
  1. In the data donation task run the command npm run release, this creates a zip file named release.zip

  2. +
  3. In Next when configuring your data donation study, go to work flow and create a new item task list item called data donation task

  4. +
  5. In the newly created task list item select the release.zip you have just created

  6. +
+

Your data donation task list item is configured!

+
+
+
+

Use the data donation task without Next

+

The data donation task can be adapted so it works with your own bespoke back end. A tutorial on how to do this is might be added in the future.

+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/index.html b/articles/index.html new file mode 100644 index 00000000..b73beb20 --- /dev/null +++ b/articles/index.html @@ -0,0 +1,224 @@ + + + + + + + + Articles — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/installation.html b/articles/installation.html new file mode 100644 index 00000000..12d25a9f --- /dev/null +++ b/articles/installation.html @@ -0,0 +1,300 @@ + + + + + + + + Installation — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Installation

+

This guide covers the installation of the data donation task locally, so you can start creating your own data donation study!

+
+

Installation Guide for the Pre-requisites

+

You need to install the following software:

+
    +
  • Python: Make sure it is at least version 3.10

  • +
  • Node.js: Make sure it is at least version 16

  • +
  • Poetry: It is a build system for Python packages that the data donation task uses.

  • +
+

Below you can find more detailed instructions on how to install the required software depending on your operating system. +These instructions are just suggestions, always prefer the official instructions that suite your situation best.

+
+

Linux

+

You can install Python and Node.js from the official repositories of your distribution. Here are the general steps:

+
    +
  1. Open your terminal

  2. +
  3. Use your package manager to install Python and Node.js

  4. +
  5. Install Poetry using pipx, see the instruction manual

  6. +
+
+
+

Mac OSX

+

If you are using a Mac OSX, you can install Python and Node.js using the HomeBrew package manager. Follow these steps:

+
    +
  1. Open your terminal

  2. +
  3. Install HomeBrew following instructions if you haven’t already

  4. +
  5. Install Python and Node.js by runnning: brew install python node

  6. +
  7. Install Poetry using pipx, see the instruction manual

  8. +
+
+
+

Windows

+

In order to develop on Windows we recommend using Windows Subsystem for Linux (WSL) in combination with VSCode. +Windows subsystem for Linux is a convenient way of running Linux on Windows. +This section will contain a bit more context because the steps might be less familiar to Windows only users.

+

If you are already familiar with WSL/Linux, VSCode or both, the installation won’t give you too much trouble. +If you are completely new to WSL (or Linux) expect a certain amount of problem solving you have to do. +Key topics to understand are: WSL, and the Ubuntu basics; knowledge on these topics will help you a lot.

+
    +
  1. Install WSL, see the official installation instructions

  2. +
  3. Install the default Linux distro (Ubuntu 22.04 at the time of writing) and choose a username and password

  4. +
  5. Download and install VSCode

  6. +
  7. Connect VSCode to WSL, see instructions

  8. +
  9. Now you can follow the instructions for Linux, Note that Python will be already installed for you

  10. +
+

In theory these steps should cause no problems but in reality you have a couple of issues you could run into. I will discuss some of them I encountered here:

+
    +
  • You have the be an administrator of your own device. If you are not an administrator you cannot continue the installation

  • +
  • In order to install WSL, kernel virtualization needs to be on. You can go into the Windows Task Manager and check whether it is on. If its not on, you have to turn it on in the bios of your motherboard. Check what CPU you have (AMD or Intel) and check what the settings is called. If the setting is not present in the bios your CPU might not support virtualization, this means you cannot run WSL

  • +
  • If you have WSL 1 installed make sure you continue with WSL 2

  • +
  • Make sure you don’t forget the username and password you chose during the installation

  • +
  • If you have VSCode open make sure you are connected to WSL, you can check this by looking at the “><” icon in the lower left corner of VSCode

  • +
  • Remember that if you are connected to WSL with VSCode you are working in Ubuntu. Programs and files are not shared between Windows and Ubuntu, meaning if you have installed a program on Windows is not available for Ubuntu and vice versa.

  • +
  • Remember to not use Powershell when connected to WSL use bash

  • +
  • If you see error messages related to Windows in the terminal (something with cmd.exe for example), you know that Ubuntu is trying to open a program on Windows. This will never work. This is happening because Windows manipulates the PATH variable on Ubuntu that contains information about where the programs Ubuntu can open are. Example: you want to check which version of node you have node -v and you get an error with cmd.exe in the error message. Solutions: uninstall the windows version of the Node.js or manipulate the PATH variable so it does not try to open the Windows version of Nodejs. How to do that is outside the scope of this manual.

  • +
  • To run port you need version Nodejs version 18 this version is not in the official Ubuntu 22.04 repositories. See for example this guide on how to get nodejs version 18. If you run into errors you are expected to search for them and to solve them

  • +
+
+

Don’t want to use WSL?

+

That’s completely fine too, you can change the commands in package.json so they work on Windows instead.

+
+
+
+
+

Installation of the data donation task

+

If you have the Pre-requisites installed the installation of the data donation task should be straightforward.

+
    +
  1. Clone the repository:

  2. +
+
git clone https://github.com/d3i-infra/data-donation-task.git
+
+
+
    +
  1. Install the dependencies by running the following commands:

  2. +
+
cd ./data-donation-task
+npm install
+
+
+
    +
  1. Start a local web server to server the data donation app:

  2. +
+
npm run start
+
+
+

You can now go to the browser: http://localhost:3000 and you should be greeted by a mock data donation task

+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/introduction-to-data-donation.html b/articles/introduction-to-data-donation.html new file mode 100644 index 00000000..3ac9c3a7 --- /dev/null +++ b/articles/introduction-to-data-donation.html @@ -0,0 +1,189 @@ + + + + + + + + Introduction to Data Donation — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Introduction to Data Donation

+

We have produced 2 videos detailing the concept of data donation, accessible on our website at datadonation.eu/data-donation.

+

Additionally, our website provides guidance on how to set up a data donation study; simply refer to the “Prepare a study” tab.

+
+ + +
+
+
+
+ + +
+
+
+
+
+ + + <Articles + +
+ +
+ + Installation> + +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/next-in-docker.html b/articles/next-in-docker.html new file mode 100644 index 00000000..9eadaf47 --- /dev/null +++ b/articles/next-in-docker.html @@ -0,0 +1,386 @@ + + + + + + + + Try out Next with Docker — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Try out Next with Docker

+

This tutorial outlines how you can run Next in a docker container.

+

This is great for trying out the Next platform and will show you the necessary settings so you could use it in production.

+
+

Prerequisites

+

In order for you to try out Next you need to set up some prerequisites.

+
+

Unsplash

+

Configure a developer account at unsplash and get an API key. You can do this for free.

+

Unsplash is used as the source for banner images used to customize studies.

+
+
+

Google OIDC

+

Configure a google OIDC connect application in the google cloud console. For the details check the official instructions.

+

Google OIDC (OpenID Connect) is used to manage user authentication and account sign-ins.

+
+
+
+

Run Next in a Docker container

+

In this step, we will create and run the necessary containers using Docker Compose.

+

We are going to create a folder with the following structure:

+
.
+├── docker-compose.yaml
+├── proxy
+│   ├── certs
+│   │   ├── nginx-selfsigned.crt
+│   │   └── nginx-selfsigned.key
+│   └── conf
+│       └── nginx.conf
+
+
+

In the next step we are going to create the files.

+
+

Build the Next Docker image

+

Clone or fork Next

+

cd into /core

+

and build the image with:

+
docker build  --build-arg VERSION=1.0.0 --build-arg BUNDLE=self . -t self-d3i:latest
+
+
+
+
+

Setup certificates for TLS

+

Create certificates and put them in proxy/certs

+
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx-selfsigned.key -out nginx-selfsigned.crt
+
+
+
+
+

Nginx configuration

+

We are going to use Nginx as reverse proxy.

+

Nginx will be used to provide TLS for our HTTP connections.

+

Paste the following nginx configuration in proxy/conf:

+
# nginx.conf
+events {}
+http {
+    server {
+        listen 80;
+        listen [::]:80;
+        server_name localhost;
+        
+        # Redirect all HTTP requests to HTTPS
+        return 301 https://$server_name$request_uri;
+    }
+
+    server {
+        server_name localhost;
+        
+        if ($scheme != "https") {
+            return 301 https://$host$request_uri;
+        }
+        
+        location / {
+          allow all;
+          proxy_pass                http://app:8000;
+          proxy_set_header          X-Forwarded-Proto $scheme;
+          proxy_set_header          X-Forwarded-For $remote_addr;
+          proxy_set_header          X-Real-IP $remote_addr;
+          proxy_set_header          Host $http_host;
+          proxy_http_version        1.1;
+          proxy_set_header          Upgrade $http_upgrade;
+          proxy_set_header          Connection "upgrade";
+          proxy_max_temp_file_size  1m;
+        }
+        
+        listen 443 ssl;
+        ssl_certificate /etc/nginx/certs/nginx-selfsigned.crt;
+        ssl_certificate_key /etc/nginx/certs/nginx-selfsigned.key;
+    }
+}
+
+
+

This Nginx configuration works with websocket connections which Next (Phoenix web application) uses.

+
+
+

Docker compose yaml

+

Now create the docker-compose.yaml:

+
#docker-compose.yaml
+services:
+  app:
+    image: self-d3i:latest
+    container_name: self-d3i
+    restart: always
+    environment:
+      APP_NAME: next
+      APP_DOMAIN: localhost
+      APP_MAIL_DOMAIN: "@gmail"
+      APP_ADMINS: youremail@gmail.com
+      DB_USER: user
+      DB_PASS: password
+      DB_HOST: db
+      DB_NAME: test_database
+      SECRET_KEY_BASE: "aUMZobj7oJn58XIlMGVcwTYrCsAllwDCGlwDCGlwDCGwDChdhsjahdghaggdgdGt7MoQYJtJbA="
+      STATIC_PATH: "/tmp"
+      UNSPLASH_ACCESS_KEY: "<your-unsplash-api-key>"
+      UNSPLASH_APP_NAME: "<your-unsplash-app-name>"
+      GOOGLE_SIGN_IN_CLIENT_ID: "<your-google-oidc-client-id>"
+      GOOGLE_SIGN_IN_CLIENT_SECRET: "<your-google-oidc-client-secret>"
+      STORAGE_SERVICES: "builtin, yoda, azure"
+    volumes:
+      - app_data:/tmp
+    depends_on:
+      - db
+
+  db:
+    image: postgres:latest
+    container_name: db-next
+    restart: always
+    environment:
+      POSTGRES_USER: user
+      POSTGRES_PASSWORD: password
+      POSTGRES_DB: test_database
+    volumes:
+      - postgres_data:/var/lib/postgresql/data
+
+  proxy:
+    image: nginx:latest
+    container_name: nginx
+    ports:
+      - 443:443
+    volumes:
+      - ./proxy/conf/nginx.conf:/etc/nginx/nginx.conf
+      - ./proxy/certs:/etc/nginx/certs
+    depends_on:
+      - app
+
+volumes:
+  postgres_data:
+  app_data:
+
+
+

and replace the following variables with the values you obtained in the previous steps:

+
UNSPLASH_ACCESS_KEY: "<your-unsplash-api-key>"
+UNSPLASH_APP_NAME: "<your-unsplash-app-name>"
+GOOGLE_SIGN_IN_CLIENT_ID: "<your-google-oidc-client-id>"
+GOOGLE_SIGN_IN_CLIENT_SECRET: "<your-google-oidc-client-secret>"
+
+
+

If you want to learn more about the variables you can read the documentation.

+

Now you are ready to start the containers with:

+
docker compose up
+
+
+

Go to https://localhost:80 and if everything went well you should see Next.

+

Note: because you self-signed your TLS certificates your browser will complain: accept all the risks and continue.

+
+
+
+

Next steps in Next

+

Now you can play around in Next. If you want to login as admin go to /admin/login.

+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/articles/visualizations.html b/articles/visualizations.html new file mode 100644 index 00000000..e3fc260e --- /dev/null +++ b/articles/visualizations.html @@ -0,0 +1,419 @@ + + + + + + + + Adding data visualizations — Port 1.0.0 documentation + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Adding data visualizations

+

You can add data visualizations to the consent form page, that will be shown below a data table. These visualizations will dynamically aggregate and visualize the data, responding to search queries and deleted items.

+

Good visualizations can help participants to see and explore what data they are about to donate, and thereby support informed consent. Furthermore, it can make the data donation process more educational and enjoyable.

+
+

Adding visualizations to tables

+

Visualizations are always directly connected to a consent form table. When in script.py you create a consent form table, you can implement visualizations as follows:

+
table_title = props.Translatable({
+    "en": "Table title",
+    "nl": "Tabel titel"
+})
+
+table = props.PropsUIPromptConsentFormTable(
+    id = "tableId",
+    title = table_title,
+    data_frame = df,
+    visualizations = [])
+
+
+

You can now add one or multiple visualization specifications to the visualizations list.

+
+
+

Visualization Specification

+

A visualization specification provides instructions for creating a visualization based on the data in the table. This visualization will then be created dynamically, so that when the table is updated (e.g., when participants search the data or remove rows) the visualization is updated as well.

+

A specification covers three main components:

+
    +
  • Aggregation: How should the table data be aggregated. e.g., count the number of rows per day

  • +
  • Display: How should the aggregated data be displayed? e.g., line chart, bar chart, wordcloud

  • +
  • Labels: Any labels to help along interpretation, optionally with translations (as seen above in the table_title)

  • +
+

A detailed explanation of the visualizatoin specification is shown below in the Specification Guide. But we recommend first having a look at the following examples.

+
+
+

Examples

+

Say we have data about every time a participant viewed a certain channel, and we also also know the channel category (e.g., sports, entertainment) and the exact timestampe. We have put this in a data_frame with the columns: channel, category and timestamp. We can then make a number of different visualizations.

+
+

Categorical variables | Bar chart of views per category

+
vis1 = dict(
+    title = dict(en= "views per category", ...),
+    type = "bar",
+    group = dict(column = "category", label = "Category")
+    values = [dict(aggregate = "count", label = dict(en = "number of views", ...))]
+)
+
+
+

The type determines the chart type, and can in this case be “bar”,”line” or “area”. The group determines how the data should be grouped and aggregated, which in this case is per category. The values determines the values to calculate per group, which here is just the count of the rows.

+

!!! Notice that values is a list, and not a single dictionary. Adding multiple value dictionaries will create multiple y-values, for grouped barcharts or multiple lines or areas.

+

The label’s can be either a single string (as in the group) or a dictionary with different languages, where keys are country codes, and values are labels (as in the values).

+
+
+

Date variables | Area chart of views per month

+
vis2 = dict(
+    title = dict(en= "views over time", ...),
+    type = "area",
+    group = dict(column = "timestamp", dateFormat = "month", label = "Month")
+    values = [dict(aggregate = "count", label = dict(en = "number of views", ...))]
+)
+
+
+

In this area chart (i.e. a line chart where the area below the line is coloured) we group the data by month, and use the same aggregation values as in the previous example to count the number of views per group.

+

The dateFormat grouping variable can be set if the column is a date string in ISO format: YYYY-MM-DD for date or YYYY-MM-DD HH:MM:SS for datetime (You can also use YYYY-MM-DDTHH:SS:MM), but that doesn’t look niced in the table).

+

The following formats are supported:

+
    +
  • Fixed interval: “year”, “quarter”, “month”, “day”, “hour”

  • +
  • Automatic interval: “auto” will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with “hour” interval)

  • +
  • cycles / season: “month_cycle” (January - December), “weekday_cycle” (Monday - Sunday) and “hour_cycle” (1 - 24).

  • +
+
+
+

Second-level aggregation | Line chart of views over time per category

+

Above we mentioned that you can add multiple values to create multiple y-values. But this only works if your data is wide. Alternatively, you can also perform a second-level aggregation on long data.

+
vis3 = dict(
+    title = dict(en= "views per category over time", ...),
+    type = "line",
+    group = dict(column = "timestamp", dateFormat = "auto", label = "Month")
+    values = [dict(
+        aggregate = "count",
+        label = dict(en = "number of views", ...),
+        group_by = "category"
+    )]
+)
+
+
+

Here we changed three things. First, we changed the type to “line”, because that’s a bit easier on the eye with multiple y-values. Second, we added group_by to the aggregation value, setting it to “category”. This will break the values data into groups for categories, and calculate the aggregation statistic per category. This will be visualized as a line chart where the frequency of each category (e.g., sport, entertainment) will be displayed on separate lines.

+

A third change is that we set the dateFormat to “auto” instead of fixing it to “month”. This will automatically pick a suitable time interval based on the range of column (last date - first date). This could mean that different participants see different intervals, depending on what works best for their own data.

+
+
+

Text variables | A wordcloud

+

As a final example, we’ll look at a different sub-specification for visualizing textual data. We’ll make a wordcloud of channels, based on their frequency in the data.

+
vis4 = dict(
+    title = dict(en= "Most viewed channels", ...),
+    type = "wordcloud",
+    textColumn = 'channel',
+    tokenize = False,
+)
+
+
+

This creates a wordcloud of the full channel names. Note that we could also have tokenized the texts, but for channels (e.g., YouTube channels) the full names are probably most informative.

+
+
+
+

Example wrap-up

+

Now that we have created visualizations, we can add them to the consent form table. Note that above we assigned our specifications to vis1 to vis4. We can now simply add them to the visualiations list.

+
table = props.PropsUIPromptConsentFormTable(
+    id = "tableId",
+    title = table_title,
+    data_frame = df,
+    visualizations = [vis1, vis2, vis3, vis4])
+
+
+
+
+

Specification guide

+

This is an overview of the visualiation specification. First, there are some general visualization arguments that every visualization has. Second, there are specific arguments depending on the visualization type

+
+

General visualization arguments

+

Every visualization has the following arguments

+
    +
  • title: A title for the visualization. This has to be a translation dictionary (see translation spec below)

  • +
  • type: The type of the visualization. The type determines what specification you need to follow

    +
      +
    • Chart visualiation: “line”, “bar” or “area”

    • +
    • Text visualization: “wordcloud”

    • +
    +
  • +
  • height (optional): The height of the chart in pixels

  • +
+
+
+

Chart visualization arguments

+

Chart visualizations work by aggregating the data into X, Y and optionally Z axes. It’s the basis for most common charts.

+
    +
  • type: “line”, “bar” or “area”

  • +
  • group: specifies the column to group and aggregate the data by. The group is visualized on the x-axis.

    +
      +
    • label: x-axis label. Either a string or translation dictionary (see translation spec below)

    • +
    • column: the name of the column

    • +
    • dateFormat (optional): if column is a date, select how it should be grouped. (see dateFormat spec below)

    • +
    • levels (optional). A list of strings with the specific column values to use. This also makes sure these values are displayed if they are missing in a participants data (also see values -> addZeroes)

    • +
    +
  • +
  • values: A list (!!) of objects. Each object specifies an (aggregate) value to calculate per group. A value is visualized on the y-axis. Multiple values can be given for multiple y-values

    +
      +
    • label: y-axis label. Either a string or translation dictionary (see translation spec below)

    • +
    • column (optional): the column based on which the value is calculated. Can be empty if just counting rows.

    • +
    • aggregate: The aggregation function. (see aggregate spec below)

    • +
    • addZeroes: Boolean. If true, add zeroes for empty groups. If levels are specified, participants will explicitly see that they occured zero times in their data. If dateFormat is used, this fills possible gaps (note that this mostly makes sense for row “count” aggregations where absense implies zero)

    • +
    • group_by (optional): the name of a column to do a second-level aggregation. This will create multiple y-values where the value in the column becomes the label.

    • +
    +
  • +
+
+
+

Text visualization arguments

+

Text visualizations take a text column as input.

+
    +
  • type: “wordcloud”

  • +
  • textColumn: A text (string) column in the data

  • +
  • tokenize (optional): Boolean. If true, the text will be tokenized

  • +
  • valueColumn (optional): By default, every text or token will be given a value based on the number of rows in which it occurs. Alternatively, you can specify a numeric column, in which case (the sum of) the values in this column will be used.

  • +
  • extract (optional): Normally, all preprocessing of the data should be handled in the import scripts, but for convenience we will provide some common methods for extracting parts of a string. Currently supports:

    +
      +
    • “url_domain”: If the column contains URLs, extract only the domain.

    • +
    +
  • +
+
+
+

Spec details

+

Here are some details for the more complicated spec components.

+
+

- translation

+

A translation dictionary has country codes as keys and the translations as values: dict(en = "english label", nl = "dutch label"). (This is identical to the dictionary used in the props.Translatable)

+
+
+

- dateFormat

+

If column is a date (YYYY-MM-DD, YYYY-MM-DD HH:MM or YYYY-MM-DD HH:MM:SS), select how the date is grouped. options are:

+
    +
  • Fixed interval: “year”, “quarter”, “month”, “day”, “hour”

  • +
  • Automatic interval: “auto” will pick an interval based on the min/max date. Pick this if the min/max date can vary heavily between participants. This also avoids slowing down the application by accidentally generating a huge graph (e.g., a one year period with “hour” interval)

  • +
  • cycles / season: “month_cycle” (January - December), “weekday_cycle” (Monday - Sunday) and “hour_cycle” (1 - 24).

  • +
+
+
+

- aggregate

+

The function by which to aggregate the column in values. The following functions are currently supported

+
    +
  • “count” just counts the rows

  • +
  • “mean” and “sum” require the value column to be numeric.

  • +
  • “count_pct” gives the count as a percentage of the total number of rows.*

  • +
  • “pct” sums the values of a numeric column and divides by the total sum.*

  • +
+

* If a secondary aggregation is used, percentages are calculated within the primary aggregation group

+
+
+
+
+ + +
+
+
+
+ + + + + + +
+
+ + + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..4c9923bf --- /dev/null +++ b/genindex.html @@ -0,0 +1,609 @@ + + + + + + + Index — Port 1.0.0 documentation + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ + +

Index

+ +
+ C + | D + | E + | F + | G + | H + | I + | J + | L + | M + | O + | P + | Q + | R + | S + | T + | V + +
+

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + +
+ +

I

+ + + +
+ +

J

+ + +
+ +

L

+ + +
+ +

M

+ + +
+ +

O

+ + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

V

+ + + +
+ + + +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..2d19fb71 --- /dev/null +++ b/index.html @@ -0,0 +1,249 @@ + + + + + + + + The Data Donation Task Documentation — Port 1.0.0 documentation + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

The Data Donation Task Documentation

+

Welcome to the Data Donation Task Documentation!

+

This is the place to learn about the data donation task.

+
+

Getting started

+

Checkout the following wiki articles to get started:

+ +
+
+

API Reference

+

You can find the API documentation here:

+ +
+
+

Standard scripts

+

We provide standard extraction scripts for a various platforms which you can find here:

+ +
+
+
+

Indices and tables

+ +
+ + +
+
+
+
+ + + + + + +
+
+
+
+
+ +
+ +
+ + Articles> + +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..f1fdf3338afe8070014f86cd89daa984c01983ed GIT binary patch literal 1416 zcmV;31$X)*AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkVZ*p`B zBOq2~a&u{KZaN?eBOp|0Wgv28ZDDC{WMy(7Z)PBLXlZjGW@&6?AZc?TV{dJ6a%FRK zWn>_Ab7^j8AbM0bBN=j^`bz3$fCO?&8thhb#V zNI(H4(SG_4LVpuGu?4xvwqSk(Gs7^*(#p7;YLRQBw9Rz;u~xjPAp0f5yVt&@banMp zxV!l|+g#~|NWSyezivM(<-m9VtEjcvho$^mg1J*Sg1K%0;7Y~M2mA(m z0dAC}PAIuT|6DvTM*C6cjMz60R+7rm9}eG-g=Czl2kZ( z^}hye($NZ@423SG#L;~PHW@QDE?xZP&QNJ9@04c~Pl--Qz4NFPtEL0xoZ_SlLu*Lo zot_I7;KWtZMLD38ul4{gRK_|5;RUD|O>m zNBl@g7B>?S_fwEI-6W%3F_OMCl@mH5QM@3fH{VE3ZN?ECYfii#3|PC`iUS~-@kU^c z7c6+wz%&?!D>xZ1*6x4y<&mVqtPkM@C7B17)S-~G37N6h`$oA?aY=JRB(vKLDIC-` z6)b*3oWoX|esJNCd$y$#Y)$MQ2j#5$SZlQt(ACAs30~x}<^(mhQ?@0r`@MQf=9~fe zE>0TZiJdia-^FPoJ>GeLXpj-E^5XHf>nMpV)v;FCCFCj0otIc+6k1_}N%nzO&BaOf zu0Q@>dSIQ)t+CS}KWxjd>n)+e^2hoj)KKPyNPp}6=i{dtxi3n;Dm)xDlHbaIg#KiV z>Ymra6N9j=UOu#(qfrP4i4hf^{uYg7Yhj=jD~VG?SQX6*w@88WCI#-VjsfJxH$XRuvH(p|-$fM&p%HYM&sz$59N#>PSoNDhYJmFWIR9|gJ?g4KfH zy~{6)n?W+ax!G;;^Po(7{uVx$_WQ1DHLQ^SoytSg&-p^p?~c00ZWUi6{CEH5%%l73 z@;T?4uwX)g$+c4IzR~BEaBq+g;Bb%f6D161NW3RF3fv4jOZz2haatA}} zHLQM^*qwjmie;PS$g^K}x7jy97lUNb_3k*&`%m!a62=KufxTw97h{oh*tDuK8}%qR zK4orr|Kh>MQG36jULqJYZ~LB^@0nrGZ0MBvPSaSH0On7;mB4NGnEDfagT@ zGfh}6sJ6yHJ`Nw7d*0Mt6`3m`;|mSTX}t8rqNR67e{U{^u~CI%)(PpULx9}Q?#w~X zU?j2N2DS9d3GyovgQ}@Z=2S58@OsLmTVgS_5f}@K-D916OxdzapxV-pRJ?=0V7PiRl z{EEThH$Gm1d2nGLQKj3>&=6Q(LXrqdXRU9D?OM#baw% + + + + + + Python Module Index — Port 1.0.0 documentation + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ p +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ p
+ port +
    + port.api.props +
    + port.helpers.extraction_helpers +
    + port.helpers.port_helpers +
    + port.helpers.validate +
    + port.platforms.chatgpt +
    + port.platforms.instagram +
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..cbae4290 --- /dev/null +++ b/search.html @@ -0,0 +1,182 @@ + + + + + + + Search — Port 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..cf9426ca --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"- aggregate": [[9, "aggregate"]], "- dateFormat": [[9, "dateformat"]], "- translation": [[9, "translation"]], "API Reference": [[0, null], [1, null], [10, "api-reference"]], "Add data donation task to your data donation study on Next": [[4, "add-data-donation-task-to-your-data-donation-study-on-next"]], "Adding data visualizations": [[9, null]], "Adding visualizations to tables": [[9, "adding-visualizations-to-tables"]], "After you received the EINFRA grant": [[4, "after-you-received-the-einfra-grant"]], "Applying for an EINFRA grant": [[4, "applying-for-an-einfra-grant"]], "Articles": [[5, null]], "Available platforms": [[11, "module-port.platforms.chatgpt"]], "Build the Next Docker image": [[8, "build-the-next-docker-image"]], "Categorical variables | Bar chart of views per category": [[9, "categorical-variables-bar-chart-of-views-per-category"]], "Chart visualization arguments": [[9, "chart-visualization-arguments"]], "Creating your own donation task": [[2, null]], "Data donation checklist": [[3, null]], "Date variables | Area chart of views per month": [[9, "date-variables-area-chart-of-views-per-month"]], "Deployment of the data donation task": [[4, null]], "Docker compose yaml": [[8, "docker-compose-yaml"]], "Don\u2019t want to use WSL?": [[6, "don-t-want-to-use-wsl"]], "Example wrap-up": [[9, "example-wrap-up"]], "Examples": [[9, "examples"]], "Extraction helpers": [[0, "module-port.helpers.extraction_helpers"]], "General visualization arguments": [[9, "general-visualization-arguments"]], "Getting started": [[10, "getting-started"]], "Google OIDC": [[8, "google-oidc"]], "How does the data donation task work?": [[2, "how-does-the-data-donation-task-work"]], "Indices and tables": [[10, "indices-and-tables"]], "Instagram": [[11, "module-port.platforms.instagram"]], "Install Python packages": [[2, "install-python-packages"]], "Installation": [[6, null]], "Installation Guide for the Pre-requisites": [[6, "installation-guide-for-the-pre-requisites"]], "Installation of the data donation task": [[6, "installation-of-the-data-donation-task"]], "Instructions to fill in the EINFRA grant form": [[4, "instructions-to-fill-in-the-einfra-grant-form"]], "Introduction to Data Donation": [[7, null]], "Limits of the data donation task": [[2, "limits-of-the-data-donation-task"]], "Linux": [[6, "linux"]], "Mac OSX": [[6, "mac-osx"]], "Next as a paid service": [[4, "next-as-a-paid-service"]], "Next steps in Next": [[8, "next-steps-in-next"]], "Nginx configuration": [[8, "nginx-configuration"]], "Platform Documentation": [[11, null]], "Port helpers": [[0, "module-port.helpers.port_helpers"]], "Prerequisites": [[8, "prerequisites"]], "Props": [[0, "module-port.api.props"]], "Run Next in a Docker container": [[8, "run-next-in-a-docker-container"]], "Second-level aggregation | Line chart of views over time per category": [[9, "second-level-aggregation-line-chart-of-views-over-time-per-category"]], "Self service Next (community version)": [[4, "self-service-next-community-version"]], "Self service Next (community version) on Surf Research Cloud": [[4, "self-service-next-community-version-on-surf-research-cloud"]], "Setup certificates for TLS": [[8, "setup-certificates-for-tls"]], "Spec details": [[9, "spec-details"]], "Specification guide": [[9, "specification-guide"]], "Standard scripts": [[10, "standard-scripts"]], "Start writing your first data donation task script": [[2, "start-writing-your-first-data-donation-task-script"]], "Start writing your own script.py using the api": [[2, "start-writing-your-own-script-py-using-the-api"]], "Text variables | A wordcloud": [[9, "text-variables-a-wordcloud"]], "Text visualization arguments": [[9, "text-visualization-arguments"]], "The Data Donation Task Documentation": [[10, null]], "The data donation task with Next": [[4, "the-data-donation-task-with-next"]], "The usage of yield in script.py": [[2, "the-usage-of-yield-in-script-py"]], "Tips when writing your own script.py": [[2, "tips-when-writing-your-own-script-py"]], "Try out Next with Docker": [[8, null]], "Try the donation task from the perspective of the participant": [[2, "try-the-donation-task-from-the-perspective-of-the-participant"]], "Unsplash": [[8, "unsplash"]], "Use the data donation task without Next": [[4, "use-the-data-donation-task-without-next"]], "Using the data donation task in a data donation study": [[2, "using-the-data-donation-task-in-a-data-donation-study"]], "Validation": [[0, "module-port.helpers.validate"]], "Visualization Specification": [[9, "visualization-specification"]], "Which option should I choose?": [[4, "which-option-should-i-choose"]], "Windows": [[6, "windows"]], "script.py": [[2, "script-py"]]}, "docnames": ["api/api", "api/index", "articles/creating-your-own-data-donation-task", "articles/data-donation-checklist", "articles/deployment", "articles/index", "articles/installation", "articles/introduction-to-data-donation", "articles/next-in-docker", "articles/visualizations", "index", "standard_scripts/index"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["api/api.md", "api/index.rst", "articles/creating-your-own-data-donation-task.md", "articles/data-donation-checklist.md", "articles/deployment.md", "articles/index.rst", "articles/installation.md", "articles/introduction-to-data-donation.md", "articles/next-in-docker.md", "articles/visualizations.md", "index.rst", "standard_scripts/index.rst"], "indexentries": {"cancel (port.api.props.propsuipromptconfirm attribute)": [[0, "port.api.props.PropsUIPromptConfirm.cancel", false]], "choices (port.api.props.propsuiquestionmultiplechoice attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.choices", false]], "choices (port.api.props.propsuiquestionmultiplechoicecheckbox attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.choices", false]], "data_frame (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.data_frame", false]], "ddp_categories_lookup (port.helpers.validate.validateinput attribute)": [[0, "port.helpers.validate.ValidateInput.ddp_categories_lookup", false]], "ddpcategory (class in port.helpers.validate)": [[0, "port.helpers.validate.DDPCategory", false]], "ddpfiletype (class in port.helpers.validate)": [[0, "port.helpers.validate.DDPFiletype", false]], "delete_option (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.delete_option", false]], "description (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.description", false]], "description (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.description", false]], "description (port.api.props.propsuipromptfileinput attribute)": [[0, "port.api.props.PropsUIPromptFileInput.description", false]], "description (port.api.props.propsuipromptfileinputmultiple attribute)": [[0, "port.api.props.PropsUIPromptFileInputMultiple.description", false]], "description (port.api.props.propsuipromptprogress attribute)": [[0, "port.api.props.PropsUIPromptProgress.description", false]], "description (port.api.props.propsuipromptquestionnaire attribute)": [[0, "port.api.props.PropsUIPromptQuestionnaire.description", false]], "description (port.api.props.propsuipromptradioinput attribute)": [[0, "port.api.props.PropsUIPromptRadioInput.description", false]], "dict_denester() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.dict_denester", false]], "donate() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.donate", false]], "donate_button (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.donate_button", false]], "donate_question (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.donate_question", false]], "epoch_to_iso() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.epoch_to_iso", false]], "exit() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.exit", false]], "extensions (port.api.props.propsuipromptfileinput attribute)": [[0, "port.api.props.PropsUIPromptFileInput.extensions", false]], "extensions (port.api.props.propsuipromptfileinputmultiple attribute)": [[0, "port.api.props.PropsUIPromptFileInputMultiple.extensions", false]], "extract_file_from_zip() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.extract_file_from_zip", false]], "filenotfoundinziperror": [[0, "port.helpers.extraction_helpers.FileNotFoundInZipError", false]], "find_item() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.find_item", false]], "find_items() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.find_items", false]], "fix_ascii_string() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.fix_ascii_string", false]], "fix_latin1_string() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.fix_latin1_string", false]], "folded (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.folded", false]], "footer (port.api.props.propsuipagedonation attribute)": [[0, "port.api.props.PropsUIPageDonation.footer", false]], "generate_file_prompt() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.generate_file_prompt", false]], "generate_retry_prompt() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.generate_retry_prompt", false]], "generate_review_data_prompt() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.generate_review_data_prompt", false]], "get_status_code_id() (port.helpers.validate.validateinput method)": [[0, "port.helpers.validate.ValidateInput.get_status_code_id", false]], "header (port.api.props.propsuipagedonation attribute)": [[0, "port.api.props.PropsUIPageDonation.header", false]], "id (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.id", false]], "id (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.id", false]], "id (port.api.props.propsuiquestionmultiplechoice attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.id", false]], "id (port.api.props.propsuiquestionmultiplechoicecheckbox attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.id", false]], "id (port.api.props.propsuiquestionopen attribute)": [[0, "port.api.props.PropsUIQuestionOpen.id", false]], "id (port.api.props.radioitem attribute)": [[0, "port.api.props.RadioItem.id", false]], "infer_ddp_category() (port.helpers.validate.validateinput method)": [[0, "port.helpers.validate.ValidateInput.infer_ddp_category", false]], "items (port.api.props.propsuipromptradioinput attribute)": [[0, "port.api.props.PropsUIPromptRadioInput.items", false]], "json_dumper() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.json_dumper", false]], "language (class in port.helpers.validate)": [[0, "port.helpers.validate.Language", false]], "message (port.api.props.propsuipromptprogress attribute)": [[0, "port.api.props.PropsUIPromptProgress.message", false]], "meta_tables (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.meta_tables", false]], "module": [[0, "module-port.api.props", false], [0, "module-port.helpers.extraction_helpers", false], [0, "module-port.helpers.port_helpers", false], [0, "module-port.helpers.validate", false], [11, "module-port.platforms.chatgpt", false], [11, "module-port.platforms.instagram", false]], "ok (port.api.props.propsuipromptconfirm attribute)": [[0, "port.api.props.PropsUIPromptConfirm.ok", false]], "percentage (port.api.props.propsuipromptprogress attribute)": [[0, "port.api.props.PropsUIPromptProgress.percentage", false]], "platform (port.api.props.propsuipagedonation attribute)": [[0, "port.api.props.PropsUIPageDonation.platform", false]], "port.api.props": [[0, "module-port.api.props", false]], "port.helpers.extraction_helpers": [[0, "module-port.helpers.extraction_helpers", false]], "port.helpers.port_helpers": [[0, "module-port.helpers.port_helpers", false]], "port.helpers.validate": [[0, "module-port.helpers.validate", false]], "port.platforms.chatgpt": [[11, "module-port.platforms.chatgpt", false]], "port.platforms.instagram": [[11, "module-port.platforms.instagram", false]], "propsuifooter (class in port.api.props)": [[0, "port.api.props.PropsUIFooter", false]], "propsuiheader (class in port.api.props)": [[0, "port.api.props.PropsUIHeader", false]], "propsuipagedonation (class in port.api.props)": [[0, "port.api.props.PropsUIPageDonation", false]], "propsuipageend (class in port.api.props)": [[0, "port.api.props.PropsUIPageEnd", false]], "propsuipromptconfirm (class in port.api.props)": [[0, "port.api.props.PropsUIPromptConfirm", false]], "propsuipromptconsentform (class in port.api.props)": [[0, "port.api.props.PropsUIPromptConsentForm", false]], "propsuipromptconsentformtable (class in port.api.props)": [[0, "port.api.props.PropsUIPromptConsentFormTable", false]], "propsuipromptfileinput (class in port.api.props)": [[0, "port.api.props.PropsUIPromptFileInput", false]], "propsuipromptfileinputmultiple (class in port.api.props)": [[0, "port.api.props.PropsUIPromptFileInputMultiple", false]], "propsuipromptprogress (class in port.api.props)": [[0, "port.api.props.PropsUIPromptProgress", false]], "propsuipromptquestionnaire (class in port.api.props)": [[0, "port.api.props.PropsUIPromptQuestionnaire", false]], "propsuipromptradioinput (class in port.api.props)": [[0, "port.api.props.PropsUIPromptRadioInput", false]], "propsuiquestionmultiplechoice (class in port.api.props)": [[0, "port.api.props.PropsUIQuestionMultipleChoice", false]], "propsuiquestionmultiplechoicecheckbox (class in port.api.props)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox", false]], "propsuiquestionopen (class in port.api.props)": [[0, "port.api.props.PropsUIQuestionOpen", false]], "question (port.api.props.propsuiquestionmultiplechoice attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.question", false]], "question (port.api.props.propsuiquestionmultiplechoicecheckbox attribute)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.question", false]], "question (port.api.props.propsuiquestionopen attribute)": [[0, "port.api.props.PropsUIQuestionOpen.question", false]], "questions (port.api.props.propsuipromptquestionnaire attribute)": [[0, "port.api.props.PropsUIPromptQuestionnaire.questions", false]], "radioitem (class in port.api.props)": [[0, "port.api.props.RadioItem", false]], "read_csv_from_bytes() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_csv_from_bytes", false]], "read_csv_from_bytes_to_df() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_csv_from_bytes_to_df", false]], "read_json_from_bytes() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_json_from_bytes", false]], "read_json_from_file() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.read_json_from_file", false]], "render_end_page() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.render_end_page", false]], "render_page() (in module port.helpers.port_helpers)": [[0, "port.helpers.port_helpers.render_page", false]], "replace_months() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.replace_months", false]], "set_current_status_code_by_id() (port.helpers.validate.validateinput method)": [[0, "port.helpers.validate.ValidateInput.set_current_status_code_by_id", false]], "sort_isotimestamp_empty_timestamp_last() (in module port.helpers.extraction_helpers)": [[0, "port.helpers.extraction_helpers.sort_isotimestamp_empty_timestamp_last", false]], "status_codes_lookup (port.helpers.validate.validateinput attribute)": [[0, "port.helpers.validate.ValidateInput.status_codes_lookup", false]], "statuscode (class in port.helpers.validate)": [[0, "port.helpers.validate.StatusCode", false]], "tables (port.api.props.propsuipromptconsentform attribute)": [[0, "port.api.props.PropsUIPromptConsentForm.tables", false]], "text (port.api.props.propsuipromptconfirm attribute)": [[0, "port.api.props.PropsUIPromptConfirm.text", false]], "title (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.title", false]], "title (port.api.props.propsuipromptradioinput attribute)": [[0, "port.api.props.PropsUIPromptRadioInput.title", false]], "todict() (port.api.props.propsuifooter method)": [[0, "port.api.props.PropsUIFooter.toDict", false]], "todict() (port.api.props.propsuiheader method)": [[0, "port.api.props.PropsUIHeader.toDict", false]], "todict() (port.api.props.propsuipagedonation method)": [[0, "port.api.props.PropsUIPageDonation.toDict", false]], "todict() (port.api.props.propsuipageend method)": [[0, "port.api.props.PropsUIPageEnd.toDict", false]], "todict() (port.api.props.propsuipromptconfirm method)": [[0, "port.api.props.PropsUIPromptConfirm.toDict", false]], "todict() (port.api.props.propsuipromptconsentform method)": [[0, "port.api.props.PropsUIPromptConsentForm.toDict", false]], "todict() (port.api.props.propsuipromptconsentformtable method)": [[0, "port.api.props.PropsUIPromptConsentFormTable.toDict", false]], "todict() (port.api.props.propsuipromptfileinput method)": [[0, "port.api.props.PropsUIPromptFileInput.toDict", false]], "todict() (port.api.props.propsuipromptfileinputmultiple method)": [[0, "port.api.props.PropsUIPromptFileInputMultiple.toDict", false]], "todict() (port.api.props.propsuipromptprogress method)": [[0, "port.api.props.PropsUIPromptProgress.toDict", false]], "todict() (port.api.props.propsuipromptquestionnaire method)": [[0, "port.api.props.PropsUIPromptQuestionnaire.toDict", false]], "todict() (port.api.props.propsuipromptradioinput method)": [[0, "port.api.props.PropsUIPromptRadioInput.toDict", false]], "todict() (port.api.props.propsuiquestionmultiplechoice method)": [[0, "port.api.props.PropsUIQuestionMultipleChoice.toDict", false]], "todict() (port.api.props.propsuiquestionmultiplechoicecheckbox method)": [[0, "port.api.props.PropsUIQuestionMultipleChoiceCheckbox.toDict", false]], "todict() (port.api.props.propsuiquestionopen method)": [[0, "port.api.props.PropsUIQuestionOpen.toDict", false]], "todict() (port.api.props.translatable method)": [[0, "port.api.props.Translatable.toDict", false]], "translatable (class in port.api.props)": [[0, "port.api.props.Translatable", false]], "translate_meta_tables() (port.api.props.propsuipromptconsentform method)": [[0, "port.api.props.PropsUIPromptConsentForm.translate_meta_tables", false]], "translate_tables() (port.api.props.propsuipromptconsentform method)": [[0, "port.api.props.PropsUIPromptConsentForm.translate_tables", false]], "translations (class in port.api.props)": [[0, "port.api.props.Translations", false]], "validate_zip() (in module port.helpers.validate)": [[0, "port.helpers.validate.validate_zip", false]], "validateinput (class in port.helpers.validate)": [[0, "port.helpers.validate.ValidateInput", false]], "value (port.api.props.radioitem attribute)": [[0, "port.api.props.RadioItem.value", false]], "visualizations (port.api.props.propsuipromptconsentformtable attribute)": [[0, "port.api.props.PropsUIPromptConsentFormTable.visualizations", false]]}, "objects": {"port.api": [[0, 0, 0, "-", "props"]], "port.api.props": [[0, 1, 1, "", "PropsUIFooter"], [0, 1, 1, "", "PropsUIHeader"], [0, 1, 1, "", "PropsUIPageDonation"], [0, 1, 1, "", "PropsUIPageEnd"], [0, 1, 1, "", "PropsUIPromptConfirm"], [0, 1, 1, "", "PropsUIPromptConsentForm"], [0, 1, 1, "", "PropsUIPromptConsentFormTable"], [0, 1, 1, "", "PropsUIPromptFileInput"], [0, 1, 1, "", "PropsUIPromptFileInputMultiple"], [0, 1, 1, "", "PropsUIPromptProgress"], [0, 1, 1, "", "PropsUIPromptQuestionnaire"], [0, 1, 1, "", "PropsUIPromptRadioInput"], [0, 1, 1, "", "PropsUIQuestionMultipleChoice"], [0, 1, 1, "", "PropsUIQuestionMultipleChoiceCheckbox"], [0, 1, 1, "", "PropsUIQuestionOpen"], [0, 1, 1, "", "RadioItem"], [0, 1, 1, "", "Translatable"], [0, 1, 1, "", "Translations"]], "port.api.props.PropsUIFooter": [[0, 2, 1, "", "toDict"]], "port.api.props.PropsUIHeader": [[0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPageDonation": [[0, 3, 1, "", "footer"], [0, 3, 1, "", "header"], [0, 3, 1, "", "platform"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPageEnd": [[0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptConfirm": [[0, 3, 1, "", "cancel"], [0, 3, 1, "", "ok"], [0, 3, 1, "", "text"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptConsentForm": [[0, 3, 1, "", "description"], [0, 3, 1, "", "donate_button"], [0, 3, 1, "", "donate_question"], [0, 3, 1, "", "id"], [0, 3, 1, "", "meta_tables"], [0, 3, 1, "", "tables"], [0, 2, 1, "", "toDict"], [0, 2, 1, "", "translate_meta_tables"], [0, 2, 1, "", "translate_tables"]], "port.api.props.PropsUIPromptConsentFormTable": [[0, 3, 1, "", "data_frame"], [0, 3, 1, "", "delete_option"], [0, 3, 1, "", "description"], [0, 3, 1, "", "folded"], [0, 3, 1, "", "id"], [0, 3, 1, "", "title"], [0, 2, 1, "", "toDict"], [0, 3, 1, "", "visualizations"]], "port.api.props.PropsUIPromptFileInput": [[0, 3, 1, "", "description"], [0, 3, 1, "", "extensions"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptFileInputMultiple": [[0, 3, 1, "", "description"], [0, 3, 1, "", "extensions"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptProgress": [[0, 3, 1, "", "description"], [0, 3, 1, "", "message"], [0, 3, 1, "", "percentage"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptQuestionnaire": [[0, 3, 1, "", "description"], [0, 3, 1, "", "questions"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIPromptRadioInput": [[0, 3, 1, "", "description"], [0, 3, 1, "", "items"], [0, 3, 1, "", "title"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIQuestionMultipleChoice": [[0, 3, 1, "", "choices"], [0, 3, 1, "", "id"], [0, 3, 1, "", "question"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIQuestionMultipleChoiceCheckbox": [[0, 3, 1, "", "choices"], [0, 3, 1, "", "id"], [0, 3, 1, "", "question"], [0, 2, 1, "", "toDict"]], "port.api.props.PropsUIQuestionOpen": [[0, 3, 1, "", "id"], [0, 3, 1, "", "question"], [0, 2, 1, "", "toDict"]], "port.api.props.RadioItem": [[0, 3, 1, "", "id"], [0, 3, 1, "", "value"]], "port.api.props.Translatable": [[0, 2, 1, "", "toDict"]], "port.helpers": [[0, 0, 0, "-", "extraction_helpers"], [0, 0, 0, "-", "port_helpers"], [0, 0, 0, "-", "validate"]], "port.helpers.extraction_helpers": [[0, 4, 1, "", "FileNotFoundInZipError"], [0, 5, 1, "", "dict_denester"], [0, 5, 1, "", "epoch_to_iso"], [0, 5, 1, "", "extract_file_from_zip"], [0, 5, 1, "", "find_item"], [0, 5, 1, "", "find_items"], [0, 5, 1, "", "fix_ascii_string"], [0, 5, 1, "", "fix_latin1_string"], [0, 5, 1, "", "json_dumper"], [0, 5, 1, "", "read_csv_from_bytes"], [0, 5, 1, "", "read_csv_from_bytes_to_df"], [0, 5, 1, "", "read_json_from_bytes"], [0, 5, 1, "", "read_json_from_file"], [0, 5, 1, "", "replace_months"], [0, 5, 1, "", "sort_isotimestamp_empty_timestamp_last"]], "port.helpers.port_helpers": [[0, 5, 1, "", "donate"], [0, 5, 1, "", "exit"], [0, 5, 1, "", "generate_file_prompt"], [0, 5, 1, "", "generate_retry_prompt"], [0, 5, 1, "", "generate_review_data_prompt"], [0, 5, 1, "", "render_end_page"], [0, 5, 1, "", "render_page"]], "port.helpers.validate": [[0, 1, 1, "", "DDPCategory"], [0, 1, 1, "", "DDPFiletype"], [0, 1, 1, "", "Language"], [0, 1, 1, "", "StatusCode"], [0, 1, 1, "", "ValidateInput"], [0, 5, 1, "", "validate_zip"]], "port.helpers.validate.ValidateInput": [[0, 3, 1, "", "ddp_categories_lookup"], [0, 2, 1, "", "get_status_code_id"], [0, 2, 1, "", "infer_ddp_category"], [0, 2, 1, "", "set_current_status_code_by_id"], [0, 3, 1, "", "status_codes_lookup"]], "port.platforms": [[11, 0, 0, "-", "chatgpt"], [11, 0, 0, "-", "instagram"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "exception", "Python exception"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:exception", "5": "py:function"}, "terms": {"": [0, 2, 6, 9], "0": [0, 2, 8], "00": 0, "04": 6, "09": 0, "1": [0, 2, 4, 6, 8, 9], "10": [4, 6], "15": 0, "16": 6, "1632139200": 0, "18": 6, "1m": 8, "2": [0, 4, 6, 7], "2021": 0, "2023": 0, "2048": 8, "20t12": 0, "22": 6, "24": [4, 9], "25": 0, "2gib": 2, "3": [0, 6], "30": 0, "3000": 6, "301": 8, "365": 8, "4": 0, "443": 8, "5": [0, 3], "50": 4, "6": 0, "7": 4, "8": [0, 4], "80": 8, "8000": 8, "8601": 0, "A": [0, 2, 3, 4], "As": [2, 3, 4, 9], "At": 2, "But": [2, 9], "By": 9, "For": [0, 2, 8, 11], "If": [0, 2, 3, 4, 6, 8, 9], "In": [2, 3, 4, 6, 8, 9, 11], "It": [0, 2, 3, 6, 9], "On": 2, "That": [2, 6], "The": [0, 3, 5, 9], "These": [2, 6, 9], "To": 6, "With": 2, "__type__": 2, "abbrevi": 0, "about": [0, 3, 6, 8, 9, 10], "abov": [2, 9], "absens": 9, "absolut": 3, "accept": [0, 8], "access": [3, 4, 7], "accident": 9, "account": [2, 4, 8], "act": 0, "actual": 2, "ad": [2, 4, 5, 10], "adapt": [2, 4], "add": 9, "addit": 0, "addition": 7, "addzero": 9, "admin": 8, "administ": 4, "administr": 6, "after": [0, 2], "ag": 0, "again": [0, 2], "against": 0, "aggreg": 2, "ak": 2, "al": 2, "alic": 0, "all": [0, 2, 3, 8, 9], "all_ddp_categori": 0, "all_status_cod": 0, "allow": [0, 2, 8], "along": 9, "alreadi": [2, 6], "also": [2, 3, 9], "altern": [2, 9], "although": 2, "alwai": [0, 3, 6, 8, 9], "amd": 6, "amount": [3, 4, 6], "an": [0, 2, 3, 6, 8, 9, 11], "ander": 2, "ani": [0, 2, 9], "annot": 2, "anoth": 3, "answer": 0, "anticip": 3, "anyth": 2, "api": 8, "app": [2, 6, 8], "app_admin": 8, "app_data": 8, "app_domain": 8, "app_mail_domain": 8, "app_nam": 8, "apparaat": 2, "append": 2, "applic": [0, 2, 4, 8, 9], "approach": [2, 3], "appropri": [3, 4], "ar": [0, 2, 3, 4, 6, 8, 9], "architectur": 2, "archiv": 0, "aren": 4, "arg": 8, "around": [2, 8], "arrai": 2, "articl": [2, 4, 10], "ascii": 0, "asd": 0, "ask": 2, "assembl": 0, "assembli": 2, "assign": [0, 9], "assist": 4, "associ": 0, "assum": 0, "assumpt": 3, "attempt": [0, 3], "attent": [2, 3], "aumzobj7ojn58xilmgvcwtyrcsallwdcglwdcglwdcgwdchdhsjahdghaggdgdgt7moqyjtjba": 8, "authent": 8, "auto": 9, "automat": 9, "avail": [2, 3, 4, 6], "avoid": 9, "aw": 4, "ax": 9, "axi": 9, "azur": [4, 8], "b": 0, "back": [2, 4], "backend": 2, "bad": 2, "badzipfil": [0, 2], "banner": 8, "barchart": 9, "base": [0, 4, 9], "bash": 6, "basi": 9, "basic": 6, "beautifulsoup4": 2, "becaus": [2, 3, 6, 8, 9], "becom": 9, "befor": [0, 3], "begin": 2, "behind": 2, "being": 2, "believ": 3, "below": [2, 4, 6, 9], "benefit": 2, "bespok": [2, 4], "best": [4, 6, 9], "bestand": 2, "better": 2, "between": [3, 6, 9], "bilingu": 0, "binari": 2, "bio": 6, "bit": [6, 9], "bite": 3, "board": 2, "bob": 0, "bodi": [0, 2], "bool": [0, 2], "boolean": 9, "both": 6, "bottom": 2, "break": [2, 9], "brew": 6, "brief": 0, "bring": 2, "browser": [2, 6, 8], "budget": 4, "buffer": 0, "build": [2, 6], "builtin": 8, "bullet": 3, "bundl": 8, "button": [0, 2], "bytesio": 0, "c": 0, "caf\u00e9": 0, "calcul": 9, "call": [2, 4, 6], "can": [0, 2, 3, 4, 6, 8, 9, 10], "cancel": [0, 2], "cannot": [0, 2, 6], "careful": 3, "carefulli": 3, "case": [0, 2, 3, 9, 11], "cat1": 0, "catalog": 4, "categori": 0, "catogori": 0, "caught": 0, "caus": [3, 6], "cd": [6, 8], "cert": 8, "certain": [3, 6, 9], "challeng": 3, "chanc": 3, "chang": [2, 3, 6, 9, 11], "channel": 9, "charact": 0, "characterist": 0, "chatgpt": 11, "check": [2, 3, 4, 6, 8], "checkbox": 0, "checklist": [2, 5, 10], "checkout": [2, 10], "choic": [0, 3], "choos": [2, 6], "chose": 6, "claim": 3, "class": 0, "clearli": 3, "click": [2, 4], "client": 8, "clone": [2, 6, 8], "cloud": 8, "cmd": 6, "code": [0, 2, 3, 9], "collect": [0, 2, 3], "colour": 9, "column": [2, 3, 9], "column1": 0, "column2": 0, "column3": 0, "com": [6, 8], "combin": [0, 2, 6], "come": [2, 4], "command": [0, 2, 4, 6], "commandsystemdon": [0, 2], "commandsystemexit": [0, 2], "commanduirend": [0, 2], "common": [3, 9], "commonli": 2, "commun": 3, "compar": [0, 2, 3], "compat": [0, 2], "compil": 2, "complain": 8, "complet": [0, 2, 3, 4, 6], "complex": 2, "complic": 9, "compon": [0, 2, 9], "compress": 2, "compress_s": 2, "comput": 4, "concept": 7, "conf": 8, "configur": [0, 2, 4], "confirm": 0, "connect": [6, 8, 9], "consent": [0, 2, 4, 9], "consent_prompt": 2, "consent_prompt_result": 2, "consid": 3, "consol": [2, 8], "constraint": 2, "construct": 2, "contact": 4, "contain": [0, 2, 3, 5, 6, 9, 11], "container_nam": 8, "content": [0, 2, 3], "context": 6, "continu": [0, 2, 6, 8], "conveni": [6, 9], "convers": 0, "convert": 0, "copi": 4, "core": [2, 4, 8], "corner": 6, "correct": 2, "cost": 2, "could": [0, 2, 3, 4, 6, 8, 9], "couldn": 0, "count": 9, "count_pct": 9, "countri": 9, "coupl": [2, 3, 6], "cours": 3, "cover": [6, 9], "cpu": 6, "crash": [2, 3], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "creativ": 2, "credit": 4, "crt": 8, "crucial": 3, "csv": [0, 2], "current": [0, 2, 9], "current_ddp_categori": 0, "current_status_cod": 0, "custom": [0, 2, 8], "cycl": 9, "d": 0, "d3i": [6, 8], "dai": [4, 8, 9], "dan": 2, "dat": 2, "data": [0, 5, 8, 11], "data_fram": [0, 9], "data_frame_df": 0, "data_frame_dict": 0, "datadon": [4, 7], "datafram": [0, 2, 3], "date": [0, 3], "datetim": 9, "db": 8, "db_host": 8, "db_name": 8, "db_pass": 8, "db_user": 8, "dd": 9, "ddp": [0, 2, 3], "ddp_categori": 0, "ddp_categories_lookup": 0, "ddp_filetyp": 0, "ddpcategori": [0, 1], "ddpfiletyp": [0, 1], "ddthh": 9, "de": 2, "deal": [0, 3], "decemb": 9, "decid": 2, "decod": 0, "deduct": 4, "def": 2, "default": [0, 2, 3, 6, 9, 11], "defin": [0, 2], "delet": [0, 9], "delete_opt": 0, "deliveri": 0, "denest": [0, 3], "depend": [3, 6, 9], "depends_on": 8, "deploi": 2, "deploy": [5, 10], "descript": [0, 2, 4], "descrit": 4, "design": [2, 4], "detail": [6, 7, 8], "detect": 3, "determin": [2, 9], "develop": [2, 3, 4, 6, 8], "devic": [0, 2, 6], "df": [0, 2, 9], "dict": [0, 3, 9], "dict_denest": [0, 1, 3], "dictionari": [0, 3, 9], "did": [2, 3], "differ": [0, 2, 3, 9], "directli": [3, 4, 9], "directori": 2, "discuss": [4, 6], "displai": [0, 3, 9], "distribut": 6, "distro": 6, "divers": [2, 3], "divid": 9, "do": [2, 3, 4, 6, 8, 9, 11], "docker": [4, 5, 10], "document": 8, "doe": [3, 5, 6], "doesn": 9, "domain": 9, "don": [2, 3], "donat": [0, 1, 5, 9, 11], "donate_button": 0, "donate_quest": 0, "done": [0, 2, 4], "dont": 2, "down": [4, 9], "download": [2, 3, 4, 6], "drive": 4, "driver": 2, "due": [2, 3], "durat": 4, "dure": [0, 3, 6], "dutch": [0, 4, 9], "dynam": 9, "e": [2, 4, 9], "each": [0, 9], "easi": 3, "easier": 9, "educ": 9, "een": 2, "effici": 2, "either": [0, 9], "element": 2, "els": 2, "empti": [0, 9], "en": [0, 2, 9], "encod": 0, "encount": [2, 3, 6], "end": [0, 2, 3, 4], "engin": [2, 3], "english": [0, 2, 9], "enjoy": 9, "enough": 2, "entertain": 9, "enumer": 0, "environ": 8, "epoch": 0, "epoch_timestamp": 0, "epoch_to_iso": [0, 1], "equival": 0, "error": [0, 2, 3, 6], "essenc": 2, "etc": [2, 8], "ethic": 2, "eu": [4, 7], "even": 3, "event": [4, 8], "everi": [3, 9], "everyth": 8, "ex": 6, "exact": 9, "exampl": [0, 2, 3, 4, 5, 6, 11], "example1": 0, "example2": 0, "except": [0, 2], "exclud": 2, "exist": [2, 3], "exit": [0, 1, 2], "exit_port": 2, "expect": [3, 6], "experi": [2, 3], "explain": 4, "explan": [0, 9], "explanatori": 4, "explicitli": 9, "explor": 9, "extens": 0, "extern": 2, "extra": 4, "extract": [1, 2, 3, 9, 10, 11], "extract_file_from_zip": [0, 1], "extract_the_data_you_are_interested_in": 2, "extracted_data": 2, "extracted_data_in_a_dictionari": 2, "extracted_fil": 0, "extraction_help": 0, "ey": 9, "eyra": 4, "f": 2, "fact": 3, "fail": [0, 2, 3], "failur": 3, "fair": 3, "fals": [0, 2, 9], "familiar": 6, "fast": 2, "feedback": 3, "fiction": 2, "field": 4, "file": [0, 2, 3, 4, 6, 8, 11], "file1": 0, "file2": 0, "file_list_input": 0, "file_prompt": 2, "file_prompt_result": 2, "file_s": 2, "file_to_extract": 0, "filenam": 0, "filenotfoundinziperror": [0, 1], "filesnam": 2, "fill": 9, "final": 9, "find": [0, 2, 3, 4, 6, 10], "find_item": [0, 1, 3], "fine": [2, 6], "finish": 2, "first": [0, 3, 5, 9], "fit": [2, 11], "fix": [0, 9], "fix_ascii_str": [0, 1], "fix_latin1_str": [0, 1], "flag": 0, "flatten": [0, 3], "float": 0, "flow": [2, 3, 4, 11], "fold": 0, "folder": [3, 8], "follow": [2, 4, 6, 8, 9, 10], "footer": [0, 2], "forget": [2, 6], "fork": [2, 8], "form": [0, 9], "format": [0, 2, 3, 9], "forward": 8, "found": [0, 2], "framework": [2, 11], "free": [4, 8, 11], "freel": 11, "frequenc": 9, "fresh": 3, "from": [0, 3, 4, 6, 11], "frontend": 2, "frustrat": 3, "full": [2, 3, 9], "fulli": 0, "function": [0, 2, 9], "furthermor": 9, "futur": [2, 4], "g": 9, "ga": 2, "gap": 9, "garbag": 3, "gave": 3, "geen": 2, "gekozen": 2, "gener": [0, 2, 6], "generate_consent_prompt": 2, "generate_file_prompt": [0, 1, 2], "generate_retry_prompt": [0, 1, 2], "generate_review_data_prompt": [0, 1], "get": [0, 2, 3, 4, 6, 8], "get_status_code_id": 0, "getinfo": 2, "getvalu": 0, "gib": 4, "git": 6, "github": 6, "give": [3, 6, 9], "given": [0, 9], "gmail": 8, "go": [2, 3, 4, 6, 8], "goe": [2, 3], "good": [2, 9], "google_sign_in_client_id": 8, "google_sign_in_client_secret": 8, "graph": 9, "great": 8, "greather": 0, "greet": 6, "group": [0, 3, 9], "group_bi": 9, "guid": 5, "guidanc": 7, "ha": [2, 3, 4, 9], "handl": [2, 3, 9], "happen": [3, 6], "happi": 2, "hard": 2, "have": [2, 3, 4, 6, 7, 9, 11], "haven": 6, "head": 0, "header": [0, 2], "header_text": 0, "heavili": [3, 9], "heeft": 2, "height": 9, "helaa": 2, "hello": 0, "help": [3, 6, 9], "helper": [1, 10], "here": [2, 3, 4, 6, 9, 10], "het": 2, "hh": 9, "high": 2, "homebrew": 6, "host": [4, 8], "hour": [4, 9], "hour_cycl": 9, "how": [4, 5, 6, 7, 8, 9], "howev": 2, "hpc": 4, "html": [2, 3], "http": [6, 8], "http_host": 8, "http_upgrad": 8, "huge": [2, 9], "human": 3, "i": [0, 2, 3, 6, 8, 9, 10], "icon": 6, "id": [0, 4, 8, 9], "idea": [0, 2], "ident": 9, "identifi": 0, "implement": 9, "impli": 9, "import": [2, 9, 11], "incent": 3, "includ": [0, 2], "index": 10, "indic": 0, "infer": 0, "infer_ddp_categori": 0, "infin": 0, "info": [0, 2], "inform": [0, 2, 4, 6, 9], "infra": 6, "inhoud": 2, "initi": 0, "inp": 0, "input": [0, 2, 9], "input_str": 0, "ins": 8, "insert": 0, "inspect": 3, "instagram": 3, "instal": [5, 10], "instanc": 0, "instead": [2, 3, 6, 9], "instruct": [0, 2, 3, 6, 8, 9], "instructi": 2, "int": [0, 2], "integ": 0, "intel": 6, "intent": 4, "interact": 2, "interes": 2, "interest": [2, 3, 4], "interfac": 2, "intern": 0, "interpret": 9, "interv": 9, "intric": 2, "introduct": [5, 10], "invalid": 0, "invent": 11, "investig": 3, "involv": 3, "io": 0, "ip": 8, "is_data_valid": 2, "iso": [0, 9], "issu": [2, 6], "item": [0, 4, 9], "its": [2, 3, 4, 6], "j": [2, 6], "januari": 9, "json": [0, 2, 3, 6], "json_byt": 0, "json_dump": [0, 1], "json_fil": 0, "json_str": [0, 2], "juist": 2, "just": [2, 3, 4, 6, 9], "keep": [2, 3], "kei": [0, 2, 3, 4, 6, 8, 9], "kernel": 6, "key1": 3, "key2": 3, "key3": 3, "key_that_sometimes_is_called_something_differ": 3, "key_to_match": 0, "key_which_value_you_w": 3, "keyout": 8, "ki": 2, "kiezen": 2, "kind": 2, "klik": 2, "know": [3, 4, 6, 9], "knowledg": [3, 6], "known": 0, "known_fil": 0, "kunnen": 2, "label": [0, 9], "land": 4, "languag": [0, 1, 2, 3, 9], "last": [0, 9], "latest": 8, "latin1": 0, "lead": 2, "learn": [3, 8, 10], "least": [0, 2, 3, 6], "left": [2, 6], "less": [2, 3, 6], "let": 2, "level": 2, "lib": 8, "librari": 2, "like": 2, "limit": 5, "line": 11, "list": [0, 2, 3, 4, 9], "listen": 8, "live": 3, "ll": 9, "load": 2, "loadpackag": 2, "local": 6, "localhost": [6, 8], "locat": [0, 8], "log": [0, 2, 3, 4], "logic": 2, "login": 8, "long": 9, "longer": 2, "look": [0, 2, 3, 6, 9], "lookup": 0, "lot": [2, 6], "lower": 6, "lxml": 2, "mai": 0, "main": [0, 2, 9, 11], "make": [2, 3, 4, 6, 9], "manag": [6, 8], "manipul": 6, "manual": [2, 6], "match": [0, 3], "matter": 2, "max": 9, "mean": [2, 3, 4, 6, 9], "mei": 0, "memori": 4, "mention": 9, "messag": [0, 6], "meta": [0, 2], "meta_t": 0, "method": 9, "micropip": 2, "might": [2, 3, 4, 6], "mime": 0, "min": 9, "mind": [2, 3], "minim": 3, "miss": 9, "mistak": 3, "mm": 9, "mobil": 2, "mock": 6, "modul": [0, 2, 10, 11], "mondai": 9, "month": 0, "month_cycl": 9, "more": [2, 3, 6, 8, 9], "most": [2, 3, 4, 9], "mostli": 9, "motherboard": 6, "much": [2, 3, 6], "multi": 0, "multipl": [0, 3, 9], "must": [0, 2], "nalic": 0, "name": [0, 2, 3, 4, 8, 9], "namelist": 2, "natur": [2, 3], "nbob": 0, "necessari": 8, "need": [0, 2, 3, 4, 6, 8, 9], "nest": [0, 3], "nested_dict": 0, "never": 6, "new": [0, 4, 6], "newkei": 8, "newli": 4, "next": [0, 2, 5, 10], "nice": 9, "niet": 2, "nl": [2, 9], "node": [6, 8], "nodej": 6, "non": [0, 3], "none": 0, "normal": [2, 9], "note": [0, 6, 8, 9], "noth": 2, "notic": [2, 9], "now": [2, 6, 8, 9], "npm": [2, 4, 6], "number": [2, 3, 4, 9], "numer": [0, 9], "numpi": 2, "nwo": 4, "object": [0, 9], "oblig": 3, "obtain": 8, "occur": [0, 2, 9], "off": 2, "offer": 4, "offici": [6, 8], "often": [2, 3], "ok": [0, 2], "onder": 2, "one": [2, 3, 9], "onli": [0, 2, 3, 6, 9], "op": 2, "open": [0, 4, 6, 11], "openid": 8, "openssl": 8, "oper": 6, "opgeslagen": 2, "opnieuw": 2, "opportun": 3, "optim": 2, "option": [0, 9], "order": [2, 3, 4, 6, 8, 11], "organ": [3, 4], "origin": 0, "other": [0, 2], "otherwis": [0, 2], "our": [3, 4, 7, 8, 9], "out": [2, 3, 4, 5, 10], "outlin": 8, "outsid": 6, "over": 3, "overslaan": 2, "overview": 9, "own": [3, 4, 5, 6, 9, 10], "packag": [0, 3, 6], "page": [0, 2, 4, 9, 10], "pai": [2, 3], "pair": [0, 3], "panda": [0, 2], "paramet": 0, "pars": [0, 2, 3], "part": [0, 9], "particip": [0, 3, 4, 9], "pass": 0, "password": [6, 8], "past": [4, 8], "path": [0, 3, 6], "path_to_zip": 0, "payloadjson": 2, "payloadstr": 2, "payloadtru": 2, "pct": 9, "pd": [0, 2, 3], "peopl": 3, "per": 2, "percent": 4, "percentag": [0, 9], "perform": [2, 3, 9], "period": 9, "person": [2, 3], "phoenix": 8, "pick": 9, "pipx": 6, "pixel": 9, "place": [0, 2, 10], "plai": 8, "plain": [0, 2], "platform": [0, 2, 3, 4, 8, 10], "platform_nam": 0, "pleas": [2, 4], "poetri": 6, "point": 3, "polici": [2, 4], "popul": [2, 3], "port": [1, 2, 6, 8, 10, 11], "port_help": 0, "portal": 4, "portion": 3, "possibl": [3, 9], "possibli": 2, "postgr": 8, "postgres_data": 8, "postgres_db": 8, "postgres_password": 8, "postgres_us": 8, "postgresql": 8, "potenti": 0, "powershel": 6, "practic": 2, "pre": 5, "predefin": 0, "prefer": [3, 6], "prepar": 7, "preprocess": 9, "prerequisit": 5, "present": [0, 2, 3, 6], "preserv": 2, "press": 2, "pretti": 2, "prevent": 3, "previou": [8, 9], "primari": 9, "princip": 3, "print": [0, 2], "prior": [0, 2], "privaci": [2, 4], "probabl": [3, 9], "probeer": 2, "problem": [3, 6], "process": [0, 2, 3, 9, 11], "processingwork": 2, "produc": 7, "product": 8, "program": [3, 6], "progress": [0, 2], "project": [3, 4], "prompt": [0, 2], "prop": [1, 2, 9, 10], "propos": 4, "propsuifoot": [0, 1, 2], "propsuihead": [0, 1, 2], "propsuipagedon": [0, 1, 2], "propsuipageend": [0, 1, 2], "propsuipromptconfirm": [0, 1, 2], "propsuipromptconsentform": [0, 1, 2], "propsuipromptconsentformt": [0, 1, 2, 9], "propsuipromptfileinput": [0, 1, 2], "propsuipromptfileinputmultipl": [0, 1], "propsuipromptprogress": [0, 1], "propsuipromptquestionnair": [0, 1], "propsuipromptradioinput": [0, 1], "propsuiquestionmultiplechoic": [0, 1], "propsuiquestionmultiplechoicecheckbox": [0, 1], "propsuiquestionopen": [0, 1], "proto": 8, "provid": [0, 3, 4, 7, 8, 9, 10, 11], "provis": 4, "proxi": 8, "proxy_http_vers": 8, "proxy_max_temp_file_s": 8, "proxy_pass": 8, "proxy_set_head": 8, "purpos": 0, "put": [2, 4, 8, 9], "py": [9, 11], "py_work": 2, "pyodid": 2, "python": 6, "quarter": 9, "queri": 9, "question": 0, "questionnair": 0, "quit": 3, "qwe": 0, "radio": 0, "radioitem": [0, 1], "rais": 0, "random": 3, "rang": 9, "reach": 0, "react": 2, "read": [0, 3, 8], "read_csv_from_byt": [0, 1], "read_csv_from_bytes_to_df": [0, 1], "read_json_from_byt": [0, 1], "read_json_from_fil": [0, 1], "readi": [3, 8], "readibl": 3, "real": [2, 8], "realist": 4, "realiti": [2, 6], "realiz": 4, "realli": 2, "reason": 3, "receiv": [0, 2, 3], "recht": 2, "recommend": [6, 9], "redirect": 8, "refer": [2, 7], "reflect": 2, "regardless": 0, "relat": 6, "releas": 4, "remain": 3, "rememb": 6, "remote_addr": 8, "remov": [0, 9], "render": [0, 2], "render_end_pag": [0, 1, 2], "render_pag": [0, 1, 2], "replac": [0, 8], "replace_month": [0, 1], "repositori": [2, 4, 6], "repres": 0, "represent": 0, "req": 8, "request": [3, 4, 8], "request_uri": 8, "requir": [2, 3, 4, 6, 9], "requisit": 5, "research": [0, 2, 3], "resourc": 4, "respond": 9, "respons": 3, "restart": 8, "result": [0, 2, 3], "resum": 2, "retri": [0, 2], "retry_prompt": 2, "retry_prompt_result": 2, "return": [0, 2, 8], "reusabl": 2, "revers": 8, "review": [0, 2], "right": 2, "risk": 8, "row": [0, 9], "rsa": 8, "run": [0, 2, 4, 5, 6], "run_first": 0, "runn": 6, "sad": 2, "sai": 9, "same": [3, 9], "sampl": 3, "scenario": 3, "scheme": 8, "scienc": 4, "scientif": 4, "scope": 6, "screen": [2, 3], "script": [3, 5, 9, 11], "search": [0, 6, 9, 10], "season": 9, "secondari": 9, "secret": 8, "secret_key_bas": 8, "section": [4, 6], "see": [2, 3, 4, 6, 8, 9, 11], "seen": [2, 9], "select": [0, 2, 4, 9], "self": [2, 8], "selfsign": 8, "send": [0, 2], "sens": 9, "sent": [2, 4], "separ": [2, 9], "seri": 0, "seriou": 3, "server": [2, 4, 6, 8], "server_nam": 8, "servic": 8, "session_id": 2, "set": [0, 2, 3, 6, 7, 8, 9], "set_current_status_code_by_id": 0, "sever": 2, "share": [0, 3, 6], "short": 0, "shot": 3, "should": [0, 2, 3, 6, 8, 9], "show": [0, 2, 8], "shown": [0, 2, 9], "sign": 8, "similar": 2, "simpl": 3, "simpli": [7, 9], "singl": [0, 9], "situat": [4, 6], "size": 2, "skip": 2, "slow": [2, 9], "small": [2, 4], "so": [2, 3, 4, 6, 8, 9, 11], "softwar": [4, 6], "solut": [4, 6], "solv": 6, "some": [2, 3, 6, 8, 9], "someth": [2, 4, 6], "somethin": 2, "sometim": 3, "sort": [0, 3], "sort_isotimestamp_empty_timestamp_last": [0, 1], "sort_valu": 0, "sourc": [4, 8], "specif": [0, 4, 5], "specifi": [0, 9], "split": 2, "sport": 9, "src": [2, 11], "ss": 9, "ssl": 8, "ssl_certif": 8, "ssl_certificate_kei": 8, "stacktrac": 3, "standard": 11, "start": [3, 5, 6, 8], "static_path": 8, "statist": 9, "statu": 0, "status_cod": 0, "status_codes_lookup": 0, "statuscod": [0, 1], "step": [2, 5, 6], "steward": 2, "still": [2, 3], "stop": 2, "storag": [0, 2, 4], "storage_servic": 8, "store": [0, 2, 4], "str": [0, 2], "straight": 4, "straightforward": 6, "string": [0, 9], "structur": [0, 3, 8], "stuck": 3, "studi": [3, 5, 6, 7, 8, 11], "sub": 9, "submit": [0, 2, 3, 4], "substanti": 2, "substr": 0, "subsystem": 6, "succesfulli": 3, "success": [0, 2], "suggest": 6, "suit": 6, "suitabl": 9, "sum": 9, "sundai": 9, "support": [0, 6, 9], "sure": [2, 3, 6, 9], "survei": 3, "system": [0, 2, 6], "t": [0, 2, 3, 4, 8, 9], "tab": 7, "tabel": 9, "tabl": [0, 2, 5], "table_list": 0, "table_titl": [2, 9], "tableid": 9, "tailor": [2, 3], "take": [2, 3, 4, 9], "target": 3, "task": [0, 3, 5], "technic": 4, "tell": 3, "termin": 6, "test": 3, "test_databas": 8, "text": [0, 2], "textcolumn": 9, "textual": 9, "than": [0, 2, 3], "thank": [0, 2], "thats": 2, "thei": [0, 2, 3, 4, 6, 9], "them": [0, 2, 3, 6, 8, 9], "theori": 6, "therebi": 9, "therefor": [3, 4], "thi": [0, 2, 3, 4, 6, 8, 9, 10, 11], "thing": [2, 9], "think": [2, 3], "third": 9, "those": [2, 3], "three": 9, "time": [2, 3, 6], "timestamp": [0, 9], "timestamp_seri": 0, "titel": 9, "titl": [0, 9], "tmp": 8, "todict": 0, "togeth": 2, "token": 9, "too": [2, 3, 6], "tool": 4, "toolkit": 2, "topic": 6, "total": 9, "touch": 2, "tradit": 3, "translat": [0, 1, 2], "translate_meta_t": 0, "translate_t": 0, "trigger": 0, "trivial": 3, "troubl": 6, "true": [0, 2, 9], "try": [0, 3, 4, 5, 6, 10], "turn": 6, "tutori": [2, 4, 8], "tweak": 2, "two": 3, "txt": 0, "type": [0, 9], "typic": 4, "u": 2, "ubuntu": 6, "ui": [0, 2], "unburden": 4, "under": [3, 4], "understand": [2, 6], "unexpect": 0, "unforseen": 4, "unfortun": 2, "uniform": 0, "uninstal": 6, "uniqu": [0, 3, 4], "univers": 4, "unknown": 0, "unsplash_access_kei": 8, "unsplash_app_nam": 8, "until": 2, "up": [2, 3, 5, 7, 8], "updat": 9, "upgrad": 8, "upon": [0, 2], "url": [4, 9], "url_domain": 9, "us": [0, 3, 5, 8, 9, 11], "usabl": 2, "user": [0, 2, 6, 8], "usernam": 6, "utc": 0, "utf": 0, "uw": 2, "v": 6, "valid": [1, 2, 3, 10], "validate_the_participants_input": 2, "validate_zip": [0, 1], "validateinput": [0, 1], "valu": [0, 2, 3, 8, 9], "value_i_want_to_extract": 2, "valuecolumn": 9, "var": 8, "vari": [2, 9], "variabl": [6, 8], "varieti": 2, "variou": [0, 10, 11], "ve": 0, "verder": 2, "verifi": 3, "versa": 6, "version": [2, 3, 6, 8], "verwerken": 2, "vice": 6, "video": [2, 7], "view": 4, "virtual": 6, "vis1": 9, "vis2": 9, "vis3": 9, "vis4": 9, "visual": [0, 5, 10], "visuali": 9, "visualizatoin": 9, "volg": 2, "volum": 8, "vscode": 6, "wa": 2, "wai": [0, 2, 3, 6], "want": [0, 2, 3, 4, 8], "warranti": 4, "we": [2, 3, 4, 6, 7, 8, 9, 10, 11], "web": [2, 6, 8], "websit": 7, "websocket": 8, "week": 4, "weekday_cycl": 9, "weet": 2, "welcom": 10, "well": [2, 8, 9], "went": [2, 8], "what": [0, 2, 3, 4, 6, 9], "wheel": 11, "when": [0, 3, 4, 6, 9], "whenev": [2, 3], "where": [0, 2, 3, 4, 6, 9], "whether": [0, 3, 6], "which": [0, 2, 3, 6, 8, 9, 10], "while": [2, 3], "who": 4, "whole": 2, "whose": 0, "why": 3, "wide": 9, "wiki": [2, 10], "wildli": 3, "wilt": 2, "wise": 2, "within": [2, 9], "without": 5, "won": [2, 3, 6], "work": [3, 4, 5, 6, 8, 9], "workspac": 4, "worst": 3, "worth": 3, "would": [2, 3, 4], "wrap": 5, "wrapper": 0, "write": [3, 5, 6], "wrong": [2, 3], "wrote": 2, "x": [4, 8, 9], "x509": 8, "y": 9, "year": 9, "yield": 0, "yoda": [4, 8], "you": [0, 2, 3, 6, 8, 9, 10, 11], "your": [3, 5, 6, 8, 9, 10], "youremail": 8, "yourself": [2, 4], "youtub": [2, 3, 9], "yyyi": 9, "z": 9, "zeker": 2, "zero": [0, 9], "zf": 2, "zfile": 0, "zip": [0, 2, 3, 4], "zip_cont": 2, "zip_fil": 2, "zipfil": [0, 2, 3], "zone": 4, "\u4e16\u754c": 0}, "titles": ["API Reference", "API Reference", "Creating your own donation task", "Data donation checklist", "Deployment of the data donation task", "Articles", "Installation", "Introduction to Data Donation", "Try out Next with Docker", "Adding data visualizations", "The Data Donation Task Documentation", "Platform Documentation"], "titleterms": {"A": 9, "The": [2, 4, 10], "ad": 9, "add": 4, "after": 4, "aggreg": 9, "an": 4, "api": [0, 1, 2, 10], "appli": 4, "area": 9, "argument": 9, "articl": 5, "avail": 11, "bar": 9, "build": 8, "categor": 9, "categori": 9, "certif": 8, "chart": 9, "checklist": 3, "choos": 4, "cloud": 4, "commun": 4, "compos": 8, "configur": 8, "contain": 8, "creat": 2, "data": [2, 3, 4, 6, 7, 9, 10], "date": 9, "dateformat": 9, "deploy": 4, "detail": 9, "docker": 8, "document": [10, 11], "doe": 2, "don": 6, "donat": [2, 3, 4, 6, 7, 10], "einfra": 4, "exampl": 9, "extract": 0, "fill": 4, "first": 2, "form": 4, "from": 2, "gener": 9, "get": 10, "googl": 8, "grant": 4, "guid": [6, 9], "helper": 0, "how": 2, "i": 4, "imag": 8, "indic": 10, "instagram": 11, "instal": [2, 6], "instruct": 4, "introduct": 7, "level": 9, "limit": 2, "line": 9, "linux": 6, "mac": 6, "month": 9, "next": [4, 8], "nginx": 8, "oidc": 8, "option": 4, "osx": 6, "out": 8, "over": 9, "own": 2, "packag": 2, "paid": 4, "particip": 2, "per": 9, "perspect": 2, "platform": 11, "port": 0, "pre": 6, "prerequisit": 8, "prop": 0, "py": 2, "python": 2, "receiv": 4, "refer": [0, 1, 10], "requisit": 6, "research": 4, "run": 8, "script": [2, 10], "second": 9, "self": 4, "servic": 4, "setup": 8, "should": 4, "spec": 9, "specif": 9, "standard": 10, "start": [2, 10], "step": 8, "studi": [2, 4], "surf": 4, "t": 6, "tabl": [9, 10], "task": [2, 4, 6, 10], "text": 9, "time": 9, "tip": 2, "tl": 8, "translat": 9, "try": [2, 8], "unsplash": 8, "up": 9, "us": [2, 4, 6], "usag": 2, "valid": 0, "variabl": 9, "version": 4, "view": 9, "visual": 9, "want": 6, "when": 2, "which": 4, "window": 6, "without": 4, "wordcloud": 9, "work": 2, "wrap": 9, "write": 2, "wsl": 6, "yaml": 8, "yield": 2, "you": 4, "your": [2, 4]}}) \ No newline at end of file diff --git a/standard_scripts/index.html b/standard_scripts/index.html new file mode 100644 index 00000000..7fd8f25f --- /dev/null +++ b/standard_scripts/index.html @@ -0,0 +1,216 @@ + + + + + + + + Platform Documentation — Port 1.0.0 documentation + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
+
+ +
+

Platform Documentation

+

For various platforms we provide default extraction scripts, so you do not have to invent the wheel.

+

Freel free to use the extraction scripts as you see fit.

+

In order to use the scripts open the file src/framework/processing/py/port/main.py and change this line:

+
from port.script import process
+
+
+

to:

+
#from port.script import process
+
+# Change to (in this case the standard script for instagram will be used):
+from port.platforms.instagram import process
+
+
+
+

Available platforms

+

ChatGPT

+

This module contains an example flow of a ChatGPT data donation study

+
+
+

Instagram

+

Instagram

+

This module contains an example flow of a Instagram data donation study

+
+
+ + +
+
+
+
+ + + + + + +
+
+
+
+ + +
+ +
+
+
+ + + + +

Styled using the Piccolo Theme

+ + \ No newline at end of file