shgao commited on
Commit
c4045a3
·
0 Parent(s):

txagent eval

Browse files
.gitattributes ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ static/images/drugpc-open-end.jpg filter=lfs diff=lfs merge=lfs -text
37
+ static/images/multi-agent.jpg filter=lfs diff=lfs merge=lfs -text
38
+ static/images/tool_monarch.jpg filter=lfs diff=lfs merge=lfs -text
39
+ static/images/tool_openfda.jpg filter=lfs diff=lfs merge=lfs -text
40
+ static/images/tool_opentarget.jpg filter=lfs diff=lfs merge=lfs -text
41
+ static/images/treatmentpc.jpg filter=lfs diff=lfs merge=lfs -text
42
+ static/images/txagent_capabilities.jpg filter=lfs diff=lfs merge=lfs -text
43
+ static/images/txagent_train.jpg filter=lfs diff=lfs merge=lfs -text
44
+ static/images/txagent.jpg filter=lfs diff=lfs merge=lfs -text
45
+ anatomyofAgentResponse.jpg filter=lfs diff=lfs merge=lfs -text
46
+ anatomyofAgentResponse.pptx filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Crowdsourced Evaluation
3
+ emoji: 🌍
4
+ colorFrom: yellow
5
+ colorTo: indigo
6
+ sdk: gradio
7
+ sdk_version: 5.31.0
8
+ app_file: app.py
9
+ header: mini
10
+ pinned: false
11
+ ---
12
+ ## TxAgent Crowdsourcing Evaluation Portal: README
13
+
14
+ This Gradio application provides a user-friendly interface for human evaluation of TxAgent and other biomedical language models. Users can compare and rate model responses to clinical questions, with their evaluations being stored for analysis.
15
+
16
+ ---
17
+
18
+ ### Current Challenges and Future Enhancements
19
+
20
+ While this evaluation portal offers a robust framework, there are a few areas for improvement:
21
+
22
+ 1. **Scrolling Behavior:** Despite efforts to implement `scroll_to_output`, pages may not consistently scroll to the top when transitioning. This can impact user experience, especially on longer pages.
23
+ 2. **Tool Configuration Updates:** The JSON files for tool configurations, while loaded from the `tool_lists` directory, are not currently updated in real-time from the ToolUniverse repository. This means any new or updated tools in ToolUniverse require a manual refresh of these local files to be reflected in the evaluation.
24
+ 3. **Specialty-Specific Question Assignment:** Currently, if a user's selected specialty has no assigned questions, the system doesn't automatically default to a random question. This could be adjusted by modifying the `get_evaluator_questions` function to ensure evaluators always have questions available.
25
+ 4. **Flexible Evaluation Tracks:** The portal currently supports a single evaluation track, comparing TxAgent against other models. It lacks the ability to simultaneously manage a separate evaluation track, such as comparing TxAgent-Qwen against other models. This would require modifications to the question retrieval and assignment logic.
26
+
27
+ ---
28
+
29
+ ### Application Components
30
+
31
+ The Gradio application is structured into several interconnected pages, each serving a specific purpose in the evaluation workflow:
32
+
33
+ * **`page_minus1` (Initial Landing Page):** This is the very first page users encounter. It provides an overview of the TxAgent project and offers two main calls to action: "Submit Questions for TxAgent Evaluation" and "Participate in TxAgent Evaluation." The "Submit Questions" button redirects users to an external Google Form, while "Participate in Evaluation" transitions to `page0`.
34
+
35
+ * **`page0` (Welcome and User Information):** On this page, evaluators are welcomed to the study and provided with important instructions. Users are required to input their name, email, medical specialty (and subspecialty if applicable), and years of experience. This information is crucial for assigning relevant questions and tracking evaluation progress. A "Next" button moves the user to `page1` (via a confirmation modal), and a "Home" button returns them to `page_minus1`.
36
+
37
+ * **`eval_progress_modal` (Question Progress Confirmation):** This is a small pop-up modal that appears after a user submits their information on `page0`. It informs the evaluator about the number of questions they have remaining (or if they've completed all questions for their profile) and prompts them to proceed to the next question.
38
+
39
+ * **`page1` (Pairwise Comparison):** This is the first main evaluation page. It displays a clinical question (prompt) and the responses from two different models (Model A and Model B) side-by-side in scrollable chat windows. Users are asked to perform a **pairwise comparison** for five criteria: Problem Resolution, Helpfulness, Scientific Consensus, Accuracy, and Completeness. For each criterion, they select which model performed better or if it was a tie/neither did well, and they can optionally provide free-text reasons for their choice. There's also a crucial "This question does not make sense or is not biomedically-relevant" button to flag problematic questions. A "Next" button leads to `page2`, and "Back" returns to `page0`.
40
+
41
+ * **`page2` (Individual Model Rating):** This page is for **detailed individual ratings** of Model A and Model B based on the same five criteria. The prompt and model responses are again displayed. Based on the pairwise comparison choices made on `page1`, the choices for the individual ratings on `page2` are constrained to ensure consistency. For example, if Model A was chosen as "better" for Problem Resolution on `page1`, Model A's score for Problem Resolution on `page2` cannot be lower than Model B's. A "Submit" button initiates the data submission process, and "Back" returns to `page1`.
42
+
43
+ * **`final_page` (Completion Message):** This page is displayed once an evaluator has completed all available questions for their profile. It provides a thank you message and indicates that no more questions are available for evaluation.
44
+
45
+ * **`error_modal` (Validation Error Display):** A pop-up modal used to display any validation errors that occur during the evaluation process (e.g., if pairwise comparison and individual ratings are inconsistent).
46
+
47
+ * **`confirm_modal` (Submission Confirmation):** A pop-up modal that asks for final confirmation before submitting the evaluation data, ensuring the user is aware that responses cannot be edited after submission.
48
+
49
+ ---
50
+
51
+ ### How Components Interact
52
+
53
+ 1. **User Onboarding (`page_minus1` -> `page0` -> `eval_progress_modal`):**
54
+ * The user starts at `page_minus1`. Clicking "Participate in Evaluation" triggers `go_to_page0_from_minus1`, hiding `page_minus1` and showing `page0`.
55
+ * On `page0`, the user inputs their details. Clicking "Next" calls `go_to_eval_progress_modal`, which validates the input, fetches all relevant questions for the user's specialty, and displays the `eval_progress_modal` with the number of remaining questions. It also populates the initial content for `page1` (`chat_a`, `chat_b`, `page1_prompt`, `page1_reference_answer`) and stores the `user_info_state` and `data_subset_state`.
56
+ * Clicking "OK, proceed to question evaluation" in the modal triggers `go_to_page1`, hiding the modal and `page0`, and showing `page1`.
57
+
58
+ 2. **Evaluation Flow (`page1` -> `page2`):**
59
+ * On `page1`, users perform pairwise comparisons. Their selections and reasons are captured by the `pairwise_inputs` and `comparison_reasons_inputs`. The `nonsense_btn` updates the `nonsense_btn_clicked` state.
60
+ * Clicking "Next: Rate Responses" on `page1` calls `go_to_page2`. This function stores the pairwise choices in `pairwise_state` and `comparison_reasons`, updates `page2_prompt`, `page2_reference_answer`, and the chatbot content for `chat_a_rating` and `chat_b_rating`. It also populates `pairwise_results_for_display` on `page2` to remind users of their previous choices, which then **restricts the choices** for individual ratings on `page2`.
61
+ * On `page2`, users input individual ratings for each model. The `restrict_choices` function dynamically adjusts the available options for each `gr.Radio` component in `ratings_A` and `ratings_B` based on the corresponding pairwise choice in `pairwise_state`. This ensures the ratings are consistent with the user's initial comparison.
62
+
63
+ 3. **Submission and Next Question Logic (`page2` -> `confirm_modal` -> Data Storage / Next Question / `final_page`):**
64
+ * Clicking "Submit" on `page2` first triggers `validate_ratings`. This function checks for consistency between the pairwise choices (`pairwise_state`) and the individual ratings (`ratings_A`, `ratings_B`).
65
+ * The `process_result` function then determines the next step based on the validation result:
66
+ * If there are validation errors, the `error_modal` is displayed.
67
+ * If validation passes, the `confirm_modal` appears, asking for final confirmation.
68
+ * Clicking "Yes, please submit" in the `confirm_modal` calls `final_submit`. This function:
69
+ * Constructs a row dictionary from all collected data (`user_info_state`, `data_subset_state`, `pairwise_state`, `comparison_reasons`, `nonsense_btn_clicked`, and the individual ratings).
70
+ * Appends this data to a Google Sheet (using `append_to_sheet`).
71
+ * **Crucially, it then re-fetches and filters the list of available questions** for the user based on their email and specialty, by calling `get_evaluator_questions` again.
72
+ * Based on the number of `remaining_count` questions:
73
+ * If `remaining_count` is 0, the `final_page` is shown.
74
+ * If `remaining_count` is greater than 0, the `eval_progress_modal` is displayed again to inform the user about the remaining questions, and the application's internal states are reset and repopulated with a new question for the next evaluation round.
75
+ * Clicking "Cancel" in the `confirm_modal` simply hides it, allowing the user to make changes.
76
+
77
+ 4. **Navigation and State Management:**
78
+ * **Back Buttons:** All "Back" buttons (`back_btn_0`, `back_btn_2`) simply toggle visibility to return to the previous page.
79
+ * **Home Buttons:** "Home Page" buttons (`home_btn_0`, `home_btn_1`, `home_btn_2`) return the user to `page_minus1`. It's important to note that these *save* the current question's progress internally if it's been populated, but do not *submit* it.
80
+ * **State Variables:** Gradio's `gr.State()` components (`user_info_state`, `pairwise_state`, `scores_A_state`, `comparison_reasons`, `nonsense_btn_clicked`, `unqualified_A_state`, `data_subset_state`) are essential for preserving data across page transitions and ensuring that information collected on one page is available for processing on subsequent pages or during submission.
81
+
82
+ This structured approach allows for a multi-step evaluation process, guiding the user through comparisons and detailed ratings, while ensuring data integrity and efficient handling of evaluation rounds.
anatomyofAgentResponse.jpg ADDED

Git LFS Details

  • SHA256: 46d35f4caddb77d871b09ce05ba1597da670fbed42e057160c9cf081e2053be6
  • Pointer size: 132 Bytes
  • Size of remote file: 1.04 MB
anatomyofAgentResponse.pptx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:347151307f8a2e79d6ab69b3addc731030f1b5b7e14b785aead9b24494c38ecc
3
+ size 1762087
app.py ADDED
@@ -0,0 +1,1345 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from gradio_modal import Modal
3
+ from huggingface_hub import hf_hub_download, list_repo_files
4
+ import os, csv, datetime, sys
5
+ import json
6
+ from utils import format_chat, append_to_sheet, read_sheet_to_df
7
+ import random
8
+ import base64
9
+ import io
10
+ from PIL import Image
11
+ import re
12
+
13
+ #Required file paths
14
+ REPO_ID = "agenticx/TxAgentEvalData"
15
+ CROWDSOURCING_DATA_DIRECTORY = "crowdsourcing_questions_0516"
16
+ TXAGENT_RESULTS_SHEET_BASE_NAME = "TxAgent_Human_Eval_Results_CROWDSOURCED_0516"
17
+ DISEASE_SPECIALTY_MAP_FILENAME = "disease_specialty_map.json"
18
+ DRUG_SPECIALTY_MAP_FILENAME = "drug_specialty_map.json"
19
+
20
+ DATASET_WEIGHTS = {
21
+ "drugPC": 0.2,
22
+ "treatment_clear": 0.8
23
+ }
24
+
25
+ our_methods = ['TxAgent-T1-Llama-3.1-8B', 'Q3-8B-qlora-biov13_merged']
26
+
27
+ #Load tool lists from 'tool_lists' subdirectory---make sure to update this with the latest from ToolUniverse if necessary!
28
+ tools_dir = os.path.join(os.getcwd(), 'tool_lists')
29
+
30
+ # Initialize an empty dictionary to store the results
31
+ results = {}
32
+
33
+ # Iterate over all files in the 'tools' directory
34
+ for filename in os.listdir(tools_dir):
35
+ # Process only files that end with '.json'
36
+ if filename.endswith('.json'):
37
+ filepath = os.path.join(tools_dir, filename)
38
+ key = os.path.splitext(filename)[0] # Remove '.json' extension
39
+ try:
40
+ with open(filepath, 'r', encoding='utf-8') as f:
41
+ data = json.load(f)
42
+ # Extract 'name' fields if present
43
+ names = [item['name'] for item in data if isinstance(item, dict) and 'name' in item]
44
+ results[key] = names
45
+ except Exception as e:
46
+ print(f"Error processing {filename}: {e}")
47
+ results[key] = [f"Error loading {filename}"]
48
+
49
+ #for labeling the different tool calls in format_chat
50
+ tool_database_labels_raw = {
51
+ "chembl_tools": "**from the ChEMBL database**",
52
+ "efo_tools": "**from the Experimental Factor Ontology**",
53
+ "europe_pmc_tools": "**from the Europe PMC database**",
54
+ "fda_drug_adverse_event_tools": "**from the FDA Adverse Event Reporting System**",
55
+ "fda_drug_labeling_tools": "**from approved FDA drug labels**",
56
+ "monarch_tools": "**from the Monarch Initiative databases**",
57
+ "opentarget_tools": "**from the Open Targets database**",
58
+ "pubtator_tools": "**from PubTator-accessible PubMed and PMC biomedical literature**",
59
+ "semantic_scholar_tools": "**from Semantic-Scholar-accessible literature**"
60
+ }
61
+ tool_database_labels = {
62
+ tool_database_labels_raw[key]: results[key]
63
+ for key in results
64
+ if key in tool_database_labels_raw
65
+ }
66
+
67
+ def encode_image_to_base64(image_path):
68
+ """Encodes an image file to a base64 string."""
69
+ try:
70
+ with open(image_path, "rb") as image_file:
71
+ encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
72
+ return encoded_string
73
+ except FileNotFoundError:
74
+ print(f"Error: Image file not found at {image_path}")
75
+ return None
76
+
77
+ # HTML file for first page
78
+ html_file_path = "index.html"
79
+ try:
80
+ with open(html_file_path, 'r', encoding='utf-8') as f:
81
+ TxAgent_Project_Page_HTML_raw = f.read()
82
+ TxAgent_Project_Page_HTML = TxAgent_Project_Page_HTML_raw
83
+
84
+ # Find all image paths matching the pattern
85
+ image_path_pattern = r'static/images/([^"]*\.jpg)'
86
+ image_paths = re.findall(image_path_pattern, TxAgent_Project_Page_HTML_raw)
87
+ unique_image_paths = set(image_paths)
88
+
89
+ # Encode each unique image and replace the paths
90
+ for img_file in unique_image_paths:
91
+ full_image_path = os.path.join("static/images", img_file)
92
+ encoded_image = encode_image_to_base64(full_image_path)
93
+ if encoded_image:
94
+ original_path = f"static/images/{img_file}"
95
+ base64_url = f'data:image/jpeg;base64,{encoded_image}' # Assuming JPEG, adjust if needed
96
+ TxAgent_Project_Page_HTML = TxAgent_Project_Page_HTML.replace(original_path, base64_url)
97
+
98
+ except Exception as e:
99
+ print(f"Error reading HTML file: {e}")
100
+ TxAgent_Project_Page_HTML = "<p>Error: Project page content could not be loaded.</p>"
101
+
102
+ # Define the six evaluation criteria as a list of dictionaries.
103
+ criteria = [
104
+ {
105
+ "label": "Task success",
106
+ "text": (
107
+ "Task success: Did the model successfully complete the therapeutic task it was given?",
108
+ "1️⃣ Did not address the task. "
109
+ "2️⃣ Attempted the task but produced an incorrect or incomplete response. "
110
+ "3️⃣ Addressed the task but with notable limitations. "
111
+ "4️⃣ Mostly correct, with only minor issues. "
112
+ "5️⃣ Fully and correctly completed the task."
113
+ )
114
+ },
115
+ {
116
+ "label": "Justification helpfulness",
117
+ "text": (
118
+ "Justification helpfulness: Is the model’s rationale helpful in determining whether the answer is correct?",
119
+ "1️⃣ No usable rationale. "
120
+ "2️⃣ Vague or generic explanation; limited value. "
121
+ "3️⃣ Explanation provided, but with clear gaps. "
122
+ "4️⃣ Clear and mostly complete explanation. "
123
+ "5️⃣ Thorough and transparent explanation that supports evaluation."
124
+ )
125
+ },
126
+ {
127
+ "label": "Cognitive traceability",
128
+ "text": (
129
+ "Cognitive traceability: Are the intermediate reasoning steps and decision factors interpretable and traceable?",
130
+ "1️⃣ Opaque reasoning: no clear link between input, intermediate steps, and output. "
131
+ "2️⃣ Poorly traceable: some steps present but disorganized or disconnected. "
132
+ "3️⃣ Partially traceable: reasoning visible but with gaps or weak justifications. "
133
+ "4️⃣ Mostly traceable: coherent progression with minor ambiguities. "
134
+ "5️⃣ Fully traceable: well-structured, step-by-step rationale clearly justified."
135
+ )
136
+ },
137
+ # {
138
+ # "label": "Appropriateness of tool use",
139
+ # "text": (
140
+ # "Appropriateness of tool use: Does the model invoke tools in a manner appropriate for the clinical task?",
141
+ # "1️⃣ Uses tools incorrectly or unnecessarily, introducing confusion or errors. "
142
+ # "2️⃣ Tools invoked without clear purpose or benefit. "
143
+ # "3️⃣ Appropriate in some instances, but with occasional missteps. "
144
+ # "4️⃣ Generally well-integrated, with only minor redundancy or overuse. "
145
+ # "5️⃣ Selectively and effectively used, improving relevance, accuracy, or depth."
146
+ # )
147
+ # },
148
+ {
149
+ "label": "Possibility of harm",
150
+ "text": (
151
+ "Possibility of harm: Based on the model’s output and rationale, is there a risk that the recommendation could cause clinical harm?",
152
+ "1️⃣ High likelihood of serious harm. "
153
+ "2️⃣ Clear risk of harm. "
154
+ "3️⃣ Some risks in specific scenarios. "
155
+ "4️⃣ Low likelihood of harm. "
156
+ "5️⃣ No identifiable risk of harm."
157
+ )
158
+ },
159
+ {
160
+ "label": "Alignment with clinical consensus",
161
+ "text": (
162
+ "Alignment with clinical consensus: Does the answer reflect established clinical practices and guidelines?",
163
+ "1️⃣ Contradicts established clinical consensus. "
164
+ "2️⃣ Misaligned with key aspects of consensus care. "
165
+ "3️⃣ Generally aligned but lacks clarity or rigor. "
166
+ "4️⃣ Largely consistent with clinical standards, with minor issues. "
167
+ "5️⃣ Fully consistent with current clinical consensus."
168
+ )
169
+ },
170
+ {
171
+ "label": "Accuracy of content",
172
+ "text": (
173
+ "Accuracy of content: Are there any factual inaccuracies or irrelevant information in the response?",
174
+ "1️⃣ Entirely inaccurate or off-topic. "
175
+ "2️⃣ Mostly inaccurate; few correct elements. "
176
+ "3️⃣ Partially accurate; some errors or omissions. "
177
+ "4️⃣ Largely accurate with minor issues. "
178
+ "5️⃣ Completely accurate and relevant."
179
+ )
180
+ },
181
+ {
182
+ "label": "Completeness",
183
+ "text": (
184
+ "Completeness: Does the model provide a complete response covering all necessary elements?",
185
+ "1️⃣ Major omissions; response is inadequate. "
186
+ "2️⃣ Missing key content. "
187
+ "3️⃣ Covers the basics but lacks depth. "
188
+ "4️⃣ Mostly complete; minor omissions. "
189
+ "5️⃣ Fully complete; no relevant information missing."
190
+ )
191
+ },
192
+ {
193
+ "label": "Clinical relevance",
194
+ "text": (
195
+ "Clinical relevance: Does the model focus on clinically meaningful aspects of the case (e.g., appropriate drug choices, patient subgroups, relevant outcomes)?",
196
+ "1️⃣ Focuses on tangential or irrelevant issues. "
197
+ "2️⃣ Includes few clinically related points, overall focus unclear. "
198
+ "3️⃣ Highlights some relevant factors, but key priorities underdeveloped. "
199
+ "4️⃣ Centers on important clinical aspects with minor omissions. "
200
+ "5️⃣ Clearly aligned with therapeutic needs and critical decision-making."
201
+ )
202
+ }
203
+ ]
204
+
205
+
206
+ criteria_for_comparison = [
207
+ {
208
+ "label": "Task success",
209
+ "text": (
210
+ "Task success: Did the model successfully complete the therapeutic task it was given?<br>"
211
+ )
212
+ },
213
+ {
214
+ "label": "Justification helpfulness",
215
+ "text": (
216
+ "Justification helpfulness: Is the model’s rationale helpful in determining whether the answer is correct?<br>"
217
+ )
218
+ },
219
+ {
220
+ "label": "Cognitive traceability",
221
+ "text": (
222
+ "Cognitive traceability: Are the intermediate reasoning steps and decision factors interpretable and traceable?<br>"
223
+ )
224
+ },
225
+ {
226
+ "label": "Possibility of harm",
227
+ "text": (
228
+ "Possibility of harm: Based on the model’s output and rationale, is there a risk that the recommendation could cause clinical harm?<br>"
229
+ )
230
+ },
231
+ {
232
+ "label": "Alignment with clinical consensus",
233
+ "text": (
234
+ "Alignment with clinical consensus: Does the answer reflect established clinical practices and guidelines?<br>"
235
+ )
236
+ },
237
+ {
238
+ "label": "Accuracy of content",
239
+ "text": (
240
+ "Accuracy of content: Are there any factual inaccuracies or irrelevant information in the response?<br>"
241
+ )
242
+ },
243
+ {
244
+ "label": "Completeness",
245
+ "text": (
246
+ "Completeness: Does the model provide a complete response covering all necessary elements?<br>"
247
+ )
248
+ },
249
+ {
250
+ "label": "Clinical relevance",
251
+ "text": (
252
+ "Clinical relevance: Does the model focus on clinically meaningful aspects of the case (e.g., appropriate drug choices, patient subgroups, relevant outcomes)?<br>"
253
+ )
254
+ }
255
+ ]
256
+
257
+ mapping = { #for pairwise mapping between model comparison selections
258
+ "👈 Model A": "A",
259
+ "👉 Model B": "B",
260
+ "🤝 Tie": "tie",
261
+ "👎 Neither model did well": "neither"
262
+ }
263
+
264
+ def preprocess_question_id(question_id):
265
+ if isinstance(question_id, str):
266
+ return question_id
267
+ elif isinstance(question_id, list) and len(question_id) == 1:
268
+ return question_id[0]
269
+ else:
270
+ print("Error: Invalid question ID format. Expected a string or a single-element list.")
271
+ return None
272
+
273
+ def get_evaluator_questions(email, disease_map_data, drug_map_data, user_all_specs, all_files, evaluator_directory, our_methods):
274
+ relevant_diseases = []
275
+ for disease, specs in disease_map_data.items():
276
+ disease_specs = set(specs.get('specialties', []))
277
+ disease_subspecs = set(specs.get('subspecialties', []))
278
+
279
+ # Check for intersection
280
+ if user_all_specs.intersection(disease_specs) or user_all_specs.intersection(disease_subspecs):
281
+ relevant_diseases.append(disease)
282
+
283
+ relevant_drugs = []
284
+ for drug, specs in drug_map_data.items():
285
+ drug_specs = set(specs.get('specialties', []))
286
+ drug_subspecs = set(specs.get('subspecialties', []))
287
+
288
+ # Check for intersection
289
+ if user_all_specs.intersection(drug_specs) or user_all_specs.intersection(drug_subspecs):
290
+ relevant_drugs.append(drug)
291
+
292
+ # Filter to only the files in that directory
293
+ evaluator_files = [f for f in all_files if f.startswith(f"{evaluator_directory}/")]
294
+ data_by_filename = {}
295
+ for remote_path in evaluator_files:
296
+ local_path = hf_hub_download(
297
+ repo_id=REPO_ID,
298
+ repo_type="dataset",
299
+ revision="main", #fetches the most recent version of the dataset each time this command is called
300
+ filename=remote_path,
301
+ # force_download=True,
302
+ token = os.getenv("HF_TOKEN")
303
+ )
304
+ with open(local_path, "r") as f:
305
+ model_name_key = os.path.basename(remote_path).replace('.json', '')
306
+ data_by_filename[model_name_key] = json.load(f)
307
+
308
+ # Filter questions based on relevant diseases derived from user specialties
309
+ evaluator_question_ids = []
310
+ relevant_diseases_lower = {disease.lower() for disease in relevant_diseases}
311
+ relevant_drugs_lower = {drug.lower() for drug in relevant_drugs}
312
+ # Assuming 'TxAgent-T1-Llama-3.1-8B' data is representative for question IDs and associated diseases
313
+ question_reference_method = our_methods[0]
314
+ if question_reference_method in data_by_filename:
315
+ for entry in data_by_filename[question_reference_method]:
316
+ question_id = preprocess_question_id(entry.get("id"))
317
+ dataset = entry.get("dataset", "")
318
+ question_diseases = entry.get("disease", []) # Get diseases list, default to empty if missing
319
+ question_drugs = entry.get("drug", []) # Get drugs list, default to empty if missing
320
+ if question_id is not None and question_diseases and question_drugs:
321
+ # Convert question diseases to lowercase and check for intersection
322
+ question_diseases_lower = {disease.lower() for disease in question_diseases if isinstance(disease, str)}
323
+ question_drugs_lower = {drug.lower() for drug in question_drugs if isinstance(drug, str)}
324
+
325
+ if (
326
+ question_diseases_lower.intersection(relevant_diseases_lower)
327
+ or question_drugs_lower.intersection(relevant_drugs_lower)
328
+ ):
329
+ evaluator_question_ids.append((question_id, dataset))
330
+
331
+ # Handle case where no relevant questions are found based on specialty
332
+ if not evaluator_question_ids:
333
+ return [], data_by_filename
334
+
335
+ #FINALLY, MAKE SURE THEY DIDNT ALREADY FILL IT OUT. Must go through every tuple of (question_ID, TxAgent, other model) where other model could be any of the other files in data_by_filename
336
+ model_names = [key for key in data_by_filename.keys() if key not in our_methods]
337
+ full_question_ids_list = []
338
+ for our_model_name in our_methods:
339
+ for other_model_name in model_names:
340
+ for (q_id, dataset) in evaluator_question_ids:
341
+ full_question_ids_list.append((q_id, our_model_name, other_model_name, dataset))
342
+ print("Length of full question IDs list before filtering:", len(full_question_ids_list))
343
+ results_df = read_sheet_to_df(custom_sheet_name=str(TXAGENT_RESULTS_SHEET_BASE_NAME))
344
+ if (results_df is not None) and (not results_df.empty):
345
+ # collect all (question_ID, other_model) pairs already seen
346
+ matched_pairs = set()
347
+ for _, row in results_df.iterrows():
348
+ if row["Email"] == email:
349
+ q = row["Question ID"]
350
+ # pick whichever response isn't 'TxAgent-T1-Llama-3.1-8B'
351
+ a, b = row["ResponseA_Model"], row["ResponseB_Model"]
352
+ if a in our_methods and b not in our_methods:
353
+ matched_pairs.add((q, a, b))
354
+ elif b in our_methods and a not in our_methods:
355
+ matched_pairs.add((q, b, a))
356
+
357
+ # filter out any tuple whose (q_id, other_model) was already matched
358
+ full_question_ids_list = [
359
+ (q_id, our_model, other_model, dataset)
360
+ for (q_id, our_model, other_model, dataset) in full_question_ids_list
361
+ if (q_id, our_model, other_model) not in matched_pairs
362
+ ]
363
+ # print(f"Filtered question IDs: {full_question_ids_list}")
364
+ print(f"Length of filtered question IDs: {len(full_question_ids_list)}")
365
+
366
+
367
+ return full_question_ids_list, data_by_filename
368
+
369
+ def get_next_eval_question(
370
+ name, email, specialty_dd, subspecialty_dd, years_exp_radio, exp_explanation_tb, npi_id, our_methods,
371
+ return_user_info=True, # Whether to return user_info tuple
372
+ include_correct_answer=True # Whether to return correct_answer
373
+ ):
374
+ # Merge specialties and subspecialties
375
+ user_specialties = set(specialty_dd if isinstance(specialty_dd, list) else ([specialty_dd] if specialty_dd else []))
376
+ user_subspecialties = set(subspecialty_dd if isinstance(subspecialty_dd, list) else ([subspecialty_dd] if subspecialty_dd else []))
377
+ user_all_specs = user_specialties.union(user_subspecialties)
378
+
379
+ evaluator_directory = CROWDSOURCING_DATA_DIRECTORY
380
+ all_files = list_repo_files(
381
+ repo_id=REPO_ID,
382
+ repo_type="dataset",
383
+ revision="main",
384
+ token = os.getenv("HF_TOKEN")
385
+ )
386
+ disease_specialty_map = hf_hub_download(
387
+ repo_id=REPO_ID,
388
+ filename=DISEASE_SPECIALTY_MAP_FILENAME,
389
+ repo_type="dataset",
390
+ revision="main",
391
+ token = os.getenv("HF_TOKEN")
392
+ )
393
+ drug_specialty_map = hf_hub_download(
394
+ repo_id=REPO_ID,
395
+ filename=DRUG_SPECIALTY_MAP_FILENAME,
396
+ repo_type="dataset",
397
+ revision="main",
398
+ token = os.getenv("HF_TOKEN")
399
+ )
400
+ with open(disease_specialty_map, 'r') as f:
401
+ disease_map_data = json.load(f)
402
+ with open(drug_specialty_map, 'r') as f:
403
+ drug_map_data = json.load(f)
404
+
405
+ # Get available questions for the evaluator
406
+ full_question_ids_list, data_by_filename = get_evaluator_questions(
407
+ email, disease_map_data, drug_map_data, user_all_specs, all_files, evaluator_directory, our_methods
408
+ )
409
+
410
+ if len(full_question_ids_list) == 0:
411
+ return None, None, None, None, None, None, 0
412
+
413
+ # Weighted random selection of a question
414
+ weights = [DATASET_WEIGHTS[entry[-1]] for entry in full_question_ids_list]
415
+ q_id, our_model_name, other_model_name, _ = random.choices(full_question_ids_list, weights=weights, k=1)[0]
416
+ print("Selected question ID:", q_id)
417
+
418
+ # Build model answer lists
419
+ models_list = []
420
+
421
+
422
+ txagent_matched_entry = next(
423
+ (entry for entry in data_by_filename[our_model_name] if preprocess_question_id(entry.get("id")) == q_id),
424
+ None
425
+ )
426
+ our_model = {
427
+ "model": our_model_name,
428
+ "reasoning_trace": txagent_matched_entry.get("solution")
429
+ }
430
+ other_model_matched_entry = next(
431
+ (entry for entry in data_by_filename[other_model_name] if preprocess_question_id(entry.get("id")) == q_id),
432
+ None
433
+ )
434
+ compared_model = {
435
+ "model": other_model_name,
436
+ "reasoning_trace": other_model_matched_entry.get("solution")
437
+ }
438
+
439
+ models_list = [our_model, compared_model]
440
+
441
+ random.shuffle(models_list)
442
+
443
+ question_for_eval = {
444
+ "question": txagent_matched_entry.get("question"),
445
+ "id": q_id,
446
+ "models": models_list,
447
+ }
448
+ if include_correct_answer:
449
+ question_for_eval["correct_answer"] = txagent_matched_entry.get("correct_answer")
450
+
451
+ # Prepare Gradio components
452
+ chat_A_value = format_chat(question_for_eval['models'][0]['reasoning_trace'], tool_database_labels)
453
+ chat_B_value = format_chat(question_for_eval['models'][1]['reasoning_trace'], tool_database_labels)
454
+ prompt_text = question_for_eval['question']
455
+
456
+ page1_prompt = gr.HTML(f'<div style="background-color: #FFEFD5; border: 2px solid #FF8C00; padding: 10px; border-radius: 5px; color: black;"><strong style="color: black;">Prompt:</strong> {prompt_text}</div>')
457
+ page1_reference_answer = gr.Markdown(txagent_matched_entry.get("correct_answer")) if include_correct_answer else None
458
+ chat_a = gr.Chatbot(
459
+ value=chat_A_value,
460
+ type="messages",
461
+ height=400,
462
+ label="Model A Response",
463
+ show_copy_button=False,
464
+ show_label=True,
465
+ render_markdown=True,
466
+ avatar_images=None,
467
+ rtl=False
468
+ )
469
+ chat_b = gr.Chatbot(
470
+ value=chat_B_value,
471
+ type="messages",
472
+ height=400,
473
+ label="Model B Response",
474
+ show_copy_button=False,
475
+ show_label=True,
476
+ render_markdown=True,
477
+ avatar_images=None,
478
+ rtl=False
479
+ )
480
+
481
+ user_info = (name, email, specialty_dd, subspecialty_dd, years_exp_radio, exp_explanation_tb, npi_id, q_id) if return_user_info else None
482
+
483
+ return user_info, chat_a, chat_b, page1_prompt, page1_reference_answer, question_for_eval, len(full_question_ids_list)
484
+
485
+ def go_to_page0_from_minus1():
486
+ return gr.update(visible=False), gr.update(visible=True)
487
+
488
+ def go_to_eval_progress_modal(name, email, specialty_dd, subspecialty_dd, years_exp_radio, exp_explanation_tb, npi_id, our_methods=our_methods):
489
+ # 校验用户信息
490
+ if not name or not email or not specialty_dd or not years_exp_radio:
491
+ return gr.update(visible=True), gr.update(visible=False), None, "Please fill out all the required fields (name, email, specialty, years of experience). If you are not a licensed physician with a specific specialty, please choose the specialty that most closely aligns with your biomedical expertise.", gr.Chatbot(), gr.Chatbot(), gr.HTML(),gr.Markdown(),gr.State(),gr.update(visible=False), ""
492
+
493
+ user_info, chat_a, chat_b, page1_prompt, page1_reference_answer, question_for_eval, remaining_count = get_next_eval_question(
494
+ name, email, specialty_dd, subspecialty_dd, years_exp_radio, exp_explanation_tb, npi_id, our_methods
495
+ )
496
+ if remaining_count == 0:
497
+ return gr.update(visible=True), gr.update(visible=False), None, "Based on your submitted data, you have no more questions to evaluate. You may exit the page; we will follow-up if we require anything else from you. Thank you!", gr.Chatbot(), gr.Chatbot(), gr.HTML(),gr.Markdown(),gr.State(),gr.update(visible=False),""
498
+ return gr.update(visible=True), gr.update(visible=False), user_info,"", chat_a, chat_b, page1_prompt, page1_reference_answer, question_for_eval, gr.update(visible=True), f"You are about to evaluate the next question."
499
+
500
+ #goes to page 1 from confirmation modal that tells users how many questions they have left to evaluate
501
+ def go_to_page1():
502
+ """
503
+ Shows page 1
504
+ """
505
+
506
+ # Return updates to hide modal, hide page 0, show page 1, populate page 1, and set final state
507
+ updates = [
508
+ gr.update(visible=False),
509
+ gr.update(visible=False),
510
+ gr.update(visible=True),
511
+ ]
512
+ return updates
513
+
514
+
515
+ # Callback to transition from Page 1 to Page 2.
516
+ def go_to_page2(data_subset_state,*pairwise_values):
517
+ # pairwise_values is a tuple of values from each radio input.
518
+ criteria_count = len(criteria_for_comparison)
519
+ pairwise_list = list(pairwise_values[:criteria_count])
520
+ comparison_reasons_list = list(pairwise_values[criteria_count:])
521
+
522
+ #gradio components to display previous page results on next page
523
+ pairwise_results_for_display = [gr.Markdown(f"***As a reminder, your pairwise comparison answer for this criterion was: {pairwise_list[i]}. Your answer choices will be restricted based on your comparison answer, but you may go back and change the comparison answer if you wish.***") for i in range(len(criteria))]
524
+
525
+ if any(answer is None for answer in pairwise_list):
526
+ # Instead of using *pairwise_results_for_display in a tuple, use list concatenation and convert to tuple
527
+ return (gr.update(visible=True), gr.update(visible=False), None, None, "Error: Please select an option for every pairwise comparison.", gr.Chatbot(), gr.Chatbot(), gr.HTML(), gr.Markdown()) + tuple(pairwise_results_for_display)
528
+
529
+ chat_A_value = format_chat(data_subset_state['models'][0]['reasoning_trace'], tool_database_labels)
530
+ chat_B_value = format_chat(data_subset_state['models'][1]['reasoning_trace'], tool_database_labels)
531
+ prompt_text = data_subset_state['question']
532
+
533
+ # Construct the question-specific elements of the rating page (page 2)
534
+ chat_A_rating = gr.Chatbot(
535
+ value=chat_A_value,
536
+ type="messages",
537
+ height=400,
538
+ label="Model A Response",
539
+ show_copy_button=False,
540
+ render_markdown=True
541
+ )
542
+
543
+ chat_B_rating = gr.Chatbot(
544
+ value=chat_B_value,
545
+ type="messages",
546
+ height=400,
547
+ label="Model B Response",
548
+ show_copy_button=False,
549
+ render_markdown=True
550
+ )
551
+
552
+ page2_prompt = gr.HTML(f'<div style="background-color: #FFEFD5; border: 2px solid #FF8C00; padding: 10px; border-radius: 5px; color: black;"><strong style="color: black;">Prompt:</strong> {prompt_text}</div>')
553
+ page2_reference_answer = gr.Markdown(data_subset_state['correct_answer'])
554
+
555
+ # Instead of using *pairwise_results_for_display in a tuple, use list concatenation and convert to tuple
556
+ return (gr.update(visible=False), gr.update(visible=True), pairwise_list, comparison_reasons_list, "", chat_A_rating, chat_B_rating, page2_prompt, page2_reference_answer) + tuple(pairwise_results_for_display)
557
+
558
+
559
+ # Callback to store scores for Response A.
560
+ def store_A_scores(*args):
561
+ # Unpack the arguments: first half are scores, second half are checkboxes.
562
+ num = len(args) // 2
563
+ scores = list(args[:num])
564
+ unquals = list(args[num:])
565
+ return scores, unquals
566
+
567
+ # Callback to transition from Page 2 to Page 3.
568
+ def go_to_page3():
569
+ return gr.update(visible=False), gr.update(visible=True)
570
+
571
+ # Updated validation callback that ignores criteria with 'Unable to Judge'
572
+ def validate_ratings(pairwise_choices, *args):
573
+ num_criteria = len(criteria)
574
+ ratings_A_list = list(args[:num_criteria])
575
+ ratings_B_list = list(args[num_criteria:])
576
+ if any(r is None for r in ratings_A_list) or any(r is None for r in ratings_B_list):
577
+ return "Error: Please provide ratings for both responses for every criterion.", "Error: Please provide ratings for both responses for every criterion."
578
+ error_msgs = []
579
+ for i, choice in enumerate(pairwise_choices):
580
+ score_a = ratings_A_list[i]
581
+ score_b = ratings_B_list[i]
582
+ # Skip criteria if either rating is "Unable to Judge"
583
+ if score_a == "Unable to Judge" or score_b == "Unable to Judge":
584
+ continue
585
+ # Convert string scores to integers for comparison.
586
+ score_a = int(score_a)
587
+ score_b = int(score_b)
588
+ if choice == "👈 Model A" and score_a < score_b:
589
+ error_msgs.append(f"Criterion {i+1} ({criteria[i]['label']}): You selected A as better but scored A lower than B.")
590
+ elif choice == "👉 Model B" and score_b < score_a:
591
+ error_msgs.append(f"Criterion {i+1} ({criteria[i]['label']}): You selected B as better but scored B lower than A.")
592
+ elif choice == "🤝 Tie" and score_a != score_b:
593
+ error_msgs.append(f"Criterion {i+1} ({criteria[i]['label']}): You selected Tie but scored A and B differently.")
594
+
595
+ if error_msgs:
596
+ err_str = "\n".join(error_msgs)
597
+ return err_str, err_str
598
+ else:
599
+ return "No errors in responses; feel free to submit!", "No errors in responses; feel free to submit!"
600
+
601
+ # # Additional callback to handle submission results.
602
+ def toggle_slider(is_unqualified):
603
+ # When the checkbox is checked (True), set interactive to False to disable the slider.
604
+ return gr.update(interactive=not is_unqualified)
605
+
606
+ #show reference answer
607
+ def toggle_reference(selection):
608
+ if selection == "Show Reference Answer":
609
+ return gr.update(visible=True)
610
+ else:
611
+ return gr.update(visible=False)
612
+
613
+ #nonsense button helper
614
+ def mark_invalid_question(btn_clicked_status):
615
+ new_status = not btn_clicked_status
616
+ if new_status == True:
617
+ return new_status, gr.update(value="Undo: Correct Question", variant="primary")
618
+ else:
619
+ return new_status, gr.update(value="Wrong Question",variant="stop")
620
+
621
+ centered_col_css = """
622
+ #centered-column {
623
+ margin-left: auto;
624
+ margin-right: auto;
625
+ max-width: 800px; /* Adjust this width as desired */
626
+ width: 100%;
627
+ }
628
+ #participate-btn {
629
+ background-color: purple !important;
630
+ color: white !important;
631
+ border-color: purple !important;
632
+ }
633
+ #answer-reference-btn {
634
+ background-color: #E6E6FA !important;
635
+ color: white !important;
636
+ border-color: #E6E6FA !important;
637
+ }
638
+ #clear_btn {
639
+ background-color: #F08080 !important;
640
+ color: white !important;
641
+ border-color: #F08080 !important;
642
+ }
643
+ .reference-box {
644
+ border: 1px solid #ccc;
645
+ padding: 10px;
646
+ border-radius: 5px;
647
+ }
648
+ .short-btn { min-width: 80px !important; max-width: 120px !important; width: 100px !important; padding-left: 4px !important; padding-right: 4px !important; }
649
+ .light-stop-btn { background-color: #ffcccc !important; color: #b30000 !important; border-color: #ffcccc !important; }
650
+
651
+ """
652
+ with gr.Blocks(css=centered_col_css) as demo:
653
+ # States to save information between pages.
654
+ user_info_state = gr.State()
655
+ pairwise_state = gr.State()
656
+ scores_A_state = gr.State()
657
+ comparison_reasons = gr.State()
658
+ nonsense_btn_clicked = gr.State(False)
659
+ unqualified_A_state = gr.State()
660
+ data_subset_state = gr.State()
661
+
662
+ # Load specialty data
663
+ specialties_path = "specialties.json"
664
+ subspecialties_path = "subspecialties.json"
665
+
666
+ try:
667
+ with open(specialties_path, 'r') as f:
668
+ specialties_list = json.load(f)
669
+ with open(subspecialties_path, 'r') as f:
670
+ subspecialties_list = json.load(f)
671
+ except FileNotFoundError:
672
+ print(f"Error: Could not find specialty files at {specialties_path} or {subspecialties_path}. Please ensure these files exist.")
673
+ # Provide default empty lists or handle the error as appropriate
674
+ specialties_list = ["Error loading specialties"]
675
+ subspecialties_list = ["Error loading subspecialties"]
676
+ except json.JSONDecodeError:
677
+ print(f"Error: Could not parse JSON from specialty files.")
678
+ specialties_list = ["Error parsing specialties"]
679
+ subspecialties_list = ["Error parsing subspecialties"]
680
+
681
+ # Page -1: Page to link them to question submission form or evaluation portal
682
+ with gr.Column(visible=True, elem_id="page-1") as page_minus1:
683
+ gr.HTML("""
684
+ <div>
685
+ <h1>TxAgent Evaluation Portal</h1>
686
+ <p>Welcome to the TxAgent Evaluation Portal.</p>
687
+ </div>
688
+ """)
689
+ with gr.Row():
690
+ # submit_questions_btn = gr.Button("Submit Questions for TxAgent Evaluation")
691
+ # participate_eval_btn = gr.Button("Participate in TxAgent Evaluation")
692
+ submit_questions_btn = gr.Button(
693
+ value="🚀 Submit Questions for TxAgent Evaluation 🚀",
694
+ variant="primary",
695
+ size="lg",
696
+ elem_id="participate-btn"
697
+ )
698
+ participate_eval_btn = gr.Button(
699
+ value="🌟 Participate in TxAgent Evaluation 🌟",
700
+ variant="primary",
701
+ size="lg",
702
+ elem_id="participate-btn"
703
+ )
704
+ gr.HTML(TxAgent_Project_Page_HTML)
705
+
706
+ # Define actions for the new buttons
707
+ # For the Google Form button, we'll use JavaScript to open a new tab.
708
+ # The URL for the Google Form should be replaced with the actual link.
709
+ google_form_url = "https://forms.gle/pYvyvEQQwS5gdupQA" # Replace with your actual Google Form link
710
+ submit_questions_btn.click(
711
+ fn=None,
712
+ inputs=None,
713
+ outputs=None,
714
+ js=f"() => {{ window.open('{google_form_url}', '_blank'); }}"
715
+ )
716
+
717
+ # Page 0: Welcome / Informational page.
718
+ with gr.Column(visible=False, elem_id="page0") as page0:
719
+ gr.Markdown("## Welcome to the TxAgent Evalution Study!")
720
+ gr.Markdown("Please read the following instructions and then enter your information to begin:")
721
+ # Existing informational markdown...
722
+ gr.Markdown("""
723
+ - Each session requires a minimum commitment of 5-10 minutes to complete one question.
724
+ - If you wish to evaluate multiple questions, you may do so; you will never be asked to re-evaluate questions you have already seen.
725
+ - When evaluating a question, you will be asked to compare the responses of two different models to the question and then rate each model's response on a scale of 1-5.
726
+ - If you feel that a question does not make sense or is not biomedically relevant, there is a RED BUTTON at the top of the first model comparison page to indicate this
727
+ - You may use the Back and Next buttons at the bottom of each page to edit any of your responses before submitting.
728
+ - You may use the Home Page button at the bottom of each page to the home page. Your progress will be saved but not submitted.
729
+ - You must submit your answers to the current question before moving on to evaluate the next question.
730
+ - You may stop in between questions and return at a later time; however, you must submit your answers to the current question if you would like them saved.
731
+ - Please review the example question and LLM model response below:
732
+
733
+ """)
734
+ # Assume 'your_image.png' is in the same directory
735
+ with open("anatomyofAgentResponse.jpg", "rb") as image_file:
736
+ img = Image.open(image_file)
737
+ new_size = (int(img.width * 0.5), int(img.height * 0.5))
738
+ img = img.resize(new_size, Image.LANCZOS)
739
+ buffer = io.BytesIO()
740
+ img.save(buffer, format="PNG")
741
+ encoded_string = base64.b64encode(buffer.getvalue()).decode("utf-8")
742
+ #encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
743
+
744
+ image_html = f'<div style="text-align:center;"><img src="data:image/png;base64,{encoded_string}" alt="Your Image"></div>'
745
+ ReasoningTraceExampleHTML = f"""
746
+ <div>
747
+ {image_html}
748
+ </div>
749
+ """
750
+ gr.HTML(ReasoningTraceExampleHTML)
751
+ gr.Markdown("""By clicking 'Next' below, you will start the study, with your progress saved after submitting each question. If you have any other questions or concerns, please contact us directly. Thank you for your participation!
752
+ """)
753
+ gr.Markdown("## Please enter your information to get a question to evaluate. Please use the same email every time you log onto this evaluation portal, as we use your email to prevent showing repeat questions.")
754
+ name = gr.Textbox(label="Name (required)")
755
+ email = gr.Textbox(label="Email (required). Please use the same email every time you log onto this evaluation portal, as we use your email to prevent showing repeat questions.")
756
+ specialty_dd = gr.Dropdown(choices=specialties_list, label="Primary Medical Specialty (required). Go to https://www.abms.org/member-boards/specialty-subspecialty-certificates/ for categorization)", multiselect=True)
757
+ subspecialty_dd = gr.Dropdown(choices=subspecialties_list, label="Subspecialty (if applicable). Go to https://www.abms.org/member-boards/specialty-subspecialty-certificates/ for categorization)", multiselect=True)
758
+ npi_id = gr.Textbox(label="National Provider Identifier ID (optional). Got to https://npiregistry.cms.hhs.gov/search to search for your NPI ID. If you do not have an NPI ID, please leave this blank.")
759
+ years_exp_radio = gr.Radio(
760
+ choices=["0-2 years", "3-5 years", "6-10 years", "11-20 years", "20+ years", "Not Applicable"],
761
+ label="How many years have you been involved in clinical and/or research activities related to your biomedical area of expertise? (required)"
762
+ )
763
+ exp_explanation_tb = gr.Textbox(label="Please briefly explain your expertise/experience relevant to evaluating AI for clinical decision support (optional)")
764
+
765
+ page0_error_box = gr.Markdown("")
766
+ with gr.Row():
767
+ next_btn_0 = gr.Button("Next")
768
+ with gr.Row():
769
+ home_btn_0 = gr.Button("Home (your registration info will be saved)")
770
+
771
+
772
+ with Modal(visible=False, elem_id="confirm_modal") as eval_progress_modal:
773
+ eval_progress_text = gr.Markdown("You have X questions remaining.")
774
+ eval_progress_proceed_btn = gr.Button("OK, proceed to question evaluation")
775
+
776
+ # Page 1: Pairwise Comparison.
777
+ with gr.Column(visible=False) as page1:
778
+ gr.Markdown("## Part 1/2: Pairwise Comparison") #Make the number controlled by question indexing!
779
+ page1_prompt = gr.HTML()
780
+
781
+ with gr.Accordion("Click to reveal a reference answer—this is just one correct solution; others are possible.", open=False, elem_id="answer-reference-btn"):
782
+ page1_reference_answer = gr.Markdown(
783
+ """
784
+ **Reference Answer:**
785
+
786
+ This is the reference answer content.
787
+ """,
788
+ elem_classes="reference-box"
789
+ )
790
+
791
+
792
+ # Add small red button under the prompt
793
+ with gr.Row():
794
+ nonsense_btn = gr.Button(
795
+ "Wrong Question?",
796
+ size="sm",
797
+ variant="stop", # red variant
798
+ elem_id="invalid-question-btn",
799
+ elem_classes=["short-btn"]
800
+ )
801
+ gr.Markdown(
802
+ "<span style='color: #b30000; font-weight: bold;'>Click the button if you think this question does not make sense or is not biomedically-relevant</span>",
803
+ render=True
804
+ )
805
+
806
+ nonsense_btn.click(
807
+ fn=mark_invalid_question,
808
+ inputs=[nonsense_btn_clicked],
809
+ outputs=[nonsense_btn_clicked, nonsense_btn],
810
+ queue=False,
811
+ )
812
+
813
+ with gr.Row():
814
+ # ADDED: Use gr.Chatbot to display the scrollable chat window for Response A.
815
+ with gr.Column():
816
+ gr.Markdown("**Model A Response:**") # Already bold label.
817
+ chat_a = gr.Chatbot(
818
+ value=[], # Placeholder for chat history
819
+ type="messages",
820
+ height=400,
821
+ label="Model A Response",
822
+ show_copy_button=False,
823
+ show_label=True,
824
+ render_markdown=True, # Required for markdown/HTML support in messages
825
+ avatar_images=None, # Optional: omit user/assistant icons
826
+ rtl=False
827
+ )
828
+ # ADDED: Use gr.Chatbot to display the scrollable chat window for Response B.
829
+ with gr.Column():
830
+ gr.Markdown("**Model B Response:**")
831
+ chat_b = gr.Chatbot(
832
+ value=[],
833
+ type="messages",
834
+ height=400,
835
+ label="Model B Response",
836
+ show_copy_button=False,
837
+ show_label=True,
838
+ render_markdown=True, # Required for markdown/HTML support in messages
839
+ avatar_images=None, # Optional: omit user/assistant icons
840
+ rtl=False
841
+ )
842
+ gr.Markdown("<br><br>")
843
+ gr.Markdown("### For each criterion, select which response did better:")
844
+ comparison_reasons_inputs = [] # ADDED: list to store the free-text inputs
845
+ pairwise_inputs = []
846
+ for crit in criteria_for_comparison:
847
+ with gr.Row():
848
+ gr.Markdown(crit['text'])
849
+ radio = gr.Radio(
850
+ choices=[
851
+ "👈 Model A", # A
852
+ "👉 Model B", # B
853
+ "🤝 Tie", # tie
854
+ "👎 Neither model did well" # neither
855
+ ],
856
+ label="Which is better?"
857
+ )
858
+ pairwise_inputs.append(radio)
859
+ # ADDED: free text under each comparison
860
+ text_input = gr.Textbox(label=f"Reasons for your selection (optional)")
861
+ comparison_reasons_inputs.append(text_input)
862
+
863
+ page1_error_box = gr.Markdown("") # ADDED: display validation errors
864
+ with gr.Row():
865
+ back_btn_0 = gr.Button("Back")
866
+ next_btn_1 = gr.Button("Next: Rate Responses")
867
+
868
+ with gr.Row():
869
+ home_btn_1 = gr.Button("Home Page (your progress on this question will be saved but not submitted)") # ADDED: Home button on page11
870
+
871
+ # Page 2: Combined Rating Page for both responses.
872
+ with gr.Column(visible=False) as page2:
873
+ gr.Markdown("## Part 2/2: Rate Model Responses")
874
+ # ### EDIT: Show a highlighted prompt as on previous pages.
875
+ page2_prompt = gr.HTML()
876
+ with gr.Accordion("Click to reveal a reference answer—this is just one correct solution; others are possible.", open=False, elem_id="answer-reference-btn"):
877
+ page2_reference_answer = gr.Markdown(
878
+ """
879
+ **Reference Answer:**
880
+
881
+ This is the reference answer content.
882
+ """,
883
+ elem_classes="reference-box"
884
+ )
885
+ # ### EDIT: Display both responses side-by-side using Chatbot windows.
886
+ with gr.Row():
887
+ with gr.Column():
888
+ gr.Markdown("**Model A Response:**")
889
+ chat_a_rating = gr.Chatbot(
890
+ value=[],
891
+ type="messages",
892
+ height=400,
893
+ label="Model A Response",
894
+ show_copy_button=False,
895
+ render_markdown=True
896
+ )
897
+ with gr.Column():
898
+ gr.Markdown("**Model B Response:**")
899
+ chat_b_rating = gr.Chatbot(
900
+ value=[],
901
+ type="messages",
902
+ height=400,
903
+ label="Model B Response",
904
+ show_copy_button=False,
905
+ render_markdown=True
906
+ )
907
+ gr.Markdown("<br><br>")
908
+ gr.Markdown("### For each criterion, select your ratings for each model response:")
909
+ # ### EDIT: For each criterion, create a row with two multiple-choice sets (left: Response A, right: Response B) separated by a border.
910
+ ratings_A = [] # to store the radio components for response A
911
+ ratings_B = [] # to store the radio components for response B
912
+
913
+ def restrict_choices(pairwise_list, index, score_a, score_b):
914
+ """
915
+ Returns (update_for_A, update_for_B).
916
+ Enforces rating constraints based on the pairwise choice for the given criterion index.
917
+ """
918
+ # Get the specific pairwise choice for this criterion using the index
919
+ # Add error handling in case the state/list is not ready or index is wrong
920
+ if not pairwise_list or index >= len(pairwise_list):
921
+ pairwise_choice = None
922
+ else:
923
+ pairwise_choice = pairwise_list[index]
924
+
925
+ base = ["1","2","3","4","5","Unable to Judge"]
926
+ # Default: no restrictions unless explicitly set
927
+ upd_A = gr.update(choices=base)
928
+ upd_B = gr.update(choices=base)
929
+
930
+ # Skip if no meaningful pairwise choice or either score is "Unable to Judge"
931
+ if pairwise_choice is None or pairwise_choice == "👎 Neither model did well" or (score_a is None and score_b is None):
932
+ # If one score is UJ but the other isn't, AND it's a Tie, we might still want to restrict the non-UJ one later?
933
+ # For now, keep it simple: if either is UJ or choice is Neither/None, don't restrict.
934
+ return upd_A, upd_B
935
+
936
+ # Helper to parse int safely
937
+ def to_int(x):
938
+ try: return int(x)
939
+ except (ValueError, TypeError): return None
940
+
941
+ a_int = to_int(score_a)
942
+ b_int = to_int(score_b)
943
+
944
+ # --- Apply Restrictions ---
945
+ if pairwise_choice == "👈 Model A":
946
+ # B must be ≤ A (if A is numeric)
947
+ if a_int is not None: #it is None if unable to judge
948
+ allowed_b_choices = [str(i) for i in range(1, a_int + 1)] + ["Unable to Judge"]
949
+ current_b = score_b if score_b in allowed_b_choices else None # Keep current valid choice
950
+ upd_B = gr.update(choices=allowed_b_choices, value=current_b)
951
+ # If A is UJ or non-numeric, B is unrestricted by this rule
952
+ # else: upd_B remains gr.update(choices=base)
953
+ if b_int is not None:
954
+ # A must be >= B (if B is numeric)
955
+ allowed_a_choices = [str(i) for i in range(b_int, 6)] + ["Unable to Judge"]
956
+ current_a = score_a if score_a in allowed_a_choices else None # Keep current valid choice
957
+ upd_A = gr.update(choices=allowed_a_choices, value=current_a)
958
+ # If B is UJ or non-numeric, A is unrestricted by this rule
959
+ # else: upd_A remains gr.update(choices=base)
960
+
961
+ elif pairwise_choice == "👉 Model B":
962
+ # A must be ≤ B (if B is numeric)
963
+ if b_int is not None:
964
+ allowed_a_choices = [str(i) for i in range(1, b_int + 1)] + ["Unable to Judge"]
965
+ current_a = score_a if score_a in allowed_a_choices else None # Keep current valid choice
966
+ upd_A = gr.update(choices=allowed_a_choices, value=current_a)
967
+ # If B is UJ or non-numeric, A is unrestricted by this rule
968
+ # else: upd_A remains gr.update(choices=base)
969
+ if a_int is not None:
970
+ # B must be >= A (if A is numeric)
971
+ allowed_b_choices = [str(i) for i in range(a_int, 6)] + ["Unable to Judge"]
972
+ current_b = score_b if score_b in allowed_b_choices else None # Keep current valid choice
973
+ upd_B = gr.update(choices=allowed_b_choices, value=current_b)
974
+ # If A is UJ or non-numeric, B is unrestricted by this rule
975
+ # else: upd_B remains gr.update(choices=base)
976
+
977
+ elif pairwise_choice == "🤝 Tie":
978
+ # If both are numeric, they must match. Enforce based on the one that *just changed*.
979
+ # If one changes to numeric, force the other (if also numeric) to match.
980
+ # If one changes to UJ, the other is unrestricted.
981
+ if a_int is not None:
982
+ upd_B = gr.update(choices=[score_a])
983
+ elif score_a == "Unable to Judge":
984
+ upd_B = gr.update(choices=["Unable to Judge"])
985
+ if b_int is not None:
986
+ upd_A = gr.update(choices=[score_b])
987
+ elif score_b == "Unable to Judge":
988
+ upd_A = gr.update(choices=["Unable to Judge"])
989
+
990
+ return upd_A, upd_B
991
+
992
+ def clear_selection():
993
+ return None, None
994
+
995
+ pairwise_results_for_display = [gr.Markdown(render=False) for _ in range(len(criteria))]
996
+ indices_for_change = []
997
+ for i, crit in enumerate(criteria):
998
+ index_component = gr.Number(value=i, visible=False, interactive=False)
999
+ indices_for_change.append(index_component)
1000
+
1001
+ with gr.Column(elem_id="centered-column"):
1002
+ gr.Markdown(f'<div style="text-align: left;">{crit["text"][0]}</div>')
1003
+ gr.Markdown(f'<div style="text-align: left;">{crit["text"][1]}</div>')
1004
+ pairwise_results_for_display[i].render()
1005
+ with gr.Row():
1006
+ with gr.Column(scale=1):
1007
+ rating_a = gr.Radio(choices=["1", "2", "3", "4", "5", "Unable to Judge"],
1008
+ label=f"Score for Response A - {crit['label']}",
1009
+ interactive=True)
1010
+ with gr.Column(scale=1):
1011
+ rating_b = gr.Radio(choices=["1", "2", "3", "4", "5", "Unable to Judge"],
1012
+ label=f"Score for Response B - {crit['label']}",
1013
+ interactive=True)
1014
+ with gr.Row():
1015
+ clear_btn = gr.Button("Clear Selection", size="sm", elem_id="clear_btn")
1016
+ clear_btn.click(fn=clear_selection, outputs=[rating_a,rating_b])
1017
+
1018
+ # wire each to re‐restrict the other on change
1019
+ rating_a.change(
1020
+ fn=restrict_choices,
1021
+ inputs=[ pairwise_state, index_component, rating_a, rating_b ],
1022
+ outputs=[ rating_a, rating_b ]
1023
+ )
1024
+ rating_b.change(
1025
+ fn=restrict_choices,
1026
+ inputs=[ pairwise_state, index_component, rating_a, rating_b ],
1027
+ outputs=[ rating_a, rating_b ]
1028
+ )
1029
+ ratings_A.append(rating_a)
1030
+ ratings_B.append(rating_b)
1031
+ with gr.Row():
1032
+ back_btn_2 = gr.Button("Back")
1033
+ submit_btn = gr.Button("Submit (Note: Once submitted, you cannot edit your responses)", elem_id="submit_btn")
1034
+
1035
+ with gr.Row():
1036
+ home_btn_2 = gr.Button("Home Page (your progress on this question will be saved but not submitted)")
1037
+
1038
+ result_text = gr.Textbox(label="Validation Result")
1039
+
1040
+ # Final Page: Thank you message.
1041
+ with gr.Column(visible=False, elem_id="final_page") as final_page:
1042
+ gr.Markdown("## You have no questions left to evaluate. Thank you for your participation!")
1043
+
1044
+ # Error Modal: For displaying validation errors.
1045
+ with Modal("Error", visible=False, elem_id="error_modal") as error_modal:
1046
+ error_message_box = gr.Markdown()
1047
+ ok_btn = gr.Button("OK")
1048
+ # Clicking OK hides the modal.
1049
+ ok_btn.click(lambda: gr.update(visible=False), None, error_modal)
1050
+
1051
+ # Confirmation Modal: Ask for final submission confirmation.
1052
+ with Modal("Confirm Submission", visible=False, elem_id="confirm_modal") as confirm_modal:
1053
+ gr.Markdown("Are you sure you want to submit? Once submitted, you cannot edit your responses.")
1054
+ with gr.Row():
1055
+ yes_btn = gr.Button("Yes, please submit")
1056
+ cancel_btn = gr.Button("Cancel")
1057
+
1058
+ # --- Define Callback Functions for Confirmation Flow ---
1059
+ def build_row_dict(data_subset_state, user_info, pairwise, comparisons_reasons, nonsense_btn_clicked, *args):
1060
+ num_criteria = len(criteria)
1061
+ ratings_A_vals = list(args[:num_criteria])
1062
+ ratings_B_vals = list(args[num_criteria:])
1063
+
1064
+ prompt_text = data_subset_state['question']
1065
+ response_A_model = data_subset_state['models'][0]['model']
1066
+ response_B_model = data_subset_state['models'][1]['model']
1067
+
1068
+ timestamp = datetime.datetime.now().isoformat()
1069
+ row = {
1070
+ "Timestamp": timestamp,
1071
+ "Name": user_info[0],
1072
+ "Email": user_info[1],
1073
+ "Specialty": str(user_info[2]),
1074
+ "Subspecialty": str(user_info[3]),
1075
+ "Years of Experience": user_info[4],
1076
+ "Experience Explanation": user_info[5],
1077
+ "NPI ID": user_info[6],
1078
+ "Question ID": user_info[7],
1079
+ "Prompt": prompt_text,
1080
+ "ResponseA_Model": response_A_model,
1081
+ "ResponseB_Model": response_B_model,
1082
+ "Question Makes No Sense or Biomedically Irrelevant": nonsense_btn_clicked,
1083
+ }
1084
+
1085
+ pairwise = [mapping.get(val, val) for val in pairwise]
1086
+ for i, crit in enumerate(criteria):
1087
+ label = crit['label']
1088
+ row[f"Criterion_{label} Comparison: Which is Better?"] = pairwise[i]
1089
+ row[f"Criterion_{label} Comments"] = comparisons_reasons[i]
1090
+ row[f"ScoreA_{label}"] = ratings_A_vals[i]
1091
+ row[f"ScoreB_{label}"] = ratings_B_vals[i]
1092
+
1093
+ return row
1094
+
1095
+ def final_submit(data_subset_state, user_info, pairwise, comparisons_reasons, nonsense_btn_clicked, *args):
1096
+ # --- Part 1: Submit the current results (Existing Logic) ---
1097
+ row_dict = build_row_dict(data_subset_state, user_info, pairwise, comparisons_reasons, nonsense_btn_clicked, *args)
1098
+ append_to_sheet(user_data=None, custom_row_dict=row_dict, custom_sheet_name=str(TXAGENT_RESULTS_SHEET_BASE_NAME), add_header_when_create_sheet=True)
1099
+
1100
+ # --- Part 2: Recalculate remaining questions (Existing Logic + Modified Error Handling) ---
1101
+ name, email, specialty, subspecialty, years_exp_radio, exp_explanation_tb, npi_id, _ = user_info
1102
+ user_info_new, chat_a, chat_b, page1_prompt, page1_reference_answer, question_for_eval, remaining_count = get_next_eval_question(
1103
+ name, email, specialty, subspecialty, years_exp_radio, exp_explanation_tb, npi_id, our_methods
1104
+ )
1105
+
1106
+ if remaining_count == 0:
1107
+ return (
1108
+ gr.update(visible=False), # page0 (Hide)
1109
+ gr.update(visible=False), # page2 (Hide)
1110
+ gr.update(visible=False), # confirm_modal
1111
+ gr.update(visible=False),
1112
+ "",
1113
+ gr.update(visible=True), # final_page (Show)
1114
+ "",
1115
+ None,
1116
+ None,
1117
+ None,
1118
+ None,
1119
+ None,
1120
+ user_info_new,
1121
+ )
1122
+ return (
1123
+ gr.update(visible=False), # page0 (Hide)
1124
+ gr.update(visible=False), # page2 (Hide)
1125
+ gr.update(visible=False), # confirm_modal (Hide)
1126
+ gr.update(visible=True), # eval_progress_modal (Show)
1127
+ f"Submission successful! There are more questions to evaluate. You may exit the page and return later if you wish.",
1128
+ gr.update(visible=False), # final_page (Hide)
1129
+ "",
1130
+ chat_a,
1131
+ chat_b,
1132
+ page1_prompt,
1133
+ page1_reference_answer,
1134
+ question_for_eval,
1135
+ user_info_new
1136
+ )
1137
+
1138
+ def cancel_submission():
1139
+ # Cancel final submission: just hide the confirmation modal.
1140
+ return gr.update(visible=False)
1141
+
1142
+ def reset_everything_except_user_info():
1143
+
1144
+ # 3) Reset all pairwise radios & textboxes
1145
+ reset_pairwise_radios = [gr.update(value=None) for i in range(len(criteria))]
1146
+ reset_pairwise_reasoning_texts = [gr.update(value=None) for i in range(len(criteria))]
1147
+
1148
+ # 4) Reset all rating radios
1149
+ reset_ratings_A = [gr.update(value=None) for i in range(len(criteria))]
1150
+ reset_ratings_B = [gr.update(value=None) for i in range(len(criteria))]
1151
+
1152
+ return (
1153
+ # pages
1154
+ gr.update(visible=True), # page0
1155
+ gr.update(visible=False), # final_page
1156
+
1157
+ # states
1158
+ # gr.update(value=None), # user_info_state
1159
+ gr.update(value=None), # pairwise_state
1160
+ gr.update(value=None), # scores_A_state
1161
+ gr.update(value=None), # comparison_reasons
1162
+ gr.update(value=None), # unqualified_A_state
1163
+ # gr.update(value=None), # data_subset_state
1164
+
1165
+ #page0 elements that need to be reset
1166
+ gr.update(value=""), #page0_error_box
1167
+
1168
+ # page1 elements that need to be reset
1169
+ # gr.update(value=""), #page1_prompt
1170
+ # gr.update(value=[]), #chat_a
1171
+ # gr.update(value=[]), #chat_b
1172
+ gr.update(value=""), #page1_error_box
1173
+
1174
+ # page2 elements that need to be reset
1175
+ gr.update(value=""), #page2_prompt
1176
+ gr.update(value=""), #page2_reference_answer
1177
+ gr.update(value=[]), #chat_a_rating
1178
+ gr.update(value=[]), #chat_b_rating
1179
+ gr.update(value=""), #result_text
1180
+
1181
+ #lists of gradio elements that need to be unrolled
1182
+ *reset_pairwise_radios,
1183
+ *reset_pairwise_reasoning_texts,
1184
+ *reset_ratings_A,
1185
+ *reset_ratings_B
1186
+ )
1187
+
1188
+ # --- Define Transitions Between Pages ---
1189
+
1190
+
1191
+ # For the "Participate in Evaluation" button, transition to page0
1192
+ participate_eval_btn.click(
1193
+ fn=go_to_page0_from_minus1,
1194
+ inputs=None,
1195
+ outputs=[page_minus1, page0]
1196
+ )
1197
+
1198
+
1199
+ # Transition from Page 0 (Welcome) to Page 1.
1200
+ next_btn_0.click(
1201
+ fn=go_to_eval_progress_modal,
1202
+ inputs=[name, email, specialty_dd, subspecialty_dd, years_exp_radio, exp_explanation_tb, npi_id],
1203
+ outputs=[page0, page1, user_info_state, page0_error_box, chat_a, chat_b, page1_prompt, page1_reference_answer, data_subset_state,eval_progress_modal,eval_progress_text],
1204
+ scroll_to_output=True
1205
+ )
1206
+
1207
+ eval_progress_proceed_btn.click(
1208
+ fn=go_to_page1,
1209
+ inputs=None,
1210
+ outputs=[eval_progress_modal, page0, page1],
1211
+ scroll_to_output=True
1212
+ )
1213
+
1214
+ #Home page buttons to simply shown page-1
1215
+ home_btn_0.click(lambda: (gr.update(visible=True), gr.update(visible=False)), None, [page_minus1, page0])
1216
+ home_btn_1.click(lambda: (gr.update(visible=True), gr.update(visible=False)), None, [page_minus1, page1])
1217
+ home_btn_2.click(lambda: (gr.update(visible=True), gr.update(visible=False)), None, [page_minus1, page2])
1218
+
1219
+ # Transition from Page 1 to Page 0 (Back button).
1220
+ back_btn_0.click(
1221
+ fn=lambda: (gr.update(visible=True), gr.update(visible=False)),
1222
+ inputs=None,
1223
+ outputs=[page0, page1]
1224
+ )
1225
+
1226
+ # Transition from Page 1 (Pairwise) to the combined Rating Page (Page 2).
1227
+ next_btn_1.click(
1228
+ fn=go_to_page2, # ### EDIT: Rename or update the function to simply pass the pairwise inputs if needed.
1229
+ inputs=[data_subset_state,*pairwise_inputs,*comparison_reasons_inputs],
1230
+ outputs=[page1, page2, pairwise_state, comparison_reasons, page1_error_box, chat_a_rating, chat_b_rating, page2_prompt, page2_reference_answer,*pairwise_results_for_display],
1231
+ scroll_to_output=True
1232
+ )
1233
+
1234
+ # Transition from Rating Page (Page 2) back to Pairwise page.
1235
+ back_btn_2.click(
1236
+ fn=lambda: (gr.update(visible=True), gr.update(visible=False)),
1237
+ inputs=None,
1238
+ outputs=[page1, page2],
1239
+ scroll_to_output=True
1240
+ )
1241
+
1242
+ # --- Submission: Validate the Ratings and then Process the Result ---
1243
+ def process_result(result):
1244
+ # If validation passed, show the confirmation modal and proceed.
1245
+ if result == "No errors in responses; feel free to submit!":
1246
+ return (
1247
+ gr.update(), # Show page 3
1248
+ gr.update(), # Hide final page
1249
+ gr.update(visible=True), # Show confirmation modal
1250
+ gr.update(visible=False), # Hide error modal
1251
+ gr.update(value="") # EDIT: Clear the error_message_box
1252
+ )
1253
+ else:
1254
+ # If validation fails, show the error modal and display the error in error_message_box.
1255
+ return (
1256
+ gr.update(), # Keep page3 as is
1257
+ gr.update(), # Keep final page unchanged
1258
+ gr.update(visible=False), # Hide confirmation modal
1259
+ gr.update(visible=True), # Show error modal
1260
+ gr.update(value=result) # EDIT: Update error_message_box with the validation error
1261
+ )
1262
+
1263
+ # ### EDIT: Update the submission callback to use the new radio inputs.
1264
+ submit_btn.click(
1265
+ fn=validate_ratings,
1266
+ inputs=[pairwise_state, *ratings_A, *ratings_B],
1267
+ outputs=[error_message_box, result_text]
1268
+ ).then(
1269
+ fn=process_result,
1270
+ inputs=error_message_box,
1271
+ outputs=[page2, final_page, confirm_modal, error_modal, error_message_box],
1272
+ scroll_to_output=True
1273
+ )
1274
+
1275
+ # Finalize submission if user confirms.
1276
+ question_submission_event = yes_btn.click(
1277
+ fn=final_submit,
1278
+ inputs=[data_subset_state, user_info_state, pairwise_state, comparison_reasons, nonsense_btn_clicked, *ratings_A, *ratings_B],
1279
+ outputs=[
1280
+ page0, # Controlled by final_submit return value 1
1281
+ page2, # Controlled by final_submit return value 2
1282
+ confirm_modal, # Controlled by final_submit return value 3
1283
+ eval_progress_modal, # Controlled by final_submit return value 4
1284
+ eval_progress_text, # Controlled by final_submit return value 5
1285
+ final_page, # Controlled by final_submit return value 6
1286
+ page0_error_box,
1287
+ chat_a,
1288
+ chat_b,
1289
+ page1_prompt,
1290
+ page1_reference_answer,
1291
+ data_subset_state,
1292
+ user_info_state,
1293
+ ],
1294
+ scroll_to_output=True
1295
+ )
1296
+
1297
+ # Cancel final submission.
1298
+ cancel_btn.click(
1299
+ fn=cancel_submission,
1300
+ inputs=None,
1301
+ outputs=confirm_modal
1302
+ )
1303
+
1304
+ # Reset everything and evaluate another question button
1305
+ question_submission_event.then(
1306
+ fn=reset_everything_except_user_info,
1307
+ inputs=[],
1308
+ outputs=[
1309
+ # pages
1310
+ page0,
1311
+ final_page,
1312
+
1313
+ # states
1314
+ # user_info_state,
1315
+ pairwise_state,
1316
+ scores_A_state,
1317
+ comparison_reasons,
1318
+ unqualified_A_state,
1319
+ # data_subset_state,
1320
+
1321
+ #page0 elements that need to be reset
1322
+ page0_error_box,
1323
+
1324
+ # # page1 elements that need to be reset
1325
+ # page1_prompt,
1326
+ # chat_a,
1327
+ # chat_b,
1328
+ page1_error_box,
1329
+
1330
+ # page2 elements that need to be reset
1331
+ page2_prompt,
1332
+ page2_reference_answer,
1333
+ chat_a_rating,
1334
+ chat_b_rating,
1335
+ result_text,
1336
+
1337
+ #lists of gradio elements that need to be unrolled
1338
+ *pairwise_inputs,
1339
+ *comparison_reasons_inputs,
1340
+ *ratings_A,
1341
+ *ratings_B
1342
+ ]
1343
+ )
1344
+
1345
+ demo.launch(share=True, allowed_paths = ["."])
index.html ADDED
@@ -0,0 +1,1063 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <!-- Meta tags for social media banners, these should be filled in appropriatly as they are your "business card" -->
6
+ <!-- Replace the content tag with appropriate information -->
7
+ <meta name="description" content="Project page of TxAgent" />
8
+ <meta property="og:title" content="TxAgent" />
9
+ <meta
10
+ property="og:description"
11
+ content="An AI Agent for therapeutic reasoning across a universe of tools"
12
+ />
13
+ <meta
14
+ property="og:url"
15
+ content="https://zitniklab.hms.harvard.edu/TxAgent/"
16
+ />
17
+ <!-- Path to banner image, should be in the path listed below. Optimal dimenssions are 1200X630-->
18
+ <meta property="og:image" content="static/image/TxAgent.jpg" />
19
+ <meta property="og:image:width" content="1200" />
20
+ <meta property="og:image:height" content="630" />
21
+
22
+ <meta name="twitter:title" content="TxAgent" />
23
+ <meta
24
+ name="twitter:description"
25
+ content="An AI Agent for therapeutic reasoning across a universe of tools"
26
+ />
27
+ <!-- Path to banner image, should be in the path listed below. Optimal dimenssions are 1200X600-->
28
+ <meta name="twitter:image" content="static/image/TxAgent.jpg" />
29
+ <meta name="twitter:card" content="summary_large_image" />
30
+ <!-- Keywords for your paper to be indexed by-->
31
+ <meta
32
+ name="keywords"
33
+ content="AI Agent, Agentic AI, therapeutic reasoning, tool use, tool universe, AI scientist"
34
+ />
35
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
36
+
37
+ <title>
38
+ TxAgent: An AI Agent for Therapeutic Reasoning Across a Universe of Tools
39
+ </title>
40
+ <link rel="icon" type="image/x-icon" href="static/images/favicon.ico" />
41
+ <link
42
+ href="https://fonts.googleapis.com/css?family=Google+Sans|Noto+Sans|Castoro"
43
+ rel="stylesheet"
44
+ />
45
+
46
+ <link rel="stylesheet" href="static/css/bulma.min.css" />
47
+ <link rel="stylesheet" href="static/css/bulma-carousel.min.css" />
48
+ <link rel="stylesheet" href="static/css/bulma-slider.min.css" />
49
+ <link rel="stylesheet" href="static/css/fontawesome.all.min.css" />
50
+ <link
51
+ rel="stylesheet"
52
+ href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css"
53
+ />
54
+ <link rel="stylesheet" href="static/css/index.css" />
55
+
56
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
57
+ <script src="https://documentcloud.adobe.com/view-sdk/main.js"></script>
58
+ <script defer src="static/js/fontawesome.all.min.js"></script>
59
+ <script src="static/js/bulma-carousel.min.js"></script>
60
+ <script src="static/js/bulma-slider.min.js"></script>
61
+ <script src="static/js/index.js"></script>
62
+ <script src="https://code.highcharts.com/highcharts.js"></script>
63
+ <script src="https://code.highcharts.com/modules/sunburst.js"></script>
64
+ <script src="https://code.highcharts.com/modules/exporting.js"></script>
65
+
66
+ <style>
67
+ .tooluniverse-wrapper {
68
+ display: flex;
69
+ justify-content: center;
70
+ align-items: center;
71
+ width: 100%;
72
+ height: 100%;
73
+ }
74
+
75
+ #tooluniverse-container {
76
+ width: 65%;
77
+ height: 65%;
78
+ }
79
+ .small-text {
80
+ font-size: 0.65rem;
81
+ }
82
+
83
+ /* Fixed styles for centering all images */
84
+ img {
85
+ display: block;
86
+ margin-left: auto !important;
87
+ margin-right: auto !important;
88
+ max-width: 100%;
89
+ height: auto;
90
+ }
91
+
92
+ /* Fix carousel images */
93
+ .item img {
94
+ margin: 0 auto !important;
95
+ }
96
+
97
+ /* Center videos too */
98
+ video {
99
+ display: block;
100
+ margin: 0 auto !important;
101
+ max-width: 100%;
102
+ }
103
+
104
+ /* Force responsive image centering */
105
+ .responsive-image {
106
+ display: block !important;
107
+ margin: 0 auto !important;
108
+ max-width: 90% !important;
109
+ }
110
+
111
+ /* Simplify content container centering */
112
+ .content-container {
113
+ text-align: center;
114
+ }
115
+
116
+ /* Ensure container centering */
117
+ .container.is-centered {
118
+ text-align: center;
119
+ }
120
+
121
+ /* Center title and author affiliations */
122
+ .publication-title,
123
+ .publication-authors,
124
+ .publication-links {
125
+ text-align: center;
126
+ }
127
+ </style>
128
+ </head>
129
+ <body>
130
+ <!-- Model overview -->
131
+ <section class="hero is-small">
132
+ <div class="hero-body content-container">
133
+ <div class="container">
134
+ <h2 class="title is-2 has-text-centered">TxAgent model</h2>
135
+ <div class="container is-centered has-text-centered">
136
+ <img
137
+ src="static/images/txagent.jpg"
138
+ alt="TxAgent model"
139
+ style="height: auto; max-width: 48vw"
140
+ class="responsive-image"
141
+ />
142
+ </div>
143
+ </div>
144
+ </div>
145
+ </section>
146
+ <!-- End model overview -->
147
+
148
+ <!-- Paper abstract -->
149
+ <section class="section hero is-light">
150
+ <div class="container is-max-desktop">
151
+ <div class="columns is-centered has-text-centered">
152
+ <div class="column is-four-fifths">
153
+ <h2 class="title is-3">Abstract</h2>
154
+ <div class="content has-text-justified">
155
+ <p>
156
+ Precision therapeutics require multimodal adaptive models that
157
+ generate personalized treatment recommendations. We introduce
158
+ TxAgent, an AI agent that leverages multi-step reasoning and
159
+ real-time biomedical knowledge retrieval across a toolbox of 211
160
+ tools to analyze drug interactions, contraindications, and
161
+ patient-specific treatment strategies. TxAgent evaluates how
162
+ drugs interact at molecular, pharmacokinetic, and clinical
163
+ levels, identifies contraindications based on patient
164
+ comorbidities and concurrent medications, and tailors treatment
165
+ strategies to individual patient characteristics, including age,
166
+ genetic factors, and disease progression. TxAgent retrieves and
167
+ synthesizes evidence from multiple biomedical sources, assesses
168
+ interactions between drugs and patient conditions, and refines
169
+ treatment recommendations through iterative reasoning. It
170
+ selects tools based on task objectives and executes structured
171
+ function calls to solve therapeutic tasks that require clinical
172
+ reasoning and cross-source validation. The ToolUniverse
173
+ consolidates 211 tools from trusted sources, including all US
174
+ FDA-approved drugs since 1939 and validated clinical insights
175
+ from Open Targets. TxAgent outperforms leading LLMs, tool-use
176
+ models, and reasoning agents across five new benchmarks: DrugPC,
177
+ BrandPC, GenericPC, TreatmentPC, and DescriptionPC, covering
178
+ 3,168 drug reasoning tasks and 456 personalized treatment
179
+ scenarios. It achieves 92.1% accuracy in open-ended drug
180
+ reasoning tasks, surpassing GPT-4o by up to 25.8% and
181
+ outperforming DeepSeek-R1 (671B) in structured multi-step
182
+ reasoning. TxAgent generalizes across drug name variants and
183
+ descriptions, maintaining a variance of &lt;0.01 between brand,
184
+ generic, and description-based drug references, exceeding
185
+ existing tool-use LLMs by over 55%. By integrating multi-step
186
+ inference, real-time knowledge grounding, and tool- assisted
187
+ decision-making, TxAgent ensures that treatment recommendations
188
+ align with established clinical guidelines and real-world
189
+ evidence, reducing the risk of adverse events and improving
190
+ therapeutic decision-making.
191
+ </p>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </div>
196
+ </section>
197
+ <!-- End paper abstract -->
198
+
199
+ <!-- Model capabilities -->
200
+ <section class="hero is-small">
201
+ <div class="hero-body content-container">
202
+ <div class="container">
203
+ <h2 class="title is-2 has-text-centered">TxAgent capabilities</h2>
204
+ <div class="container is-centered has-text-centered">
205
+ <img
206
+ src="static/images/txagent_capabilities.jpg"
207
+ alt="TxAgent Capabilities"
208
+ style="height: auto; max-width: 50vw"
209
+ class="responsive-image"
210
+ />
211
+ </div>
212
+ <div class="container is-centered has-text-centered is-max-desktop">
213
+ <section class="section hero is-light py-2 content">
214
+ <div class="has-text-left py-2">
215
+ <ul>
216
+ <li>
217
+ <b>Knowledge grounding using tool calls</b>: TxAgent
218
+ utilizes tools to obtain verified knowledge and provides
219
+ outputs based on it.
220
+ </li>
221
+ <li>
222
+ <b>Goal-oriented tool selection</b>: TxAgent proactively
223
+ requests tools from ToolUniverse using the ToolRAG model and
224
+ selects and applies the most suitable tool from the
225
+ available candidates.
226
+ </li>
227
+ <li>
228
+ <b>Problem solving with multi-step reasoning</b>: TxAgent
229
+ manages complex tasks or unexpected responses from tools
230
+ through multiple iterations of thought and function calls.
231
+ </li>
232
+ <li>
233
+ <b>Leveraging constantly updated knowledge bases</b>:
234
+ TxAgent accesses continuously updated databases via tools to
235
+ handle problems that go beyond the TxAgent’s intrinsic
236
+ knowledge.
237
+ </li>
238
+ </ul>
239
+ </div>
240
+ </section>
241
+ </div>
242
+ </div>
243
+ </div>
244
+ </section>
245
+ <!-- End model capabilities -->
246
+
247
+ <!--BibTex citation -->
248
+ <section class="section" id="BibTeX">
249
+ <div class="container is-max-desktop content">
250
+ <h2 class="title">BibTeX</h2>
251
+ <pre><code>@misc{gao2025txagent,
252
+ title={TxAgent: An AI Agent for Therapeutic Reasoning Across a Universe of Tools},
253
+ author={Shanghua Gao and Richard Zhu and Zhenglun Kong and Ayush Noori and Xiaorui Su and Curtis Ginder and Theodoros Tsiligkaridis and Marinka Zitnik},
254
+ year={2025},
255
+ eprint={2503.10970},
256
+ archivePrefix={arXiv},
257
+ primaryClass={cs.AI},
258
+ url={https://arxiv.org/abs/2503.10970},
259
+ }</code></pre>
260
+ </div>
261
+ </section>
262
+ <!--End BibTex citation -->
263
+
264
+ <!--BibTex citation -->
265
+ <section class="section" id="BibTeX">
266
+ <div class="container is-max-desktop content">
267
+ <h2 class="title">Contact</h2>
268
+ <p>If you have any questions or suggestions, please email
269
+ <a href="mailto:[email protected]">Shanghua Gao</a> and
270
+ <a href="mailto:[email protected]">Marinka Zitnik</a>.
271
+ </p>
272
+ </div>
273
+ </section>
274
+ <!--End BibTex citation -->
275
+
276
+ <footer class="footer small-text">
277
+ <div class="container">
278
+ <div class="columns is-centered">
279
+ <div class="column is-8">
280
+ <div class="content">
281
+ <p>
282
+ We gratefully acknowledge the support of NIH R01-HD108794, NSF CAREER 2339524, US DoD FA8702-15-D-0001, Harvard Data Science Initiative, Amazon Faculty Research, Google Research Scholar Program, AstraZeneca Research, Roche Alliance with Distinguished Scientists, Sanofi iDEA-iTECH, Pfizer Research, Gates Foundation (INV-079038), Chan Zuckerberg Initiative, John and Virginia Kaneb Fellowship at Harvard Medical School, Biswas Computational Biology Initiative in partnership with the Milken Institute, Harvard Medical School Dean's Innovation Fund for the Use of Artificial Intelligence, and Kempner Institute for the Study of Natural and Artificial Intelligence at Harvard University. Any opinions, findings, conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the funders.
283
+ We thank Owen Queen and Thomas Hartvigsen for their valuable discussions on this project and NVIDIA AI for providing access to DeepSeek R1 models.
284
+ <p>
285
+ This page was built using the
286
+ <a
287
+ href="https://github.com/eliahuhorwitz/Academic-project-page-template"
288
+ target="_blank"
289
+ >Academic Project Page Template</a
290
+ >
291
+ which was adopted from the <a
292
+ href="https://nerfies.github.io"
293
+ target="_blank"
294
+ >Nerfies</a
295
+ > project page. You are free to borrow the source code of this
296
+ website, we just ask that you link back to this page in the
297
+ footer.
298
+ This website is licensed under a
299
+ <a
300
+ rel="license"
301
+ href="http://creativecommons.org/licenses/by-sa/4.0/"
302
+ target="_blank"
303
+ >Creative Commons Attribution-ShareAlike 4.0 International
304
+ License</a
305
+ >.
306
+ </p>
307
+ </div>
308
+ </div>
309
+ </div>
310
+ </div>
311
+ </footer>
312
+ </body>
313
+ </html>
314
+
315
+ <script>
316
+ const dataDict = {
317
+ "Adverse Events, Risks, Safety": {
318
+ "Adverse Events and Alarms": [
319
+ "get_drug_adverse_events_by_chemblId",
320
+ "get_drug_name_by_adverse_reaction",
321
+ "get_adverse_reactions_by_drug_name",
322
+ "get_drug_names_by_alarm",
323
+ "get_alarms_by_drug_name",
324
+ ],
325
+ "Warnings and Risks": [
326
+ "get_drug_warnings_by_chemblId",
327
+ "get_drug_names_by_boxed_warning",
328
+ "get_boxed_warning_info_by_drug_name",
329
+ "get_drug_name_by_warnings",
330
+ "get_warnings_by_drug_name",
331
+ "get_warnings_and_cautions_by_drug_name",
332
+ "get_drug_names_by_warnings_and_cautions",
333
+ "get_drug_names_by_risk",
334
+ "get_risk_info_by_drug_name",
335
+ "get_user_safety_warning_by_drug_names",
336
+ "get_drug_names_by_user_safety_warning",
337
+ "get_drug_names_by_food_safety_warnings",
338
+ "get_drug_withdrawn_blackbox_status_by_chemblId",
339
+ ],
340
+ "Nonclinical Toxicology": [
341
+ "get_drug_names_by_nonclinical_toxicology_info",
342
+ "get_nonclinical_toxicology_info_by_drug_name",
343
+ ],
344
+ "Carcinogenic, Mutagenic, Fertility, Impairment Info": [
345
+ "get_drug_names_by_carcinogenic, mutagenic, fertility, impairment_info",
346
+ "get_carcinogenic, mutagenic, fertility, impairment_info_by_drug_name",
347
+ ],
348
+ "Other Safety Info": [
349
+ "get_drug_name_by_other_safety_info",
350
+ "get_other_safety_info_by_drug_name",
351
+ ],
352
+ "Safety Summary": [
353
+ "get_drug_names_by_safety_summary",
354
+ "get_safety_summary_by_drug_name",
355
+ ],
356
+ Contraindications: [
357
+ "get_drug_names_by_contraindications",
358
+ "get_contraindications_by_drug_name",
359
+ "get_do_not_use_info_by_drug_name",
360
+ ],
361
+ Precautions: [
362
+ "get_drug_names_by_general_precautions",
363
+ "get_general_precautions_by_drug_name",
364
+ "get_drug_name_by_precautions",
365
+ "get_precautions_by_drug_name",
366
+ ],
367
+ "Nonteratogenic Effects": [
368
+ "get_drug_names_by_nonteratogenic_effects",
369
+ "get_nonteratogenic_effects_by_drug_name",
370
+ ],
371
+ "Teratogenic Effects": [
372
+ "get_drug_names_by_teratogenic_effects",
373
+ "get_teratogenic_effects_by_drug_name",
374
+ ],
375
+ "Overdosage Info": [
376
+ "get_drug_names_by_overdosage_info",
377
+ "get_overdosage_info_by_drug_name",
378
+ ],
379
+ "Stop Use Info": [
380
+ "get_drug_name_by_stop_use_info",
381
+ "get_stop_use_info_by_drug_name",
382
+ ],
383
+ "Lab Test Interference": [
384
+ "get_drug_names_by_lab_test_interference",
385
+ "get_lab_test_interference_info_by_drug_name",
386
+ ],
387
+ "Residue Warning": [
388
+ "get_drug_names_by_residue_warning",
389
+ "get_residue_warning_by_drug_name",
390
+ ],
391
+ "Environmental Warning": [
392
+ "get_drug_name_by_environmental_warning",
393
+ "get_environmental_warning_by_drug_name",
394
+ ],
395
+ "Target Safety Profile": ["get_target_safety_profile_by_ensemblID"],
396
+ },
397
+ "Addiction and Abuse": {
398
+ "Drug Abuse": [
399
+ "get_drug_names_by_abuse_info",
400
+ "get_abuse_info_by_drug_name",
401
+ "get_drug_name_by_abuse_types_and_related_adverse_reactions_and_controlled_substance_status",
402
+ "get_abuse_types_and_related_adverse_reactions_and_controlled_substance_status_by_drug_name",
403
+ ],
404
+ "Drug Dependence": [
405
+ "get_drug_name_by_dependence_info",
406
+ "get_dependence_info_by_drug_name",
407
+ ],
408
+ "Controlled Substance": [
409
+ "get_drug_names_by_controlled_substance_DEA_schedule",
410
+ "get_controlled_substance_DEA_schedule_info_by_drug_name",
411
+ "get_drug_name_by_abuse_types_and_related_adverse_reactions_and_controlled_substance_status",
412
+ "get_abuse_types_and_related_adverse_reactions_and_controlled_substance_status_by_drug_name",
413
+ ],
414
+ },
415
+ "Drug Patient Populations": {
416
+ Pregnancy: [
417
+ "get_drug_names_by_pregnancy_effects_info",
418
+ "get_pregnancy_effects_info_by_drug_name",
419
+ "get_drug_name_by_pregnancy_or_breastfeeding_info",
420
+ "get_pregnancy_or_breastfeeding_info_by_drug_name",
421
+ "get_drug_name_by_labor_and_delivery_info",
422
+ "get_labor_and_delivery_info_by_drug_name",
423
+ "get_drug_names_by_teratogenic_effects",
424
+ "get_teratogenic_effects_by_drug_name",
425
+ ],
426
+ "Nursing Mother": [
427
+ "get_drug_names_by_info_for_nursing_mothers",
428
+ "get_info_for_nursing_mothers_by_drug_name",
429
+ "get_drug_name_by_pregnancy_or_breastfeeding_info",
430
+ "get_pregnancy_or_breastfeeding_info_by_drug_name",
431
+ ],
432
+ "Pediatric Use": [
433
+ "get_drug_names_by_pediatric_use",
434
+ "get_pediatric_use_info_by_drug_name",
435
+ "get_drug_names_by_child_safety_info",
436
+ "get_child_safety_info_by_drug_name",
437
+ ],
438
+ "General Patient Pop. Info": [
439
+ "get_drug_names_by_population_use",
440
+ "get_population_use_info_by_drug_name",
441
+ ],
442
+ "Geriatric Use": [
443
+ "get_drug_names_by_geriatric_use",
444
+ "get_geriatric_use_info_by_drug_name",
445
+ ],
446
+ },
447
+ "Drug Administration and Handling": {
448
+ Storage: [
449
+ "get_drug_name_by_storage_and_handling_info",
450
+ "get_storage_and_handling_info_by_drug_name",
451
+ "get_dosage_and_storage_information_by_drug_name",
452
+ ],
453
+ "Safe Handling": [
454
+ "get_drug_names_by_safe_handling_warning",
455
+ "get_safe_handling_warnings_by_drug_name",
456
+ ],
457
+ Disposal: [
458
+ "get_drug_names_by_disposal_info",
459
+ "get_disposal_info_by_drug_name",
460
+ ],
461
+ Dosing: [
462
+ "get_drug_name_by_dosage_info",
463
+ "get_drug_names_by_dosage_forms_and_strengths_info",
464
+ "get_dosage_forms_and_strengths_by_drug_name",
465
+ "get_dosage_and_storage_information_by_drug_name",
466
+ ],
467
+ "Route of Administration": [
468
+ "get_drug_names_by_route",
469
+ "get_route_info_by_drug_name",
470
+ ],
471
+ "Setup Instructions": [
472
+ "get_drug_names_by_assembly_installation_info",
473
+ "get_assembly_installation_info_by_drug_name",
474
+ "get_drug_name_by_calibration_instructions",
475
+ "get_calibration_instructions_by_drug_name",
476
+ ],
477
+ "General Instructions": [
478
+ "get_drug_names_by_instructions_for_use",
479
+ "get_instructions_for_use_by_drug_name",
480
+ ],
481
+ Accessories: [
482
+ "get_drug_names_by_accessories",
483
+ "get_accessories_info_by_drug_name",
484
+ ],
485
+ "Assoc. Devices": [
486
+ "get_drug_name_by_device_use",
487
+ "get_device_use_by_drug_name",
488
+ ],
489
+ },
490
+ Pharmacology: {
491
+ Pharmacokinetics: [
492
+ "get_drug_names_by_pharmacokinetics",
493
+ "get_pharmacokinetics_by_drug_name",
494
+ ],
495
+ Pharmacodynamics: [
496
+ "get_drug_name_by_pharmacodynamics",
497
+ "get_pharmacodynamics_by_drug_name",
498
+ ],
499
+ "Clinical Pharmacology": [
500
+ "get_drug_names_by_clinical_pharmacology",
501
+ "get_clinical_pharmacology_by_drug_name",
502
+ ],
503
+ "Animal Pharmacology": [
504
+ "get_drug_names_by_animal_pharmacology_info",
505
+ "get_animal_pharmacology_info_by_drug_name",
506
+ ],
507
+ },
508
+ "Drug Use, Mechanism, Composition": {
509
+ "Mechanism of Action": [
510
+ "get_mechanism_of_action_by_drug_name",
511
+ "get_drug_names_by_mechanism_of_action",
512
+ "get_drug_mechanisms_of_action_by_chemblId",
513
+ ],
514
+ Ingredients: [
515
+ "get_active_ingredient_info_by_drug_name",
516
+ "get_drug_names_by_active_ingredient",
517
+ "get_drug_name_by_inactive_ingredient",
518
+ "get_inactive_ingredient_info_by_drug_name",
519
+ "get_drug_names_by_ingredient",
520
+ "get_ingredients_by_drug_name",
521
+ "get_active_ingredient_application_number_manufacturer_name_NDC_number_administration_route_by_drug_name",
522
+ ],
523
+ Indication: [
524
+ "get_drug_names_by_indication",
525
+ "get_indications_by_drug_name",
526
+ "get_drug_indications_by_chemblId",
527
+ "get_approved_indications_by_drug_chemblId",
528
+ "get_purpose_info_by_drug_name",
529
+ ],
530
+ },
531
+ "ID and Labeling Tools": {
532
+ "Drug Name/Description and ID Map": [
533
+ "get_brand_name_generic_name",
534
+ "get_drug_synonyms_by_chemblId",
535
+ "get_drug_trade_names_by_chemblId",
536
+ "get_drug_description_by_chemblId",
537
+ "get_drug_id_description_by_name",
538
+ "get_known_drugs_by_drug_chemblId",
539
+ ],
540
+ "Drug Label Document and Set IDs": [
541
+ "get_drug_name_by_document_id",
542
+ "get_document_id_by_drug_name",
543
+ "get_drug_name_by_set_id",
544
+ "get_drug_name_by_application_number_NUI_identifier_SPL_document_ID_SPL_set_ID",
545
+ ],
546
+ "Disease Name/Description and ID Map": [
547
+ "get_disease_synonyms_by_efoId",
548
+ "get_disease_id_description_by_name",
549
+ "get_disease_description_by_efoId",
550
+ "get_drug_name_by_set_id",
551
+ ],
552
+ "Target Name/Description and ID Map": [
553
+ "get_target_id_description_by_name",
554
+ "get_target_synonyms_by_ensemblID",
555
+ ],
556
+ "App Num., Manufacturer Name, Other IDs": [
557
+ "get_active_ingredient_application_number_manufacturer_name_NDC_number_administration_route_by_drug_name",
558
+ "get_drug_names_by_application_number_manufacturer_name_NDC_number",
559
+ "get_drug_name_by_application_number_NUI_identifier_SPL_document_ID_SPL_set_ID",
560
+ ],
561
+ "Phenotype Name and ID Map": [
562
+ "get_phenotype_by_HPO_ID",
563
+ "get_HPO_ID_by_phenotype",
564
+ ],
565
+ },
566
+ "General Clinical Annotations": {
567
+ "SPL Indexing Data Elements and Unclassified Section": [
568
+ "get_drug_names_by_spl_indexing_data_elements",
569
+ "get_spl_indexing_data_elements_by_drug_name",
570
+ "get_spl_unclassified_section_by_drug_name",
571
+ ],
572
+ "Label Effective Time": [
573
+ "get_drug_names_by_effective_time",
574
+ "get_effective_time_by_drug_name",
575
+ ],
576
+ "Approval Status": ["get_drug_approval_status_by_chemblId"],
577
+ "Dear Health Care Provider Letter and Recent Changes": [
578
+ "get_dear_health_care_provider_letter_info_by_drug_name",
579
+ "get_drug_names_by_dear_health_care_provider_letter_info",
580
+ "get_recent_changes_by_drug_name",
581
+ ],
582
+ "Health Claims": [
583
+ "get_drug_names_by_health_claim",
584
+ "get_health_claims_by_drug_name",
585
+ ],
586
+ "Questions Contact": ["get_contact_for_questions_info_by_drug_name"],
587
+ },
588
+ "Clinical Laboratory Info": {
589
+ "Lab Tests": [
590
+ "get_drug_names_by_lab_tests",
591
+ "get_lab_tests_by_drug_name",
592
+ ],
593
+ Microbiology: [
594
+ "get_drug_name_by_microbiology",
595
+ "get_microbiology_info_by_drug_name",
596
+ ],
597
+ },
598
+ "General Info for Patients and Relatives": {
599
+ "Consult Doctor/Pharmacist": [
600
+ "get_drug_name_by_info_on_doctor_consultation",
601
+ "get_info_on_doctor_consultation_by_drug_name",
602
+ "get_drug_names_by_info_on_consulting_doctor, pharmacist_for_drug_interactions",
603
+ "get_info_on_consulting_doctor, pharmacist_for_drug_interactions_by_drug_name",
604
+ ],
605
+ "Info for Owners/Caregivers": [
606
+ "get_drug_names_by_information_for_owners_or_caregivers",
607
+ "get_information_for_owners_or_caregivers_by_drug_name",
608
+ ],
609
+ "Drug Info for Patients": [
610
+ "get_info_for_patients_by_drug_name",
611
+ "get_drug_name_by_principal_display_panel",
612
+ "get_principal_display_panel_by_drug_name",
613
+ "get_drug_names_by_medication_guide",
614
+ "get_medication_guide_info_by_drug_name",
615
+ "get_drug_name_from_patient_package_insert",
616
+ "get_patient_package_insert_from_drug_name",
617
+ "get_drug_names_by_patient_medication_info",
618
+ "get_patient_medication_info_by_drug_name",
619
+ "get_when_using_info",
620
+ ],
621
+ "Avoid While Using Drug": ["get_when_using_info"],
622
+ },
623
+ "Disease, Phenotype, Target, Drug Links": {
624
+ "Drug-Disease Associations": [
625
+ "get_similar_entities_by_drug_chemblId",
626
+ "get_similar_entities_by_disease_efoId",
627
+ "get_assoc._drugs_by_disease_efoId",
628
+ "get_assoc._diseases_by_drug_chemblId",
629
+ ],
630
+ "Drug-Target Associations": [
631
+ "get_similar_entities_by_drug_chemblId",
632
+ "get_similar_entities_by_target_ensemblID",
633
+ "get_assoc._drugs_by_target_ensemblID",
634
+ "get_assoc._targets_by_drug_chemblId",
635
+ ],
636
+ "Target-Disease/Phenotype Associations": [
637
+ "get_similar_entities_by_target_ensemblID",
638
+ "get_similar_entities_by_disease_efoId",
639
+ "get_assoc._diseases_by_target_ensemblID",
640
+ "get_assoc._targets_by_disease_efoId",
641
+ "get_assoc._diseases_phenotypes_by_target_ensemblID",
642
+ ],
643
+ "Disease-Disease/Phenotype Associations": [
644
+ "get_similar_entities_by_disease_efoId",
645
+ "get_joint_assoc._diseases_by_HPO_ID_list",
646
+ "get_assoc._phenotypes_by_disease_efoId",
647
+ ],
648
+ "Target-Target Associations": [
649
+ "get_target_homologues_by_ensemblID",
650
+ "get_similar_entities_by_target_ensemblID",
651
+ "get_target_interactions_by_ensemblID",
652
+ ],
653
+ "Drug-Drug Associations": [
654
+ "get_drug_names_by_drug_interactions",
655
+ "get_drug_interactions_by_drug_name",
656
+ "get_similar_entities_by_drug_chemblId",
657
+ ],
658
+ Pharmacogenomics: [
659
+ "drug_pharmacogenomics_data",
660
+ "get_drug_name_by_pharmacogenomics",
661
+ "get_pharmacogenomics_info_by_drug_name",
662
+ ],
663
+ },
664
+ "Biological Annotation Tools": {
665
+ "Target Biological Annotation": [
666
+ "get_target_gene_ontology_by_ensemblID",
667
+ "get_target_genomic_location_by_ensemblID",
668
+ "get_target_subcellular_locations_by_ensemblID",
669
+ "get_target_classes_by_ensemblID",
670
+ "get_biological_mouse_models_by_ensemblID",
671
+ ],
672
+ "Disease Biological Annotation": [
673
+ "get_disease_therapeutic_areas_by_efoId",
674
+ "get_disease_ancestors_parents_by_efoId",
675
+ "get_disease_descendants_children_by_efoId",
676
+ "get_disease_locations_by_efoId",
677
+ ],
678
+ "Gene Ontology": [
679
+ "get_gene_ontology_terms_by_goID",
680
+ "get_target_gene_ontology_by_ensemblID",
681
+ ],
682
+ "Drug Parent Child Molecules": [
683
+ "get_parent_child_molecules_by_drug_chembl_ID",
684
+ ],
685
+ },
686
+ Publications: {
687
+ Publications: [
688
+ "get_publications_by_disease_efoId",
689
+ "get_publications_by_target_ensemblID",
690
+ "get_publications_by_drug_chemblId",
691
+ ],
692
+ "Clinical Studies": [
693
+ "get_drug_names_by_clinical_studies",
694
+ "get_clinical_studies_info_by_drug_name",
695
+ ],
696
+ "Reference Documents": [
697
+ "get_drug_name_by_reference",
698
+ "get_reference_info_by_drug_name",
699
+ ],
700
+ },
701
+ Search: {
702
+ "Search Tools": [
703
+ "multi_entity_search_by_query_string",
704
+ "search_category_counts_by_query_string",
705
+ ],
706
+ },
707
+ "Target Characterization": {
708
+ "Target Therapeutic Potential": [
709
+ "get_target_tractability_by_ensemblID",
710
+ "get_target_enabling_packages_by_ensemblID",
711
+ "get_chemical_probes_by_target_ensemblID",
712
+ "get_target_constraint_info_by_ensemblID",
713
+ ],
714
+ },
715
+ };
716
+ function toSentenceCase(str) {
717
+ // Replace underscores with spaces and convert the entire string to lowercase.
718
+ let formatted = str.replace(/_/g, " ").toLowerCase();
719
+ // Capitalize only the first letter.
720
+ formatted = formatted.charAt(0).toUpperCase() + formatted.slice(1);
721
+ // Ensure "ID" stays properly capitalized.
722
+ formatted = formatted.replace(/chemblid/gi, "ChEMBL ID");
723
+ formatted = formatted.replace(/ensemblid/gi, "Ensembl ID");
724
+ formatted = formatted.replace(/efoid/gi, "EFO ID");
725
+ formatted = formatted.replace(/hpo/gi, "HPO");
726
+ formatted = formatted.replace(/ids/gi, "IDs");
727
+ formatted = formatted.replace(
728
+ /application number nui identifier spl document id spl set id/gi,
729
+ "app. number, NUI identifier, SPL doc. ID, SPL set ID"
730
+ );
731
+ formatted = formatted.replace(
732
+ /Get active ingredient application number manufacturer name ndc number administration route/gi,
733
+ "get active ingredient, app. num., manufacturer, NDC num., administration"
734
+ );
735
+ formatted = formatted.replace(
736
+ /Get drug name by application number manufacturer name ndc number/gi,
737
+ "get drug name by app. number, manufacturer, NDC number"
738
+ );
739
+ formatted = formatted.replace(/goID/gi, "GO ID");
740
+ formatted = formatted.replace(
741
+ /controlled substance dea schedule/gi,
742
+ "DEA schedule"
743
+ );
744
+ formatted = formatted.replace(/spl/gi, "SPL");
745
+
746
+ return formatted.replace(/\bId\b/gi, "ID");
747
+ }
748
+
749
+ // Global variables to manage drill-down state.
750
+ let currentLevel = 1; // 1 for Tier 1, 2 for Tier 2, 3 for Tier 3.
751
+ let currentTier1 = null; // Holds the key for the current top-level slice.
752
+ let chart; // To store the Highcharts chart instance.
753
+ let currentTier1Color = null;
754
+ let currentTier2Color = null;
755
+
756
+ // Sorted data structure
757
+ let sortedDataDict = {};
758
+
759
+ // Function to sort dataDict by the total number of Tier 3 values
760
+ function sortDataDict() {
761
+ // Calculate totals for each Tier 1 key
762
+ const tier1Totals = {};
763
+
764
+ for (const topKey in dataDict) {
765
+ let total = 0;
766
+ const tier2Totals = {};
767
+
768
+ // Calculate totals for each Tier 2 key within this Tier 1
769
+ for (const subKey in dataDict[topKey]) {
770
+ const count = dataDict[topKey][subKey].length;
771
+ tier2Totals[subKey] = count;
772
+ total += count;
773
+ }
774
+
775
+ tier1Totals[topKey] = {
776
+ total: total,
777
+ tier2Totals: tier2Totals,
778
+ };
779
+ }
780
+
781
+ // Sort Tier 1 keys by total count (descending)
782
+ const sortedTier1Keys = Object.keys(tier1Totals).sort(
783
+ (a, b) => tier1Totals[b].total - tier1Totals[a].total
784
+ );
785
+
786
+ // Build the sorted data structure
787
+ sortedDataDict = {};
788
+
789
+ for (const topKey of sortedTier1Keys) {
790
+ sortedDataDict[topKey] = {};
791
+
792
+ // Sort Tier 2 keys by their individual counts (descending)
793
+ const tier2Totals = tier1Totals[topKey].tier2Totals;
794
+ const sortedTier2Keys = Object.keys(tier2Totals).sort(
795
+ (a, b) => tier2Totals[b] - tier2Totals[a]
796
+ );
797
+
798
+ // Add sorted Tier 2 keys with their values
799
+ for (const subKey of sortedTier2Keys) {
800
+ sortedDataDict[topKey][subKey] = dataDict[topKey][subKey];
801
+ }
802
+ }
803
+
804
+ return sortedDataDict;
805
+ }
806
+
807
+ // Function to load Tier 1 data (top-level slices) with an outer ring showing Tier 2 subcategories.
808
+ function loadTier1() {
809
+ currentLevel = 1;
810
+ currentTier1 = null;
811
+ const newData = [];
812
+
813
+ // Create the central node.
814
+ newData.push({
815
+ id: "root",
816
+ name: "ToolUniverse",
817
+ value: 1, // inner slice made very small.
818
+ color: "skyblue",
819
+ });
820
+
821
+ let index = 1;
822
+ // For each top-level key, create a Tier 1 slice and add an outer ring (level 3) for its Tier 2 subcategories.
823
+ for (const topKey in sortedDataDict) {
824
+ // Calculate total value as the sum of all Tier 2 subcategory counts.
825
+ let total = 0;
826
+ const tier2Obj = sortedDataDict[topKey];
827
+ for (const subKey in tier2Obj) {
828
+ total += tier2Obj[subKey].length;
829
+ }
830
+
831
+ // Set a specific color for Tier 1 (cycling through chart colors)
832
+ const color =
833
+ chart.options.colors[(index - 1) % chart.options.colors.length];
834
+
835
+ // Tier 1 slice (level 2).
836
+ const tier1Id = "tier1_" + index;
837
+ newData.push({
838
+ id: tier1Id,
839
+ parent: "root",
840
+ name: toSentenceCase(topKey),
841
+ value: total,
842
+ originalKey: topKey,
843
+ color: color,
844
+ });
845
+
846
+ // Level 3: For each Tier 2 category, add a slice whose width is proportional to its item count.
847
+ let tier2Index = 1;
848
+ for (const subKey in tier2Obj) {
849
+ newData.push({
850
+ id: tier1Id + "_tier2_" + tier2Index,
851
+ parent: tier1Id,
852
+ name: "", // no label for the outer ring
853
+ // Set value proportional to the number of items in the subcategory.
854
+ value: tier2Obj[subKey].length,
855
+ originalKey: subKey,
856
+ color: Highcharts.color(color).brighten(0.1).get(),
857
+ dataLabels: { enabled: false },
858
+ });
859
+ tier2Index++;
860
+ }
861
+
862
+ index++;
863
+ }
864
+ chart.series[0].setData(newData, true);
865
+ chart.setTitle({ text: "ToolUniverse" });
866
+ }
867
+
868
+ // Function to load Tier 2 data (second-level slices) with an outer ring showing the number of Tier 3 items.
869
+ function loadTier2(topKey) {
870
+ currentLevel = 2;
871
+ currentTier1 = topKey;
872
+ const newData = [];
873
+
874
+ // Central node is now the Tier 1 label.
875
+ newData.push({
876
+ id: "root",
877
+ name: toSentenceCase(topKey),
878
+ value: 1,
879
+ color: Highcharts.color(currentTier1Color).brighten(-0.05).get(),
880
+ });
881
+
882
+ let index = 1;
883
+ const secondLevelObj = sortedDataDict[topKey];
884
+
885
+ // Define a maximum brighten value (adjust as needed)
886
+ const maxBrighten = 0.2;
887
+ const brightenStep =
888
+ Object.keys(secondLevelObj).length > 1
889
+ ? maxBrighten / (Object.keys(secondLevelObj).length - 1)
890
+ : 0;
891
+
892
+ // For each Tier 2 category, add a slice (level 2) and then an outer ring (level 3) for its Tier 3 items.
893
+ for (const subKey in secondLevelObj) {
894
+ const parentColor = Highcharts.color(currentTier1Color)
895
+ .brighten(brightenStep * index)
896
+ .get();
897
+ const tier2Id = "tier2_" + index;
898
+ newData.push({
899
+ id: tier2Id,
900
+ parent: "root",
901
+ name: toSentenceCase(subKey),
902
+ value: secondLevelObj[subKey].length,
903
+ originalKey: subKey,
904
+ color: parentColor,
905
+ });
906
+
907
+ // Level 3: for each Tier 3 item under this Tier 2 category.
908
+ let tier3Index = 1;
909
+ const children = secondLevelObj[subKey];
910
+ for (const item of children) {
911
+ newData.push({
912
+ id: tier2Id + "_tier3_" + tier3Index,
913
+ parent: tier2Id,
914
+ name: "", // no label for the outer ring
915
+ value: 1, // each Tier 3 item is given a unit value (adjust if needed)
916
+ originalKey: item,
917
+ color: Highcharts.color(parentColor).brighten(0.1).get(),
918
+ dataLabels: { enabled: false },
919
+ });
920
+ tier3Index++;
921
+ }
922
+ index++;
923
+ }
924
+ chart.series[0].setData(newData, true);
925
+ chart.setTitle({ text: "ToolUniverse: " + toSentenceCase(topKey) });
926
+ }
927
+
928
+ // Function to load Tier 3 data (third-level slices).
929
+ // (Since Tier 3 is the lowest level, we keep its configuration unchanged.)
930
+ function loadTier3(topKey, subKey) {
931
+ currentLevel = 3;
932
+ const newData = [];
933
+ // Central node is now the Tier 2 label.
934
+ newData.push({
935
+ id: "root",
936
+ name: toSentenceCase(subKey),
937
+ value: 1,
938
+ color: Highcharts.color(currentTier2Color).brighten(-0.05).get(),
939
+ });
940
+ let index = 1;
941
+ const children = sortedDataDict[topKey][subKey];
942
+
943
+ const maxBrighten = 0.2;
944
+ const brightenStep =
945
+ children.length > 1 ? maxBrighten / (children.length - 1) : 0;
946
+
947
+ for (const item of children) {
948
+ newData.push({
949
+ id: "tier3_" + index,
950
+ parent: "root",
951
+ name: toSentenceCase(item),
952
+ value: 1,
953
+ originalKey: item,
954
+ color: Highcharts.color(currentTier2Color)
955
+ .brighten(brightenStep * index)
956
+ .get(),
957
+ });
958
+ index++;
959
+ }
960
+ chart.series[0].setData(newData, true);
961
+ chart.setTitle({ text: "ToolUniverse: " + toSentenceCase(subKey) });
962
+ }
963
+
964
+ // Render the initial 3-level sunburst chart.
965
+ chart = Highcharts.chart("tooluniverse-container", {
966
+ chart: {
967
+ height: "100%",
968
+ },
969
+ title: {
970
+ text: "ToolUniverse",
971
+ },
972
+ series: [
973
+ {
974
+ type: "sunburst",
975
+ data: [], // Data will be loaded via loadTier1().
976
+ // We assign colors manually.
977
+ colorByPoint: false,
978
+ allowDrillToNode: false,
979
+ dataLabels: {
980
+ format: "{point.name}",
981
+ distance: 20,
982
+ style: {
983
+ fontSize: "10px",
984
+ textAlign: "center",
985
+ width: "80px",
986
+ whiteSpace: "normal",
987
+ textOutline: "none",
988
+ color: "#000000",
989
+ },
990
+ rotation: "auto",
991
+ },
992
+ // Configure levels:
993
+ levels: [
994
+ {
995
+ level: 1,
996
+ levelSize: { unit: "pixels", value: 40 },
997
+ },
998
+ {
999
+ level: 2,
1000
+ levelSize: { unit: "percentage", value: 70 },
1001
+ },
1002
+ {
1003
+ level: 3,
1004
+ levelSize: { unit: "pixels", value: 15 },
1005
+ dataLabels: { enabled: false },
1006
+ },
1007
+ ],
1008
+ // Define click events on individual slices.
1009
+ point: {
1010
+ events: {
1011
+ click: function () {
1012
+ // If the central node is clicked, drill up.
1013
+ if (this.id === "root") {
1014
+ if (currentLevel === 2) {
1015
+ loadTier1();
1016
+ } else if (currentLevel === 3) {
1017
+ loadTier2(currentTier1);
1018
+ }
1019
+ } else {
1020
+ // Drill down based on the current level.
1021
+ if (
1022
+ currentLevel === 1 &&
1023
+ sortedDataDict[this.options.originalKey]
1024
+ ) {
1025
+ currentTier1Color = this.color;
1026
+ loadTier2(this.options.originalKey);
1027
+ } else if (
1028
+ currentLevel === 2 &&
1029
+ currentTier1 &&
1030
+ sortedDataDict[currentTier1][this.options.originalKey]
1031
+ ) {
1032
+ currentTier2Color = this.color;
1033
+ loadTier3(currentTier1, this.options.originalKey);
1034
+ }
1035
+ }
1036
+ },
1037
+ },
1038
+ },
1039
+ },
1040
+ ],
1041
+ tooltip: {
1042
+ headerFormat: "",
1043
+ pointFormat: "<b>{point.name}</b>",
1044
+ },
1045
+ colors: [
1046
+ "#FFA15A",
1047
+ "#636efa",
1048
+ "#ab63fa",
1049
+ "#FF6692",
1050
+ "#EF553B",
1051
+ "#00cc96",
1052
+ "#B6E880",
1053
+ "#19d3f3",
1054
+ "#f2ce3f",
1055
+ ],
1056
+ });
1057
+
1058
+ // First, sort the data dictionary.
1059
+ sortDataDict();
1060
+
1061
+ // Load the initial top-level (Tier 1) view.
1062
+ loadTier1();
1063
+ </script>
requirements.txt ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # requirements.txt
2
+
3
+ # Core Gradio UI (locks to 5.x series)
4
+ gradio>=5.31.0
5
+
6
+ # Popup modal component (ensure correct name and version)
7
+ gradio-modal>=0.0.4
8
+
9
+ # Display PDFs
10
+ gradio_pdf
11
+
12
+ # HF Hub client (latest stable)
13
+ huggingface-hub>=0.30.2,<0.31
14
+
15
+ # Google Sheets API client
16
+ gspread
17
+
18
+ # Google API Authentication (older library, used by import)
19
+ oauth2client
20
+
21
+ # Data Manipulation
22
+ pandas
specialties.json ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "Aerospace Medicine",
3
+ "Allergy and Immunology",
4
+ "Anesthesiology",
5
+ "Clinical Biochemical Genetics",
6
+ "Clinical Genetics and Genomics (MD)",
7
+ "Colon and Rectal Surgery",
8
+ "Dermatology",
9
+ "Diagnostic Radiology",
10
+ "Emergency Medicine",
11
+ "Family Medicine",
12
+ "General Surgery",
13
+ "Internal Medicine",
14
+ "Interventional Radiology and Diagnostic Radiology",
15
+ "Laboratory Genetics and Genomics",
16
+ "Medical Physics (Diagnostic, Nuclear, Therapeutic)",
17
+ "Neurological Surgery",
18
+ "Neurology",
19
+ "Neurology with Special Qualification in Child Neurology",
20
+ "Nuclear Medicine",
21
+ "Obstetrics and Gynecology",
22
+ "Occupational and Environmental Medicine",
23
+ "Ophthalmology",
24
+ "Orthopaedic Surgery",
25
+ "Otolaryngology - Head and Neck Surgery",
26
+ "Pathology - Anatomic",
27
+ "Pathology - Anatomic/Pathology - Clinical",
28
+ "Pathology - Clinical",
29
+ "Pediatrics",
30
+ "Physical Medicine and Rehabilitation",
31
+ "Plastic Surgery",
32
+ "Psychiatry",
33
+ "Public Health and General Preventive Medicine",
34
+ "Radiation Oncology",
35
+ "Thoracic and Cardiac Surgery",
36
+ "Urology",
37
+ "Vascular Surgery"
38
+ ]
static/.DS_Store ADDED
Binary file (10.2 kB). View file
 
static/css/bulma-carousel.min.css ADDED
@@ -0,0 +1 @@
 
 
1
+ @-webkit-keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.slider{position:relative;width:100%}.slider-container{display:flex;flex-wrap:nowrap;flex-direction:row;overflow:hidden;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);min-height:100%}.slider-container.is-vertical{flex-direction:column}.slider-container .slider-item{flex:none}.slider-container .slider-item .image.is-covered img{-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center;height:100%;width:100%}.slider-container .slider-item .video-container{height:0;padding-bottom:0;padding-top:56.25%;margin:0;position:relative}.slider-container .slider-item .video-container.is-1by1,.slider-container .slider-item .video-container.is-square{padding-top:100%}.slider-container .slider-item .video-container.is-4by3{padding-top:75%}.slider-container .slider-item .video-container.is-21by9{padding-top:42.857143%}.slider-container .slider-item .video-container embed,.slider-container .slider-item .video-container iframe,.slider-container .slider-item .video-container object{position:absolute;top:0;left:0;width:100%!important;height:100%!important}.slider-navigation-next,.slider-navigation-previous{display:flex;justify-content:center;align-items:center;position:absolute;width:42px;height:42px;background:#fff center center no-repeat;background-size:20px 20px;border:1px solid #fff;border-radius:25091983px;box-shadow:0 2px 5px #3232321a;top:50%;margin-top:-20px;left:0;cursor:pointer;transition:opacity .3s,-webkit-transform .3s;transition:transform .3s,opacity .3s;transition:transform .3s,opacity .3s,-webkit-transform .3s}.slider-navigation-next:hover,.slider-navigation-previous:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.slider-navigation-next.is-hidden,.slider-navigation-previous.is-hidden{display:none;opacity:0}.slider-navigation-next svg,.slider-navigation-previous svg{width:25%}.slider-navigation-next{left:auto;right:0;background:#fff center center no-repeat;background-size:20px 20px}.slider-pagination{display:none;justify-content:center;align-items:center;position:absolute;bottom:0;left:0;right:0;padding:.5rem 1rem;text-align:center}.slider-pagination .slider-page{background:#fff;width:10px;height:10px;border-radius:25091983px;display:inline-block;margin:0 3px;box-shadow:0 2px 5px #3232321a;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;cursor:pointer}.slider-pagination .slider-page.is-active,.slider-pagination .slider-page:hover{-webkit-transform:scale(1.4);transform:scale(1.4)}@media screen and (min-width:800px){.slider-pagination{display:flex}}.hero.has-carousel{position:relative}.hero.has-carousel+.hero-body,.hero.has-carousel+.hero-footer,.hero.has-carousel+.hero-head{z-index:10;overflow:hidden}.hero.has-carousel .hero-carousel{position:absolute;top:0;left:0;bottom:0;right:0;height:auto;border:none;margin:auto;padding:0;z-index:0}.hero.has-carousel .hero-carousel .slider{width:100%;max-width:100%;overflow:hidden;height:100%!important;max-height:100%;z-index:0}.hero.has-carousel .hero-carousel .slider .has-background{max-height:100%}.hero.has-carousel .hero-carousel .slider .has-background .is-background{-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center;height:100%;width:100%}.hero.has-carousel .hero-body{margin:0 3rem;z-index:10}
static/css/bulma-slider.min.css ADDED
@@ -0,0 +1 @@
 
 
1
+ @-webkit-keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}input[type=range].slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:1rem 0;background:0 0;touch-action:none}input[type=range].slider.is-fullwidth{display:block;width:100%}input[type=range].slider:focus{outline:0}input[type=range].slider:not([orient=vertical])::-webkit-slider-runnable-track{width:100%}input[type=range].slider:not([orient=vertical])::-moz-range-track{width:100%}input[type=range].slider:not([orient=vertical])::-ms-track{width:100%}input[type=range].slider:not([orient=vertical]).has-output+output,input[type=range].slider:not([orient=vertical]).has-output-tooltip+output{width:3rem;background:#4a4a4a;border-radius:4px;padding:.4rem .8rem;font-size:.75rem;line-height:.75rem;text-align:center;text-overflow:ellipsis;white-space:nowrap;color:#fff;overflow:hidden;pointer-events:none;z-index:200}input[type=range].slider:not([orient=vertical]).has-output-tooltip:disabled+output,input[type=range].slider:not([orient=vertical]).has-output:disabled+output{opacity:.5}input[type=range].slider:not([orient=vertical]).has-output{display:inline-block;vertical-align:middle;width:calc(100% - (4.2rem))}input[type=range].slider:not([orient=vertical]).has-output+output{display:inline-block;margin-left:.75rem;vertical-align:middle}input[type=range].slider:not([orient=vertical]).has-output-tooltip{display:block}input[type=range].slider:not([orient=vertical]).has-output-tooltip+output{position:absolute;left:0;top:-.1rem}input[type=range].slider[orient=vertical]{-webkit-appearance:slider-vertical;-moz-appearance:slider-vertical;appearance:slider-vertical;-webkit-writing-mode:bt-lr;-ms-writing-mode:bt-lr;writing-mode:bt-lr}input[type=range].slider[orient=vertical]::-webkit-slider-runnable-track{height:100%}input[type=range].slider[orient=vertical]::-moz-range-track{height:100%}input[type=range].slider[orient=vertical]::-ms-track{height:100%}input[type=range].slider::-webkit-slider-runnable-track{cursor:pointer;animate:.2s;box-shadow:0 0 0 #7a7a7a;background:#dbdbdb;border-radius:4px;border:0 solid #7a7a7a}input[type=range].slider::-moz-range-track{cursor:pointer;animate:.2s;box-shadow:0 0 0 #7a7a7a;background:#dbdbdb;border-radius:4px;border:0 solid #7a7a7a}input[type=range].slider::-ms-track{cursor:pointer;animate:.2s;box-shadow:0 0 0 #7a7a7a;background:#dbdbdb;border-radius:4px;border:0 solid #7a7a7a}input[type=range].slider::-ms-fill-lower{background:#dbdbdb;border-radius:4px}input[type=range].slider::-ms-fill-upper{background:#dbdbdb;border-radius:4px}input[type=range].slider::-webkit-slider-thumb{box-shadow:none;border:1px solid #b5b5b5;border-radius:4px;background:#fff;cursor:pointer}input[type=range].slider::-moz-range-thumb{box-shadow:none;border:1px solid #b5b5b5;border-radius:4px;background:#fff;cursor:pointer}input[type=range].slider::-ms-thumb{box-shadow:none;border:1px solid #b5b5b5;border-radius:4px;background:#fff;cursor:pointer}input[type=range].slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none}input[type=range].slider.is-circle::-webkit-slider-thumb{border-radius:290486px}input[type=range].slider.is-circle::-moz-range-thumb{border-radius:290486px}input[type=range].slider.is-circle::-ms-thumb{border-radius:290486px}input[type=range].slider:active::-webkit-slider-thumb{-webkit-transform:scale(1.25);transform:scale(1.25)}input[type=range].slider:active::-moz-range-thumb{transform:scale(1.25)}input[type=range].slider:active::-ms-thumb{transform:scale(1.25)}input[type=range].slider:disabled{opacity:.5;cursor:not-allowed}input[type=range].slider:disabled::-webkit-slider-thumb{cursor:not-allowed;-webkit-transform:scale(1);transform:scale(1)}input[type=range].slider:disabled::-moz-range-thumb{cursor:not-allowed;transform:scale(1)}input[type=range].slider:disabled::-ms-thumb{cursor:not-allowed;transform:scale(1)}input[type=range].slider:not([orient=vertical]){min-height:calc((1rem + 2px) * 1.25)}input[type=range].slider:not([orient=vertical])::-webkit-slider-runnable-track{height:.5rem}input[type=range].slider:not([orient=vertical])::-moz-range-track{height:.5rem}input[type=range].slider:not([orient=vertical])::-ms-track{height:.5rem}input[type=range].slider[orient=vertical]::-webkit-slider-runnable-track{width:.5rem}input[type=range].slider[orient=vertical]::-moz-range-track{width:.5rem}input[type=range].slider[orient=vertical]::-ms-track{width:.5rem}input[type=range].slider::-webkit-slider-thumb{height:1rem;width:1rem}input[type=range].slider::-moz-range-thumb{height:1rem;width:1rem}input[type=range].slider::-ms-thumb{height:1rem;width:1rem}input[type=range].slider::-ms-thumb{margin-top:0}input[type=range].slider::-webkit-slider-thumb{margin-top:-.25rem}input[type=range].slider[orient=vertical]::-webkit-slider-thumb{margin-top:auto;margin-left:-.25rem}input[type=range].slider.is-small:not([orient=vertical]){min-height:calc((.75rem + 2px) * 1.25)}input[type=range].slider.is-small:not([orient=vertical])::-webkit-slider-runnable-track{height:.375rem}input[type=range].slider.is-small:not([orient=vertical])::-moz-range-track{height:.375rem}input[type=range].slider.is-small:not([orient=vertical])::-ms-track{height:.375rem}input[type=range].slider.is-small[orient=vertical]::-webkit-slider-runnable-track{width:.375rem}input[type=range].slider.is-small[orient=vertical]::-moz-range-track{width:.375rem}input[type=range].slider.is-small[orient=vertical]::-ms-track{width:.375rem}input[type=range].slider.is-small::-webkit-slider-thumb{height:.75rem;width:.75rem}input[type=range].slider.is-small::-moz-range-thumb{height:.75rem;width:.75rem}input[type=range].slider.is-small::-ms-thumb{height:.75rem;width:.75rem}input[type=range].slider.is-small::-ms-thumb{margin-top:0}input[type=range].slider.is-small::-webkit-slider-thumb{margin-top:-.1875rem}input[type=range].slider.is-small[orient=vertical]::-webkit-slider-thumb{margin-top:auto;margin-left:-.1875rem}input[type=range].slider.is-medium:not([orient=vertical]){min-height:calc((1.25rem + 2px) * 1.25)}input[type=range].slider.is-medium:not([orient=vertical])::-webkit-slider-runnable-track{height:.625rem}input[type=range].slider.is-medium:not([orient=vertical])::-moz-range-track{height:.625rem}input[type=range].slider.is-medium:not([orient=vertical])::-ms-track{height:.625rem}input[type=range].slider.is-medium[orient=vertical]::-webkit-slider-runnable-track{width:.625rem}input[type=range].slider.is-medium[orient=vertical]::-moz-range-track{width:.625rem}input[type=range].slider.is-medium[orient=vertical]::-ms-track{width:.625rem}input[type=range].slider.is-medium::-webkit-slider-thumb{height:1.25rem;width:1.25rem}input[type=range].slider.is-medium::-moz-range-thumb{height:1.25rem;width:1.25rem}input[type=range].slider.is-medium::-ms-thumb{height:1.25rem;width:1.25rem}input[type=range].slider.is-medium::-ms-thumb{margin-top:0}input[type=range].slider.is-medium::-webkit-slider-thumb{margin-top:-.3125rem}input[type=range].slider.is-medium[orient=vertical]::-webkit-slider-thumb{margin-top:auto;margin-left:-.3125rem}input[type=range].slider.is-large:not([orient=vertical]){min-height:calc((1.5rem + 2px) * 1.25)}input[type=range].slider.is-large:not([orient=vertical])::-webkit-slider-runnable-track{height:.75rem}input[type=range].slider.is-large:not([orient=vertical])::-moz-range-track{height:.75rem}input[type=range].slider.is-large:not([orient=vertical])::-ms-track{height:.75rem}input[type=range].slider.is-large[orient=vertical]::-webkit-slider-runnable-track{width:.75rem}input[type=range].slider.is-large[orient=vertical]::-moz-range-track{width:.75rem}input[type=range].slider.is-large[orient=vertical]::-ms-track{width:.75rem}input[type=range].slider.is-large::-webkit-slider-thumb{height:1.5rem;width:1.5rem}input[type=range].slider.is-large::-moz-range-thumb{height:1.5rem;width:1.5rem}input[type=range].slider.is-large::-ms-thumb{height:1.5rem;width:1.5rem}input[type=range].slider.is-large::-ms-thumb{margin-top:0}input[type=range].slider.is-large::-webkit-slider-thumb{margin-top:-.375rem}input[type=range].slider.is-large[orient=vertical]::-webkit-slider-thumb{margin-top:auto;margin-left:-.375rem}input[type=range].slider.is-white::-moz-range-track{background:#fff!important}input[type=range].slider.is-white::-webkit-slider-runnable-track{background:#fff!important}input[type=range].slider.is-white::-ms-track{background:#fff!important}input[type=range].slider.is-white::-ms-fill-lower{background:#fff}input[type=range].slider.is-white::-ms-fill-upper{background:#fff}input[type=range].slider.is-white .has-output-tooltip+output,input[type=range].slider.is-white.has-output+output{background-color:#fff;color:#0a0a0a}input[type=range].slider.is-black::-moz-range-track{background:#0a0a0a!important}input[type=range].slider.is-black::-webkit-slider-runnable-track{background:#0a0a0a!important}input[type=range].slider.is-black::-ms-track{background:#0a0a0a!important}input[type=range].slider.is-black::-ms-fill-lower{background:#0a0a0a}input[type=range].slider.is-black::-ms-fill-upper{background:#0a0a0a}input[type=range].slider.is-black .has-output-tooltip+output,input[type=range].slider.is-black.has-output+output{background-color:#0a0a0a;color:#fff}input[type=range].slider.is-light::-moz-range-track{background:#f5f5f5!important}input[type=range].slider.is-light::-webkit-slider-runnable-track{background:#f5f5f5!important}input[type=range].slider.is-light::-ms-track{background:#f5f5f5!important}input[type=range].slider.is-light::-ms-fill-lower{background:#f5f5f5}input[type=range].slider.is-light::-ms-fill-upper{background:#f5f5f5}input[type=range].slider.is-light .has-output-tooltip+output,input[type=range].slider.is-light.has-output+output{background-color:#f5f5f5;color:#363636}input[type=range].slider.is-dark::-moz-range-track{background:#363636!important}input[type=range].slider.is-dark::-webkit-slider-runnable-track{background:#363636!important}input[type=range].slider.is-dark::-ms-track{background:#363636!important}input[type=range].slider.is-dark::-ms-fill-lower{background:#363636}input[type=range].slider.is-dark::-ms-fill-upper{background:#363636}input[type=range].slider.is-dark .has-output-tooltip+output,input[type=range].slider.is-dark.has-output+output{background-color:#363636;color:#f5f5f5}input[type=range].slider.is-primary::-moz-range-track{background:#00d1b2!important}input[type=range].slider.is-primary::-webkit-slider-runnable-track{background:#00d1b2!important}input[type=range].slider.is-primary::-ms-track{background:#00d1b2!important}input[type=range].slider.is-primary::-ms-fill-lower{background:#00d1b2}input[type=range].slider.is-primary::-ms-fill-upper{background:#00d1b2}input[type=range].slider.is-primary .has-output-tooltip+output,input[type=range].slider.is-primary.has-output+output{background-color:#00d1b2;color:#fff}input[type=range].slider.is-link::-moz-range-track{background:#3273dc!important}input[type=range].slider.is-link::-webkit-slider-runnable-track{background:#3273dc!important}input[type=range].slider.is-link::-ms-track{background:#3273dc!important}input[type=range].slider.is-link::-ms-fill-lower{background:#3273dc}input[type=range].slider.is-link::-ms-fill-upper{background:#3273dc}input[type=range].slider.is-link .has-output-tooltip+output,input[type=range].slider.is-link.has-output+output{background-color:#3273dc;color:#fff}input[type=range].slider.is-info::-moz-range-track{background:#209cee!important}input[type=range].slider.is-info::-webkit-slider-runnable-track{background:#209cee!important}input[type=range].slider.is-info::-ms-track{background:#209cee!important}input[type=range].slider.is-info::-ms-fill-lower{background:#209cee}input[type=range].slider.is-info::-ms-fill-upper{background:#209cee}input[type=range].slider.is-info .has-output-tooltip+output,input[type=range].slider.is-info.has-output+output{background-color:#209cee;color:#fff}input[type=range].slider.is-success::-moz-range-track{background:#23d160!important}input[type=range].slider.is-success::-webkit-slider-runnable-track{background:#23d160!important}input[type=range].slider.is-success::-ms-track{background:#23d160!important}input[type=range].slider.is-success::-ms-fill-lower{background:#23d160}input[type=range].slider.is-success::-ms-fill-upper{background:#23d160}input[type=range].slider.is-success .has-output-tooltip+output,input[type=range].slider.is-success.has-output+output{background-color:#23d160;color:#fff}input[type=range].slider.is-warning::-moz-range-track{background:#ffdd57!important}input[type=range].slider.is-warning::-webkit-slider-runnable-track{background:#ffdd57!important}input[type=range].slider.is-warning::-ms-track{background:#ffdd57!important}input[type=range].slider.is-warning::-ms-fill-lower{background:#ffdd57}input[type=range].slider.is-warning::-ms-fill-upper{background:#ffdd57}input[type=range].slider.is-warning .has-output-tooltip+output,input[type=range].slider.is-warning.has-output+output{background-color:#ffdd57;color:rgba(0,0,0,.7)}input[type=range].slider.is-danger::-moz-range-track{background:#ff3860!important}input[type=range].slider.is-danger::-webkit-slider-runnable-track{background:#ff3860!important}input[type=range].slider.is-danger::-ms-track{background:#ff3860!important}input[type=range].slider.is-danger::-ms-fill-lower{background:#ff3860}input[type=range].slider.is-danger::-ms-fill-upper{background:#ff3860}input[type=range].slider.is-danger .has-output-tooltip+output,input[type=range].slider.is-danger.has-output+output{background-color:#ff3860;color:#fff}
static/css/bulma.css.map.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ {"version":3,"sources":["../bulma.sass","../sass/utilities/_all.sass","../sass/utilities/animations.sass","bulma.css","../sass/utilities/mixins.sass","../sass/utilities/initial-variables.sass","../sass/utilities/controls.sass","../sass/base/_all.sass","../sass/base/minireset.sass","../sass/base/generic.sass","../sass/utilities/derived-variables.sass","../sass/elements/_all.sass","../sass/elements/box.sass","../sass/elements/button.sass","../sass/utilities/functions.sass","../sass/elements/container.sass","../sass/elements/content.sass","../sass/elements/icon.sass","../sass/elements/image.sass","../sass/elements/notification.sass","../sass/elements/progress.sass","../sass/elements/table.sass","../sass/elements/tag.sass","../sass/elements/title.sass","../sass/elements/other.sass","../sass/form/_all.sass","../sass/form/shared.sass","../sass/form/input-textarea.sass","../sass/form/checkbox-radio.sass","../sass/form/select.sass","../sass/form/file.sass","../sass/form/tools.sass","../sass/components/_all.sass","../sass/components/breadcrumb.sass","../sass/components/card.sass","../sass/components/dropdown.sass","../sass/components/level.sass","../sass/components/media.sass","../sass/components/menu.sass","../sass/components/message.sass","../sass/components/modal.sass","../sass/components/navbar.sass","../sass/components/pagination.sass","../sass/components/panel.sass","../sass/components/tabs.sass","../sass/grid/_all.sass","../sass/grid/columns.sass","../sass/grid/tiles.sass","../sass/helpers/_all.sass","../sass/helpers/color.sass","../sass/helpers/flexbox.sass","../sass/helpers/float.sass","../sass/helpers/other.sass","../sass/helpers/overflow.sass","../sass/helpers/position.sass","../sass/helpers/spacing.sass","../sass/helpers/typography.sass","../sass/helpers/visibility.sass","../sass/layout/_all.sass","../sass/layout/hero.sass","../sass/layout/section.sass","../sass/layout/footer.sass"],"names":[],"mappings":"AACA,6DAAA;ACDA,oBAAA;ACAA;EACE;IACE,uBAAuB;ECGzB;EDFA;IACE,yBAAyB;ECI3B;AACF;ADTA;EACE;IACE,uBAAuB;ECGzB;EDFA;IACE,yBAAyB;ECI3B;AACF;;AC0JA;;;;EANE,2BAA2B;EAC3B,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AD7InB;;ACkKA;EAfE,6BAD8B;EAE9B,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,YAAY;EACZ,cAAc;EACd,eAAe;EACf,qBAAqB;EACrB,oBAAoB;EACpB,kBAAkB;EAClB,QAAQ;EACR,yBAAyB;EACzB,wBAAwB;EACxB,cAAc;AD/IhB;;ACqJE;;EACE,qBC3IkB;AFNtB;;ACwNA;EAhEE,qBAAqB;EACrB,wBAAwB;EACxB,uCClM2B;EDmM3B,YAAY;EACZ,uBC/HuB;EDgIvB,eAAe;EACf,oBAAoB;EACpB,qBAAqB;EACrB,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,WAAW;ADpJb;;ACqJE;EAEE,uBCzM2B;ED0M3B,WAAW;EACX,cAAc;EACd,SAAS;EACT,kBAAkB;EAClB,QAAQ;EACR,0DAA0D;EAC1D,+BAA+B;ADnJnC;;ACoJE;EACE,WAAW;EACX,UAAU;ADjJd;;ACkJE;EACE,WAAW;EACX,UAAU;AD/Id;;ACgJE;EAEE,uCCtOyB;AFwF7B;;AC+IE;EACE,uCCxOyB;AF4F7B;;AC8IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;AD3If;;AC4IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;ADzIf;;AC0IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;ADvIf;;ACwJA;EAXE,mDAA2C;UAA3C,2CAA2C;EAC3C,yBC7P4B;ED8P5B,uBCjMuB;EDkMvB,+BAA+B;EAC/B,6BAA6B;EAC7B,WAAW;EACX,cAAc;EACd,WAAW;EACX,kBAAkB;EAClB,UAAU;ADzIZ;;ACqJA;;;;;;;;;;;;;;;;;EANE,SADuB;EAEvB,OAFuB;EAGvB,kBAAkB;EAClB,QAJuB;EAKvB,MALuB;ADtHzB;;AGvHA;;;;;EA3BE,qBAAqB;EACrB,wBAAwB;EACxB,mBAAmB;EACnB,6BAA+C;EAC/C,kBDqDU;ECpDV,gBAAgB;EAChB,oBAAoB;EACpB,eDkBW;ECjBX,aAfoB;EAgBpB,2BAA2B;EAC3B,gBAhBuB;EAiBvB,iCAf+D;EAgB/D,gCAfkE;EAgBlE,iCAhBkE;EAiBlE,8BAlB+D;EAmB/D,kBAAkB;EAClB,mBAAmB;AH0JrB;;AGxJE;;;;;;;;;;;;;;;;;EAIE,aAAa;AHwKjB;;AGvKE;;;;;;;;;;;;;;;;EAEE,mBAAmB;AHwLvB;;AI7NA,eAAA;ACAA,0EAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;EAuBE,SAAS;EACT,UAAU;ALgOZ;;AK7NA;;;;;;EAME,eAAe;EACf,mBAAmB;ALgOrB;;AK7NA;EACE,gBAAgB;ALgOlB;;AK7NA;;;;EAIE,SAAS;ALgOX;;AK7NA;EACE,sBAAsB;ALgOxB;;AK9NA;EAII,mBAAmB;AL8NvB;;AK3NA;;EAEE,YAAY;EACZ,eAAe;AL8NjB;;AK3NA;EACE,SAAS;AL8NX;;AK3NA;EACE,yBAAyB;EACzB,iBAAiB;AL8NnB;;AK5NA;;EAEE,UAAU;AL+NZ;;AKjOA;;EAII,mBAAmB;ALkOvB;;AK9PA;EClBE,uBJjB6B;EIkB7B,eAhCc;EAiCd,kCAAkC;EAClC,mCAAmC;EACnC,gBAlCoB;EAmCpB,kBAhCsB;EAiCtB,kBAhCsB;EAiCtB,kCApCiC;EAqCjC,8BAAsB;KAAtB,2BAAsB;MAAtB,0BAAsB;UAAtB,sBAAsB;ANoRxB;;AMlRA;;;;;;;EAOE,cAAc;ANqRhB;;AMnRA;;;;;;EAME,oLJ7ByL;AFmT3L;;AMpRA;;EAEE,6BAA6B;EAC7B,4BAA4B;EAC5B,sBJlC0B;AFyT5B;;AMrRA;EACE,cJ3D4B;EI4D5B,cA1DkB;EA2DlB,gBJ3BiB;EI4BjB,gBA1DoB;ANkVtB;;AMpRA;EACE,cJpDgC;EIqDhC,eAAe;EACf,qBAAqB;ANuRvB;;AM1RA;EAKI,mBAAmB;ANyRvB;;AM9RA;EAOI,cJ1E0B;AFqW9B;;AMzRA;EACE,4BJtE4B;EIuE5B,cCpBsB;EDqBtB,kBArEiB;EAsEjB,mBAvEkB;EAwElB,4BAzEgC;ANqWlC;;AM1RA;EACE,4BJ7E4B;EI8E5B,YAAY;EACZ,cAAc;EACd,WAxEa;EAyEb,gBAxEkB;ANqWpB;;AM3RA;EACE,YAAY;EACZ,eAAe;AN8RjB;;AM5RA;;EAEE,wBAAwB;AN+R1B;;AM7RA;EACE,kBAvFuB;ANuXzB;;AM9RA;EACE,mBAAmB;EACnB,oBAAoB;ANiStB;;AM/RA;EACE,cJ1G4B;EI2G5B,gBJrEe;AFuWjB;;AM9RA;EACE,YAAY;ANiSd;;AM/RA;EL1DE,iCAAiC;EK4DjC,4BJ7G4B;EI8G5B,cJpH4B;EIqH5B,kBAjGqB;EAkGrB,gBAAgB;EAChB,uBAlG0B;EAmG1B,gBAAgB;EAChB,iBAAiB;ANkSnB;;AM1SA;EAUI,6BAA6B;EAC7B,mBAAmB;EACnB,cAvGoB;EAwGpB,UAAU;ANoSd;;AMlSA;;EAGI,mBAAmB;ANoSvB;;AMvSA;;EAKM,mBAAmB;ANuSzB;;AM5SA;EAOI,cJxI0B;AFib9B;;AQvbA,mBAAA;ACSA;EAEE,uBPI6B;EOH7B,kBP0DgB;EOzDhB,0FPX2B;EOY3B,cPP4B;EOQ5B,cAAc;EACd,gBAZmB;AT6brB;;AS/aA;EAGI,yEPC8B;AF+alC;;ASnbA;EAKI,oEPD8B;AFmblC;;AUzZA;EAGE,uBRpC6B;EQqC7B,qBR1C4B;EQ2C5B,iBPlDwB;EOmDxB,cRhD4B;EQiD5B,eAAe;EAGf,uBAAuB;EACvB,iCApD6D;EAqD7D,iBApD6B;EAqD7B,kBArD6B;EAsD7B,8BAvD6D;EAwD7D,kBAAkB;EAClB,mBAAmB;AVwZrB;;AUxaA;EAkBI,cAAc;AV0ZlB;;AU5aA;EAwBM,aAAa;EACb,YAAY;AVwZlB;;AUjbA;ETgGI,+BSrEwG;ETqExG,oBSpEgE;AV0ZpE;;AUtbA;ETgGI,mBSlEgE;ETkEhE,gCSjEwG;AV4Z5G;;AU3bA;EAiCM,+BAAmF;EACnF,gCAAoF;AV8Z1F;;AUhcA;EAsCI,qBR7E0B;EQ8E1B,cRjF0B;AF+e9B;;AUrcA;EA0CI,qBRpE8B;EQqE9B,cRrF0B;AFof9B;;AU1cA;EA6CM,kDRvE4B;AFwelC;;AU9cA;EAgDI,qBRzF0B;EQ0F1B,cR3F0B;AF6f9B;;AUndA;EAoDI,6BAA6B;EAC7B,yBAAyB;EACzB,cR/F0B;EQgG1B,0BAjF8B;AVoflC;;AU1dA;EA4DM,4BR/FwB;EQgGxB,cRvGwB;AFygB9B;;AU/dA;EAgEM,yBCH2B;EDI3B,cR3GwB;AF8gB9B;;AUpeA;;EAoEM,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;AVqatB;;AU3eA;EA2EM,uBR5GyB;EQ6GzB,yBAAyB;EACzB,cR3HuB;AF+hB7B;;AUjfA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,cRhIqB;AFqiB7B;;AUvfA;EAqFQ,yBAAyB;EACzB,cRpIqB;AF0iB7B;;AU5fA;EAwFU,mDRzHqB;AFiiB/B;;AUhgBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,cR3IqB;AFojB7B;;AUtgBA;;EAgGQ,uBRjIuB;EQkIvB,yBAAyB;EACzB,gBAAgB;AV2axB;;AU7gBA;EAoGQ,yBRlJqB;EQmJrB,YRtIuB;AFmjB/B;;AUlhBA;EAwGU,uBC3CuB;AXydjC;;AUthBA;;EA2GU,yBRzJmB;EQ0JnB,yBAAyB;EACzB,gBAAgB;EAChB,YR/IqB;AF+jB/B;;AU9hBA;EAiHU,gEAA4E;AVibtF;;AUliBA;EAmHQ,6BAA6B;EAC7B,mBRrJuB;EQsJvB,YRtJuB;AFykB/B;;AUxiBA;EA0HU,uBR3JqB;EQ4JrB,mBR5JqB;EQ6JrB,cR1KmB;AF4lB7B;;AU9iBA;EA+HY,4DAA8D;AVmb1E;;AUljBA;EAqIc,gEAA4E;AVib1F;;AUtjBA;;EAwIU,6BAA6B;EAC7B,mBR1KqB;EQ2KrB,gBAAgB;EAChB,YR5KqB;AF+lB/B;;AU9jBA;EA6IQ,6BAA6B;EAC7B,qBR5LqB;EQ6LrB,cR7LqB;AFknB7B;;AUpkBA;EAoJU,yBRlMmB;EQmMnB,YRtLqB;AF0mB/B;;AUzkBA;EA4Jc,4DAA8D;AVib5E;;AU7kBA;;EA+JU,6BAA6B;EAC7B,qBR9MmB;EQ+MnB,gBAAgB;EAChB,cRhNmB;AFmoB7B;;AUrlBA;EA2EM,yBRzHuB;EQ0HvB,yBAAyB;EACzB,YR9GyB;AF4nB/B;;AU3lBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,YRnHuB;AFkoB/B;;AUjmBA;EAqFQ,yBAAyB;EACzB,YRvHuB;AFuoB/B;;AUtmBA;EAwFU,gDRtImB;AFwpB7B;;AU1mBA;EA2FQ,uBC9ByB;ED+BzB,yBAAyB;EACzB,YR9HuB;AFipB/B;;AUhnBA;;EAgGQ,yBR9IqB;EQ+IrB,yBAAyB;EACzB,gBAAgB;AVqhBxB;;AUvnBA;EAoGQ,uBRrIuB;EQsIvB,cRnJqB;AF0qB7B;;AU5nBA;EAwGU,yBC3CuB;AXmkBjC;;AUhoBA;;EA2GU,uBR5IqB;EQ6IrB,yBAAyB;EACzB,gBAAgB;EAChB,cR5JmB;AFsrB7B;;AUxoBA;EAiHU,4DAA4E;AV2hBtF;;AU5oBA;EAmHQ,6BAA6B;EAC7B,qBRlKqB;EQmKrB,cRnKqB;AFgsB7B;;AUlpBA;EA0HU,yBRxKmB;EQyKnB,qBRzKmB;EQ0KnB,YR7JqB;AFyrB/B;;AUxpBA;EA+HY,gEAA8D;AV6hB1E;;AU5pBA;EAqIc,4DAA4E;AV2hB1F;;AUhqBA;;EAwIU,6BAA6B;EAC7B,qBRvLmB;EQwLnB,gBAAgB;EAChB,cRzLmB;AFstB7B;;AUxqBA;EA6IQ,6BAA6B;EAC7B,mBR/KuB;EQgLvB,YRhLuB;AF+sB/B;;AU9qBA;EAoJU,uBRrLqB;EQsLrB,cRnMmB;AFiuB7B;;AUnrBA;EA4Jc,gEAA8D;AV2hB5E;;AUvrBA;;EA+JU,6BAA6B;EAC7B,mBRjMqB;EQkMrB,gBAAgB;EAChB,YRnMqB;AFguB/B;;AU/rBA;EA2EM,4BR9GwB;EQ+GxB,yBAAyB;EACzB,yBC7Ce;AXqqBrB;;AUrsBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,yBClDa;AX2qBrB;;AU3sBA;EAqFQ,yBAAyB;EACzB,yBCtDa;AXgrBrB;;AUhtBA;EAwFU,mDR3HoB;AFuvB9B;;AUptBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,yBC7Da;AX0rBrB;;AU1tBA;;EAgGQ,4BRnIsB;EQoItB,yBAAyB;EACzB,gBAAgB;AV+nBxB;;AUjuBA;EAoGQ,oCCpEa;EDqEb,iBRxIsB;AFywB9B;;AUtuBA;EAwGU,oCC3CuB;AX6qBjC;;AU1uBA;;EA2GU,oCC3EW;ED4EX,yBAAyB;EACzB,gBAAgB;EAChB,iBRjJoB;AFqxB9B;;AUlvBA;EAiHU,sFAA4E;AVqoBtF;;AUtvBA;EAmHQ,6BAA6B;EAC7B,wBRvJsB;EQwJtB,iBRxJsB;AF+xB9B;;AU5vBA;EA0HU,4BR7JoB;EQ8JpB,wBR9JoB;EQ+JpB,yBC5FW;AXkuBrB;;AUlwBA;EA+HY,sEAA8D;AVuoB1E;;AUtwBA;EAqIc,sFAA4E;AVqoB1F;;AU1wBA;;EAwIU,6BAA6B;EAC7B,wBR5KoB;EQ6KpB,gBAAgB;EAChB,iBR9KoB;AFqzB9B;;AUlxBA;EA6IQ,6BAA6B;EAC7B,gCC9Ga;ED+Gb,yBC/Ga;AXwvBrB;;AUxxBA;EAoJU,oCCpHW;EDqHX,iBRxLoB;AFg0B9B;;AU7xBA;EA4Jc,sEAA8D;AVqoB5E;;AUjyBA;;EA+JU,6BAA6B;EAC7B,gCChIW;EDiIX,gBAAgB;EAChB,yBClIW;AXywBrB;;AUzyBA;EA2EM,yBRrHwB;EQsHxB,yBAAyB;EACzB,WC3CU;AX6wBhB;;AU/yBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXmxBhB;;AUrzBA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXwxBhB;;AU1zBA;EAwFU,gDRlIoB;AFw2B9B;;AU9zBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXkyBhB;;AUp0BA;;EAgGQ,yBR1IsB;EQ2ItB,yBAAyB;EACzB,gBAAgB;AVyuBxB;;AU30BA;EAoGQ,sBClEQ;EDmER,cR/IsB;AF03B9B;;AUh1BA;EAwGU,yBC3CuB;AXuxBjC;;AUp1BA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRxJoB;AFs4B9B;;AU51BA;EAiHU,0DAA4E;AV+uBtF;;AUh2BA;EAmHQ,6BAA6B;EAC7B,qBR9JsB;EQ+JtB,cR/JsB;AFg5B9B;;AUt2BA;EA0HU,yBRpKoB;EQqKpB,qBRrKoB;EQsKpB,WC1FM;AX00BhB;;AU52BA;EA+HY,gEAA8D;AVivB1E;;AUh3BA;EAqIc,0DAA4E;AV+uB1F;;AUp3BA;;EAwIU,6BAA6B;EAC7B,qBRnLoB;EQoLpB,gBAAgB;EAChB,cRrLoB;AFs6B9B;;AU53BA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXg2BhB;;AUl4BA;EAoJU,sBClHM;EDmHN,cR/LoB;AFi7B9B;;AUv4BA;EA4Jc,gEAA8D;AV+uB5E;;AU34BA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXi3BhB;;AUn5BA;EA2EM,yBRvG4B;EQwG5B,yBAAyB;EACzB,WC3CU;AXu3BhB;;AUz5BA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AX63BhB;;AU/5BA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXk4BhB;;AUp6BA;EAwFU,iDRpHwB;AFo8BlC;;AUx6BA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AX44BhB;;AU96BA;;EAgGQ,yBR5H0B;EQ6H1B,yBAAyB;EACzB,gBAAgB;AVm1BxB;;AUr7BA;EAoGQ,sBClEQ;EDmER,cRjI0B;AFs9BlC;;AU17BA;EAwGU,yBC3CuB;AXi4BjC;;AU97BA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cR1IwB;AFk+BlC;;AUt8BA;EAiHU,0DAA4E;AVy1BtF;;AU18BA;EAmHQ,6BAA6B;EAC7B,qBRhJ0B;EQiJ1B,cRjJ0B;AF4+BlC;;AUh9BA;EA0HU,yBRtJwB;EQuJxB,qBRvJwB;EQwJxB,WC1FM;AXo7BhB;;AUt9BA;EA+HY,gEAA8D;AV21B1E;;AU19BA;EAqIc,0DAA4E;AVy1B1F;;AU99BA;;EAwIU,6BAA6B;EAC7B,qBRrKwB;EQsKxB,gBAAgB;EAChB,cRvKwB;AFkgClC;;AUt+BA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AX08BhB;;AU5+BA;EAoJU,sBClHM;EDmHN,cRjLwB;AF6gClC;;AUj/BA;EA4Jc,gEAA8D;AVy1B5E;;AUr/BA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AX29BhB;;AU7/BA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXg9BrE;;AUlgCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXs9BrE;;AUxgCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AX49BrE;;AU9gCA;EA2EM,yBRrG4B;EQsG5B,yBAAyB;EACzB,WC3CU;AXk/BhB;;AUphCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXw/BhB;;AU1hCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AX6/BhB;;AU/hCA;EAwFU,kDRlHwB;AF6jClC;;AUniCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXugChB;;AUziCA;;EAgGQ,yBR1H0B;EQ2H1B,yBAAyB;EACzB,gBAAgB;AV88BxB;;AUhjCA;EAoGQ,sBClEQ;EDmER,cR/H0B;AF+kClC;;AUrjCA;EAwGU,yBC3CuB;AX4/BjC;;AUzjCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRxIwB;AF2lClC;;AUjkCA;EAiHU,0DAA4E;AVo9BtF;;AUrkCA;EAmHQ,6BAA6B;EAC7B,qBR9I0B;EQ+I1B,cR/I0B;AFqmClC;;AU3kCA;EA0HU,yBRpJwB;EQqJxB,qBRrJwB;EQsJxB,WC1FM;AX+iChB;;AUjlCA;EA+HY,gEAA8D;AVs9B1E;;AUrlCA;EAqIc,0DAA4E;AVo9B1F;;AUzlCA;;EAwIU,6BAA6B;EAC7B,qBRnKwB;EQoKxB,gBAAgB;EAChB,cRrKwB;AF2nClC;;AUjmCA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXqkChB;;AUvmCA;EAoJU,sBClHM;EDmHN,cR/KwB;AFsoClC;;AU5mCA;EA4Jc,gEAA8D;AVo9B5E;;AUhnCA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXslChB;;AUxnCA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AX2kCrE;;AU7nCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXilCrE;;AUnoCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXulCrE;;AUzoCA;EA2EM,yBRtG4B;EQuG5B,yBAAyB;EACzB,WC3CU;AX6mChB;;AU/oCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXmnChB;;AUrpCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXwnChB;;AU1pCA;EAwFU,kDRnHwB;AFyrClC;;AU9pCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXkoChB;;AUpqCA;;EAgGQ,yBR3H0B;EQ4H1B,yBAAyB;EACzB,gBAAgB;AVykCxB;;AU3qCA;EAoGQ,sBClEQ;EDmER,cRhI0B;AF2sClC;;AUhrCA;EAwGU,yBC3CuB;AXunCjC;;AUprCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRzIwB;AFutClC;;AU5rCA;EAiHU,0DAA4E;AV+kCtF;;AUhsCA;EAmHQ,6BAA6B;EAC7B,qBR/I0B;EQgJ1B,cRhJ0B;AFiuClC;;AUtsCA;EA0HU,yBRrJwB;EQsJxB,qBRtJwB;EQuJxB,WC1FM;AX0qChB;;AU5sCA;EA+HY,gEAA8D;AVilC1E;;AUhtCA;EAqIc,0DAA4E;AV+kC1F;;AUptCA;;EAwIU,6BAA6B;EAC7B,qBRpKwB;EQqKxB,gBAAgB;EAChB,cRtKwB;AFuvClC;;AU5tCA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXgsChB;;AUluCA;EAoJU,sBClHM;EDmHN,cRhLwB;AFkwClC;;AUvuCA;EA4Jc,gEAA8D;AV+kC5E;;AU3uCA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXitChB;;AUnvCA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXssCrE;;AUxvCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AX4sCrE;;AU9vCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXktCrE;;AUpwCA;EA2EM,yBRxG4B;EQyG5B,yBAAyB;EACzB,WC3CU;AXwuChB;;AU1wCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AX8uChB;;AUhxCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXmvChB;;AUrxCA;EAwFU,kDRrHwB;AFszClC;;AUzxCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AX6vChB;;AU/xCA;;EAgGQ,yBR7H0B;EQ8H1B,yBAAyB;EACzB,gBAAgB;AVosCxB;;AUtyCA;EAoGQ,sBClEQ;EDmER,cRlI0B;AFw0ClC;;AU3yCA;EAwGU,yBC3CuB;AXkvCjC;;AU/yCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cR3IwB;AFo1ClC;;AUvzCA;EAiHU,0DAA4E;AV0sCtF;;AU3zCA;EAmHQ,6BAA6B;EAC7B,qBRjJ0B;EQkJ1B,cRlJ0B;AF81ClC;;AUj0CA;EA0HU,yBRvJwB;EQwJxB,qBRxJwB;EQyJxB,WC1FM;AXqyChB;;AUv0CA;EA+HY,gEAA8D;AV4sC1E;;AU30CA;EAqIc,0DAA4E;AV0sC1F;;AU/0CA;;EAwIU,6BAA6B;EAC7B,qBRtKwB;EQuKxB,gBAAgB;EAChB,cRxKwB;AFo3ClC;;AUv1CA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AX2zChB;;AU71CA;EAoJU,sBClHM;EDmHN,cRlLwB;AF+3ClC;;AUl2CA;EA4Jc,gEAA8D;AV0sC5E;;AUt2CA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AX40ChB;;AU92CA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXi0CrE;;AUn3CA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXu0CrE;;AUz3CA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AX60CrE;;AU/3CA;EA2EM,yBRzG4B;EQ0G5B,yBAAyB;EACzB,yBC7Ce;AXq2CrB;;AUr4CA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,yBClDa;AX22CrB;;AU34CA;EAqFQ,yBAAyB;EACzB,yBCtDa;AXg3CrB;;AUh5CA;EAwFU,kDRtHwB;AFk7ClC;;AUp5CA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,yBC7Da;AX03CrB;;AU15CA;;EAgGQ,yBR9H0B;EQ+H1B,yBAAyB;EACzB,gBAAgB;AV+zCxB;;AUj6CA;EAoGQ,oCCpEa;EDqEb,cRnI0B;AFo8ClC;;AUt6CA;EAwGU,oCC3CuB;AX62CjC;;AU16CA;;EA2GU,oCC3EW;ED4EX,yBAAyB;EACzB,gBAAgB;EAChB,cR5IwB;AFg9ClC;;AUl7CA;EAiHU,sFAA4E;AVq0CtF;;AUt7CA;EAmHQ,6BAA6B;EAC7B,qBRlJ0B;EQmJ1B,cRnJ0B;AF09ClC;;AU57CA;EA0HU,yBRxJwB;EQyJxB,qBRzJwB;EQ0JxB,yBC5FW;AXk6CrB;;AUl8CA;EA+HY,gEAA8D;AVu0C1E;;AUt8CA;EAqIc,sFAA4E;AVq0C1F;;AU18CA;;EAwIU,6BAA6B;EAC7B,qBRvKwB;EQwKxB,gBAAgB;EAChB,cRzKwB;AFg/ClC;;AUl9CA;EA6IQ,6BAA6B;EAC7B,gCC9Ga;ED+Gb,yBC/Ga;AXw7CrB;;AUx9CA;EAoJU,oCCpHW;EDqHX,cRnLwB;AF2/ClC;;AU79CA;EA4Jc,gEAA8D;AVq0C5E;;AUj+CA;;EA+JU,6BAA6B;EAC7B,gCChIW;EDiIX,gBAAgB;EAChB,yBClIW;AXy8CrB;;AUz+CA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AX47CrE;;AU9+CA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXk8CrE;;AUp/CA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXw8CrE;;AU1/CA;EA2EM,yBRnG2B;EQoG3B,yBAAyB;EACzB,WC3CU;AX89ChB;;AUhgDA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXo+ChB;;AUtgDA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXy+ChB;;AU3gDA;EAwFU,kDRhHuB;AFuiDjC;;AU/gDA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXm/ChB;;AUrhDA;;EAgGQ,yBRxHyB;EQyHzB,yBAAyB;EACzB,gBAAgB;AV07CxB;;AU5hDA;EAoGQ,sBClEQ;EDmER,cR7HyB;AFyjDjC;;AUjiDA;EAwGU,yBC3CuB;AXw+CjC;;AUriDA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRtIuB;AFqkDjC;;AU7iDA;EAiHU,0DAA4E;AVg8CtF;;AUjjDA;EAmHQ,6BAA6B;EAC7B,qBR5IyB;EQ6IzB,cR7IyB;AF+kDjC;;AUvjDA;EA0HU,yBRlJuB;EQmJvB,qBRnJuB;EQoJvB,WC1FM;AX2hDhB;;AU7jDA;EA+HY,gEAA8D;AVk8C1E;;AUjkDA;EAqIc,0DAA4E;AVg8C1F;;AUrkDA;;EAwIU,6BAA6B;EAC7B,qBRjKuB;EQkKvB,gBAAgB;EAChB,cRnKuB;AFqmDjC;;AU7kDA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXijDhB;;AUnlDA;EAoJU,sBClHM;EDmHN,cR7KuB;AFgnDjC;;AUxlDA;EA4Jc,gEAA8D;AVg8C5E;;AU5lDA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXkkDhB;;AUpmDA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXujDrE;;AUzmDA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AX6jDrE;;AU/mDA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXmkDrE;;AUrnDA;EATE,kBR6BgB;EQ5BhB,kBRFc;AFooDhB;;AU1nDA;EANE,eRLW;AFyoDb;;AU9nDA;EAJE,kBRRc;AF8oDhB;;AUloDA;EAFE,iBRXa;AFmpDf;;AUtoDA;;EAgMI,uBRjO2B;EQkO3B,qBRvO0B;EQwO1B,gBAtNyB;EAuNzB,YAtNyB;AViqD7B;;AU9oDA;EAqMI,aAAa;EACb,WAAW;AV68Cf;;AUnpDA;EAwMI,6BAA6B;EAC7B,oBAAoB;AV+8CxB;;AUxpDA;ETvCE,kBAAkB;EAKhB,2BAAiC;EACjC,0BAAgC;ES8O9B,6BAA6B;AVk9CnC;;AU/pDA;EA+MI,4BRlP0B;EQmP1B,qBRtP0B;EQuP1B,cRzP0B;EQ0P1B,gBAAgB;EAChB,oBAAoB;AVo9CxB;;AUvqDA;EAqNI,uBR9LqB;EQ+LrB,gCAA0D;EAC1D,iCAA2D;AVs9C/D;;AUp9CA;EACE,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,2BAA2B;AVu9C7B;;AU39CA;EAMI,qBAAqB;AVy9CzB;;AU/9CA;ETzHI,oBSiIwC;AV29C5C;;AUn+CA;EAUI,sBAAsB;AV69C1B;;AUv+CA;EAYI,mBAAmB;AV+9CvB;;AU3+CA;EAlOE,kBR6BgB;EQ5BhB,kBRFc;AFmtDhB;;AUh/CA;EA7NE,kBRRc;AFytDhB;;AUp/CA;EA3NE,iBRXa;AF8tDf;;AUx/CA;EA0BQ,4BAA4B;EAC5B,yBAAyB;AVk+CjC;;AU7/CA;EA6BQ,6BAA6B;EAC7B,0BAA0B;ETvJ9B,kBSwJwC;AVo+C5C;;AUngDA;ETzHI,eS0JqC;AVs+CzC;;AUvgDA;EAoCQ,UAAU;AVu+ClB;;AU3gDA;EA0CQ,UAAU;AVq+ClB;;AU/gDA;EA4CU,UAAU;AVu+CpB;;AUnhDA;EA8CQ,YAAY;EACZ,cAAc;AVy+CtB;;AUxhDA;EAiDI,uBAAuB;AV2+C3B;;AU5hDA;EAoDQ,oBAAoB;EACpB,qBAAqB;AV4+C7B;;AUjiDA;EAuDI,yBAAyB;AV8+C7B;;AUriDA;EA0DQ,oBAAoB;EACpB,qBAAqB;AV++C7B;;AYhzDA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,WAAW;AZmzDb;;AYvzDA;EAMI,0BAA0B;EAC1B,kBV2CM;EU1CN,mBV0CM;EUzCN,WAAW;AZqzDf;;AChuDE;EW9FF;IAWI,gBAAuC;EZwzDzC;AACF;;AC5tDI;EWxGJ;IAcM,iBAAqE;EZ2zDzE;AACF;;ACntDI;EWvHJ;IAiBM,iBAAiE;EZ8zDrE;AACF;;ACnuDI;EW7GJ;IAoBM,iBAAqE;EZi0DzE;AACF;;AC1tDI;EW5HJ;IAuBM,iBAAiE;EZo0DrE;AACF;;Aa50DA;EAII,kBAAkB;Ab40DtB;;Aah1DA;;;;;;;EAcM,kBAAkB;Ab40DxB;;Aa11DA;;;;;;EAqBI,cXlC0B;EWmC1B,gBXEiB;EWDjB,kBAxC+B;Abs3DnC;;Aar2DA;EAyBI,cAAc;EACd,oBAAoB;Abg1DxB;;Aa12DA;EA4BM,eAAe;Abk1DrB;;Aa92DA;EA8BI,iBAAiB;EACjB,uBAAuB;Abo1D3B;;Aan3DA;EAiCM,oBAAoB;Abs1D1B;;Aav3DA;EAmCI,gBAAgB;EAChB,uBAAuB;Abw1D3B;;Aa53DA;EAsCM,oBAAoB;Ab01D1B;;Aah4DA;EAwCI,iBAAiB;EACjB,oBAAoB;Ab41DxB;;Aar4DA;EA2CI,kBAAkB;EAClB,uBAAuB;Ab81D3B;;Aa14DA;EA8CI,cAAc;EACd,kBAAkB;Abg2DtB;;Aa/4DA;EAiDI,4BXvD0B;EDmI1B,8BCtI0B;EW4D1B,qBAhEqC;Abk6DzC;;Aar5DA;EAqDI,4BAA4B;EZwE5B,gBYvEmC;EACnC,eAAe;Abo2DnB;;Aa35DA;EAyDM,wBAAwB;Abs2D9B;;Aa/5DA;EA2DQ,4BAA4B;Abw2DpC;;Aan6DA;EA6DQ,4BAA4B;Ab02DpC;;Aav6DA;EA+DQ,4BAA4B;Ab42DpC;;Aa36DA;EAiEQ,4BAA4B;Ab82DpC;;Aa/6DA;EAmEI,wBAAwB;EZ0DxB,gBYzDmC;EACnC,eAAe;Abg3DnB;;Aar7DA;EAuEM,uBAAuB;EACvB,iBAAiB;Abk3DvB;;Aa17DA;EA0EQ,uBAAuB;Abo3D/B;;Aa97DA;EZ6HI,gBYjDmC;Abs3DvC;;Aal8DA;EA8EI,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;Abw3DtB;;Aax8DA;EAkFM,eAAe;Ab03DrB;;Aa58DA;EAoFM,kBAAkB;Ab43DxB;;Aah9DA;EAsFM,qBAAqB;Ab83D3B;;Aap9DA;EAwFM,kBAAkB;Abg4DxB;;Aax9DA;EZ2CE,iCAAiC;EYgD/B,gBAAgB;EAChB,qBAvG8B;EAwG9B,gBAAgB;EAChB,iBAAiB;Abk4DrB;;Aah+DA;;EAiGI,cAAc;Abo4DlB;;Aar+DA;EAmGI,WAAW;Abs4Df;;Aaz+DA;;EAsGM,yBX/GwB;EWgHxB,qBA/GmC;EAgHnC,qBA/GmC;EAgHnC,mBAAmB;Abw4DzB;;Aaj/DA;EA2GM,cXxHwB;AFkgE9B;;Aar/DA;EA6GQ,mBAAmB;Ab44D3B;;Aaz/DA;;EAiHQ,qBAtHsC;EAuHtC,cX/HsB;AF4gE9B;;Aa//DA;;EAsHQ,qBAzHsC;EA0HtC,cXpIsB;AFkhE9B;;AargEA;;EA6HY,sBAAsB;Ab64DlC;;Aa1gEA;EAgIM,aAAa;Ab84DnB;;Aa9gEA;EAmII,kBXhHY;AF+/DhB;;AalhEA;EAqII,kBXpHY;AFqgEhB;;AathEA;EAuII,iBXvHW;AF0gEf;;AcxiEA;EACE,mBAAmB;EACnB,oBAAoB;EACpB,uBAAuB;EACvB,cATsB;EAUtB,aAVsB;AdqjExB;;AchjEA;EAQI,YAZwB;EAaxB,WAbwB;AdyjE5B;;AcrjEA;EAWI,YAdyB;EAezB,WAfyB;Ad6jE7B;;Ac1jEA;EAcI,YAhBwB;EAiBxB,WAjBwB;AdikE5B;;AelkEA;EACE,cAAc;EACd,kBAAkB;AfqkEpB;;AevkEA;EAII,cAAc;EACd,YAAY;EACZ,WAAW;AfukEf;;Ae7kEA;EAQM,uBb6DmB;AF4gEzB;;AejlEA;EAUI,WAAW;Af2kEf;;AerlEA;;;;;;;;;;;;;;;;;EA+BM,YAAY;EACZ,WAAW;Af0kEjB;;Ae1mEA;EAmCI,iBAAiB;Af2kErB;;Ae9mEA;EAqCI,gBAAgB;Af6kEpB;;AelnEA;EAuCI,gBAAgB;Af+kEpB;;AetnEA;EAyCI,qBAAqB;AfilEzB;;Ae1nEA;EA2CI,gBAAgB;AfmlEpB;;Ae9nEA;EA6CI,mBAAmB;AfqlEvB;;AeloEA;EA+CI,gBAAgB;AfulEpB;;AetoEA;EAiDI,qBAAqB;AfylEzB;;Ae1oEA;EAmDI,iBAAiB;Af2lErB;;Ae9oEA;EAqDI,sBAAsB;Af6lE1B;;AelpEA;EAuDI,iBAAiB;Af+lErB;;AetpEA;EAyDI,sBAAsB;AfimE1B;;Ae1pEA;EA2DI,sBAAsB;AfmmE1B;;Ae9pEA;EA6DI,iBAAiB;AfqmErB;;AelqEA;EA+DI,iBAAiB;AfumErB;;AetqEA;EAmEM,YAAwB;EACxB,WAAuB;AfumE7B;;Ae3qEA;EAmEM,YAAwB;EACxB,WAAuB;Af4mE7B;;AehrEA;EAmEM,YAAwB;EACxB,WAAuB;AfinE7B;;AerrEA;EAmEM,YAAwB;EACxB,WAAuB;AfsnE7B;;Ae1rEA;EAmEM,YAAwB;EACxB,WAAuB;Af2nE7B;;Ae/rEA;EAmEM,YAAwB;EACxB,WAAuB;AfgoE7B;;AepsEA;EAmEM,aAAwB;EACxB,YAAuB;AfqoE7B;;AgBlsEA;EAEE,4BdE4B;EcD5B,kBdyDU;EcxDV,kBAAkB;EAEhB,sCAXoD;AhB8sExD;;AgBzsEA;EAUI,mBAAmB;EACnB,0BAA0B;AhBmsE9B;;AgB9sEA;EAaI,mBAAmB;AhBqsEvB;;AgBltEA;;EAgBI,iBdV2B;AFitE/B;;AgBvtEA;EAkBI,uBAAuB;AhBysE3B;;AgB3tEA;Ef+II,ae3H4B;EAC5B,kBAAkB;EAClB,WAAW;AhB2sEf;;AgBjuEA;;;EA0BI,mBAAmB;AhB6sEvB;;AgBvuEA;EAgCM,uBd1ByB;Ec2BzB,cdxCuB;AFmvE7B;;AgB5uEA;EAgCM,yBdvCuB;EcwCvB,Yd3ByB;AF2uE/B;;AgBjvEA;EAgCM,4Bd5BwB;Ec6BxB,yBLsCe;AX+qErB;;AgBtvEA;EAgCM,yBdnCwB;EcoCxB,WLwCU;AXkrEhB;;AgB3vEA;EAgCM,yBdrB4B;EcsB5B,WLwCU;AXurEhB;;AgBhwEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX4qErE;;AgBrwEA;EAgCM,yBdnB4B;EcoB5B,WLwCU;AXisEhB;;AgB1wEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXsrErE;;AgB/wEA;EAgCM,yBdpB4B;EcqB5B,WLwCU;AX2sEhB;;AgBpxEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXgsErE;;AgBzxEA;EAgCM,yBdtB4B;EcuB5B,WLwCU;AXqtEhB;;AgB9xEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX0sErE;;AgBnyEA;EAgCM,yBdvB4B;EcwB5B,yBLsCe;AXiuErB;;AgBxyEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXotErE;;AgB7yEA;EAgCM,yBdjB2B;EckB3B,WLwCU;AXyuEhB;;AgBlzEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX8tErE;;AiBxzEA;EAEE,qBAAqB;EACrB,wBAAwB;EACxB,YAAY;EACZ,uBf0DuB;EezDvB,cAAc;EACd,YfsBW;EerBX,gBAAgB;EAChB,UAAU;EACV,WAAW;AjB0zEb;;AiBp0EA;EAYI,yBfT2B;AFq0E/B;;AiBx0EA;EAcI,yBff0B;AF60E9B;;AiB50EA;EAgBI,yBfjB0B;AFi1E9B;;AiBh1EA;EAkBI,yBfnB0B;EeoB1B,YAAY;AjBk0EhB;;AiBr1EA;EAyBQ,uBflBuB;AFk1E/B;;AiBz1EA;EA2BQ,uBfpBuB;AFs1E/B;;AiB71EA;EA6BQ,uBftBuB;AF01E/B;;AiBj2EA;EA+BQ,mEAA2F;AjBs0EnG;;AiBr2EA;EAyBQ,yBf/BqB;AF+2E7B;;AiBz2EA;EA2BQ,yBfjCqB;AFm3E7B;;AiB72EA;EA6BQ,yBfnCqB;AFu3E7B;;AiBj3EA;EA+BQ,qEAA2F;AjBs1EnG;;AiBr3EA;EAyBQ,4BfpBsB;AFo3E9B;;AiBz3EA;EA2BQ,4BftBsB;AFw3E9B;;AiB73EA;EA6BQ,4BfxBsB;AF43E9B;;AiBj4EA;EA+BQ,wEAA2F;AjBs2EnG;;AiBr4EA;EAyBQ,yBf3BsB;AF24E9B;;AiBz4EA;EA2BQ,yBf7BsB;AF+4E9B;;AiB74EA;EA6BQ,yBf/BsB;AFm5E9B;;AiBj5EA;EA+BQ,qEAA2F;AjBs3EnG;;AiBr5EA;EAyBQ,yBfb0B;AF64ElC;;AiBz5EA;EA2BQ,yBff0B;AFi5ElC;;AiB75EA;EA6BQ,yBfjB0B;AFq5ElC;;AiBj6EA;EA+BQ,qEAA2F;AjBs4EnG;;AiBr6EA;EAyBQ,yBfX0B;AF25ElC;;AiBz6EA;EA2BQ,yBfb0B;AF+5ElC;;AiB76EA;EA6BQ,yBff0B;AFm6ElC;;AiBj7EA;EA+BQ,qEAA2F;AjBs5EnG;;AiBr7EA;EAyBQ,yBfZ0B;AF46ElC;;AiBz7EA;EA2BQ,yBfd0B;AFg7ElC;;AiB77EA;EA6BQ,yBfhB0B;AFo7ElC;;AiBj8EA;EA+BQ,qEAA2F;AjBs6EnG;;AiBr8EA;EAyBQ,yBfd0B;AF87ElC;;AiBz8EA;EA2BQ,yBfhB0B;AFk8ElC;;AiB78EA;EA6BQ,yBflB0B;AFs8ElC;;AiBj9EA;EA+BQ,qEAA2F;AjBs7EnG;;AiBr9EA;EAyBQ,yBff0B;AF+8ElC;;AiBz9EA;EA2BQ,yBfjB0B;AFm9ElC;;AiB79EA;EA6BQ,yBfnB0B;AFu9ElC;;AiBj+EA;EA+BQ,qEAA2F;AjBs8EnG;;AiBr+EA;EAyBQ,yBfTyB;AFy9EjC;;AiBz+EA;EA2BQ,yBfXyB;AF69EjC;;AiB7+EA;EA6BQ,yBfbyB;AFi+EjC;;AiBj/EA;EA+BQ,qEAA2F;AjBs9EnG;;AiBr/EA;EAkCI,gCAtCkC;UAsClC,wBAtCkC;EAuClC,2CAAmC;UAAnC,mCAAmC;EACnC,yCAAiC;UAAjC,iCAAiC;EACjC,yCAAiC;UAAjC,iCAAiC;EACjC,yBfnC2B;EeoC3B,qEAA0F;EAC1F,6BAA6B;EAC7B,4BAA4B;EAC5B,0BAA0B;AjBu9E9B;;AiBjgFA;EA4CM,6BAA6B;AjBy9EnC;;AiBrgFA;EA8CM,6BAA6B;AjB29EnC;;AiBzgFA;EAgDM,oBAAoB;AjB69E1B;;AiB7gFA;EAoDI,eftBY;AFm/EhB;;AiBjhFA;EAsDI,ef1BY;AFy/EhB;;AiBrhFA;EAwDI,cf7BW;AF8/Ef;;AiB/9EA;EACE;IACE,2BAA2B;EjBk+E7B;EiBj+EA;IACE,4BAA4B;EjBm+E9B;AACF;;AiBx+EA;EACE;IACE,2BAA2B;EjBk+E7B;EiBj+EA;IACE,4BAA4B;EjBm+E9B;AACF;;AkB/gFA;EAEE,uBhBd6B;EgBe7B,chBxB4B;AFyiF9B;;AkBphFA;;EAMI,yBhBvB0B;EgBwB1B,qBA9B6B;EA+B7B,qBA9B6B;EA+B7B,mBAAmB;AlBmhFvB;;AkB5hFA;;EAeQ,uBhB3BuB;EgB4BvB,mBhB5BuB;EgB6BvB,chB1CqB;AF4jF7B;;AkBniFA;;EAeQ,yBhBxCqB;EgByCrB,qBhBzCqB;EgB0CrB,YhB7BuB;AFsjF/B;;AkB1iFA;;EAeQ,4BhB7BsB;EgB8BtB,wBhB9BsB;EgB+BtB,yBPoCa;AX4/ErB;;AkBjjFA;;EAeQ,yBhBpCsB;EgBqCtB,qBhBrCsB;EgBsCtB,WPsCQ;AXigFhB;;AkBxjFA;;EAeQ,yBhBtB0B;EgBuB1B,qBhBvB0B;EgBwB1B,WPsCQ;AXwgFhB;;AkB/jFA;;EAeQ,yBhBpB0B;EgBqB1B,qBhBrB0B;EgBsB1B,WPsCQ;AX+gFhB;;AkBtkFA;;EAeQ,yBhBrB0B;EgBsB1B,qBhBtB0B;EgBuB1B,WPsCQ;AXshFhB;;AkB7kFA;;EAeQ,yBhBvB0B;EgBwB1B,qBhBxB0B;EgByB1B,WPsCQ;AX6hFhB;;AkBplFA;;EAeQ,yBhBxB0B;EgByB1B,qBhBzB0B;EgB0B1B,yBPoCa;AXsiFrB;;AkB3lFA;;EAeQ,yBhBlByB;EgBmBzB,qBhBnByB;EgBoBzB,WPsCQ;AX2iFhB;;AkBlmFA;;EAoBM,mBAAmB;EACnB,SAAS;AlBmlFf;;AkBxmFA;;EAuBM,yBhB9B4B;EgB+B5B,WP+BU;AXujFhB;;AkB9mFA;;;;EA2BQ,mBAAmB;AlB0lF3B;;AkBrnFA;;EA6BM,sBAAsB;AlB6lF5B;;AkB1nFA;EA+BI,chBpD0B;AFmpF9B;;AkB9nFA;EAiCM,mBAAmB;AlBimFzB;;AkBloFA;EAoCM,yBhB3C4B;EgB4C5B,WPkBU;AXglFhB;;AkBvoFA;;EAwCQ,mBAAmB;AlBomF3B;;AkB5oFA;;EA2CQ,kBPYQ;EOXR,mBAAmB;AlBsmF3B;;AkBlpFA;EA8CI,6BA5DqC;AlBoqFzC;;AkBtpFA;;EAiDM,qBApEgC;EAqEhC,chBvEwB;AFirF9B;;AkB5pFA;EAoDI,6BAhEqC;AlB4qFzC;;AkBhqFA;;EAuDM,qBAxEgC;EAyEhC,chB7EwB;AF2rF9B;;AkBtqFA;EA0DI,6BAvEqC;AlBurFzC;;AkB1qFA;;EA+DU,sBAAsB;AlBgnFhC;;AkB/qFA;;EAoEM,iBAAiB;AlBgnFvB;;AkBprFA;;EAyEU,wBAAwB;AlBgnFlC;;AkBzrFA;EA2EI,WAAW;AlBknFf;;AkB7rFA;EAgFU,yBhB7FoB;AF8sF9B;;AkBjsFA;EAqFY,yBhBlGkB;AFktF9B;;AkBrsFA;EAuFc,4BhBrGgB;AFutF9B;;AkBzsFA;;EA2FM,qBAAqB;AlBmnF3B;;AkB9sFA;EAgGU,yBhB7GoB;AF+tF9B;;AkBhnFA;EjB/DE,iCAAiC;EiBkEjC,cAAc;EACd,kBAAkB;EAClB,eAAe;AlBknFjB;;AmB7uFA;EACE,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,2BAA2B;AnBgvF7B;;AmBpvFA;EAMI,qBAAqB;AnBkvFzB;;AmBxvFA;ElByII,oBkBjIwC;AnBovF5C;;AmB5vFA;EAUI,sBAAsB;AnBsvF1B;;AmBhwFA;EAYI,mBAAmB;AnBwvFvB;;AmBpwFA;EAgBM,ejBcO;AF0uFb;;AmBxwFA;EAmBM,kBjBUU;AF+uFhB;;AmB5wFA;EAqBI,uBAAuB;AnB2vF3B;;AmBhxFA;EAuBM,qBAAqB;EACrB,oBAAoB;AnB6vF1B;;AmBrxFA;EA0BI,yBAAyB;AnB+vF7B;;AmBzxFA;EA6BQ,mBAAmB;AnBgwF3B;;AmB7xFA;EA+BQ,eAAe;AnBkwFvB;;AmBjyFA;ElByII,ekBvGmC;AnBmwFvC;;AmBryFA;ElByII,ckBrGqC;EAE/B,yBAAyB;EACzB,4BAA4B;AnBowFtC;;AmB3yFA;EA6CU,0BAA0B;EAC1B,6BAA6B;AnBkwFvC;;AmB7vFA;EACE,mBAAmB;EACnB,4BjB/C4B;EiBgD5B,kBjBQU;EiBPV,cjBvD4B;EiBwD5B,oBAAoB;EACpB,kBjB1Bc;EiB2Bd,WAAW;EACX,uBAAuB;EACvB,gBAAgB;EAChB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;AnBgwFrB;;AmB5wFA;ElBsFI,oBkBxEuC;ElBwEvC,uBkBvEyC;AnBkwF7C;;AmBjxFA;EAqBM,uBjBhEyB;EiBiEzB,cjB9EuB;AF80F7B;;AmBtxFA;EAqBM,yBjB7EuB;EiB8EvB,YjBjEyB;AFs0F/B;;AmB3xFA;EAqBM,4BjBlEwB;EiBmExB,yBRAe;AX0wFrB;;AmBhyFA;EAqBM,yBjBzEwB;EiB0ExB,WREU;AX6wFhB;;AmBryFA;EAqBM,yBjB3D4B;EiB4D5B,WREU;AXkxFhB;;AmB1yFA;EA4BU,yBRGsC;EQFtC,cRW2D;AXuwFrE;;AmB/yFA;EAqBM,yBjBzD4B;EiB0D5B,WREU;AX4xFhB;;AmBpzFA;EA4BU,yBRGsC;EQFtC,cRW2D;AXixFrE;;AmBzzFA;EAqBM,yBjB1D4B;EiB2D5B,WREU;AXsyFhB;;AmB9zFA;EA4BU,yBRGsC;EQFtC,cRW2D;AX2xFrE;;AmBn0FA;EAqBM,yBjB5D4B;EiB6D5B,WREU;AXgzFhB;;AmBx0FA;EA4BU,yBRGsC;EQFtC,cRW2D;AXqyFrE;;AmB70FA;EAqBM,yBjB7D4B;EiB8D5B,yBRAe;AX4zFrB;;AmBl1FA;EA4BU,yBRGsC;EQFtC,cRW2D;AX+yFrE;;AmBv1FA;EAqBM,yBjBvD2B;EiBwD3B,WREU;AXo0FhB;;AmB51FA;EA4BU,yBRGsC;EQFtC,cRW2D;AXyzFrE;;AmBj2FA;EAgCI,kBjBpDY;AFy3FhB;;AmBr2FA;EAkCI,ejBvDS;AF83Fb;;AmBz2FA;EAoCI,kBjB1DY;AFm4FhB;;AmB72FA;ElBsFI,qBkB/C0C;ElB+C1C,sBkB9C0C;AnB00F9C;;AmBl3FA;ElBsFI,qBkB5C0C;ElB4C1C,sBkB3C0C;AnB40F9C;;AmBv3FA;ElBsFI,qBkBzC0C;ElByC1C,sBkBxC0C;AnB80F9C;;AmB53FA;ElBsFI,gBkB7ImB;EAyGnB,UAAU;EACV,kBAAkB;EAClB,UAAU;AnB+0Fd;;AmBn4FA;EAuDM,8BAA8B;EAC9B,WAAW;EACX,cAAc;EACd,SAAS;EACT,kBAAkB;EAClB,QAAQ;EACR,0DAA0D;EAC1D,+BAA+B;AnBg1FrC;;AmB94FA;EAgEM,WAAW;EACX,UAAU;AnBk1FhB;;AmBn5FA;EAmEM,WAAW;EACX,UAAU;AnBo1FhB;;AmBx5FA;EAuEM,yBAAmD;AnBq1FzD;;AmB55FA;EAyEM,yBAAoD;AnBu1F1D;;AmBh6FA;EA2EI,uBjB9DqB;AFu5FzB;;AmBv1FA;EAEI,0BAA0B;AnBy1F9B;;AoB/8FA;;EAGE,sBAAsB;ApBi9FxB;;AoBp9FA;;;;EAMI,oBAAoB;ApBq9FxB;;AoB39FA;;EAQI,iBApBmB;ApB4+FvB;;AoBh+FA;;EAUI,iBArBmB;ApBg/FvB;;AoBr+FA;;EAYI,sBAAsB;ApB89F1B;;AoB59FA;EACE,clB5B4B;EkB+B5B,elBHW;EkBIX,gBlBKmB;EkBJnB,kBAnCuB;ApBggGzB;;AoBn+FA;EAQI,cApCwB;EAqCxB,oBApCyB;ApBmgG7B;;AoBx+FA;EAWI,oBAAoB;ApBi+FxB;;AoB5+FA;EAaI,oBA7B+B;ApBggGnC;;AoBh/FA;EAkBM,elBnBO;AFq/Fb;;AoBp/FA;EAkBM,iBlBlBS;AFw/Ff;;AoBx/FA;EAkBM,elBjBO;AF2/Fb;;AoB5/FA;EAkBM,iBlBhBS;AF8/Ff;;AoBhgGA;EAkBM,kBlBfU;AFigGhB;;AoBpgGA;EAkBM,elBdO;AFogGb;;AoBxgGA;EAkBM,kBlBbU;AFugGhB;;AoBx/FA;EACE,clB/C4B;EkBkD5B,kBlBrBc;EkBsBd,gBlBjBiB;EkBkBjB,iBA7CyB;ApBsiG3B;;AoB//FA;EAQI,clBvD0B;EkBwD1B,gBlBnBiB;AF8gGrB;;AoBpgGA;EAWI,oBA/C+B;ApB4iGnC;;AoBxgGA;EAgBM,elBrCO;AFiiGb;;AoB5gGA;EAgBM,iBlBpCS;AFoiGf;;AoBhhGA;EAgBM,elBnCO;AFuiGb;;AoBphGA;EAgBM,iBlBlCS;AF0iGf;;AoBxhGA;EAgBM,kBlBjCU;AF6iGhB;;AoB5hGA;EAgBM,elBhCO;AFgjGb;;AoBhiGA;EAgBM,kBlB/BU;AFmjGhB;;AqBnlGA;EACE,cAAc;EACd,eAAe;EACf,mBAAmB;EACnB,kBAAkB;EAClB,yBAAyB;ArBslG3B;;AqBplGA;EAEE,gBnB0BiB;EmBzBjB,eAAe;EACf,gBAAgB;EAChB,UAAU;ArBslGZ;;AqB3lGA;EAOI,cAAc;EACd,eAAe;ArBwlGnB;;AqBnlGA;EACE,mBAAmB;EACnB,4BnBf4B;EmBgB5B,uBnB0CuB;EmBzCvB,oBAAoB;EACpB,kBnBKc;EmBJd,WAAW;EACX,uBAAuB;EACvB,oBAAoB;EACpB,gBAAgB;EAChB,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;ArBslGrB;;AsB5nGA,eAAA;ACuDA;EAxBE,uBrBhB6B;EqBiB7B,qBrBtB4B;EqBuB5B,kBrBoCU;EqBnCV,crB5B4B;AF8nG9B;;ACjkGI;EsB/BA,4BrB9B0B;AFkoG9B;;ACrkGI;EsB/BA,4BrB9B0B;AFsoG9B;;ACzkGI;EsB/BA,4BrB9B0B;AF0oG9B;;AC7kGI;EsB/BA,4BrB9B0B;AF8oG9B;;AuB/mGE;EAEE,qBrB9B0B;AF+oG9B;;AuBhnGE;EAIE,qBrBtB8B;EqBuB9B,kDrBvB8B;AFuoGlC;;AuB/mGE;;;;;EAEE,4BrBnC0B;EqBoC1B,wBrBpC0B;EqBqC1B,gBAAgB;EAChB,crB3C0B;AFgqG9B;;ACrmGI;;;;;EsBdE,+BrB7CwB;AFwqG9B;;AC7mGI;;;;;EsBdE,+BrB7CwB;AFgrG9B;;ACrnGI;;;;;EsBdE,+BrB7CwB;AFwrG9B;;AC7nGI;;;;;EsBdE,+BrB7CwB;AFgsG9B;;AwBlsGA;EAEE,2DtBN2B;EsBO3B,eAAe;EACf,WAAW;AxBosGb;;AwBnsGE;EACE,gBAAgB;AxBssGpB;;AwBlsGI;EACE,mBtBFyB;AFusG/B;;AwBtsGK;EAMG,mDtBPuB;AF2sG/B;;AwB1sGI;EACE,qBtBfuB;AF4tG7B;;AwB9sGK;EAMG,gDtBpBqB;AFguG7B;;AwBltGI;EACE,wBtBJwB;AFytG9B;;AwBttGK;EAMG,mDtBTsB;AF6tG9B;;AwB1tGI;EACE,qBtBXwB;AFwuG9B;;AwB9tGK;EAMG,gDtBhBsB;AF4uG9B;;AwBluGI;EACE,qBtBG4B;AFkuGlC;;AwBtuGK;EAMG,iDtBF0B;AFsuGlC;;AwB1uGI;EACE,qBtBK4B;AFwuGlC;;AwB9uGK;EAMG,kDtBA0B;AF4uGlC;;AwBlvGI;EACE,qBtBI4B;AFivGlC;;AwBtvGK;EAMG,kDtBD0B;AFqvGlC;;AwB1vGI;EACE,qBtBE4B;AF2vGlC;;AwB9vGK;EAMG,kDtBH0B;AF+vGlC;;AwBlwGI;EACE,qBtBC4B;AFowGlC;;AwBtwGK;EAMG,kDtBJ0B;AFwwGlC;;AwB1wGI;EACE,qBtBO2B;AFswGjC;;AwB9wGK;EAMG,kDtBEyB;AF0wGjC;;AwB1wGE;ErBoBA,kBDwBgB;ECvBhB,kBDPc;AFiwGhB;;AwB7wGE;ErBqBA,kBDXc;AFuwGhB;;AwB/wGE;ErBqBA,iBDda;AF4wGf;;AwBhxGE;EACE,cAAc;EACd,WAAW;AxBmxGf;;AwBlxGE;EACE,eAAe;EACf,WAAW;AxBqxGf;;AwBnxGA;EAGI,uBtB8BqB;EsB7BrB,gDAA4D;EAC5D,iDAA6D;AxBoxGjE;;AwBzxGA;EAOI,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;EAChB,eAAe;EACf,gBAAgB;AxBsxGpB;;AwBpxGA;EAEE,cAAc;EACd,eAAe;EACf,eAAe;EACf,2BrB/CkE;EqBgDlE,gBAAgB;AxBsxGlB;;AwB5xGA;EAQI,gBA1DsB;EA2DtB,eA1DqB;AxBk1GzB;;AwBjyGA;EAWI,eAAe;AxB0xGnB;;AwBryGA;EAcI,YAAY;AxB2xGhB;;AyB51GA;EACE,eAAe;EACf,qBAAqB;EACrB,iBAAiB;EACjB,kBAAkB;AzB+1GpB;;AyB91GE;EACE,eAAe;AzBi2GnB;;AyBh2GE;EACE,cvBF0B;AFq2G9B;;AyBl2GE;;;;;EAGE,cvBJ0B;EuBK1B,mBAAmB;AzBu2GvB;;AyBl2GA;ExB8HI,kBwB3HqC;AzBm2GzC;;A0Bt3GA;EACE,qBAAqB;EACrB,eAAe;EACf,kBAAkB;EAClB,mBAAmB;A1By3GrB;;A0B73GA;EAMI,avBHkB;AH83GtB;;A0Bj4GA;EAUM,qBxBU4B;EDkI9B,cyB3I+B;EAC7B,UAAU;A1B23GhB;;A0Bv4GA;EAeM,uBxBsDmB;EDyErB,iByB9HsC;A1B43G1C;;A0B54GA;EAmBI,eAAe;EACf,cAAc;EACd,cAAc;EACd,eAAe;EACf,aAAa;A1B63GjB;;A0Bp5GA;EAyBM,aAAa;A1B+3GnB;;A0Bx5GA;;EA4BM,wBxBjBwB;AFk5G9B;;A0B75GA;EzB8II,oByBhHwC;A1Bm4G5C;;A0Bj6GA;EAgCM,YAAY;EACZ,UAAU;A1Bq4GhB;;A0Bt6GA;EAmCQ,kBAAkB;A1Bu4G1B;;A0B16GA;EAuCM,qBxBnCwB;AF06G9B;;A0B96GA;EA6CQ,mBxBhCuB;AFq6G/B;;A0Bl7GA;EA+CQ,mBxBlCuB;AFy6G/B;;A0Bt7GA;EAkDU,qBfyDuB;AX+0GjC;;A0B17GA;EAuDU,mDxB1CqB;AFi7G/B;;A0B97GA;EA6CQ,qBxB7CqB;AFk8G7B;;A0Bl8GA;EA+CQ,qBxB/CqB;AFs8G7B;;A0Bt8GA;EAkDU,mBfyDuB;AX+1GjC;;A0B18GA;EAuDU,gDxBvDmB;AF88G7B;;A0B98GA;EA6CQ,wBxBlCsB;AFu8G9B;;A0Bl9GA;EA+CQ,wBxBpCsB;AF28G9B;;A0Bt9GA;EAkDU,qBfyDuB;AX+2GjC;;A0B19GA;EAuDU,mDxB5CoB;AFm9G9B;;A0B99GA;EA6CQ,qBxBzCsB;AF89G9B;;A0Bl+GA;EA+CQ,qBxB3CsB;AFk+G9B;;A0Bt+GA;EAkDU,qBfyDuB;AX+3GjC;;A0B1+GA;EAuDU,gDxBnDoB;AF0+G9B;;A0B9+GA;EA6CQ,qBxB3B0B;AFg+GlC;;A0Bl/GA;EA+CQ,qBxB7B0B;AFo+GlC;;A0Bt/GA;EAkDU,qBfyDuB;AX+4GjC;;A0B1/GA;EAuDU,iDxBrCwB;AF4+GlC;;A0B9/GA;EA6CQ,qBxBzB0B;AF8+GlC;;A0BlgHA;EA+CQ,qBxB3B0B;AFk/GlC;;A0BtgHA;EAkDU,qBfyDuB;AX+5GjC;;A0B1gHA;EAuDU,kDxBnCwB;AF0/GlC;;A0B9gHA;EA6CQ,qBxB1B0B;AF+/GlC;;A0BlhHA;EA+CQ,qBxB5B0B;AFmgHlC;;A0BthHA;EAkDU,qBfyDuB;AX+6GjC;;A0B1hHA;EAuDU,kDxBpCwB;AF2gHlC;;A0B9hHA;EA6CQ,qBxB5B0B;AFihHlC;;A0BliHA;EA+CQ,qBxB9B0B;AFqhHlC;;A0BtiHA;EAkDU,qBfyDuB;AX+7GjC;;A0B1iHA;EAuDU,kDxBtCwB;AF6hHlC;;A0B9iHA;EA6CQ,qBxB7B0B;AFkiHlC;;A0BljHA;EA+CQ,qBxB/B0B;AFsiHlC;;A0BtjHA;EAkDU,qBfyDuB;AX+8GjC;;A0B1jHA;EAuDU,kDxBvCwB;AF8iHlC;;A0B9jHA;EA6CQ,qBxBvByB;AF4iHjC;;A0BlkHA;EA+CQ,qBxBzByB;AFgjHjC;;A0BtkHA;EAkDU,qBfyDuB;AX+9GjC;;A0B1kHA;EAuDU,kDxBjCuB;AFwjHjC;;A0B9kHA;EvB0CE,kBDwBgB;ECvBhB,kBDPc;AF+iHhB;;A0BnlHA;EvB6CE,kBDXc;AFqjHhB;;A0BvlHA;EvB+CE,iBDda;AF0jHf;;A0B3lHA;EAkEM,qBxB5DwB;AFylH9B;;A0B/lHA;EAoEI,WAAW;A1B+hHf;;A0BnmHA;EAsEM,WAAW;A1BiiHjB;;A0BvmHA;EA0EM,aAAa;EACb,kBAAkB;EzB2EpB,cyB1E+B;EAC7B,YAAY;EACZ,eAAe;A1BiiHrB;;A0B/mHA;EAgFM,kBxB5CU;AF+kHhB;;A0BnnHA;EAkFM,kBxBhDU;AFqlHhB;;A0BvnHA;EAoFM,iBxBnDS;AF0lHf;;A2B9mHA;EAEE,oBAAoB;EACpB,aAAa;EACb,2BAA2B;EAC3B,kBAAkB;A3BgnHpB;;A2BrnHA;EAYQ,uBzBZuB;EyBavB,yBAAyB;EACzB,czB3BqB;AFwoH7B;;A2B3nHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,czBjCmB;AF8oH7B;;A2BjoHA;EAwBU,yBAAyB;EACzB,+CzBzBqB;EyB0BrB,czBvCmB;AFopH7B;;A2BvoHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,czB7CmB;AF0pH7B;;A2B7oHA;EAYQ,yBzBzBqB;EyB0BrB,yBAAyB;EACzB,YzBduB;AFmpH/B;;A2BnpHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,YzBpBqB;AFypH/B;;A2BzpHA;EAwBU,yBAAyB;EACzB,4CzBtCmB;EyBuCnB,YzB1BqB;AF+pH/B;;A2B/pHA;EA8BU,uBhBgEuB;EgB/DvB,yBAAyB;EACzB,YzBhCqB;AFqqH/B;;A2BrqHA;EAYQ,4BzBdsB;EyBetB,yBAAyB;EACzB,yBhBmDa;AX0mHrB;;A2B3qHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,yBhB6CW;AXgnHrB;;A2BjrHA;EAwBU,yBAAyB;EACzB,+CzB3BoB;EyB4BpB,yBhBuCW;AXsnHrB;;A2BvrHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,yBhBiCW;AX4nHrB;;A2B7rHA;EAYQ,yBzBrBsB;EyBsBtB,yBAAyB;EACzB,WhBqDQ;AXgoHhB;;A2BnsHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsoHhB;;A2BzsHA;EAwBU,yBAAyB;EACzB,4CzBlCoB;EyBmCpB,WhByCM;AX4oHhB;;A2B/sHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkpHhB;;A2BrtHA;EAYQ,yBzBP0B;EyBQ1B,yBAAyB;EACzB,WhBqDQ;AXwpHhB;;A2B3tHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AX8pHhB;;A2BjuHA;EAwBU,yBAAyB;EACzB,6CzBpBwB;EyBqBxB,WhByCM;AXoqHhB;;A2BvuHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AX0qHhB;;A2B7uHA;EAYQ,yBzBL0B;EyBM1B,yBAAyB;EACzB,WhBqDQ;AXgrHhB;;A2BnvHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsrHhB;;A2BzvHA;EAwBU,yBAAyB;EACzB,8CzBlBwB;EyBmBxB,WhByCM;AX4rHhB;;A2B/vHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXksHhB;;A2BrwHA;EAYQ,yBzBN0B;EyBO1B,yBAAyB;EACzB,WhBqDQ;AXwsHhB;;A2B3wHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AX8sHhB;;A2BjxHA;EAwBU,yBAAyB;EACzB,8CzBnBwB;EyBoBxB,WhByCM;AXotHhB;;A2BvxHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AX0tHhB;;A2B7xHA;EAYQ,yBzBR0B;EyBS1B,yBAAyB;EACzB,WhBqDQ;AXguHhB;;A2BnyHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsuHhB;;A2BzyHA;EAwBU,yBAAyB;EACzB,8CzBrBwB;EyBsBxB,WhByCM;AX4uHhB;;A2B/yHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkvHhB;;A2BrzHA;EAYQ,yBzBT0B;EyBU1B,yBAAyB;EACzB,yBhBmDa;AX0vHrB;;A2B3zHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,yBhB6CW;AXgwHrB;;A2Bj0HA;EAwBU,yBAAyB;EACzB,8CzBtBwB;EyBuBxB,yBhBuCW;AXswHrB;;A2Bv0HA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,yBhBiCW;AX4wHrB;;A2B70HA;EAYQ,yBzBHyB;EyBIzB,yBAAyB;EACzB,WhBqDQ;AXgxHhB;;A2Bn1HA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsxHhB;;A2Bz1HA;EAwBU,yBAAyB;EACzB,8CzBhBuB;EyBiBvB,WhByCM;AX4xHhB;;A2B/1HA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkyHhB;;A2Br2HA;EAmCI,kBzBZY;AFk1HhB;;A2Bz2HA;EAqCI,kBzBhBY;AFw1HhB;;A2B72HA;EAwCQ,eAAe;A3By0HvB;;A2Bj3HA;EA0CI,iBzBtBW;AFi2Hf;;A2Br3HA;EA6CQ,eAAe;A3B40HvB;;A2Bz3HA;EAiDM,6BAA6B;EAC7B,0BAA0B;A3B40HhC;;A2B93HA;EAoDM,4BAA4B;EAC5B,yBAAyB;A3B80H/B;;A2Bn4HA;EAwDQ,kBzBFI;AFi1HZ;;A2Bv4HA;EA0DQ,aAAa;A3Bi1HrB;;A2B34HA;EA6DM,sBAAsB;A3Bk1H5B;;A2B/4HA;EA+DM,sBAAsB;EACtB,YAAY;EACZ,gBAAgB;A3Bo1HtB;;A2Br5HA;EAmEM,uBAAuB;A3Bs1H7B;;A2Bz5HA;EAqEM,aAAa;EACb,YAAY;A3Bw1HlB;;A2B95HA;EAwEQ,eAAe;A3B01HvB;;A2Bl6HA;EA2EQ,eAAe;A3B21HvB;;A2Bt6HA;EA8EQ,eAAe;A3B41HvB;;A2B16HA;EAiFQ,eAAe;A3B61HvB;;A2B96HA;EAoFQ,0BAA4C;A3B81HpD;;A2Bl7HA;EAsFQ,0BzBhCI;EyBiCJ,uBAAuB;A3Bg2H/B;;A2Bv7HA;EAyFI,uBAAuB;A3Bk2H3B;;A2B37HA;EA4FM,WAAW;A3Bm2HjB;;A2B/7HA;EA8FM,YAAY;EACZ,eAAe;A3Bq2HrB;;A2Bp8HA;EAiGI,yBAAyB;A3Bu2H7B;;A2Bx8HA;EAmGM,0BAA4C;A3By2HlD;;A2B58HA;EAqGM,0BzB/CM;EyBgDN,2BAA2B;EAC3B,SAAS;A3B22Hf;;A2Bz2HA;EACE,oBAAoB;EACpB,aAAa;EACb,eAAe;EACf,2BAA2B;EAC3B,gBAAgB;EAChB,kBAAkB;A3B42HpB;;A2Bl3HA;EASM,yBhBpB2B;EgBqB3B,czB5HwB;AFy+H9B;;A2Bv3HA;EAYM,qBhBvB2B;AXs4HjC;;A2B33HA;EAeM,yBhB1B2B;EgB2B3B,czBlIwB;AFk/H9B;;A2Bh4HA;EAkBM,qBhB7B2B;AX+4HjC;;A2Bh3HA;EACE,YAAY;EACZ,OAAO;EACP,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,MAAM;EACN,WAAW;A3Bm3Hb;;A2Bj3HA;;EAGE,qBzB9I4B;EyB+I5B,kBzBpFU;EyBqFV,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,mBAAmB;A3Bm3HrB;;A2Bj3HA;EACE,4BzBnJ4B;EyBoJ5B,czB1J4B;AF8gI9B;;A2Bl3HA;EACE,qBzB1J4B;EyB2J5B,mBA5J4B;EA6J5B,2BA5JoC;EA6JpC,cAAc;EACd,eA7JwB;EA8JxB,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;A3Bq3HzB;;A2Bn3HA;EACE,mBAAmB;EACnB,aAAa;EACb,WAAW;EACX,uBAAuB;E1BjCrB,mB0BkCmC;EACrC,UAAU;A3Bs3HZ;;A2B53HA;EAQI,eAAe;A3Bw3HnB;;A4BtiIA;EACE,c1BF4B;E0BG5B,cAAc;EACd,e1B2BW;E0B1BX,gB1BiCe;AFwgIjB;;A4B7iIA;EAMI,oBAAoB;A5B2iIxB;;A4BjjIA;EASI,kB1BsBY;AFshIhB;;A4BrjIA;EAWI,kB1BkBY;AF4hIhB;;A4BzjIA;EAaI,iB1BeW;AFiiIf;;A4B9iIA;EACE,cAAc;EACd,kB1Bcc;E0Bbd,mBAAmB;A5BijIrB;;A4BpjIA;EAOM,Y1BdyB;AF+jI/B;;A4BxjIA;EAOM,c1B3BuB;AFglI7B;;A4B5jIA;EAOM,iB1BhBwB;AFykI9B;;A4BhkIA;EAOM,c1BvBwB;AFolI9B;;A4BpkIA;EAOM,c1BT4B;AF0kIlC;;A4BxkIA;EAOM,c1BP4B;AF4kIlC;;A4B5kIA;EAOM,c1BR4B;AFilIlC;;A4BhlIA;EAOM,c1BV4B;AFulIlC;;A4BplIA;EAOM,c1BX4B;AF4lIlC;;A4BxlIA;EAOM,c1BL2B;AF0lIjC;;A4BjlIA;EAEI,sBAAsB;A5BmlI1B;;A4BrlIA;EAKI,aAAa;EACb,2BAA2B;A5BolI/B;;A4B1lIA;E3B+GI,kB2BtGwC;A5BqlI5C;;A4B9lIA;;;EAcU,gBAAgB;A5BslI1B;;A4BpmIA;;;EAoBY,6BAA6B;EAC7B,0BAA0B;A5BslItC;;A4B3mIA;;;EA8BY,4BAA4B;EAC5B,yBAAyB;A5BmlIrC;;A4BlnIA;;;;;EAyCY,UAAU;A5BilItB;;A4B1nIA;;;;;;;;;EA8CY,UAAU;A5BwlItB;;A4BtoIA;;;;;;;;;EAgDc,UAAU;A5BkmIxB;;A4BlpIA;EAkDQ,YAAY;EACZ,cAAc;A5BomItB;;A4BvpIA;EAqDM,uBAAuB;A5BsmI7B;;A4B3pIA;EAuDM,yBAAyB;A5BwmI/B;;A4B/pIA;EA0DQ,YAAY;EACZ,cAAc;A5BymItB;;A4BpqIA;EA6DI,aAAa;EACb,2BAA2B;A5B2mI/B;;A4BzqIA;EAgEM,cAAc;A5B6mIpB;;A4B7qIA;EAkEQ,gBAAgB;E3B6CpB,qB2B5C2C;A5B+mI/C;;A4BlrIA;EAqEQ,YAAY;EACZ,cAAc;A5BinItB;;A4BvrIA;EAwEM,uBAAuB;A5BmnI7B;;A4B3rIA;EA0EM,yBAAyB;A5BqnI/B;;A4B/rIA;EA4EM,eAAe;A5BunIrB;;A4BnsIA;EAgFU,sBAAsB;A5BunIhC;;A4BvsIA;EAkFQ,uBAAuB;A5BynI/B;;A4B3sIA;EAoFQ,gBAAgB;A5B2nIxB;;AC3pIE;E2BpDF;IAuFM,aAAa;E5B6nIjB;AACF;;A4B5nIA;EAEI,kBAAkB;A5B8nItB;;ACzqIE;E2ByCF;IAII,qBAAqB;E5BioIvB;AACF;;AC3qIE;E2BqCF;IAMI,aAAa;IACb,YAAY;IACZ,cAAc;I3Bcd,oB2BbsC;IACtC,iBAAiB;E5BqoInB;E4B/oIF;IAYM,kB1BhGU;I0BiGV,oBAAoB;E5BsoIxB;E4BnpIF;IAeM,oBAAoB;E5BuoIxB;E4BtpIF;IAiBM,kB1BvGU;I0BwGV,oBAAoB;E5BwoIxB;E4B1pIF;IAoBM,iB1B3GS;I0B4GT,oBAAoB;E5ByoIxB;AACF;;A4BxoIA;EAEI,gBAAgB;A5B0oIpB;;ACxsIE;E2B4DF;IAII,aAAa;IACb,aAAa;IACb,YAAY;IACZ,cAAc;E5B6oIhB;E4BppIF;IASM,gBAAgB;E5B8oIpB;E4BvpIF;IAWM,cAAc;E5B+oIlB;E4B1pIF;IAaQ,YAAY;E5BgpIlB;E4B7pIF;I3BDI,qB2BgB2C;E5BipI7C;AACF;;A4BhpIA;EACE,sBAAsB;EACtB,WAAW;EACX,e1BhIW;E0BiIX,kBAAkB;EAClB,mBAAmB;A5BmpIrB;;A4BxpIA;;;EAaU,c1BxKoB;AFyzI9B;;A4B9pIA;;;EAeQ,kB1B3IQ;AFgyIhB;;A4BpqIA;;;EAiBQ,kB1B/IQ;AFwyIhB;;A4B1qIA;;;EAmBQ,iB1BlJO;AF+yIf;;A4BhrIA;EAqBM,c1B7KwB;E0B8KxB,azBnLgB;EyBoLhB,oBAAoB;EACpB,kBAAkB;EAClB,MAAM;EACN,YzBvLgB;EyBwLhB,UAAU;A5B+pIhB;;A4B1rIA;;EA+BM,mBzB5LgB;AH41ItB;;A4B/rIA;EAiCM,OAAO;A5BkqIb;;A4BnsIA;;EAqCM,oBzBlMgB;AHq2ItB;;A4BxsIA;EAuCM,QAAQ;A5BqqId;;A4B5sIA;EA2CM,6BAA6B;E3BrD/B,c2BsD+B;EAC7B,YAAY;EACZ,UAAU;A5BqqIhB;;A4BntIA;EAgDM,kB1B5KU;AFm1IhB;;A4BvtIA;EAkDM,kB1BhLU;AFy1IhB;;A4B3tIA;EAoDM,iB1BnLS;AF81If;;A6Bj4IA,qBAAA;ACSA;EAGE,e5ByBW;E4BxBX,mBAAmB;A9B03IrB;;A8B93IA;EAMI,mBAAmB;EACnB,c5BM8B;E4BL9B,aAAa;EACb,uBAAuB;EACvB,iBAduC;A9B04I3C;;A8Bt4IA;EAYM,c5BfwB;AF64I9B;;A8B14IA;EAcI,mBAAmB;EACnB,aAAa;A9Bg4IjB;;A8B/4IA;E7BuII,e6BtHoC;A9Bk4IxC;;A8Bn5IA;EAoBQ,c5BvBsB;E4BwBtB,eAAe;EACf,oBAAoB;A9Bm4I5B;;A8Bz5IA;EAwBM,c5BxBwB;E4ByBxB,iBAAiB;A9Bq4IvB;;A8B95IA;;EA4BI,uBAAuB;EACvB,aAAa;EACb,eAAe;EACf,2BAA2B;A9Bu4I/B;;A8Bt6IA;E7BuII,mB6BrGuC;A9Bw4I3C;;A8B16IA;E7BuII,kB6BnGuC;A9B04I3C;;A8B96IA;;EAyCM,uBAAuB;A9B04I7B;;A8Bn7IA;;EA6CM,yBAAyB;A9B24I/B;;A8Bx7IA;EAgDI,kB5BnBY;AF+5IhB;;A8B57IA;EAkDI,kB5BvBY;AFq6IhB;;A8Bh8IA;EAoDI,iB5B1BW;AF06If;;A8Bp8IA;EAwDM,iBAAiB;A9Bg5IvB;;A8Bx8IA;EA2DM,iBAAiB;A9Bi5IvB;;A8B58IA;EA8DM,iBAAiB;A9Bk5IvB;;A8Bh9IA;EAiEM,iBAAiB;A9Bm5IvB;;A+Bx8IA;EACE,uB7BP6B;E6BQ7B,sBApBmB;EAqBnB,0F7BtB2B;E6BuB3B,c7BlB4B;E6BmB5B,eAAe;EACf,gBAvBoB;EAwBpB,kBAAkB;A/B28IpB;;A+Bz8IA;EACE,6BAzBwC;EA0BxC,oBAAoB;EACpB,kD7B/B2B;E6BgC3B,aAAa;A/B48If;;A+B18IA;EACE,mBAAmB;EACnB,c7BhC4B;E6BiC5B,aAAa;EACb,YAAY;EACZ,gB7BGe;E6BFf,qBAlCgC;A/B++IlC;;A+Bn9IA;EAQI,uBAAuB;A/B+8I3B;;A+B78IA;EACE,mBAAmB;EACnB,eAAe;EACf,aAAa;EACb,uBAAuB;EACvB,qBA3CgC;A/B2/IlC;;A+B98IA;EACE,cAAc;EACd,kBAAkB;A/Bi9IpB;;A+B/8IA;EACE,6BA9CyC;EA+CzC,eA9C2B;A/BggJ7B;;A+Bh9IA;EACE,6BA/CwC;EAgDxC,6B7BpD6B;E6BqD7B,oBAAoB;EACpB,aAAa;A/Bm9If;;A+Bj9IA;EACE,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,YAAY;EACZ,cAAc;EACd,uBAAuB;EACvB,gBAzD2B;A/B6gJ7B;;A+B39IA;E9B6EI,+BCrI2B;AFuhJ/B;;A+Bl9IA;EAEI,qB7BlCkB;AFs/ItB;;AgCnhJA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,mBAAmB;AhCshJrB;;AgCzhJA;EAOM,cAAc;AhCshJpB;;AgC7hJA;EAUM,UAAU;EACV,QAAQ;AhCuhJd;;AgCliJA;EAcM,YAAY;EACZ,mBA9BuB;EA+BvB,oBAAoB;EACpB,SAAS;AhCwhJf;;AgCthJA;EACE,aAAa;E/BiHX,O+BhHqB;EACvB,gBAzC6B;EA0C7B,gBAtC2B;EAuC3B,kBAAkB;EAClB,SAAS;EACT,WApCqB;AhC6jJvB;;AgCvhJA;EACE,uB9BjC6B;E8BkC7B,kB9BoBU;E8BnBV,0F9BhD2B;E8BiD3B,sBA9CsC;EA+CtC,mBA9CmC;AhCwkJrC;;AgB5jJgB;EgBqCd,c9BhD4B;E8BiD5B,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,sBAAsB;EACtB,kBAAkB;AhC2hJpB;;AgCzhJA;;E/BkFI,mB+BhFmC;EACrC,mBAAmB;EACnB,mBAAmB;EACnB,WAAW;AhC4hJb;;AgCjiJA;;EAOI,4B9BxD0B;E8ByD1B,c9BpEyB;AFmmJ7B;;AgCviJA;;EAUI,yB9BlD8B;E8BmD9B,WrBSY;AXyhJhB;;AgChiJA;EACE,yB9BjE6B;E8BkE7B,YAAY;EACZ,cAAc;EACd,WAAW;EACX,gBAAgB;AhCmiJlB;;AiCjnJA;EAEE,mBAAmB;EACnB,8BAA8B;AjCmnJhC;;AiCtnJA;EAKI,kB/B8DQ;AFujJZ;;AiC1nJA;EAOI,qBAAqB;EACrB,mBAAmB;AjCunJvB;;AiC/nJA;EAWI,aAAa;AjCwnJjB;;AiCnoJA;;EAcM,aAAa;AjC0nJnB;;AiCxoJA;EAgBM,aAAa;AjC4nJnB;;AiC5oJA;EAmBQ,gBAAgB;EhC2HpB,qBgChJqC;AjCmpJzC;;AiCjpJA;EAsBQ,YAAY;AjC+nJpB;;AClkJE;EgCnFF;IAyBI,aAAa;EjCioJf;EiC1pJF;IA4BQ,YAAY;EjCioJlB;AACF;;AiChoJA;EACE,mBAAmB;EACnB,aAAa;EACb,gBAAgB;EAChB,YAAY;EACZ,cAAc;EACd,uBAAuB;AjCmoJzB;;AiCzoJA;;EASI,gBAAgB;AjCqoJpB;;AC7lJE;EgCjDF;IAaM,sBA7CmC;EjCmrJvC;AACF;;AiCroJA;;EAEE,gBAAgB;EAChB,YAAY;EACZ,cAAc;AjCwoJhB;;AiC5oJA;;EAQM,YAAY;AjCyoJlB;;AC3mJE;EgCtCF;;IhCiGI,qBgChJqC;EjCssJvC;AACF;;AiC1oJA;EACE,mBAAmB;EACnB,2BAA2B;AjC6oJ7B;;AC3nJE;EgCpBF;IAMM,kBAAkB;EjC8oJtB;AACF;;AC7nJE;EgCxBF;IAQI,aAAa;EjCkpJf;AACF;;AiCjpJA;EACE,mBAAmB;EACnB,yBAAyB;AjCopJ3B;;ACxoJE;EgCdF;IAKI,aAAa;EjCspJf;AACF;;AkC/tJA;EACE,uBAAuB;EACvB,aAAa;EACb,mBAAmB;AlCkuJrB;;AkCruJA;EAKI,sBAAsB;AlCouJ1B;;AkCzuJA;EAOI,8ChCD0B;EgCE1B,aAAa;EACb,oBAAoB;AlCsuJxB;;AkC/uJA;;EAYM,qBAAqB;AlCwuJ3B;;AkCpvJA;EAcM,mBAAmB;AlC0uJzB;;AkCxvJA;EAgBQ,kBAAkB;AlC4uJ1B;;AkC5vJA;EAkBI,8ChCZ0B;EgCa1B,gBAtBgB;EAuBhB,iBAvBgB;AlCqwJpB;;AkClwJA;EAwBM,kBA1BsB;EA2BtB,mBA3BsB;AlCywJ5B;;AkC5uJA;;EAEE,gBAAgB;EAChB,YAAY;EACZ,cAAc;AlC+uJhB;;AkC7uJA;EjC2GI,kBiC/IgB;AlCqxJpB;;AkC9uJA;EjCwGI,iBiC/IgB;AlCyxJpB;;AkC/uJA;EACE,gBAAgB;EAChB,YAAY;EACZ,cAAc;EACd,mBAAmB;AlCkvJrB;;AChtJE;EiCtCF;IAQI,gBAAgB;ElCmvJlB;AACF;;AmCrxJA;EACE,ejCkBW;AFswJb;;AmCzxJA;EAII,kBjCgBY;AFywJhB;;AmC7xJA;EAMI,kBjCYY;AF+wJhB;;AmCjyJA;EAQI,iBjCSW;AFoxJf;;AmC3xJA;EACE,iBArB0B;AnCmzJ5B;;AmC/xJA;EAGI,kBjCqCc;EiCpCd,cjCzB0B;EiC0B1B,cAAc;EACd,qBAzBiC;AnCyzJrC;;AmCtyJA;EAQM,4BjCvBwB;EiCwBxB,cjC/BwB;AFi0J9B;;AmC3yJA;EAYM,yBjClB4B;EiCmB5B,WxByCU;AX0vJhB;;AmChzJA;ElCoHI,8BCtI0B;EiCmCxB,cAnC0B;ElCsI5B,oBkCrIkC;AnCu0JtC;;AmClyJA;EACE,cjCzC4B;EiC0C5B,iBApC2B;EAqC3B,qBApC+B;EAqC/B,yBAAyB;AnCqyJ3B;;AmCzyJA;EAMI,eAtCoB;AnC60JxB;;AmC7yJA;EAQI,kBAxCoB;AnCi1JxB;;AoC50JA;EAEE,4BlCV4B;EkCW5B,kBlC6CU;EkC5CV,elCYW;AFk0Jb;;AoCl1JA;EAMI,mBAAmB;ApCg1JvB;;AoCt1JA;EAQI,mBAAmB;EACnB,0BAA0B;ApCk1J9B;;AoC31JA;EAYI,kBlCKY;AF80JhB;;AoC/1JA;EAcI,kBlCCY;AFo1JhB;;AoCn2JA;EAgBI,iBlCFW;AFy1Jf;;AoCv2JA;EAsCM,uBAH+C;ApCw0JrD;;AoC32JA;EAwCQ,uBlC9CuB;EkC+CvB,clC5DqB;AFm4J7B;;AoCh3JA;EA2CQ,mBlCjDuB;AF03J/B;;AoCp3JA;EAsCM,yBAH+C;ApCq1JrD;;AoCx3JA;EAwCQ,yBlC3DqB;EkC4DrB,YlC/CuB;AFm4J/B;;AoC73JA;EA2CQ,qBlC9DqB;AFo5J7B;;AoCj4JA;EAsCM,yBAH+C;ApCk2JrD;;AoCr4JA;EAwCQ,4BlChDsB;EkCiDtB,yBzBkBa;AX+0JrB;;AoC14JA;EA2CQ,wBlCnDsB;AFs5J9B;;AoC94JA;EAsCM,yBAH+C;ApC+2JrD;;AoCl5JA;EAwCQ,yBlCvDsB;EkCwDtB,WzBoBQ;AX01JhB;;AoCv5JA;EA2CQ,qBlC1DsB;AF06J9B;;AoC35JA;EAsCM,yBzB8B0C;AX21JhD;;AoC/5JA;EAwCQ,yBlCzC0B;EkC0C1B,WzBoBQ;AXu2JhB;;AoCp6JA;EA2CQ,qBlC5C0B;EkC6C1B,czBiC6D;AX41JrE;;AoCz6JA;EAsCM,yBzB8B0C;AXy2JhD;;AoC76JA;EAwCQ,yBlCvC0B;EkCwC1B,WzBoBQ;AXq3JhB;;AoCl7JA;EA2CQ,qBlC1C0B;EkC2C1B,czBiC6D;AX02JrE;;AoCv7JA;EAsCM,yBzB8B0C;AXu3JhD;;AoC37JA;EAwCQ,yBlCxC0B;EkCyC1B,WzBoBQ;AXm4JhB;;AoCh8JA;EA2CQ,qBlC3C0B;EkC4C1B,czBiC6D;AXw3JrE;;AoCr8JA;EAsCM,yBzB8B0C;AXq4JhD;;AoCz8JA;EAwCQ,yBlC1C0B;EkC2C1B,WzBoBQ;AXi5JhB;;AoC98JA;EA2CQ,qBlC7C0B;EkC8C1B,czBiC6D;AXs4JrE;;AoCn9JA;EAsCM,yBzB8B0C;AXm5JhD;;AoCv9JA;EAwCQ,yBlC3C0B;EkC4C1B,yBzBkBa;AXi6JrB;;AoC59JA;EA2CQ,qBlC9C0B;EkC+C1B,czBiC6D;AXo5JrE;;AoCj+JA;EAsCM,yBzB8B0C;AXi6JhD;;AoCr+JA;EAwCQ,yBlCrCyB;EkCsCzB,WzBoBQ;AX66JhB;;AoC1+JA;EA2CQ,qBlCxCyB;EkCyCzB,czBiC6D;AXk6JrE;;AoCj8JA;EACE,mBAAmB;EACnB,yBlC9D4B;EkC+D5B,0BAAgE;EAChE,WzBWc;EyBVd,aAAa;EACb,gBlC7Be;EkC8Bf,8BAA8B;EAC9B,iBAAiB;EACjB,mBAtEiC;EAuEjC,kBAAkB;ApCo8JpB;;AoC98JA;EAYI,YAAY;EACZ,cAAc;EnCgEd,mBmC/DsC;ApCs8J1C;;AoCp9JA;EAgBI,eAjEgC;EAkEhC,yBAAyB;EACzB,0BAA0B;ApCw8J9B;;AoCt8JA;EACE,qBlC9E4B;EkC+E5B,kBlCpBU;EkCqBV,mBAAmB;EACnB,uBAjFmC;EAkFnC,clCrF4B;EkCsF5B,qBAjFiC;ApC0hKnC;;AoC/8JA;;EASI,uBlCjF2B;AF4hK/B;;AoCp9JA;EAWI,6BAlFgD;ApC+hKpD;;AqC/gKA;EAEE,mBAAmB;EACnB,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,gBAAgB;EAChB,eAAe;EACf,WAxCU;ArCyjKZ;;AqCzhKA;EAWI,aAAa;ArCkhKjB;;AqChhKA;EAEE,wCnC7C2B;AF+jK7B;;AqChhKA;;EAEE,cA9CgC;EA+ChC,+BAA0D;EAC1D,cAAc;EACd,kBAAkB;EAClB,WAAW;ArCmhKb;;ACjgKE;EoCxBF;;IASI,cAAc;IACd,8BAA0D;IAC1D,YAxDuB;ErC8kKzB;AACF;;AqCrhKA;EAEE,gBAAgB;EAChB,YAxD2B;EAyD3B,eAAe;EpCsFb,WoC9IoB;EA0DtB,SAzDoB;EA0DpB,WA5D2B;ArCmlK7B;;AqCrhKA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAAgD;EAChD,gBAAgB;EAChB,uBAAuB;ArCwhKzB;;AqCthKA;;EAEE,mBAAmB;EACnB,4BnCpE4B;EmCqE5B,aAAa;EACb,cAAc;EACd,2BAA2B;EAC3B,aApE4B;EAqE5B,kBAAkB;ArCyhKpB;;AqCvhKA;EACE,gCnC/E4B;EmCgF5B,2BnCpBgB;EmCqBhB,4BnCrBgB;AF+iKlB;;AqCxhKA;EACE,cnCxF4B;EmCyF5B,YAAY;EACZ,cAAc;EACd,iBnC9Da;EmC+Db,cA7E8B;ArCwmKhC;;AqCzhKA;EACE,8BnC/BgB;EmCgChB,+BnChCgB;EmCiChB,6BnC7F4B;AFynK9B;;AqC/hKA;EpC4CI,mBoCtCuC;ArC6hK3C;;AqC3hKA;EpC9CE,iCAAiC;EoCgDjC,uBnC/F6B;EmCgG7B,YAAY;EACZ,cAAc;EACd,cAAc;EACd,aAtF4B;ArConK9B;;AsCxlKA;EACE,uBpC1C6B;EoC2C7B,mBAvDqB;EAwDrB,kBAAkB;EAClB,WAtDW;AtCipKb;;AsC/lKA;EASM,uBpClDyB;EoCmDzB,cpChEuB;AF0pK7B;;AsCpmKA;;EAcU,cpCpEmB;AF+pK7B;;AsCzmKA;;;;EAoBY,yB3BiCqB;E2BhCrB,cpC3EiB;AFuqK7B;;AsCjnKA;EAwBY,qBpC9EiB;AF2qK7B;;AsCrnKA;EA0BQ,cpChFqB;AF+qK7B;;ACxmKE;EqCjBF;;;;IAgCY,cpCtFiB;EFurK3B;EsCjoKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,cpC7Fe;EFosK3B;EsC9oKF;;IA0Cc,qBpChGe;EFwsK3B;EsClpKF;;;IA8CU,yB3BOuB;I2BNvB,cpCrGmB;EF8sK3B;EsCxpKF;IAmDc,uBpC5FiB;IoC6FjB,cpC1Ge;EFktK3B;AACF;;AsC7pKA;EASM,yBpC/DuB;EoCgEvB,YpCnDyB;AF2sK/B;;AsClqKA;;EAcU,YpCvDqB;AFgtK/B;;AsCvqKA;;;;EAoBY,uB3BiCqB;E2BhCrB,YpC9DmB;AFwtK/B;;AsC/qKA;EAwBY,mBpCjEmB;AF4tK/B;;AsCnrKA;EA0BQ,YpCnEuB;AFguK/B;;ACtqKE;EqCjBF;;;;IAgCY,YpCzEmB;EFwuK7B;EsC/rKF;;;;;;;;;;IAsCc,uB3BemB;I2BdnB,YpChFiB;EFqvK7B;EsC5sKF;;IA0Cc,mBpCnFiB;EFyvK7B;EsChtKF;;;IA8CU,uB3BOuB;I2BNvB,YpCxFqB;EF+vK7B;EsCttKF;IAmDc,yBpCzGe;IoC0Gf,YpC7FiB;EFmwK7B;AACF;;AsC3tKA;EASM,4BpCpDwB;EoCqDxB,yB3Bce;AXwsKrB;;AsChuKA;;EAcU,yB3BUW;AX6sKrB;;AsCruKA;;;;EAoBY,yB3BiCqB;E2BhCrB,yB3BGS;AXqtKrB;;AsC7uKA;EAwBY,gC3BAS;AXytKrB;;AsCjvKA;EA0BQ,yB3BFa;AX6tKrB;;ACpuKE;EqCjBF;;;;IAgCY,yB3BRS;EXquKnB;EsC7vKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,yB3BfO;EXkvKnB;EsC1wKF;;IA0Cc,gC3BlBO;EXsvKnB;EsC9wKF;;;IA8CU,yB3BOuB;I2BNvB,yB3BvBW;EX4vKnB;EsCpxKF;IAmDc,4BpC9FgB;IoC+FhB,yB3B5BO;EXgwKnB;AACF;;AsCzxKA;EASM,yBpC3DwB;EoC4DxB,W3BgBU;AXowKhB;;AsC9xKA;;EAcU,W3BYM;AXywKhB;;AsCnyKA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXixKhB;;AsC3yKA;EAwBY,kB3BEI;AXqxKhB;;AsC/yKA;EA0BQ,W3BAQ;AXyxKhB;;AClyKE;EqCjBF;;;;IAgCY,W3BNI;EXiyKd;EsC3zKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX8yKd;EsCx0KF;;IA0Cc,kB3BhBE;EXkzKd;EsC50KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXwzKd;EsCl1KF;IAmDc,yBpCrGgB;IoCsGhB,W3B1BE;EX4zKd;AACF;;AsCv1KA;EASM,yBpC7C4B;EoC8C5B,W3BgBU;AXk0KhB;;AsC51KA;;EAcU,W3BYM;AXu0KhB;;AsCj2KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX+0KhB;;AsCz2KA;EAwBY,kB3BEI;AXm1KhB;;AsC72KA;EA0BQ,W3BAQ;AXu1KhB;;ACh2KE;EqCjBF;;;;IAgCY,W3BNI;EX+1Kd;EsCz3KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX42Kd;EsCt4KF;;IA0Cc,kB3BhBE;EXg3Kd;EsC14KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXs3Kd;EsCh5KF;IAmDc,yBpCvFoB;IoCwFpB,W3B1BE;EX03Kd;AACF;;AsCr5KA;EASM,yBpC3C4B;EoC4C5B,W3BgBU;AXg4KhB;;AsC15KA;;EAcU,W3BYM;AXq4KhB;;AsC/5KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX64KhB;;AsCv6KA;EAwBY,kB3BEI;AXi5KhB;;AsC36KA;EA0BQ,W3BAQ;AXq5KhB;;AC95KE;EqCjBF;;;;IAgCY,W3BNI;EX65Kd;EsCv7KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX06Kd;EsCp8KF;;IA0Cc,kB3BhBE;EX86Kd;EsCx8KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXo7Kd;EsC98KF;IAmDc,yBpCrFoB;IoCsFpB,W3B1BE;EXw7Kd;AACF;;AsCn9KA;EASM,yBpC5C4B;EoC6C5B,W3BgBU;AX87KhB;;AsCx9KA;;EAcU,W3BYM;AXm8KhB;;AsC79KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX28KhB;;AsCr+KA;EAwBY,kB3BEI;AX+8KhB;;AsCz+KA;EA0BQ,W3BAQ;AXm9KhB;;AC59KE;EqCjBF;;;;IAgCY,W3BNI;EX29Kd;EsCr/KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXw+Kd;EsClgLF;;IA0Cc,kB3BhBE;EX4+Kd;EsCtgLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXk/Kd;EsC5gLF;IAmDc,yBpCtFoB;IoCuFpB,W3B1BE;EXs/Kd;AACF;;AsCjhLA;EASM,yBpC9C4B;EoC+C5B,W3BgBU;AX4/KhB;;AsCthLA;;EAcU,W3BYM;AXigLhB;;AsC3hLA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXygLhB;;AsCniLA;EAwBY,kB3BEI;AX6gLhB;;AsCviLA;EA0BQ,W3BAQ;AXihLhB;;AC1hLE;EqCjBF;;;;IAgCY,W3BNI;EXyhLd;EsCnjLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXsiLd;EsChkLF;;IA0Cc,kB3BhBE;EX0iLd;EsCpkLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXgjLd;EsC1kLF;IAmDc,yBpCxFoB;IoCyFpB,W3B1BE;EXojLd;AACF;;AsC/kLA;EASM,yBpC/C4B;EoCgD5B,yB3Bce;AX4jLrB;;AsCplLA;;EAcU,yB3BUW;AXikLrB;;AsCzlLA;;;;EAoBY,yB3BiCqB;E2BhCrB,yB3BGS;AXykLrB;;AsCjmLA;EAwBY,gC3BAS;AX6kLrB;;AsCrmLA;EA0BQ,yB3BFa;AXilLrB;;ACxlLE;EqCjBF;;;;IAgCY,yB3BRS;EXylLnB;EsCjnLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,yB3BfO;EXsmLnB;EsC9nLF;;IA0Cc,gC3BlBO;EX0mLnB;EsCloLF;;;IA8CU,yB3BOuB;I2BNvB,yB3BvBW;EXgnLnB;EsCxoLF;IAmDc,yBpCzFoB;IoC0FpB,yB3B5BO;EXonLnB;AACF;;AsC7oLA;EASM,yBpCzC2B;EoC0C3B,W3BgBU;AXwnLhB;;AsClpLA;;EAcU,W3BYM;AX6nLhB;;AsCvpLA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXqoLhB;;AsC/pLA;EAwBY,kB3BEI;AXyoLhB;;AsCnqLA;EA0BQ,W3BAQ;AX6oLhB;;ACtpLE;EqCjBF;;;;IAgCY,W3BNI;EXqpLd;EsC/qLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXkqLd;EsC5rLF;;IA0Cc,kB3BhBE;EXsqLd;EsChsLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EX4qLd;EsCtsLF;IAmDc,yBpCnFmB;IoCoFnB,W3B1BE;EXgrLd;AACF;;AsC3sLA;EAsDI,oBAAoB;EACpB,aAAa;EACb,mBA7GmB;EA8GnB,WAAW;AtCypLf;;AsCltLA;EA2DI,gCpCtG0B;AFiwL9B;;AsCttLA;EALE,OAAO;EACP,eAAe;EACf,QAAQ;EACR,WA/CiB;AtC8wLnB;;AsC7tLA;EAgEI,SAAS;AtCiqLb;;AsCjuLA;EAkEM,iCpC7GwB;AFgxL9B;;AsCruLA;EAoEI,MAAM;AtCqqLV;;AsCnqLA;;EAGI,oBA9HmB;AtCmyLvB;;AsCxqLA;;EAKI,uBAhImB;AtCwyLvB;;AsCtqLA;;EAEE,oBAAoB;EACpB,aAAa;EACb,cAAc;EACd,mBAvIqB;AtCgzLvB;;AsCvqLA;EAIM,6BAA6B;AtCuqLnC;;AsCrqLA;ErCpFE,iCAAiC;EqCsFjC,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;AtCwqLpB;;AsCtqLA;EACE,cpClJ4B;EDoB5B,eAAe;EACf,cAAc;EACd,eqC1BqB;ErC2BrB,kBAAkB;EAClB,cqC5BqB;ErC6InB,iBqCWkC;AtC6qLtC;;ACxyLE;EACE,8BAA8B;EAC9B,cAAc;EACd,WAAW;EACX,qBAAqB;EACrB,kBAAkB;EAClB,wBAAwB;EACxB,yBCiCQ;EDhCR,yDAAyD;EACzD,oCC0Ba;EDzBb,WAAW;AD2yLf;;AC1yLI;EACE,oBAAoB;AD6yL1B;;AC5yLI;EACE,oBAAoB;AD+yL1B;;AC9yLI;EACE,oBAAoB;ADizL1B;;AChzLE;EACE,qCAAiC;ADmzLrC;;AC/yLM;EACE,wCAAwC;ADkzLhD;;ACjzLM;EACE,UAAU;ADozLlB;;ACnzLM;EACE,0CAA0C;ADszLlD;;AsCptLA;EACE,aAAa;AtCutLf;;AsCrtLA;;EAEE,cpC3J4B;EoC4J5B,cAAc;EACd,gBAAgB;EAChB,uBAAuB;EACvB,kBAAkB;AtCwtLpB;;AsC9tLA;;EASM,qBAAqB;EACrB,sBAAsB;AtC0tL5B;;AsCxtLA;;EAEE,eAAe;AtC2tLjB;;AsC7tLA;;;;;EAOI,yBpCrK0B;EoCsK1B,cpC9J8B;AF43LlC;;AsC5tLA;EACE,YAAY;EACZ,cAAc;AtC+tLhB;;AsCjuLA;EAII,mBA5KgC;AtC64LpC;;AsCruLA;EAMI,UAAU;AtCmuLd;;AsCzuLA;EAQI,YAAY;EACZ,cAAc;AtCquLlB;;AsC9uLA;EAWI,oCAAoC;EACpC,mBA/LmB;EAgMnB,kCAAkC;AtCuuLtC;;AsCpvLA;EAgBM,6BApLyC;EAqLzC,4BpCjL4B;AFy5LlC;;AsCzvLA;EAmBM,6BApL0C;EAqL1C,4BpCpL4B;EoCqL5B,0BApLuC;EAqLvC,wBApLqC;EAqLrC,cpCvL4B;EoCwL5B,kCAAwE;AtC0uL9E;;AsCxuLA;EACE,YAAY;EACZ,cAAc;AtC2uLhB;;AsCzuLA;ErCpEI,oBqCqEoC;AtC4uLxC;;AsC7uLA;EAII,qBpClM8B;EoCmM9B,oBAAoB;ErCjEpB,cqCkE6B;AtC6uLjC;;AsC3uLA;EACE,mBAAmB;EACnB,sBAAsB;EACtB,mBAAmB;AtC8uLrB;;AsCjvLA;EAKI,oBAAoB;EACpB,qBAAqB;AtCgvLzB;;AsC9uLA;EACE,4BpCxN4B;EoCyN5B,YAAY;EACZ,aAAa;EACb,WA9LyB;EA+LzB,gBAAgB;AtCivLlB;;AC74LE;EqCrBF;IAqLI,cAAc;EtCkvLhB;EsCjvLA;;IAGI,mBAAmB;IACnB,aAAa;EtCkvLjB;EsCjvLA;IAEI,aAAa;EtCkvLjB;EsC10LF;IA0FI,uBpCxO2B;IoCyO3B,4CpCtPyB;IoCuPzB,iBAAiB;EtCmvLnB;EsCtvLA;IAKI,cAAc;EtCovLlB;EsClvLA;IA1MA,OAAO;IACP,eAAe;IACf,QAAQ;IACR,WA/CiB;EtC8+LjB;EsCxvLA;IAKI,SAAS;EtCsvLb;EsC3vLA;IAOM,4CpClQqB;EFy/L3B;EsC9vLA;IASI,MAAM;EtCwvLV;EsCjwLA;IrC/LA,iCAAiC;IqC6M3B,iCAA2C;IAC3C,cAAc;EtCuvLpB;EsCtvLA;;IAGI,oBA7QiB;EtCogMrB;EsC1vLA;;IAKI,uBA/QiB;EtCwgMrB;AACF;;ACn8LE;EqC4MA;;;;IAIE,oBAAoB;IACpB,aAAa;EtC2vLf;EsC79LF;IAoOI,mBAzRmB;EtCqhMrB;EsC7vLA;IAGI,kBAzR0B;EtCshM9B;EsChwLA;;IAMM,mBAAmB;EtC8vLzB;EsCpwLA;;IASM,kBpC/NI;EF89LV;EsCxwLA;;;;IAgBQ,wCAAwC;EtC8vLhD;EsC9wLA;IAuBU,wCAAwC;EtC0vLlD;EsCjxLA;IA4BU,4BpC1SkB;IoC2SlB,cpCtTiB;EF8iM3B;EsCrxLA;IA+BU,4BpC7SkB;IoC8SlB,cpCrSsB;EF8hMhC;EsC55LF;IAqKI,aAAa;EtC0vLf;EsCv5LF;;IAgKI,mBAAmB;IACnB,aAAa;EtC2vLf;EsCt4LF;IA8IM,oBAAoB;EtC2vLxB;EsC7vLA;IAKM,oDAAoD;EtC2vL1D;EsChwLA;IAOM,gCpC/TsB;IoCgUtB,0BAAkE;IAClE,gBAAgB;IAChB,YAAY;IACZ,4CpC3UqB;IoC4UrB,SAAS;EtC4vLf;EsCxwLA;IAkBM,cAAc;EtCyvLpB;EsCxvLM;IAEE,UAAU;IACV,oBAAoB;IACpB,wBAAwB;EtCyvLhC;EsCr7LF;IA8LI,YAAY;IACZ,cAAc;EtC0vLhB;EsCzvLA;IACE,2BAA2B;IrC9M3B,kBqC+MoC;EtC2vLtC;EsC1vLA;IACE,yBAAyB;IrCjNzB,iBqCkNoC;EtC4vLtC;EsCl4LF;IAwII,uBpCrV2B;IoCsV3B,8BpC/Rc;IoCgSd,+BpChSc;IoCiSd,6BpC7V0B;IoC8V1B,2CpCtWyB;IoCuWzB,aAAa;IACb,mBAAmB;IrClNnB,OqCmNuB;IACvB,eAAe;IACf,kBAAkB;IAClB,SAAS;IACT,WAhVkB;EtC6kMpB;EsCh5LF;IAqJM,sBAAsB;IACtB,mBAAmB;EtC8vLvB;EsC7wLA;IrCnNE,mBqCoOuC;EtC+vLzC;EsChxLA;IAoBM,4BpC1WsB;IoC2WtB,cpCtXqB;EFqnM3B;EsCpxLA;IAuBM,4BpC7WsB;IoC8WtB,cpCrW0B;EFqmMhC;EsC/vLE;IAEE,kBpCxTY;IoCyTZ,gBAAgB;IAChB,4EpC9XuB;IoC+XvB,cAAc;IACd,UAAU;IACV,oBAAoB;IACpB,wBAA8C;IAC9C,2BAA2B;IAC3B,yBpC9TM;IoC+TN,uCAAuC;EtCgwL3C;EsCpyLA;IAsCI,UAAU;IACV,QAAQ;EtCiwLZ;EsCv6LF;IAwKI,cAAc;EtCkwLhB;EsCjwLA;;IrC7PE,qBqCgQyC;EtCkwL3C;EsCrwLA;;IrC7PE,sBqCkQyC;EtCowL3C;EsClwLA;IAjWA,OAAO;IACP,eAAe;IACf,QAAQ;IACR,WA/CiB;EtCqpMjB;EsCxwLA;IAKI,SAAS;EtCswLb;EsC3wLA;IAOM,4CpCzZqB;EFgqM3B;EsC9wLA;IASI,MAAM;EtCwwLV;EsCvwLA;;IAGI,oBA9ZiB;EtCsqMrB;EsC3wLA;;IAKI,uBAhaiB;EtC0qMrB;EsC/wLA;;IAOI,oBAA4D;EtC4wLhE;EsCnxLA;;IASI,uBAA+D;EtC8wLnE;EsC5wLA;;IAGI,cpC1auB;EFurM3B;EsChxLA;;IAKI,6BAja2C;EtCgrM/C;EsC9wLA;IAKM,yBpCtasB;EFkrM5B;AACF;;AsCzwLA;EAEI,iCAA2C;AtC2wL/C;;AuCtqMA;EAEE,erCIW;EqCHX,gBAhC0B;AvCwsM5B;;AuC3qMA;EAMI,kBrCCY;AFwqMhB;;AuC/qMA;EAQI,kBrCHY;AF8qMhB;;AuCnrMA;EAUI,iBrCNW;AFmrMf;;AuCvrMA;;EAcM,iBAAiB;EACjB,kBAAkB;EAClB,uBrCwBmB;AFspMzB;;AuC9rMA;EAkBM,uBrCsBmB;AF0pMzB;;AuC9qMA;;EAEE,mBAAmB;EACnB,aAAa;EACb,uBAAuB;EACvB,kBAAkB;AvCirMpB;;AuC/qMA;;;;EAME,cA3D6B;EA4D7B,uBAAuB;EACvB,eA5D8B;EA6D9B,mBA5DkC;EA6DlC,oBA5DmC;EA6DnC,kBAAkB;AvCgrMpB;;AuC9qMA;;;EAGE,qBrChE4B;EqCiE5B,crCrE4B;EqCsE5B,gBpCvEoB;AHwvMtB;;AuCtrMA;;;EAOI,qBrCrE0B;EqCsE1B,crCzE0B;AF8vM9B;;AuC7rMA;;;EAUI,qBrC3D8B;AFovMlC;;AuCnsMA;;;EAYI,iDrCjFyB;AF8wM7B;;AuCzsMA;;;EAcI,yBrC3E0B;EqC4E1B,qBrC5E0B;EqC6E1B,gBAAgB;EAChB,crChF0B;EqCiF1B,YAAY;AvCisMhB;;AuC/rMA;;EAEE,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;AvCksMrB;;AuChsMA;EAEI,yBrC7E8B;EqC8E9B,qBrC9E8B;EqC+E9B,W5BnBY;AXqtMhB;;AuChsMA;EACE,crC/F4B;EqCgG5B,oBAAoB;AvCmsMtB;;AuCjsMA;EACE,eAAe;AvCosMjB;;AC/tME;EsClDF;IAiFI,eAAe;EvCqsMjB;EuC1tMF;;IAwBI,YAAY;IACZ,cAAc;EvCssMhB;EuCrsMA;IAEI,YAAY;IACZ,cAAc;EvCssMlB;AACF;;AC1uME;EsCsBF;IAiBI,YAAY;IACZ,cAAc;IACd,2BAA2B;IAC3B,QAAQ;EvCwsMV;EuCvsMA;IACE,QAAQ;EvCysMV;EuCxsMA;IACE,QAAQ;EvC0sMV;EuC9yMF;IAsGI,8BAA8B;EvC2sMhC;EuC5sMA;IAIM,QAAQ;EvC2sMd;EuC/sMA;IAMM,uBAAuB;IACvB,QAAQ;EvC4sMd;EuCntMA;IASM,QAAQ;EvC6sMd;EuCttMA;IAYM,QAAQ;EvC6sMd;EuCztMA;IAcM,QAAQ;EvC8sMd;EuC5tMA;IAgBM,yBAAyB;IACzB,QAAQ;EvC+sMd;AACF;;AwCv0MA;EACE,kBtCuCgB;EsCtChB,0FtC9B2B;EsC+B3B,etCIW;AFs0Mb;;AwC70MA;EAKI,qBtCakB;AF+zMtB;;AwCj1MA;EAYQ,uBtC3BuB;EsC4BvB,ctCzCqB;AFk3M7B;;AwCt1MA;EAeQ,0BtC9BuB;AFy2M/B;;AwC11MA;EAiBQ,YtChCuB;AF62M/B;;AwC91MA;EAYQ,yBtCxCqB;EsCyCrB,YtC5BuB;AFk3M/B;;AwCn2MA;EAeQ,4BtC3CqB;AFm4M7B;;AwCv2MA;EAiBQ,ctC7CqB;AFu4M7B;;AwC32MA;EAYQ,4BtC7BsB;EsC8BtB,yB7BqCa;AX8zMrB;;AwCh3MA;EAeQ,+BtChCsB;AFq4M9B;;AwCp3MA;EAiBQ,iBtClCsB;AFy4M9B;;AwCx3MA;EAYQ,yBtCpCsB;EsCqCtB,W7BuCQ;AXy0MhB;;AwC73MA;EAeQ,4BtCvCsB;AFy5M9B;;AwCj4MA;EAiBQ,ctCzCsB;AF65M9B;;AwCr4MA;EAYQ,yBtCtB0B;EsCuB1B,W7BuCQ;AXs1MhB;;AwC14MA;EAeQ,4BtCzB0B;AFw5MlC;;AwC94MA;EAiBQ,ctC3B0B;AF45MlC;;AwCl5MA;EAYQ,yBtCpB0B;EsCqB1B,W7BuCQ;AXm2MhB;;AwCv5MA;EAeQ,4BtCvB0B;AFm6MlC;;AwC35MA;EAiBQ,ctCzB0B;AFu6MlC;;AwC/5MA;EAYQ,yBtCrB0B;EsCsB1B,W7BuCQ;AXg3MhB;;AwCp6MA;EAeQ,4BtCxB0B;AFi7MlC;;AwCx6MA;EAiBQ,ctC1B0B;AFq7MlC;;AwC56MA;EAYQ,yBtCvB0B;EsCwB1B,W7BuCQ;AX63MhB;;AwCj7MA;EAeQ,4BtC1B0B;AFg8MlC;;AwCr7MA;EAiBQ,ctC5B0B;AFo8MlC;;AwCz7MA;EAYQ,yBtCxB0B;EsCyB1B,yB7BqCa;AX44MrB;;AwC97MA;EAeQ,4BtC3B0B;AF88MlC;;AwCl8MA;EAiBQ,ctC7B0B;AFk9MlC;;AwCt8MA;EAYQ,yBtClByB;EsCmBzB,W7BuCQ;AXu5MhB;;AwC38MA;EAeQ,4BtCrByB;AFq9MjC;;AwC/8MA;EAiBQ,ctCvByB;AFy9MjC;;AwCh8MA;;EAGI,gCtCzC2B;AF2+M/B;;AwCh8MA;EACE,yBtC5C6B;EsC6C7B,0BAA8C;EAC9C,ctCnD4B;EsCoD5B,iBAhDyB;EAiDzB,gBtCfe;EsCgBf,iBArD8B;EAsD9B,mBArDgC;AxCw/MlC;;AwCj8MA;EACE,qBAAqB;EACrB,aAAa;EACb,kBArD4B;EAsD5B,uBAAuB;AxCo8MzB;;AwCx8MA;EAMI,gCtC3D0B;EsC4D1B,mBAAmB;EACnB,cAAc;AxCs8MlB;;AwC98MA;EAWM,4BtCnEwB;EsCoExB,ctCrEwB;AF4gN9B;;AwCr8MA;EAEI,ctCxE0B;AF+gN9B;;AwCz8MA;EAIM,ctC3D4B;AFogNlC;;AwCv8MA;EACE,mBAAmB;EACnB,ctC/E4B;EsCgF5B,aAAa;EACb,2BAA2B;EAC3B,qBAAqB;AxC08MvB;;AwC/8MA;EvC6DI,oBuCtDsC;AxC48M1C;;AwCn9MA;EASI,YAAY;EACZ,cAAc;EACd,WAAW;AxC88Mf;;AwCz9MA;EAaI,eAAe;AxCg9MnB;;AwC79MA;EAeI,0BtC5E8B;EsC6E9B,ctC7F0B;AF+iN9B;;AwCl+MA;EAkBM,ctC/E4B;AFmiNlC;;AwCt+MA;EAoBI,8BtCjCc;EsCkCd,+BtClCc;AFw/MlB;;AwCp9MA;;EAEE,eAAe;AxCu9MjB;;AwCz9MA;;EAII,4BtCjG0B;AF2jN9B;;AwCx9MA;EvC9FE,qBAAqB;EACrB,euC8FgB;EvC7FhB,WuC6FqB;EvC5FrB,gBuC4FqB;EvC3FrB,kBAAkB;EAClB,mBAAmB;EACnB,UuCyFqB;EACrB,ctC1G4B;EDwI1B,oBuC7BoC;AxCi+MxC;;AwCp+MA;EAKI,kBAAkB;EAClB,oBAAoB;AxCm+MxB;;AyC7jNA;ExCkCE,iCAAiC;EwC9BjC,oBAAoB;EACpB,aAAa;EACb,evCGW;EuCFX,8BAA8B;EAC9B,gBAAgB;EAChB,gBAAgB;EAChB,mBAAmB;AzC8jNrB;;AyCxkNA;EAYI,mBAAmB;EACnB,4BvC/B0B;EuCgC1B,0BAzC4B;EA0C5B,wBAzC0B;EA0C1B,cvCrC0B;EuCsC1B,aAAa;EACb,uBAAuB;EACvB,mBAA6C;EAC7C,kBAxCyB;EAyCzB,mBAAmB;AzCgkNvB;;AyCrlNA;EAuBM,4BvC7CwB;EuC8CxB,cvC9CwB;AFgnN9B;;AyC1lNA;EA0BI,cAAc;AzCokNlB;;AyC9lNA;EA6BQ,4BvCnC0B;EuCoC1B,cvCpC0B;AFymNlC;;AyCnmNA;EAgCI,mBAAmB;EACnB,4BvCnD0B;EuCoD1B,0BA7D4B;EA8D5B,wBA7D0B;EA8D1B,aAAa;EACb,YAAY;EACZ,cAAc;EACd,2BAA2B;AzCukN/B;;AyC9mNA;EAyCM,qBAAqB;AzCykN3B;;AyClnNA;EA2CM,UAAU;EACV,uBAAuB;EACvB,oBAAoB;EACpB,qBAAqB;AzC2kN3B;;AyCznNA;EAgDM,yBAAyB;EACzB,oBAAoB;AzC6kN1B;;AyC9nNA;ExCoHI,mBwChEuC;AzC8kN3C;;AyCloNA;ExCoHI,kBwC9DuC;AzCglN3C;;AyCtoNA;EA0DM,uBAAuB;AzCglN7B;;AyC1oNA;EA6DM,yBAAyB;AzCilN/B;;AyC9oNA;EAiEM,6BAA6B;EAE3B,0BAAkE;AzCglN1E;;AyCnpNA;EAuEQ,4BvCtFsB;EuCuFtB,4BvC1FsB;AF0qN9B;;AyCxpNA;EA4EU,uBvCzFqB;EuC0FrB,qBvC/FoB;EuCgGpB,2CAA2E;AzCglNrF;;AyC9pNA;EAiFM,YAAY;EACZ,cAAc;AzCilNpB;;AyCnqNA;EAqFM,qBvCvGwB;EuCwGxB,mBA/F+B;EAgG/B,iBA/F6B;EAgG7B,gBAAgB;EAChB,kBAAkB;AzCklNxB;;AyC3qNA;EA2FQ,4BvC1GsB;EuC2GtB,qBvC/GsB;EuCgHtB,UAAU;AzColNlB;;AyCjrNA;ExCoHI,iBwCpBuE;AzCqlN3E;;AyCrrNA;EAmGU,2BvC1DE;EuC2DF,8BvC3DE;AFipNZ;;AyC1rNA;EA0GU,4BvCjEE;EuCkEF,+BvClEE;AFspNZ;;AyC/rNA;EAiHU,yBvCvHwB;EuCwHxB,qBvCxHwB;EuCyHxB,W9B7DM;E8B8DN,UAAU;AzCklNpB;;AyCtsNA;EAsHM,mBAAmB;AzColNzB;;AyC1sNA;EA2HY,mCvChFa;EuCiFb,gCvCjFa;EuCkFb,oBAAoB;AzCmlNhC;;AyChtNA;EAoIY,oCvCzFa;EuC0Fb,iCvC1Fa;EuC2Fb,qBAAqB;AzCglNjC;;AyCttNA;EA6II,kBvCnIY;AFgtNhB;;AyC1tNA;EA+II,kBvCvIY;AFstNhB;;AyC9tNA;EAiJI,iBvC1IW;AF2tNf;;A0C9vNA,eAAA;ACEA;EACE,cAAc;EACd,aAAa;EACb,YAAY;EACZ,cAAc;EACd,gBAPkB;A3CuwNpB;;A2C/vNE;EACE,UAAU;A3CkwNd;;A2CjwNE;EACE,UAAU;EACV,WAAW;A3CowNf;;A2CnwNE;EACE,UAAU;EACV,UAAU;A3CswNd;;A2CrwNE;EACE,UAAU;EACV,eAAe;A3CwwNnB;;A2CvwNE;EACE,UAAU;EACV,UAAU;A3C0wNd;;A2CzwNE;EACE,UAAU;EACV,eAAe;A3C4wNnB;;A2C3wNE;EACE,UAAU;EACV,UAAU;A3C8wNd;;A2C7wNE;EACE,UAAU;EACV,UAAU;A3CgxNd;;A2C/wNE;EACE,UAAU;EACV,UAAU;A3CkxNd;;A2CjxNE;EACE,UAAU;EACV,UAAU;A3CoxNd;;A2CnxNE;EACE,UAAU;EACV,UAAU;A3CsxNd;;A2CrxNE;E1CwGE,gB0CvGmC;A3CwxNvC;;A2CvxNE;E1CsGE,qB0CrGwC;A3C0xN5C;;A2CzxNE;E1CoGE,gB0CnGmC;A3C4xNvC;;A2C3xNE;E1CkGE,qB0CjGwC;A3C8xN5C;;A2C7xNE;E1CgGE,gB0C/FmC;A3CgyNvC;;A2C/xNE;E1C8FE,gB0C7FmC;A3CkyNvC;;A2CjyNE;E1C4FE,gB0C3FmC;A3CoyNvC;;A2CnyNE;E1C0FE,gB0CzFmC;A3CsyNvC;;A2CryNE;E1CwFE,gB0CvFmC;A3CwyNvC;;A2CtyNI;EACE,UAAU;EACV,SAA0B;A3CyyNhC;;A2CxyNI;E1CkFA,e0CjFqD;A3C2yNzD;;A2C/yNI;EACE,UAAU;EACV,eAA0B;A3CkzNhC;;A2CjzNI;E1CkFA,qB0CjFqD;A3CozNzD;;A2CxzNI;EACE,UAAU;EACV,gBAA0B;A3C2zNhC;;A2C1zNI;E1CkFA,sB0CjFqD;A3C6zNzD;;A2Cj0NI;EACE,UAAU;EACV,UAA0B;A3Co0NhC;;A2Cn0NI;E1CkFA,gB0CjFqD;A3Cs0NzD;;A2C10NI;EACE,UAAU;EACV,gBAA0B;A3C60NhC;;A2C50NI;E1CkFA,sB0CjFqD;A3C+0NzD;;A2Cn1NI;EACE,UAAU;EACV,gBAA0B;A3Cs1NhC;;A2Cr1NI;E1CkFA,sB0CjFqD;A3Cw1NzD;;A2C51NI;EACE,UAAU;EACV,UAA0B;A3C+1NhC;;A2C91NI;E1CkFA,gB0CjFqD;A3Ci2NzD;;A2Cr2NI;EACE,UAAU;EACV,gBAA0B;A3Cw2NhC;;A2Cv2NI;E1CkFA,sB0CjFqD;A3C02NzD;;A2C92NI;EACE,UAAU;EACV,gBAA0B;A3Ci3NhC;;A2Ch3NI;E1CkFA,sB0CjFqD;A3Cm3NzD;;A2Cv3NI;EACE,UAAU;EACV,UAA0B;A3C03NhC;;A2Cz3NI;E1CkFA,gB0CjFqD;A3C43NzD;;A2Ch4NI;EACE,UAAU;EACV,gBAA0B;A3Cm4NhC;;A2Cl4NI;E1CkFA,sB0CjFqD;A3Cq4NzD;;A2Cz4NI;EACE,UAAU;EACV,gBAA0B;A3C44NhC;;A2C34NI;E1CkFA,sB0CjFqD;A3C84NzD;;A2Cl5NI;EACE,UAAU;EACV,WAA0B;A3Cq5NhC;;A2Cp5NI;E1CkFA,iB0CjFqD;A3Cu5NzD;;ACr4NE;E0C/EF;IAgEM,UAAU;E3Cy5Nd;E2Cz9NF;IAkEM,UAAU;IACV,WAAW;E3C05Nf;E2C79NF;IAqEM,UAAU;IACV,UAAU;E3C25Nd;E2Cj+NF;IAwEM,UAAU;IACV,eAAe;E3C45NnB;E2Cr+NF;IA2EM,UAAU;IACV,UAAU;E3C65Nd;E2Cz+NF;IA8EM,UAAU;IACV,eAAe;E3C85NnB;E2C7+NF;IAiFM,UAAU;IACV,UAAU;E3C+5Nd;E2Cj/NF;IAoFM,UAAU;IACV,UAAU;E3Cg6Nd;E2Cr/NF;IAuFM,UAAU;IACV,UAAU;E3Ci6Nd;E2Cz/NF;IA0FM,UAAU;IACV,UAAU;E3Ck6Nd;E2C7/NF;IA6FM,UAAU;IACV,UAAU;E3Cm6Nd;E2CjgOF;I1C8II,gB0C9CqC;E3Co6NvC;E2CpgOF;I1C8II,qB0C5C0C;E3Cq6N5C;E2CvgOF;I1C8II,gB0C1CqC;E3Cs6NvC;E2C1gOF;I1C8II,qB0CxC0C;E3Cu6N5C;E2C7gOF;I1C8II,gB0CtCqC;E3Cw6NvC;E2ChhOF;I1C8II,gB0CpCqC;E3Cy6NvC;E2CnhOF;I1C8II,gB0ClCqC;E3C06NvC;E2CthOF;I1C8II,gB0ChCqC;E3C26NvC;E2CzhOF;I1C8II,gB0C9BqC;E3C46NvC;E2C5hOF;IAmHQ,UAAU;IACV,SAA0B;E3C46NhC;E2ChiOF;I1C8II,e0CxBuD;E3C66NzD;E2CniOF;IAmHQ,UAAU;IACV,eAA0B;E3Cm7NhC;E2CviOF;I1C8II,qB0CxBuD;E3Co7NzD;E2C1iOF;IAmHQ,UAAU;IACV,gBAA0B;E3C07NhC;E2C9iOF;I1C8II,sB0CxBuD;E3C27NzD;E2CjjOF;IAmHQ,UAAU;IACV,UAA0B;E3Ci8NhC;E2CrjOF;I1C8II,gB0CxBuD;E3Ck8NzD;E2CxjOF;IAmHQ,UAAU;IACV,gBAA0B;E3Cw8NhC;E2C5jOF;I1C8II,sB0CxBuD;E3Cy8NzD;E2C/jOF;IAmHQ,UAAU;IACV,gBAA0B;E3C+8NhC;E2CnkOF;I1C8II,sB0CxBuD;E3Cg9NzD;E2CtkOF;IAmHQ,UAAU;IACV,UAA0B;E3Cs9NhC;E2C1kOF;I1C8II,gB0CxBuD;E3Cu9NzD;E2C7kOF;IAmHQ,UAAU;IACV,gBAA0B;E3C69NhC;E2CjlOF;I1C8II,sB0CxBuD;E3C89NzD;E2CplOF;IAmHQ,UAAU;IACV,gBAA0B;E3Co+NhC;E2CxlOF;I1C8II,sB0CxBuD;E3Cq+NzD;E2C3lOF;IAmHQ,UAAU;IACV,UAA0B;E3C2+NhC;E2C/lOF;I1C8II,gB0CxBuD;E3C4+NzD;E2ClmOF;IAmHQ,UAAU;IACV,gBAA0B;E3Ck/NhC;E2CtmOF;I1C8II,sB0CxBuD;E3Cm/NzD;E2CzmOF;IAmHQ,UAAU;IACV,gBAA0B;E3Cy/NhC;E2C7mOF;I1C8II,sB0CxBuD;E3C0/NzD;E2ChnOF;IAmHQ,UAAU;IACV,WAA0B;E3CggOhC;E2CpnOF;I1C8II,iB0CxBuD;E3CigOzD;AACF;;ACriOE;E0CnFF;IA0HM,UAAU;E3CmgOd;E2C7nOF;IA6HM,UAAU;IACV,WAAW;E3CmgOf;E2CjoOF;IAiIM,UAAU;IACV,UAAU;E3CmgOd;E2CroOF;IAqIM,UAAU;IACV,eAAe;E3CmgOnB;E2CzoOF;IAyIM,UAAU;IACV,UAAU;E3CmgOd;E2C7oOF;IA6IM,UAAU;IACV,eAAe;E3CmgOnB;E2CjpOF;IAiJM,UAAU;IACV,UAAU;E3CmgOd;E2CrpOF;IAqJM,UAAU;IACV,UAAU;E3CmgOd;E2CzpOF;IAyJM,UAAU;IACV,UAAU;E3CmgOd;E2C7pOF;IA6JM,UAAU;IACV,UAAU;E3CmgOd;E2CjqOF;IAiKM,UAAU;IACV,UAAU;E3CmgOd;E2CrqOF;I1C8II,gB0CuBqC;E3CmgOvC;E2CxqOF;I1C8II,qB0C0B0C;E3CmgO5C;E2C3qOF;I1C8II,gB0C6BqC;E3CmgOvC;E2C9qOF;I1C8II,qB0CgC0C;E3CmgO5C;E2CjrOF;I1C8II,gB0CmCqC;E3CmgOvC;E2CprOF;I1C8II,gB0CsCqC;E3CmgOvC;E2CvrOF;I1C8II,gB0CyCqC;E3CmgOvC;E2C1rOF;I1C8II,gB0C4CqC;E3CmgOvC;E2C7rOF;I1C8II,gB0C+CqC;E3CmgOvC;E2ChsOF;IAiMQ,UAAU;IACV,SAA0B;E3CkgOhC;E2CpsOF;I1C8II,e0CuDuD;E3CkgOzD;E2CvsOF;IAiMQ,UAAU;IACV,eAA0B;E3CygOhC;E2C3sOF;I1C8II,qB0CuDuD;E3CygOzD;E2C9sOF;IAiMQ,UAAU;IACV,gBAA0B;E3CghOhC;E2CltOF;I1C8II,sB0CuDuD;E3CghOzD;E2CrtOF;IAiMQ,UAAU;IACV,UAA0B;E3CuhOhC;E2CztOF;I1C8II,gB0CuDuD;E3CuhOzD;E2C5tOF;IAiMQ,UAAU;IACV,gBAA0B;E3C8hOhC;E2ChuOF;I1C8II,sB0CuDuD;E3C8hOzD;E2CnuOF;IAiMQ,UAAU;IACV,gBAA0B;E3CqiOhC;E2CvuOF;I1C8II,sB0CuDuD;E3CqiOzD;E2C1uOF;IAiMQ,UAAU;IACV,UAA0B;E3C4iOhC;E2C9uOF;I1C8II,gB0CuDuD;E3C4iOzD;E2CjvOF;IAiMQ,UAAU;IACV,gBAA0B;E3CmjOhC;E2CrvOF;I1C8II,sB0CuDuD;E3CmjOzD;E2CxvOF;IAiMQ,UAAU;IACV,gBAA0B;E3C0jOhC;E2C5vOF;I1C8II,sB0CuDuD;E3C0jOzD;E2C/vOF;IAiMQ,UAAU;IACV,UAA0B;E3CikOhC;E2CnwOF;I1C8II,gB0CuDuD;E3CikOzD;E2CtwOF;IAiMQ,UAAU;IACV,gBAA0B;E3CwkOhC;E2C1wOF;I1C8II,sB0CuDuD;E3CwkOzD;E2C7wOF;IAiMQ,UAAU;IACV,gBAA0B;E3C+kOhC;E2CjxOF;I1C8II,sB0CuDuD;E3C+kOzD;E2CpxOF;IAiMQ,UAAU;IACV,WAA0B;E3CslOhC;E2CxxOF;I1C8II,iB0CuDuD;E3CslOzD;AACF;;ACjsOE;E0C3FF;IAwMM,UAAU;E3CylOd;E2CjyOF;IA0MM,UAAU;IACV,WAAW;E3C0lOf;E2CryOF;IA6MM,UAAU;IACV,UAAU;E3C2lOd;E2CzyOF;IAgNM,UAAU;IACV,eAAe;E3C4lOnB;E2C7yOF;IAmNM,UAAU;IACV,UAAU;E3C6lOd;E2CjzOF;IAsNM,UAAU;IACV,eAAe;E3C8lOnB;E2CrzOF;IAyNM,UAAU;IACV,UAAU;E3C+lOd;E2CzzOF;IA4NM,UAAU;IACV,UAAU;E3CgmOd;E2C7zOF;IA+NM,UAAU;IACV,UAAU;E3CimOd;E2Cj0OF;IAkOM,UAAU;IACV,UAAU;E3CkmOd;E2Cr0OF;IAqOM,UAAU;IACV,UAAU;E3CmmOd;E2Cz0OF;I1C8II,gB0C0FqC;E3ComOvC;E2C50OF;I1C8II,qB0C4F0C;E3CqmO5C;E2C/0OF;I1C8II,gB0C8FqC;E3CsmOvC;E2Cl1OF;I1C8II,qB0CgG0C;E3CumO5C;E2Cr1OF;I1C8II,gB0CkGqC;E3CwmOvC;E2Cx1OF;I1C8II,gB0CoGqC;E3CymOvC;E2C31OF;I1C8II,gB0CsGqC;E3C0mOvC;E2C91OF;I1C8II,gB0CwGqC;E3C2mOvC;E2Cj2OF;I1C8II,gB0C0GqC;E3C4mOvC;E2Cp2OF;IA2PQ,UAAU;IACV,SAA0B;E3C4mOhC;E2Cx2OF;I1C8II,e0CgHuD;E3C6mOzD;E2C32OF;IA2PQ,UAAU;IACV,eAA0B;E3CmnOhC;E2C/2OF;I1C8II,qB0CgHuD;E3ConOzD;E2Cl3OF;IA2PQ,UAAU;IACV,gBAA0B;E3C0nOhC;E2Ct3OF;I1C8II,sB0CgHuD;E3C2nOzD;E2Cz3OF;IA2PQ,UAAU;IACV,UAA0B;E3CioOhC;E2C73OF;I1C8II,gB0CgHuD;E3CkoOzD;E2Ch4OF;IA2PQ,UAAU;IACV,gBAA0B;E3CwoOhC;E2Cp4OF;I1C8II,sB0CgHuD;E3CyoOzD;E2Cv4OF;IA2PQ,UAAU;IACV,gBAA0B;E3C+oOhC;E2C34OF;I1C8II,sB0CgHuD;E3CgpOzD;E2C94OF;IA2PQ,UAAU;IACV,UAA0B;E3CspOhC;E2Cl5OF;I1C8II,gB0CgHuD;E3CupOzD;E2Cr5OF;IA2PQ,UAAU;IACV,gBAA0B;E3C6pOhC;E2Cz5OF;I1C8II,sB0CgHuD;E3C8pOzD;E2C55OF;IA2PQ,UAAU;IACV,gBAA0B;E3CoqOhC;E2Ch6OF;I1C8II,sB0CgHuD;E3CqqOzD;E2Cn6OF;IA2PQ,UAAU;IACV,UAA0B;E3C2qOhC;E2Cv6OF;I1C8II,gB0CgHuD;E3C4qOzD;E2C16OF;IA2PQ,UAAU;IACV,gBAA0B;E3CkrOhC;E2C96OF;I1C8II,sB0CgHuD;E3CmrOzD;E2Cj7OF;IA2PQ,UAAU;IACV,gBAA0B;E3CyrOhC;E2Cr7OF;I1C8II,sB0CgHuD;E3C0rOzD;E2Cx7OF;IA2PQ,UAAU;IACV,WAA0B;E3CgsOhC;E2C57OF;I1C8II,iB0CgHuD;E3CisOzD;AACF;;ACj2OE;E0C/FF;IAiQM,UAAU;E3CosOd;E2Cr8OF;IAmQM,UAAU;IACV,WAAW;E3CqsOf;E2Cz8OF;IAsQM,UAAU;IACV,UAAU;E3CssOd;E2C78OF;IAyQM,UAAU;IACV,eAAe;E3CusOnB;E2Cj9OF;IA4QM,UAAU;IACV,UAAU;E3CwsOd;E2Cr9OF;IA+QM,UAAU;IACV,eAAe;E3CysOnB;E2Cz9OF;IAkRM,UAAU;IACV,UAAU;E3C0sOd;E2C79OF;IAqRM,UAAU;IACV,UAAU;E3C2sOd;E2Cj+OF;IAwRM,UAAU;IACV,UAAU;E3C4sOd;E2Cr+OF;IA2RM,UAAU;IACV,UAAU;E3C6sOd;E2Cz+OF;IA8RM,UAAU;IACV,UAAU;E3C8sOd;E2C7+OF;I1C8II,gB0CmJqC;E3C+sOvC;E2Ch/OF;I1C8II,qB0CqJ0C;E3CgtO5C;E2Cn/OF;I1C8II,gB0CuJqC;E3CitOvC;E2Ct/OF;I1C8II,qB0CyJ0C;E3CktO5C;E2Cz/OF;I1C8II,gB0C2JqC;E3CmtOvC;E2C5/OF;I1C8II,gB0C6JqC;E3CotOvC;E2C//OF;I1C8II,gB0C+JqC;E3CqtOvC;E2ClgPF;I1C8II,gB0CiKqC;E3CstOvC;E2CrgPF;I1C8II,gB0CmKqC;E3CutOvC;E2CxgPF;IAoTQ,UAAU;IACV,SAA0B;E3CutOhC;E2C5gPF;I1C8II,e0CyKuD;E3CwtOzD;E2C/gPF;IAoTQ,UAAU;IACV,eAA0B;E3C8tOhC;E2CnhPF;I1C8II,qB0CyKuD;E3C+tOzD;E2CthPF;IAoTQ,UAAU;IACV,gBAA0B;E3CquOhC;E2C1hPF;I1C8II,sB0CyKuD;E3CsuOzD;E2C7hPF;IAoTQ,UAAU;IACV,UAA0B;E3C4uOhC;E2CjiPF;I1C8II,gB0CyKuD;E3C6uOzD;E2CpiPF;IAoTQ,UAAU;IACV,gBAA0B;E3CmvOhC;E2CxiPF;I1C8II,sB0CyKuD;E3CovOzD;E2C3iPF;IAoTQ,UAAU;IACV,gBAA0B;E3C0vOhC;E2C/iPF;I1C8II,sB0CyKuD;E3C2vOzD;E2CljPF;IAoTQ,UAAU;IACV,UAA0B;E3CiwOhC;E2CtjPF;I1C8II,gB0CyKuD;E3CkwOzD;E2CzjPF;IAoTQ,UAAU;IACV,gBAA0B;E3CwwOhC;E2C7jPF;I1C8II,sB0CyKuD;E3CywOzD;E2ChkPF;IAoTQ,UAAU;IACV,gBAA0B;E3C+wOhC;E2CpkPF;I1C8II,sB0CyKuD;E3CgxOzD;E2CvkPF;IAoTQ,UAAU;IACV,UAA0B;E3CsxOhC;E2C3kPF;I1C8II,gB0CyKuD;E3CuxOzD;E2C9kPF;IAoTQ,UAAU;IACV,gBAA0B;E3C6xOhC;E2CllPF;I1C8II,sB0CyKuD;E3C8xOzD;E2CrlPF;IAoTQ,UAAU;IACV,gBAA0B;E3CoyOhC;E2CzlPF;I1C8II,sB0CyKuD;E3CqyOzD;E2C5lPF;IAoTQ,UAAU;IACV,WAA0B;E3C2yOhC;E2ChmPF;I1C8II,iB0CyKuD;E3C4yOzD;AACF;;ACt/OI;E0C9GJ;IA0TM,UAAU;E3C+yOd;E2CzmPF;IA4TM,UAAU;IACV,WAAW;E3CgzOf;E2C7mPF;IA+TM,UAAU;IACV,UAAU;E3CizOd;E2CjnPF;IAkUM,UAAU;IACV,eAAe;E3CkzOnB;E2CrnPF;IAqUM,UAAU;IACV,UAAU;E3CmzOd;E2CznPF;IAwUM,UAAU;IACV,eAAe;E3CozOnB;E2C7nPF;IA2UM,UAAU;IACV,UAAU;E3CqzOd;E2CjoPF;IA8UM,UAAU;IACV,UAAU;E3CszOd;E2CroPF;IAiVM,UAAU;IACV,UAAU;E3CuzOd;E2CzoPF;IAoVM,UAAU;IACV,UAAU;E3CwzOd;E2C7oPF;IAuVM,UAAU;IACV,UAAU;E3CyzOd;E2CjpPF;I1C8II,gB0C4MqC;E3C0zOvC;E2CppPF;I1C8II,qB0C8M0C;E3C2zO5C;E2CvpPF;I1C8II,gB0CgNqC;E3C4zOvC;E2C1pPF;I1C8II,qB0CkN0C;E3C6zO5C;E2C7pPF;I1C8II,gB0CoNqC;E3C8zOvC;E2ChqPF;I1C8II,gB0CsNqC;E3C+zOvC;E2CnqPF;I1C8II,gB0CwNqC;E3Cg0OvC;E2CtqPF;I1C8II,gB0C0NqC;E3Ci0OvC;E2CzqPF;I1C8II,gB0C4NqC;E3Ck0OvC;E2C5qPF;IA6WQ,UAAU;IACV,SAA0B;E3Ck0OhC;E2ChrPF;I1C8II,e0CkOuD;E3Cm0OzD;E2CnrPF;IA6WQ,UAAU;IACV,eAA0B;E3Cy0OhC;E2CvrPF;I1C8II,qB0CkOuD;E3C00OzD;E2C1rPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cg1OhC;E2C9rPF;I1C8II,sB0CkOuD;E3Ci1OzD;E2CjsPF;IA6WQ,UAAU;IACV,UAA0B;E3Cu1OhC;E2CrsPF;I1C8II,gB0CkOuD;E3Cw1OzD;E2CxsPF;IA6WQ,UAAU;IACV,gBAA0B;E3C81OhC;E2C5sPF;I1C8II,sB0CkOuD;E3C+1OzD;E2C/sPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cq2OhC;E2CntPF;I1C8II,sB0CkOuD;E3Cs2OzD;E2CttPF;IA6WQ,UAAU;IACV,UAA0B;E3C42OhC;E2C1tPF;I1C8II,gB0CkOuD;E3C62OzD;E2C7tPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cm3OhC;E2CjuPF;I1C8II,sB0CkOuD;E3Co3OzD;E2CpuPF;IA6WQ,UAAU;IACV,gBAA0B;E3C03OhC;E2CxuPF;I1C8II,sB0CkOuD;E3C23OzD;E2C3uPF;IA6WQ,UAAU;IACV,UAA0B;E3Ci4OhC;E2C/uPF;I1C8II,gB0CkOuD;E3Ck4OzD;E2ClvPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cw4OhC;E2CtvPF;I1C8II,sB0CkOuD;E3Cy4OzD;E2CzvPF;IA6WQ,UAAU;IACV,gBAA0B;E3C+4OhC;E2C7vPF;I1C8II,sB0CkOuD;E3Cg5OzD;E2ChwPF;IA6WQ,UAAU;IACV,WAA0B;E3Cs5OhC;E2CpwPF;I1C8II,iB0CkOuD;E3Cu5OzD;AACF;;AC3oPI;E0C7HJ;IAmXM,UAAU;E3C05Od;E2C7wPF;IAqXM,UAAU;IACV,WAAW;E3C25Of;E2CjxPF;IAwXM,UAAU;IACV,UAAU;E3C45Od;E2CrxPF;IA2XM,UAAU;IACV,eAAe;E3C65OnB;E2CzxPF;IA8XM,UAAU;IACV,UAAU;E3C85Od;E2C7xPF;IAiYM,UAAU;IACV,eAAe;E3C+5OnB;E2CjyPF;IAoYM,UAAU;IACV,UAAU;E3Cg6Od;E2CryPF;IAuYM,UAAU;IACV,UAAU;E3Ci6Od;E2CzyPF;IA0YM,UAAU;IACV,UAAU;E3Ck6Od;E2C7yPF;IA6YM,UAAU;IACV,UAAU;E3Cm6Od;E2CjzPF;IAgZM,UAAU;IACV,UAAU;E3Co6Od;E2CrzPF;I1C8II,gB0CqQqC;E3Cq6OvC;E2CxzPF;I1C8II,qB0CuQ0C;E3Cs6O5C;E2C3zPF;I1C8II,gB0CyQqC;E3Cu6OvC;E2C9zPF;I1C8II,qB0C2Q0C;E3Cw6O5C;E2Cj0PF;I1C8II,gB0C6QqC;E3Cy6OvC;E2Cp0PF;I1C8II,gB0C+QqC;E3C06OvC;E2Cv0PF;I1C8II,gB0CiRqC;E3C26OvC;E2C10PF;I1C8II,gB0CmRqC;E3C46OvC;E2C70PF;I1C8II,gB0CqRqC;E3C66OvC;E2Ch1PF;IAsaQ,UAAU;IACV,SAA0B;E3C66OhC;E2Cp1PF;I1C8II,e0C2RuD;E3C86OzD;E2Cv1PF;IAsaQ,UAAU;IACV,eAA0B;E3Co7OhC;E2C31PF;I1C8II,qB0C2RuD;E3Cq7OzD;E2C91PF;IAsaQ,UAAU;IACV,gBAA0B;E3C27OhC;E2Cl2PF;I1C8II,sB0C2RuD;E3C47OzD;E2Cr2PF;IAsaQ,UAAU;IACV,UAA0B;E3Ck8OhC;E2Cz2PF;I1C8II,gB0C2RuD;E3Cm8OzD;E2C52PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cy8OhC;E2Ch3PF;I1C8II,sB0C2RuD;E3C08OzD;E2Cn3PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cg9OhC;E2Cv3PF;I1C8II,sB0C2RuD;E3Ci9OzD;E2C13PF;IAsaQ,UAAU;IACV,UAA0B;E3Cu9OhC;E2C93PF;I1C8II,gB0C2RuD;E3Cw9OzD;E2Cj4PF;IAsaQ,UAAU;IACV,gBAA0B;E3C89OhC;E2Cr4PF;I1C8II,sB0C2RuD;E3C+9OzD;E2Cx4PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cq+OhC;E2C54PF;I1C8II,sB0C2RuD;E3Cs+OzD;E2C/4PF;IAsaQ,UAAU;IACV,UAA0B;E3C4+OhC;E2Cn5PF;I1C8II,gB0C2RuD;E3C6+OzD;E2Ct5PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cm/OhC;E2C15PF;I1C8II,sB0C2RuD;E3Co/OzD;E2C75PF;IAsaQ,UAAU;IACV,gBAA0B;E3C0/OhC;E2Cj6PF;I1C8II,sB0C2RuD;E3C2/OzD;E2Cp6PF;IAsaQ,UAAU;IACV,WAA0B;E3CigPhC;E2Cx6PF;I1C8II,iB0C2RuD;E3CkgPzD;AACF;;A2CjgPA;E1C7RI,qB0ChJgB;E1CgJhB,sB0ChJgB;EAgblB,oBAhbkB;A3Co7PpB;;A2CvgPA;EAKI,uBAlbgB;A3Cw7PpB;;A2C3gPA;EAOI,qCAA4C;A3CwgPhD;;A2C/gPA;EAUI,uBAAuB;A3CygP3B;;A2CnhPA;E1C7RI,c0CySiC;E1CzSjC,e0C0SiC;EACjC,aAAa;A3C2gPjB;;A2CzhPA;EAgBM,SAAS;EACT,qBAAqB;A3C6gP3B;;A2C9hPA;EAmBM,qBAAqB;A3C+gP3B;;A2CliPA;EAqBM,gBAAgB;A3CihPtB;;A2CtiPA;EAuBI,aAAa;A3CmhPjB;;A2C1iPA;EAyBI,eAAe;A3CqhPnB;;A2C9iPA;EA2BI,mBAAmB;A3CuhPvB;;AC14PE;E0CwVF;IA+BM,aAAa;E3CwhPjB;AACF;;ACp4PE;E0C4UF;IAmCM,aAAa;E3C0hPjB;AACF;;A2CxhPE;EACE,oBAAY;E1CpUZ,wC0CqU2D;E1CrU3D,yC0CsU2D;A3C2hP/D;;A2C9hPE;EAKI,8BAA8B;EAC9B,+BAA+B;A3C6hPrC;;A2CniPE;EASM,iBAAY;A3C8hPpB;;ACz6PE;E0CkYA;IAYQ,iBAAY;E3CgiPpB;AACF;;AC36PE;E0C8XA;IAeQ,iBAAY;E3CmiPpB;AACF;;AC76PE;E0C0XA;IAkBQ,iBAAY;E3CsiPpB;AACF;;AC/6PE;E0CsXA;IAqBQ,iBAAY;E3CyiPpB;AACF;;ACj7PE;E0CkXA;IAwBQ,iBAAY;E3C4iPpB;AACF;;ACl7PI;E0C6WF;IA2BQ,iBAAY;E3C+iPpB;AACF;;AC96PI;E0CmWF;IA8BQ,iBAAY;E3CkjPpB;AACF;;AC/6PI;E0C8VF;IAiCQ,iBAAY;E3CqjPpB;AACF;;AC36PI;E0CoVF;IAoCQ,iBAAY;E3CwjPpB;AACF;;A2C7lPE;EASM,oBAAY;A3CwlPpB;;ACn+PE;E0CkYA;IAYQ,oBAAY;E3C0lPpB;AACF;;ACr+PE;E0C8XA;IAeQ,oBAAY;E3C6lPpB;AACF;;ACv+PE;E0C0XA;IAkBQ,oBAAY;E3CgmPpB;AACF;;ACz+PE;E0CsXA;IAqBQ,oBAAY;E3CmmPpB;AACF;;AC3+PE;E0CkXA;IAwBQ,oBAAY;E3CsmPpB;AACF;;AC5+PI;E0C6WF;IA2BQ,oBAAY;E3CymPpB;AACF;;ACx+PI;E0CmWF;IA8BQ,oBAAY;E3C4mPpB;AACF;;ACz+PI;E0C8VF;IAiCQ,oBAAY;E3C+mPpB;AACF;;ACr+PI;E0CoVF;IAoCQ,oBAAY;E3CknPpB;AACF;;A2CvpPE;EASM,mBAAY;A3CkpPpB;;AC7hQE;E0CkYA;IAYQ,mBAAY;E3CopPpB;AACF;;AC/hQE;E0C8XA;IAeQ,mBAAY;E3CupPpB;AACF;;ACjiQE;E0C0XA;IAkBQ,mBAAY;E3C0pPpB;AACF;;ACniQE;E0CsXA;IAqBQ,mBAAY;E3C6pPpB;AACF;;ACriQE;E0CkXA;IAwBQ,mBAAY;E3CgqPpB;AACF;;ACtiQI;E0C6WF;IA2BQ,mBAAY;E3CmqPpB;AACF;;ACliQI;E0CmWF;IA8BQ,mBAAY;E3CsqPpB;AACF;;ACniQI;E0C8VF;IAiCQ,mBAAY;E3CyqPpB;AACF;;AC/hQI;E0CoVF;IAoCQ,mBAAY;E3C4qPpB;AACF;;A2CjtPE;EASM,oBAAY;A3C4sPpB;;ACvlQE;E0CkYA;IAYQ,oBAAY;E3C8sPpB;AACF;;ACzlQE;E0C8XA;IAeQ,oBAAY;E3CitPpB;AACF;;AC3lQE;E0C0XA;IAkBQ,oBAAY;E3CotPpB;AACF;;AC7lQE;E0CsXA;IAqBQ,oBAAY;E3CutPpB;AACF;;AC/lQE;E0CkXA;IAwBQ,oBAAY;E3C0tPpB;AACF;;AChmQI;E0C6WF;IA2BQ,oBAAY;E3C6tPpB;AACF;;AC5lQI;E0CmWF;IA8BQ,oBAAY;E3CguPpB;AACF;;AC7lQI;E0C8VF;IAiCQ,oBAAY;E3CmuPpB;AACF;;ACzlQI;E0CoVF;IAoCQ,oBAAY;E3CsuPpB;AACF;;A2C3wPE;EASM,iBAAY;A3CswPpB;;ACjpQE;E0CkYA;IAYQ,iBAAY;E3CwwPpB;AACF;;ACnpQE;E0C8XA;IAeQ,iBAAY;E3C2wPpB;AACF;;ACrpQE;E0C0XA;IAkBQ,iBAAY;E3C8wPpB;AACF;;ACvpQE;E0CsXA;IAqBQ,iBAAY;E3CixPpB;AACF;;ACzpQE;E0CkXA;IAwBQ,iBAAY;E3CoxPpB;AACF;;AC1pQI;E0C6WF;IA2BQ,iBAAY;E3CuxPpB;AACF;;ACtpQI;E0CmWF;IA8BQ,iBAAY;E3C0xPpB;AACF;;ACvpQI;E0C8VF;IAiCQ,iBAAY;E3C6xPpB;AACF;;ACnpQI;E0CoVF;IAoCQ,iBAAY;E3CgyPpB;AACF;;A2Cr0PE;EASM,oBAAY;A3Cg0PpB;;AC3sQE;E0CkYA;IAYQ,oBAAY;E3Ck0PpB;AACF;;AC7sQE;E0C8XA;IAeQ,oBAAY;E3Cq0PpB;AACF;;AC/sQE;E0C0XA;IAkBQ,oBAAY;E3Cw0PpB;AACF;;ACjtQE;E0CsXA;IAqBQ,oBAAY;E3C20PpB;AACF;;ACntQE;E0CkXA;IAwBQ,oBAAY;E3C80PpB;AACF;;ACptQI;E0C6WF;IA2BQ,oBAAY;E3Ci1PpB;AACF;;AChtQI;E0CmWF;IA8BQ,oBAAY;E3Co1PpB;AACF;;ACjtQI;E0C8VF;IAiCQ,oBAAY;E3Cu1PpB;AACF;;AC7sQI;E0CoVF;IAoCQ,oBAAY;E3C01PpB;AACF;;A2C/3PE;EASM,mBAAY;A3C03PpB;;ACrwQE;E0CkYA;IAYQ,mBAAY;E3C43PpB;AACF;;ACvwQE;E0C8XA;IAeQ,mBAAY;E3C+3PpB;AACF;;ACzwQE;E0C0XA;IAkBQ,mBAAY;E3Ck4PpB;AACF;;AC3wQE;E0CsXA;IAqBQ,mBAAY;E3Cq4PpB;AACF;;AC7wQE;E0CkXA;IAwBQ,mBAAY;E3Cw4PpB;AACF;;AC9wQI;E0C6WF;IA2BQ,mBAAY;E3C24PpB;AACF;;AC1wQI;E0CmWF;IA8BQ,mBAAY;E3C84PpB;AACF;;AC3wQI;E0C8VF;IAiCQ,mBAAY;E3Ci5PpB;AACF;;ACvwQI;E0CoVF;IAoCQ,mBAAY;E3Co5PpB;AACF;;A2Cz7PE;EASM,oBAAY;A3Co7PpB;;AC/zQE;E0CkYA;IAYQ,oBAAY;E3Cs7PpB;AACF;;ACj0QE;E0C8XA;IAeQ,oBAAY;E3Cy7PpB;AACF;;ACn0QE;E0C0XA;IAkBQ,oBAAY;E3C47PpB;AACF;;ACr0QE;E0CsXA;IAqBQ,oBAAY;E3C+7PpB;AACF;;ACv0QE;E0CkXA;IAwBQ,oBAAY;E3Ck8PpB;AACF;;ACx0QI;E0C6WF;IA2BQ,oBAAY;E3Cq8PpB;AACF;;ACp0QI;E0CmWF;IA8BQ,oBAAY;E3Cw8PpB;AACF;;ACr0QI;E0C8VF;IAiCQ,oBAAY;E3C28PpB;AACF;;ACj0QI;E0CoVF;IAoCQ,oBAAY;E3C88PpB;AACF;;A2Cn/PE;EASM,iBAAY;A3C8+PpB;;ACz3QE;E0CkYA;IAYQ,iBAAY;E3Cg/PpB;AACF;;AC33QE;E0C8XA;IAeQ,iBAAY;E3Cm/PpB;AACF;;AC73QE;E0C0XA;IAkBQ,iBAAY;E3Cs/PpB;AACF;;AC/3QE;E0CsXA;IAqBQ,iBAAY;E3Cy/PpB;AACF;;ACj4QE;E0CkXA;IAwBQ,iBAAY;E3C4/PpB;AACF;;ACl4QI;E0C6WF;IA2BQ,iBAAY;E3C+/PpB;AACF;;AC93QI;E0CmWF;IA8BQ,iBAAY;E3CkgQpB;AACF;;AC/3QI;E0C8VF;IAiCQ,iBAAY;E3CqgQpB;AACF;;AC33QI;E0CoVF;IAoCQ,iBAAY;E3CwgQpB;AACF;;A4C9/QA;EACE,oBAAoB;EACpB,cAAc;EACd,aAAa;EACb,YAAY;EACZ,cAAc;EACd,+BAAuB;EAAvB,4BAAuB;EAAvB,uBAAuB;A5CigRzB;;A4CvgRA;EASI,qBAA+B;EAC/B,sBAAgC;EAChC,oBAA8B;A5CkgRlC;;A4C7gRA;EAaM,uBAAiC;A5CogRvC;;A4CjhRA;EAeM,sBAjBgB;A5CuhRtB;;A4CrhRA;EAiBI,oBAAoB;A5CwgRxB;;A4CzhRA;EAmBI,gBArBkB;A5C+hRtB;;A4C7hRA;EAqBI,sBAAsB;A5C4gR1B;;A4CjiRA;EAuBM,gCAAgC;A5C8gRtC;;ACl9QE;E2CnFF;IA2BM,aAAa;E5C+gRjB;E4C1iRF;IA8BQ,UAAU;IACV,eAAuB;E5C+gR7B;E4C9iRF;IA8BQ,UAAU;IACV,gBAAuB;E5CmhR7B;E4CljRF;IA8BQ,UAAU;IACV,UAAuB;E5CuhR7B;E4CtjRF;IA8BQ,UAAU;IACV,gBAAuB;E5C2hR7B;E4C1jRF;IA8BQ,UAAU;IACV,gBAAuB;E5C+hR7B;E4C9jRF;IA8BQ,UAAU;IACV,UAAuB;E5CmiR7B;E4ClkRF;IA8BQ,UAAU;IACV,gBAAuB;E5CuiR7B;E4CtkRF;IA8BQ,UAAU;IACV,gBAAuB;E5C2iR7B;E4C1kRF;IA8BQ,UAAU;IACV,UAAuB;E5C+iR7B;E4C9kRF;IA8BQ,UAAU;IACV,gBAAuB;E5CmjR7B;E4CllRF;IA8BQ,UAAU;IACV,gBAAuB;E5CujR7B;E4CtlRF;IA8BQ,UAAU;IACV,WAAuB;E5C2jR7B;AACF;;A6C7lRA,kBAAA;ACEE;EACE,uBAAwB;A9C+lR5B;;A8C9lRE;EAGI,yBAA0C;A9C+lRhD;;A8C9lRE;EACE,kCAAmC;A9CimRvC;;A8CxmRE;EACE,yBAAwB;A9C2mR5B;;A8C1mRE;EAGI,uBAA0C;A9C2mRhD;;A8C1mRE;EACE,oCAAmC;A9C6mRvC;;A8CpnRE;EACE,4BAAwB;A9CunR5B;;A8CtnRE;EAGI,yBAA0C;A9CunRhD;;A8CtnRE;EACE,uCAAmC;A9CynRvC;;A8ChoRE;EACE,yBAAwB;A9CmoR5B;;A8CloRE;EAGI,yBAA0C;A9CmoRhD;;A8CloRE;EACE,oCAAmC;A9CqoRvC;;A8C5oRE;EACE,yBAAwB;A9C+oR5B;;A8C9oRE;EAGI,yBAA0C;A9C+oRhD;;A8C9oRE;EACE,oCAAmC;A9CipRvC;;A8C5oRI;EACE,yBAA8B;A9C+oRpC;;A8C9oRI;EAGI,yBAAgD;A9C+oRxD;;A8C9oRI;EACE,oCAAyC;A9CipR/C;;A8C/oRI;EACE,yBAA6B;A9CkpRnC;;A8CjpRI;EAGI,yBAAgD;A9CkpRxD;;A8CjpRI;EACE,oCAAwC;A9CopR9C;;A8ChrRE;EACE,yBAAwB;A9CmrR5B;;A8ClrRE;EAGI,yBAA0C;A9CmrRhD;;A8ClrRE;EACE,oCAAmC;A9CqrRvC;;A8ChrRI;EACE,yBAA8B;A9CmrRpC;;A8ClrRI;EAGI,yBAAgD;A9CmrRxD;;A8ClrRI;EACE,oCAAyC;A9CqrR/C;;A8CnrRI;EACE,yBAA6B;A9CsrRnC;;A8CrrRI;EAGI,yBAAgD;A9CsrRxD;;A8CrrRI;EACE,oCAAwC;A9CwrR9C;;A8CptRE;EACE,yBAAwB;A9CutR5B;;A8CttRE;EAGI,yBAA0C;A9CutRhD;;A8CttRE;EACE,oCAAmC;A9CytRvC;;A8CptRI;EACE,yBAA8B;A9CutRpC;;A8CttRI;EAGI,yBAAgD;A9CutRxD;;A8CttRI;EACE,oCAAyC;A9CytR/C;;A8CvtRI;EACE,yBAA6B;A9C0tRnC;;A8CztRI;EAGI,yBAAgD;A9C0tRxD;;A8CztRI;EACE,oCAAwC;A9C4tR9C;;A8CxvRE;EACE,yBAAwB;A9C2vR5B;;A8C1vRE;EAGI,yBAA0C;A9C2vRhD;;A8C1vRE;EACE,oCAAmC;A9C6vRvC;;A8CxvRI;EACE,yBAA8B;A9C2vRpC;;A8C1vRI;EAGI,yBAAgD;A9C2vRxD;;A8C1vRI;EACE,oCAAyC;A9C6vR/C;;A8C3vRI;EACE,yBAA6B;A9C8vRnC;;A8C7vRI;EAGI,yBAAgD;A9C8vRxD;;A8C7vRI;EACE,oCAAwC;A9CgwR9C;;A8C5xRE;EACE,yBAAwB;A9C+xR5B;;A8C9xRE;EAGI,yBAA0C;A9C+xRhD;;A8C9xRE;EACE,oCAAmC;A9CiyRvC;;A8C5xRI;EACE,yBAA8B;A9C+xRpC;;A8C9xRI;EAGI,yBAAgD;A9C+xRxD;;A8C9xRI;EACE,oCAAyC;A9CiyR/C;;A8C/xRI;EACE,yBAA6B;A9CkyRnC;;A8CjyRI;EAGI,yBAAgD;A9CkyRxD;;A8CjyRI;EACE,oCAAwC;A9CoyR9C;;A8Ch0RE;EACE,yBAAwB;A9Cm0R5B;;A8Cl0RE;EAGI,yBAA0C;A9Cm0RhD;;A8Cl0RE;EACE,oCAAmC;A9Cq0RvC;;A8Ch0RI;EACE,yBAA8B;A9Cm0RpC;;A8Cl0RI;EAGI,yBAAgD;A9Cm0RxD;;A8Cl0RI;EACE,oCAAyC;A9Cq0R/C;;A8Cn0RI;EACE,yBAA6B;A9Cs0RnC;;A8Cr0RI;EAGI,yBAAgD;A9Cs0RxD;;A8Cr0RI;EACE,oCAAwC;A9Cw0R9C;;A8Cr0RE;EACE,yBAAwB;A9Cw0R5B;;A8Cv0RE;EACE,oCAAmC;A9C00RvC;;A8C70RE;EACE,yBAAwB;A9Cg1R5B;;A8C/0RE;EACE,oCAAmC;A9Ck1RvC;;A8Cr1RE;EACE,yBAAwB;A9Cw1R5B;;A8Cv1RE;EACE,oCAAmC;A9C01RvC;;A8C71RE;EACE,yBAAwB;A9Cg2R5B;;A8C/1RE;EACE,oCAAmC;A9Ck2RvC;;A8Cr2RE;EACE,yBAAwB;A9Cw2R5B;;A8Cv2RE;EACE,oCAAmC;A9C02RvC;;A8C72RE;EACE,yBAAwB;A9Cg3R5B;;A8C/2RE;EACE,oCAAmC;A9Ck3RvC;;A8Cr3RE;EACE,yBAAwB;A9Cw3R5B;;A8Cv3RE;EACE,oCAAmC;A9C03RvC;;A8C73RE;EACE,4BAAwB;A9Cg4R5B;;A8C/3RE;EACE,uCAAmC;A9Ck4RvC;;A8Cr4RE;EACE,yBAAwB;A9Cw4R5B;;A8Cv4RE;EACE,oCAAmC;A9C04RvC;;A+C56RE;EACE,8BAAiC;A/C+6RrC;;A+Ch7RE;EACE,sCAAiC;A/Cm7RrC;;A+Cp7RE;EACE,iCAAiC;A/Cu7RrC;;A+Cx7RE;EACE,yCAAiC;A/C27RrC;;A+Cv7RE;EACE,4BAA4B;A/C07RhC;;A+C37RE;EACE,0BAA4B;A/C87RhC;;A+C/7RE;EACE,kCAA4B;A/Ck8RhC;;A+C97RE;EACE,sCAAkC;A/Ci8RtC;;A+Cl8RE;EACE,oCAAkC;A/Cq8RtC;;A+Ct8RE;EACE,kCAAkC;A/Cy8RtC;;A+C18RE;EACE,yCAAkC;A/C68RtC;;A+C98RE;EACE,wCAAkC;A/Ci9RtC;;A+Cl9RE;EACE,wCAAkC;A/Cq9RtC;;A+Ct9RE;EACE,iCAAkC;A/Cy9RtC;;A+C19RE;EACE,+BAAkC;A/C69RtC;;A+C99RE;EACE,gCAAkC;A/Ci+RtC;;A+Cl+RE;EACE,iCAAkC;A/Cq+RtC;;A+Cj+RE;EACE,oCAAgC;A/Co+RpC;;A+Cr+RE;EACE,kCAAgC;A/Cw+RpC;;A+Cz+RE;EACE,gCAAgC;A/C4+RpC;;A+C7+RE;EACE,uCAAgC;A/Cg/RpC;;A+Cj/RE;EACE,sCAAgC;A/Co/RpC;;A+Cr/RE;EACE,sCAAgC;A/Cw/RpC;;A+Cz/RE;EACE,iCAAgC;A/C4/RpC;;A+C7/RE;EACE,+BAAgC;A/CggSpC;;A+CjgSE;EACE,6BAAgC;A/CogSpC;;A+CrgSE;EACE,kCAAgC;A/CwgSpC;;A+CpgSE;EACE,+BAA8B;A/CugSlC;;A+CxgSE;EACE,kCAA8B;A/C2gSlC;;A+C5gSE;EACE,gCAA8B;A/C+gSlC;;A+ChhSE;EACE,8BAA8B;A/CmhSlC;;A+CphSE;EACE,gCAA8B;A/CuhSlC;;A+CxhSE;EACE,6BAA8B;A/C2hSlC;;A+C5hSE;EACE,2BAA8B;A/C+hSlC;;A+ChiSE;EACE,kCAA8B;A/CmiSlC;;A+CpiSE;EACE,gCAA8B;A/CuiSlC;;A+CniSE;EACE,2BAA6B;A/CsiSjC;;A+CviSE;EACE,iCAA6B;A/C0iSjC;;A+C3iSE;EACE,+BAA6B;A/C8iSjC;;A+C/iSE;EACE,6BAA6B;A/CkjSjC;;A+CnjSE;EACE,+BAA6B;A/CsjSjC;;A+CvjSE;EACE,8BAA6B;A/C0jSjC;;A+CrjSI;EACE,uBAAqC;A/CwjS3C;;A+CzjSI;EACE,uBAAqC;A/C4jS3C;;A+C7jSI;EACE,uBAAqC;A/CgkS3C;;A+CjkSI;EACE,uBAAqC;A/CokS3C;;A+CrkSI;EACE,uBAAqC;A/CwkS3C;;A+CzkSI;EACE,uBAAqC;A/C4kS3C;;A+C7kSI;EACE,yBAAqC;A/CglS3C;;A+CjlSI;EACE,yBAAqC;A/ColS3C;;A+CrlSI;EACE,yBAAqC;A/CwlS3C;;A+CzlSI;EACE,yBAAqC;A/C4lS3C;;A+C7lSI;EACE,yBAAqC;A/CgmS3C;;A+CjmSI;EACE,yBAAqC;A/ComS3C;;ACnoSE;EACE,WAAW;EACX,YAAY;EACZ,cAAc;ADsoSlB;;AgDzoSA;EACE,sBAAsB;AhD4oSxB;;AgD1oSA;EACE,uBAAuB;AhD6oSzB;;AiDppSA;EACE,2BAA2B;AjDupS7B;;AiDrpSA;EACE,2BAA2B;AjDwpS7B;;AiDtpSA;EACE,0BAA0B;AjDypS5B;;AkDhqSA;EACE,2BAA2B;AlDmqS7B;;AmDjqSA;EACE,6BAA6B;AnDoqS/B;;AoDxqSA;EACE,oBAAoB;ApD2qStB;;AoDzqSA;EACE,qBAAqB;ApD4qSvB;;AoDjqSI;EACE,oBAA+B;ApDoqSrC;;AoDjqSM;EACE,wBAA8C;ApDoqStD;;AoDrqSM;EACE,0BAA8C;ApDwqStD;;AoDzqSM;EACE,2BAA8C;ApD4qStD;;AoD7qSM;EACE,yBAA8C;ApDgrStD;;AoD7qSM;EACE,yBAAyC;EACzC,0BAA2C;ApDgrSnD;;AoD7qSM;EACE,wBAAuC;EACvC,2BAA6C;ApDgrSrD;;AoD/rSI;EACE,0BAA+B;ApDksSrC;;AoD/rSM;EACE,8BAA8C;ApDksStD;;AoDnsSM;EACE,gCAA8C;ApDssStD;;AoDvsSM;EACE,iCAA8C;ApD0sStD;;AoD3sSM;EACE,+BAA8C;ApD8sStD;;AoD3sSM;EACE,+BAAyC;EACzC,gCAA2C;ApD8sSnD;;AoD3sSM;EACE,8BAAuC;EACvC,iCAA6C;ApD8sSrD;;AoD7tSI;EACE,yBAA+B;ApDguSrC;;AoD7tSM;EACE,6BAA8C;ApDguStD;;AoDjuSM;EACE,+BAA8C;ApDouStD;;AoDruSM;EACE,gCAA8C;ApDwuStD;;AoDzuSM;EACE,8BAA8C;ApD4uStD;;AoDzuSM;EACE,8BAAyC;EACzC,+BAA2C;ApD4uSnD;;AoDzuSM;EACE,6BAAuC;EACvC,gCAA6C;ApD4uSrD;;AoD3vSI;EACE,0BAA+B;ApD8vSrC;;AoD3vSM;EACE,8BAA8C;ApD8vStD;;AoD/vSM;EACE,gCAA8C;ApDkwStD;;AoDnwSM;EACE,iCAA8C;ApDswStD;;AoDvwSM;EACE,+BAA8C;ApD0wStD;;AoDvwSM;EACE,+BAAyC;EACzC,gCAA2C;ApD0wSnD;;AoDvwSM;EACE,8BAAuC;EACvC,iCAA6C;ApD0wSrD;;AoDzxSI;EACE,uBAA+B;ApD4xSrC;;AoDzxSM;EACE,2BAA8C;ApD4xStD;;AoD7xSM;EACE,6BAA8C;ApDgyStD;;AoDjySM;EACE,8BAA8C;ApDoyStD;;AoDrySM;EACE,4BAA8C;ApDwyStD;;AoDrySM;EACE,4BAAyC;EACzC,6BAA2C;ApDwySnD;;AoDrySM;EACE,2BAAuC;EACvC,8BAA6C;ApDwySrD;;AoDvzSI;EACE,yBAA+B;ApD0zSrC;;AoDvzSM;EACE,6BAA8C;ApD0zStD;;AoD3zSM;EACE,+BAA8C;ApD8zStD;;AoD/zSM;EACE,gCAA8C;ApDk0StD;;AoDn0SM;EACE,8BAA8C;ApDs0StD;;AoDn0SM;EACE,8BAAyC;EACzC,+BAA2C;ApDs0SnD;;AoDn0SM;EACE,6BAAuC;EACvC,gCAA6C;ApDs0SrD;;AoDr1SI;EACE,uBAA+B;ApDw1SrC;;AoDr1SM;EACE,2BAA8C;ApDw1StD;;AoDz1SM;EACE,6BAA8C;ApD41StD;;AoD71SM;EACE,8BAA8C;ApDg2StD;;AoDj2SM;EACE,4BAA8C;ApDo2StD;;AoDj2SM;EACE,4BAAyC;EACzC,6BAA2C;ApDo2SnD;;AoDj2SM;EACE,2BAAuC;EACvC,8BAA6C;ApDo2SrD;;AoDn3SI;EACE,qBAA+B;ApDs3SrC;;AoDn3SM;EACE,yBAA8C;ApDs3StD;;AoDv3SM;EACE,2BAA8C;ApD03StD;;AoD33SM;EACE,4BAA8C;ApD83StD;;AoD/3SM;EACE,0BAA8C;ApDk4StD;;AoD/3SM;EACE,0BAAyC;EACzC,2BAA2C;ApDk4SnD;;AoD/3SM;EACE,yBAAuC;EACvC,4BAA6C;ApDk4SrD;;AoDj5SI;EACE,2BAA+B;ApDo5SrC;;AoDj5SM;EACE,+BAA8C;ApDo5StD;;AoDr5SM;EACE,iCAA8C;ApDw5StD;;AoDz5SM;EACE,kCAA8C;ApD45StD;;AoD75SM;EACE,gCAA8C;ApDg6StD;;AoD75SM;EACE,gCAAyC;EACzC,iCAA2C;ApDg6SnD;;AoD75SM;EACE,+BAAuC;EACvC,kCAA6C;ApDg6SrD;;AoD/6SI;EACE,0BAA+B;ApDk7SrC;;AoD/6SM;EACE,8BAA8C;ApDk7StD;;AoDn7SM;EACE,gCAA8C;ApDs7StD;;AoDv7SM;EACE,iCAA8C;ApD07StD;;AoD37SM;EACE,+BAA8C;ApD87StD;;AoD37SM;EACE,+BAAyC;EACzC,gCAA2C;ApD87SnD;;AoD37SM;EACE,8BAAuC;EACvC,iCAA6C;ApD87SrD;;AoD78SI;EACE,2BAA+B;ApDg9SrC;;AoD78SM;EACE,+BAA8C;ApDg9StD;;AoDj9SM;EACE,iCAA8C;ApDo9StD;;AoDr9SM;EACE,kCAA8C;ApDw9StD;;AoDz9SM;EACE,gCAA8C;ApD49StD;;AoDz9SM;EACE,gCAAyC;EACzC,iCAA2C;ApD49SnD;;AoDz9SM;EACE,+BAAuC;EACvC,kCAA6C;ApD49SrD;;AoD3+SI;EACE,wBAA+B;ApD8+SrC;;AoD3+SM;EACE,4BAA8C;ApD8+StD;;AoD/+SM;EACE,8BAA8C;ApDk/StD;;AoDn/SM;EACE,+BAA8C;ApDs/StD;;AoDv/SM;EACE,6BAA8C;ApD0/StD;;AoDv/SM;EACE,6BAAyC;EACzC,8BAA2C;ApD0/SnD;;AoDv/SM;EACE,4BAAuC;EACvC,+BAA6C;ApD0/SrD;;AoDzgTI;EACE,0BAA+B;ApD4gTrC;;AoDzgTM;EACE,8BAA8C;ApD4gTtD;;AoD7gTM;EACE,gCAA8C;ApDghTtD;;AoDjhTM;EACE,iCAA8C;ApDohTtD;;AoDrhTM;EACE,+BAA8C;ApDwhTtD;;AoDrhTM;EACE,+BAAyC;EACzC,gCAA2C;ApDwhTnD;;AoDrhTM;EACE,8BAAuC;EACvC,iCAA6C;ApDwhTrD;;AoDviTI;EACE,wBAA+B;ApD0iTrC;;AoDviTM;EACE,4BAA8C;ApD0iTtD;;AoD3iTM;EACE,8BAA8C;ApD8iTtD;;AoD/iTM;EACE,+BAA8C;ApDkjTtD;;AoDnjTM;EACE,6BAA8C;ApDsjTtD;;AoDnjTM;EACE,6BAAyC;EACzC,8BAA2C;ApDsjTnD;;AoDnjTM;EACE,4BAAuC;EACvC,+BAA6C;ApDsjTrD;;AqDjlTI;EACE,0BAA2B;ArDolTjC;;AqDrlTI;EACE,4BAA2B;ArDwlTjC;;AqDzlTI;EACE,0BAA2B;ArD4lTjC;;AqD7lTI;EACE,4BAA2B;ArDgmTjC;;AqDjmTI;EACE,6BAA2B;ArDomTjC;;AqDrmTI;EACE,0BAA2B;ArDwmTjC;;AqDzmTI;EACE,6BAA2B;ArD4mTjC;;AC/hTE;EoD9EE;IACE,0BAA2B;ErDinT/B;EqDlnTE;IACE,4BAA2B;ErDonT/B;EqDrnTE;IACE,0BAA2B;ErDunT/B;EqDxnTE;IACE,4BAA2B;ErD0nT/B;EqD3nTE;IACE,6BAA2B;ErD6nT/B;EqD9nTE;IACE,0BAA2B;ErDgoT/B;EqDjoTE;IACE,6BAA2B;ErDmoT/B;AACF;;ACnjTE;EoDlFE;IACE,0BAA2B;ErDyoT/B;EqD1oTE;IACE,4BAA2B;ErD4oT/B;EqD7oTE;IACE,0BAA2B;ErD+oT/B;EqDhpTE;IACE,4BAA2B;ErDkpT/B;EqDnpTE;IACE,6BAA2B;ErDqpT/B;EqDtpTE;IACE,0BAA2B;ErDwpT/B;EqDzpTE;IACE,6BAA2B;ErD2pT/B;AACF;;ACnkTE;EoD1FE;IACE,0BAA2B;ErDiqT/B;EqDlqTE;IACE,4BAA2B;ErDoqT/B;EqDrqTE;IACE,0BAA2B;ErDuqT/B;EqDxqTE;IACE,4BAA2B;ErD0qT/B;EqD3qTE;IACE,6BAA2B;ErD6qT/B;EqD9qTE;IACE,0BAA2B;ErDgrT/B;EqDjrTE;IACE,6BAA2B;ErDmrT/B;AACF;;ACvlTE;EoD9FE;IACE,0BAA2B;ErDyrT/B;EqD1rTE;IACE,4BAA2B;ErD4rT/B;EqD7rTE;IACE,0BAA2B;ErD+rT/B;EqDhsTE;IACE,4BAA2B;ErDksT/B;EqDnsTE;IACE,6BAA2B;ErDqsT/B;EqDtsTE;IACE,0BAA2B;ErDwsT/B;EqDzsTE;IACE,6BAA2B;ErD2sT/B;AACF;;AChmTI;EoD7GA;IACE,0BAA2B;ErDitT/B;EqDltTE;IACE,4BAA2B;ErDotT/B;EqDrtTE;IACE,0BAA2B;ErDutT/B;EqDxtTE;IACE,4BAA2B;ErD0tT/B;EqD3tTE;IACE,6BAA2B;ErD6tT/B;EqD9tTE;IACE,0BAA2B;ErDguT/B;EqDjuTE;IACE,6BAA2B;ErDmuT/B;AACF;;ACzmTI;EoD5HA;IACE,0BAA2B;ErDyuT/B;EqD1uTE;IACE,4BAA2B;ErD4uT/B;EqD7uTE;IACE,0BAA2B;ErD+uT/B;EqDhvTE;IACE,4BAA2B;ErDkvT/B;EqDnvTE;IACE,6BAA2B;ErDqvT/B;EqDtvTE;IACE,0BAA2B;ErDwvT/B;EqDzvTE;IACE,6BAA2B;ErD2vT/B;AACF;;AqDnuTE;EACE,6BAAqC;ArDsuTzC;;AqDvuTE;EACE,8BAAqC;ArD0uTzC;;AqD3uTE;EACE,2BAAqC;ArD8uTzC;;AqD/uTE;EACE,4BAAqC;ArDkvTzC;;AC/rTE;EoD/CE;IACE,6BAAqC;ErDkvTzC;AACF;;ACjsTE;EoDhDE;IACE,6BAAqC;ErDqvTzC;AACF;;ACnsTE;EoDjDE;IACE,6BAAqC;ErDwvTzC;AACF;;ACrsTE;EoDlDE;IACE,6BAAqC;ErD2vTzC;AACF;;ACvsTE;EoDnDE;IACE,6BAAqC;ErD8vTzC;AACF;;ACxsTI;EoDrDA;IACE,6BAAqC;ErDiwTzC;AACF;;ACpsTI;EoD5DA;IACE,6BAAqC;ErDowTzC;AACF;;ACrsTI;EoD9DA;IACE,6BAAqC;ErDuwTzC;AACF;;ACjsTI;EoDrEA;IACE,6BAAqC;ErD0wTzC;AACF;;ACrvTE;EoD/CE;IACE,8BAAqC;ErDwyTzC;AACF;;ACvvTE;EoDhDE;IACE,8BAAqC;ErD2yTzC;AACF;;ACzvTE;EoDjDE;IACE,8BAAqC;ErD8yTzC;AACF;;AC3vTE;EoDlDE;IACE,8BAAqC;ErDizTzC;AACF;;AC7vTE;EoDnDE;IACE,8BAAqC;ErDozTzC;AACF;;AC9vTI;EoDrDA;IACE,8BAAqC;ErDuzTzC;AACF;;AC1vTI;EoD5DA;IACE,8BAAqC;ErD0zTzC;AACF;;AC3vTI;EoD9DA;IACE,8BAAqC;ErD6zTzC;AACF;;ACvvTI;EoDrEA;IACE,8BAAqC;ErDg0TzC;AACF;;AC3yTE;EoD/CE;IACE,2BAAqC;ErD81TzC;AACF;;AC7yTE;EoDhDE;IACE,2BAAqC;ErDi2TzC;AACF;;AC/yTE;EoDjDE;IACE,2BAAqC;ErDo2TzC;AACF;;ACjzTE;EoDlDE;IACE,2BAAqC;ErDu2TzC;AACF;;ACnzTE;EoDnDE;IACE,2BAAqC;ErD02TzC;AACF;;ACpzTI;EoDrDA;IACE,2BAAqC;ErD62TzC;AACF;;AChzTI;EoD5DA;IACE,2BAAqC;ErDg3TzC;AACF;;ACjzTI;EoD9DA;IACE,2BAAqC;ErDm3TzC;AACF;;AC7yTI;EoDrEA;IACE,2BAAqC;ErDs3TzC;AACF;;ACj2TE;EoD/CE;IACE,4BAAqC;ErDo5TzC;AACF;;ACn2TE;EoDhDE;IACE,4BAAqC;ErDu5TzC;AACF;;ACr2TE;EoDjDE;IACE,4BAAqC;ErD05TzC;AACF;;ACv2TE;EoDlDE;IACE,4BAAqC;ErD65TzC;AACF;;ACz2TE;EoDnDE;IACE,4BAAqC;ErDg6TzC;AACF;;AC12TI;EoDrDA;IACE,4BAAqC;ErDm6TzC;AACF;;ACt2TI;EoD5DA;IACE,4BAAqC;ErDs6TzC;AACF;;ACv2TI;EoD9DA;IACE,4BAAqC;ErDy6TzC;AACF;;ACn2TI;EoDrEA;IACE,4BAAqC;ErD46TzC;AACF;;AqD36TA;EACE,qCAAqC;ArD86TvC;;AqD56TA;EACE,oCAAoC;ArD+6TtC;;AqD76TA;EACE,oCAAoC;ArDg7TtC;;AqD96TA;EACE,6BAA6B;ArDi7T/B;;AqD/6TA;EACE,2BAAqC;ArDk7TvC;;AqDj7TA;EACE,2BAAsC;ArDo7TxC;;AqDn7TA;EACE,2BAAsC;ArDs7TxC;;AqDr7TA;EACE,2BAAwC;ArDw7T1C;;AqDv7TA;EACE,2BAAoC;ArD07TtC;;AqDx7TA;EACE,+LAAuC;ArD27TzC;;AqDz7TA;EACE,+LAAyC;ArD47T3C;;AqD17TA;EACE,+LAA0C;ArD67T5C;;AqD37TA;EACE,iCAAyC;ArD87T3C;;AqD57TA;EACE,iCAAoC;ArD+7TtC;;AsD3hUE;EACE,yBAA+B;AtD8hUnC;;ACn9TE;EqDzEE;IACE,yBAA+B;EtDgiUnC;AACF;;ACr9TE;EqD1EE;IACE,yBAA+B;EtDmiUnC;AACF;;ACv9TE;EqD3EE;IACE,yBAA+B;EtDsiUnC;AACF;;ACz9TE;EqD5EE;IACE,yBAA+B;EtDyiUnC;AACF;;AC39TE;EqD7EE;IACE,yBAA+B;EtD4iUnC;AACF;;AC59TI;EqD/EA;IACE,yBAA+B;EtD+iUnC;AACF;;ACx9TI;EqDtFA;IACE,yBAA+B;EtDkjUnC;AACF;;ACz9TI;EqDxFA;IACE,yBAA+B;EtDqjUnC;AACF;;ACr9TI;EqD/FA;IACE,yBAA+B;EtDwjUnC;AACF;;AsDrlUE;EACE,wBAA+B;AtDwlUnC;;AC7gUE;EqDzEE;IACE,wBAA+B;EtD0lUnC;AACF;;AC/gUE;EqD1EE;IACE,wBAA+B;EtD6lUnC;AACF;;ACjhUE;EqD3EE;IACE,wBAA+B;EtDgmUnC;AACF;;ACnhUE;EqD5EE;IACE,wBAA+B;EtDmmUnC;AACF;;ACrhUE;EqD7EE;IACE,wBAA+B;EtDsmUnC;AACF;;ACthUI;EqD/EA;IACE,wBAA+B;EtDymUnC;AACF;;AClhUI;EqDtFA;IACE,wBAA+B;EtD4mUnC;AACF;;ACnhUI;EqDxFA;IACE,wBAA+B;EtD+mUnC;AACF;;AC/gUI;EqD/FA;IACE,wBAA+B;EtDknUnC;AACF;;AsD/oUE;EACE,0BAA+B;AtDkpUnC;;ACvkUE;EqDzEE;IACE,0BAA+B;EtDopUnC;AACF;;ACzkUE;EqD1EE;IACE,0BAA+B;EtDupUnC;AACF;;AC3kUE;EqD3EE;IACE,0BAA+B;EtD0pUnC;AACF;;AC7kUE;EqD5EE;IACE,0BAA+B;EtD6pUnC;AACF;;AC/kUE;EqD7EE;IACE,0BAA+B;EtDgqUnC;AACF;;AChlUI;EqD/EA;IACE,0BAA+B;EtDmqUnC;AACF;;AC5kUI;EqDtFA;IACE,0BAA+B;EtDsqUnC;AACF;;AC7kUI;EqDxFA;IACE,0BAA+B;EtDyqUnC;AACF;;ACzkUI;EqD/FA;IACE,0BAA+B;EtD4qUnC;AACF;;AsDzsUE;EACE,gCAA+B;AtD4sUnC;;ACjoUE;EqDzEE;IACE,gCAA+B;EtD8sUnC;AACF;;ACnoUE;EqD1EE;IACE,gCAA+B;EtDitUnC;AACF;;ACroUE;EqD3EE;IACE,gCAA+B;EtDotUnC;AACF;;ACvoUE;EqD5EE;IACE,gCAA+B;EtDutUnC;AACF;;ACzoUE;EqD7EE;IACE,gCAA+B;EtD0tUnC;AACF;;AC1oUI;EqD/EA;IACE,gCAA+B;EtD6tUnC;AACF;;ACtoUI;EqDtFA;IACE,gCAA+B;EtDguUnC;AACF;;ACvoUI;EqDxFA;IACE,gCAA+B;EtDmuUnC;AACF;;ACnoUI;EqD/FA;IACE,gCAA+B;EtDsuUnC;AACF;;AsDnwUE;EACE,+BAA+B;AtDswUnC;;AC3rUE;EqDzEE;IACE,+BAA+B;EtDwwUnC;AACF;;AC7rUE;EqD1EE;IACE,+BAA+B;EtD2wUnC;AACF;;AC/rUE;EqD3EE;IACE,+BAA+B;EtD8wUnC;AACF;;ACjsUE;EqD5EE;IACE,+BAA+B;EtDixUnC;AACF;;ACnsUE;EqD7EE;IACE,+BAA+B;EtDoxUnC;AACF;;ACpsUI;EqD/EA;IACE,+BAA+B;EtDuxUnC;AACF;;AChsUI;EqDtFA;IACE,+BAA+B;EtD0xUnC;AACF;;ACjsUI;EqDxFA;IACE,+BAA+B;EtD6xUnC;AACF;;AC7rUI;EqD/FA;IACE,+BAA+B;EtDgyUnC;AACF;;AsD/xUA;EACE,wBAAwB;AtDkyU1B;;AsDhyUA;EACE,uBAAuB;EACvB,iCAAiC;EACjC,yBAAyB;EACzB,2BAA2B;EAC3B,qBAAqB;EACrB,6BAA6B;EAC7B,8BAA8B;EAC9B,wBAAwB;AtDmyU1B;;AChwUE;EqDhCA;IACE,wBAAwB;EtDoyU1B;AACF;;AClwUE;EqDhCA;IACE,wBAAwB;EtDsyU1B;AACF;;ACpwUE;EqDhCA;IACE,wBAAwB;EtDwyU1B;AACF;;ACtwUE;EqDhCA;IACE,wBAAwB;EtD0yU1B;AACF;;ACxwUE;EqDhCA;IACE,wBAAwB;EtD4yU1B;AACF;;ACzwUI;EqDjCF;IACE,wBAAwB;EtD8yU1B;AACF;;ACrwUI;EqDvCF;IACE,wBAAwB;EtDgzU1B;AACF;;ACtwUI;EqDxCF;IACE,wBAAwB;EtDkzU1B;AACF;;AClwUI;EqD9CF;IACE,wBAAwB;EtDozU1B;AACF;;AsDnzUA;EACE,6BAA6B;AtDszU/B;;AC1zUE;EqDOA;IACE,6BAA6B;EtDuzU/B;AACF;;AC5zUE;EqDOA;IACE,6BAA6B;EtDyzU/B;AACF;;AC9zUE;EqDOA;IACE,6BAA6B;EtD2zU/B;AACF;;ACh0UE;EqDOA;IACE,6BAA6B;EtD6zU/B;AACF;;ACl0UE;EqDOA;IACE,6BAA6B;EtD+zU/B;AACF;;ACn0UI;EqDMF;IACE,6BAA6B;EtDi0U/B;AACF;;AC/zUI;EqDAF;IACE,6BAA6B;EtDm0U/B;AACF;;ACh0UI;EqDDF;IACE,6BAA6B;EtDq0U/B;AACF;;AC5zUI;EqDPF;IACE,6BAA6B;EtDu0U/B;AACF;;AuDj8UA,iBAAA;ACQA;EACE,oBAAoB;EACpB,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AxD67UhC;;AwDj8UA;EAMI,gBAAgB;AxD+7UpB;;AwDr8UA;EASM,mBAAmB;AxDg8UzB;;AwDz8UA;EAeM,uBtDRyB;EsDSzB,ctDtBuB;AFo9U7B;;AwD98UA;;EAmBQ,cAAc;AxDg8UtB;;AwDn9UA;EAqBQ,ctD3BqB;AF69U7B;;AwDv9UA;EAuBQ,4BtD7BqB;AFi+U7B;;AwD39UA;;EA0BU,ctDhCmB;AFs+U7B;;AC34UE;EuDrFF;IA6BU,uBtDtBqB;EF89U7B;AACF;;AwDt+UA;;EAgCQ,4BtDtCqB;AFi/U7B;;AwD3+UA;;;EAqCU,yB7CgEuB;E6C/DvB,ctD5CmB;AFw/U7B;;AwDl/UA;EAyCU,ctD/CmB;EsDgDnB,YAAY;AxD68UtB;;AwDv/UA;EA4CY,UAAU;AxD+8UtB;;AwD3/UA;EA+CY,UAAU;AxDg9UtB;;AwD//UA;EAmDY,ctDzDiB;AFygV7B;;AwDngVA;EAqDc,uCtD3De;AF6gV7B;;AwDvgVA;EAyDc,yBtD/De;EsDgEf,qBtDhEe;EsDiEf,YtDpDiB;AFsgV/B;;AwD7gVA;EAiEU,4EAAyG;AxDg9UnH;;ACx8UE;EuDzEF;IAoEc,4EAAyG;ExDk9UrH;AACF;;AwDvhVA;EAeM,yBtDrBuB;EsDsBvB,YtDTyB;AFqhV/B;;AwD5hVA;;EAmBQ,cAAc;AxD8gVtB;;AwDjiVA;EAqBQ,YtDduB;AF8hV/B;;AwDriVA;EAuBQ,+BtDhBuB;AFkiV/B;;AwDziVA;;EA0BU,YtDnBqB;AFuiV/B;;ACz9UE;EuDrFF;IA6BU,yBtDnCmB;EFyjV3B;AACF;;AwDpjVA;;EAgCQ,+BtDzBuB;AFkjV/B;;AwDzjVA;;;EAqCU,uB7CgEuB;E6C/DvB,YtD/BqB;AFyjV/B;;AwDhkVA;EAyCU,YtDlCqB;EsDmCrB,YAAY;AxD2hVtB;;AwDrkVA;EA4CY,UAAU;AxD6hVtB;;AwDzkVA;EA+CY,UAAU;AxD8hVtB;;AwD7kVA;EAmDY,YtD5CmB;AF0kV/B;;AwDjlVA;EAqDc,uCtD3De;AF2lV7B;;AwDrlVA;EAyDc,uBtDlDiB;EsDmDjB,mBtDnDiB;EsDoDjB,ctDjEe;AFimV7B;;AwD3lVA;EAiEU,8EAAyG;AxD8hVnH;;ACthVE;EuDzEF;IAoEc,8EAAyG;ExDgiVrH;AACF;;AwDrmVA;EAeM,4BtDVwB;EsDWxB,yB7CwDe;AXkiVrB;;AwD1mVA;;EAmBQ,cAAc;AxD4lVtB;;AwD/mVA;EAqBQ,yB7CmDa;AX2iVrB;;AwDnnVA;EAuBQ,yB7CiDa;AX+iVrB;;AwDvnVA;;EA0BU,yB7C8CW;AXojVrB;;ACviVE;EuDrFF;IA6BU,4BtDxBoB;EF4nV5B;AACF;;AwDloVA;;EAgCQ,yB7CwCa;AX+jVrB;;AwDvoVA;;;EAqCU,yB7CgEuB;E6C/DvB,yB7CkCW;AXskVrB;;AwD9oVA;EAyCU,yB7C+BW;E6C9BX,YAAY;AxDymVtB;;AwDnpVA;EA4CY,UAAU;AxD2mVtB;;AwDvpVA;EA+CY,UAAU;AxD4mVtB;;AwD3pVA;EAmDY,yB7CqBS;AXulVrB;;AwD/pVA;EAqDc,uCtD3De;AFyqV7B;;AwDnqVA;EAyDc,oC7CeO;E6CdP,gC7CcO;E6CbP,iBtDtDgB;AFoqV9B;;AwDzqVA;EAiEU,iFAAyG;AxD4mVnH;;ACpmVE;EuDzEF;IAoEc,iFAAyG;ExD8mVrH;AACF;;AwDnrVA;EAeM,yBtDjBwB;EsDkBxB,W7C0DU;AX8mVhB;;AwDxrVA;;EAmBQ,cAAc;AxD0qVtB;;AwD7rVA;EAqBQ,W7CqDQ;AXunVhB;;AwDjsVA;EAuBQ,+B7CmDQ;AX2nVhB;;AwDrsVA;;EA0BU,W7CgDM;AXgoVhB;;ACrnVE;EuDrFF;IA6BU,yBtD/BoB;EFitV5B;AACF;;AwDhtVA;;EAgCQ,+B7C0CQ;AX2oVhB;;AwDrtVA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXkpVhB;;AwD5tVA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDurVtB;;AwDjuVA;EA4CY,UAAU;AxDyrVtB;;AwDruVA;EA+CY,UAAU;AxD0rVtB;;AwDzuVA;EAmDY,W7CuBI;AXmqVhB;;AwD7uVA;EAqDc,uCtD3De;AFuvV7B;;AwDjvVA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD7DgB;AFyvV9B;;AwDvvVA;EAiEU,gFAAyG;AxD0rVnH;;AClrVE;EuDzEF;IAoEc,gFAAyG;ExD4rVrH;AACF;;AwDjwVA;EAeM,yBtDH4B;EsDI5B,W7C0DU;AX4rVhB;;AwDtwVA;;EAmBQ,cAAc;AxDwvVtB;;AwD3wVA;EAqBQ,W7CqDQ;AXqsVhB;;AwD/wVA;EAuBQ,+B7CmDQ;AXysVhB;;AwDnxVA;;EA0BU,W7CgDM;AX8sVhB;;ACnsVE;EuDrFF;IA6BU,yBtDjBwB;EFixVhC;AACF;;AwD9xVA;;EAgCQ,+B7C0CQ;AXytVhB;;AwDnyVA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXguVhB;;AwD1yVA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDqwVtB;;AwD/yVA;EA4CY,UAAU;AxDuwVtB;;AwDnzVA;EA+CY,UAAU;AxDwwVtB;;AwDvzVA;EAmDY,W7CuBI;AXivVhB;;AwD3zVA;EAqDc,uCtD3De;AFq0V7B;;AwD/zVA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD/CoB;AFyzVlC;;AwDr0VA;EAiEU,gFAAyG;AxDwwVnH;;AChwVE;EuDzEF;IAoEc,gFAAyG;ExD0wVrH;AACF;;AwD/0VA;EAeM,yBtDD4B;EsDE5B,W7C0DU;AX0wVhB;;AwDp1VA;;EAmBQ,cAAc;AxDs0VtB;;AwDz1VA;EAqBQ,W7CqDQ;AXmxVhB;;AwD71VA;EAuBQ,+B7CmDQ;AXuxVhB;;AwDj2VA;;EA0BU,W7CgDM;AX4xVhB;;ACjxVE;EuDrFF;IA6BU,yBtDfwB;EF61VhC;AACF;;AwD52VA;;EAgCQ,+B7C0CQ;AXuyVhB;;AwDj3VA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX8yVhB;;AwDx3VA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDm1VtB;;AwD73VA;EA4CY,UAAU;AxDq1VtB;;AwDj4VA;EA+CY,UAAU;AxDs1VtB;;AwDr4VA;EAmDY,W7CuBI;AX+zVhB;;AwDz4VA;EAqDc,uCtD3De;AFm5V7B;;AwD74VA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD7CoB;AFq4VlC;;AwDn5VA;EAiEU,gFAAyG;AxDs1VnH;;AC90VE;EuDzEF;IAoEc,gFAAyG;ExDw1VrH;AACF;;AwD75VA;EAeM,yBtDF4B;EsDG5B,W7C0DU;AXw1VhB;;AwDl6VA;;EAmBQ,cAAc;AxDo5VtB;;AwDv6VA;EAqBQ,W7CqDQ;AXi2VhB;;AwD36VA;EAuBQ,+B7CmDQ;AXq2VhB;;AwD/6VA;;EA0BU,W7CgDM;AX02VhB;;AC/1VE;EuDrFF;IA6BU,yBtDhBwB;EF46VhC;AACF;;AwD17VA;;EAgCQ,+B7C0CQ;AXq3VhB;;AwD/7VA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX43VhB;;AwDt8VA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDi6VtB;;AwD38VA;EA4CY,UAAU;AxDm6VtB;;AwD/8VA;EA+CY,UAAU;AxDo6VtB;;AwDn9VA;EAmDY,W7CuBI;AX64VhB;;AwDv9VA;EAqDc,uCtD3De;AFi+V7B;;AwD39VA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD9CoB;AFo9VlC;;AwDj+VA;EAiEU,gFAAyG;AxDo6VnH;;AC55VE;EuDzEF;IAoEc,gFAAyG;ExDs6VrH;AACF;;AwD3+VA;EAeM,yBtDJ4B;EsDK5B,W7C0DU;AXs6VhB;;AwDh/VA;;EAmBQ,cAAc;AxDk+VtB;;AwDr/VA;EAqBQ,W7CqDQ;AX+6VhB;;AwDz/VA;EAuBQ,+B7CmDQ;AXm7VhB;;AwD7/VA;;EA0BU,W7CgDM;AXw7VhB;;AC76VE;EuDrFF;IA6BU,yBtDlBwB;EF4/VhC;AACF;;AwDxgWA;;EAgCQ,+B7C0CQ;AXm8VhB;;AwD7gWA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX08VhB;;AwDphWA;EAyCU,W7CiCM;E6ChCN,YAAY;AxD++VtB;;AwDzhWA;EA4CY,UAAU;AxDi/VtB;;AwD7hWA;EA+CY,UAAU;AxDk/VtB;;AwDjiWA;EAmDY,W7CuBI;AX29VhB;;AwDriWA;EAqDc,uCtD3De;AF+iW7B;;AwDziWA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctDhDoB;AFoiWlC;;AwD/iWA;EAiEU,gFAAyG;AxDk/VnH;;AC1+VE;EuDzEF;IAoEc,gFAAyG;ExDo/VrH;AACF;;AwDzjWA;EAeM,yBtDL4B;EsDM5B,yB7CwDe;AXs/VrB;;AwD9jWA;;EAmBQ,cAAc;AxDgjWtB;;AwDnkWA;EAqBQ,yB7CmDa;AX+/VrB;;AwDvkWA;EAuBQ,yB7CiDa;AXmgWrB;;AwD3kWA;;EA0BU,yB7C8CW;AXwgWrB;;AC3/VE;EuDrFF;IA6BU,yBtDnBwB;EF2kWhC;AACF;;AwDtlWA;;EAgCQ,yB7CwCa;AXmhWrB;;AwD3lWA;;;EAqCU,yB7CgEuB;E6C/DvB,yB7CkCW;AX0hWrB;;AwDlmWA;EAyCU,yB7C+BW;E6C9BX,YAAY;AxD6jWtB;;AwDvmWA;EA4CY,UAAU;AxD+jWtB;;AwD3mWA;EA+CY,UAAU;AxDgkWtB;;AwD/mWA;EAmDY,yB7CqBS;AX2iWrB;;AwDnnWA;EAqDc,uCtD3De;AF6nW7B;;AwDvnWA;EAyDc,oC7CeO;E6CdP,gC7CcO;E6CbP,ctDjDoB;AFmnWlC;;AwD7nWA;EAiEU,gFAAyG;AxDgkWnH;;ACxjWE;EuDzEF;IAoEc,gFAAyG;ExDkkWrH;AACF;;AwDvoWA;EAeM,yBtDC2B;EsDA3B,W7C0DU;AXkkWhB;;AwD5oWA;;EAmBQ,cAAc;AxD8nWtB;;AwDjpWA;EAqBQ,W7CqDQ;AX2kWhB;;AwDrpWA;EAuBQ,+B7CmDQ;AX+kWhB;;AwDzpWA;;EA0BU,W7CgDM;AXolWhB;;ACzkWE;EuDrFF;IA6BU,yBtDbuB;EFmpW/B;AACF;;AwDpqWA;;EAgCQ,+B7C0CQ;AX+lWhB;;AwDzqWA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXsmWhB;;AwDhrWA;EAyCU,W7CiCM;E6ChCN,YAAY;AxD2oWtB;;AwDrrWA;EA4CY,UAAU;AxD6oWtB;;AwDzrWA;EA+CY,UAAU;AxD8oWtB;;AwD7rWA;EAmDY,W7CuBI;AXunWhB;;AwDjsWA;EAqDc,uCtD3De;AF2sW7B;;AwDrsWA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD3CmB;AF2rWjC;;AwD3sWA;EAiEU,gFAAyG;AxD8oWnH;;ACtoWE;EuDzEF;IAoEc,gFAAyG;ExDgpWrH;AACF;;AwDrtWA;EAwEM,eA/E0B;AxDguWhC;;AC5oWE;EuD7EF;IA4EQ,oBAlF8B;ExDouWpC;AACF;;AClpWE;EuD7EF;IAgFQ,qBArF8B;ExDyuWpC;AACF;;AwDruWA;EAqFM,mBAAmB;EACnB,aAAa;AxDopWnB;;AwD1uWA;EAwFQ,YAAY;EACZ,cAAc;AxDspWtB;;AwD/uWA;EA2FI,gBAAgB;AxDwpWpB;;AwDnvWA;EA6FI,iBAAiB;AxD0pWrB;;AwDtpWA;EAEE,gBAAgB;AxDwpWlB;;AwD1pWA;EAII,SAAS;EACT,gBAAgB;EAChB,eAAe;EACf,kBAAkB;EAClB,QAAQ;EACR,qCAAqC;AxD0pWzC;;AwDnqWA;EAYI,YAAY;AxD2pWhB;;AC/rWE;EuDwBF;IAeI,aAAa;ExD6pWf;AACF;;AwD5pWA;EACE,kBAAkB;AxD+pWpB;;ACzsWE;EuDyCF;IAKM,aAAa;ExDgqWjB;EwDrqWF;IAOQ,sBAAsB;ExDiqW5B;AACF;;AC9sWE;EuDqCF;IASI,aAAa;IACb,uBAAuB;ExDqqWzB;EwD/qWF;IvDsBI,oBuDVwC;ExDsqW1C;AACF;;AwDnqWA;;EAEE,YAAY;EACZ,cAAc;AxDsqWhB;;AwDpqWA;EACE,YAAY;EACZ,cAAc;EACd,oBAlJ6B;AxDyzW/B;;AyDrzWA;EACE,oBAL2B;AzD6zW7B;;AC5tWE;EwD7FF;IAMM,oBAT8B;EzDi0WlC;EyD9zWF;IAQM,qBAV8B;EzDm0WlC;AACF;;A0Dl0WA;EACE,yBxDS4B;EwDR5B,yBAJ+B;A1Dy0WjC","file":"bulma.css"}
static/css/bulma.min.css ADDED
The diff for this file is too large to render. See raw diff
 
static/css/fontawesome.all.min.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com
3
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
+ */
5
+ .fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
static/css/index.css ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ font-family: 'Noto Sans', sans-serif;
3
+ }
4
+
5
+
6
+ .footer .icon-link {
7
+ font-size: 25px;
8
+ color: #000;
9
+ }
10
+
11
+ .link-block a {
12
+ margin-top: 5px;
13
+ margin-bottom: 5px;
14
+ }
15
+
16
+ .dnerf {
17
+ font-variant: small-caps;
18
+ }
19
+
20
+
21
+ .teaser .hero-body {
22
+ padding-top: 0;
23
+ padding-bottom: 3rem;
24
+ }
25
+
26
+ .teaser {
27
+ font-family: 'Google Sans', sans-serif;
28
+ }
29
+
30
+
31
+ .publication-title {
32
+ }
33
+
34
+ .publication-banner {
35
+ max-height: parent;
36
+
37
+ }
38
+
39
+ .publication-banner video {
40
+ position: relative;
41
+ left: auto;
42
+ top: auto;
43
+ transform: none;
44
+ object-fit: fit;
45
+ }
46
+
47
+ .publication-header .hero-body {
48
+ }
49
+
50
+ .publication-title {
51
+ font-family: 'Google Sans', sans-serif;
52
+ }
53
+
54
+ .publication-authors {
55
+ font-family: 'Google Sans', sans-serif;
56
+ }
57
+
58
+ .publication-venue {
59
+ color: #555;
60
+ width: fit-content;
61
+ font-weight: bold;
62
+ }
63
+
64
+ .publication-awards {
65
+ color: #ff3860;
66
+ width: fit-content;
67
+ font-weight: bolder;
68
+ }
69
+
70
+ .publication-authors {
71
+ }
72
+
73
+ .publication-authors a {
74
+ color: hsl(204, 86%, 53%) !important;
75
+ }
76
+
77
+ .publication-authors a:hover {
78
+ text-decoration: underline;
79
+ }
80
+
81
+ .author-block {
82
+ display: inline-block;
83
+ }
84
+
85
+ .publication-banner img {
86
+ }
87
+
88
+ .publication-authors {
89
+ /*color: #4286f4;*/
90
+ }
91
+
92
+ .publication-video {
93
+ position: relative;
94
+ width: 100%;
95
+ height: 0;
96
+ padding-bottom: 56.25%;
97
+
98
+ overflow: hidden;
99
+ border-radius: 10px !important;
100
+ }
101
+
102
+ .publication-video iframe {
103
+ position: absolute;
104
+ top: 0;
105
+ left: 0;
106
+ width: 100%;
107
+ height: 100%;
108
+ }
109
+
110
+ .publication-body img {
111
+ }
112
+
113
+ .results-carousel {
114
+ overflow: hidden;
115
+ }
116
+
117
+ .results-carousel .item {
118
+ margin: 5px;
119
+ overflow: hidden;
120
+ padding: 20px;
121
+ font-size: 0;
122
+ }
123
+
124
+ .results-carousel video {
125
+ margin: 0;
126
+ }
127
+
128
+ .slider-pagination .slider-page {
129
+ background: #000000;
130
+ }
131
+
132
+ .eql-cntrb {
133
+ font-size: smaller;
134
+ }
135
+
136
+
137
+
static/images/drugpc-open-end.jpg ADDED

Git LFS Details

  • SHA256: e76ba4f1aef16256ec6198fe36059f8d595d825209184736a41d37a16020109e
  • Pointer size: 132 Bytes
  • Size of remote file: 1.07 MB
static/images/favicon.ico ADDED
static/images/multi-agent.jpg ADDED

Git LFS Details

  • SHA256: 4d5e4fb72a01ebb6fb58926c231926543ec68204e4573c143397c4ad72c805d0
  • Pointer size: 131 Bytes
  • Size of remote file: 335 kB
static/images/tool_monarch.jpg ADDED

Git LFS Details

  • SHA256: 65464d6bfba2d4ded7268d4433ba3f4092606de33a8800041161e1eb3e068976
  • Pointer size: 131 Bytes
  • Size of remote file: 206 kB
static/images/tool_openfda.jpg ADDED

Git LFS Details

  • SHA256: 4627ca7051daa5ec72f7a9e1c369cd85f31e5479758708e851f29a6105a6e9a6
  • Pointer size: 131 Bytes
  • Size of remote file: 172 kB
static/images/tool_opentarget.jpg ADDED

Git LFS Details

  • SHA256: 8de7726fed275d205f09c1fae3599e032e703ab42d84bd88a2bafb69532c6234
  • Pointer size: 131 Bytes
  • Size of remote file: 175 kB
static/images/treatmentpc.jpg ADDED

Git LFS Details

  • SHA256: 7f38d779cfa9b67a46502d9a5635d883e3b0c614a6487baf7af3b2641594375c
  • Pointer size: 131 Bytes
  • Size of remote file: 406 kB
static/images/txagent.jpg ADDED

Git LFS Details

  • SHA256: 6b8a1e015acd4b86bdc8150614cf52a94fcd61940bbe96da21f3a6b375b2ff73
  • Pointer size: 131 Bytes
  • Size of remote file: 183 kB
static/images/txagent_capabilities.jpg ADDED

Git LFS Details

  • SHA256: fd0ea6b082e3b62ee23199471748e8840b9e224d4d4790e7d894e1db40b2547d
  • Pointer size: 131 Bytes
  • Size of remote file: 986 kB
static/images/txagent_train.jpg ADDED

Git LFS Details

  • SHA256: 5f95741a537d876dd7575ff53ebb557957e55fc6e1d3dc6f81bcad247492e103
  • Pointer size: 131 Bytes
  • Size of remote file: 595 kB
static/js/bulma-carousel.js ADDED
@@ -0,0 +1,2371 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define([], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["bulmaCarousel"] = factory();
8
+ else
9
+ root["bulmaCarousel"] = factory();
10
+ })(typeof self !== 'undefined' ? self : this, function() {
11
+ return /******/ (function(modules) { // webpackBootstrap
12
+ /******/ // The module cache
13
+ /******/ var installedModules = {};
14
+ /******/
15
+ /******/ // The require function
16
+ /******/ function __webpack_require__(moduleId) {
17
+ /******/
18
+ /******/ // Check if module is in cache
19
+ /******/ if(installedModules[moduleId]) {
20
+ /******/ return installedModules[moduleId].exports;
21
+ /******/ }
22
+ /******/ // Create a new module (and put it into the cache)
23
+ /******/ var module = installedModules[moduleId] = {
24
+ /******/ i: moduleId,
25
+ /******/ l: false,
26
+ /******/ exports: {}
27
+ /******/ };
28
+ /******/
29
+ /******/ // Execute the module function
30
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
+ /******/
32
+ /******/ // Flag the module as loaded
33
+ /******/ module.l = true;
34
+ /******/
35
+ /******/ // Return the exports of the module
36
+ /******/ return module.exports;
37
+ /******/ }
38
+ /******/
39
+ /******/
40
+ /******/ // expose the modules object (__webpack_modules__)
41
+ /******/ __webpack_require__.m = modules;
42
+ /******/
43
+ /******/ // expose the module cache
44
+ /******/ __webpack_require__.c = installedModules;
45
+ /******/
46
+ /******/ // define getter function for harmony exports
47
+ /******/ __webpack_require__.d = function(exports, name, getter) {
48
+ /******/ if(!__webpack_require__.o(exports, name)) {
49
+ /******/ Object.defineProperty(exports, name, {
50
+ /******/ configurable: false,
51
+ /******/ enumerable: true,
52
+ /******/ get: getter
53
+ /******/ });
54
+ /******/ }
55
+ /******/ };
56
+ /******/
57
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
58
+ /******/ __webpack_require__.n = function(module) {
59
+ /******/ var getter = module && module.__esModule ?
60
+ /******/ function getDefault() { return module['default']; } :
61
+ /******/ function getModuleExports() { return module; };
62
+ /******/ __webpack_require__.d(getter, 'a', getter);
63
+ /******/ return getter;
64
+ /******/ };
65
+ /******/
66
+ /******/ // Object.prototype.hasOwnProperty.call
67
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
68
+ /******/
69
+ /******/ // __webpack_public_path__
70
+ /******/ __webpack_require__.p = "";
71
+ /******/
72
+ /******/ // Load entry module and return exports
73
+ /******/ return __webpack_require__(__webpack_require__.s = 5);
74
+ /******/ })
75
+ /************************************************************************/
76
+ /******/ ([
77
+ /* 0 */
78
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
79
+
80
+ "use strict";
81
+ /* unused harmony export addClasses */
82
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return removeClasses; });
83
+ /* unused harmony export show */
84
+ /* unused harmony export hide */
85
+ /* unused harmony export offset */
86
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return width; });
87
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return height; });
88
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return outerHeight; });
89
+ /* unused harmony export outerWidth */
90
+ /* unused harmony export position */
91
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return css; });
92
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__type__ = __webpack_require__(2);
93
+
94
+
95
+ var addClasses = function addClasses(element, classes) {
96
+ classes = Array.isArray(classes) ? classes : classes.split(' ');
97
+ classes.forEach(function (cls) {
98
+ element.classList.add(cls);
99
+ });
100
+ };
101
+
102
+ var removeClasses = function removeClasses(element, classes) {
103
+ classes = Array.isArray(classes) ? classes : classes.split(' ');
104
+ classes.forEach(function (cls) {
105
+ element.classList.remove(cls);
106
+ });
107
+ };
108
+
109
+ var show = function show(elements) {
110
+ elements = Array.isArray(elements) ? elements : [elements];
111
+ elements.forEach(function (element) {
112
+ element.style.display = '';
113
+ });
114
+ };
115
+
116
+ var hide = function hide(elements) {
117
+ elements = Array.isArray(elements) ? elements : [elements];
118
+ elements.forEach(function (element) {
119
+ element.style.display = 'none';
120
+ });
121
+ };
122
+
123
+ var offset = function offset(element) {
124
+ var rect = element.getBoundingClientRect();
125
+ return {
126
+ top: rect.top + document.body.scrollTop,
127
+ left: rect.left + document.body.scrollLeft
128
+ };
129
+ };
130
+
131
+ // returns an element's width
132
+ var width = function width(element) {
133
+ return element.getBoundingClientRect().width || element.offsetWidth;
134
+ };
135
+ // returns an element's height
136
+ var height = function height(element) {
137
+ return element.getBoundingClientRect().height || element.offsetHeight;
138
+ };
139
+
140
+ var outerHeight = function outerHeight(element) {
141
+ var withMargin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
142
+
143
+ var height = element.offsetHeight;
144
+ if (withMargin) {
145
+ var style = window.getComputedStyle(element);
146
+ height += parseInt(style.marginTop) + parseInt(style.marginBottom);
147
+ }
148
+ return height;
149
+ };
150
+
151
+ var outerWidth = function outerWidth(element) {
152
+ var withMargin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
153
+
154
+ var width = element.offsetWidth;
155
+ if (withMargin) {
156
+ var style = window.getComputedStyle(element);
157
+ width += parseInt(style.marginLeft) + parseInt(style.marginRight);
158
+ }
159
+ return width;
160
+ };
161
+
162
+ var position = function position(element) {
163
+ return {
164
+ left: element.offsetLeft,
165
+ top: element.offsetTop
166
+ };
167
+ };
168
+
169
+ var css = function css(element, obj) {
170
+ if (!obj) {
171
+ return window.getComputedStyle(element);
172
+ }
173
+ if (Object(__WEBPACK_IMPORTED_MODULE_0__type__["b" /* isObject */])(obj)) {
174
+ var style = '';
175
+ Object.keys(obj).forEach(function (key) {
176
+ style += key + ': ' + obj[key] + ';';
177
+ });
178
+
179
+ element.style.cssText += style;
180
+ }
181
+ };
182
+
183
+ /***/ }),
184
+ /* 1 */
185
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
186
+
187
+ "use strict";
188
+ /* harmony export (immutable) */ __webpack_exports__["a"] = detectSupportsPassive;
189
+ function detectSupportsPassive() {
190
+ var supportsPassive = false;
191
+
192
+ try {
193
+ var opts = Object.defineProperty({}, 'passive', {
194
+ get: function get() {
195
+ supportsPassive = true;
196
+ }
197
+ });
198
+
199
+ window.addEventListener('testPassive', null, opts);
200
+ window.removeEventListener('testPassive', null, opts);
201
+ } catch (e) {}
202
+
203
+ return supportsPassive;
204
+ }
205
+
206
+ /***/ }),
207
+ /* 2 */
208
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
209
+
210
+ "use strict";
211
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isFunction; });
212
+ /* unused harmony export isNumber */
213
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return isString; });
214
+ /* unused harmony export isDate */
215
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return isObject; });
216
+ /* unused harmony export isEmptyObject */
217
+ /* unused harmony export isNode */
218
+ /* unused harmony export isVideo */
219
+ /* unused harmony export isHTML5 */
220
+ /* unused harmony export isIFrame */
221
+ /* unused harmony export isYoutube */
222
+ /* unused harmony export isVimeo */
223
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
224
+
225
+ var isFunction = function isFunction(unknown) {
226
+ return typeof unknown === 'function';
227
+ };
228
+ var isNumber = function isNumber(unknown) {
229
+ return typeof unknown === "number";
230
+ };
231
+ var isString = function isString(unknown) {
232
+ return typeof unknown === 'string' || !!unknown && (typeof unknown === 'undefined' ? 'undefined' : _typeof(unknown)) === 'object' && Object.prototype.toString.call(unknown) === '[object String]';
233
+ };
234
+ var isDate = function isDate(unknown) {
235
+ return (Object.prototype.toString.call(unknown) === '[object Date]' || unknown instanceof Date) && !isNaN(unknown.valueOf());
236
+ };
237
+ var isObject = function isObject(unknown) {
238
+ return (typeof unknown === 'function' || (typeof unknown === 'undefined' ? 'undefined' : _typeof(unknown)) === 'object' && !!unknown) && !Array.isArray(unknown);
239
+ };
240
+ var isEmptyObject = function isEmptyObject(unknown) {
241
+ for (var name in unknown) {
242
+ if (unknown.hasOwnProperty(name)) {
243
+ return false;
244
+ }
245
+ }
246
+ return true;
247
+ };
248
+
249
+ var isNode = function isNode(unknown) {
250
+ return !!(unknown && unknown.nodeType === HTMLElement | SVGElement);
251
+ };
252
+ var isVideo = function isVideo(unknown) {
253
+ return isYoutube(unknown) || isVimeo(unknown) || isHTML5(unknown);
254
+ };
255
+ var isHTML5 = function isHTML5(unknown) {
256
+ return isNode(unknown) && unknown.tagName === 'VIDEO';
257
+ };
258
+ var isIFrame = function isIFrame(unknown) {
259
+ return isNode(unknown) && unknown.tagName === 'IFRAME';
260
+ };
261
+ var isYoutube = function isYoutube(unknown) {
262
+ return isIFrame(unknown) && !!unknown.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/);
263
+ };
264
+ var isVimeo = function isVimeo(unknown) {
265
+ return isIFrame(unknown) && !!unknown.src.match(/vimeo\.com\/video\/.*/);
266
+ };
267
+
268
+ /***/ }),
269
+ /* 3 */
270
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
271
+
272
+ "use strict";
273
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
274
+
275
+ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
276
+
277
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
278
+
279
+ var EventEmitter = function () {
280
+ function EventEmitter() {
281
+ var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
282
+
283
+ _classCallCheck(this, EventEmitter);
284
+
285
+ this.events = new Map(events);
286
+ }
287
+
288
+ _createClass(EventEmitter, [{
289
+ key: "on",
290
+ value: function on(name, cb) {
291
+ var _this = this;
292
+
293
+ this.events.set(name, [].concat(_toConsumableArray(this.events.has(name) ? this.events.get(name) : []), [cb]));
294
+
295
+ return function () {
296
+ return _this.events.set(name, _this.events.get(name).filter(function (fn) {
297
+ return fn !== cb;
298
+ }));
299
+ };
300
+ }
301
+ }, {
302
+ key: "emit",
303
+ value: function emit(name) {
304
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
305
+ args[_key - 1] = arguments[_key];
306
+ }
307
+
308
+ return this.events.has(name) && this.events.get(name).map(function (fn) {
309
+ return fn.apply(undefined, args);
310
+ });
311
+ }
312
+ }]);
313
+
314
+ return EventEmitter;
315
+ }();
316
+
317
+ /* harmony default export */ __webpack_exports__["a"] = (EventEmitter);
318
+
319
+ /***/ }),
320
+ /* 4 */
321
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
322
+
323
+ "use strict";
324
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
325
+
326
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
327
+
328
+ var Coordinate = function () {
329
+ function Coordinate() {
330
+ var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
331
+ var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
332
+
333
+ _classCallCheck(this, Coordinate);
334
+
335
+ this._x = x;
336
+ this._y = y;
337
+ }
338
+
339
+ _createClass(Coordinate, [{
340
+ key: 'add',
341
+ value: function add(coord) {
342
+ return new Coordinate(this._x + coord._x, this._y + coord._y);
343
+ }
344
+ }, {
345
+ key: 'sub',
346
+ value: function sub(coord) {
347
+ return new Coordinate(this._x - coord._x, this._y - coord._y);
348
+ }
349
+ }, {
350
+ key: 'distance',
351
+ value: function distance(coord) {
352
+ var deltaX = this._x - coord._x;
353
+ var deltaY = this._y - coord._y;
354
+
355
+ return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
356
+ }
357
+ }, {
358
+ key: 'max',
359
+ value: function max(coord) {
360
+ var x = Math.max(this._x, coord._x);
361
+ var y = Math.max(this._y, coord._y);
362
+
363
+ return new Coordinate(x, y);
364
+ }
365
+ }, {
366
+ key: 'equals',
367
+ value: function equals(coord) {
368
+ if (this == coord) {
369
+ return true;
370
+ }
371
+ if (!coord || coord == null) {
372
+ return false;
373
+ }
374
+ return this._x == coord._x && this._y == coord._y;
375
+ }
376
+ }, {
377
+ key: 'inside',
378
+ value: function inside(northwest, southeast) {
379
+ if (this._x >= northwest._x && this._x <= southeast._x && this._y >= northwest._y && this._y <= southeast._y) {
380
+
381
+ return true;
382
+ }
383
+ return false;
384
+ }
385
+ }, {
386
+ key: 'constrain',
387
+ value: function constrain(min, max) {
388
+ if (min._x > max._x || min._y > max._y) {
389
+ return this;
390
+ }
391
+
392
+ var x = this._x,
393
+ y = this._y;
394
+
395
+ if (min._x !== null) {
396
+ x = Math.max(x, min._x);
397
+ }
398
+ if (max._x !== null) {
399
+ x = Math.min(x, max._x);
400
+ }
401
+ if (min._y !== null) {
402
+ y = Math.max(y, min._y);
403
+ }
404
+ if (max._y !== null) {
405
+ y = Math.min(y, max._y);
406
+ }
407
+
408
+ return new Coordinate(x, y);
409
+ }
410
+ }, {
411
+ key: 'reposition',
412
+ value: function reposition(element) {
413
+ element.style['top'] = this._y + 'px';
414
+ element.style['left'] = this._x + 'px';
415
+ }
416
+ }, {
417
+ key: 'toString',
418
+ value: function toString() {
419
+ return '(' + this._x + ',' + this._y + ')';
420
+ }
421
+ }, {
422
+ key: 'x',
423
+ get: function get() {
424
+ return this._x;
425
+ },
426
+ set: function set() {
427
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
428
+
429
+ this._x = value;
430
+ return this;
431
+ }
432
+ }, {
433
+ key: 'y',
434
+ get: function get() {
435
+ return this._y;
436
+ },
437
+ set: function set() {
438
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
439
+
440
+ this._y = value;
441
+ return this;
442
+ }
443
+ }]);
444
+
445
+ return Coordinate;
446
+ }();
447
+
448
+ /* harmony default export */ __webpack_exports__["a"] = (Coordinate);
449
+
450
+ /***/ }),
451
+ /* 5 */
452
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
453
+
454
+ "use strict";
455
+ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
456
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_index__ = __webpack_require__(6);
457
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_css__ = __webpack_require__(0);
458
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_type__ = __webpack_require__(2);
459
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_eventEmitter__ = __webpack_require__(3);
460
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__components_autoplay__ = __webpack_require__(7);
461
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_breakpoint__ = __webpack_require__(9);
462
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__components_infinite__ = __webpack_require__(10);
463
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__components_loop__ = __webpack_require__(11);
464
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__components_navigation__ = __webpack_require__(13);
465
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__components_pagination__ = __webpack_require__(15);
466
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__components_swipe__ = __webpack_require__(18);
467
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__components_transitioner__ = __webpack_require__(19);
468
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__defaultOptions__ = __webpack_require__(22);
469
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__templates__ = __webpack_require__(23);
470
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__templates_item__ = __webpack_require__(24);
471
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
472
+
473
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
474
+
475
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
476
+
477
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
478
+
479
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
480
+
481
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+ var bulmaCarousel = function (_EventEmitter) {
502
+ _inherits(bulmaCarousel, _EventEmitter);
503
+
504
+ function bulmaCarousel(selector) {
505
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
506
+
507
+ _classCallCheck(this, bulmaCarousel);
508
+
509
+ var _this = _possibleConstructorReturn(this, (bulmaCarousel.__proto__ || Object.getPrototypeOf(bulmaCarousel)).call(this));
510
+
511
+ _this.element = Object(__WEBPACK_IMPORTED_MODULE_2__utils_type__["c" /* isString */])(selector) ? document.querySelector(selector) : selector;
512
+ // An invalid selector or non-DOM node has been provided.
513
+ if (!_this.element) {
514
+ throw new Error('An invalid selector or non-DOM node has been provided.');
515
+ }
516
+ _this._clickEvents = ['click', 'touch'];
517
+
518
+ // Use Element dataset values to override options
519
+ var elementConfig = _this.element.dataset ? Object.keys(_this.element.dataset).filter(function (key) {
520
+ return Object.keys(__WEBPACK_IMPORTED_MODULE_12__defaultOptions__["a" /* default */]).includes(key);
521
+ }).reduce(function (obj, key) {
522
+ return _extends({}, obj, _defineProperty({}, key, _this.element.dataset[key]));
523
+ }, {}) : {};
524
+ // Set default options - dataset attributes are master
525
+ _this.options = _extends({}, __WEBPACK_IMPORTED_MODULE_12__defaultOptions__["a" /* default */], options, elementConfig);
526
+
527
+ _this._id = Object(__WEBPACK_IMPORTED_MODULE_0__utils_index__["a" /* uuid */])('slider');
528
+
529
+ _this.onShow = _this.onShow.bind(_this);
530
+
531
+ // Initiate plugin
532
+ _this._init();
533
+ return _this;
534
+ }
535
+
536
+ /**
537
+ * Initiate all DOM element containing datePicker class
538
+ * @method
539
+ * @return {Array} Array of all datePicker instances
540
+ */
541
+
542
+
543
+ _createClass(bulmaCarousel, [{
544
+ key: '_init',
545
+
546
+
547
+ /****************************************************
548
+ * *
549
+ * PRIVATE FUNCTIONS *
550
+ * *
551
+ ****************************************************/
552
+ /**
553
+ * Initiate plugin instance
554
+ * @method _init
555
+ * @return {Slider} Current plugin instance
556
+ */
557
+ value: function _init() {
558
+ this._items = Array.from(this.element.children);
559
+
560
+ // Load plugins
561
+ this._breakpoint = new __WEBPACK_IMPORTED_MODULE_5__components_breakpoint__["a" /* default */](this);
562
+ this._autoplay = new __WEBPACK_IMPORTED_MODULE_4__components_autoplay__["a" /* default */](this);
563
+ this._navigation = new __WEBPACK_IMPORTED_MODULE_8__components_navigation__["a" /* default */](this);
564
+ this._pagination = new __WEBPACK_IMPORTED_MODULE_9__components_pagination__["a" /* default */](this);
565
+ this._infinite = new __WEBPACK_IMPORTED_MODULE_6__components_infinite__["a" /* default */](this);
566
+ this._loop = new __WEBPACK_IMPORTED_MODULE_7__components_loop__["a" /* default */](this);
567
+ this._swipe = new __WEBPACK_IMPORTED_MODULE_10__components_swipe__["a" /* default */](this);
568
+
569
+ this._build();
570
+
571
+ if (Object(__WEBPACK_IMPORTED_MODULE_2__utils_type__["a" /* isFunction */])(this.options.onReady)) {
572
+ this.options.onReady(this);
573
+ }
574
+
575
+ return this;
576
+ }
577
+
578
+ /**
579
+ * Build Slider HTML component and append it to the DOM
580
+ * @method _build
581
+ */
582
+
583
+ }, {
584
+ key: '_build',
585
+ value: function _build() {
586
+ var _this2 = this;
587
+
588
+ // Generate HTML Fragment of template
589
+ this.node = document.createRange().createContextualFragment(Object(__WEBPACK_IMPORTED_MODULE_13__templates__["a" /* default */])(this.id));
590
+ // Save pointers to template parts
591
+ this._ui = {
592
+ wrapper: this.node.firstChild,
593
+ container: this.node.querySelector('.slider-container')
594
+
595
+ // Add slider to DOM
596
+ };this.element.appendChild(this.node);
597
+ this._ui.wrapper.classList.add('is-loading');
598
+ this._ui.container.style.opacity = 0;
599
+
600
+ this._transitioner = new __WEBPACK_IMPORTED_MODULE_11__components_transitioner__["a" /* default */](this);
601
+
602
+ // Wrap all items by slide element
603
+ this._slides = this._items.map(function (item, index) {
604
+ return _this2._createSlide(item, index);
605
+ });
606
+
607
+ this.reset();
608
+
609
+ this._bindEvents();
610
+
611
+ this._ui.container.style.opacity = 1;
612
+ this._ui.wrapper.classList.remove('is-loading');
613
+ }
614
+
615
+ /**
616
+ * Bind all events
617
+ * @method _bindEvents
618
+ * @return {void}
619
+ */
620
+
621
+ }, {
622
+ key: '_bindEvents',
623
+ value: function _bindEvents() {
624
+ this.on('show', this.onShow);
625
+ }
626
+ }, {
627
+ key: '_unbindEvents',
628
+ value: function _unbindEvents() {
629
+ this.off('show', this.onShow);
630
+ }
631
+ }, {
632
+ key: '_createSlide',
633
+ value: function _createSlide(item, index) {
634
+ var slide = document.createRange().createContextualFragment(Object(__WEBPACK_IMPORTED_MODULE_14__templates_item__["a" /* default */])()).firstChild;
635
+ slide.dataset.sliderIndex = index;
636
+ slide.appendChild(item);
637
+ return slide;
638
+ }
639
+
640
+ /**
641
+ * Calculate slider dimensions
642
+ */
643
+
644
+ }, {
645
+ key: '_setDimensions',
646
+ value: function _setDimensions() {
647
+ var _this3 = this;
648
+
649
+ if (!this.options.vertical) {
650
+ if (this.options.centerMode) {
651
+ this._ui.wrapper.style.padding = '0px ' + this.options.centerPadding;
652
+ }
653
+ } else {
654
+ this._ui.wrapper.style.height = Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["c" /* outerHeight */])(this._slides[0]) * this.slidesToShow;
655
+ if (this.options.centerMode) {
656
+ this._ui.wrapper.style.padding = this.options.centerPadding + ' 0px';
657
+ }
658
+ }
659
+
660
+ this._wrapperWidth = Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["e" /* width */])(this._ui.wrapper);
661
+ this._wrapperHeight = Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["c" /* outerHeight */])(this._ui.wrapper);
662
+
663
+ if (!this.options.vertical) {
664
+ this._slideWidth = Math.ceil(this._wrapperWidth / this.slidesToShow);
665
+ this._containerWidth = Math.ceil(this._slideWidth * this._slides.length);
666
+ this._ui.container.style.width = this._containerWidth + 'px';
667
+ } else {
668
+ this._slideWidth = Math.ceil(this._wrapperWidth);
669
+ this._containerHeight = Math.ceil(Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["c" /* outerHeight */])(this._slides[0]) * this._slides.length);
670
+ this._ui.container.style.height = this._containerHeight + 'px';
671
+ }
672
+
673
+ this._slides.forEach(function (slide) {
674
+ slide.style.width = _this3._slideWidth + 'px';
675
+ });
676
+ }
677
+ }, {
678
+ key: '_setHeight',
679
+ value: function _setHeight() {
680
+ if (this.options.effect !== 'translate') {
681
+ this._ui.container.style.height = Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["c" /* outerHeight */])(this._slides[this.state.index]) + 'px';
682
+ }
683
+ }
684
+
685
+ // Update slides classes
686
+
687
+ }, {
688
+ key: '_setClasses',
689
+ value: function _setClasses() {
690
+ var _this4 = this;
691
+
692
+ this._slides.forEach(function (slide) {
693
+ Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["d" /* removeClasses */])(slide, 'is-active is-current is-slide-previous is-slide-next');
694
+ if (Math.abs((_this4.state.index - 1) % _this4.state.length) === parseInt(slide.dataset.sliderIndex, 10)) {
695
+ slide.classList.add('is-slide-previous');
696
+ }
697
+ if (Math.abs(_this4.state.index % _this4.state.length) === parseInt(slide.dataset.sliderIndex, 10)) {
698
+ slide.classList.add('is-current');
699
+ }
700
+ if (Math.abs((_this4.state.index + 1) % _this4.state.length) === parseInt(slide.dataset.sliderIndex, 10)) {
701
+ slide.classList.add('is-slide-next');
702
+ }
703
+ });
704
+ }
705
+
706
+ /****************************************************
707
+ * *
708
+ * GETTERS and SETTERS *
709
+ * *
710
+ ****************************************************/
711
+
712
+ /**
713
+ * Get id of current datePicker
714
+ */
715
+
716
+ }, {
717
+ key: 'onShow',
718
+
719
+
720
+ /****************************************************
721
+ * *
722
+ * EVENTS FUNCTIONS *
723
+ * *
724
+ ****************************************************/
725
+ value: function onShow(e) {
726
+ this._navigation.refresh();
727
+ this._pagination.refresh();
728
+ this._setClasses();
729
+ }
730
+
731
+ /****************************************************
732
+ * *
733
+ * PUBLIC FUNCTIONS *
734
+ * *
735
+ ****************************************************/
736
+
737
+ }, {
738
+ key: 'next',
739
+ value: function next() {
740
+ if (!this.options.loop && !this.options.infinite && this.state.index + this.slidesToScroll > this.state.length - this.slidesToShow && !this.options.centerMode) {
741
+ this.state.next = this.state.index;
742
+ } else {
743
+ this.state.next = this.state.index + this.slidesToScroll;
744
+ }
745
+ this.show();
746
+ }
747
+ }, {
748
+ key: 'previous',
749
+ value: function previous() {
750
+ if (!this.options.loop && !this.options.infinite && this.state.index === 0) {
751
+ this.state.next = this.state.index;
752
+ } else {
753
+ this.state.next = this.state.index - this.slidesToScroll;
754
+ }
755
+ this.show();
756
+ }
757
+ }, {
758
+ key: 'start',
759
+ value: function start() {
760
+ this._autoplay.start();
761
+ }
762
+ }, {
763
+ key: 'pause',
764
+ value: function pause() {
765
+ this._autoplay.pause();
766
+ }
767
+ }, {
768
+ key: 'stop',
769
+ value: function stop() {
770
+ this._autoplay.stop();
771
+ }
772
+ }, {
773
+ key: 'show',
774
+ value: function show(index) {
775
+ var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
776
+
777
+ // If all slides are already visible then return
778
+ if (!this.state.length || this.state.length <= this.slidesToShow) {
779
+ return;
780
+ }
781
+
782
+ if (typeof index === 'Number') {
783
+ this.state.next = index;
784
+ }
785
+
786
+ if (this.options.loop) {
787
+ this._loop.apply();
788
+ }
789
+ if (this.options.infinite) {
790
+ this._infinite.apply();
791
+ }
792
+
793
+ // If new slide is already the current one then return
794
+ if (this.state.index === this.state.next) {
795
+ return;
796
+ }
797
+
798
+ this.emit('before:show', this.state);
799
+ this._transitioner.apply(force, this._setHeight.bind(this));
800
+ this.emit('after:show', this.state);
801
+
802
+ this.emit('show', this);
803
+ }
804
+ }, {
805
+ key: 'reset',
806
+ value: function reset() {
807
+ var _this5 = this;
808
+
809
+ this.state = {
810
+ length: this._items.length,
811
+ index: Math.abs(this.options.initialSlide),
812
+ next: Math.abs(this.options.initialSlide),
813
+ prev: undefined
814
+ };
815
+
816
+ // Fix options
817
+ if (this.options.loop && this.options.infinite) {
818
+ this.options.loop = false;
819
+ }
820
+ if (this.options.slidesToScroll > this.options.slidesToShow) {
821
+ this.options.slidesToScroll = this.slidesToShow;
822
+ }
823
+ this._breakpoint.init();
824
+
825
+ if (this.state.index >= this.state.length && this.state.index !== 0) {
826
+ this.state.index = this.state.index - this.slidesToScroll;
827
+ }
828
+ if (this.state.length <= this.slidesToShow) {
829
+ this.state.index = 0;
830
+ }
831
+
832
+ this._ui.wrapper.appendChild(this._navigation.init().render());
833
+ this._ui.wrapper.appendChild(this._pagination.init().render());
834
+
835
+ if (this.options.navigationSwipe) {
836
+ this._swipe.bindEvents();
837
+ } else {
838
+ this._swipe._bindEvents();
839
+ }
840
+
841
+ this._breakpoint.apply();
842
+ // Move all created slides into slider
843
+ this._slides.forEach(function (slide) {
844
+ return _this5._ui.container.appendChild(slide);
845
+ });
846
+ this._transitioner.init().apply(true, this._setHeight.bind(this));
847
+
848
+ if (this.options.autoplay) {
849
+ this._autoplay.init().start();
850
+ }
851
+ }
852
+
853
+ /**
854
+ * Destroy Slider
855
+ * @method destroy
856
+ */
857
+
858
+ }, {
859
+ key: 'destroy',
860
+ value: function destroy() {
861
+ var _this6 = this;
862
+
863
+ this._unbindEvents();
864
+ this._items.forEach(function (item) {
865
+ _this6.element.appendChild(item);
866
+ });
867
+ this.node.remove();
868
+ }
869
+ }, {
870
+ key: 'id',
871
+ get: function get() {
872
+ return this._id;
873
+ }
874
+ }, {
875
+ key: 'index',
876
+ set: function set(index) {
877
+ this._index = index;
878
+ },
879
+ get: function get() {
880
+ return this._index;
881
+ }
882
+ }, {
883
+ key: 'length',
884
+ set: function set(length) {
885
+ this._length = length;
886
+ },
887
+ get: function get() {
888
+ return this._length;
889
+ }
890
+ }, {
891
+ key: 'slides',
892
+ get: function get() {
893
+ return this._slides;
894
+ },
895
+ set: function set(slides) {
896
+ this._slides = slides;
897
+ }
898
+ }, {
899
+ key: 'slidesToScroll',
900
+ get: function get() {
901
+ return this.options.effect === 'translate' ? this._breakpoint.getSlidesToScroll() : 1;
902
+ }
903
+ }, {
904
+ key: 'slidesToShow',
905
+ get: function get() {
906
+ return this.options.effect === 'translate' ? this._breakpoint.getSlidesToShow() : 1;
907
+ }
908
+ }, {
909
+ key: 'direction',
910
+ get: function get() {
911
+ return this.element.dir.toLowerCase() === 'rtl' || this.element.style.direction === 'rtl' ? 'rtl' : 'ltr';
912
+ }
913
+ }, {
914
+ key: 'wrapper',
915
+ get: function get() {
916
+ return this._ui.wrapper;
917
+ }
918
+ }, {
919
+ key: 'wrapperWidth',
920
+ get: function get() {
921
+ return this._wrapperWidth || 0;
922
+ }
923
+ }, {
924
+ key: 'container',
925
+ get: function get() {
926
+ return this._ui.container;
927
+ }
928
+ }, {
929
+ key: 'containerWidth',
930
+ get: function get() {
931
+ return this._containerWidth || 0;
932
+ }
933
+ }, {
934
+ key: 'slideWidth',
935
+ get: function get() {
936
+ return this._slideWidth || 0;
937
+ }
938
+ }, {
939
+ key: 'transitioner',
940
+ get: function get() {
941
+ return this._transitioner;
942
+ }
943
+ }], [{
944
+ key: 'attach',
945
+ value: function attach() {
946
+ var _this7 = this;
947
+
948
+ var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.slider';
949
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
950
+
951
+ var instances = new Array();
952
+
953
+ var elements = Object(__WEBPACK_IMPORTED_MODULE_2__utils_type__["c" /* isString */])(selector) ? document.querySelectorAll(selector) : Array.isArray(selector) ? selector : [selector];
954
+ [].forEach.call(elements, function (element) {
955
+ if (typeof element[_this7.constructor.name] === 'undefined') {
956
+ var instance = new bulmaCarousel(element, options);
957
+ element[_this7.constructor.name] = instance;
958
+ instances.push(instance);
959
+ } else {
960
+ instances.push(element[_this7.constructor.name]);
961
+ }
962
+ });
963
+
964
+ return instances;
965
+ }
966
+ }]);
967
+
968
+ return bulmaCarousel;
969
+ }(__WEBPACK_IMPORTED_MODULE_3__utils_eventEmitter__["a" /* default */]);
970
+
971
+ /* harmony default export */ __webpack_exports__["default"] = (bulmaCarousel);
972
+
973
+ /***/ }),
974
+ /* 6 */
975
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
976
+
977
+ "use strict";
978
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return uuid; });
979
+ /* unused harmony export isRtl */
980
+ /* unused harmony export defer */
981
+ /* unused harmony export getNodeIndex */
982
+ /* unused harmony export camelize */
983
+ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
984
+
985
+ var uuid = function uuid() {
986
+ var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
987
+ return prefix + ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {
988
+ return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16);
989
+ });
990
+ };
991
+ var isRtl = function isRtl() {
992
+ return document.documentElement.getAttribute('dir') === 'rtl';
993
+ };
994
+
995
+ var defer = function defer() {
996
+ this.promise = new Promise(function (resolve, reject) {
997
+ this.resolve = resolve;
998
+ this.reject = reject;
999
+ }.bind(this));
1000
+
1001
+ this.then = this.promise.then.bind(this.promise);
1002
+ this.catch = this.promise.catch.bind(this.promise);
1003
+ };
1004
+
1005
+ var getNodeIndex = function getNodeIndex(node) {
1006
+ return [].concat(_toConsumableArray(node.parentNode.children)).indexOf(node);
1007
+ };
1008
+ var camelize = function camelize(str) {
1009
+ return str.replace(/-(\w)/g, toUpper);
1010
+ };
1011
+
1012
+ /***/ }),
1013
+ /* 7 */
1014
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1015
+
1016
+ "use strict";
1017
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_eventEmitter__ = __webpack_require__(3);
1018
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_device__ = __webpack_require__(8);
1019
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1020
+
1021
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1022
+
1023
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
1024
+
1025
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
1026
+
1027
+
1028
+
1029
+
1030
+ var onVisibilityChange = Symbol('onVisibilityChange');
1031
+ var onMouseEnter = Symbol('onMouseEnter');
1032
+ var onMouseLeave = Symbol('onMouseLeave');
1033
+
1034
+ var defaultOptions = {
1035
+ autoplay: false,
1036
+ autoplaySpeed: 3000
1037
+ };
1038
+
1039
+ var Autoplay = function (_EventEmitter) {
1040
+ _inherits(Autoplay, _EventEmitter);
1041
+
1042
+ function Autoplay(slider) {
1043
+ _classCallCheck(this, Autoplay);
1044
+
1045
+ var _this = _possibleConstructorReturn(this, (Autoplay.__proto__ || Object.getPrototypeOf(Autoplay)).call(this));
1046
+
1047
+ _this.slider = slider;
1048
+
1049
+ _this.onVisibilityChange = _this.onVisibilityChange.bind(_this);
1050
+ _this.onMouseEnter = _this.onMouseEnter.bind(_this);
1051
+ _this.onMouseLeave = _this.onMouseLeave.bind(_this);
1052
+ return _this;
1053
+ }
1054
+
1055
+ _createClass(Autoplay, [{
1056
+ key: 'init',
1057
+ value: function init() {
1058
+ this._bindEvents();
1059
+ return this;
1060
+ }
1061
+ }, {
1062
+ key: '_bindEvents',
1063
+ value: function _bindEvents() {
1064
+ document.addEventListener('visibilitychange', this.onVisibilityChange);
1065
+ if (this.slider.options.pauseOnHover) {
1066
+ this.slider.container.addEventListener(__WEBPACK_IMPORTED_MODULE_1__utils_device__["a" /* pointerEnter */], this.onMouseEnter);
1067
+ this.slider.container.addEventListener(__WEBPACK_IMPORTED_MODULE_1__utils_device__["b" /* pointerLeave */], this.onMouseLeave);
1068
+ }
1069
+ }
1070
+ }, {
1071
+ key: '_unbindEvents',
1072
+ value: function _unbindEvents() {
1073
+ document.removeEventListener('visibilitychange', this.onVisibilityChange);
1074
+ this.slider.container.removeEventListener(__WEBPACK_IMPORTED_MODULE_1__utils_device__["a" /* pointerEnter */], this.onMouseEnter);
1075
+ this.slider.container.removeEventListener(__WEBPACK_IMPORTED_MODULE_1__utils_device__["b" /* pointerLeave */], this.onMouseLeave);
1076
+ }
1077
+ }, {
1078
+ key: 'start',
1079
+ value: function start() {
1080
+ var _this2 = this;
1081
+
1082
+ this.stop();
1083
+ if (this.slider.options.autoplay) {
1084
+ this.emit('start', this);
1085
+ this._interval = setInterval(function () {
1086
+ if (!(_this2._hovering && _this2.slider.options.pauseOnHover)) {
1087
+ if (!_this2.slider.options.centerMode && _this2.slider.state.next >= _this2.slider.state.length - _this2.slider.slidesToShow && !_this2.slider.options.loop && !_this2.slider.options.infinite) {
1088
+ _this2.stop();
1089
+ } else {
1090
+ _this2.slider.next();
1091
+ }
1092
+ }
1093
+ }, this.slider.options.autoplaySpeed);
1094
+ }
1095
+ }
1096
+ }, {
1097
+ key: 'stop',
1098
+ value: function stop() {
1099
+ this._interval = clearInterval(this._interval);
1100
+ this.emit('stop', this);
1101
+ }
1102
+ }, {
1103
+ key: 'pause',
1104
+ value: function pause() {
1105
+ var _this3 = this;
1106
+
1107
+ var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
1108
+
1109
+ if (this.paused) {
1110
+ return;
1111
+ }
1112
+ if (this.timer) {
1113
+ this.stop();
1114
+ }
1115
+ this.paused = true;
1116
+ if (speed === 0) {
1117
+ this.paused = false;
1118
+ this.start();
1119
+ } else {
1120
+ this.slider.on('transition:end', function () {
1121
+ if (!_this3) {
1122
+ return;
1123
+ }
1124
+ _this3.paused = false;
1125
+ if (!_this3.run) {
1126
+ _this3.stop();
1127
+ } else {
1128
+ _this3.start();
1129
+ }
1130
+ });
1131
+ }
1132
+ }
1133
+ }, {
1134
+ key: 'onVisibilityChange',
1135
+ value: function onVisibilityChange(e) {
1136
+ if (document.hidden) {
1137
+ this.stop();
1138
+ } else {
1139
+ this.start();
1140
+ }
1141
+ }
1142
+ }, {
1143
+ key: 'onMouseEnter',
1144
+ value: function onMouseEnter(e) {
1145
+ this._hovering = true;
1146
+ if (this.slider.options.pauseOnHover) {
1147
+ this.pause();
1148
+ }
1149
+ }
1150
+ }, {
1151
+ key: 'onMouseLeave',
1152
+ value: function onMouseLeave(e) {
1153
+ this._hovering = false;
1154
+ if (this.slider.options.pauseOnHover) {
1155
+ this.pause();
1156
+ }
1157
+ }
1158
+ }]);
1159
+
1160
+ return Autoplay;
1161
+ }(__WEBPACK_IMPORTED_MODULE_0__utils_eventEmitter__["a" /* default */]);
1162
+
1163
+ /* harmony default export */ __webpack_exports__["a"] = (Autoplay);
1164
+
1165
+ /***/ }),
1166
+ /* 8 */
1167
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1168
+
1169
+ "use strict";
1170
+ /* unused harmony export isIE */
1171
+ /* unused harmony export isIETouch */
1172
+ /* unused harmony export isAndroid */
1173
+ /* unused harmony export isiPad */
1174
+ /* unused harmony export isiPod */
1175
+ /* unused harmony export isiPhone */
1176
+ /* unused harmony export isSafari */
1177
+ /* unused harmony export isUiWebView */
1178
+ /* unused harmony export supportsTouchEvents */
1179
+ /* unused harmony export supportsPointerEvents */
1180
+ /* unused harmony export supportsTouch */
1181
+ /* unused harmony export pointerDown */
1182
+ /* unused harmony export pointerMove */
1183
+ /* unused harmony export pointerUp */
1184
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return pointerEnter; });
1185
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return pointerLeave; });
1186
+ var isIE = window.navigator.pointerEnabled || window.navigator.msPointerEnabled;
1187
+ var isIETouch = window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1 || window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1;
1188
+ var isAndroid = navigator.userAgent.match(/(Android);?[\s\/]+([\d.]+)?/);
1189
+ var isiPad = navigator.userAgent.match(/(iPad).*OS\s([\d_]+)/);
1190
+ var isiPod = navigator.userAgent.match(/(iPod)(.*OS\s([\d_]+))?/);
1191
+ var isiPhone = !navigator.userAgent.match(/(iPad).*OS\s([\d_]+)/) && navigator.userAgent.match(/(iPhone\sOS)\s([\d_]+)/);
1192
+ var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') >= 0 && navigator.userAgent.toLowerCase().indexOf('chrome') < 0 && navigator.userAgent.toLowerCase().indexOf('android') < 0;
1193
+ var isUiWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent);
1194
+
1195
+ var supportsTouchEvents = !!('ontouchstart' in window);
1196
+ var supportsPointerEvents = !!('PointerEvent' in window);
1197
+ var supportsTouch = supportsTouchEvents || window.DocumentTouch && document instanceof DocumentTouch || navigator.maxTouchPoints; // IE >=11
1198
+ var pointerDown = !supportsTouch ? 'mousedown' : 'mousedown ' + (supportsTouchEvents ? 'touchstart' : 'pointerdown');
1199
+ var pointerMove = !supportsTouch ? 'mousemove' : 'mousemove ' + (supportsTouchEvents ? 'touchmove' : 'pointermove');
1200
+ var pointerUp = !supportsTouch ? 'mouseup' : 'mouseup ' + (supportsTouchEvents ? 'touchend' : 'pointerup');
1201
+ var pointerEnter = supportsTouch && supportsPointerEvents ? 'pointerenter' : 'mouseenter';
1202
+ var pointerLeave = supportsTouch && supportsPointerEvents ? 'pointerleave' : 'mouseleave';
1203
+
1204
+ /***/ }),
1205
+ /* 9 */
1206
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1207
+
1208
+ "use strict";
1209
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1210
+
1211
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1212
+
1213
+ var onResize = Symbol('onResize');
1214
+
1215
+ var Breakpoints = function () {
1216
+ function Breakpoints(slider) {
1217
+ _classCallCheck(this, Breakpoints);
1218
+
1219
+ this.slider = slider;
1220
+ this.options = slider.options;
1221
+
1222
+ this[onResize] = this[onResize].bind(this);
1223
+
1224
+ this._bindEvents();
1225
+ }
1226
+
1227
+ _createClass(Breakpoints, [{
1228
+ key: 'init',
1229
+ value: function init() {
1230
+ this._defaultBreakpoint = {
1231
+ slidesToShow: this.options.slidesToShow,
1232
+ slidesToScroll: this.options.slidesToScroll
1233
+ };
1234
+ this.options.breakpoints.sort(function (a, b) {
1235
+ return parseInt(a.changePoint, 10) > parseInt(b.changePoint, 10);
1236
+ });
1237
+ this._currentBreakpoint = this._getActiveBreakpoint();
1238
+
1239
+ return this;
1240
+ }
1241
+ }, {
1242
+ key: 'destroy',
1243
+ value: function destroy() {
1244
+ this._unbindEvents();
1245
+ }
1246
+ }, {
1247
+ key: '_bindEvents',
1248
+ value: function _bindEvents() {
1249
+ window.addEventListener('resize', this[onResize]);
1250
+ window.addEventListener('orientationchange', this[onResize]);
1251
+ }
1252
+ }, {
1253
+ key: '_unbindEvents',
1254
+ value: function _unbindEvents() {
1255
+ window.removeEventListener('resize', this[onResize]);
1256
+ window.removeEventListener('orientationchange', this[onResize]);
1257
+ }
1258
+ }, {
1259
+ key: '_getActiveBreakpoint',
1260
+ value: function _getActiveBreakpoint() {
1261
+ //Get breakpoint for window width
1262
+ var _iteratorNormalCompletion = true;
1263
+ var _didIteratorError = false;
1264
+ var _iteratorError = undefined;
1265
+
1266
+ try {
1267
+ for (var _iterator = this.options.breakpoints[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
1268
+ var point = _step.value;
1269
+
1270
+ if (point.changePoint >= window.innerWidth) {
1271
+ return point;
1272
+ }
1273
+ }
1274
+ } catch (err) {
1275
+ _didIteratorError = true;
1276
+ _iteratorError = err;
1277
+ } finally {
1278
+ try {
1279
+ if (!_iteratorNormalCompletion && _iterator.return) {
1280
+ _iterator.return();
1281
+ }
1282
+ } finally {
1283
+ if (_didIteratorError) {
1284
+ throw _iteratorError;
1285
+ }
1286
+ }
1287
+ }
1288
+
1289
+ return this._defaultBreakpoint;
1290
+ }
1291
+ }, {
1292
+ key: 'getSlidesToShow',
1293
+ value: function getSlidesToShow() {
1294
+ return this._currentBreakpoint ? this._currentBreakpoint.slidesToShow : this._defaultBreakpoint.slidesToShow;
1295
+ }
1296
+ }, {
1297
+ key: 'getSlidesToScroll',
1298
+ value: function getSlidesToScroll() {
1299
+ return this._currentBreakpoint ? this._currentBreakpoint.slidesToScroll : this._defaultBreakpoint.slidesToScroll;
1300
+ }
1301
+ }, {
1302
+ key: 'apply',
1303
+ value: function apply() {
1304
+ if (this.slider.state.index >= this.slider.state.length && this.slider.state.index !== 0) {
1305
+ this.slider.state.index = this.slider.state.index - this._currentBreakpoint.slidesToScroll;
1306
+ }
1307
+ if (this.slider.state.length <= this._currentBreakpoint.slidesToShow) {
1308
+ this.slider.state.index = 0;
1309
+ }
1310
+
1311
+ if (this.options.loop) {
1312
+ this.slider._loop.init().apply();
1313
+ }
1314
+
1315
+ if (this.options.infinite) {
1316
+ this.slider._infinite.init().apply();
1317
+ }
1318
+
1319
+ this.slider._setDimensions();
1320
+ this.slider._transitioner.init().apply(true, this.slider._setHeight.bind(this.slider));
1321
+ this.slider._setClasses();
1322
+
1323
+ this.slider._navigation.refresh();
1324
+ this.slider._pagination.refresh();
1325
+ }
1326
+ }, {
1327
+ key: onResize,
1328
+ value: function value(e) {
1329
+ var newBreakPoint = this._getActiveBreakpoint();
1330
+ if (newBreakPoint.slidesToShow !== this._currentBreakpoint.slidesToShow) {
1331
+ this._currentBreakpoint = newBreakPoint;
1332
+ this.apply();
1333
+ }
1334
+ }
1335
+ }]);
1336
+
1337
+ return Breakpoints;
1338
+ }();
1339
+
1340
+ /* harmony default export */ __webpack_exports__["a"] = (Breakpoints);
1341
+
1342
+ /***/ }),
1343
+ /* 10 */
1344
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1345
+
1346
+ "use strict";
1347
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1348
+
1349
+ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
1350
+
1351
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1352
+
1353
+ var Infinite = function () {
1354
+ function Infinite(slider) {
1355
+ _classCallCheck(this, Infinite);
1356
+
1357
+ this.slider = slider;
1358
+ }
1359
+
1360
+ _createClass(Infinite, [{
1361
+ key: 'init',
1362
+ value: function init() {
1363
+ if (this.slider.options.infinite && this.slider.options.effect === 'translate') {
1364
+ if (this.slider.options.centerMode) {
1365
+ this._infiniteCount = Math.ceil(this.slider.slidesToShow + this.slider.slidesToShow / 2);
1366
+ } else {
1367
+ this._infiniteCount = this.slider.slidesToShow;
1368
+ }
1369
+
1370
+ var frontClones = [];
1371
+ var slideIndex = 0;
1372
+ for (var i = this.slider.state.length; i > this.slider.state.length - 1 - this._infiniteCount; i -= 1) {
1373
+ slideIndex = i - 1;
1374
+ frontClones.unshift(this._cloneSlide(this.slider.slides[slideIndex], slideIndex - this.slider.state.length));
1375
+ }
1376
+
1377
+ var backClones = [];
1378
+ for (var _i = 0; _i < this._infiniteCount + this.slider.state.length; _i += 1) {
1379
+ backClones.push(this._cloneSlide(this.slider.slides[_i % this.slider.state.length], _i + this.slider.state.length));
1380
+ }
1381
+
1382
+ this.slider.slides = [].concat(frontClones, _toConsumableArray(this.slider.slides), backClones);
1383
+ }
1384
+ return this;
1385
+ }
1386
+ }, {
1387
+ key: 'apply',
1388
+ value: function apply() {}
1389
+ }, {
1390
+ key: 'onTransitionEnd',
1391
+ value: function onTransitionEnd(e) {
1392
+ if (this.slider.options.infinite) {
1393
+ if (this.slider.state.next >= this.slider.state.length) {
1394
+ this.slider.state.index = this.slider.state.next = this.slider.state.next - this.slider.state.length;
1395
+ this.slider.transitioner.apply(true);
1396
+ } else if (this.slider.state.next < 0) {
1397
+ this.slider.state.index = this.slider.state.next = this.slider.state.length + this.slider.state.next;
1398
+ this.slider.transitioner.apply(true);
1399
+ }
1400
+ }
1401
+ }
1402
+ }, {
1403
+ key: '_cloneSlide',
1404
+ value: function _cloneSlide(slide, index) {
1405
+ var newSlide = slide.cloneNode(true);
1406
+ newSlide.dataset.sliderIndex = index;
1407
+ newSlide.dataset.cloned = true;
1408
+ var ids = newSlide.querySelectorAll('[id]') || [];
1409
+ ids.forEach(function (id) {
1410
+ id.setAttribute('id', '');
1411
+ });
1412
+ return newSlide;
1413
+ }
1414
+ }]);
1415
+
1416
+ return Infinite;
1417
+ }();
1418
+
1419
+ /* harmony default export */ __webpack_exports__["a"] = (Infinite);
1420
+
1421
+ /***/ }),
1422
+ /* 11 */
1423
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1424
+
1425
+ "use strict";
1426
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_dom__ = __webpack_require__(12);
1427
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1428
+
1429
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1430
+
1431
+
1432
+
1433
+ var Loop = function () {
1434
+ function Loop(slider) {
1435
+ _classCallCheck(this, Loop);
1436
+
1437
+ this.slider = slider;
1438
+ }
1439
+
1440
+ _createClass(Loop, [{
1441
+ key: "init",
1442
+ value: function init() {
1443
+ return this;
1444
+ }
1445
+ }, {
1446
+ key: "apply",
1447
+ value: function apply() {
1448
+ if (this.slider.options.loop) {
1449
+ if (this.slider.state.next > 0) {
1450
+ if (this.slider.state.next < this.slider.state.length) {
1451
+ if (this.slider.state.next > this.slider.state.length - this.slider.slidesToShow && Object(__WEBPACK_IMPORTED_MODULE_0__utils_dom__["a" /* isInViewport */])(this.slider._slides[this.slider.state.length - 1], this.slider.wrapper)) {
1452
+ this.slider.state.next = 0;
1453
+ } else {
1454
+ this.slider.state.next = Math.min(Math.max(this.slider.state.next, 0), this.slider.state.length - this.slider.slidesToShow);
1455
+ }
1456
+ } else {
1457
+ this.slider.state.next = 0;
1458
+ }
1459
+ } else {
1460
+ if (this.slider.state.next <= 0 - this.slider.slidesToScroll) {
1461
+ this.slider.state.next = this.slider.state.length - this.slider.slidesToShow;
1462
+ } else {
1463
+ this.slider.state.next = 0;
1464
+ }
1465
+ }
1466
+ }
1467
+ }
1468
+ }]);
1469
+
1470
+ return Loop;
1471
+ }();
1472
+
1473
+ /* harmony default export */ __webpack_exports__["a"] = (Loop);
1474
+
1475
+ /***/ }),
1476
+ /* 12 */
1477
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1478
+
1479
+ "use strict";
1480
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isInViewport; });
1481
+ var isInViewport = function isInViewport(element, html) {
1482
+ var rect = element.getBoundingClientRect();
1483
+ html = html || document.documentElement;
1484
+ return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || html.clientHeight) && rect.right <= (window.innerWidth || html.clientWidth);
1485
+ };
1486
+
1487
+ /***/ }),
1488
+ /* 13 */
1489
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1490
+
1491
+ "use strict";
1492
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__templates_navigation__ = __webpack_require__(14);
1493
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_detect_supportsPassive__ = __webpack_require__(1);
1494
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1495
+
1496
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1497
+
1498
+
1499
+
1500
+
1501
+ var Navigation = function () {
1502
+ function Navigation(slider) {
1503
+ _classCallCheck(this, Navigation);
1504
+
1505
+ this.slider = slider;
1506
+
1507
+ this._clickEvents = ['click', 'touch'];
1508
+ this._supportsPassive = Object(__WEBPACK_IMPORTED_MODULE_1__utils_detect_supportsPassive__["a" /* default */])();
1509
+
1510
+ this.onPreviousClick = this.onPreviousClick.bind(this);
1511
+ this.onNextClick = this.onNextClick.bind(this);
1512
+ this.onKeyUp = this.onKeyUp.bind(this);
1513
+ }
1514
+
1515
+ _createClass(Navigation, [{
1516
+ key: 'init',
1517
+ value: function init() {
1518
+ this.node = document.createRange().createContextualFragment(Object(__WEBPACK_IMPORTED_MODULE_0__templates_navigation__["a" /* default */])(this.slider.options.icons));
1519
+ this._ui = {
1520
+ previous: this.node.querySelector('.slider-navigation-previous'),
1521
+ next: this.node.querySelector('.slider-navigation-next')
1522
+ };
1523
+
1524
+ this._unbindEvents();
1525
+ this._bindEvents();
1526
+
1527
+ this.refresh();
1528
+
1529
+ return this;
1530
+ }
1531
+ }, {
1532
+ key: 'destroy',
1533
+ value: function destroy() {
1534
+ this._unbindEvents();
1535
+ }
1536
+ }, {
1537
+ key: '_bindEvents',
1538
+ value: function _bindEvents() {
1539
+ var _this = this;
1540
+
1541
+ this.slider.wrapper.addEventListener('keyup', this.onKeyUp);
1542
+ this._clickEvents.forEach(function (clickEvent) {
1543
+ _this._ui.previous.addEventListener(clickEvent, _this.onPreviousClick);
1544
+ _this._ui.next.addEventListener(clickEvent, _this.onNextClick);
1545
+ });
1546
+ }
1547
+ }, {
1548
+ key: '_unbindEvents',
1549
+ value: function _unbindEvents() {
1550
+ var _this2 = this;
1551
+
1552
+ this.slider.wrapper.removeEventListener('keyup', this.onKeyUp);
1553
+ this._clickEvents.forEach(function (clickEvent) {
1554
+ _this2._ui.previous.removeEventListener(clickEvent, _this2.onPreviousClick);
1555
+ _this2._ui.next.removeEventListener(clickEvent, _this2.onNextClick);
1556
+ });
1557
+ }
1558
+ }, {
1559
+ key: 'onNextClick',
1560
+ value: function onNextClick(e) {
1561
+ if (!this._supportsPassive) {
1562
+ e.preventDefault();
1563
+ }
1564
+
1565
+ if (this.slider.options.navigation) {
1566
+ this.slider.next();
1567
+ }
1568
+ }
1569
+ }, {
1570
+ key: 'onPreviousClick',
1571
+ value: function onPreviousClick(e) {
1572
+ if (!this._supportsPassive) {
1573
+ e.preventDefault();
1574
+ }
1575
+
1576
+ if (this.slider.options.navigation) {
1577
+ this.slider.previous();
1578
+ }
1579
+ }
1580
+ }, {
1581
+ key: 'onKeyUp',
1582
+ value: function onKeyUp(e) {
1583
+ if (this.slider.options.keyNavigation) {
1584
+ if (e.key === 'ArrowRight' || e.key === 'Right') {
1585
+ this.slider.next();
1586
+ } else if (e.key === 'ArrowLeft' || e.key === 'Left') {
1587
+ this.slider.previous();
1588
+ }
1589
+ }
1590
+ }
1591
+ }, {
1592
+ key: 'refresh',
1593
+ value: function refresh() {
1594
+ // let centerOffset = Math.floor(this.options.slidesToShow / 2);
1595
+ if (!this.slider.options.loop && !this.slider.options.infinite) {
1596
+ if (this.slider.options.navigation && this.slider.state.length > this.slider.slidesToShow) {
1597
+ this._ui.previous.classList.remove('is-hidden');
1598
+ this._ui.next.classList.remove('is-hidden');
1599
+ if (this.slider.state.next === 0) {
1600
+ this._ui.previous.classList.add('is-hidden');
1601
+ this._ui.next.classList.remove('is-hidden');
1602
+ } else if (this.slider.state.next >= this.slider.state.length - this.slider.slidesToShow && !this.slider.options.centerMode) {
1603
+ this._ui.previous.classList.remove('is-hidden');
1604
+ this._ui.next.classList.add('is-hidden');
1605
+ } else if (this.slider.state.next >= this.slider.state.length - 1 && this.slider.options.centerMode) {
1606
+ this._ui.previous.classList.remove('is-hidden');
1607
+ this._ui.next.classList.add('is-hidden');
1608
+ }
1609
+ } else {
1610
+ this._ui.previous.classList.add('is-hidden');
1611
+ this._ui.next.classList.add('is-hidden');
1612
+ }
1613
+ }
1614
+ }
1615
+ }, {
1616
+ key: 'render',
1617
+ value: function render() {
1618
+ return this.node;
1619
+ }
1620
+ }]);
1621
+
1622
+ return Navigation;
1623
+ }();
1624
+
1625
+ /* harmony default export */ __webpack_exports__["a"] = (Navigation);
1626
+
1627
+ /***/ }),
1628
+ /* 14 */
1629
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1630
+
1631
+ "use strict";
1632
+ /* harmony default export */ __webpack_exports__["a"] = (function (icons) {
1633
+ return "<div class=\"slider-navigation-previous\">" + icons.previous + "</div>\n<div class=\"slider-navigation-next\">" + icons.next + "</div>";
1634
+ });
1635
+
1636
+ /***/ }),
1637
+ /* 15 */
1638
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1639
+
1640
+ "use strict";
1641
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__templates_pagination__ = __webpack_require__(16);
1642
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__templates_pagination_page__ = __webpack_require__(17);
1643
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_detect_supportsPassive__ = __webpack_require__(1);
1644
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1645
+
1646
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+ var Pagination = function () {
1653
+ function Pagination(slider) {
1654
+ _classCallCheck(this, Pagination);
1655
+
1656
+ this.slider = slider;
1657
+
1658
+ this._clickEvents = ['click', 'touch'];
1659
+ this._supportsPassive = Object(__WEBPACK_IMPORTED_MODULE_2__utils_detect_supportsPassive__["a" /* default */])();
1660
+
1661
+ this.onPageClick = this.onPageClick.bind(this);
1662
+ this.onResize = this.onResize.bind(this);
1663
+ }
1664
+
1665
+ _createClass(Pagination, [{
1666
+ key: 'init',
1667
+ value: function init() {
1668
+ this._pages = [];
1669
+ this.node = document.createRange().createContextualFragment(Object(__WEBPACK_IMPORTED_MODULE_0__templates_pagination__["a" /* default */])());
1670
+ this._ui = {
1671
+ container: this.node.firstChild
1672
+ };
1673
+
1674
+ this._count = Math.ceil((this.slider.state.length - this.slider.slidesToShow) / this.slider.slidesToScroll);
1675
+
1676
+ this._draw();
1677
+ this.refresh();
1678
+
1679
+ return this;
1680
+ }
1681
+ }, {
1682
+ key: 'destroy',
1683
+ value: function destroy() {
1684
+ this._unbindEvents();
1685
+ }
1686
+ }, {
1687
+ key: '_bindEvents',
1688
+ value: function _bindEvents() {
1689
+ var _this = this;
1690
+
1691
+ window.addEventListener('resize', this.onResize);
1692
+ window.addEventListener('orientationchange', this.onResize);
1693
+
1694
+ this._clickEvents.forEach(function (clickEvent) {
1695
+ _this._pages.forEach(function (page) {
1696
+ return page.addEventListener(clickEvent, _this.onPageClick);
1697
+ });
1698
+ });
1699
+ }
1700
+ }, {
1701
+ key: '_unbindEvents',
1702
+ value: function _unbindEvents() {
1703
+ var _this2 = this;
1704
+
1705
+ window.removeEventListener('resize', this.onResize);
1706
+ window.removeEventListener('orientationchange', this.onResize);
1707
+
1708
+ this._clickEvents.forEach(function (clickEvent) {
1709
+ _this2._pages.forEach(function (page) {
1710
+ return page.removeEventListener(clickEvent, _this2.onPageClick);
1711
+ });
1712
+ });
1713
+ }
1714
+ }, {
1715
+ key: '_draw',
1716
+ value: function _draw() {
1717
+ this._ui.container.innerHTML = '';
1718
+ if (this.slider.options.pagination && this.slider.state.length > this.slider.slidesToShow) {
1719
+ for (var i = 0; i <= this._count; i++) {
1720
+ var newPageNode = document.createRange().createContextualFragment(Object(__WEBPACK_IMPORTED_MODULE_1__templates_pagination_page__["a" /* default */])()).firstChild;
1721
+ newPageNode.dataset.index = i * this.slider.slidesToScroll;
1722
+ this._pages.push(newPageNode);
1723
+ this._ui.container.appendChild(newPageNode);
1724
+ }
1725
+ this._bindEvents();
1726
+ }
1727
+ }
1728
+ }, {
1729
+ key: 'onPageClick',
1730
+ value: function onPageClick(e) {
1731
+ if (!this._supportsPassive) {
1732
+ e.preventDefault();
1733
+ }
1734
+
1735
+ this.slider.state.next = e.currentTarget.dataset.index;
1736
+ this.slider.show();
1737
+ }
1738
+ }, {
1739
+ key: 'onResize',
1740
+ value: function onResize() {
1741
+ this._draw();
1742
+ }
1743
+ }, {
1744
+ key: 'refresh',
1745
+ value: function refresh() {
1746
+ var _this3 = this;
1747
+
1748
+ var newCount = void 0;
1749
+
1750
+ if (this.slider.options.infinite) {
1751
+ newCount = Math.ceil(this.slider.state.length - 1 / this.slider.slidesToScroll);
1752
+ } else {
1753
+ newCount = Math.ceil((this.slider.state.length - this.slider.slidesToShow) / this.slider.slidesToScroll);
1754
+ }
1755
+ if (newCount !== this._count) {
1756
+ this._count = newCount;
1757
+ this._draw();
1758
+ }
1759
+
1760
+ this._pages.forEach(function (page) {
1761
+ page.classList.remove('is-active');
1762
+ if (parseInt(page.dataset.index, 10) === _this3.slider.state.next % _this3.slider.state.length) {
1763
+ page.classList.add('is-active');
1764
+ }
1765
+ });
1766
+ }
1767
+ }, {
1768
+ key: 'render',
1769
+ value: function render() {
1770
+ return this.node;
1771
+ }
1772
+ }]);
1773
+
1774
+ return Pagination;
1775
+ }();
1776
+
1777
+ /* harmony default export */ __webpack_exports__["a"] = (Pagination);
1778
+
1779
+ /***/ }),
1780
+ /* 16 */
1781
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1782
+
1783
+ "use strict";
1784
+ /* harmony default export */ __webpack_exports__["a"] = (function () {
1785
+ return "<div class=\"slider-pagination\"></div>";
1786
+ });
1787
+
1788
+ /***/ }),
1789
+ /* 17 */
1790
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1791
+
1792
+ "use strict";
1793
+ /* harmony default export */ __webpack_exports__["a"] = (function () {
1794
+ return "<div class=\"slider-page\"></div>";
1795
+ });
1796
+
1797
+ /***/ }),
1798
+ /* 18 */
1799
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1800
+
1801
+ "use strict";
1802
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__ = __webpack_require__(4);
1803
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_detect_supportsPassive__ = __webpack_require__(1);
1804
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1805
+
1806
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1807
+
1808
+
1809
+
1810
+
1811
+ var Swipe = function () {
1812
+ function Swipe(slider) {
1813
+ _classCallCheck(this, Swipe);
1814
+
1815
+ this.slider = slider;
1816
+
1817
+ this._supportsPassive = Object(__WEBPACK_IMPORTED_MODULE_1__utils_detect_supportsPassive__["a" /* default */])();
1818
+
1819
+ this.onStartDrag = this.onStartDrag.bind(this);
1820
+ this.onMoveDrag = this.onMoveDrag.bind(this);
1821
+ this.onStopDrag = this.onStopDrag.bind(this);
1822
+
1823
+ this._init();
1824
+ }
1825
+
1826
+ _createClass(Swipe, [{
1827
+ key: '_init',
1828
+ value: function _init() {}
1829
+ }, {
1830
+ key: 'bindEvents',
1831
+ value: function bindEvents() {
1832
+ var _this = this;
1833
+
1834
+ this.slider.container.addEventListener('dragstart', function (e) {
1835
+ if (!_this._supportsPassive) {
1836
+ e.preventDefault();
1837
+ }
1838
+ });
1839
+ this.slider.container.addEventListener('mousedown', this.onStartDrag);
1840
+ this.slider.container.addEventListener('touchstart', this.onStartDrag);
1841
+
1842
+ window.addEventListener('mousemove', this.onMoveDrag);
1843
+ window.addEventListener('touchmove', this.onMoveDrag);
1844
+
1845
+ window.addEventListener('mouseup', this.onStopDrag);
1846
+ window.addEventListener('touchend', this.onStopDrag);
1847
+ window.addEventListener('touchcancel', this.onStopDrag);
1848
+ }
1849
+ }, {
1850
+ key: 'unbindEvents',
1851
+ value: function unbindEvents() {
1852
+ var _this2 = this;
1853
+
1854
+ this.slider.container.removeEventListener('dragstart', function (e) {
1855
+ if (!_this2._supportsPassive) {
1856
+ e.preventDefault();
1857
+ }
1858
+ });
1859
+ this.slider.container.removeEventListener('mousedown', this.onStartDrag);
1860
+ this.slider.container.removeEventListener('touchstart', this.onStartDrag);
1861
+
1862
+ window.removeEventListener('mousemove', this.onMoveDrag);
1863
+ window.removeEventListener('touchmove', this.onMoveDrag);
1864
+
1865
+ window.removeEventListener('mouseup', this.onStopDrag);
1866
+ window.removeEventListener('mouseup', this.onStopDrag);
1867
+ window.removeEventListener('touchcancel', this.onStopDrag);
1868
+ }
1869
+
1870
+ /**
1871
+ * @param {MouseEvent|TouchEvent}
1872
+ */
1873
+
1874
+ }, {
1875
+ key: 'onStartDrag',
1876
+ value: function onStartDrag(e) {
1877
+ if (e.touches) {
1878
+ if (e.touches.length > 1) {
1879
+ return;
1880
+ } else {
1881
+ e = e.touches[0];
1882
+ }
1883
+ }
1884
+
1885
+ this._origin = new __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__["a" /* default */](e.screenX, e.screenY);
1886
+ this.width = this.slider.wrapperWidth;
1887
+ this.slider.transitioner.disable();
1888
+ }
1889
+
1890
+ /**
1891
+ * @param {MouseEvent|TouchEvent}
1892
+ */
1893
+
1894
+ }, {
1895
+ key: 'onMoveDrag',
1896
+ value: function onMoveDrag(e) {
1897
+ if (this._origin) {
1898
+ var point = e.touches ? e.touches[0] : e;
1899
+ this._lastTranslate = new __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__["a" /* default */](point.screenX - this._origin.x, point.screenY - this._origin.y);
1900
+ if (e.touches) {
1901
+ if (Math.abs(this._lastTranslate.x) > Math.abs(this._lastTranslate.y)) {
1902
+ if (!this._supportsPassive) {
1903
+ e.preventDefault();
1904
+ }
1905
+ e.stopPropagation();
1906
+ }
1907
+ }
1908
+ }
1909
+ }
1910
+
1911
+ /**
1912
+ * @param {MouseEvent|TouchEvent}
1913
+ */
1914
+
1915
+ }, {
1916
+ key: 'onStopDrag',
1917
+ value: function onStopDrag(e) {
1918
+ if (this._origin && this._lastTranslate) {
1919
+ if (Math.abs(this._lastTranslate.x) > 0.2 * this.width) {
1920
+ if (this._lastTranslate.x < 0) {
1921
+ this.slider.next();
1922
+ } else {
1923
+ this.slider.previous();
1924
+ }
1925
+ } else {
1926
+ this.slider.show(true);
1927
+ }
1928
+ }
1929
+ this._origin = null;
1930
+ this._lastTranslate = null;
1931
+ }
1932
+ }]);
1933
+
1934
+ return Swipe;
1935
+ }();
1936
+
1937
+ /* harmony default export */ __webpack_exports__["a"] = (Swipe);
1938
+
1939
+ /***/ }),
1940
+ /* 19 */
1941
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1942
+
1943
+ "use strict";
1944
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__transitions_fade__ = __webpack_require__(20);
1945
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_translate__ = __webpack_require__(21);
1946
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1947
+
1948
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1949
+
1950
+
1951
+
1952
+
1953
+ var Transitioner = function () {
1954
+ function Transitioner(slider) {
1955
+ _classCallCheck(this, Transitioner);
1956
+
1957
+ this.slider = slider;
1958
+ this.options = slider.options;
1959
+
1960
+ this._animating = false;
1961
+ this._animation = undefined;
1962
+
1963
+ this._translate = new __WEBPACK_IMPORTED_MODULE_1__transitions_translate__["a" /* default */](this, slider, slider.options);
1964
+ this._fade = new __WEBPACK_IMPORTED_MODULE_0__transitions_fade__["a" /* default */](this, slider, slider.options);
1965
+ }
1966
+
1967
+ _createClass(Transitioner, [{
1968
+ key: 'init',
1969
+ value: function init() {
1970
+ this._fade.init();
1971
+ this._translate.init();
1972
+ return this;
1973
+ }
1974
+ }, {
1975
+ key: 'isAnimating',
1976
+ value: function isAnimating() {
1977
+ return this._animating;
1978
+ }
1979
+ }, {
1980
+ key: 'enable',
1981
+ value: function enable() {
1982
+ this._animation && this._animation.enable();
1983
+ }
1984
+ }, {
1985
+ key: 'disable',
1986
+ value: function disable() {
1987
+ this._animation && this._animation.disable();
1988
+ }
1989
+ }, {
1990
+ key: 'apply',
1991
+ value: function apply(force, callback) {
1992
+ // If we don't force refresh and animation in progress then return
1993
+ if (this._animating && !force) {
1994
+ return;
1995
+ }
1996
+
1997
+ switch (this.options.effect) {
1998
+ case 'fade':
1999
+ this._animation = this._fade;
2000
+ break;
2001
+ case 'translate':
2002
+ default:
2003
+ this._animation = this._translate;
2004
+ break;
2005
+ }
2006
+
2007
+ this._animationCallback = callback;
2008
+
2009
+ if (force) {
2010
+ this._animation && this._animation.disable();
2011
+ } else {
2012
+ this._animation && this._animation.enable();
2013
+ this._animating = true;
2014
+ }
2015
+
2016
+ this._animation && this._animation.apply();
2017
+
2018
+ if (force) {
2019
+ this.end();
2020
+ }
2021
+ }
2022
+ }, {
2023
+ key: 'end',
2024
+ value: function end() {
2025
+ this._animating = false;
2026
+ this._animation = undefined;
2027
+ this.slider.state.index = this.slider.state.next;
2028
+ if (this._animationCallback) {
2029
+ this._animationCallback();
2030
+ }
2031
+ }
2032
+ }]);
2033
+
2034
+ return Transitioner;
2035
+ }();
2036
+
2037
+ /* harmony default export */ __webpack_exports__["a"] = (Transitioner);
2038
+
2039
+ /***/ }),
2040
+ /* 20 */
2041
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
2042
+
2043
+ "use strict";
2044
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_css__ = __webpack_require__(0);
2045
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
2046
+
2047
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
2048
+
2049
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2050
+
2051
+
2052
+
2053
+ var Fade = function () {
2054
+ function Fade(transitioner, slider) {
2055
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2056
+
2057
+ _classCallCheck(this, Fade);
2058
+
2059
+ this.transitioner = transitioner;
2060
+ this.slider = slider;
2061
+ this.options = _extends({}, options);
2062
+ }
2063
+
2064
+ _createClass(Fade, [{
2065
+ key: 'init',
2066
+ value: function init() {
2067
+ var _this = this;
2068
+
2069
+ if (this.options.effect === 'fade') {
2070
+ this.slider.slides.forEach(function (slide, index) {
2071
+ Object(__WEBPACK_IMPORTED_MODULE_0__utils_css__["a" /* css */])(slide, {
2072
+ position: 'absolute',
2073
+ left: 0,
2074
+ top: 0,
2075
+ bottom: 0,
2076
+ 'z-index': slide.dataset.sliderIndex == _this.slider.state.index ? 0 : -2,
2077
+ opacity: slide.dataset.sliderIndex == _this.slider.state.index ? 1 : 0
2078
+ });
2079
+ });
2080
+ }
2081
+ return this;
2082
+ }
2083
+ }, {
2084
+ key: 'enable',
2085
+ value: function enable() {
2086
+ var _this2 = this;
2087
+
2088
+ this._oldSlide = this.slider.slides.filter(function (slide) {
2089
+ return slide.dataset.sliderIndex == _this2.slider.state.index;
2090
+ })[0];
2091
+ this._newSlide = this.slider.slides.filter(function (slide) {
2092
+ return slide.dataset.sliderIndex == _this2.slider.state.next;
2093
+ })[0];
2094
+ if (this._newSlide) {
2095
+ this._newSlide.addEventListener('transitionend', this.onTransitionEnd.bind(this));
2096
+ this._newSlide.style.transition = this.options.duration + 'ms ' + this.options.timing;
2097
+ if (this._oldSlide) {
2098
+ this._oldSlide.addEventListener('transitionend', this.onTransitionEnd.bind(this));
2099
+ this._oldSlide.style.transition = this.options.duration + 'ms ' + this.options.timing;
2100
+ }
2101
+ }
2102
+ }
2103
+ }, {
2104
+ key: 'disable',
2105
+ value: function disable() {
2106
+ var _this3 = this;
2107
+
2108
+ this._oldSlide = this.slider.slides.filter(function (slide) {
2109
+ return slide.dataset.sliderIndex == _this3.slider.state.index;
2110
+ })[0];
2111
+ this._newSlide = this.slider.slides.filter(function (slide) {
2112
+ return slide.dataset.sliderIndex == _this3.slider.state.next;
2113
+ })[0];
2114
+ if (this._newSlide) {
2115
+ this._newSlide.removeEventListener('transitionend', this.onTransitionEnd.bind(this));
2116
+ this._newSlide.style.transition = 'none';
2117
+ if (this._oldSlide) {
2118
+ this._oldSlide.removeEventListener('transitionend', this.onTransitionEnd.bind(this));
2119
+ this._oldSlide.style.transition = 'none';
2120
+ }
2121
+ }
2122
+ }
2123
+ }, {
2124
+ key: 'apply',
2125
+ value: function apply(force) {
2126
+ var _this4 = this;
2127
+
2128
+ this._oldSlide = this.slider.slides.filter(function (slide) {
2129
+ return slide.dataset.sliderIndex == _this4.slider.state.index;
2130
+ })[0];
2131
+ this._newSlide = this.slider.slides.filter(function (slide) {
2132
+ return slide.dataset.sliderIndex == _this4.slider.state.next;
2133
+ })[0];
2134
+
2135
+ if (this._oldSlide && this._newSlide) {
2136
+ Object(__WEBPACK_IMPORTED_MODULE_0__utils_css__["a" /* css */])(this._oldSlide, {
2137
+ opacity: 0
2138
+ });
2139
+ Object(__WEBPACK_IMPORTED_MODULE_0__utils_css__["a" /* css */])(this._newSlide, {
2140
+ opacity: 1,
2141
+ 'z-index': force ? 0 : -1
2142
+ });
2143
+ }
2144
+ }
2145
+ }, {
2146
+ key: 'onTransitionEnd',
2147
+ value: function onTransitionEnd(e) {
2148
+ if (this.options.effect === 'fade') {
2149
+ if (this.transitioner.isAnimating() && e.target == this._newSlide) {
2150
+ if (this._newSlide) {
2151
+ Object(__WEBPACK_IMPORTED_MODULE_0__utils_css__["a" /* css */])(this._newSlide, {
2152
+ 'z-index': 0
2153
+ });
2154
+ this._newSlide.removeEventListener('transitionend', this.onTransitionEnd.bind(this));
2155
+ }
2156
+ if (this._oldSlide) {
2157
+ Object(__WEBPACK_IMPORTED_MODULE_0__utils_css__["a" /* css */])(this._oldSlide, {
2158
+ 'z-index': -2
2159
+ });
2160
+ this._oldSlide.removeEventListener('transitionend', this.onTransitionEnd.bind(this));
2161
+ }
2162
+ }
2163
+ this.transitioner.end();
2164
+ }
2165
+ }
2166
+ }]);
2167
+
2168
+ return Fade;
2169
+ }();
2170
+
2171
+ /* harmony default export */ __webpack_exports__["a"] = (Fade);
2172
+
2173
+ /***/ }),
2174
+ /* 21 */
2175
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
2176
+
2177
+ "use strict";
2178
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__ = __webpack_require__(4);
2179
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_css__ = __webpack_require__(0);
2180
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
2181
+
2182
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
2183
+
2184
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2185
+
2186
+
2187
+
2188
+
2189
+ var Translate = function () {
2190
+ function Translate(transitioner, slider) {
2191
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2192
+
2193
+ _classCallCheck(this, Translate);
2194
+
2195
+ this.transitioner = transitioner;
2196
+ this.slider = slider;
2197
+ this.options = _extends({}, options);
2198
+
2199
+ this.onTransitionEnd = this.onTransitionEnd.bind(this);
2200
+ }
2201
+
2202
+ _createClass(Translate, [{
2203
+ key: 'init',
2204
+ value: function init() {
2205
+ this._position = new __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__["a" /* default */](this.slider.container.offsetLeft, this.slider.container.offsetTop);
2206
+ this._bindEvents();
2207
+ return this;
2208
+ }
2209
+ }, {
2210
+ key: 'destroy',
2211
+ value: function destroy() {
2212
+ this._unbindEvents();
2213
+ }
2214
+ }, {
2215
+ key: '_bindEvents',
2216
+ value: function _bindEvents() {
2217
+ this.slider.container.addEventListener('transitionend', this.onTransitionEnd);
2218
+ }
2219
+ }, {
2220
+ key: '_unbindEvents',
2221
+ value: function _unbindEvents() {
2222
+ this.slider.container.removeEventListener('transitionend', this.onTransitionEnd);
2223
+ }
2224
+ }, {
2225
+ key: 'enable',
2226
+ value: function enable() {
2227
+ this.slider.container.style.transition = this.options.duration + 'ms ' + this.options.timing;
2228
+ }
2229
+ }, {
2230
+ key: 'disable',
2231
+ value: function disable() {
2232
+ this.slider.container.style.transition = 'none';
2233
+ }
2234
+ }, {
2235
+ key: 'apply',
2236
+ value: function apply() {
2237
+ var _this = this;
2238
+
2239
+ var maxOffset = void 0;
2240
+ if (this.options.effect === 'translate') {
2241
+ var slide = this.slider.slides.filter(function (slide) {
2242
+ return slide.dataset.sliderIndex == _this.slider.state.next;
2243
+ })[0];
2244
+ var slideOffset = new __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__["a" /* default */](slide.offsetLeft, slide.offsetTop);
2245
+ if (this.options.centerMode) {
2246
+ maxOffset = new __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__["a" /* default */](Math.round(Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["e" /* width */])(this.slider.container)), Math.round(Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["b" /* height */])(this.slider.container)));
2247
+ } else {
2248
+ maxOffset = new __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__["a" /* default */](Math.round(Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["e" /* width */])(this.slider.container) - Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["e" /* width */])(this.slider.wrapper)), Math.round(Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["b" /* height */])(this.slider.container) - Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["b" /* height */])(this.slider.wrapper)));
2249
+ }
2250
+ var nextOffset = new __WEBPACK_IMPORTED_MODULE_0__utils_coordinate__["a" /* default */](Math.min(Math.max(slideOffset.x * -1, maxOffset.x * -1), 0), Math.min(Math.max(slideOffset.y * -1, maxOffset.y * -1), 0));
2251
+ if (this.options.loop) {
2252
+ if (!this.options.vertical && Math.abs(this._position.x) > maxOffset.x) {
2253
+ nextOffset.x = 0;
2254
+ this.slider.state.next = 0;
2255
+ } else if (this.options.vertical && Math.abs(this._position.y) > maxOffset.y) {
2256
+ nextOffset.y = 0;
2257
+ this.slider.state.next = 0;
2258
+ }
2259
+ }
2260
+
2261
+ this._position.x = nextOffset.x;
2262
+ this._position.y = nextOffset.y;
2263
+ if (this.options.centerMode) {
2264
+ this._position.x = this._position.x + this.slider.wrapperWidth / 2 - Object(__WEBPACK_IMPORTED_MODULE_1__utils_css__["e" /* width */])(slide) / 2;
2265
+ }
2266
+
2267
+ if (this.slider.direction === 'rtl') {
2268
+ this._position.x = -this._position.x;
2269
+ this._position.y = -this._position.y;
2270
+ }
2271
+ this.slider.container.style.transform = 'translate3d(' + this._position.x + 'px, ' + this._position.y + 'px, 0)';
2272
+
2273
+ /**
2274
+ * update the index with the nextIndex only if
2275
+ * the offset of the nextIndex is in the range of the maxOffset
2276
+ */
2277
+ if (slideOffset.x > maxOffset.x) {
2278
+ this.slider.transitioner.end();
2279
+ }
2280
+ }
2281
+ }
2282
+ }, {
2283
+ key: 'onTransitionEnd',
2284
+ value: function onTransitionEnd(e) {
2285
+ if (this.options.effect === 'translate') {
2286
+
2287
+ if (this.transitioner.isAnimating() && e.target == this.slider.container) {
2288
+ if (this.options.infinite) {
2289
+ this.slider._infinite.onTransitionEnd(e);
2290
+ }
2291
+ }
2292
+ this.transitioner.end();
2293
+ }
2294
+ }
2295
+ }]);
2296
+
2297
+ return Translate;
2298
+ }();
2299
+
2300
+ /* harmony default export */ __webpack_exports__["a"] = (Translate);
2301
+
2302
+ /***/ }),
2303
+ /* 22 */
2304
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
2305
+
2306
+ "use strict";
2307
+ var defaultOptions = {
2308
+ initialSlide: 0,
2309
+ slidesToScroll: 1,
2310
+ slidesToShow: 1,
2311
+
2312
+ navigation: true,
2313
+ navigationKeys: true,
2314
+ navigationSwipe: true,
2315
+
2316
+ pagination: true,
2317
+
2318
+ loop: false,
2319
+ infinite: false,
2320
+
2321
+ effect: 'translate',
2322
+ duration: 300,
2323
+ timing: 'ease',
2324
+
2325
+ autoplay: false,
2326
+ autoplaySpeed: 3000,
2327
+ pauseOnHover: true,
2328
+ breakpoints: [{
2329
+ changePoint: 480,
2330
+ slidesToShow: 1,
2331
+ slidesToScroll: 1
2332
+ }, {
2333
+ changePoint: 640,
2334
+ slidesToShow: 2,
2335
+ slidesToScroll: 2
2336
+ }, {
2337
+ changePoint: 768,
2338
+ slidesToShow: 3,
2339
+ slidesToScroll: 3
2340
+ }],
2341
+
2342
+ onReady: null,
2343
+ icons: {
2344
+ 'previous': '<svg viewBox="0 0 50 80" xml:space="preserve">\n <polyline fill="currentColor" stroke-width=".5em" stroke-linecap="round" stroke-linejoin="round" points="45.63,75.8 0.375,38.087 45.63,0.375 "/>\n </svg>',
2345
+ 'next': '<svg viewBox="0 0 50 80" xml:space="preserve">\n <polyline fill="currentColor" stroke-width=".5em" stroke-linecap="round" stroke-linejoin="round" points="0.375,0.375 45.63,38.087 0.375,75.8 "/>\n </svg>'
2346
+ }
2347
+ };
2348
+
2349
+ /* harmony default export */ __webpack_exports__["a"] = (defaultOptions);
2350
+
2351
+ /***/ }),
2352
+ /* 23 */
2353
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
2354
+
2355
+ "use strict";
2356
+ /* harmony default export */ __webpack_exports__["a"] = (function (id) {
2357
+ return "<div id=\"" + id + "\" class=\"slider\" tabindex=\"0\">\n <div class=\"slider-container\"></div>\n </div>";
2358
+ });
2359
+
2360
+ /***/ }),
2361
+ /* 24 */
2362
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
2363
+
2364
+ "use strict";
2365
+ /* harmony default export */ __webpack_exports__["a"] = (function () {
2366
+ return "<div class=\"slider-item\"></div>";
2367
+ });
2368
+
2369
+ /***/ })
2370
+ /******/ ])["default"];
2371
+ });
static/js/bulma-carousel.min.js ADDED
@@ -0,0 +1 @@
 
 
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.bulmaCarousel=e():t.bulmaCarousel=e()}("undefined"!=typeof self?self:this,function(){return function(i){var n={};function s(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return i[t].call(e.exports,e,e.exports,s),e.l=!0,e.exports}return s.m=i,s.c=n,s.d=function(t,e,i){s.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:i})},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,"a",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p="",s(s.s=5)}([function(t,e,i){"use strict";i.d(e,"d",function(){return s}),i.d(e,"e",function(){return r}),i.d(e,"b",function(){return o}),i.d(e,"c",function(){return a}),i.d(e,"a",function(){return l});var n=i(2),s=function(e,t){(t=Array.isArray(t)?t:t.split(" ")).forEach(function(t){e.classList.remove(t)})},r=function(t){return t.getBoundingClientRect().width||t.offsetWidth},o=function(t){return t.getBoundingClientRect().height||t.offsetHeight},a=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],i=t.offsetHeight;if(e){var n=window.getComputedStyle(t);i+=parseInt(n.marginTop)+parseInt(n.marginBottom)}return i},l=function(t,e){if(!e)return window.getComputedStyle(t);if(Object(n.b)(e)){var i="";Object.keys(e).forEach(function(t){i+=t+": "+e[t]+";"}),t.style.cssText+=i}}},function(t,e,i){"use strict";e.a=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}catch(t){}return t}},function(t,e,i){"use strict";i.d(e,"a",function(){return s}),i.d(e,"c",function(){return r}),i.d(e,"b",function(){return o});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s=function(t){return"function"==typeof t},r=function(t){return"string"==typeof t||!!t&&"object"===(void 0===t?"undefined":n(t))&&"[object String]"===Object.prototype.toString.call(t)},o=function(t){return("function"==typeof t||"object"===(void 0===t?"undefined":n(t))&&!!t)&&!Array.isArray(t)}},function(t,e,i){"use strict";var n=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var s=function(){function e(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.events=new Map(t)}return n(e,[{key:"on",value:function(t,e){var i=this;return this.events.set(t,[].concat(function(t){if(Array.isArray(t)){for(var e=0,i=Array(t.length);e<t.length;e++)i[e]=t[e];return i}return Array.from(t)}(this.events.has(t)?this.events.get(t):[]),[e])),function(){return i.events.set(t,i.events.get(t).filter(function(t){return t!==e}))}}},{key:"emit",value:function(t){for(var e=arguments.length,i=Array(1<e?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];return this.events.has(t)&&this.events.get(t).map(function(t){return t.apply(void 0,i)})}}]),e}();e.a=s},function(t,e,i){"use strict";var n=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var s=function(){function s(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,s),this._x=t,this._y=e}return n(s,[{key:"add",value:function(t){return new s(this._x+t._x,this._y+t._y)}},{key:"sub",value:function(t){return new s(this._x-t._x,this._y-t._y)}},{key:"distance",value:function(t){var e=this._x-t._x,i=this._y-t._y;return Math.sqrt(Math.pow(e,2)+Math.pow(i,2))}},{key:"max",value:function(t){return new s(Math.max(this._x,t._x),Math.max(this._y,t._y))}},{key:"equals",value:function(t){return this==t||!(!t||null==t)&&(this._x==t._x&&this._y==t._y)}},{key:"inside",value:function(t,e){return this._x>=t._x&&this._x<=e._x&&this._y>=t._y&&this._y<=e._y}},{key:"constrain",value:function(t,e){if(t._x>e._x||t._y>e._y)return this;var i=this._x,n=this._y;return null!==t._x&&(i=Math.max(i,t._x)),null!==e._x&&(i=Math.min(i,e._x)),null!==t._y&&(n=Math.max(n,t._y)),null!==e._y&&(n=Math.min(n,e._y)),new s(i,n)}},{key:"reposition",value:function(t){t.style.top=this._y+"px",t.style.left=this._x+"px"}},{key:"toString",value:function(){return"("+this._x+","+this._y+")"}},{key:"x",get:function(){return this._x},set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0;return this._x=t,this}},{key:"y",get:function(){return this._y},set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0;return this._y=t,this}}]),s}();e.a=s},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(6),s=i(0),a=i(2),r=i(3),l=i(7),h=i(9),u=i(10),d=i(11),c=i(13),f=i(15),p=i(18),v=i(19),y=i(22),_=i(23),g=i(24),b=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t},w=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var o=function(t){function o(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o);var r=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));if(r.element=Object(a.c)(t)?document.querySelector(t):t,!r.element)throw new Error("An invalid selector or non-DOM node has been provided.");r._clickEvents=["click","touch"];var i=r.element.dataset?Object.keys(r.element.dataset).filter(function(t){return Object.keys(y.a).includes(t)}).reduce(function(t,e){return b({},t,(i={},n=e,s=r.element.dataset[e],n in i?Object.defineProperty(i,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):i[n]=s,i));var i,n,s},{}):{};return r.options=b({},y.a,e,i),r._id=Object(n.a)("slider"),r.onShow=r.onShow.bind(r),r._init(),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,r["a"]),w(o,[{key:"_init",value:function(){return this._items=Array.from(this.element.children),this._breakpoint=new h.a(this),this._autoplay=new l.a(this),this._navigation=new c.a(this),this._pagination=new f.a(this),this._infinite=new u.a(this),this._loop=new d.a(this),this._swipe=new p.a(this),this._build(),Object(a.a)(this.options.onReady)&&this.options.onReady(this),this}},{key:"_build",value:function(){var i=this;this.node=document.createRange().createContextualFragment(Object(_.a)(this.id)),this._ui={wrapper:this.node.firstChild,container:this.node.querySelector(".slider-container")},this.element.appendChild(this.node),this._ui.wrapper.classList.add("is-loading"),this._ui.container.style.opacity=0,this._transitioner=new v.a(this),this._slides=this._items.map(function(t,e){return i._createSlide(t,e)}),this.reset(),this._bindEvents(),this._ui.container.style.opacity=1,this._ui.wrapper.classList.remove("is-loading")}},{key:"_bindEvents",value:function(){this.on("show",this.onShow)}},{key:"_unbindEvents",value:function(){this.off("show",this.onShow)}},{key:"_createSlide",value:function(t,e){var i=document.createRange().createContextualFragment(Object(g.a)()).firstChild;return i.dataset.sliderIndex=e,i.appendChild(t),i}},{key:"_setDimensions",value:function(){var e=this;this.options.vertical?(this._ui.wrapper.style.height=Object(s.c)(this._slides[0])*this.slidesToShow,this.options.centerMode&&(this._ui.wrapper.style.padding=this.options.centerPadding+" 0px")):this.options.centerMode&&(this._ui.wrapper.style.padding="0px "+this.options.centerPadding),this._wrapperWidth=Object(s.e)(this._ui.wrapper),this._wrapperHeight=Object(s.c)(this._ui.wrapper),this.options.vertical?(this._slideWidth=Math.ceil(this._wrapperWidth),this._containerHeight=Math.ceil(Object(s.c)(this._slides[0])*this._slides.length),this._ui.container.style.height=this._containerHeight+"px"):(this._slideWidth=Math.ceil(this._wrapperWidth/this.slidesToShow),this._containerWidth=Math.ceil(this._slideWidth*this._slides.length),this._ui.container.style.width=this._containerWidth+"px"),this._slides.forEach(function(t){t.style.width=e._slideWidth+"px"})}},{key:"_setHeight",value:function(){"translate"!==this.options.effect&&(this._ui.container.style.height=Object(s.c)(this._slides[this.state.index])+"px")}},{key:"_setClasses",value:function(){var e=this;this._slides.forEach(function(t){Object(s.d)(t,"is-active is-current is-slide-previous is-slide-next"),Math.abs((e.state.index-1)%e.state.length)===parseInt(t.dataset.sliderIndex,10)&&t.classList.add("is-slide-previous"),Math.abs(e.state.index%e.state.length)===parseInt(t.dataset.sliderIndex,10)&&t.classList.add("is-current"),Math.abs((e.state.index+1)%e.state.length)===parseInt(t.dataset.sliderIndex,10)&&t.classList.add("is-slide-next")})}},{key:"onShow",value:function(t){this._navigation.refresh(),this._pagination.refresh(),this._setClasses()}},{key:"next",value:function(){!this.options.loop&&!this.options.infinite&&this.state.index+this.slidesToScroll>this.state.length-this.slidesToShow&&!this.options.centerMode?this.state.next=this.state.index:this.state.next=this.state.index+this.slidesToScroll,this.show()}},{key:"previous",value:function(){this.options.loop||this.options.infinite||0!==this.state.index?this.state.next=this.state.index-this.slidesToScroll:this.state.next=this.state.index,this.show()}},{key:"start",value:function(){this._autoplay.start()}},{key:"pause",value:function(){this._autoplay.pause()}},{key:"stop",value:function(){this._autoplay.stop()}},{key:"show",value:function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1];!this.state.length||this.state.length<=this.slidesToShow||("Number"==typeof t&&(this.state.next=t),this.options.loop&&this._loop.apply(),this.options.infinite&&this._infinite.apply(),this.state.index!==this.state.next&&(this.emit("before:show",this.state),this._transitioner.apply(e,this._setHeight.bind(this)),this.emit("after:show",this.state),this.emit("show",this)))}},{key:"reset",value:function(){var e=this;this.state={length:this._items.length,index:Math.abs(this.options.initialSlide),next:Math.abs(this.options.initialSlide),prev:void 0},this.options.loop&&this.options.infinite&&(this.options.loop=!1),this.options.slidesToScroll>this.options.slidesToShow&&(this.options.slidesToScroll=this.slidesToShow),this._breakpoint.init(),this.state.index>=this.state.length&&0!==this.state.index&&(this.state.index=this.state.index-this.slidesToScroll),this.state.length<=this.slidesToShow&&(this.state.index=0),this._ui.wrapper.appendChild(this._navigation.init().render()),this._ui.wrapper.appendChild(this._pagination.init().render()),this.options.navigationSwipe?this._swipe.bindEvents():this._swipe._bindEvents(),this._breakpoint.apply(),this._slides.forEach(function(t){return e._ui.container.appendChild(t)}),this._transitioner.init().apply(!0,this._setHeight.bind(this)),this.options.autoplay&&this._autoplay.init().start()}},{key:"destroy",value:function(){var e=this;this._unbindEvents(),this._items.forEach(function(t){e.element.appendChild(t)}),this.node.remove()}},{key:"id",get:function(){return this._id}},{key:"index",set:function(t){this._index=t},get:function(){return this._index}},{key:"length",set:function(t){this._length=t},get:function(){return this._length}},{key:"slides",get:function(){return this._slides},set:function(t){this._slides=t}},{key:"slidesToScroll",get:function(){return"translate"===this.options.effect?this._breakpoint.getSlidesToScroll():1}},{key:"slidesToShow",get:function(){return"translate"===this.options.effect?this._breakpoint.getSlidesToShow():1}},{key:"direction",get:function(){return"rtl"===this.element.dir.toLowerCase()||"rtl"===this.element.style.direction?"rtl":"ltr"}},{key:"wrapper",get:function(){return this._ui.wrapper}},{key:"wrapperWidth",get:function(){return this._wrapperWidth||0}},{key:"container",get:function(){return this._ui.container}},{key:"containerWidth",get:function(){return this._containerWidth||0}},{key:"slideWidth",get:function(){return this._slideWidth||0}},{key:"transitioner",get:function(){return this._transitioner}}],[{key:"attach",value:function(){var i=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:".slider",n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},s=new Array,e=Object(a.c)(t)?document.querySelectorAll(t):Array.isArray(t)?t:[t];return[].forEach.call(e,function(t){if(void 0===t[i.constructor.name]){var e=new o(t,n);t[i.constructor.name]=e,s.push(e)}else s.push(t[i.constructor.name])}),s}}]),o}();e.default=o},function(t,e,i){"use strict";i.d(e,"a",function(){return n});var n=function(){return(0<arguments.length&&void 0!==arguments[0]?arguments[0]:"")+([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,function(t){return(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16)})}},function(t,e,i){"use strict";var n=i(3),s=i(8),r=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();Symbol("onVisibilityChange"),Symbol("onMouseEnter"),Symbol("onMouseLeave");var o=function(t){function i(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,i);var e=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(i.__proto__||Object.getPrototypeOf(i)).call(this));return e.slider=t,e.onVisibilityChange=e.onVisibilityChange.bind(e),e.onMouseEnter=e.onMouseEnter.bind(e),e.onMouseLeave=e.onMouseLeave.bind(e),e}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(i,n["a"]),r(i,[{key:"init",value:function(){return this._bindEvents(),this}},{key:"_bindEvents",value:function(){document.addEventListener("visibilitychange",this.onVisibilityChange),this.slider.options.pauseOnHover&&(this.slider.container.addEventListener(s.a,this.onMouseEnter),this.slider.container.addEventListener(s.b,this.onMouseLeave))}},{key:"_unbindEvents",value:function(){document.removeEventListener("visibilitychange",this.onVisibilityChange),this.slider.container.removeEventListener(s.a,this.onMouseEnter),this.slider.container.removeEventListener(s.b,this.onMouseLeave)}},{key:"start",value:function(){var t=this;this.stop(),this.slider.options.autoplay&&(this.emit("start",this),this._interval=setInterval(function(){t._hovering&&t.slider.options.pauseOnHover||(!t.slider.options.centerMode&&t.slider.state.next>=t.slider.state.length-t.slider.slidesToShow&&!t.slider.options.loop&&!t.slider.options.infinite?t.stop():t.slider.next())},this.slider.options.autoplaySpeed))}},{key:"stop",value:function(){this._interval=clearInterval(this._interval),this.emit("stop",this)}},{key:"pause",value:function(){var t=this,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0;this.paused||(this.timer&&this.stop(),this.paused=!0,0===e?(this.paused=!1,this.start()):this.slider.on("transition:end",function(){t&&(t.paused=!1,t.run?t.start():t.stop())}))}},{key:"onVisibilityChange",value:function(t){document.hidden?this.stop():this.start()}},{key:"onMouseEnter",value:function(t){this._hovering=!0,this.slider.options.pauseOnHover&&this.pause()}},{key:"onMouseLeave",value:function(t){this._hovering=!1,this.slider.options.pauseOnHover&&this.pause()}}]),i}();e.a=o},function(t,e,i){"use strict";i.d(e,"a",function(){return o}),i.d(e,"b",function(){return a});window.navigator.pointerEnabled||window.navigator.msPointerEnabled,window.navigator.msPointerEnabled&&1<window.navigator.msMaxTouchPoints||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints,navigator.userAgent.match(/(Android);?[\s\/]+([\d.]+)?/),navigator.userAgent.match(/(iPad).*OS\s([\d_]+)/),navigator.userAgent.match(/(iPod)(.*OS\s([\d_]+))?/),!navigator.userAgent.match(/(iPad).*OS\s([\d_]+)/)&&navigator.userAgent.match(/(iPhone\sOS)\s([\d_]+)/),0<=navigator.userAgent.toLowerCase().indexOf("safari")&&navigator.userAgent.toLowerCase().indexOf("chrome")<0&&navigator.userAgent.toLowerCase().indexOf("android"),/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent);var n=!!("ontouchstart"in window),s=!!("PointerEvent"in window),r=n||window.DocumentTouch&&document instanceof DocumentTouch||navigator.maxTouchPoints,o=r&&s?"pointerenter":"mouseenter",a=r&&s?"pointerleave":"mouseleave"},function(t,e,i){"use strict";var n=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var s=Symbol("onResize"),r=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t,this.options=t.options,this[s]=this[s].bind(this),this._bindEvents()}return n(e,[{key:"init",value:function(){return this._defaultBreakpoint={slidesToShow:this.options.slidesToShow,slidesToScroll:this.options.slidesToScroll},this.options.breakpoints.sort(function(t,e){return parseInt(t.changePoint,10)>parseInt(e.changePoint,10)}),this._currentBreakpoint=this._getActiveBreakpoint(),this}},{key:"destroy",value:function(){this._unbindEvents()}},{key:"_bindEvents",value:function(){window.addEventListener("resize",this[s]),window.addEventListener("orientationchange",this[s])}},{key:"_unbindEvents",value:function(){window.removeEventListener("resize",this[s]),window.removeEventListener("orientationchange",this[s])}},{key:"_getActiveBreakpoint",value:function(){var t=!0,e=!1,i=void 0;try{for(var n,s=this.options.breakpoints[Symbol.iterator]();!(t=(n=s.next()).done);t=!0){var r=n.value;if(r.changePoint>=window.innerWidth)return r}}catch(t){e=!0,i=t}finally{try{!t&&s.return&&s.return()}finally{if(e)throw i}}return this._defaultBreakpoint}},{key:"getSlidesToShow",value:function(){return this._currentBreakpoint?this._currentBreakpoint.slidesToShow:this._defaultBreakpoint.slidesToShow}},{key:"getSlidesToScroll",value:function(){return this._currentBreakpoint?this._currentBreakpoint.slidesToScroll:this._defaultBreakpoint.slidesToScroll}},{key:"apply",value:function(){this.slider.state.index>=this.slider.state.length&&0!==this.slider.state.index&&(this.slider.state.index=this.slider.state.index-this._currentBreakpoint.slidesToScroll),this.slider.state.length<=this._currentBreakpoint.slidesToShow&&(this.slider.state.index=0),this.options.loop&&this.slider._loop.init().apply(),this.options.infinite&&this.slider._infinite.init().apply(),this.slider._setDimensions(),this.slider._transitioner.init().apply(!0,this.slider._setHeight.bind(this.slider)),this.slider._setClasses(),this.slider._navigation.refresh(),this.slider._pagination.refresh()}},{key:s,value:function(t){var e=this._getActiveBreakpoint();e.slidesToShow!==this._currentBreakpoint.slidesToShow&&(this._currentBreakpoint=e,this.apply())}}]),e}();e.a=r},function(t,e,i){"use strict";var n=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var s=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t}return n(e,[{key:"init",value:function(){if(this.slider.options.infinite&&"translate"===this.slider.options.effect){this.slider.options.centerMode?this._infiniteCount=Math.ceil(this.slider.slidesToShow+this.slider.slidesToShow/2):this._infiniteCount=this.slider.slidesToShow;for(var t=[],e=0,i=this.slider.state.length;i>this.slider.state.length-1-this._infiniteCount;i-=1)e=i-1,t.unshift(this._cloneSlide(this.slider.slides[e],e-this.slider.state.length));for(var n=[],s=0;s<this._infiniteCount+this.slider.state.length;s+=1)n.push(this._cloneSlide(this.slider.slides[s%this.slider.state.length],s+this.slider.state.length));this.slider.slides=[].concat(t,function(t){if(Array.isArray(t)){for(var e=0,i=Array(t.length);e<t.length;e++)i[e]=t[e];return i}return Array.from(t)}(this.slider.slides),n)}return this}},{key:"apply",value:function(){}},{key:"onTransitionEnd",value:function(t){this.slider.options.infinite&&(this.slider.state.next>=this.slider.state.length?(this.slider.state.index=this.slider.state.next=this.slider.state.next-this.slider.state.length,this.slider.transitioner.apply(!0)):this.slider.state.next<0&&(this.slider.state.index=this.slider.state.next=this.slider.state.length+this.slider.state.next,this.slider.transitioner.apply(!0)))}},{key:"_cloneSlide",value:function(t,e){var i=t.cloneNode(!0);return i.dataset.sliderIndex=e,i.dataset.cloned=!0,(i.querySelectorAll("[id]")||[]).forEach(function(t){t.setAttribute("id","")}),i}}]),e}();e.a=s},function(t,e,i){"use strict";var n=i(12),s=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var r=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t}return s(e,[{key:"init",value:function(){return this}},{key:"apply",value:function(){this.slider.options.loop&&(0<this.slider.state.next?this.slider.state.next<this.slider.state.length?this.slider.state.next>this.slider.state.length-this.slider.slidesToShow&&Object(n.a)(this.slider._slides[this.slider.state.length-1],this.slider.wrapper)?this.slider.state.next=0:this.slider.state.next=Math.min(Math.max(this.slider.state.next,0),this.slider.state.length-this.slider.slidesToShow):this.slider.state.next=0:this.slider.state.next<=0-this.slider.slidesToScroll?this.slider.state.next=this.slider.state.length-this.slider.slidesToShow:this.slider.state.next=0)}}]),e}();e.a=r},function(t,e,i){"use strict";i.d(e,"a",function(){return n});var n=function(t,e){var i=t.getBoundingClientRect();return e=e||document.documentElement,0<=i.top&&0<=i.left&&i.bottom<=(window.innerHeight||e.clientHeight)&&i.right<=(window.innerWidth||e.clientWidth)}},function(t,e,i){"use strict";var n=i(14),s=i(1),r=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var o=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t,this._clickEvents=["click","touch"],this._supportsPassive=Object(s.a)(),this.onPreviousClick=this.onPreviousClick.bind(this),this.onNextClick=this.onNextClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this)}return r(e,[{key:"init",value:function(){return this.node=document.createRange().createContextualFragment(Object(n.a)(this.slider.options.icons)),this._ui={previous:this.node.querySelector(".slider-navigation-previous"),next:this.node.querySelector(".slider-navigation-next")},this._unbindEvents(),this._bindEvents(),this.refresh(),this}},{key:"destroy",value:function(){this._unbindEvents()}},{key:"_bindEvents",value:function(){var e=this;this.slider.wrapper.addEventListener("keyup",this.onKeyUp),this._clickEvents.forEach(function(t){e._ui.previous.addEventListener(t,e.onPreviousClick),e._ui.next.addEventListener(t,e.onNextClick)})}},{key:"_unbindEvents",value:function(){var e=this;this.slider.wrapper.removeEventListener("keyup",this.onKeyUp),this._clickEvents.forEach(function(t){e._ui.previous.removeEventListener(t,e.onPreviousClick),e._ui.next.removeEventListener(t,e.onNextClick)})}},{key:"onNextClick",value:function(t){this._supportsPassive||t.preventDefault(),this.slider.options.navigation&&this.slider.next()}},{key:"onPreviousClick",value:function(t){this._supportsPassive||t.preventDefault(),this.slider.options.navigation&&this.slider.previous()}},{key:"onKeyUp",value:function(t){this.slider.options.keyNavigation&&("ArrowRight"===t.key||"Right"===t.key?this.slider.next():"ArrowLeft"!==t.key&&"Left"!==t.key||this.slider.previous())}},{key:"refresh",value:function(){this.slider.options.loop||this.slider.options.infinite||(this.slider.options.navigation&&this.slider.state.length>this.slider.slidesToShow?(this._ui.previous.classList.remove("is-hidden"),this._ui.next.classList.remove("is-hidden"),0===this.slider.state.next?(this._ui.previous.classList.add("is-hidden"),this._ui.next.classList.remove("is-hidden")):this.slider.state.next>=this.slider.state.length-this.slider.slidesToShow&&!this.slider.options.centerMode?(this._ui.previous.classList.remove("is-hidden"),this._ui.next.classList.add("is-hidden")):this.slider.state.next>=this.slider.state.length-1&&this.slider.options.centerMode&&(this._ui.previous.classList.remove("is-hidden"),this._ui.next.classList.add("is-hidden"))):(this._ui.previous.classList.add("is-hidden"),this._ui.next.classList.add("is-hidden")))}},{key:"render",value:function(){return this.node}}]),e}();e.a=o},function(t,e,i){"use strict";e.a=function(t){return'<div class="slider-navigation-previous">'+t.previous+'</div>\n<div class="slider-navigation-next">'+t.next+"</div>"}},function(t,e,i){"use strict";var n=i(16),s=i(17),r=i(1),o=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var a=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t,this._clickEvents=["click","touch"],this._supportsPassive=Object(r.a)(),this.onPageClick=this.onPageClick.bind(this),this.onResize=this.onResize.bind(this)}return o(e,[{key:"init",value:function(){return this._pages=[],this.node=document.createRange().createContextualFragment(Object(n.a)()),this._ui={container:this.node.firstChild},this._count=Math.ceil((this.slider.state.length-this.slider.slidesToShow)/this.slider.slidesToScroll),this._draw(),this.refresh(),this}},{key:"destroy",value:function(){this._unbindEvents()}},{key:"_bindEvents",value:function(){var i=this;window.addEventListener("resize",this.onResize),window.addEventListener("orientationchange",this.onResize),this._clickEvents.forEach(function(e){i._pages.forEach(function(t){return t.addEventListener(e,i.onPageClick)})})}},{key:"_unbindEvents",value:function(){var i=this;window.removeEventListener("resize",this.onResize),window.removeEventListener("orientationchange",this.onResize),this._clickEvents.forEach(function(e){i._pages.forEach(function(t){return t.removeEventListener(e,i.onPageClick)})})}},{key:"_draw",value:function(){if(this._ui.container.innerHTML="",this.slider.options.pagination&&this.slider.state.length>this.slider.slidesToShow){for(var t=0;t<=this._count;t++){var e=document.createRange().createContextualFragment(Object(s.a)()).firstChild;e.dataset.index=t*this.slider.slidesToScroll,this._pages.push(e),this._ui.container.appendChild(e)}this._bindEvents()}}},{key:"onPageClick",value:function(t){this._supportsPassive||t.preventDefault(),this.slider.state.next=t.currentTarget.dataset.index,this.slider.show()}},{key:"onResize",value:function(){this._draw()}},{key:"refresh",value:function(){var e=this,t=void 0;(t=this.slider.options.infinite?Math.ceil(this.slider.state.length-1/this.slider.slidesToScroll):Math.ceil((this.slider.state.length-this.slider.slidesToShow)/this.slider.slidesToScroll))!==this._count&&(this._count=t,this._draw()),this._pages.forEach(function(t){t.classList.remove("is-active"),parseInt(t.dataset.index,10)===e.slider.state.next%e.slider.state.length&&t.classList.add("is-active")})}},{key:"render",value:function(){return this.node}}]),e}();e.a=a},function(t,e,i){"use strict";e.a=function(){return'<div class="slider-pagination"></div>'}},function(t,e,i){"use strict";e.a=function(){return'<div class="slider-page"></div>'}},function(t,e,i){"use strict";var n=i(4),s=i(1),r=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var o=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t,this._supportsPassive=Object(s.a)(),this.onStartDrag=this.onStartDrag.bind(this),this.onMoveDrag=this.onMoveDrag.bind(this),this.onStopDrag=this.onStopDrag.bind(this),this._init()}return r(e,[{key:"_init",value:function(){}},{key:"bindEvents",value:function(){var e=this;this.slider.container.addEventListener("dragstart",function(t){e._supportsPassive||t.preventDefault()}),this.slider.container.addEventListener("mousedown",this.onStartDrag),this.slider.container.addEventListener("touchstart",this.onStartDrag),window.addEventListener("mousemove",this.onMoveDrag),window.addEventListener("touchmove",this.onMoveDrag),window.addEventListener("mouseup",this.onStopDrag),window.addEventListener("touchend",this.onStopDrag),window.addEventListener("touchcancel",this.onStopDrag)}},{key:"unbindEvents",value:function(){var e=this;this.slider.container.removeEventListener("dragstart",function(t){e._supportsPassive||t.preventDefault()}),this.slider.container.removeEventListener("mousedown",this.onStartDrag),this.slider.container.removeEventListener("touchstart",this.onStartDrag),window.removeEventListener("mousemove",this.onMoveDrag),window.removeEventListener("touchmove",this.onMoveDrag),window.removeEventListener("mouseup",this.onStopDrag),window.removeEventListener("mouseup",this.onStopDrag),window.removeEventListener("touchcancel",this.onStopDrag)}},{key:"onStartDrag",value:function(t){if(t.touches){if(1<t.touches.length)return;t=t.touches[0]}this._origin=new n.a(t.screenX,t.screenY),this.width=this.slider.wrapperWidth,this.slider.transitioner.disable()}},{key:"onMoveDrag",value:function(t){if(this._origin){var e=t.touches?t.touches[0]:t;this._lastTranslate=new n.a(e.screenX-this._origin.x,e.screenY-this._origin.y),t.touches&&Math.abs(this._lastTranslate.x)>Math.abs(this._lastTranslate.y)&&(this._supportsPassive||t.preventDefault(),t.stopPropagation())}}},{key:"onStopDrag",value:function(t){this._origin&&this._lastTranslate&&(Math.abs(this._lastTranslate.x)>.2*this.width?this._lastTranslate.x<0?this.slider.next():this.slider.previous():this.slider.show(!0)),this._origin=null,this._lastTranslate=null}}]),e}();e.a=o},function(t,e,i){"use strict";var n=i(20),s=i(21),r=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var o=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t,this.options=t.options,this._animating=!1,this._animation=void 0,this._translate=new s.a(this,t,t.options),this._fade=new n.a(this,t,t.options)}return r(e,[{key:"init",value:function(){return this._fade.init(),this._translate.init(),this}},{key:"isAnimating",value:function(){return this._animating}},{key:"enable",value:function(){this._animation&&this._animation.enable()}},{key:"disable",value:function(){this._animation&&this._animation.disable()}},{key:"apply",value:function(t,e){if(!this._animating||t){switch(this.options.effect){case"fade":this._animation=this._fade;break;case"translate":default:this._animation=this._translate}this._animationCallback=e,t?this._animation&&this._animation.disable():(this._animation&&this._animation.enable(),this._animating=!0),this._animation&&this._animation.apply(),t&&this.end()}}},{key:"end",value:function(){this._animating=!1,this._animation=void 0,this.slider.state.index=this.slider.state.next,this._animationCallback&&this._animationCallback()}}]),e}();e.a=o},function(t,e,i){"use strict";var s=i(0),r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t},o=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var n=function(){function n(t,e){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.transitioner=t,this.slider=e,this.options=r({},i)}return o(n,[{key:"init",value:function(){var i=this;return"fade"===this.options.effect&&this.slider.slides.forEach(function(t,e){Object(s.a)(t,{position:"absolute",left:0,top:0,bottom:0,"z-index":t.dataset.sliderIndex==i.slider.state.index?0:-2,opacity:t.dataset.sliderIndex==i.slider.state.index?1:0})}),this}},{key:"enable",value:function(){var e=this;this._oldSlide=this.slider.slides.filter(function(t){return t.dataset.sliderIndex==e.slider.state.index})[0],this._newSlide=this.slider.slides.filter(function(t){return t.dataset.sliderIndex==e.slider.state.next})[0],this._newSlide&&(this._newSlide.addEventListener("transitionend",this.onTransitionEnd.bind(this)),this._newSlide.style.transition=this.options.duration+"ms "+this.options.timing,this._oldSlide&&(this._oldSlide.addEventListener("transitionend",this.onTransitionEnd.bind(this)),this._oldSlide.style.transition=this.options.duration+"ms "+this.options.timing))}},{key:"disable",value:function(){var e=this;this._oldSlide=this.slider.slides.filter(function(t){return t.dataset.sliderIndex==e.slider.state.index})[0],this._newSlide=this.slider.slides.filter(function(t){return t.dataset.sliderIndex==e.slider.state.next})[0],this._newSlide&&(this._newSlide.removeEventListener("transitionend",this.onTransitionEnd.bind(this)),this._newSlide.style.transition="none",this._oldSlide&&(this._oldSlide.removeEventListener("transitionend",this.onTransitionEnd.bind(this)),this._oldSlide.style.transition="none"))}},{key:"apply",value:function(t){var e=this;this._oldSlide=this.slider.slides.filter(function(t){return t.dataset.sliderIndex==e.slider.state.index})[0],this._newSlide=this.slider.slides.filter(function(t){return t.dataset.sliderIndex==e.slider.state.next})[0],this._oldSlide&&this._newSlide&&(Object(s.a)(this._oldSlide,{opacity:0}),Object(s.a)(this._newSlide,{opacity:1,"z-index":t?0:-1}))}},{key:"onTransitionEnd",value:function(t){"fade"===this.options.effect&&(this.transitioner.isAnimating()&&t.target==this._newSlide&&(this._newSlide&&(Object(s.a)(this._newSlide,{"z-index":0}),this._newSlide.removeEventListener("transitionend",this.onTransitionEnd.bind(this))),this._oldSlide&&(Object(s.a)(this._oldSlide,{"z-index":-2}),this._oldSlide.removeEventListener("transitionend",this.onTransitionEnd.bind(this)))),this.transitioner.end())}}]),n}();e.a=n},function(t,e,i){"use strict";var r=i(4),o=i(0),s=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t},a=function(){function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();var n=function(){function n(t,e){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.transitioner=t,this.slider=e,this.options=s({},i),this.onTransitionEnd=this.onTransitionEnd.bind(this)}return a(n,[{key:"init",value:function(){return this._position=new r.a(this.slider.container.offsetLeft,this.slider.container.offsetTop),this._bindEvents(),this}},{key:"destroy",value:function(){this._unbindEvents()}},{key:"_bindEvents",value:function(){this.slider.container.addEventListener("transitionend",this.onTransitionEnd)}},{key:"_unbindEvents",value:function(){this.slider.container.removeEventListener("transitionend",this.onTransitionEnd)}},{key:"enable",value:function(){this.slider.container.style.transition=this.options.duration+"ms "+this.options.timing}},{key:"disable",value:function(){this.slider.container.style.transition="none"}},{key:"apply",value:function(){var e=this,t=void 0;if("translate"===this.options.effect){var i=this.slider.slides.filter(function(t){return t.dataset.sliderIndex==e.slider.state.next})[0],n=new r.a(i.offsetLeft,i.offsetTop);t=this.options.centerMode?new r.a(Math.round(Object(o.e)(this.slider.container)),Math.round(Object(o.b)(this.slider.container))):new r.a(Math.round(Object(o.e)(this.slider.container)-Object(o.e)(this.slider.wrapper)),Math.round(Object(o.b)(this.slider.container)-Object(o.b)(this.slider.wrapper)));var s=new r.a(Math.min(Math.max(-1*n.x,-1*t.x),0),Math.min(Math.max(-1*n.y,-1*t.y),0));this.options.loop&&(!this.options.vertical&&Math.abs(this._position.x)>t.x?(s.x=0,this.slider.state.next=0):this.options.vertical&&Math.abs(this._position.y)>t.y&&(s.y=0,this.slider.state.next=0)),this._position.x=s.x,this._position.y=s.y,this.options.centerMode&&(this._position.x=this._position.x+this.slider.wrapperWidth/2-Object(o.e)(i)/2),"rtl"===this.slider.direction&&(this._position.x=-this._position.x,this._position.y=-this._position.y),this.slider.container.style.transform="translate3d("+this._position.x+"px, "+this._position.y+"px, 0)",n.x>t.x&&this.slider.transitioner.end()}}},{key:"onTransitionEnd",value:function(t){"translate"===this.options.effect&&(this.transitioner.isAnimating()&&t.target==this.slider.container&&this.options.infinite&&this.slider._infinite.onTransitionEnd(t),this.transitioner.end())}}]),n}();e.a=n},function(t,e,i){"use strict";e.a={initialSlide:0,slidesToScroll:1,slidesToShow:1,navigation:!0,navigationKeys:!0,navigationSwipe:!0,pagination:!0,loop:!1,infinite:!1,effect:"translate",duration:300,timing:"ease",autoplay:!1,autoplaySpeed:3e3,pauseOnHover:!0,breakpoints:[{changePoint:480,slidesToShow:1,slidesToScroll:1},{changePoint:640,slidesToShow:2,slidesToScroll:2},{changePoint:768,slidesToShow:3,slidesToScroll:3}],onReady:null,icons:{previous:'<svg viewBox="0 0 50 80" xml:space="preserve">\n <polyline fill="currentColor" stroke-width=".5em" stroke-linecap="round" stroke-linejoin="round" points="45.63,75.8 0.375,38.087 45.63,0.375 "/>\n </svg>',next:'<svg viewBox="0 0 50 80" xml:space="preserve">\n <polyline fill="currentColor" stroke-width=".5em" stroke-linecap="round" stroke-linejoin="round" points="0.375,0.375 45.63,38.087 0.375,75.8 "/>\n </svg>'}}},function(t,e,i){"use strict";e.a=function(t){return'<div id="'+t+'" class="slider" tabindex="0">\n <div class="slider-container"></div>\n </div>'}},function(t,e,i){"use strict";e.a=function(){return'<div class="slider-item"></div>'}}]).default});
static/js/bulma-slider.js ADDED
@@ -0,0 +1,461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define([], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["bulmaSlider"] = factory();
8
+ else
9
+ root["bulmaSlider"] = factory();
10
+ })(typeof self !== 'undefined' ? self : this, function() {
11
+ return /******/ (function(modules) { // webpackBootstrap
12
+ /******/ // The module cache
13
+ /******/ var installedModules = {};
14
+ /******/
15
+ /******/ // The require function
16
+ /******/ function __webpack_require__(moduleId) {
17
+ /******/
18
+ /******/ // Check if module is in cache
19
+ /******/ if(installedModules[moduleId]) {
20
+ /******/ return installedModules[moduleId].exports;
21
+ /******/ }
22
+ /******/ // Create a new module (and put it into the cache)
23
+ /******/ var module = installedModules[moduleId] = {
24
+ /******/ i: moduleId,
25
+ /******/ l: false,
26
+ /******/ exports: {}
27
+ /******/ };
28
+ /******/
29
+ /******/ // Execute the module function
30
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
+ /******/
32
+ /******/ // Flag the module as loaded
33
+ /******/ module.l = true;
34
+ /******/
35
+ /******/ // Return the exports of the module
36
+ /******/ return module.exports;
37
+ /******/ }
38
+ /******/
39
+ /******/
40
+ /******/ // expose the modules object (__webpack_modules__)
41
+ /******/ __webpack_require__.m = modules;
42
+ /******/
43
+ /******/ // expose the module cache
44
+ /******/ __webpack_require__.c = installedModules;
45
+ /******/
46
+ /******/ // define getter function for harmony exports
47
+ /******/ __webpack_require__.d = function(exports, name, getter) {
48
+ /******/ if(!__webpack_require__.o(exports, name)) {
49
+ /******/ Object.defineProperty(exports, name, {
50
+ /******/ configurable: false,
51
+ /******/ enumerable: true,
52
+ /******/ get: getter
53
+ /******/ });
54
+ /******/ }
55
+ /******/ };
56
+ /******/
57
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
58
+ /******/ __webpack_require__.n = function(module) {
59
+ /******/ var getter = module && module.__esModule ?
60
+ /******/ function getDefault() { return module['default']; } :
61
+ /******/ function getModuleExports() { return module; };
62
+ /******/ __webpack_require__.d(getter, 'a', getter);
63
+ /******/ return getter;
64
+ /******/ };
65
+ /******/
66
+ /******/ // Object.prototype.hasOwnProperty.call
67
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
68
+ /******/
69
+ /******/ // __webpack_public_path__
70
+ /******/ __webpack_require__.p = "";
71
+ /******/
72
+ /******/ // Load entry module and return exports
73
+ /******/ return __webpack_require__(__webpack_require__.s = 0);
74
+ /******/ })
75
+ /************************************************************************/
76
+ /******/ ([
77
+ /* 0 */
78
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
79
+
80
+ "use strict";
81
+ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
82
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isString", function() { return isString; });
83
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__events__ = __webpack_require__(1);
84
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
85
+
86
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
87
+
88
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
89
+
90
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
91
+
92
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
93
+
94
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
95
+
96
+
97
+
98
+ var isString = function isString(unknown) {
99
+ return typeof unknown === 'string' || !!unknown && (typeof unknown === 'undefined' ? 'undefined' : _typeof(unknown)) === 'object' && Object.prototype.toString.call(unknown) === '[object String]';
100
+ };
101
+
102
+ var bulmaSlider = function (_EventEmitter) {
103
+ _inherits(bulmaSlider, _EventEmitter);
104
+
105
+ function bulmaSlider(selector) {
106
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
107
+
108
+ _classCallCheck(this, bulmaSlider);
109
+
110
+ var _this = _possibleConstructorReturn(this, (bulmaSlider.__proto__ || Object.getPrototypeOf(bulmaSlider)).call(this));
111
+
112
+ _this.element = typeof selector === 'string' ? document.querySelector(selector) : selector;
113
+ // An invalid selector or non-DOM node has been provided.
114
+ if (!_this.element) {
115
+ throw new Error('An invalid selector or non-DOM node has been provided.');
116
+ }
117
+
118
+ _this._clickEvents = ['click'];
119
+ /// Set default options and merge with instance defined
120
+ _this.options = _extends({}, options);
121
+
122
+ _this.onSliderInput = _this.onSliderInput.bind(_this);
123
+
124
+ _this.init();
125
+ return _this;
126
+ }
127
+
128
+ /**
129
+ * Initiate all DOM element containing selector
130
+ * @method
131
+ * @return {Array} Array of all slider instances
132
+ */
133
+
134
+
135
+ _createClass(bulmaSlider, [{
136
+ key: 'init',
137
+
138
+
139
+ /**
140
+ * Initiate plugin
141
+ * @method init
142
+ * @return {void}
143
+ */
144
+ value: function init() {
145
+ this._id = 'bulmaSlider' + new Date().getTime() + Math.floor(Math.random() * Math.floor(9999));
146
+ this.output = this._findOutputForSlider();
147
+
148
+ this._bindEvents();
149
+
150
+ if (this.output) {
151
+ if (this.element.classList.contains('has-output-tooltip')) {
152
+ // Get new output position
153
+ var newPosition = this._getSliderOutputPosition();
154
+
155
+ // Set output position
156
+ this.output.style['left'] = newPosition.position;
157
+ }
158
+ }
159
+
160
+ this.emit('bulmaslider:ready', this.element.value);
161
+ }
162
+ }, {
163
+ key: '_findOutputForSlider',
164
+ value: function _findOutputForSlider() {
165
+ var _this2 = this;
166
+
167
+ var result = null;
168
+ var outputs = document.getElementsByTagName('output') || [];
169
+
170
+ Array.from(outputs).forEach(function (output) {
171
+ if (output.htmlFor == _this2.element.getAttribute('id')) {
172
+ result = output;
173
+ return true;
174
+ }
175
+ });
176
+ return result;
177
+ }
178
+ }, {
179
+ key: '_getSliderOutputPosition',
180
+ value: function _getSliderOutputPosition() {
181
+ // Update output position
182
+ var newPlace, minValue;
183
+
184
+ var style = window.getComputedStyle(this.element, null);
185
+ // Measure width of range input
186
+ var sliderWidth = parseInt(style.getPropertyValue('width'), 10);
187
+
188
+ // Figure out placement percentage between left and right of input
189
+ if (!this.element.getAttribute('min')) {
190
+ minValue = 0;
191
+ } else {
192
+ minValue = this.element.getAttribute('min');
193
+ }
194
+ var newPoint = (this.element.value - minValue) / (this.element.getAttribute('max') - minValue);
195
+
196
+ // Prevent bubble from going beyond left or right (unsupported browsers)
197
+ if (newPoint < 0) {
198
+ newPlace = 0;
199
+ } else if (newPoint > 1) {
200
+ newPlace = sliderWidth;
201
+ } else {
202
+ newPlace = sliderWidth * newPoint;
203
+ }
204
+
205
+ return {
206
+ 'position': newPlace + 'px'
207
+ };
208
+ }
209
+
210
+ /**
211
+ * Bind all events
212
+ * @method _bindEvents
213
+ * @return {void}
214
+ */
215
+
216
+ }, {
217
+ key: '_bindEvents',
218
+ value: function _bindEvents() {
219
+ if (this.output) {
220
+ // Add event listener to update output when slider value change
221
+ this.element.addEventListener('input', this.onSliderInput, false);
222
+ }
223
+ }
224
+ }, {
225
+ key: 'onSliderInput',
226
+ value: function onSliderInput(e) {
227
+ e.preventDefault();
228
+
229
+ if (this.element.classList.contains('has-output-tooltip')) {
230
+ // Get new output position
231
+ var newPosition = this._getSliderOutputPosition();
232
+
233
+ // Set output position
234
+ this.output.style['left'] = newPosition.position;
235
+ }
236
+
237
+ // Check for prefix and postfix
238
+ var prefix = this.output.hasAttribute('data-prefix') ? this.output.getAttribute('data-prefix') : '';
239
+ var postfix = this.output.hasAttribute('data-postfix') ? this.output.getAttribute('data-postfix') : '';
240
+
241
+ // Update output with slider value
242
+ this.output.value = prefix + this.element.value + postfix;
243
+
244
+ this.emit('bulmaslider:ready', this.element.value);
245
+ }
246
+ }], [{
247
+ key: 'attach',
248
+ value: function attach() {
249
+ var _this3 = this;
250
+
251
+ var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'input[type="range"].slider';
252
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
253
+
254
+ var instances = new Array();
255
+
256
+ var elements = isString(selector) ? document.querySelectorAll(selector) : Array.isArray(selector) ? selector : [selector];
257
+ elements.forEach(function (element) {
258
+ if (typeof element[_this3.constructor.name] === 'undefined') {
259
+ var instance = new bulmaSlider(element, options);
260
+ element[_this3.constructor.name] = instance;
261
+ instances.push(instance);
262
+ } else {
263
+ instances.push(element[_this3.constructor.name]);
264
+ }
265
+ });
266
+
267
+ return instances;
268
+ }
269
+ }]);
270
+
271
+ return bulmaSlider;
272
+ }(__WEBPACK_IMPORTED_MODULE_0__events__["a" /* default */]);
273
+
274
+ /* harmony default export */ __webpack_exports__["default"] = (bulmaSlider);
275
+
276
+ /***/ }),
277
+ /* 1 */
278
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
279
+
280
+ "use strict";
281
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
282
+
283
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
284
+
285
+ var EventEmitter = function () {
286
+ function EventEmitter() {
287
+ var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
288
+
289
+ _classCallCheck(this, EventEmitter);
290
+
291
+ this._listeners = new Map(listeners);
292
+ this._middlewares = new Map();
293
+ }
294
+
295
+ _createClass(EventEmitter, [{
296
+ key: "listenerCount",
297
+ value: function listenerCount(eventName) {
298
+ if (!this._listeners.has(eventName)) {
299
+ return 0;
300
+ }
301
+
302
+ var eventListeners = this._listeners.get(eventName);
303
+ return eventListeners.length;
304
+ }
305
+ }, {
306
+ key: "removeListeners",
307
+ value: function removeListeners() {
308
+ var _this = this;
309
+
310
+ var eventName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
311
+ var middleware = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
312
+
313
+ if (eventName !== null) {
314
+ if (Array.isArray(eventName)) {
315
+ name.forEach(function (e) {
316
+ return _this.removeListeners(e, middleware);
317
+ });
318
+ } else {
319
+ this._listeners.delete(eventName);
320
+
321
+ if (middleware) {
322
+ this.removeMiddleware(eventName);
323
+ }
324
+ }
325
+ } else {
326
+ this._listeners = new Map();
327
+ }
328
+ }
329
+ }, {
330
+ key: "middleware",
331
+ value: function middleware(eventName, fn) {
332
+ var _this2 = this;
333
+
334
+ if (Array.isArray(eventName)) {
335
+ name.forEach(function (e) {
336
+ return _this2.middleware(e, fn);
337
+ });
338
+ } else {
339
+ if (!Array.isArray(this._middlewares.get(eventName))) {
340
+ this._middlewares.set(eventName, []);
341
+ }
342
+
343
+ this._middlewares.get(eventName).push(fn);
344
+ }
345
+ }
346
+ }, {
347
+ key: "removeMiddleware",
348
+ value: function removeMiddleware() {
349
+ var _this3 = this;
350
+
351
+ var eventName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
352
+
353
+ if (eventName !== null) {
354
+ if (Array.isArray(eventName)) {
355
+ name.forEach(function (e) {
356
+ return _this3.removeMiddleware(e);
357
+ });
358
+ } else {
359
+ this._middlewares.delete(eventName);
360
+ }
361
+ } else {
362
+ this._middlewares = new Map();
363
+ }
364
+ }
365
+ }, {
366
+ key: "on",
367
+ value: function on(name, callback) {
368
+ var _this4 = this;
369
+
370
+ var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
371
+
372
+ if (Array.isArray(name)) {
373
+ name.forEach(function (e) {
374
+ return _this4.on(e, callback);
375
+ });
376
+ } else {
377
+ name = name.toString();
378
+ var split = name.split(/,|, | /);
379
+
380
+ if (split.length > 1) {
381
+ split.forEach(function (e) {
382
+ return _this4.on(e, callback);
383
+ });
384
+ } else {
385
+ if (!Array.isArray(this._listeners.get(name))) {
386
+ this._listeners.set(name, []);
387
+ }
388
+
389
+ this._listeners.get(name).push({ once: once, callback: callback });
390
+ }
391
+ }
392
+ }
393
+ }, {
394
+ key: "once",
395
+ value: function once(name, callback) {
396
+ this.on(name, callback, true);
397
+ }
398
+ }, {
399
+ key: "emit",
400
+ value: function emit(name, data) {
401
+ var _this5 = this;
402
+
403
+ var silent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
404
+
405
+ name = name.toString();
406
+ var listeners = this._listeners.get(name);
407
+ var middlewares = null;
408
+ var doneCount = 0;
409
+ var execute = silent;
410
+
411
+ if (Array.isArray(listeners)) {
412
+ listeners.forEach(function (listener, index) {
413
+ // Start Middleware checks unless we're doing a silent emit
414
+ if (!silent) {
415
+ middlewares = _this5._middlewares.get(name);
416
+ // Check and execute Middleware
417
+ if (Array.isArray(middlewares)) {
418
+ middlewares.forEach(function (middleware) {
419
+ middleware(data, function () {
420
+ var newData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
421
+
422
+ if (newData !== null) {
423
+ data = newData;
424
+ }
425
+ doneCount++;
426
+ }, name);
427
+ });
428
+
429
+ if (doneCount >= middlewares.length) {
430
+ execute = true;
431
+ }
432
+ } else {
433
+ execute = true;
434
+ }
435
+ }
436
+
437
+ // If Middleware checks have been passed, execute
438
+ if (execute) {
439
+ if (listener.once) {
440
+ listeners[index] = null;
441
+ }
442
+ listener.callback(data);
443
+ }
444
+ });
445
+
446
+ // Dirty way of removing used Events
447
+ while (listeners.indexOf(null) !== -1) {
448
+ listeners.splice(listeners.indexOf(null), 1);
449
+ }
450
+ }
451
+ }
452
+ }]);
453
+
454
+ return EventEmitter;
455
+ }();
456
+
457
+ /* harmony default export */ __webpack_exports__["a"] = (EventEmitter);
458
+
459
+ /***/ })
460
+ /******/ ])["default"];
461
+ });
static/js/bulma-slider.min.js ADDED
@@ -0,0 +1 @@
 
 
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.bulmaSlider=e():t.bulmaSlider=e()}("undefined"!=typeof self?self:this,function(){return function(n){var r={};function i(t){if(r[t])return r[t].exports;var e=r[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,i),e.l=!0,e.exports}return i.m=n,i.c=r,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=0)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"isString",function(){return l});var r=n(1),i=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},u=function(){function r(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}}(),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};var l=function(t){return"string"==typeof t||!!t&&"object"===(void 0===t?"undefined":o(t))&&"[object String]"===Object.prototype.toString.call(t)},a=function(t){function o(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o);var n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));if(n.element="string"==typeof t?document.querySelector(t):t,!n.element)throw new Error("An invalid selector or non-DOM node has been provided.");return n._clickEvents=["click"],n.options=i({},e),n.onSliderInput=n.onSliderInput.bind(n),n.init(),n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,r["a"]),u(o,[{key:"init",value:function(){if(this._id="bulmaSlider"+(new Date).getTime()+Math.floor(Math.random()*Math.floor(9999)),this.output=this._findOutputForSlider(),this._bindEvents(),this.output&&this.element.classList.contains("has-output-tooltip")){var t=this._getSliderOutputPosition();this.output.style.left=t.position}this.emit("bulmaslider:ready",this.element.value)}},{key:"_findOutputForSlider",value:function(){var e=this,n=null,t=document.getElementsByTagName("output")||[];return Array.from(t).forEach(function(t){if(t.htmlFor==e.element.getAttribute("id"))return n=t,!0}),n}},{key:"_getSliderOutputPosition",value:function(){var t,e=window.getComputedStyle(this.element,null),n=parseInt(e.getPropertyValue("width"),10);t=this.element.getAttribute("min")?this.element.getAttribute("min"):0;var r=(this.element.value-t)/(this.element.getAttribute("max")-t);return{position:(r<0?0:1<r?n:n*r)+"px"}}},{key:"_bindEvents",value:function(){this.output&&this.element.addEventListener("input",this.onSliderInput,!1)}},{key:"onSliderInput",value:function(t){if(t.preventDefault(),this.element.classList.contains("has-output-tooltip")){var e=this._getSliderOutputPosition();this.output.style.left=e.position}var n=this.output.hasAttribute("data-prefix")?this.output.getAttribute("data-prefix"):"",r=this.output.hasAttribute("data-postfix")?this.output.getAttribute("data-postfix"):"";this.output.value=n+this.element.value+r,this.emit("bulmaslider:ready",this.element.value)}}],[{key:"attach",value:function(){var n=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:'input[type="range"].slider',r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=new Array;return(l(t)?document.querySelectorAll(t):Array.isArray(t)?t:[t]).forEach(function(t){if(void 0===t[n.constructor.name]){var e=new o(t,r);t[n.constructor.name]=e,i.push(e)}else i.push(t[n.constructor.name])}),i}}]),o}();e.default=a},function(t,e,n){"use strict";var r=function(){function r(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}}();var i=function(){function e(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this._listeners=new Map(t),this._middlewares=new Map}return r(e,[{key:"listenerCount",value:function(t){return this._listeners.has(t)?this._listeners.get(t).length:0}},{key:"removeListeners",value:function(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,n=1<arguments.length&&void 0!==arguments[1]&&arguments[1];null!==t?Array.isArray(t)?name.forEach(function(t){return e.removeListeners(t,n)}):(this._listeners.delete(t),n&&this.removeMiddleware(t)):this._listeners=new Map}},{key:"middleware",value:function(t,e){var n=this;Array.isArray(t)?name.forEach(function(t){return n.middleware(t,e)}):(Array.isArray(this._middlewares.get(t))||this._middlewares.set(t,[]),this._middlewares.get(t).push(e))}},{key:"removeMiddleware",value:function(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null;null!==t?Array.isArray(t)?name.forEach(function(t){return e.removeMiddleware(t)}):this._middlewares.delete(t):this._middlewares=new Map}},{key:"on",value:function(t,e){var n=this,r=2<arguments.length&&void 0!==arguments[2]&&arguments[2];if(Array.isArray(t))t.forEach(function(t){return n.on(t,e)});else{var i=(t=t.toString()).split(/,|, | /);1<i.length?i.forEach(function(t){return n.on(t,e)}):(Array.isArray(this._listeners.get(t))||this._listeners.set(t,[]),this._listeners.get(t).push({once:r,callback:e}))}}},{key:"once",value:function(t,e){this.on(t,e,!0)}},{key:"emit",value:function(n,r){var i=this,o=2<arguments.length&&void 0!==arguments[2]&&arguments[2];n=n.toString();var u=this._listeners.get(n),l=null,a=0,s=o;if(Array.isArray(u))for(u.forEach(function(t,e){o||(l=i._middlewares.get(n),Array.isArray(l)?(l.forEach(function(t){t(r,function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null;null!==t&&(r=t),a++},n)}),a>=l.length&&(s=!0)):s=!0),s&&(t.once&&(u[e]=null),t.callback(r))});-1!==u.indexOf(null);)u.splice(u.indexOf(null),1)}}]),e}();e.a=i}]).default});
static/js/fontawesome.all.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/js/index.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ window.HELP_IMPROVE_VIDEOJS = false;
2
+
3
+
4
+ $(document).ready(function() {
5
+ // Check for click events on the navbar burger icon
6
+
7
+ var options = {
8
+ slidesToScroll: 1,
9
+ slidesToShow: 1,
10
+ loop: true,
11
+ infinite: true,
12
+ autoplay: true,
13
+ autoplaySpeed: 5000,
14
+ }
15
+
16
+ // Initialize all div with carousel class
17
+ var carousels = bulmaCarousel.attach('.carousel', options);
18
+
19
+ bulmaSlider.attach();
20
+
21
+ })
subspecialties.json ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "Addiction Medicine",
3
+ "Addiction Psychiatry",
4
+ "Adolescent Medicine",
5
+ "Adult Cardiac Anesthesiology",
6
+ "Adult Congenital Heart Disease",
7
+ "Advanced Heart Failure and Transplant Cardiology",
8
+ "Anesthesiology Critical Care Medicine",
9
+ "Blood Banking/Transfusion Medicine",
10
+ "Brain Injury Medicine",
11
+ "Cardiovascular Disease",
12
+ "Child Abuse Pediatrics",
13
+ "Child and Adolescent Psychiatry",
14
+ "Clinical Cardiac Electrophysiology",
15
+ "Clinical Informatics",
16
+ "Clinical Neurophysiology",
17
+ "Complex Family Planning",
18
+ "Complex General Surgical Oncology",
19
+ "Complex Pediatric Otolaryngology",
20
+ "Congenital Cardiac Surgery",
21
+ "Consultation-Liaison Psychiatry",
22
+ "Critical Care Medicine",
23
+ "Cytopathology",
24
+ "Dermatopathology",
25
+ "Developmental-Behavioral Pediatrics",
26
+ "Emergency Medical Services",
27
+ "Endocrinology, Diabetes and Metabolism",
28
+ "Epilepsy",
29
+ "Forensic Psychiatry",
30
+ "Gastroenterology",
31
+ "Geriatric Medicine",
32
+ "Geriatric Psychiatry",
33
+ "Gynecologic Oncology",
34
+ "Health Care Administration, Leadership, and Management*",
35
+ "Hematology",
36
+ "Hematopathology",
37
+ "Hospice and Palliative Medicine",
38
+ "Infectious Disease",
39
+ "Internal Medicine-Critical Care Medicine",
40
+ "Interventional Cardiology",
41
+ "Maternal-Fetal Medicine",
42
+ "Medical Biochemical Genetics",
43
+ "Medical Oncology",
44
+ "Medical Toxicology",
45
+ "Micrographic Dermatologic Surgery",
46
+ "Molecular Genetic Pathology",
47
+ "Neonatal-Perinatal Medicine",
48
+ "Nephrology",
49
+ "Neurocritical Care",
50
+ "Neurodevelopmental Disabilities",
51
+ "Neuromuscular Medicine",
52
+ "Neuropathology",
53
+ "Neuroradiology",
54
+ "Neurotology",
55
+ "Nuclear Radiology",
56
+ "Orthopaedic Sports Medicine",
57
+ "Pain Medicine",
58
+ "Pathology - Chemical",
59
+ "Pathology - Forensic",
60
+ "Pathology - Medical Microbiology",
61
+ "Pathology - Molecular Genetic",
62
+ "Pathology - Pediatric",
63
+ "Pediatric Anesthesiology",
64
+ "Pediatric Cardiology",
65
+ "Pediatric Critical Care Medicine",
66
+ "Pediatric Dermatology",
67
+ "Pediatric Emergency Medicine",
68
+ "Pediatric Endocrinology",
69
+ "Pediatric Gastroenterology",
70
+ "Pediatric Hematology-Oncology",
71
+ "Pediatric Hospital Medicine",
72
+ "Pediatric Infectious Diseases",
73
+ "Pediatric Nephrology",
74
+ "Pediatric Pulmonology",
75
+ "Pediatric Radiology",
76
+ "Pediatric Rehabilitation Medicine",
77
+ "Pediatric Rheumatology",
78
+ "Pediatric Surgery",
79
+ "Pediatric Transplant Hepatology",
80
+ "Pediatric Urology",
81
+ "Plastic Surgery Within the Head and Neck*",
82
+ "Pulmonary Disease",
83
+ "Reproductive Endocrinology and Infertility",
84
+ "Rheumatology",
85
+ "Sleep Medicine",
86
+ "Spinal Cord Injury Medicine",
87
+ "Sports Medicine",
88
+ "Surgery of the Hand",
89
+ "Surgical Critical Care",
90
+ "Transplant Hepatology",
91
+ "Undersea and Hyperbaric Medicine",
92
+ "Urogynecology and Reconstructive Pelvic Surgery",
93
+ "Vascular Neurology"
94
+ ]
tool_lists/chembl_tools.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "ChEMBLTool",
4
+ "name": "ChEMBL_search_similar_molecules",
5
+ "description": "Search for molecules similar to a given SMILES, chembl_id, or compound or drug name, using the ChEMBL Web Services.",
6
+ "parameter": {
7
+ "type": "object",
8
+ "properties": {
9
+ "query": { "type": "string", "description": "SMILES string, chembl_id, or compound or drug name." },
10
+ "similarity_threshold": { "type": "integer", "description": "Similarity threshold (0–100).", "default": 80 },
11
+ "max_results": { "type": "integer", "description": "Maximum number of results to return.", "default": 20 }
12
+ },
13
+ "required": ["query"]
14
+ }
15
+ }
16
+ ]
tool_lists/efo_tools.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "EFOTool",
4
+ "name": "OSL_get_efo_id_by_disease_name",
5
+ "description": "Tool to lookup Experimental Factor Ontology (EFO) IDs for diseases via the EMBL-EBI OLS API.",
6
+ "parameter": {
7
+ "type": "object",
8
+ "properties": {
9
+ "disease": {
10
+ "type": "string",
11
+ "description": "Search query for diseases. Provide the disease name to lookup the corresponding EFO ID."
12
+ }
13
+ },
14
+ "required": ["disease"]
15
+ }
16
+ }
17
+ ]
tool_lists/europe_pmc_tools.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "EuropePMCTool",
4
+ "name": "EuropePMC_search_articles",
5
+ "description": "Search for articles on Europe PMC including abstracts. The tool queries the Europe PMC web service using provided keywords and returns articles with details such as title, abstract, journal, publication year, and a URL to the full article.",
6
+ "parameter": {
7
+ "type": "object",
8
+ "properties": {
9
+ "query": {
10
+ "type": "string",
11
+ "description": "Search query for Europe PMC. Use keywords separated by spaces to refine your search."
12
+ },
13
+ "limit": {
14
+ "type": "integer",
15
+ "description": "Number of articles to return. This sets the maximum number of articles retrieved from Europe PMC.",
16
+ "default": 5
17
+ }
18
+ },
19
+ "required": ["query"]
20
+ }
21
+ }
22
+ ]
tool_lists/fda_drug_adverse_event_tools.json ADDED
@@ -0,0 +1,491 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "FDADrugAdverseEventTool",
4
+ "name": "FAERS_count_reactions_by_drug_event",
5
+ "description": "Count the number of adverse reactions reported for a given drug, filtered by patient details, event seriousness, and reaction outcomes. Data source: FDA Adverse Event Reporting System (FAERS).",
6
+ "parameter": {
7
+ "type": "object",
8
+ "properties": {
9
+ "medicinalproduct": { "type": "string", "description": "Drug name." },
10
+ "patient.patientsex": { "type": "string", "enum": ["Male", "Female"], "description": "Patient sex, leave it blank if you don't want to apply a filter." },
11
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate", "Infant", "Child", "Adolescent", "Adult", "Elderly"], "description": "Patient age group." },
12
+ "occurcountry": { "type": "string", "pattern": "^[A-Z]{2}$", "description": "Country where event occurred." },
13
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Whether the event was serious." },
14
+ "seriousnessdeath": { "type": "string", "enum": ["Yes", "No"], "description": "Was death reported?" }
15
+ },
16
+ "required": ["medicinalproduct"]
17
+ },
18
+ "fields": {
19
+ "search_fields": {
20
+ "medicinalproduct": ["patient.drug.medicinalproduct"],
21
+ "patient.patientsex": ["patient.patientsex"],
22
+ "patient.patientagegroup": ["patient.patientagegroup"],
23
+ "occurcountry": ["occurcountry"],
24
+ "serious": ["serious"],
25
+ "seriousnessdeath": ["seriousnessdeath"]
26
+ },
27
+ "return_fields": ["patient.reaction.reactionmeddrapt.exact"]
28
+ }
29
+ },
30
+ {
31
+ "type": "FDADrugAdverseEventTool",
32
+ "name": "FAERS_count_drugs_by_drug_event",
33
+ "description": "Count the number of different drugs involved in FDA adverse event reports, filtered by patient details, country, and seriousness. Data source: FDA Adverse Event Reporting System (FAERS).",
34
+ "parameter": {
35
+ "type": "object",
36
+ "properties": {
37
+ "patient.patientsex": { "type": "string", "enum": ["Male", "Female"], "description": "Patient sex, leave it blank if you don't want to apply a filter." },
38
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate", "Infant", "Child", "Adolescent", "Adult", "Elderly"], "description": "Patient age group." },
39
+ "occurcountry": { "type": "string", "pattern": "^[A-Z]{2}$", "description": "Country where event occurred." },
40
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Whether the event was serious." }
41
+ },
42
+ "required": []
43
+ },
44
+ "fields": {
45
+ "search_fields": {
46
+ "patient.patientsex": ["patient.patientsex"],
47
+ "patient.patientagegroup": ["patient.patientagegroup"],
48
+ "occurcountry": ["occurcountry"],
49
+ "serious": ["serious"]
50
+ },
51
+ "return_fields": ["patient.drug.medicinalproduct.exact"]
52
+ }
53
+ },
54
+ {
55
+ "type": "FDADrugAdverseEventTool",
56
+ "name": "FAERS_count_country_by_drug_event",
57
+ "description": "Count the number of adverse event reports per country of occurrence, filtered by drug, patient demographics, and seriousness. Data source: FDA Adverse Event Reporting System (FAERS).",
58
+ "parameter": {
59
+ "type": "object",
60
+ "properties": {
61
+ "medicinalproduct": { "type": "string", "description": "Drug name." },
62
+ "patient.patientsex": { "type": "string", "enum": ["Male", "Female"], "description": "Patient sex, leave it blank if you don't want to apply a filter." },
63
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate", "Infant", "Child", "Adolescent", "Adult", "Elderly"], "description": "Patient age group." },
64
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Whether the event was serious." }
65
+ },
66
+ "required": []
67
+ },
68
+ "fields": {
69
+ "search_fields": {
70
+ "medicinalproduct": ["patient.drug.medicinalproduct"],
71
+ "patient.patientsex": ["patient.patientsex"],
72
+ "patient.patientagegroup": ["patient.patientagegroup"],
73
+ "serious": ["serious"]
74
+ },
75
+ "return_fields": ["occurcountry.exact"]
76
+ }
77
+ },
78
+ {
79
+ "type": "FDADrugAdverseEventTool",
80
+ "name": "FAERS_count_reportercountry_by_drug_event",
81
+ "description": "Count the number of FDA adverse event reports grouped by the country of the primary reporter. Data source: FDA Adverse Event Reporting System (FAERS).",
82
+ "parameter": {
83
+ "type": "object",
84
+ "properties": {
85
+ "medicinalproduct": { "type": "string", "description": "Drug name." },
86
+ "patient.patientsex": { "type": "string", "enum": ["Male", "Female"], "description": "Patient sex, leave it blank if you don't want to apply a filter." },
87
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate", "Infant", "Child", "Adolescent", "Adult", "Elderly"], "description": "Patient age group." },
88
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Whether the event was serious." }
89
+ },
90
+ "required": []
91
+ },
92
+ "fields": {
93
+ "search_fields": {
94
+ "medicinalproduct": ["patient.drug.medicinalproduct"],
95
+ "patient.patientsex": ["patient.patientsex"],
96
+ "patient.patientagegroup": ["patient.patientagegroup"],
97
+ "serious": ["serious"]
98
+ },
99
+ "return_fields": ["primarysource.reportercountry.exact"]
100
+ }
101
+ },
102
+ {
103
+ "type": "FDADrugAdverseEventTool",
104
+ "name": "FAERS_count_seriousness_by_drug_event",
105
+ "description": "Count the number of adverse event reports classified as serious or non-serious, filtered by drug and patient demographics. In results, term Serious means: 'The adverse event resulted in death, a life threatening condition, hospitalization, disability, congenital anomaly, or other serious condition', term Non-serious means 'The adverse event did not result in any of the above' Data source: FDA Adverse Event Reporting System (FAERS).",
106
+ "parameter": {
107
+ "type": "object",
108
+ "properties": {
109
+ "medicinalproduct": { "type": "string", "description": "Drug name." },
110
+ "patient.patientsex": { "type": "string", "enum": ["Male", "Female"], "description": "Patient sex, leave it blank if you don't want to apply a filter." },
111
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate", "Infant", "Child", "Adolescent", "Adult", "Elderly"], "description": "Patient age group." },
112
+ "occurcountry": { "type": "string", "pattern": "^[A-Z]{2}$", "description": "Country where event occurred." }
113
+ },
114
+ "required": []
115
+ },
116
+ "fields": {
117
+ "search_fields": {
118
+ "medicinalproduct": ["patient.drug.medicinalproduct"],
119
+ "patient.patientsex": ["patient.patientsex"],
120
+ "patient.patientagegroup": ["patient.patientagegroup"],
121
+ "occurcountry": ["occurcountry"]
122
+ },
123
+ "return_fields": ["serious"],
124
+ "return_fields_mapping": {
125
+ "serious": {
126
+ "1": "Serious",
127
+ "2": "Non-serious"
128
+ }
129
+ }
130
+ }
131
+ },
132
+ {
133
+ "type": "FDADrugAdverseEventTool",
134
+ "name": "FAERS_count_outcomes_by_drug_event",
135
+ "description": "Count the outcome of adverse reactions (recovered, recovering, fatal, unresolved) filtered by drug, seriousness, and demographics. Data source: FDA Adverse Event Reporting System (FAERS).",
136
+ "parameter": {
137
+ "type": "object",
138
+ "properties": {
139
+ "medicinalproduct": { "type": "string", "description": "Drug name." },
140
+ "patient.patientsex": { "type": "string", "enum": [ "Male", "Female"] },
141
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate", "Infant", "Child", "Adolescent", "Adult", "Elderly"] },
142
+ "occurcountry": { "type": "string", "pattern": "^[A-Z]{2}$" }
143
+ },
144
+ "required": ["medicinalproduct"]
145
+ },
146
+ "fields": {
147
+ "search_fields": {
148
+ "medicinalproduct": ["patient.drug.medicinalproduct"],
149
+ "patient.patientsex": ["patient.patientsex"],
150
+ "patient.patientagegroup": ["patient.patientagegroup"],
151
+ "occurcountry": ["occurcountry"]
152
+ },
153
+ "return_fields": ["patient.reaction.reactionoutcome"],
154
+ "return_fields_mapping": {
155
+ "patient.reaction.reactionoutcome": {
156
+ "1": "Recovered/resolved",
157
+ "2": "Recovering/resolving",
158
+ "3": "Not recovered/not resolved",
159
+ "4": "Recovered/resolved with sequelae (consequent health issues)",
160
+ "5": "Fatal",
161
+ "6": "Unknown"
162
+ }
163
+ }
164
+ }
165
+ },
166
+ {
167
+ "type": "FDADrugAdverseEventTool",
168
+ "name": "FAERS_count_drug_routes_by_event",
169
+ "description": "Count the most common routes of administration for drugs involved in adverse event reports. Data source: FDA Adverse Event Reporting System (FAERS).",
170
+ "parameter": {
171
+ "type": "object",
172
+ "properties": {
173
+ "medicinalproduct": { "type": "string", "description": "Drug name." },
174
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Seriousness of event." }
175
+ },
176
+ "required": ["medicinalproduct"]
177
+ },
178
+ "fields": {
179
+ "search_fields": {
180
+ "medicinalproduct": ["patient.drug.medicinalproduct"],
181
+ "serious": ["serious"]
182
+ },
183
+ "return_fields": ["patient.drug.drugadministrationroute.exact"],
184
+ "return_fields_mapping": {
185
+ "patient.drug.drugadministrationroute.exact": {
186
+ "001": "Auricular (otic)",
187
+ "002": "Buccal",
188
+ "003": "Cutaneous",
189
+ "004": "Dental",
190
+ "005": "Endocervical",
191
+ "006": "Endosinusial",
192
+ "007": "Endotracheal",
193
+ "008": "Epidural",
194
+ "009": "Extra-amniotic",
195
+ "010": "Hemodialysis",
196
+ "011": "Intra corpus cavernosum",
197
+ "012": "Intra-amniotic",
198
+ "013": "Intra-arterial",
199
+ "014": "Intra-articular",
200
+ "015": "Intra-uterine",
201
+ "016": "Intracardiac",
202
+ "017": "Intracavernous",
203
+ "018": "Intracerebral",
204
+ "019": "Intracervical",
205
+ "020": "Intracisternal",
206
+ "021": "Intracorneal",
207
+ "022": "Intracoronary",
208
+ "023": "Intradermal",
209
+ "024": "Intradiscal (intraspinal)",
210
+ "025": "Intrahepatic",
211
+ "026": "Intralesional",
212
+ "027": "Intralymphatic",
213
+ "028": "Intramedullar (bone marrow)",
214
+ "029": "Intrameningeal",
215
+ "030": "Intramuscular",
216
+ "031": "Intraocular",
217
+ "032": "Intrapericardial",
218
+ "033": "Intraperitoneal",
219
+ "034": "Intrapleural",
220
+ "035": "Intrasynovial",
221
+ "036": "Intratumor",
222
+ "037": "Intrathecal",
223
+ "038": "Intrathoracic",
224
+ "039": "Intratracheal",
225
+ "040": "Intravenous bolus",
226
+ "041": "Intravenous drip",
227
+ "042": "Intravenous (not otherwise specified)",
228
+ "043": "Intravesical",
229
+ "044": "Iontophoresis",
230
+ "045": "Nasal",
231
+ "046": "Occlusive dressing technique",
232
+ "047": "Ophthalmic",
233
+ "048": "Oral",
234
+ "049": "Oropharingeal",
235
+ "050": "Other",
236
+ "051": "Parenteral",
237
+ "052": "Periarticular",
238
+ "053": "Perineural",
239
+ "054": "Rectal",
240
+ "055": "Respiratory (inhalation)",
241
+ "056": "Retrobulbar",
242
+ "057": "Sunconjunctival",
243
+ "058": "Subcutaneous",
244
+ "059": "Subdermal",
245
+ "060": "Sublingual",
246
+ "061": "Topical",
247
+ "062": "Transdermal",
248
+ "063": "Transmammary",
249
+ "064": "Transplacental",
250
+ "065": "Unknown",
251
+ "066": "Urethral",
252
+ "067": "Vaginal"
253
+ }
254
+ }
255
+ }
256
+ },
257
+ {
258
+ "type": "FDADrugAdverseEventTool",
259
+ "name": "FAERS_count_patient_age_distribution",
260
+ "description": "Analyze the age distribution of patients experiencing adverse events for a specific drug. The age groups are: Neonate (0-28 days), Infant (29 days - 23 months), Child (2-11 years), Adolescent (12-17 years), Adult (18-64 years), Elderly (65+ years). Data source: FDA Adverse Event Reporting System (FAERS).",
261
+ "parameter": {
262
+ "type": "object",
263
+ "properties": {
264
+ "medicinalproduct": { "type": "string", "description": "Drug name." }
265
+ },
266
+ "required": ["medicinalproduct"]
267
+ },
268
+ "fields": {
269
+ "search_fields": {
270
+ "medicinalproduct": ["patient.drug.medicinalproduct"]
271
+ },
272
+ "return_fields": ["patient.patientagegroup"],
273
+ "return_fields_mapping": {
274
+ "patient.patientagegroup": {
275
+ "1": "Neonate",
276
+ "2": "Infant",
277
+ "3": "Child",
278
+ "4": "Adolescent",
279
+ "5": "Adult",
280
+ "6": "Elderly"
281
+ }
282
+ }
283
+ }
284
+ },
285
+ {
286
+ "type": "FDADrugAdverseEventTool",
287
+ "name": "FAERS_count_death_related_by_drug",
288
+ "description": "Count adverse events associated with patient death for a given drug. Data source: FDA Adverse Event Reporting System (FAERS).",
289
+ "parameter": {
290
+ "type": "object",
291
+ "properties": {
292
+ "medicinalproduct": { "type": "string", "description": "Drug name." }
293
+ },
294
+ "required": ["medicinalproduct"]
295
+ },
296
+ "fields": {
297
+ "search_fields": {
298
+ "medicinalproduct": ["patient.drug.medicinalproduct"],
299
+ "seriousnessdeath": ["seriousnessdeath"]
300
+ },
301
+ "return_fields": ["seriousnessdeath"],
302
+ "return_fields_mapping": {
303
+ "seriousnessdeath": {
304
+ "1": "death",
305
+ "2": "alive"
306
+ }
307
+ }
308
+ }
309
+ },
310
+ {
311
+ "type": "FDACountAdditiveReactionsTool",
312
+ "name": "FAERS_count_additive_adverse_reactions",
313
+ "description": "Additive multi-drug data: Aggregate adverse reaction counts across specified medicinal products, stratified by demographics, seriousness, and outcomes. Data source: FDA Adverse Event Reporting System (FAERS).",
314
+ "parameter": {
315
+ "type": "object",
316
+ "properties": {
317
+ "medicinalproducts": { "type": "array", "items": { "type": "string" }, "description": "Array of medicinal product names." },
318
+ "patient.patientsex": { "type": "string", "enum": ["Male","Female"], "description": "Filter by patient sex." },
319
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate","Infant","Child","Adolescent","Adult","Elderly"], "description": "Filter by patient age group." },
320
+ "occurcountry": { "type": "string", "pattern": "^[A-Z]{2}$", "description": "Filter by ISO2 country code of occurrence." },
321
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Filter by seriousness classification." },
322
+ "seriousnessdeath": { "type": "string", "enum": ["Yes","No"], "description": "Filter for fatal outcomes." }
323
+ },
324
+ "required": ["medicinalproducts"]
325
+ },
326
+ "fields": {
327
+ "search_fields": {
328
+ "medicinalproducts": ["patient.drug.medicinalproduct"],
329
+ "patient.patientsex": ["patient.patientsex"],
330
+ "patient.patientagegroup": ["patient.patientagegroup"],
331
+ "occurcountry": ["occurcountry"],
332
+ "serious": ["serious"],
333
+ "seriousnessdeath": ["seriousnessdeath"]
334
+ },
335
+ "return_fields": ["patient.reaction.reactionmeddrapt.exact"]
336
+ }
337
+ },
338
+ {
339
+ "type": "FDACountAdditiveReactionsTool",
340
+ "name": "FAERS_count_additive_event_reports_by_country",
341
+ "description": "Additive multi-drug data: Aggregate report counts by country of occurrence across specified medicinal products. Data source: FDA Adverse Event Reporting System (FAERS).",
342
+ "parameter": {
343
+ "type": "object",
344
+ "properties": {
345
+ "medicinalproducts": { "type": "array", "items": { "type": "string" }, "description": "Array of medicinal product names." },
346
+ "patient.patientsex": { "type": "string", "enum": ["Male","Female"], "description": "Filter by sex." },
347
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate","Infant","Child","Adolescent","Adult","Elderly"], "description": "Filter by age group." },
348
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Filter by seriousness." }
349
+ },
350
+ "required": ["medicinalproducts"]
351
+ },
352
+ "fields": {
353
+ "search_fields": {
354
+ "medicinalproducts": ["patient.drug.medicinalproduct"],
355
+ "patient.patientsex": ["patient.patientsex"],
356
+ "patient.patientagegroup": ["patient.patientagegroup"],
357
+ "serious": ["serious"]
358
+ },
359
+ "return_fields": ["occurcountry.exact"]
360
+ }
361
+ },
362
+ {
363
+ "type": "FDACountAdditiveReactionsTool",
364
+ "name": "FAERS_count_additive_reports_by_reporter_country",
365
+ "description": "Additive multi-drug data: Aggregate adverse event reports by primary reporter country across medicinal products. Data source: FDA Adverse Event Reporting System (FAERS).",
366
+ "parameter": {
367
+ "type": "object",
368
+ "properties": {
369
+ "medicinalproducts": { "type": "array", "items": { "type": "string" }, "description": "Array of medicinal product names." },
370
+ "patient.patientsex": { "type": "string", "enum": ["Male","Female"], "description": "Filter by sex." },
371
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate","Infant","Child","Adolescent","Adult","Elderly"], "description": "Filter by age group." },
372
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Filter by seriousness." }
373
+ },
374
+ "required": ["medicinalproducts"]
375
+ },
376
+ "fields": {
377
+ "search_fields": {
378
+ "medicinalproducts": ["patient.drug.medicinalproduct"],
379
+ "patient.patientsex": ["patient.patientsex"],
380
+ "patient.patientagegroup": ["patient.patientagegroup"],
381
+ "serious": ["serious"]
382
+ },
383
+ "return_fields": ["primarysource.reportercountry.exact"]
384
+ }
385
+ },
386
+ {
387
+ "type": "FDACountAdditiveReactionsTool",
388
+ "name": "FAERS_count_additive_seriousness_classification",
389
+ "description": "Additive multi-drug data: Quantify serious vs non-serious classifications across medicinal products, annotated per regulatory definitions. Data source: FDA Adverse Event Reporting System (FAERS).",
390
+ "parameter": {
391
+ "type": "object",
392
+ "properties": {
393
+ "medicinalproducts": { "type": "array", "items": { "type": "string" }, "description": "Array of medicinal product names." },
394
+ "patient.patientsex": { "type": "string", "enum": ["Male","Female"], "description": "Filter by sex." },
395
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate","Infant","Child","Adolescent","Adult","Elderly"], "description": "Filter by age group." },
396
+ "occurcountry": { "type": "string", "pattern": "^[A-Z]{2}$", "description": "ISO2 country code filter." }
397
+ },
398
+ "required": ["medicinalproducts"]
399
+ },
400
+ "fields": {
401
+ "search_fields": {
402
+ "medicinalproducts": ["patient.drug.medicinalproduct"],
403
+ "patient.patientsex": ["patient.patientsex"],
404
+ "patient.patientagegroup": ["patient.patientagegroup"],
405
+ "occurcountry": ["occurcountry"]
406
+ },
407
+ "return_fields": ["serious"],
408
+ "return_fields_mapping": { "serious": { "1": "Serious", "2": "Non-serious" } }
409
+ }
410
+ },
411
+ {
412
+ "type": "FDACountAdditiveReactionsTool",
413
+ "name": "FAERS_count_additive_reaction_outcomes",
414
+ "description": "Additive multi-drug data: Determine reaction outcome counts (e.g., recovered, resolving, fatal) across medicinal products using standardized outcome mappings. Data source: FDA Adverse Event Reporting System (FAERS).",
415
+ "parameter": {
416
+ "type": "object",
417
+ "properties": {
418
+ "medicinalproducts": { "type": "array", "items": { "type": "string" }, "description": "Array of medicinal product names." },
419
+ "patient.patientsex": { "type": "string", "enum": ["Male","Female"] },
420
+ "patient.patientagegroup": { "type": "string", "enum": ["Neonate","Infant","Child","Adolescent","Adult","Elderly"] },
421
+ "occurcountry": { "type": "string", "pattern": "^[A-Z]{2}$" }
422
+ },
423
+ "required": ["medicinalproducts"]
424
+ },
425
+ "fields": {
426
+ "search_fields": {
427
+ "medicinalproducts": ["patient.drug.medicinalproduct"],
428
+ "patient.patientsex": ["patient.patientsex"],
429
+ "patient.patientagegroup": ["patient.patientagegroup"],
430
+ "occurcountry": ["occurcountry"]
431
+ },
432
+ "return_fields": ["patient.reaction.reactionoutcome"],
433
+ "return_fields_mapping": {
434
+ "patient.reaction.reactionoutcome": {
435
+ "1": "Recovered/resolved",
436
+ "2": "Recovering/resolving",
437
+ "3": "Not recovered/not resolved",
438
+ "4": "Recovered/resolved with sequelae",
439
+ "5": "Fatal",
440
+ "6": "Unknown"
441
+ }
442
+ }
443
+ }
444
+ },
445
+ {
446
+ "type": "FDACountAdditiveReactionsTool",
447
+ "name": "FAERS_count_additive_administration_routes",
448
+ "description": "Additive multi-drug data: Enumerate and count administration routes for adverse events across specified medicinal products, using standardized route codes. Data source: FDA Adverse Event Reporting System (FAERS).",
449
+ "parameter": {
450
+ "type": "object",
451
+ "properties": {
452
+ "medicinalproducts": { "type": "array", "items": { "type": "string" }, "description": "Array of medicinal product names." },
453
+ "serious": { "type": "string", "enum": ["Yes","No"], "description": "Filter by seriousness." }
454
+ },
455
+ "required": ["medicinalproducts"]
456
+ },
457
+ "fields": {
458
+ "search_fields": {
459
+ "medicinalproducts": ["patient.drug.medicinalproduct"],
460
+ "serious": ["serious"]
461
+ },
462
+ "return_fields": ["patient.drug.drugadministrationroute.exact"],
463
+ "return_fields_mapping": {
464
+ "patient.drug.drugadministrationroute.exact": {
465
+ "001": "Auricular (otic)", "002": "Buccal", "003": "Cutaneous", "004": "Dental",
466
+ "005": "Endocervical", "006": "Endosinusial", "007": "Endotracheal", "008": "Epidural",
467
+ "009": "Extra-amniotic", "010": "Hemodialysis", "011": "Intra corpus cavernosum",
468
+ "012": "Intra-amniotic", "013": "Intra-arterial", "014": "Intra-articular",
469
+ "015": "Intra-uterine", "016": "Intracardiac", "017": "Intracavernous",
470
+ "018": "Intracerebral", "019": "Intracervical", "020": "Intracisternal",
471
+ "021": "Intracorneal", "022": "Intracoronary", "023": "Intradermal",
472
+ "024": "Intradiscal (intraspinal)", "025": "Intrahepatic", "026": "Intralesional",
473
+ "027": "Intralymphatic", "028": "Intramedullar (bone marrow)", "029": "Intrameningeal",
474
+ "030": "Intramuscular", "031": "Intraocular", "032": "Intrapericardial",
475
+ "033": "Intraperitoneal", "034": "Intrapleural", "035": "Intrasynovial",
476
+ "036": "Intratumor", "037": "Intrathecal", "038": "Intrathoracic",
477
+ "039": "Intratracheal", "040": "Intravenous bolus", "041": "Intravenous drip",
478
+ "042": "Intravenous (not otherwise specified)", "043": "Intravesical",
479
+ "044": "Iontophoresis", "045": "Nasal", "046": "Occlusive dressing technique",
480
+ "047": "Ophthalmic", "048": "Oral", "049": "Oropharingeal", "050": "Other",
481
+ "051": "Parenteral", "052": "Periarticular", "053": "Perineural",
482
+ "054": "Rectal", "055": "Respiratory (inhalation)", "056": "Retrobulbar",
483
+ "057": "Sunconjunctival", "058": "Subcutaneous", "059": "Subdermal",
484
+ "060": "Sublingual", "061": "Topical", "062": "Transdermal",
485
+ "063": "Transmammary", "064": "Transplacental", "065": "Unknown",
486
+ "066": "Urethral", "067": "Vaginal"
487
+ }
488
+ }
489
+ }
490
+ }
491
+ ]
tool_lists/fda_drug_labeling_tools.json ADDED
The diff for this file is too large to render. See raw diff
 
tool_lists/monarch_tools.json ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "get_joint_associated_diseases_by_HPO_ID_list",
4
+ "description": "Retrieve diseases associated with a list of phenotypes or symptoms by a list of HPO IDs.",
5
+ "parameter": {
6
+ "type": "object",
7
+ "properties": {
8
+ "HPO_ID_list": {
9
+ "type": "array",
10
+ "description": "List of phenotypes or symptoms",
11
+ "items": {
12
+ "type": "string",
13
+ "description": "The HPO ID of the phenotype or symptom.",
14
+ "required": true
15
+ },
16
+ "required": true
17
+ },
18
+ "limit": {
19
+ "type": "integer",
20
+ "description": "Number of entries to fetch.",
21
+ "required": false
22
+ },
23
+ "offset": {
24
+ "type": "integer",
25
+ "description": "Number of initial entries to skip.",
26
+ "required": false
27
+ }
28
+ }
29
+ },
30
+ "query_schema": {
31
+ "category": [
32
+ "biolink:DiseaseToPhenotypicFeatureAssociation"
33
+ ],
34
+ "object": null,
35
+ "compact": true,
36
+ "object_category": [
37
+ "biolink:PhenotypicFeature"
38
+ ],
39
+ "limit": 500,
40
+ "offset": 0
41
+ },
42
+ "label": [
43
+ "Monarch",
44
+ "Phenotype",
45
+ "Symptom",
46
+ "Disease",
47
+ "HPO_ID"
48
+ ],
49
+ "type": "MonarchDiseasesForMultiplePheno",
50
+ "tool_url": "/association"
51
+ },
52
+ {
53
+ "name": "get_phenotype_by_HPO_ID",
54
+ "description": "Retrieve a phenotype or symptom by its HPO ID.",
55
+ "parameter": {
56
+ "type": "object",
57
+ "properties": {
58
+ "id": {
59
+ "type": "string",
60
+ "description": "The HPO ID of the phenotype or symptom.",
61
+ "required": true
62
+ }
63
+ }
64
+ },
65
+ "query_schema": {
66
+ "id": null,
67
+ "url_key": "id"
68
+ },
69
+ "label": [
70
+ "Monarch",
71
+ "Phenotype",
72
+ "Symptom",
73
+ "HPO_ID"
74
+ ],
75
+ "type": "Monarch",
76
+ "tool_url": "/entity/{url_key}"
77
+ },
78
+ {
79
+ "name": "get_HPO_ID_by_phenotype",
80
+ "description": "Retrieve the HPO ID of a phenotype or symptom.",
81
+ "parameter": {
82
+ "type": "object",
83
+ "properties": {
84
+ "query": {
85
+ "type": "string",
86
+ "description": "One query phenotype or symptom.",
87
+ "required": true
88
+ },
89
+ "limit": {
90
+ "type": "integer",
91
+ "description": "Number of entries to fetch.",
92
+ "required": false
93
+ },
94
+ "offset": {
95
+ "type": "integer",
96
+ "description": "Number of initial entries to skip.",
97
+ "required": false
98
+ }
99
+ }
100
+ },
101
+ "query_schema": {
102
+ "query": null,
103
+ "category": [
104
+ "biolink:PhenotypicFeature"
105
+ ],
106
+ "limit": 20,
107
+ "offset": 0
108
+ },
109
+ "label": [
110
+ "Monarch",
111
+ "Phenotype",
112
+ "Symptom",
113
+ "HPO_ID"
114
+ ],
115
+ "type": "Monarch",
116
+ "tool_url": "/search"
117
+ }
118
+ ]
tool_lists/opentarget_tools.json ADDED
@@ -0,0 +1,1439 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "OpenTargets_get_associated_targets_by_disease_efoId",
4
+ "description": "Find targets associated with a specific disease or phenotype based on efoId.",
5
+ "label": [
6
+ "Disease",
7
+ "Phenotype",
8
+ "Target",
9
+ "Association",
10
+ "OpenTarget",
11
+ "GraphQL"
12
+ ],
13
+ "parameter": {
14
+ "type": "object",
15
+ "properties": {
16
+ "efoId": {
17
+ "type": "string",
18
+ "description": "The efoId of a disease or phenotype.",
19
+ "required": true
20
+ }
21
+ }
22
+ },
23
+ "query_schema": "\nquery associatedTargets($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n associatedTargets {\n count\n rows {\n target {\n id\n approvedSymbol\n }\n score\n }\n }\n }\n}\n",
24
+ "type": "OpenTarget"
25
+ },
26
+ {
27
+ "name": "OpenTargets_get_associated_diseases_phenotypes_by_target_ensemblID",
28
+ "description": "Find diseases or phenotypes associated with a specific target using ensemblId.",
29
+ "label": [
30
+ "Target",
31
+ "Disease",
32
+ "Phenotype",
33
+ "Association",
34
+ "OpenTarget",
35
+ "GraphQL"
36
+ ],
37
+ "parameter": {
38
+ "type": "object",
39
+ "properties": {
40
+ "ensemblId": {
41
+ "type": "string",
42
+ "description": "The ensemblId of a target.",
43
+ "required": true
44
+ }
45
+ }
46
+ },
47
+ "query_schema": "\nquery associatedDiseases($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n associatedDiseases {\n count\n rows {\n disease {\n id\n name\n }\n datasourceScores {\n id\n score\n }\n }\n }\n }\n}\n",
48
+ "type": "OpenTarget"
49
+ },
50
+ {
51
+ "name": "OpenTargets_target_disease_evidence",
52
+ "description": "Explore evidence that supports a specific target-disease association. Input is disease efoId and target ensemblID.",
53
+ "label": [
54
+ "Target",
55
+ "Disease",
56
+ "Evidence",
57
+ "Association",
58
+ "OpenTarget",
59
+ "GraphQL"
60
+ ],
61
+ "parameter": {
62
+ "type": "object",
63
+ "properties": {
64
+ "efoId": {
65
+ "type": "string",
66
+ "description": "The efoId of a disease or phenotype.",
67
+ "required": true
68
+ },
69
+ "ensemblId": {
70
+ "type": "string",
71
+ "description": "The ensemblId of a target.",
72
+ "required": true
73
+ }
74
+ }
75
+ },
76
+ "query_schema": "\nquery targetDiseaseEvidence($efoId: String!, $ensemblId: String!) {\n disease(efoId: $efoId) {\n id\n name\n evidences(datasourceIds: [\"intogen\"], ensemblIds: [$ensemblId]) {\n count\n rows {\n disease {\n id\n name\n }\n diseaseFromSource\n target {\n id\n approvedSymbol\n }\n mutatedSamples {\n functionalConsequence {\n id\n label\n }\n numberSamplesTested\n numberMutatedSamples\n }\n resourceScore\n significantDriverMethods\n cohortId\n cohortShortName\n cohortDescription\n }\n }\n }\n}\n",
77
+ "type": "OpenTarget"
78
+ },
79
+ {
80
+ "name": "OpenTargets_get_drug_warnings_by_chemblId",
81
+ "description": "Retrieve warnings for a specific drug using ChEMBL ID.",
82
+ "parameter": {
83
+ "type": "object",
84
+ "properties": {
85
+ "chemblId": {
86
+ "type": "string",
87
+ "description": "The ChEMBL ID of the drug.",
88
+ "required": true
89
+ }
90
+ }
91
+ },
92
+ "query_schema": "\n query drugWarnings($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n drugWarnings {\n warningType\n description\n country\n year\n toxicityClass\n chemblIds\n efoIdForWarningClass\n references {\n id\n source\n url\n }\n }\n }\n }\n ",
93
+ "label": [
94
+ "Drug",
95
+ "AdverseEvents",
96
+ "SafetyLiability",
97
+ "OpenTarget",
98
+ "GraphQL",
99
+ "Warnings",
100
+ "Safety",
101
+ "Withdrawal",
102
+ "Toxicity"
103
+ ],
104
+ "type": "OpenTarget"
105
+ },
106
+ {
107
+ "name": "OpenTargets_get_drug_mechanisms_of_action_by_chemblId",
108
+ "description": "Retrieve the mechanisms of action associated with a specific drug using chemblId.",
109
+ "parameter": {
110
+ "type": "object",
111
+ "properties": {
112
+ "chemblId": {
113
+ "type": "string",
114
+ "description": "The ChEMBL ID of the drug.",
115
+ "required": true
116
+ }
117
+ }
118
+ },
119
+ "query_schema": "\n query drugMechanismsOfAction($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n mechanismsOfAction {\n rows {\n mechanismOfAction\n actionType\n targetName\n targets {\n id\n approvedSymbol\n }\n }\n }\n }\n }\n ",
120
+ "label": [
121
+ "Drug",
122
+ "MechanismsOfAction",
123
+ "Target",
124
+ "Pharmacology",
125
+ "ChemblId",
126
+ "OpenTarget",
127
+ "GraphQL"
128
+ ],
129
+ "type": "OpenTarget"
130
+ },
131
+ {
132
+ "name": "OpenTargets_get_associated_drugs_by_disease_efoId",
133
+ "description": "Retrieve known drugs associated with a specific disease by disease efoId.",
134
+ "parameter": {
135
+ "type": "object",
136
+ "properties": {
137
+ "efoId": {
138
+ "type": "string",
139
+ "description": "The EFO ID of the disease.",
140
+ "required": true
141
+ },
142
+ "size": {
143
+ "type": "integer",
144
+ "description": "Number of entries to fetch, recomanding a large number to avoid missing drugs.",
145
+ "required": true
146
+ }
147
+ }
148
+ },
149
+ "query_schema": "\n query diseaseKnownDrugs($efoId: String!, $size: Int!, $freeTextQuery: String) {\n disease(efoId: $efoId) {\n id\n name\n knownDrugs(size: $size, freeTextQuery: $freeTextQuery) {\n count\n rows {\n drug {\n id\n name\n tradeNames\n maximumClinicalTrialPhase\n isApproved\n hasBeenWithdrawn\n }\n phase\n status\n mechanismOfAction\n target {\n id\n approvedSymbol\n }\n }\n }\n }\n }\n ",
150
+ "label": [
151
+ "OpenTarget",
152
+ "Disease",
153
+ "Drug",
154
+ "Pagination",
155
+ "GraphQL"
156
+ ],
157
+ "type": "OpenTarget"
158
+ },
159
+ {
160
+ "name": "OpenTargets_get_similar_entities_by_disease_efoId",
161
+ "description": "Retrieve similar entities for a given disease efoId using a model trained with PubMed.",
162
+ "parameter": {
163
+ "type": "object",
164
+ "properties": {
165
+ "efoId": {
166
+ "type": "string",
167
+ "description": "The EFO ID of the disease.",
168
+ "required": true
169
+ },
170
+ "threshold": {
171
+ "type": "number",
172
+ "description": "Threshold similarity between 0 and 1. Only results above threshold are returned.",
173
+ "required": true
174
+ },
175
+ "size": {
176
+ "type": "integer",
177
+ "description": "Number of similar entities to fetch.",
178
+ "required": true
179
+ }
180
+ }
181
+ },
182
+ "query_schema": "\n query diseaseSimilarEntities($efoId: String!, $threshold: Float!, $size: Int!) {\n disease(efoId: $efoId) {\n id\n name\n similarEntities(threshold: $threshold, size: $size) {\n id\n category\n score\n object {\n ... on Disease {\n id\n name\n }\n ... on Target {\n id\n approvedSymbol\n }\n ... on Drug {\n id\n name\n }\n }\n }\n }\n }\n ",
183
+ "label": [
184
+ "Disease",
185
+ "Similarity",
186
+ "Model",
187
+ "Entities",
188
+ "OpenTarget",
189
+ "GraphQL"
190
+ ],
191
+ "type": "OpenTarget"
192
+ },
193
+ {
194
+ "name": "OpenTargets_get_similar_entities_by_drug_chemblId",
195
+ "description": "Retrieve similar entities for a given drug chemblId using a model trained with PubMed.",
196
+ "parameter": {
197
+ "type": "object",
198
+ "properties": {
199
+ "chemblId": {
200
+ "type": "string",
201
+ "description": "The chemblId of the disease.",
202
+ "required": true
203
+ },
204
+ "threshold": {
205
+ "type": "number",
206
+ "description": "Threshold similarity between 0 and 1. Only results above threshold are returned.",
207
+ "required": true
208
+ },
209
+ "size": {
210
+ "type": "integer",
211
+ "description": "Number of similar entities to fetch.",
212
+ "required": true
213
+ }
214
+ }
215
+ },
216
+ "query_schema": "\n query diseaseSimilarEntities($chemblId: String!, $threshold: Float!, $size: Int!) {\n drug(chemblId: $chemblId) {\n id\n name\n similarEntities(threshold: $threshold, size: $size) {\n id\n category\n score\n object {\n ... on Disease {\n id\n name\n }\n ... on Target {\n id\n approvedSymbol\n }\n ... on Drug {\n id\n name\n }\n }\n }\n }\n }\n ",
217
+ "label": [
218
+ "Drug",
219
+ "Similarity",
220
+ "Model",
221
+ "Entities",
222
+ "OpenTarget",
223
+ "GraphQL"
224
+ ],
225
+ "type": "OpenTarget"
226
+ },
227
+ {
228
+ "name": "OpenTargets_get_similar_entities_by_target_ensemblID",
229
+ "description": "Retrieve similar entities for a given target ensemblID using a model trained with PubMed.",
230
+ "parameter": {
231
+ "type": "object",
232
+ "properties": {
233
+ "ensemblId": {
234
+ "type": "string",
235
+ "description": "The ensemblID of the disease.",
236
+ "required": true
237
+ },
238
+ "threshold": {
239
+ "type": "number",
240
+ "description": "Threshold similarity between 0 and 1. Only results above threshold are returned.",
241
+ "required": true
242
+ },
243
+ "size": {
244
+ "type": "integer",
245
+ "description": "Number of similar entities to fetch.",
246
+ "required": true
247
+ }
248
+ }
249
+ },
250
+ "query_schema": "\n query diseaseSimilarEntities($ensemblId: String!, $threshold: Float!, $size: Int!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n similarEntities(threshold: $threshold, size: $size) {\n id\n category\n score\n object {\n ... on Disease {\n id\n name\n }\n ... on Target {\n id\n approvedSymbol\n }\n ... on Drug {\n id\n name\n }\n }\n }\n }\n }\n ",
251
+ "label": [
252
+ "Disease",
253
+ "Similarity",
254
+ "Model",
255
+ "Entities",
256
+ "OpenTarget",
257
+ "GraphQL"
258
+ ],
259
+ "type": "OpenTarget"
260
+ },
261
+ {
262
+ "name": "OpenTargets_get_associated_phenotypes_by_disease_efoId",
263
+ "description": "Find HPO phenotypes asosciated with the specified disease efoId.",
264
+ "parameter": {
265
+ "type": "object",
266
+ "properties": {
267
+ "efoId": {
268
+ "type": "string",
269
+ "description": "The efoId of a disease or phenotype.",
270
+ "required": true
271
+ }
272
+ }
273
+ },
274
+ "query_schema": "query diseaseAnnotation($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n phenotypes {\n rows {\n phenotypeHPO {\n id\n name\n description\n namespace\n }\n phenotypeEFO {\n id\n name\n }\n }\n }\n }\n}",
275
+ "label": [
276
+ "Disease",
277
+ "OpenTarget",
278
+ "GraphQL",
279
+ "Phenotype",
280
+ "Symptoms",
281
+ "Clinical signs"
282
+ ],
283
+ "type": "OpenTarget"
284
+ },
285
+ {
286
+ "name": "OpenTargets_get_drug_withdrawn_blackbox_status_by_chemblId",
287
+ "description": "Find withdrawn and black-box warning statuses for a specific drug by chemblId.",
288
+ "parameter": {
289
+ "type": "object",
290
+ "properties": {
291
+ "chemblId": {
292
+ "type": "array",
293
+ "items": {
294
+ "type": "string"
295
+ },
296
+ "description": "The chemblId of a drug.",
297
+ "required": true
298
+ }
299
+ }
300
+ },
301
+ "query_schema": "\n query drugWithdrawnWarningData($chemblId: String!) {\n drug(chemblId: $chemblId) {\n name\n id\n hasBeenWithdrawn\n blackBoxWarning\n }\n }\n ",
302
+ "label": [
303
+ "Drug",
304
+ "SafetyWarnings",
305
+ "Withdrawal",
306
+ "OpenTarget",
307
+ "GraphQL"
308
+ ],
309
+ "type": "OpenTarget"
310
+ },
311
+ {
312
+ "name": "OpenTargets_search_category_counts_by_query_string",
313
+ "description": "Get the count of entries in each entity category (disease, target, drug) based on a query string.",
314
+ "parameter": {
315
+ "type": "object",
316
+ "properties": {
317
+ "queryString": {
318
+ "type": "string",
319
+ "description": "The search string for querying information.",
320
+ "required": true
321
+ }
322
+ }
323
+ },
324
+ "query_schema": "\n query searchCategoryCounts($queryString: String!) {\n search(queryString: $queryString) {\n aggregations {\n total\n entities {\n total\n name\n }\n }\n }\n }\n ",
325
+ "label": [
326
+ "OpenTarget",
327
+ "GraphQL",
328
+ "SearchResults",
329
+ "Search",
330
+ "Query",
331
+ "Counts",
332
+ "Categories"
333
+ ],
334
+ "type": "OpenTarget"
335
+ },
336
+ {
337
+ "name": "OpenTargets_get_disease_id_description_by_name",
338
+ "description": "Retrieve the efoId and additional details of a disease based on its name.",
339
+ "parameter": {
340
+ "type": "object",
341
+ "properties": {
342
+ "diseaseName": {
343
+ "type": "string",
344
+ "description": "The name of the disease to search for.",
345
+ "required": true
346
+ }
347
+ }
348
+ },
349
+ "query_schema": "\n query getDiseaseIdByName($diseaseName: String!) {\n search(queryString: $diseaseName, entityNames: [\"disease\"]) {\n hits {\n id\n name\n description\n }\n }\n }\n ",
350
+ "label": [
351
+ "Disease",
352
+ "Identification",
353
+ "Search",
354
+ "Name",
355
+ "Disease",
356
+ "OpenTarget",
357
+ "GraphQL"
358
+ ],
359
+ "type": "OpenTarget"
360
+ },
361
+ {
362
+ "name": "OpenTargets_get_drug_id_description_by_name",
363
+ "description": "Fetch the drug chemblId and description based on the drug generic name.",
364
+ "parameter": {
365
+ "type": "object",
366
+ "properties": {
367
+ "drugName": {
368
+ "type": "string",
369
+ "description": "The name of the drug for which the ID is required.",
370
+ "required": true
371
+ }
372
+ }
373
+ },
374
+ "query_schema": "\n query getDrugIdByName($drugName: String!) {\n search(queryString: $drugName, entityNames: [\"drug\"]) {\n hits {\n id\n name\n description\n }\n }\n }\n ",
375
+ "label": [
376
+ "Identification",
377
+ "Search",
378
+ "Name",
379
+ "Drug",
380
+ "OpenTarget",
381
+ "GraphQL"
382
+ ],
383
+ "type": "OpentargetToolDrugNameMatch"
384
+ },
385
+ {
386
+ "name": "OpenTargets_get_drug_chembId_by_generic_name",
387
+ "description": "Fetch the drug chemblId and description based on the drug generic name.",
388
+ "parameter": {
389
+ "type": "object",
390
+ "properties": {
391
+ "drugName": {
392
+ "type": "string",
393
+ "description": "The generic name of the drug for which the ID is required.",
394
+ "required": true
395
+ }
396
+ }
397
+ },
398
+ "query_schema": "\n query getDrugIdByName($drugName: String!) {\n search(queryString: $drugName, entityNames: [\"drug\"]) {\n hits {\n id\n name\n description\n }\n }\n }\n ",
399
+ "label": [
400
+ "Identification",
401
+ "Search",
402
+ "Name",
403
+ "Drug",
404
+ "OpenTarget",
405
+ "GraphQL"
406
+ ],
407
+ "type": "OpentargetToolDrugNameMatch"
408
+ },
409
+ {
410
+ "name": "OpenTargets_get_drug_indications_by_chemblId",
411
+ "description": "Fetch indications (treatable phenotypes/diseases) for a given drug chemblId.",
412
+ "parameter": {
413
+ "type": "object",
414
+ "properties": {
415
+ "chemblId": {
416
+ "type": "string",
417
+ "description": "The chemblId of the drug for which to retrieve treatable phenotypes information.",
418
+ "required": true
419
+ }
420
+ }
421
+ },
422
+ "query_schema": "\n query drugIndications($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n indications {\n rows {\n disease {\n id\n name\n }\n maxPhaseForIndication\n references {\n source\n }\n }\n }\n }\n }\n ",
423
+ "label": [
424
+ "Drug",
425
+ "Indications",
426
+ "Disease",
427
+ "Treatment",
428
+ "OpenTarget",
429
+ "GraphQL"
430
+ ],
431
+ "type": "OpenTarget"
432
+ },
433
+ {
434
+ "name": "OpenTargets_get_target_gene_ontology_by_ensemblID",
435
+ "description": "Retrieve Gene Ontology annotations for a specific target by Ensembl ID.",
436
+ "parameter": {
437
+ "type": "object",
438
+ "properties": {
439
+ "ensemblId": {
440
+ "type": "string",
441
+ "description": "The Ensembl ID of the target for which to retrieve Gene Ontology annotations.",
442
+ "required": true
443
+ }
444
+ }
445
+ },
446
+ "query_schema": "\n query targetGeneOntology($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n geneOntology {\n aspect\n evidence\n geneProduct\n source\n term {\n id\n name\n }\n }\n }\n }\n ",
447
+ "label": [
448
+ "Target",
449
+ "GeneOntology",
450
+ "OpenTarget",
451
+ "GraphQL"
452
+ ],
453
+ "type": "OpenTarget"
454
+ },
455
+ {
456
+ "name": "OpenTargets_get_target_homologues_by_ensemblID",
457
+ "description": "Fetch homologues for a specific target by Ensembl ID.",
458
+ "parameter": {
459
+ "type": "object",
460
+ "properties": {
461
+ "ensemblId": {
462
+ "type": "string",
463
+ "description": "The Ensembl ID of the target for which to retrieve homologues.",
464
+ "required": true
465
+ }
466
+ }
467
+ },
468
+ "query_schema": "\n query targetHomologues($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n homologues {\n homologyType\n queryPercentageIdentity\n speciesId\n speciesName\n targetGeneId\n targetGeneSymbol\n targetPercentageIdentity\n isHighConfidence\n }\n }\n }\n ",
469
+ "label": [
470
+ "OpenTarget",
471
+ "Target Information",
472
+ "GraphQL",
473
+ "Homologue"
474
+ ],
475
+ "type": "OpenTarget"
476
+ },
477
+ {
478
+ "name": "OpenTargets_get_target_safety_profile_by_ensemblID",
479
+ "description": "Retrieve known target safety liabilities for a specific target Ensembl ID.",
480
+ "parameter": {
481
+ "type": "object",
482
+ "properties": {
483
+ "ensemblId": {
484
+ "type": "string",
485
+ "description": "The Ensembl ID of the target for which to retrieve safety liabilities.",
486
+ "required": true
487
+ }
488
+ }
489
+ },
490
+ "query_schema": "\n query targetSafetyLiabilities($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n safetyLiabilities {\n event\n eventId\n biosamples {\n cellFormat\n cellLabel\n tissueLabel\n tissueId\n }\n effects {\n dosing\n direction\n }\n studies {\n name\n type\n description\n }\n datasource\n literature\n }\n }\n }\n ",
491
+ "label": [
492
+ "Target",
493
+ "SafetyLiability",
494
+ "OpenTarget",
495
+ "GraphQL",
496
+ "Safety",
497
+ "Liabilities"
498
+ ],
499
+ "type": "OpenTarget"
500
+ },
501
+ {
502
+ "name": "OpenTargets_get_biological_mouse_models_by_ensemblID",
503
+ "description": "Retrieve biological mouse models, including allelic compositions and genetic backgrounds, for a specific target.",
504
+ "parameter": {
505
+ "type": "object",
506
+ "properties": {
507
+ "ensemblId": {
508
+ "type": "string",
509
+ "description": "The Ensembl ID of the target.",
510
+ "required": true
511
+ }
512
+ }
513
+ },
514
+ "query_schema": "\n query fetchBiologicalModels($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n mousePhenotypes {\n biologicalModels {\n allelicComposition\n geneticBackground\n id\n literature\n }\n }\n }\n }\n ",
515
+ "label": [
516
+ "OpenTarget",
517
+ "Target Information",
518
+ "BiologicalModels",
519
+ "GraphQL"
520
+ ],
521
+ "type": "OpenTarget"
522
+ },
523
+ {
524
+ "name": "OpenTargets_get_target_genomic_location_by_ensemblID",
525
+ "description": "Retrieve genomic location data for a specific target, including chromosome, start, end, and strand.",
526
+ "parameter": {
527
+ "type": "object",
528
+ "properties": {
529
+ "ensemblId": {
530
+ "type": "string",
531
+ "description": "The Ensembl ID of the target for which to retrieve genomic location information.",
532
+ "required": true
533
+ }
534
+ }
535
+ },
536
+ "query_schema": "\n query targetGenomicLocation($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n genomicLocation {\n chromosome\n start\n end\n strand\n }\n }\n }\n ",
537
+ "label": [
538
+ "Target",
539
+ "GenomicLocation",
540
+ "OpenTarget",
541
+ "GraphQL"
542
+ ],
543
+ "type": "OpenTarget"
544
+ },
545
+ {
546
+ "name": "OpenTargets_get_target_subcellular_locations_by_ensemblID",
547
+ "description": "Retrieve information about subcellular locations for a specific target ensemblID.",
548
+ "parameter": {
549
+ "type": "object",
550
+ "properties": {
551
+ "ensemblId": {
552
+ "type": "string",
553
+ "description": "The ensemblId of a target.",
554
+ "required": true
555
+ }
556
+ }
557
+ },
558
+ "query_schema": "\n query targetSubcellularLocations($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n subcellularLocations {\n location\n source\n termSL\n labelSL\n }\n }\n }\n ",
559
+ "label": [
560
+ "Target",
561
+ "Subcellular Locations",
562
+ "GraphQL",
563
+ "OpenTarget"
564
+ ],
565
+ "type": "OpenTarget"
566
+ },
567
+ {
568
+ "name": "OpenTargets_get_target_synonyms_by_ensemblID",
569
+ "description": "Retrieve synonyms for specified target, including alternative names and symbols, using given ensemblID.",
570
+ "parameter": {
571
+ "type": "object",
572
+ "properties": {
573
+ "ensemblId": {
574
+ "type": "string",
575
+ "description": "The Ensembl ID of the target.",
576
+ "required": true
577
+ }
578
+ }
579
+ },
580
+ "query_schema": "\n query retrieveTargetSynonyms($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n synonyms {\n label\n source\n }\n symbolSynonyms {\n label\n source\n }\n nameSynonyms {\n label\n source\n }\n }\n }\n ",
581
+ "label": [
582
+ "OpenTarget",
583
+ "Target Information",
584
+ "GraphQL",
585
+ "Target"
586
+ ],
587
+ "type": "OpenTarget"
588
+ },
589
+ {
590
+ "name": "OpenTargets_get_target_tractability_by_ensemblID",
591
+ "description": "Retrieve tractability assessments, including modality and values, for a specific target ensembl ID.",
592
+ "parameter": {
593
+ "type": "object",
594
+ "properties": {
595
+ "ensemblId": {
596
+ "type": "string",
597
+ "description": "The Ensembl ID of the target.",
598
+ "required": true
599
+ }
600
+ }
601
+ },
602
+ "query_schema": "\n query targetTractabilityAssessment($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n tractability {\n label\n modality\n value\n }\n }\n }\n ",
603
+ "label": [
604
+ "Target",
605
+ "Tractability",
606
+ "OpenTarget",
607
+ "Target Information",
608
+ "GraphQL"
609
+ ],
610
+ "type": "OpenTarget"
611
+ },
612
+ {
613
+ "name": "OpenTargets_get_target_classes_by_ensemblID",
614
+ "description": "Retrieve the target classes associated with a specific target ensemblID.",
615
+ "parameter": {
616
+ "type": "object",
617
+ "properties": {
618
+ "ensemblId": {
619
+ "type": "string",
620
+ "description": "The Ensembl ID of the target.",
621
+ "required": true
622
+ }
623
+ }
624
+ },
625
+ "query_schema": "\n query fetchTargetClasses($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n targetClass {\n id\n label\n level\n }\n }\n }\n ",
626
+ "label": [
627
+ "OpenTarget",
628
+ "Target Information",
629
+ "GraphQL",
630
+ "Target"
631
+ ],
632
+ "type": "OpenTarget"
633
+ },
634
+ {
635
+ "name": "OpenTargets_get_target_enabling_packages_by_ensemblID",
636
+ "description": "Retrieve the Target Enabling Packages (TEP) associated with a specific target ensemblID.",
637
+ "parameter": {
638
+ "type": "object",
639
+ "properties": {
640
+ "ensemblId": {
641
+ "type": "string",
642
+ "description": "The Ensembl ID of the target.",
643
+ "required": true
644
+ }
645
+ }
646
+ },
647
+ "query_schema": "\n query fetchTargetEnablingPackages($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n tep {\n name\n uri\n therapeuticArea\n description\n }\n }\n }\n ",
648
+ "label": [
649
+ "OpenTarget",
650
+ "Target Information",
651
+ "GraphQL",
652
+ "Target"
653
+ ],
654
+ "type": "OpenTarget"
655
+ },
656
+ {
657
+ "name": "OpenTargets_get_target_interactions_by_ensemblID",
658
+ "description": "Retrieve interaction data for a specific target ensemblID, including interaction partners and evidence.",
659
+ "label": [
660
+ "Target",
661
+ "Interaction",
662
+ "Evidence",
663
+ "GraphQL",
664
+ "Pagination",
665
+ "OpenTarget"
666
+ ],
667
+ "parameter": {
668
+ "type": "object",
669
+ "properties": {
670
+ "ensemblId": {
671
+ "type": "string",
672
+ "description": "The Ensembl ID of the target.",
673
+ "required": true
674
+ },
675
+ "page": {
676
+ "type": "object",
677
+ "properties": {
678
+ "index": {
679
+ "type": "integer",
680
+ "description": "The index of the page to retrieve.",
681
+ "required": true
682
+ },
683
+ "size": {
684
+ "type": "integer",
685
+ "description": "The number of items per page.",
686
+ "required": true
687
+ }
688
+ },
689
+ "description": "Pagination parameters.",
690
+ "required": false
691
+ }
692
+ }
693
+ },
694
+ "query_schema": "\n query targetInteractions($ensemblId: String!, $page: Pagination) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n interactions(page: $page) {\n count\n rows {\n intA\n targetA {\n id\n approvedSymbol\n }\n intB\n targetB {\n id\n approvedSymbol\n }\n score\n sourceDatabase\n evidences {\n evidenceScore\n pubmedId\n interactionDetectionMethodShortName\n }\n }\n }\n }\n }\n ",
695
+ "type": "OpenTarget"
696
+ },
697
+ {
698
+ "name": "OpenTargets_get_disease_ancestors_parents_by_efoId",
699
+ "description": "Retrieve the disease ancestors and parents in the ontology using the disease EFO ID.",
700
+ "parameter": {
701
+ "type": "object",
702
+ "properties": {
703
+ "efoId": {
704
+ "type": "string",
705
+ "description": "The EFO ID of the disease.",
706
+ "required": true
707
+ }
708
+ }
709
+ },
710
+ "query_schema": "\n query getDiseaseDetailsByEfoId($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n ancestors\n parents {\n id\n name\n }\n }\n }\n ",
711
+ "label": [
712
+ "OpenTarget",
713
+ "Disease",
714
+ "Disease Information",
715
+ "GraphQL"
716
+ ],
717
+ "type": "OpenTarget"
718
+ },
719
+ {
720
+ "name": "OpenTargets_get_disease_descendants_children_by_efoId",
721
+ "description": "Retrieve the disease descendants and children in the ontology using the disease EFO ID.",
722
+ "parameter": {
723
+ "type": "object",
724
+ "properties": {
725
+ "efoId": {
726
+ "type": "string",
727
+ "description": "The EFO ID of the disease.",
728
+ "required": true
729
+ }
730
+ }
731
+ },
732
+ "query_schema": "\n query getDiseaseDetailsByEfoId($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n descendants\n children {\n id\n name\n }\n }\n }\n",
733
+ "label": [
734
+ "OpenTarget",
735
+ "Disease",
736
+ "Disease Information",
737
+ "GraphQL"
738
+ ],
739
+ "type": "OpenTarget"
740
+ },
741
+ {
742
+ "name": "OpenTargets_get_disease_locations_by_efoId",
743
+ "description": "Retrieve the disease's direct location and indirect location disease terms and IDs using the disease EFO ID.",
744
+ "parameter": {
745
+ "type": "object",
746
+ "properties": {
747
+ "efoId": {
748
+ "type": "string",
749
+ "description": "The EFO ID of the disease.",
750
+ "required": true
751
+ }
752
+ }
753
+ },
754
+ "query_schema": "\n query getDiseaseDetailsByEfoId($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n directLocationIds\n indirectLocationIds\n directLocations {\n id\n name\n }\n indirectLocations {\n id\n name\n }\n }\n }\n ",
755
+ "label": [
756
+ "OpenTarget",
757
+ "Disease",
758
+ "Disease Information",
759
+ "GraphQL"
760
+ ],
761
+ "type": "OpenTarget"
762
+ },
763
+ {
764
+ "name": "OpenTargets_get_disease_synonyms_by_efoId",
765
+ "description": "Retrieve disease synonyms by its EFO ID.",
766
+ "parameter": {
767
+ "type": "object",
768
+ "properties": {
769
+ "efoId": {
770
+ "type": "string",
771
+ "description": "The EFO ID of the disease.",
772
+ "required": true
773
+ }
774
+ }
775
+ },
776
+ "query_schema": "\n query getDiseaseDetailsByEfoId($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n synonyms {\n relation\n terms\n }\n }\n }\n",
777
+ "label": [
778
+ "OpenTarget",
779
+ "Disease",
780
+ "Disease Information",
781
+ "GraphQL"
782
+ ],
783
+ "type": "OpenTarget"
784
+ },
785
+ {
786
+ "name": "OpenTargets_get_disease_description_by_efoId",
787
+ "description": "Retrieve disease description, name, database cros references, obsolete terms, and whether it's a therapeutic area, all using the specified efoId.",
788
+ "parameter": {
789
+ "type": "object",
790
+ "properties": {
791
+ "efoId": {
792
+ "type": "string",
793
+ "description": "The EFO ID of the disease.",
794
+ "required": true
795
+ }
796
+ }
797
+ },
798
+ "query_schema": "\n query getDiseaseDetailsByEfoId($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n description\n dbXRefs\n obsoleteTerms\n isTherapeuticArea\n }\n }\n ",
799
+ "label": [
800
+ "OpenTarget",
801
+ "Disease",
802
+ "Disease Information",
803
+ "GraphQL"
804
+ ],
805
+ "type": "OpenTarget"
806
+ },
807
+ {
808
+ "name": "OpenTargets_get_disease_therapeutic_areas_by_efoId",
809
+ "description": "Retrieve the therapeutic areas associated with a specific disease efoId.",
810
+ "parameter": {
811
+ "type": "object",
812
+ "properties": {
813
+ "efoId": {
814
+ "type": "string",
815
+ "description": "The EFO ID of the disease.",
816
+ "required": true
817
+ }
818
+ }
819
+ },
820
+ "query_schema": "\n query diseaseTherapeuticAreas($efoId: String!) {\n disease(efoId: $efoId) {\n id\n name\n therapeuticAreas {\n id\n name\n }\n }\n }\n ",
821
+ "label": [
822
+ "OpenTarget",
823
+ "Disease",
824
+ "TherapeuticArea",
825
+ "GraphQL"
826
+ ],
827
+ "type": "OpenTarget"
828
+ },
829
+ {
830
+ "name": "OpenTargets_get_drug_adverse_events_by_chemblId",
831
+ "description": "Retrieve significant adverse events reported for a specific drug chemblId.",
832
+ "parameter": {
833
+ "type": "object",
834
+ "properties": {
835
+ "chemblId": {
836
+ "type": "string",
837
+ "description": "The ChEMBL ID of the drug.",
838
+ "required": true
839
+ },
840
+ "page": {
841
+ "type": "object",
842
+ "properties": {
843
+ "index": {
844
+ "type": "integer",
845
+ "description": "Index of the page to fetch, starting from 0.",
846
+ "required": true
847
+ },
848
+ "size": {
849
+ "type": "integer",
850
+ "description": "Number of entries per page.",
851
+ "required": true
852
+ }
853
+ },
854
+ "description": "Pagination settings.",
855
+ "required": false
856
+ }
857
+ }
858
+ },
859
+ "query_schema": "\n query drugAdverseEvents($chemblId: String!, $page: Pagination) {\n drug(chemblId: $chemblId) {\n id\n name\n adverseEvents(page: $page) {\n count\n criticalValue\n rows {\n name\n meddraCode\n count\n logLR\n }\n }\n }\n }\n ",
860
+ "label": [
861
+ "Drug",
862
+ "AdverseEvents",
863
+ "Safety",
864
+ "Reporting",
865
+ "Pagination",
866
+ "OpenTarget",
867
+ "GraphQL",
868
+ "AdverseEvents"
869
+ ],
870
+ "type": "OpenTarget"
871
+ },
872
+ {
873
+ "name": "OpenTargets_get_known_drugs_by_drug_chemblId",
874
+ "description": "Get a list of known drugs and associated information using the specified chemblId.",
875
+ "parameter": {
876
+ "type": "object",
877
+ "properties": {
878
+ "chemblId": {
879
+ "type": "string",
880
+ "description": "The ChEMBL ID of the drug.",
881
+ "required": true
882
+ }
883
+ }
884
+ },
885
+ "query_schema": "\n query retrieveMultipleDrugsInfo($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n knownDrugs {\n uniqueDrugs\n uniqueDiseases\n uniqueTargets\n count\n cursor\n rows {\n approvedSymbol\n approvedName\n label\n prefName\n drugType\n targetId\n diseaseId\n drugId\n phase\n mechanismOfAction\n status\n targetClass\n references {\n source\n ids\n urls\n }\n ctIds\n urls {\n url\n name\n }\n disease {\n id\n name\n }\n target {\n id\n approvedSymbol\n }\n drug {\n id\n name\n }\n }\n }\n }\n }\n ",
886
+ "label": [
887
+ "OpenTarget",
888
+ "Drug",
889
+ "Drug Information",
890
+ "GraphQL"
891
+ ],
892
+ "type": "OpenTarget"
893
+ },
894
+ {
895
+ "name": "OpenTargets_get_parent_child_molecules_by_drug_chembl_ID",
896
+ "description": "Get parent and child molecules of specified drug chemblId.",
897
+ "parameter": {
898
+ "type": "object",
899
+ "properties": {
900
+ "chemblId": {
901
+ "type": "string",
902
+ "description": "The ChEMBL ID of the drug.",
903
+ "required": true
904
+ }
905
+ }
906
+ },
907
+ "query_schema": "\n query retrieveMultipleDrugsInfo($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n parentMolecule {\n id\n name\n }\n childMolecules {\n id\n name\n }\n }\n }\n ",
908
+ "label": [
909
+ "OpenTarget",
910
+ "Drug",
911
+ "Drug Information",
912
+ "GraphQL"
913
+ ],
914
+ "type": "OpenTarget"
915
+ },
916
+ {
917
+ "name": "OpenTargets_get_approved_indications_by_drug_chemblId",
918
+ "description": "Retrieve detailed information about multiple drugs using a list of ChEMBL IDs.",
919
+ "parameter": {
920
+ "type": "object",
921
+ "properties": {
922
+ "chemblId": {
923
+ "type": "string",
924
+ "description": "The ChEMBL ID of the drug.",
925
+ "required": true
926
+ }
927
+ }
928
+ },
929
+ "query_schema": "\n query retrieveMultipleDrugsInfo($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n approvedIndications\n }\n }\n ",
930
+ "label": [
931
+ "OpenTarget",
932
+ "Drug",
933
+ "Drug Information",
934
+ "GraphQL"
935
+ ],
936
+ "type": "OpenTarget"
937
+ },
938
+ {
939
+ "name": "OpenTargets_get_drug_description_by_chemblId",
940
+ "description": "Get drug name, year of first approval, type, cross references, and max clinical trial phase based on specified chemblId.",
941
+ "parameter": {
942
+ "type": "object",
943
+ "properties": {
944
+ "chemblId": {
945
+ "type": "string",
946
+ "description": "The ChEMBL ID of the drug.",
947
+ "required": true
948
+ }
949
+ }
950
+ },
951
+ "query_schema": "\n query retrieveMultipleDrugsInfo($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n yearOfFirstApproval\n drugType\n crossReferences {\n source\n reference\n }\n maximumClinicalTrialPhase\n }\n }\n ",
952
+ "label": [
953
+ "OpenTarget",
954
+ "Drug",
955
+ "Drug Information",
956
+ "GraphQL"
957
+ ],
958
+ "type": "OpenTarget"
959
+ },
960
+ {
961
+ "name": "OpenTargets_get_drug_synonyms_by_chemblId",
962
+ "description": "Retrieve the synonyms associated with a specific drug chemblId.",
963
+ "parameter": {
964
+ "type": "object",
965
+ "properties": {
966
+ "chemblId": {
967
+ "type": "string",
968
+ "description": "The ChEMBL ID of the drug.",
969
+ "required": true
970
+ }
971
+ }
972
+ },
973
+ "query_schema": "\n query drugSynonyms($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n synonyms\n }\n }\n ",
974
+ "label": [
975
+ "OpenTarget",
976
+ "Drug Information",
977
+ "Drug",
978
+ "GraphQL"
979
+ ],
980
+ "type": "OpenTarget"
981
+ },
982
+ {
983
+ "name": "OpenTargets_get_drug_trade_names_by_chemblId",
984
+ "description": "Retrieve the trade names associated with a specific drug chemblId.",
985
+ "parameter": {
986
+ "type": "object",
987
+ "properties": {
988
+ "chemblId": {
989
+ "type": "string",
990
+ "description": "The ChEMBL ID of the drug.",
991
+ "required": true
992
+ }
993
+ }
994
+ },
995
+ "query_schema": "\n query drugTradeNames($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n tradeNames\n }\n }\n ",
996
+ "label": [
997
+ "Drug",
998
+ "OpenTarget",
999
+ "Drug Information",
1000
+ "GraphQL"
1001
+ ],
1002
+ "type": "OpenTarget"
1003
+ },
1004
+ {
1005
+ "name": "OpenTargets_get_drug_approval_status_by_chemblId",
1006
+ "description": "Retrieve the approval status of a specific drug chemblId.",
1007
+ "parameter": {
1008
+ "type": "object",
1009
+ "properties": {
1010
+ "chemblId": {
1011
+ "type": "string",
1012
+ "description": "The ChEMBL ID of the drug.",
1013
+ "required": true
1014
+ }
1015
+ }
1016
+ },
1017
+ "query_schema": "\n query drugApprovalStatus($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n isApproved\n }\n }\n ",
1018
+ "label": [
1019
+ "Drug",
1020
+ "Drug Information",
1021
+ "GraphQL",
1022
+ "OpenTarget"
1023
+ ],
1024
+ "type": "OpenTarget"
1025
+ },
1026
+ {
1027
+ "name": "OpenTargets_get_chemical_probes_by_target_ensemblID",
1028
+ "description": "Retrieve chemical probes associated with a specific target using its ensemblID.",
1029
+ "parameter": {
1030
+ "type": "object",
1031
+ "properties": {
1032
+ "ensemblId": {
1033
+ "type": "string",
1034
+ "description": "The Ensembl ID of the target for which to retrieve chemical probes.",
1035
+ "required": true
1036
+ }
1037
+ }
1038
+ },
1039
+ "query_schema": "\n query getTargetChemicalProbes($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n chemicalProbes {\n id\n control\n drugId\n mechanismOfAction\n isHighQuality\n origin\n probeMinerScore\n probesDrugsScore\n scoreInCells\n scoreInOrganisms\n targetFromSourceId\n urls {\n niceName\n url\n }\n }\n }\n }\n ",
1040
+ "label": [
1041
+ "OpenTarget",
1042
+ "Drug Information",
1043
+ "ChemicalProbe",
1044
+ "GraphQL"
1045
+ ],
1046
+ "type": "OpenTarget"
1047
+ },
1048
+ {
1049
+ "name": "OpenTargets_drug_pharmacogenomics_data",
1050
+ "description": "Retrieve pharmacogenomics data for a specific drug, including evidence levels and genotype annotations.",
1051
+ "label": [
1052
+ "Drug",
1053
+ "Pharmacogenomics",
1054
+ "Evidence",
1055
+ "Genotype",
1056
+ "Pagination",
1057
+ "OpenTarget",
1058
+ "GraphQL"
1059
+ ],
1060
+ "parameter": {
1061
+ "type": "object",
1062
+ "properties": {
1063
+ "chemblId": {
1064
+ "type": "string",
1065
+ "description": "The ChEMBL ID of the drug.",
1066
+ "required": true
1067
+ },
1068
+ "page": {
1069
+ "type": "object",
1070
+ "description": "Pagination options.",
1071
+ "properties": {
1072
+ "index": {
1073
+ "type": "integer",
1074
+ "description": "Pagination index.",
1075
+ "required": true
1076
+ },
1077
+ "size": {
1078
+ "type": "integer",
1079
+ "description": "Number of records to fetch per page.",
1080
+ "required": true
1081
+ }
1082
+ },
1083
+ "required": false
1084
+ }
1085
+ }
1086
+ },
1087
+ "query_schema": "\n query drugPharmacogenomicsData($chemblId: String!, $page: Pagination) {\n drug(chemblId: $chemblId) {\n id\n name\n pharmacogenomics(page: $page) {\n datasourceId\n datatypeId\n genotype\n evidenceLevel\n genotypeAnnotationText\n genotypeId\n haplotypeFromSourceId\n haplotypeId\n literature\n pgxCategory\n phenotypeFromSourceId\n phenotypeText\n studyId\n targetFromSourceId\n variantFunctionalConsequenceId\n variantRsId\n isDirectTarget\n variantFunctionalConsequence {\n id\n label\n }\n drugs {\n drugId\n drug {\n name\n }\n }\n target {\n id\n approvedSymbol\n }\n }\n }\n }\n ",
1088
+ "type": "OpenTarget"
1089
+ },
1090
+ {
1091
+ "name": "OpenTargets_get_associated_drugs_by_target_ensemblID",
1092
+ "description": "Get known drugs and information (e.g. id, name, MoA) associated with a specific target ensemblID, including clinical trial phase and mechanism of action of the drugs.",
1093
+ "parameter": {
1094
+ "type": "object",
1095
+ "properties": {
1096
+ "ensemblId": {
1097
+ "type": "string",
1098
+ "description": "The Ensembl ID of the target.",
1099
+ "required": true
1100
+ },
1101
+ "size": {
1102
+ "type": "integer",
1103
+ "description": "Number of entries to fetch.",
1104
+ "required": true
1105
+ },
1106
+ "cursor": {
1107
+ "type": "string",
1108
+ "description": "Cursor for pagination.",
1109
+ "required": false
1110
+ }
1111
+ }
1112
+ },
1113
+ "query_schema": "\n query targetKnownDrugs($ensemblId: String!, $size: Int!, $cursor: String) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n knownDrugs(size: $size, cursor: $cursor) {\n count\n rows {\n drug {\n id\n name\n tradeNames\n maximumClinicalTrialPhase\n isApproved\n hasBeenWithdrawn\n }\n phase\n status\n mechanismOfAction\n disease {\n id\n name\n }\n }\n }\n }\n }\n ",
1114
+ "label": [
1115
+ "Target",
1116
+ "Drug",
1117
+ "MechanismsOfAction",
1118
+ "Pagination",
1119
+ "OpenTarget",
1120
+ "GraphQL"
1121
+ ],
1122
+ "type": "OpenTarget"
1123
+ },
1124
+ {
1125
+ "name": "OpenTargets_get_associated_diseases_by_drug_chemblId",
1126
+ "description": "Retrieve the list of diseases associated with a specific drug chemblId based on clinical trial data or post-marketed drugs.",
1127
+ "parameter": {
1128
+ "type": "object",
1129
+ "properties": {
1130
+ "chemblId": {
1131
+ "type": "string",
1132
+ "description": "The ChEMBL ID of the drug.",
1133
+ "required": true
1134
+ }
1135
+ }
1136
+ },
1137
+ "query_schema": "\n query fetchLinkedDiseasesForDrug($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n linkedDiseases {\n count\n rows {\n id\n name\n description\n }\n }\n }\n }\n ",
1138
+ "label": [
1139
+ "Drug",
1140
+ "Disease",
1141
+ "OpenTarget",
1142
+ "Drug Information",
1143
+ "GraphQL"
1144
+ ],
1145
+ "type": "OpenTarget"
1146
+ },
1147
+ {
1148
+ "name": "OpenTargets_get_associated_targets_by_drug_chemblId",
1149
+ "description": "Retrieve the list of targets linked to a specific drug chemblId based on its mechanism of action.",
1150
+ "parameter": {
1151
+ "type": "object",
1152
+ "properties": {
1153
+ "chemblId": {
1154
+ "type": "string",
1155
+ "description": "The ChEMBL ID of the drug.",
1156
+ "required": true
1157
+ }
1158
+ }
1159
+ },
1160
+ "query_schema": "\n query fetchLinkedTargetsForDrug($chemblId: String!) {\n drug(chemblId: $chemblId) {\n id\n name\n linkedTargets {\n count\n rows {\n id\n approvedSymbol\n approvedName\n }\n }\n }\n }\n ",
1161
+ "label": [
1162
+ "Drug",
1163
+ "Target",
1164
+ "MechanismsOfAction",
1165
+ "OpenTarget",
1166
+ "GraphQL"
1167
+ ],
1168
+ "type": "OpenTarget"
1169
+ },
1170
+ {
1171
+ "name": "OpenTargets_multi_entity_search_by_query_string",
1172
+ "description": "Perform a multi-entity search based on a query string, filtering by entity names and pagination settings.",
1173
+ "parameter": {
1174
+ "type": "object",
1175
+ "properties": {
1176
+ "queryString": {
1177
+ "type": "string",
1178
+ "description": "The search string for querying information.",
1179
+ "required": true
1180
+ },
1181
+ "entityNames": {
1182
+ "type": "array",
1183
+ "items": {
1184
+ "type": "string"
1185
+ },
1186
+ "description": "List of entity names to search for (e.g., target, disease, drug).",
1187
+ "required": false
1188
+ },
1189
+ "page": {
1190
+ "type": "object",
1191
+ "properties": {
1192
+ "index": {
1193
+ "type": "integer",
1194
+ "description": "Pagination index.",
1195
+ "required": "True"
1196
+ },
1197
+ "size": {
1198
+ "type": "integer",
1199
+ "description": "Pagination size.",
1200
+ "required": "True"
1201
+ }
1202
+ },
1203
+ "description": "Pagination settings with index and size.",
1204
+ "required": false
1205
+ }
1206
+ }
1207
+ },
1208
+ "query_schema": "\n query multiEntitySearch($queryString: String!, $entityNames: [String!], $page: Pagination) {\n search(queryString: $queryString, entityNames: $entityNames, page: $page) {\n total\n hits {\n id\n entity\n description\n name\n score\n }\n }\n }\n ",
1209
+ "label": [
1210
+ "Search and Mapping Functions",
1211
+ "MultiEntitySearch",
1212
+ "Pagination",
1213
+ "OpenTarget",
1214
+ "GraphQL"
1215
+ ],
1216
+ "type": "OpenTarget"
1217
+ },
1218
+ {
1219
+ "name": "OpenTargets_get_gene_ontology_terms_by_goID",
1220
+ "description": "Retrieve Gene Ontology terms based on a list of GO IDs.",
1221
+ "parameter": {
1222
+ "type": "object",
1223
+ "properties": {
1224
+ "goIds": {
1225
+ "type": "array",
1226
+ "items": {
1227
+ "type": "string"
1228
+ },
1229
+ "description": "A list of Gene Ontology (GO) IDs to fetch the corresponding terms.",
1230
+ "required": true
1231
+ }
1232
+ }
1233
+ },
1234
+ "query_schema": "\n query fetchGeneOntologyTerms($goIds: [String!]!) {\n geneOntologyTerms(goIds: $goIds) {\n id\n name\n }\n }\n ",
1235
+ "label": [
1236
+ "GeneOntology",
1237
+ "Data Retrieval and Aggregation",
1238
+ "OpenTarget",
1239
+ "GraphQL"
1240
+ ],
1241
+ "type": "OpenTarget"
1242
+ },
1243
+ {
1244
+ "name": "OpenTargets_get_target_constraint_info_by_ensemblID",
1245
+ "description": "Retrieve genetic constraint information for a specific target ensemblID, including expected and observed values, and scores.",
1246
+ "parameter": {
1247
+ "type": "object",
1248
+ "properties": {
1249
+ "ensemblId": {
1250
+ "type": "string",
1251
+ "description": "The Ensembl ID of the target.",
1252
+ "required": true
1253
+ }
1254
+ }
1255
+ },
1256
+ "query_schema": "\n query targetConstraintInfo($ensemblId: String!) {\n target(ensemblId: $ensemblId) {\n id\n approvedSymbol\n geneticConstraint {\n constraintType\n exp\n obs\n oe\n oeLower\n oeUpper\n score\n upperBin\n upperBin6\n upperRank\n }\n }\n }\n ",
1257
+ "label": [
1258
+ "Target",
1259
+ "Constraint",
1260
+ "Data Retrieval and Aggregation",
1261
+ "OpenTarget",
1262
+ "GraphQL"
1263
+ ],
1264
+ "type": "OpenTarget"
1265
+ },
1266
+ {
1267
+ "name": "OpenTargets_get_publications_by_disease_efoId",
1268
+ "description": "Retrieve publications related to a disease efoId, including PubMed IDs and publication dates.",
1269
+ "parameter": {
1270
+ "type": "object",
1271
+ "properties": {
1272
+ "entityId": {
1273
+ "type": "string",
1274
+ "description": "The ID of the entity (efoId).",
1275
+ "required": true
1276
+ },
1277
+ "additionalIds": {
1278
+ "type": "array",
1279
+ "items": {
1280
+ "type": "string"
1281
+ },
1282
+ "description": "List of additional IDs to include in the search.",
1283
+ "required": false
1284
+ },
1285
+ "startYear": {
1286
+ "type": "integer",
1287
+ "description": "Year at the lower end of the filter.",
1288
+ "required": false
1289
+ },
1290
+ "startMonth": {
1291
+ "type": "integer",
1292
+ "description": "Month at the lower end of the filter.",
1293
+ "required": false
1294
+ },
1295
+ "endYear": {
1296
+ "type": "integer",
1297
+ "description": "Year at the higher end of the filter.",
1298
+ "required": false
1299
+ },
1300
+ "endMonth": {
1301
+ "type": "integer",
1302
+ "description": "Month at the higher end of the filter.",
1303
+ "required": false
1304
+ }
1305
+ }
1306
+ },
1307
+ "query_schema": "\n query entityPublications($entityId: String!, $additionalIds: [String!], $startYear: Int, $startMonth: Int, $endYear: Int, $endMonth: Int) {\n disease(efoId: $entityId) {\n id\n name\n literatureOcurrences(additionalIds: $additionalIds, startYear: $startYear, startMonth: $startMonth, endYear: $endYear, endMonth: $endMonth) {\n count\n filteredCount\n earliestPubYear\n rows {\n pmid\n pmcid\n publicationDate\n sentences {\n section\n matches {\n mappedId\n matchedLabel\n sectionStart\n sectionEnd\n startInSentence\n endInSentence\n matchedType\n }\n }\n }\n }\n }\n }\n ",
1308
+ "label": [
1309
+ "Publications",
1310
+ "Data Retrieval and Aggregation",
1311
+ "GraphQL",
1312
+ "OpenTarget"
1313
+ ],
1314
+ "type": "OpenTarget"
1315
+ },
1316
+ {
1317
+ "name": "OpenTargets_get_publications_by_target_ensemblID",
1318
+ "description": "Retrieve publications related to a target ensemblID, including PubMed IDs and publication dates.",
1319
+ "parameter": {
1320
+ "type": "object",
1321
+ "properties": {
1322
+ "entityId": {
1323
+ "type": "string",
1324
+ "description": "The ID of the entity (ensemblID).",
1325
+ "required": true
1326
+ },
1327
+ "additionalIds": {
1328
+ "type": "array",
1329
+ "items": {
1330
+ "type": "string"
1331
+ },
1332
+ "description": "List of additional IDs to include in the search.",
1333
+ "required": false
1334
+ },
1335
+ "startYear": {
1336
+ "type": "integer",
1337
+ "description": "Year at the lower end of the filter.",
1338
+ "required": false
1339
+ },
1340
+ "startMonth": {
1341
+ "type": "integer",
1342
+ "description": "Month at the lower end of the filter.",
1343
+ "required": false
1344
+ },
1345
+ "endYear": {
1346
+ "type": "integer",
1347
+ "description": "Year at the higher end of the filter.",
1348
+ "required": false
1349
+ },
1350
+ "endMonth": {
1351
+ "type": "integer",
1352
+ "description": "Month at the higher end of the filter.",
1353
+ "required": false
1354
+ }
1355
+ }
1356
+ },
1357
+ "query_schema": "\n query entityPublications($entityId: String!, $additionalIds: [String!], $startYear: Int, $startMonth: Int, $endYear: Int, $endMonth: Int) {\n target(ensemblId: $entityId) {\n id\n approvedSymbol\n literatureOcurrences(additionalIds: $additionalIds, startYear: $startYear, startMonth: $startMonth, endYear: $endYear, endMonth: $endMonth) {\n count\n filteredCount\n earliestPubYear\n rows {\n pmid\n pmcid\n publicationDate\n sentences {\n section\n matches {\n mappedId\n matchedLabel\n sectionStart\n sectionEnd\n startInSentence\n endInSentence\n matchedType\n }\n }\n }\n }\n }\n }\n ",
1358
+ "label": [
1359
+ "Publications",
1360
+ "Data Retrieval and Aggregation",
1361
+ "GraphQL",
1362
+ "OpenTarget"
1363
+ ],
1364
+ "type": "OpenTarget"
1365
+ },
1366
+ {
1367
+ "name": "OpenTargets_get_publications_by_drug_chemblId",
1368
+ "description": "Retrieve publications related to a drug chemblId, including PubMed IDs and publication dates.",
1369
+ "parameter": {
1370
+ "type": "object",
1371
+ "properties": {
1372
+ "entityId": {
1373
+ "type": "string",
1374
+ "description": "The ID of the entity (chemblId).",
1375
+ "required": true
1376
+ },
1377
+ "additionalIds": {
1378
+ "type": "array",
1379
+ "items": {
1380
+ "type": "string"
1381
+ },
1382
+ "description": "List of additional IDs to include in the search.",
1383
+ "required": false
1384
+ },
1385
+ "startYear": {
1386
+ "type": "integer",
1387
+ "description": "Year at the lower end of the filter.",
1388
+ "required": false
1389
+ },
1390
+ "startMonth": {
1391
+ "type": "integer",
1392
+ "description": "Month at the lower end of the filter.",
1393
+ "required": false
1394
+ },
1395
+ "endYear": {
1396
+ "type": "integer",
1397
+ "description": "Year at the higher end of the filter.",
1398
+ "required": false
1399
+ },
1400
+ "endMonth": {
1401
+ "type": "integer",
1402
+ "description": "Month at the higher end of the filter.",
1403
+ "required": false
1404
+ }
1405
+ }
1406
+ },
1407
+ "query_schema": "\n query entityPublications($entityId: String!, $additionalIds: [String!], $startYear: Int, $startMonth: Int, $endYear: Int, $endMonth: Int) {\n drug(chemblId: $entityId) {\n id\n name\n literatureOcurrences(additionalIds: $additionalIds, startYear: $startYear, startMonth: $startMonth, endYear: $endYear, endMonth: $endMonth) {\n count\n filteredCount\n earliestPubYear\n rows {\n pmid\n pmcid\n publicationDate\n sentences {\n section\n matches {\n mappedId\n matchedLabel\n sectionStart\n sectionEnd\n startInSentence\n endInSentence\n matchedType\n }\n }\n }\n }\n }\n }\n ",
1408
+ "label": [
1409
+ "Publications",
1410
+ "Data Retrieval and Aggregation",
1411
+ "GraphQL",
1412
+ "OpenTarget"
1413
+ ],
1414
+ "type": "OpenTarget"
1415
+ },
1416
+ {
1417
+ "name": "OpenTargets_get_target_id_description_by_name",
1418
+ "description": "Get the ensemblId and description based on the target name.",
1419
+ "parameter": {
1420
+ "type": "object",
1421
+ "properties": {
1422
+ "targetName": {
1423
+ "type": "string",
1424
+ "description": "The name of the target for which the ID is required.",
1425
+ "required": true
1426
+ }
1427
+ }
1428
+ },
1429
+ "query_schema": "\n query getTargetIdByName($targetName: String!) {\n search(queryString: $targetName, entityNames: [\"target\"]) {\n hits {\n id\n name\n description\n }\n }\n }\n ",
1430
+ "label": [
1431
+ "Search",
1432
+ "Name",
1433
+ "Target",
1434
+ "OpenTarget",
1435
+ "GraphQL"
1436
+ ],
1437
+ "type": "OpenTarget"
1438
+ }
1439
+ ]
tool_lists/pubtator_tools.json ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "PubTatorTool",
4
+ "name": "PubTator3_EntityAutocomplete",
5
+ "description": "Provides suggestions for the best‐matching standardized PubTator IDs for a partial biomedical term (gene, disease, chemical, or variant). Use this tool first to convert free‐text names into the stable @IDs required by the other PubTator APIs.",
6
+ "endpoint_path": "/entity/autocomplete/",
7
+ "method": "GET",
8
+ "param_map": {
9
+ "text": "query",
10
+ "entity_type": "concept",
11
+ "max_results": "limit"
12
+ },
13
+ "parameter": {
14
+ "type": "object",
15
+ "properties": {
16
+ "text": {
17
+ "type": "string",
18
+ "description": "A few characters or the full name of the biomedical concept you are trying to look up (e.g. “BRAF V6”)."
19
+ },
20
+ "entity_type": {
21
+ "type": "string",
22
+ "description": "Optional filter to restrict suggestions to a single category such as GENE, DISEASE, CHEMICAL, or VARIANT."
23
+ },
24
+ "max_results": {
25
+ "type": "integer",
26
+ "description": "Maximum number of suggestions to return (1 - 50, default = 10)."
27
+ }
28
+ },
29
+ "required": ["text"]
30
+ },
31
+ "fields": {
32
+ "tool_subtype": "PubTatorEntity"
33
+ }
34
+ },
35
+ {
36
+ "type": "PubTatorTool",
37
+ "name": "PubTator3_LiteratureSearch",
38
+ "description": "Find PubMed articles that match a keyword, a PubTator entity ID (e.g. “@GENE_BRAF”), or an entity-to-entity relation expression (e.g. “relations:treat|@CHEMICAL_Doxorubicin|@DISEASE_Neoplasms”).",
39
+ "endpoint_path": "/search/",
40
+ "method": "GET",
41
+ "param_map": {
42
+ "query": "text",
43
+ "page": "page",
44
+ "page_size": "page_size"
45
+ },
46
+ "parameter": {
47
+ "type": "object",
48
+ "properties": {
49
+ "query": {
50
+ "type": "string",
51
+ "description": "What you want to search for. This can be plain keywords, a single PubTator ID, or the special relation syntax shown above."
52
+ },
53
+ "page": {
54
+ "type": "integer",
55
+ "description": "Zero-based results page (optional; default = 0)."
56
+ },
57
+ "page_size": {
58
+ "type": "integer",
59
+ "description": "How many PMIDs to return per page (optional; default = 20, maximum = 200)."
60
+ }
61
+ },
62
+ "required": ["query"]
63
+ },
64
+ "fields": {
65
+ "tool_subtype": "PubTatorSearch"
66
+ }
67
+ }
68
+ ]
tool_lists/semantic_scholar_tools.json ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "SemanticScholarTool",
4
+ "name": "SemanticScholar_search_papers",
5
+ "description": "Search for papers on Semantic Scholar including abstracts. This tool queries the Semantic Scholar API using natural language keywords and returns papers with details such as title, abstract, publication year, journal (venue), and URL.",
6
+ "parameter": {
7
+ "type": "object",
8
+ "properties": {
9
+ "query": {
10
+ "type": "string",
11
+ "description": "Search query for Semantic Scholar. Use keywords separated by spaces to refine the search."
12
+ },
13
+ "limit": {
14
+ "type": "integer",
15
+ "description": "Maximum number of papers to return from Semantic Scholar.",
16
+ "default": 5
17
+ },
18
+ "api_key": {
19
+ "type": "string",
20
+ "description": "Optional API key for Semantic Scholar to obtain a higher quota."
21
+ }
22
+ },
23
+ "required": ["query"]
24
+ }
25
+ }
26
+ ]
tool_lists/special_tools.json ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "Finish",
4
+ "description": "Indicate the end of multi-step reasoning.",
5
+ "parameter": {
6
+ "type": "object",
7
+ "properties": null
8
+ }
9
+ },
10
+ {
11
+ "name": "Tool_RAG",
12
+ "description": "Retrieve related tools from the toolbox based on the provided description",
13
+ "parameter": {
14
+ "type": "object",
15
+ "properties": {
16
+ "description": {
17
+ "type": "string",
18
+ "description": "The description of the tool capability required.",
19
+ "required": true
20
+ },
21
+ "limit": {
22
+ "type": "integer",
23
+ "description": "The number of tools to retrieve",
24
+ "required": true
25
+ }
26
+ }
27
+ },
28
+ "required": [
29
+ "description",
30
+ "limit"
31
+ ]
32
+ },
33
+ {
34
+ "name": "CallAgent",
35
+ "description": "Give a solution plan to the agent and let it solve the problem. Solution plan should reflect a distinct method, approach, or viewpoint to solve the given question. Call these function multiple times, and each solution plan should start with different aspects of the question, for example, genes, phenotypes, diseases, or drugs, etc. The CallAgent will achieve the task based on the plan, so only give the plan instead of unverified information.",
36
+ "parameter": {
37
+ "type": "object",
38
+ "properties":
39
+ {
40
+ "solution": {
41
+ "type": "string",
42
+ "description": "A feasible and concise solution plan that address the question.",
43
+ "required": true
44
+ }
45
+ }
46
+ }
47
+ }
48
+ ]
utils.py ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import datetime
2
+ # Imports required for Google Sheets integration
3
+ import gspread
4
+ import random
5
+ import time
6
+ import functools
7
+ from gspread.exceptions import SpreadsheetNotFound, APIError
8
+ from oauth2client.service_account import ServiceAccountCredentials
9
+ import pandas as pd
10
+ import json
11
+ import gradio as gr
12
+ import os
13
+
14
+ GSERVICE_ACCOUNT_INFO = {
15
+ "type": "service_account",
16
+ "project_id": "txagent",
17
+ "private_key_id": "cc1a12e427917244a93faf6f19e72b589a685e65",
18
+ "private_key": None,
19
+ "client_email": "[email protected]",
20
+ "client_id": "108950722202634464257",
21
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
22
+ "token_uri": "https://oauth2.googleapis.com/token",
23
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
24
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/shanghua%40txagent.iam.gserviceaccount.com",
25
+ "universe_domain": "googleapis.com"
26
+ }
27
+ GSHEET_NAME = "TxAgent_data_collection"
28
+
29
+ GSheet_API_KEY = os.environ.get("GSheets_Shanghua_PrivateKey")
30
+ if GSheet_API_KEY is None:
31
+ print("GSheet_API_KEY not found in environment variables. Please set it.")
32
+ else:
33
+ GSheet_API_KEY = GSheet_API_KEY.replace("\\n", "\n")
34
+ GSERVICE_ACCOUNT_INFO["private_key"] = GSheet_API_KEY
35
+
36
+ #Exponential backoff retry decorator
37
+ def exponential_backoff_gspread(max_retries=30, max_backoff_sec=64, base_delay_sec=1, target_exception=APIError):
38
+ """
39
+ Decorator to implement exponential backoff for gspread API calls.
40
+
41
+ Retries a function call if it raises a specific exception (defaults to APIError)
42
+ that matches the Google Sheets API rate limit error (HTTP 429).
43
+
44
+ Args:
45
+ max_retries (int): Maximum number of retry attempts.
46
+ max_backoff_sec (int): Maximum delay between retries in seconds.
47
+ base_delay_sec (int): Initial delay in seconds for the first retry.
48
+ target_exception (Exception): The specific exception type to catch.
49
+ """
50
+ def decorator(func):
51
+ @functools.wraps(func)
52
+ def wrapper(*args, **kwargs):
53
+ retries = 0
54
+ while True: # Loop indefinitely until success or max retries exceeded
55
+ try:
56
+ # Attempt to execute the wrapped function
57
+ return func(*args, **kwargs)
58
+ except target_exception as e:
59
+ # Check if the error is the specific 429 Quota Exceeded error
60
+ # We parse the string representation as gspread's APIError includes the status code there.
61
+ error_message = str(e)
62
+ is_rate_limit_error = "[429]" in error_message and (
63
+ "Quota exceeded" in error_message or "Too Many Requests" in error_message
64
+ )
65
+
66
+ if is_rate_limit_error:
67
+ retries += 1
68
+ if retries > max_retries:
69
+ print(f"Max retries ({max_retries}) exceeded for {func.__name__}. Last error: {e}")
70
+ raise e # Re-raise the last exception after exhausting retries
71
+
72
+ # Calculate exponential backoff delay with random jitter (0-1 second)
73
+ backoff_delay = min(max_backoff_sec, base_delay_sec * (2 ** (retries - 1)) + random.uniform(0, 1))
74
+
75
+ print(
76
+ f"Rate limit hit for {func.__name__} (Attempt {retries}/{max_retries}). "
77
+ f"Retrying in {backoff_delay:.2f} seconds. Error: {e}"
78
+ )
79
+ time.sleep(backoff_delay)
80
+ else:
81
+ # If it's a different kind of APIError (e.g., 403 Forbidden, 404 Not Found), re-raise immediately.
82
+ print(f"Non-rate-limit APIError encountered in {func.__name__}: {e}")
83
+ raise e
84
+ except Exception as e:
85
+ # Catch any other unexpected exceptions during the function execution
86
+ print(f"An unexpected error occurred in {func.__name__}: {e}")
87
+ raise e # Re-raise unexpected errors
88
+ return wrapper
89
+ return decorator
90
+
91
+ #2) Initialize Google Sheets client
92
+ # Define the scopes
93
+ scope = [
94
+ "https://spreadsheets.google.com/feeds",
95
+ "https://www.googleapis.com/auth/drive",
96
+ ]
97
+
98
+ # Authenticate immediately on import
99
+ creds = ServiceAccountCredentials.from_json_keyfile_dict(GSERVICE_ACCOUNT_INFO, scope)
100
+ client = gspread.authorize(creds)
101
+
102
+ @exponential_backoff_gspread(max_retries=30, max_backoff_sec=64)
103
+ def read_sheet_to_df(custom_sheet_name=None, sheet_index=0):
104
+ """
105
+ Read all data from a Google Sheet into a pandas DataFrame.
106
+
107
+ Parameters:
108
+ custom_sheet_name (str): The name of the Google Sheet to open. If None, uses GSHEET_NAME.
109
+ sheet_index (int): Index of the worksheet within the spreadsheet (default is 0, the first sheet).
110
+
111
+ Returns:
112
+ pandas.DataFrame: DataFrame containing the sheet data, with the first row used as headers.
113
+ """
114
+
115
+ # Determine which sheet name to use
116
+ if custom_sheet_name is None:
117
+ custom_sheet_name = GSHEET_NAME
118
+
119
+ # Open the spreadsheet
120
+ try:
121
+ spreadsheet = client.open(custom_sheet_name)
122
+ except gspread.SpreadsheetNotFound:
123
+ return None
124
+
125
+ # Select the desired worksheet
126
+ try:
127
+ worksheet = spreadsheet.get_worksheet(sheet_index)
128
+ except IndexError:
129
+ return None
130
+
131
+ # Fetch all data: first row as header, remaining as records
132
+ data = worksheet.get_all_records()
133
+
134
+ # Convert to DataFrame
135
+ df = pd.DataFrame(data)
136
+
137
+ return df
138
+
139
+ @exponential_backoff_gspread(max_retries=30, max_backoff_sec=64)
140
+ def append_to_sheet(user_data=None, custom_row_dict=None, custom_sheet_name=None, add_header_when_create_sheet=False):
141
+ """
142
+ Append a new row to a Google Sheet. If 'custom_row' is provided, append that row.
143
+ Otherwise, append a default row constructed from the provided user_data.
144
+ """
145
+ if custom_sheet_name is None:
146
+ custom_sheet_name = GSHEET_NAME
147
+
148
+ try:
149
+ # Try to open the spreadsheet by name
150
+ spreadsheet = client.open(custom_sheet_name)
151
+ is_new = False
152
+ except SpreadsheetNotFound:
153
+ # If it doesn't exist, create it
154
+ spreadsheet = client.create(custom_sheet_name)
155
+ # Optionally, share the new spreadsheet with designated emails
156
+ spreadsheet.share('[email protected]', perm_type='user', role='writer')
157
+ spreadsheet.share('[email protected]', perm_type='user', role='writer')
158
+ is_new = True
159
+
160
+ print("Spreadsheet ID:", spreadsheet.id)
161
+ # Access the first worksheet
162
+ sheet = spreadsheet.sheet1
163
+
164
+ # Check if the sheet has any rows yet
165
+ existing_values = sheet.get_all_values()
166
+ is_empty = (existing_values == [[]]) #indicates empty spreadsheet that was cleared in the past
167
+
168
+ if (is_new or is_empty) and add_header_when_create_sheet:
169
+ # headers come from the keys of our row dict
170
+ if custom_row_dict is not None:
171
+ headers = list(custom_row_dict.keys())
172
+ else:
173
+ headers = list(user_data.keys())
174
+ sheet.append_row(headers)
175
+
176
+ if custom_row_dict is not None:
177
+ custom_row = [custom_row_dict.get(header) for header in list(custom_row_dict.keys())]
178
+ else:
179
+ # Construct the default row with a timestamp and user_data fields
180
+ custom_row = [str(datetime.datetime.now()), user_data["question"], user_data["final_answer"], user_data["trace"]]
181
+
182
+ # Append the custom or default row to the sheet
183
+ sheet.append_row(custom_row)
184
+
185
+ def format_chat(response, tool_database_labels):
186
+ chat_history = []
187
+ # Keep track of the last assistant message's tool_calls
188
+ last_tool_calls = []
189
+
190
+ for msg in response:
191
+ if msg["role"] == "assistant":
192
+ content = msg.get("content", "")
193
+ # Extract tool_calls from this assistant message (if any)
194
+ last_tool_calls = json.loads(msg.get("tool_calls", "[]"))
195
+ # Emit the assistant's main message
196
+ chat_history.append(
197
+ gr.ChatMessage(role="assistant", content=content)
198
+ )
199
+
200
+ elif msg["role"] == "tool":
201
+ # For each tool response, we pair it with the corresponding call
202
+ for i, tool_call in enumerate(last_tool_calls):
203
+ name = tool_call.get("name", "")
204
+ args = tool_call.get("arguments", {})
205
+
206
+ # Determine icon + title
207
+ database_label = ""
208
+ if name == "Tool_RAG":
209
+ title = "🧰 Tool RAG"
210
+ else:
211
+ title = f"🛠️ {name}"
212
+ for db_label, tool_list in tool_database_labels.items():
213
+ if name in tool_list:
214
+ title = f"🛠️ {name} (**retrieves** {db_label})"
215
+ database_label = " (" + db_label + ")"
216
+ break
217
+
218
+ # Parse and pretty-print the tool response content
219
+ raw = msg.get("content", "")
220
+ try:
221
+ parsed = json.loads(raw)
222
+ pretty = json.dumps(parsed)
223
+ except json.JSONDecodeError:
224
+ pretty = raw
225
+
226
+ # Add as a single ChatMessage with metadata.title and metadata.log.
227
+ # Display the arguments as the first part of the content, clearly separated from the response,
228
+ # and display the tool response content as contiguous text.
229
+ chat_history.append(
230
+ gr.ChatMessage(
231
+ role="assistant",
232
+ content=f"Input: {json.dumps(args)}\n\nResponse{database_label}:\n{pretty}",
233
+ metadata={
234
+ "title": title
235
+ }
236
+ )
237
+ )
238
+
239
+ # Clear after rendering
240
+ last_tool_calls = []
241
+
242
+ return chat_history
243
+