diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f2ea25f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.eslintrc.json
+.eslintrc.js
+.prettierrc
\ No newline at end of file
diff --git a/ChromeExtension/background/background.js b/ChromeExtension/background/background.js
new file mode 100644
index 0000000..f274364
--- /dev/null
+++ b/ChromeExtension/background/background.js
@@ -0,0 +1,23 @@
+chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
+ if (changeInfo.status === "complete" && tab.status === "complete" && tab.url) {
+ chrome.tabs.sendMessage(tabId, {
+ type: "CHECK_URL",
+ });
+ }
+ chrome.tabs.sendMessage(tabId, {
+ type: "UPDATE_REPO_LAYOUT",
+ });
+});
+
+chrome.runtime.onMessage.addListener(handleMessage);
+
+/**
+ * Function name: handleMessage
+ * @param {string} msg
+ * Responds to changes in content script
+ */
+function handleMessage(msg) {
+ if (msg.type === "OPEN_COMPLETE_OVERVIEW") {
+ chrome.tabs.create({ url: chrome.runtime.getURL("content/overview.html") });
+ }
+}
diff --git a/ChromeExtension/content/constants.js b/ChromeExtension/content/constants.js
new file mode 100644
index 0000000..6326a4e
--- /dev/null
+++ b/ChromeExtension/content/constants.js
@@ -0,0 +1,40 @@
+const constantStrings = {
+ NOW_EDITING_FILE_MESSAGE:
+ "You are now editing the file, make your changes below and press the green button to continue",
+ PULL_REQUEST_CREATED_MESSAGE:
+ "The pull request was created successfully and will be reviewed shortly",
+ COMMENT_ADDED_MESSAGE:
+ "The mentioned user will receive a notification and may help you work on the pull request.",
+ FILENAME_TOOLTIP: "This is the file name, changing it will create a new file with the new name.",
+ PROPOSE_CHANGES_TOOLTIP:
+ "By clicking the Propose changes button you will start the pull request submission process. You will have the chance to check your changes before finalizing it.",
+ DIRECTLY_COMMIT_CHANGES_TOOLTIP:
+ "By clicking the Commit Changes button the changes will automatically be pushed to the repo",
+ PULL_REQUEST_TITLE_TOOLTIP:
+ "This is the title of the pull request. Give a brief description of the change. Be short and objective.",
+ PULL_REQUEST_DESCRIPTION_TOOLTIP:
+ "Add a more detailed description of the pull request if needed. Here you can present your arguments and reasoning that lead to change.",
+ PULL_REQUEST_DETAILED_DESCRIPTION_TOOLTIP:
+ "You can add a more detailed description of the pull request here if needed.",
+ PULL_REQUEST_ORIGIN_AND_DESTINATION_TOOLTIP:
+ "By clicking this button you will create the pull request to allow others to view your changes and accept them into the repository.",
+ CREATE_PULL_REQUEST_TOOLTIP:
+ "By clicking this button you will create the pull request to allow others to view your changes and accept them into the repository.",
+ PULL_REQUEST_SUMMARY_TOOLTIP:
+ "This shows the amount of commits in the pull request, the amount of files you changed in the pull request, how many comments were on the commits for the pull request and the ammount of people who worked together on this pull request.",
+ PULL_REQUEST_FILE_COMPARISON_TOOLTIP:
+ "This shows the changes between the orginal file and your version. Green(+) represents lines added. Red(-) represents removed lines",
+ PULL_REQUEST_STATUS_TOOLTIP:
+ "This indicates that the pull request is open meaning someone will get to it soon.",
+ PULL_REQUEST_MENU_TOOLTIP:
+ "Feel free to explore this menu, you can discuss with project contributors, see the commits made, check the review status and see the files changed.",
+ CLOSE_PULL_REQUEST_TOOLTIP:
+ "This will close the pull request meaning people cannot view this! Do not click close unless the request was solved.",
+ COMMIT_TITLE_TOOLTIP:
+ "This is the title of the commit. Give a brief description of the change. Be short and objective.",
+ COMMIT_FILES_DESCRIPTION_TOOLTIP:
+ "Add a more detailed description of the commit if needed. Here you can describe the files uploaded.",
+ HISTORY_LINK_TOOLTIP:
+ 'Use the "History" link
to view changes to this
file by other contributors.',
+ PENCIL_ICON_TOOLTIP: "Click the pencil to edit the file and start a pull request",
+};
diff --git a/ChromeExtension/content/content.js b/ChromeExtension/content/content.js
new file mode 100644
index 0000000..5bc6d2d
--- /dev/null
+++ b/ChromeExtension/content/content.js
@@ -0,0 +1,385 @@
+const plugin = {
+ currentPageUrl: document.location.pathname,
+ hasInjectedContent: false,
+
+ checkUrl: () => {
+ const pathArray = document.location.pathname.split("/");
+ const urlArray = [
+ {
+ name: "/edit/",
+ runFunction: createFileEditorToolTips,
+ },
+ {
+ name: "/compare/",
+ runFunction: createConfirmPullRequestToolTips,
+ },
+ {
+ name: "/pull/",
+ runFunction: createReviewPullRequestToolTips,
+ },
+ {
+ name: "/upload/",
+ runFunction: updateUploadFilesPage,
+ },
+ {
+ name: "/blob/",
+ runFunction: updateViewFilePage,
+ },
+ ];
+ const foundUrl = urlArray.find((object) => plugin.currentPageUrl.includes(object.name));
+ foundUrl?.runFunction() ?? console.log("URL was not found.");
+
+ if (foundUrl === undefined && pathArray.length === 2) {
+ addCompleteOverviewButton(pathArray[1]);
+ }
+ },
+};
+
+window.onload = () => {
+ if (!plugin.hasInjectedContent) {
+ plugin.hasInjectedContent = true;
+ plugin.currentPageUrl = document.location.pathname;
+ plugin.checkUrl();
+ }
+};
+
+/**
+ * Object for monitoring progress of the pull request process
+ */
+const pullRequestProcess = {
+ steps: ["Edit File", "Confirm Pull Request", "Pull Request Opened"],
+ currentStep: 2,
+ totalSteps: 3,
+
+ setCurrentStep: (newStep) => {
+ pullRequestProcess.currentStep = newStep;
+ },
+
+ getCurrentStep: () => {
+ return pullRequestProcess.currentStep;
+ },
+
+ createProgressBar: (updatedStep, rootElement) => {
+ pullRequestProcess.currentStep = updatedStep;
+ const { totalSteps, steps } = pullRequestProcess;
+ addProgressBar(updatedStep, totalSteps, rootElement, steps);
+ },
+};
+
+/**
+ * Adds tooltips when editing files (First step)
+ */
+function createFileEditorToolTips() {
+ pullRequestProcess.createProgressBar(1, ".js-blob-form");
+
+ if (document.getElementsByClassName("flash-messages ")[0] !== null) {
+ $(".flash-messages").addClass("text-center");
+ document.getElementsByClassName("flash")[0].innerText = getString("NOW_EDITING_FILE_MESSAGE");
+ }
+
+ const fileNameChangeIconText = getString("FILENAME_TOOLTIP");
+ const branchNameLink = ".branch-name:eq(0)";
+ createIconAfterElement(fileNameChangeIconText, branchNameLink);
+
+ updatePullRequestTitleInput();
+ updatePullRequestDescriptionInput();
+
+ const createPullRequestIconText = getString("PROPOSE_CHANGES_TOOLTIP");
+ const directlyCommitIconText = getString("DIRECTLY_COMMIT_CHANGES_TOOLTIP");
+ const submitButtonText = document.getElementsByClassName("btn-primary")[1].innerText;
+ const submitChangesIconText =
+ submitButtonText === "Propose changes" ? createPullRequestIconText : directlyCommitIconText;
+ createIconBeforeElement(submitChangesIconText, "#submit-file");
+
+ $('input[name="commit-choice"]').on("click", () => {
+ $(".helpIconText:eq(3)").toggleText(createPullRequestIconText, directlyCommitIconText);
+ });
+}
+
+const updatePullRequestTitleInput = () => {
+ const inputTitleLabel = document.createElement("h3");
+ inputTitleLabel.innerHTML = "Insert a title here";
+ inputTitleLabel.className = "label-margin-right";
+ $(inputTitleLabel).insertBefore("#commit-summary-input");
+
+ const commitTitleIconText = getString("PULL_REQUEST_TITLE_TOOLTIP");
+ createIconAfterElement(commitTitleIconText, "#commit-summary-input");
+};
+
+const updatePullRequestDescriptionInput = () => {
+ const inputDescriptionLabel = document.createElement("h3");
+ inputDescriptionLabel.innerHTML = "Insert a
description here";
+ inputDescriptionLabel.className = "label-margin-right";
+ $(inputDescriptionLabel).insertBefore("#commit-description-textarea");
+
+ const descriptionIconText = getString("PULL_REQUEST_DESCRIPTION_TOOLTIP");
+ createIconAfterElement(descriptionIconText, "#commit-description-textarea");
+};
+
+/**
+ * Creates tooltips when confirming a change to file (Second step)
+ */
+function createConfirmPullRequestToolTips() {
+ pullRequestProcess.createProgressBar(2, ".repository-content");
+
+ const pullRequestDescription = getString("PULL_REQUEST_DETAILED_DESCRIPTION_TOOLTIP");
+ $("#pull_request_body").attr("placeholder", pullRequestDescription);
+
+ let isComparingBranch = false;
+
+ if (document.getElementsByClassName("branch-name").length > 0) {
+ isComparingBranch = true;
+ }
+
+ if (isComparingBranch) {
+ $(".Subhead-heading").text("Create Pull Request");
+ }
+
+ const pullRequestTitle = document.getElementsByClassName("Subhead-heading")[1];
+ pullRequestTitle.innerHTML = "Create pull request";
+
+ const topRibbon = document.getElementsByClassName("js-range-editor")[0];
+ topRibbon.style.width = "93%";
+ topRibbon.style.display = "inline-block";
+
+ const destinationIconText = getString("PULL_REQUEST_ORIGIN_AND_DESTINATION_TOOLTIP");
+ createIconAfterElement(destinationIconText, ".js-range-editor:eq(0)");
+
+ if (!isComparingBranch) {
+ const buttonRow = document.getElementsByClassName("d-flex flex-justify-end m-2")[0];
+ buttonRow.classList.remove("flex-justify-end");
+ buttonRow.classList.add("flex-justify-start");
+ }
+
+ const createPullRequestButtonIconText = getString("CREATE_PULL_REQUEST_TOOLTIP");
+ const submitButtonClass = ".js-pull-request-button";
+
+ createIconAfterElement(createPullRequestButtonIconText, submitButtonClass);
+
+ const requestSummaryIconText = getString("PULL_REQUEST_SUMMARY_TOOLTIP");
+
+ const summaryClass = ".overall-summary";
+ createIconAfterElement(requestSummaryIconText, summaryClass);
+
+ createPullRequestComparisonIcon();
+}
+
+const createPullRequestComparisonIcon = () => {
+ const comparisonIconText = getString("PULL_REQUEST_FILE_COMPARISON_TOOLTIP");
+
+ const comparisonClass = "#commits_bucket";
+ const comparisonIcon = createIconAfterElement(comparisonIconText, comparisonClass);
+ comparisonIcon.style.float = "right";
+ comparisonIcon.style.marginTop = "20px";
+ comparisonIcon.style.marginRight = "-10px";
+};
+
+/**
+ * Adds tooltips when reviewing a pull request (Final step)
+ */
+function createReviewPullRequestToolTips() {
+ pullRequestProcess.createProgressBar(3, ".gh-header");
+
+ const pullRequestStatusIconText = getString("PULL_REQUEST_STATUS_TOOLTIP");
+ const pullRequestState = $(".State:eq(0)").text().trim();
+
+ if (pullRequestState !== "Closed") {
+ const pullRequestStatusIcon = createIconAfterElement(pullRequestStatusIconText, ".State:eq(0)");
+
+ pullRequestStatusIcon.style.marginLeft = "10px";
+ pullRequestStatusIcon.style.marginRight = "10px";
+ }
+
+ $(".tabnav-tabs:eq(0)").addClass("overflow-visible");
+ $(".tabnav-tabs:eq(0)").removeClass("overflow-auto");
+
+ const pullRequestNavIconText = getString("PULL_REQUEST_MENU_TOOLTIP");
+
+ const totalTabs = $(".tabnav-tabs:eq(0) .tabnav-tab").length;
+ createIconAfterElement(pullRequestNavIconText, `.tabnav-tab:eq(${totalTabs - 1})`);
+
+ $(".helpIconText:eq(1)").width(250);
+
+ $("primer-tooltip[for='md-mention-new_comment_field']").html(
+ 'Use "@" to mention a project contributor.'
+ );
+
+ updatePullRequestButtonRow();
+ updateClosePullRequestButton();
+ $(document).on("submit", ".js-new-comment-form", () => {
+ chrome.storage.sync.set({ hasSubmittedMessage: true });
+ createMessageSubmittedRibbon();
+ });
+}
+
+const updatePullRequestButtonRow = () => {
+ $(".d-flex.flex-justify-end").removeClass("flex-justify-end");
+};
+
+const updateClosePullRequestButton = () => {
+ const pullRequestName = document.getElementsByClassName("js-issue-title")[0].innerText;
+ const closePullRequestButtonClass = 'button[name="comment_and_close"]';
+ const closePullRequestButton = $(closePullRequestButtonClass);
+ const closePullRequestIconText = getString("CLOSE_PULL_REQUEST_TOOLTIP");
+
+ const closePullRequestIcon = createIconBeforeElement(
+ closePullRequestIconText,
+ closePullRequestButtonClass
+ );
+ closePullRequestIcon.style.marginRight = "20px";
+
+ closePullRequestButton.on("click", (event) => {
+ if (!confirm(`Are you sure that you want to close the pull request: ${pullRequestName}?`)) {
+ event.preventDefault();
+ }
+ });
+};
+
+/**
+ * Checks if the user is viewing a file that they do not own
+ */
+function isEditingForkedFile() {
+ const pencilIconLabelsList = [
+ "Edit the file in your fork of this project",
+ "Fork this project and edit the file",
+ ];
+
+ try {
+ const pencilIconLabel = document
+ .getElementsByClassName("tooltipped")[2]
+ .getAttribute("aria-label");
+ // check if there is a pencil icon with this aria label
+ return pencilIconLabelsList.includes(pencilIconLabel);
+ } catch (error) {
+ return false;
+ }
+}
+
+function isCurrentlyViewingFile() {
+ return document.location.pathname.includes("blob") && $(".js-file-line-container").length > 0;
+}
+
+/**
+ * Edits pencil label when viewing a file in a repository that you are not a contributor of
+ */
+function createForkedFileToolTips() {
+ $(".tooltipped-nw:nth-child(2)").attr("aria-label", "Edit File");
+}
+
+const isPullRequestOpen = () => {
+ const gitHubStateElements = document.getElementsByClassName("State");
+ return gitHubStateElements[0]?.getAttribute("title") === "Status: Open" ?? false;
+};
+
+function createSuccessRibbon() {
+ if (document.location.pathname.includes("/pull")) {
+ const successRibbonContainer = document.createElement("div");
+ const ribbonMessage = getString("PULL_REQUEST_CREATED_MESSAGE");
+ const ribbonTextNode = document.createTextNode(ribbonMessage);
+
+ successRibbonContainer.className = "successRibbon text-center";
+ successRibbonContainer.appendChild(ribbonTextNode);
+ $(successRibbonContainer).insertBefore(".container");
+ }
+}
+
+const createMessageSubmittedRibbon = async () => {
+ const hasSubmittedMessage = await getValueFromStorage("hasSubmittedMessage", false);
+ if (hasSubmittedMessage && $(".successRibbon").length === 1) {
+ const ribbonMessage = getString("COMMENT_ADDED_MESSAGE");
+ $(".successRibbon").html(ribbonMessage);
+ }
+
+ if (hasSubmittedMessage && $(".container").length === 1) {
+ chrome.storage.sync.set({ hasSubmittedMessage: false });
+ }
+};
+
+const updateUploadFilesPage = () => {
+ const totalForksLabel = "#repo-network-counter";
+
+ if (cannotForkRepository()) {
+ $(".blankslate p:first").text(
+ "In order to upload files, click the fork button on the upper right"
+ );
+
+ $(totalForksLabel).parent().addClass("btn-primary");
+ }
+
+ const commitIconText = getString("COMMIT_TITLE_TOOLTIP");
+ createIconAfterElement(commitIconText, "#commit-summary-input");
+
+ const commitDescriptionText = getString("COMMIT_FILES_DESCRIPTION_TOOLTIP");
+ createIconAfterElement(commitDescriptionText, "#commit-description-textarea");
+
+ $('button[data-edit-text="Commit changes"]').on("click", () => {
+ chrome.storage.sync.set({ hasUploadedNewFile: true, activePage: "home" });
+ });
+};
+
+const cannotForkRepository = () => {
+ return (
+ $(".blankslate p:first").text().trim() ===
+ "File uploads require push access to this repository."
+ );
+};
+
+const updateViewFilePage = () => {
+ const historyLinkText = getString("HISTORY_LINK_TOOLTIP");
+ const fileIconText = getString("PENCIL_ICON_TOOLTIP");
+ const fileIconClassname = ".js-update-url-with-hash:eq(1)";
+
+ if ($(".helpIcon").length === 0) {
+ createIconAfterElement(historyLinkText, ".ml-3:eq(1)");
+ createIconAfterElement(fileIconText, fileIconClassname);
+ }
+};
+
+const addCompleteOverviewButton = (username) => {
+ const overviewButton = document.createElement("span");
+ overviewButton.className = "btn btn-primary";
+ overviewButton.id = "overview-button";
+ overviewButton.innerHTML = "Complete Overview";
+
+ if ($("#overview-button").length === 0) {
+ $(overviewButton).insertBefore(".graph-before-activity-overview");
+ }
+ $("#overview-button").on("click", () => {
+ chrome.storage.sync.set({ username: username });
+
+ chrome.runtime.sendMessage({
+ type: "OPEN_COMPLETE_OVERVIEW",
+ });
+ });
+};
+
+chrome.runtime.onMessage.addListener((msg) => {
+ if (msg.type === "CHECK_URL") {
+ if (!plugin.hasInjectedContent || $(".helpIcon").length === 0) {
+ plugin.hasInjectedContent = true;
+ plugin.currentPageUrl = document.location.pathname;
+
+ plugin.checkUrl();
+ }
+ if (isEditingForkedFile()) {
+ createForkedFileToolTips();
+ }
+ if (isCurrentlyViewingFile()) {
+ plugin.currentPageUrl = document.location.pathname;
+ plugin.checkUrl();
+ }
+ } else if (msg.type === "TOGGLE_EXTENSION") {
+ toggleExtension();
+ }
+});
+
+function toggleExtension() {
+ $(".helpIcon").toggleClass("display-none");
+ $(".successRibbon").toggleClass("display-none");
+ $(".container").toggleClass("display-none");
+}
+
+// listen globaly for fork button to be clicked
+$(".btn-with-count button:eq(0)").on("click", () => {
+ chrome.storage.sync.set({ hasForked: true });
+});
diff --git a/ChromeExtension/content/overview.html b/ChromeExtension/content/overview.html
new file mode 100644
index 0000000..4faeb79
--- /dev/null
+++ b/ChromeExtension/content/overview.html
@@ -0,0 +1,1404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ChromeExtension/content/overview.js b/ChromeExtension/content/overview.js
new file mode 100644
index 0000000..b6c44b9
--- /dev/null
+++ b/ChromeExtension/content/overview.js
@@ -0,0 +1,385 @@
+class Card {
+ constructor(
+ repositoryName,
+ repositoryLink,
+ commitTotal,
+ topLanguage,
+ languageColor,
+ cardContainer
+ ) {
+ this.repositoryName = repositoryName;
+ this.repositoryLink = repositoryLink;
+ this.commitTotal = commitTotal;
+ this.topLanguage = topLanguage;
+ this.languageColor = languageColor;
+ this.cardContainer = cardContainer;
+ }
+
+ createCard() {
+ const cardContainer = document.createElement("div");
+ cardContainer.className = "card";
+
+ cardContainer.innerHTML = `
+
+
+
+ Commits: ${this.commitTotal}
`;
+
+ if (this.topLanguage !== null) {
+ cardContainer.innerHTML += `
+
+
+
${this.topLanguage}
+
`;
+ }
+
+ cardContainer.innerHTML += `
+
+
+
+ Commits/Issues Overview
+
+
`;
+
+ this.cardContainer = cardContainer;
+ }
+}
+
+window.onload = async () => {
+ const gitHubUsername = await retrieveGitHubUsername();
+
+ document.getElementById(
+ "username"
+ ).innerHTML = ` ${gitHubUsername}/Repositories`;
+
+ $("#github-username").html(gitHubUsername);
+ updateOverviewPageLinks(gitHubUsername);
+
+ const userProfileImage = await retrieveProfileImage(gitHubUsername);
+
+ $("#profile-image").attr("src", userProfileImage);
+ getRepos(gitHubUsername);
+};
+
+/**
+ * Function name: updateOverviewPageLinks
+ * Updates links to point to current user's GitHub
+ */
+function updateOverviewPageLinks(gitHubUsername) {
+ const baseURL = "https://github.com";
+
+ $(".user-profile-link").prop("href", `${baseURL}/${gitHubUsername}`);
+ $("#profile-link").prop("href", `${baseURL}/${gitHubUsername}`);
+ $("#repositories-link").prop("href", `${baseURL}/${gitHubUsername}`);
+ $("#projects-link").prop("href", `${baseURL}/${gitHubUsername}?tab=projects`);
+ $("#stars-link").prop("href", `${baseURL}/${gitHubUsername}?tab=stars`);
+}
+
+/**
+ * Creates cards containing total commits and top langauge
+ */
+async function createCompleteOverview(userData, username) {
+ const FIRST_PAGE = 1;
+ const MAX_CARDS_PER_ROW = 4;
+ const allRepositories = [];
+
+ let isNewPage = false;
+ let rowElements = "";
+ try {
+ rowElements = document.getElementsByClassName("row")[0].childElementCount;
+ } catch (error) {
+ isNewPage = true;
+ }
+
+ let newRow = "";
+
+ if (rowElements === 4 || isNewPage) {
+ newRow = document.createElement("div");
+ newRow.className = "row";
+ $(newRow).insertAfter(".row:last");
+ }
+
+ for (const repo of userData) {
+ const totalCommits = await getAllCommits(repo.name, username, FIRST_PAGE);
+ const langaugeColor = await getLanguageColor(repo.language);
+ const { name, html_url, language } = repo;
+ const repositoryCard = new Card(name, html_url, totalCommits, language, langaugeColor);
+ allRepositories.push(repositoryCard);
+ }
+
+ sortArrayByTotalCommits(allRepositories);
+
+ allRepositories.forEach((repository) => {
+ repository.createCard(username);
+
+ const totalRows = document.getElementsByClassName("row").length;
+
+ let lastRowCardCount = 0;
+
+ newRow = document.createElement("div");
+ newRow.className = "row";
+
+ if (totalRows !== 0) {
+ lastRowCardCount = document.getElementsByClassName("row")[totalRows - 1].childElementCount;
+ } else if (totalRows === 0) {
+ $(newRow).appendTo("#content");
+ }
+
+ // if the row is full
+ if (lastRowCardCount === MAX_CARDS_PER_ROW) {
+ $(newRow).insertAfter(".row:last");
+ }
+
+ $(".row:last").append(repository.cardContainer);
+ });
+
+ return true;
+}
+
+/**
+ * Sorts given array in descending order
+ */
+function sortArrayByTotalCommits(array) {
+ array.sort((a, b) => {
+ return b.commitTotal - a.commitTotal;
+ });
+}
+
+/**
+ * Uses GitHub API to view programming languages for user
+ */
+async function getRepos(username) {
+ const url = `https://api.github.com/users/${username}/repos`;
+
+ const result = await parseGithubUrl(url);
+
+ const repositoriesCreated = await createCompleteOverview(result, username);
+
+ if (repositoriesCreated) {
+ document.getElementById("progressBar").style.display = "none";
+ }
+}
+
+async function getAllCommits(repositoryName, username, page) {
+ const MAX_PAGES = 25;
+
+ const commitUrl = `https://api.github.com/repos/${username}/${repositoryName}/commits?page=${page}&per_page=100`;
+
+ const commitResult = await parseGithubUrl(commitUrl);
+
+ let totalCommits = commitResult.length;
+
+ if (totalCommits % 100 === 0 && page < MAX_PAGES) {
+ totalCommits += await getAllCommits(repositoryName, username, page + 1);
+ }
+
+ return totalCommits;
+}
+
+async function parseGithubUrl(apiUrl) {
+ const oAuthToken = "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";
+
+ const apiHeaders = {
+ Authorization: `Token ${oAuthToken}`,
+ };
+
+ const apiResponse = await fetch(apiUrl, {
+ method: "GET",
+ headers: apiHeaders,
+ });
+
+ const apiResult = await apiResponse.json();
+
+ return apiResult;
+}
+
+async function getAllCommitMessages(repository, username, page) {
+ const MAX_PAGES = 15;
+
+ const commitsUrl = `https://api.github.com/repos/${username}/${repository}/commits?page=${page}&per_page=100`;
+ const commits = await parseGithubUrl(commitsUrl);
+
+ document.getElementById(
+ "repo-name"
+ ).innerHTML = `
+ ${repository}`;
+
+ let modalContainerIsEmpty = true;
+ if (commits.length !== 0) {
+ commits.forEach((commit) => {
+ if (commit.author !== null && commit.author.login === username) {
+ updateRepositoryModal(commit.commit.message, commit.html_url, commit.commit.author.date);
+
+ modalContainerIsEmpty = false;
+ }
+ });
+
+ document.getElementById("modalContainer").style.display = "block";
+ if (commits.length % 100 === 0 && page < MAX_PAGES) {
+ getAllCommitMessages(repository, username, page + 1);
+ }
+
+ if (modalContainerIsEmpty && page === 1) {
+ updateRepositoryModal(`There were no commits by ${username} in this repository.`, "");
+ }
+ }
+}
+
+async function updateRepositoryCounters(repository, username, page) {
+ const totalIssues = await getTotalIssues(repository, username, page);
+ const issueCounter = document.getElementById("issuesCounter");
+ issueCounter.innerHTML = totalIssues;
+
+ const totalCommits = await getTotalCommits(repository, username, page);
+ const commitCounter = document.getElementById("commitsCounter");
+ commitCounter.innerHTML = totalCommits;
+}
+
+async function getTotalIssues(repository, username, page) {
+ const issuesUrl = `https://api.github.com/repos/${username}/${repository}/issues?page=${page}&per_page=100`;
+
+ const issues = await parseGithubUrl(issuesUrl);
+ let total = 0;
+
+ issues.forEach((issue) => {
+ if (issue.user.login !== null && issue.user.login === username) {
+ total += 1;
+ }
+ });
+
+ return total;
+}
+
+async function getTotalCommits(repository, username, page) {
+ const commitsUrl = `https://api.github.com/repos/${username}/${repository}/commits?page=${page}&per_page=100`;
+
+ const commits = await parseGithubUrl(commitsUrl);
+
+ const userCommits = commits.filter(
+ (commit) => commit.author !== null && commit.author.login === username
+ );
+ let totalCommits = userCommits.length;
+
+ const MAX_PAGE = 25;
+
+ if (page < MAX_PAGE && total % 100 === 0) {
+ totalCommits += await getTotalCommits(repository, username, page + 1);
+ }
+
+ return totalCommits;
+}
+
+async function updateRepositoryModal(message, commitLink, createdDate) {
+ const username = await retrieveGitHubUsername();
+
+ const profileImage = await retrieveProfileImage(username);
+
+ const innerContainer = document.getElementsByClassName("modal-content")[0];
+
+ const messageContainer = document.createElement("p");
+ messageContainer.className = "message-title";
+ if (createdDate === undefined) {
+ messageContainer.innerHTML = `${message}`;
+ } else {
+ const localTime = new Date(createdDate).toLocaleDateString();
+ messageContainer.innerHTML = `${message}
${username} Committed at: ${localTime}`;
+ }
+ innerContainer.appendChild(messageContainer);
+}
+
+async function getLanguageColor(language) {
+ if (language === null) {
+ return "#000";
+ }
+
+ const url = chrome.runtime.getURL("data/colors.json");
+
+ const response = await fetch(url);
+ const colors = await response.json();
+
+ return colors[language].color;
+}
+
+async function getAllIssues(repository, username, page) {
+ const issuesUrl = `https://api.github.com/repos/${username}/${repository}/issues?page=${page}&per_page=100`;
+ const issues = await parseGithubUrl(issuesUrl);
+
+ issues.forEach((issue) => {
+ if (issue.user.login !== null && issue.user.login === username) {
+ updateRepositoryModal(issue.title, issue.created_at, issue.html_url);
+ }
+ });
+
+ if (issues.length % 100 === 0) {
+ getAllIssues(repository, username, page + 1);
+ }
+}
+
+async function retrieveProfileImage(username) {
+ const profileUrl = `https://api.github.com/users/${username}`;
+ const userProfile = await parseGithubUrl(profileUrl);
+ return userProfile.avatar_url;
+}
+
+async function retrieveGitHubUsername() {
+ const localUsername = new Promise((resolve) => {
+ chrome.storage.sync.get("username", (result) => {
+ resolve(result.username);
+ });
+ });
+
+ const username = await localUsername;
+
+ return username;
+}
+
+$("#repo-issues-link").click(async () => {
+ if ($("#commit-messages-link").attr("aria-current")) {
+ $("#commit-messages-link").removeAttr("aria-current");
+ $("#repo-issues-link").attr("aria-current", "page");
+
+ const currentRepository = document.getElementById("repo-name").innerText.trim();
+ const username = await retrieveGitHubUsername();
+
+ document.querySelectorAll(".message-title").forEach((element) => element.remove());
+
+ getAllIssues(currentRepository, username, 1);
+ }
+});
+
+$("#commit-messages-link").click(async () => {
+ if ($("#repo-issues-link").attr("aria-current")) {
+ $("#repo-issues-link").removeAttr("aria-current");
+ $("#commit-messages-link").attr("aria-current", "page");
+
+ const currentRepository = document.getElementById("repo-name").innerText.trim();
+ const username = await retrieveGitHubUsername();
+
+ document.querySelectorAll(".message-title").forEach((element) => element.remove());
+
+ getAllCommitMessages(currentRepository, username, 1);
+ }
+});
+
+document.body.onclick = async (event) => {
+ const gitHubUser = await retrieveGitHubUsername();
+
+ if (event.target.getAttribute("class") === "label") {
+ const repositoryName = event.srcElement.id;
+ getAllCommitMessages(repositoryName, gitHubUser, 1);
+ updateRepositoryCounters(repositoryName, gitHubUser, 1);
+ }
+};
+
+document.getElementsByClassName("close")[0].onclick = () => {
+ document.getElementById("modalContainer").style.display = "none";
+ document.querySelectorAll(".message-title").forEach((element) => element.remove());
+ document.getElementById("repo-name").innerHTML = "";
+
+ $("#repo-issues-link").removeAttr("aria-current");
+ $("#commit-messages-link").attr("aria-current", "page");
+};
diff --git a/ChromeExtension/content/repositoryLayout.js b/ChromeExtension/content/repositoryLayout.js
new file mode 100644
index 0000000..e31d6d2
--- /dev/null
+++ b/ChromeExtension/content/repositoryLayout.js
@@ -0,0 +1,135 @@
+function updateCodeTabId() {
+ const codeNavLinkText = $(".UnderlineNav-body:eq(0) a:eq(0)").text().trim();
+
+ if (codeNavLinkText === "Code") {
+ $(".js-repo-nav a:eq(0)").prop("id", "codeLink");
+ }
+
+ createNavLinkClickListener("#codeLink", "code");
+}
+
+/**
+ * Updates the main page of a repository to only dispay readme file
+ */
+async function createHomePage() {
+ const currentPage = await getCurrentRepositoryPage();
+ const canUpdateHomePage = isOnHomeOrCodePage();
+ const hasForked = await getValueFromStorage("hasForked", false);
+ const hasUploadedFile = await getValueFromStorage("hasUploadedNewFile", false);
+ createHomePageLink();
+
+ const filesContainer = $(".file-navigation");
+ const totalIcons = $(".helpIcon").length;
+
+ if (hasForked && !document.location.pathname.includes("upload") && filesContainer.length === 1) {
+ createNewMessage("The repository was successfully forked");
+ }
+ if (hasUploadedFile && !document.location.pathname.includes("upload")) {
+ createNewMessage("The files were successfully added");
+ }
+
+ if (currentPage === "home" && canUpdateHomePage) {
+ hideFilesInRepository();
+
+ $(".selected:eq(0)").removeClass("selected");
+ $("#homePage").addClass("selected");
+
+ if ($("#codeLink").attr("aria-current") === "page") {
+ $("#codeLink").addClass("repoNavButton");
+ $("#codeLink").attr("aria-current", "false");
+ }
+
+ $("#readme").removeClass("display-none");
+
+ if (totalIcons < 1) {
+ const readmeIconText =
+ "To edit this file, go to the 'code' tab above, and select the file you want to edit.";
+ createIconAfterElement(readmeIconText, ".Box-title");
+ }
+ } else if (currentPage === "code" && canUpdateHomePage) {
+ $(".Box-header:eq(0)").removeClass("display-none");
+ $(".selected:eq(0)").removeClass("selected");
+ $("#codeLink").addClass("selected");
+ $("#codeLink").attr("aria-current", "page");
+
+ if (!document.location.pathname.includes("blob")) {
+ $("#readme").addClass("display-none");
+ }
+ }
+
+ if (!canUpdateHomePage && $(".selected:eq(0)").text().trim() === "Home") {
+ $(".selected:eq(0)").removeClass("selected");
+ }
+}
+
+const hideFilesInRepository = () => {
+ $(".file-navigation").addClass("display-none");
+ $(".Box-header:eq(0)").addClass("display-none");
+ $(".Details-content--hidden-not-important:eq(1)").removeClass("d-md-block");
+ $(".js-details-container:eq(1)").addClass("d-none");
+};
+
+/**
+ * Creates green ribbon above files in repository after the repo has been forked
+ */
+function createNewMessage(newMessageContent) {
+ const ribbonMessage = document.createTextNode(newMessageContent);
+ const successRibbonContainer = document.createElement("div");
+
+ successRibbonContainer.className = "successRibbon text-center";
+ successRibbonContainer.appendChild(ribbonMessage);
+ $(successRibbonContainer).insertBefore(".repository-content");
+
+ if (newMessageContent.includes("file")) {
+ chrome.storage.sync.set({ hasUploadedNewFile: false });
+ } else {
+ chrome.storage.sync.set({ hasForked: false });
+ }
+}
+
+const createHomePageLink = () => {
+ if (
+ document.getElementById("homePage") === null &&
+ document.getElementsByClassName("h-card").length === 0
+ ) {
+ const imageSource = chrome.runtime.getURL("images/house.png");
+ const repoLink = $(".js-repo-nav a:eq(0)").attr("href");
+ const newNavLink = document.createElement("li");
+ const newNavLinkClass =
+ "js-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item";
+
+ newNavLink.className = "d-flex";
+ newNavLink.innerHTML = `
+
+ Home
+ `;
+
+ $(".UnderlineNav-body").prepend(newNavLink);
+ }
+
+ createNavLinkClickListener("#homePage", "home");
+};
+
+async function getCurrentRepositoryPage() {
+ const currentPage = await getValueFromStorage("activePage", "home");
+
+ return currentPage;
+}
+
+const isOnHomeOrCodePage = () => {
+ const currentUrl = document.location.pathname;
+ return currentUrl.split("/").length === 3;
+};
+
+const createNavLinkClickListener = (targetElement, targetPage) => {
+ $(targetElement).on("click", (event) => {
+ chrome.storage.sync.set({ activePage: targetPage });
+ });
+};
+
+chrome.runtime.onMessage.addListener((msg) => {
+ if (msg.type === "UPDATE_REPO_LAYOUT") {
+ updateCodeTabId();
+ createHomePage();
+ }
+});
diff --git a/ChromeExtension/content/util.js b/ChromeExtension/content/util.js
new file mode 100644
index 0000000..215dbf3
--- /dev/null
+++ b/ChromeExtension/content/util.js
@@ -0,0 +1,96 @@
+const isDarkMode = () => {
+ return $("html").attr("data-color-mode") === "dark";
+};
+
+const addProgressBar = (currentStep, totalSteps, rootElement, stepsList) => {
+ const progressBarContainer = document.createElement("div");
+ progressBarContainer.className = "container";
+
+ const progressBar = document.createElement("div");
+ progressBar.className = "progressbar";
+
+ const progressBarSteps = document.createElement("ul");
+
+ let index;
+
+ for (index = 1; index <= stepsList.length; index += 1) {
+ const progressBarStep = document.createElement("li");
+ progressBarStep.innerHTML = stepsList[index - 1];
+
+ if (currentStep === totalSteps) {
+ progressBarStep.className = "completed";
+ } else if (currentStep === index) {
+ progressBarStep.className = "partial";
+ } else if (index < currentStep) {
+ progressBarStep.className = "partial completed";
+ }
+
+ if (isDarkMode()) {
+ progressBarStep.className += " dark-mode-step";
+ }
+
+ progressBarSteps.appendChild(progressBarStep);
+ }
+
+ progressBar.appendChild(progressBarSteps);
+
+ progressBarContainer.appendChild(progressBar);
+ $(progressBarContainer).insertBefore(rootElement);
+
+ if (isPullRequestOpen()) {
+ createSuccessRibbon();
+ }
+};
+
+const createIcon = (text) => {
+ const toolTipContainer = document.createElement("div");
+ toolTipContainer.className = `helpIcon ${isDarkMode() ? "darkmode-icon" : ""}`;
+
+ toolTipContainer.innerHTML = `?
+ ${text}`;
+
+ return toolTipContainer;
+};
+
+const createIconAfterElement = (text, gitHubElement) => {
+ const toolTip = createIcon(text);
+ $(toolTip).insertAfter(gitHubElement);
+ return toolTip;
+};
+
+const createIconBeforeElement = (text, gitHubElement) => {
+ const toolTip = createIcon(text);
+ $(toolTip).insertBefore(gitHubElement);
+ return toolTip;
+};
+
+const createIconAfterLastElement = (text, gitHubElement) => {
+ const toolTip = createIcon(text);
+ $(toolTip).insertAfter(gitHubElement).last();
+ return toolTip;
+};
+
+const getValueFromStorage = async (key, defaultValue) => {
+ const result = new Promise((resolve) => {
+ chrome.storage.sync.get(key, (result) => {
+ resolve(result[key]);
+ });
+ });
+
+ const value = await result;
+
+ return value ?? defaultValue;
+};
+
+const getString = (name) => {
+ return constantStrings[name] ?? "";
+};
+
+/**
+ * Custom jQuery function to toggle text
+ */
+$.fn.extend({
+ toggleText(firstElement, secondElement) {
+ return this.text(this.text() === secondElement ? firstElement : secondElement);
+ },
+});
diff --git a/ChromeExtension/data/colors.json b/ChromeExtension/data/colors.json
new file mode 100644
index 0000000..4b051bd
--- /dev/null
+++ b/ChromeExtension/data/colors.json
@@ -0,0 +1,1622 @@
+{
+ "1C Enterprise": {
+ "color": "#814CCC",
+ "url": "https://github.com/trending?l=1C-Enterprise"
+ },
+ "4D": {
+ "color": null,
+ "url": "https://github.com/trending?l=4D"
+ },
+ "ABAP": {
+ "color": "#E8274B",
+ "url": "https://github.com/trending?l=ABAP"
+ },
+ "ActionScript": {
+ "color": "#882B0F",
+ "url": "https://github.com/trending?l=ActionScript"
+ },
+ "Ada": {
+ "color": "#02f88c",
+ "url": "https://github.com/trending?l=Ada"
+ },
+ "Agda": {
+ "color": "#315665",
+ "url": "https://github.com/trending?l=Agda"
+ },
+ "AGS Script": {
+ "color": "#B9D9FF",
+ "url": "https://github.com/trending?l=AGS-Script"
+ },
+ "Alloy": {
+ "color": "#64C800",
+ "url": "https://github.com/trending?l=Alloy"
+ },
+ "Alpine Abuild": {
+ "color": null,
+ "url": "https://github.com/trending?l=Alpine-Abuild"
+ },
+ "AMPL": {
+ "color": "#E6EFBB",
+ "url": "https://github.com/trending?l=AMPL"
+ },
+ "AngelScript": {
+ "color": "#C7D7DC",
+ "url": "https://github.com/trending?l=AngelScript"
+ },
+ "ANTLR": {
+ "color": "#9DC3FF",
+ "url": "https://github.com/trending?l=ANTLR"
+ },
+ "Apex": {
+ "color": null,
+ "url": "https://github.com/trending?l=Apex"
+ },
+ "API Blueprint": {
+ "color": "#2ACCA8",
+ "url": "https://github.com/trending?l=API-Blueprint"
+ },
+ "APL": {
+ "color": "#5A8164",
+ "url": "https://github.com/trending?l=APL"
+ },
+ "Apollo Guidance Computer": {
+ "color": null,
+ "url": "https://github.com/trending?l=Apollo-Guidance-Computer"
+ },
+ "AppleScript": {
+ "color": "#101F1F",
+ "url": "https://github.com/trending?l=AppleScript"
+ },
+ "Arc": {
+ "color": "#aa2afe",
+ "url": "https://github.com/trending?l=Arc"
+ },
+ "ASP": {
+ "color": "#6a40fd",
+ "url": "https://github.com/trending?l=ASP"
+ },
+ "AspectJ": {
+ "color": "#a957b0",
+ "url": "https://github.com/trending?l=AspectJ"
+ },
+ "Assembly": {
+ "color": "#6E4C13",
+ "url": "https://github.com/trending?l=Assembly"
+ },
+ "Asymptote": {
+ "color": "#4a0c0c",
+ "url": "https://github.com/trending?l=Asymptote"
+ },
+ "ATS": {
+ "color": "#1ac620",
+ "url": "https://github.com/trending?l=ATS"
+ },
+ "Augeas": {
+ "color": null,
+ "url": "https://github.com/trending?l=Augeas"
+ },
+ "AutoHotkey": {
+ "color": "#6594b9",
+ "url": "https://github.com/trending?l=AutoHotkey"
+ },
+ "AutoIt": {
+ "color": "#1C3552",
+ "url": "https://github.com/trending?l=AutoIt"
+ },
+ "Awk": {
+ "color": null,
+ "url": "https://github.com/trending?l=Awk"
+ },
+ "Ballerina": {
+ "color": "#FF5000",
+ "url": "https://github.com/trending?l=Ballerina"
+ },
+ "Batchfile": {
+ "color": "#C1F12E",
+ "url": "https://github.com/trending?l=Batchfile"
+ },
+ "Befunge": {
+ "color": null,
+ "url": "https://github.com/trending?l=Befunge"
+ },
+ "Bison": {
+ "color": null,
+ "url": "https://github.com/trending?l=Bison"
+ },
+ "BitBake": {
+ "color": null,
+ "url": "https://github.com/trending?l=BitBake"
+ },
+ "BlitzBasic": {
+ "color": null,
+ "url": "https://github.com/trending?l=BlitzBasic"
+ },
+ "BlitzMax": {
+ "color": "#cd6400",
+ "url": "https://github.com/trending?l=BlitzMax"
+ },
+ "Bluespec": {
+ "color": null,
+ "url": "https://github.com/trending?l=Bluespec"
+ },
+ "Boo": {
+ "color": "#d4bec1",
+ "url": "https://github.com/trending?l=Boo"
+ },
+ "Brainfuck": {
+ "color": "#2F2530",
+ "url": "https://github.com/trending?l=Brainfuck"
+ },
+ "Brightscript": {
+ "color": null,
+ "url": "https://github.com/trending?l=Brightscript"
+ },
+ "C": {
+ "color": "#555555",
+ "url": "https://github.com/trending?l=C"
+ },
+ "C#": {
+ "color": "#178600",
+ "url": "https://github.com/trending?l=Csharp"
+ },
+ "C++": {
+ "color": "#f34b7d",
+ "url": "https://github.com/trending?l=C++"
+ },
+ "C2hs Haskell": {
+ "color": null,
+ "url": "https://github.com/trending?l=C2hs-Haskell"
+ },
+ "Cap'n Proto": {
+ "color": null,
+ "url": "https://github.com/trending?l=Cap'n-Proto"
+ },
+ "CartoCSS": {
+ "color": null,
+ "url": "https://github.com/trending?l=CartoCSS"
+ },
+ "Ceylon": {
+ "color": "#dfa535",
+ "url": "https://github.com/trending?l=Ceylon"
+ },
+ "Chapel": {
+ "color": "#8dc63f",
+ "url": "https://github.com/trending?l=Chapel"
+ },
+ "Charity": {
+ "color": null,
+ "url": "https://github.com/trending?l=Charity"
+ },
+ "ChucK": {
+ "color": null,
+ "url": "https://github.com/trending?l=ChucK"
+ },
+ "Cirru": {
+ "color": "#ccccff",
+ "url": "https://github.com/trending?l=Cirru"
+ },
+ "Clarion": {
+ "color": "#db901e",
+ "url": "https://github.com/trending?l=Clarion"
+ },
+ "Clean": {
+ "color": "#3F85AF",
+ "url": "https://github.com/trending?l=Clean"
+ },
+ "Click": {
+ "color": "#E4E6F3",
+ "url": "https://github.com/trending?l=Click"
+ },
+ "CLIPS": {
+ "color": null,
+ "url": "https://github.com/trending?l=CLIPS"
+ },
+ "Clojure": {
+ "color": "#db5855",
+ "url": "https://github.com/trending?l=Clojure"
+ },
+ "CMake": {
+ "color": null,
+ "url": "https://github.com/trending?l=CMake"
+ },
+ "COBOL": {
+ "color": null,
+ "url": "https://github.com/trending?l=COBOL"
+ },
+ "CodeQL": {
+ "color": null,
+ "url": "https://github.com/trending?l=CodeQL"
+ },
+ "CoffeeScript": {
+ "color": "#244776",
+ "url": "https://github.com/trending?l=CoffeeScript"
+ },
+ "ColdFusion": {
+ "color": "#ed2cd6",
+ "url": "https://github.com/trending?l=ColdFusion"
+ },
+ "ColdFusion CFC": {
+ "color": null,
+ "url": "https://github.com/trending?l=ColdFusion-CFC"
+ },
+ "Common Lisp": {
+ "color": "#3fb68b",
+ "url": "https://github.com/trending?l=Common-Lisp"
+ },
+ "Common Workflow Language": {
+ "color": "#B5314C",
+ "url": "https://github.com/trending?l=Common-Workflow-Language"
+ },
+ "Component Pascal": {
+ "color": "#B0CE4E",
+ "url": "https://github.com/trending?l=Component-Pascal"
+ },
+ "Cool": {
+ "color": null,
+ "url": "https://github.com/trending?l=Cool"
+ },
+ "Coq": {
+ "color": null,
+ "url": "https://github.com/trending?l=Coq"
+ },
+ "Crystal": {
+ "color": "#000100",
+ "url": "https://github.com/trending?l=Crystal"
+ },
+ "Csound": {
+ "color": null,
+ "url": "https://github.com/trending?l=Csound"
+ },
+ "Csound Document": {
+ "color": null,
+ "url": "https://github.com/trending?l=Csound-Document"
+ },
+ "Csound Score": {
+ "color": null,
+ "url": "https://github.com/trending?l=Csound-Score"
+ },
+ "CSS": {
+ "color": "#563d7c",
+ "url": "https://github.com/trending?l=CSS"
+ },
+ "Cuda": {
+ "color": "#3A4E3A",
+ "url": "https://github.com/trending?l=Cuda"
+ },
+ "CWeb": {
+ "color": null,
+ "url": "https://github.com/trending?l=CWeb"
+ },
+ "Cycript": {
+ "color": null,
+ "url": "https://github.com/trending?l=Cycript"
+ },
+ "Cython": {
+ "color": null,
+ "url": "https://github.com/trending?l=Cython"
+ },
+ "D": {
+ "color": "#ba595e",
+ "url": "https://github.com/trending?l=D"
+ },
+ "Dafny": {
+ "color": "#FFEC25",
+ "url": "https://github.com/trending?l=Dafny"
+ },
+ "Dart": {
+ "color": "#00B4AB",
+ "url": "https://github.com/trending?l=Dart"
+ },
+ "DataWeave": {
+ "color": "#003a52",
+ "url": "https://github.com/trending?l=DataWeave"
+ },
+ "Dhall": {
+ "color": "#dfafff",
+ "url": "https://github.com/trending?l=Dhall"
+ },
+ "DIGITAL Command Language": {
+ "color": null,
+ "url": "https://github.com/trending?l=DIGITAL-Command-Language"
+ },
+ "DM": {
+ "color": "#447265",
+ "url": "https://github.com/trending?l=DM"
+ },
+ "Dockerfile": {
+ "color": "#384d54",
+ "url": "https://github.com/trending?l=Dockerfile"
+ },
+ "Dogescript": {
+ "color": "#cca760",
+ "url": "https://github.com/trending?l=Dogescript"
+ },
+ "DTrace": {
+ "color": null,
+ "url": "https://github.com/trending?l=DTrace"
+ },
+ "Dylan": {
+ "color": "#6c616e",
+ "url": "https://github.com/trending?l=Dylan"
+ },
+ "E": {
+ "color": "#ccce35",
+ "url": "https://github.com/trending?l=E"
+ },
+ "eC": {
+ "color": "#913960",
+ "url": "https://github.com/trending?l=eC"
+ },
+ "ECL": {
+ "color": "#8a1267",
+ "url": "https://github.com/trending?l=ECL"
+ },
+ "ECLiPSe": {
+ "color": null,
+ "url": "https://github.com/trending?l=ECLiPSe"
+ },
+ "Eiffel": {
+ "color": "#946d57",
+ "url": "https://github.com/trending?l=Eiffel"
+ },
+ "Elixir": {
+ "color": "#6e4a7e",
+ "url": "https://github.com/trending?l=Elixir"
+ },
+ "Elm": {
+ "color": "#60B5CC",
+ "url": "https://github.com/trending?l=Elm"
+ },
+ "Emacs Lisp": {
+ "color": "#c065db",
+ "url": "https://github.com/trending?l=Emacs-Lisp"
+ },
+ "EmberScript": {
+ "color": "#FFF4F3",
+ "url": "https://github.com/trending?l=EmberScript"
+ },
+ "EQ": {
+ "color": "#a78649",
+ "url": "https://github.com/trending?l=EQ"
+ },
+ "Erlang": {
+ "color": "#B83998",
+ "url": "https://github.com/trending?l=Erlang"
+ },
+ "F#": {
+ "color": "#b845fc",
+ "url": "https://github.com/trending?l=Fsharp"
+ },
+ "F*": {
+ "color": "#572e30",
+ "url": "https://github.com/trending?l=F*"
+ },
+ "Factor": {
+ "color": "#636746",
+ "url": "https://github.com/trending?l=Factor"
+ },
+ "Fancy": {
+ "color": "#7b9db4",
+ "url": "https://github.com/trending?l=Fancy"
+ },
+ "Fantom": {
+ "color": "#14253c",
+ "url": "https://github.com/trending?l=Fantom"
+ },
+ "Faust": {
+ "color": "#c37240",
+ "url": "https://github.com/trending?l=Faust"
+ },
+ "Filebench WML": {
+ "color": null,
+ "url": "https://github.com/trending?l=Filebench-WML"
+ },
+ "Filterscript": {
+ "color": null,
+ "url": "https://github.com/trending?l=Filterscript"
+ },
+ "fish": {
+ "color": null,
+ "url": "https://github.com/trending?l=fish"
+ },
+ "FLUX": {
+ "color": "#88ccff",
+ "url": "https://github.com/trending?l=FLUX"
+ },
+ "Forth": {
+ "color": "#341708",
+ "url": "https://github.com/trending?l=Forth"
+ },
+ "Fortran": {
+ "color": "#4d41b1",
+ "url": "https://github.com/trending?l=Fortran"
+ },
+ "Fortran Free Form": {
+ "color": null,
+ "url": "https://github.com/trending?l=Fortran-Free-Form"
+ },
+ "FreeMarker": {
+ "color": "#0050b2",
+ "url": "https://github.com/trending?l=FreeMarker"
+ },
+ "Frege": {
+ "color": "#00cafe",
+ "url": "https://github.com/trending?l=Frege"
+ },
+ "Futhark": {
+ "color": "#5f021f",
+ "url": "https://github.com/trending?l=Futhark"
+ },
+ "G-code": {
+ "color": "#D08CF2",
+ "url": "https://github.com/trending?l=G-code"
+ },
+ "Game Maker Language": {
+ "color": "#71b417",
+ "url": "https://github.com/trending?l=Game-Maker-Language"
+ },
+ "GAML": {
+ "color": "#FFC766",
+ "url": "https://github.com/trending?l=GAML"
+ },
+ "GAMS": {
+ "color": null,
+ "url": "https://github.com/trending?l=GAMS"
+ },
+ "GAP": {
+ "color": null,
+ "url": "https://github.com/trending?l=GAP"
+ },
+ "GCC Machine Description": {
+ "color": null,
+ "url": "https://github.com/trending?l=GCC-Machine-Description"
+ },
+ "GDB": {
+ "color": null,
+ "url": "https://github.com/trending?l=GDB"
+ },
+ "GDScript": {
+ "color": "#355570",
+ "url": "https://github.com/trending?l=GDScript"
+ },
+ "Genie": {
+ "color": "#fb855d",
+ "url": "https://github.com/trending?l=Genie"
+ },
+ "Genshi": {
+ "color": null,
+ "url": "https://github.com/trending?l=Genshi"
+ },
+ "Gentoo Ebuild": {
+ "color": null,
+ "url": "https://github.com/trending?l=Gentoo-Ebuild"
+ },
+ "Gentoo Eclass": {
+ "color": null,
+ "url": "https://github.com/trending?l=Gentoo-Eclass"
+ },
+ "Gherkin": {
+ "color": "#5B2063",
+ "url": "https://github.com/trending?l=Gherkin"
+ },
+ "GLSL": {
+ "color": null,
+ "url": "https://github.com/trending?l=GLSL"
+ },
+ "Glyph": {
+ "color": "#c1ac7f",
+ "url": "https://github.com/trending?l=Glyph"
+ },
+ "Gnuplot": {
+ "color": "#f0a9f0",
+ "url": "https://github.com/trending?l=Gnuplot"
+ },
+ "Go": {
+ "color": "#00ADD8",
+ "url": "https://github.com/trending?l=Go"
+ },
+ "Golo": {
+ "color": "#88562A",
+ "url": "https://github.com/trending?l=Golo"
+ },
+ "Gosu": {
+ "color": "#82937f",
+ "url": "https://github.com/trending?l=Gosu"
+ },
+ "Grace": {
+ "color": null,
+ "url": "https://github.com/trending?l=Grace"
+ },
+ "Grammatical Framework": {
+ "color": "#79aa7a",
+ "url": "https://github.com/trending?l=Grammatical-Framework"
+ },
+ "Groovy": {
+ "color": "#e69f56",
+ "url": "https://github.com/trending?l=Groovy"
+ },
+ "Groovy Server Pages": {
+ "color": null,
+ "url": "https://github.com/trending?l=Groovy-Server-Pages"
+ },
+ "Hack": {
+ "color": "#878787",
+ "url": "https://github.com/trending?l=Hack"
+ },
+ "Harbour": {
+ "color": "#0e60e3",
+ "url": "https://github.com/trending?l=Harbour"
+ },
+ "Haskell": {
+ "color": "#5e5086",
+ "url": "https://github.com/trending?l=Haskell"
+ },
+ "Haxe": {
+ "color": "#df7900",
+ "url": "https://github.com/trending?l=Haxe"
+ },
+ "HCL": {
+ "color": null,
+ "url": "https://github.com/trending?l=HCL"
+ },
+ "HiveQL": {
+ "color": "#dce200",
+ "url": "https://github.com/trending?l=HiveQL"
+ },
+ "HLSL": {
+ "color": null,
+ "url": "https://github.com/trending?l=HLSL"
+ },
+ "HolyC": {
+ "color": "#ffefaf",
+ "url": "https://github.com/trending?l=HolyC"
+ },
+ "HTML": {
+ "color": "#e34c26",
+ "url": "https://github.com/trending?l=HTML"
+ },
+ "Hy": {
+ "color": "#7790B2",
+ "url": "https://github.com/trending?l=Hy"
+ },
+ "HyPhy": {
+ "color": null,
+ "url": "https://github.com/trending?l=HyPhy"
+ },
+ "IDL": {
+ "color": "#a3522f",
+ "url": "https://github.com/trending?l=IDL"
+ },
+ "Idris": {
+ "color": "#b30000",
+ "url": "https://github.com/trending?l=Idris"
+ },
+ "IGOR Pro": {
+ "color": "#0000cc",
+ "url": "https://github.com/trending?l=IGOR-Pro"
+ },
+ "Inform 7": {
+ "color": null,
+ "url": "https://github.com/trending?l=Inform-7"
+ },
+ "Inno Setup": {
+ "color": null,
+ "url": "https://github.com/trending?l=Inno-Setup"
+ },
+ "Io": {
+ "color": "#a9188d",
+ "url": "https://github.com/trending?l=Io"
+ },
+ "Ioke": {
+ "color": "#078193",
+ "url": "https://github.com/trending?l=Ioke"
+ },
+ "Isabelle": {
+ "color": "#FEFE00",
+ "url": "https://github.com/trending?l=Isabelle"
+ },
+ "Isabelle ROOT": {
+ "color": null,
+ "url": "https://github.com/trending?l=Isabelle-ROOT"
+ },
+ "J": {
+ "color": "#9EEDFF",
+ "url": "https://github.com/trending?l=J"
+ },
+ "Jasmin": {
+ "color": null,
+ "url": "https://github.com/trending?l=Jasmin"
+ },
+ "Java": {
+ "color": "#b07219",
+ "url": "https://github.com/trending?l=Java"
+ },
+ "Java Server Pages": {
+ "color": null,
+ "url": "https://github.com/trending?l=Java-Server-Pages"
+ },
+ "JavaScript": {
+ "color": "#f1e05a",
+ "url": "https://github.com/trending?l=JavaScript"
+ },
+ "JavaScript+ERB": {
+ "color": null,
+ "url": "https://github.com/trending?l=JavaScript+ERB"
+ },
+ "JFlex": {
+ "color": null,
+ "url": "https://github.com/trending?l=JFlex"
+ },
+ "Jison": {
+ "color": null,
+ "url": "https://github.com/trending?l=Jison"
+ },
+ "Jison Lex": {
+ "color": null,
+ "url": "https://github.com/trending?l=Jison-Lex"
+ },
+ "Jolie": {
+ "color": "#843179",
+ "url": "https://github.com/trending?l=Jolie"
+ },
+ "JSONiq": {
+ "color": "#40d47e",
+ "url": "https://github.com/trending?l=JSONiq"
+ },
+ "Jsonnet": {
+ "color": "#0064bd",
+ "url": "https://github.com/trending?l=Jsonnet"
+ },
+ "JSX": {
+ "color": null,
+ "url": "https://github.com/trending?l=JSX"
+ },
+ "Julia": {
+ "color": "#a270ba",
+ "url": "https://github.com/trending?l=Julia"
+ },
+ "Jupyter Notebook": {
+ "color": "#DA5B0B",
+ "url": "https://github.com/trending?l=Jupyter-Notebook"
+ },
+ "Kaitai Struct": {
+ "color": "#773b37",
+ "url": "https://github.com/trending?l=Kaitai-Struct"
+ },
+ "Kotlin": {
+ "color": "#F18E33",
+ "url": "https://github.com/trending?l=Kotlin"
+ },
+ "KRL": {
+ "color": "#28430A",
+ "url": "https://github.com/trending?l=KRL"
+ },
+ "LabVIEW": {
+ "color": null,
+ "url": "https://github.com/trending?l=LabVIEW"
+ },
+ "Lasso": {
+ "color": "#999999",
+ "url": "https://github.com/trending?l=Lasso"
+ },
+ "Lean": {
+ "color": null,
+ "url": "https://github.com/trending?l=Lean"
+ },
+ "Lex": {
+ "color": "#DBCA00",
+ "url": "https://github.com/trending?l=Lex"
+ },
+ "LFE": {
+ "color": "#4C3023",
+ "url": "https://github.com/trending?l=LFE"
+ },
+ "LilyPond": {
+ "color": null,
+ "url": "https://github.com/trending?l=LilyPond"
+ },
+ "Limbo": {
+ "color": null,
+ "url": "https://github.com/trending?l=Limbo"
+ },
+ "Literate Agda": {
+ "color": null,
+ "url": "https://github.com/trending?l=Literate-Agda"
+ },
+ "Literate CoffeeScript": {
+ "color": null,
+ "url": "https://github.com/trending?l=Literate-CoffeeScript"
+ },
+ "Literate Haskell": {
+ "color": null,
+ "url": "https://github.com/trending?l=Literate-Haskell"
+ },
+ "LiveScript": {
+ "color": "#499886",
+ "url": "https://github.com/trending?l=LiveScript"
+ },
+ "LLVM": {
+ "color": "#185619",
+ "url": "https://github.com/trending?l=LLVM"
+ },
+ "Logos": {
+ "color": null,
+ "url": "https://github.com/trending?l=Logos"
+ },
+ "Logtalk": {
+ "color": null,
+ "url": "https://github.com/trending?l=Logtalk"
+ },
+ "LOLCODE": {
+ "color": "#cc9900",
+ "url": "https://github.com/trending?l=LOLCODE"
+ },
+ "LookML": {
+ "color": "#652B81",
+ "url": "https://github.com/trending?l=LookML"
+ },
+ "LoomScript": {
+ "color": null,
+ "url": "https://github.com/trending?l=LoomScript"
+ },
+ "LSL": {
+ "color": "#3d9970",
+ "url": "https://github.com/trending?l=LSL"
+ },
+ "Lua": {
+ "color": "#000080",
+ "url": "https://github.com/trending?l=Lua"
+ },
+ "M": {
+ "color": null,
+ "url": "https://github.com/trending?l=M"
+ },
+ "M4": {
+ "color": null,
+ "url": "https://github.com/trending?l=M4"
+ },
+ "M4Sugar": {
+ "color": null,
+ "url": "https://github.com/trending?l=M4Sugar"
+ },
+ "Macaulay2": {
+ "color": "#d8ffff",
+ "url": "https://github.com/trending?l=Macaulay2"
+ },
+ "Makefile": {
+ "color": "#427819",
+ "url": "https://github.com/trending?l=Makefile"
+ },
+ "Mako": {
+ "color": null,
+ "url": "https://github.com/trending?l=Mako"
+ },
+ "Mask": {
+ "color": "#f97732",
+ "url": "https://github.com/trending?l=Mask"
+ },
+ "Mathematica": {
+ "color": null,
+ "url": "https://github.com/trending?l=Mathematica"
+ },
+ "MATLAB": {
+ "color": "#e16737",
+ "url": "https://github.com/trending?l=MATLAB"
+ },
+ "Max": {
+ "color": "#c4a79c",
+ "url": "https://github.com/trending?l=Max"
+ },
+ "MAXScript": {
+ "color": "#00a6a6",
+ "url": "https://github.com/trending?l=MAXScript"
+ },
+ "mcfunction": {
+ "color": "#E22837",
+ "url": "https://github.com/trending?l=mcfunction"
+ },
+ "Mercury": {
+ "color": "#ff2b2b",
+ "url": "https://github.com/trending?l=Mercury"
+ },
+ "Meson": {
+ "color": "#007800",
+ "url": "https://github.com/trending?l=Meson"
+ },
+ "Metal": {
+ "color": "#8f14e9",
+ "url": "https://github.com/trending?l=Metal"
+ },
+ "MiniD": {
+ "color": null,
+ "url": "https://github.com/trending?l=MiniD"
+ },
+ "Mirah": {
+ "color": "#c7a938",
+ "url": "https://github.com/trending?l=Mirah"
+ },
+ "mIRC Script": {
+ "color": "#926059",
+ "url": "https://github.com/trending?l=mIRC-Script"
+ },
+ "MLIR": {
+ "color": "#5EC8DB",
+ "url": "https://github.com/trending?l=MLIR"
+ },
+ "Modelica": {
+ "color": null,
+ "url": "https://github.com/trending?l=Modelica"
+ },
+ "Modula-2": {
+ "color": null,
+ "url": "https://github.com/trending?l=Modula-2"
+ },
+ "Modula-3": {
+ "color": "#223388",
+ "url": "https://github.com/trending?l=Modula-3"
+ },
+ "Module Management System": {
+ "color": null,
+ "url": "https://github.com/trending?l=Module-Management-System"
+ },
+ "Monkey": {
+ "color": null,
+ "url": "https://github.com/trending?l=Monkey"
+ },
+ "Moocode": {
+ "color": null,
+ "url": "https://github.com/trending?l=Moocode"
+ },
+ "MoonScript": {
+ "color": null,
+ "url": "https://github.com/trending?l=MoonScript"
+ },
+ "Motorola 68K Assembly": {
+ "color": null,
+ "url": "https://github.com/trending?l=Motorola-68K-Assembly"
+ },
+ "MQL4": {
+ "color": "#62A8D6",
+ "url": "https://github.com/trending?l=MQL4"
+ },
+ "MQL5": {
+ "color": "#4A76B8",
+ "url": "https://github.com/trending?l=MQL5"
+ },
+ "MTML": {
+ "color": "#b7e1f4",
+ "url": "https://github.com/trending?l=MTML"
+ },
+ "MUF": {
+ "color": null,
+ "url": "https://github.com/trending?l=MUF"
+ },
+ "mupad": {
+ "color": null,
+ "url": "https://github.com/trending?l=mupad"
+ },
+ "Myghty": {
+ "color": null,
+ "url": "https://github.com/trending?l=Myghty"
+ },
+ "NASL": {
+ "color": null,
+ "url": "https://github.com/trending?l=NASL"
+ },
+ "NCL": {
+ "color": "#28431f",
+ "url": "https://github.com/trending?l=NCL"
+ },
+ "Nearley": {
+ "color": "#990000",
+ "url": "https://github.com/trending?l=Nearley"
+ },
+ "Nemerle": {
+ "color": "#3d3c6e",
+ "url": "https://github.com/trending?l=Nemerle"
+ },
+ "nesC": {
+ "color": "#94B0C7",
+ "url": "https://github.com/trending?l=nesC"
+ },
+ "NetLinx": {
+ "color": "#0aa0ff",
+ "url": "https://github.com/trending?l=NetLinx"
+ },
+ "NetLinx+ERB": {
+ "color": "#747faa",
+ "url": "https://github.com/trending?l=NetLinx+ERB"
+ },
+ "NetLogo": {
+ "color": "#ff6375",
+ "url": "https://github.com/trending?l=NetLogo"
+ },
+ "NewLisp": {
+ "color": "#87AED7",
+ "url": "https://github.com/trending?l=NewLisp"
+ },
+ "Nextflow": {
+ "color": "#3ac486",
+ "url": "https://github.com/trending?l=Nextflow"
+ },
+ "Nim": {
+ "color": "#ffc200",
+ "url": "https://github.com/trending?l=Nim"
+ },
+ "Nit": {
+ "color": "#009917",
+ "url": "https://github.com/trending?l=Nit"
+ },
+ "Nix": {
+ "color": "#7e7eff",
+ "url": "https://github.com/trending?l=Nix"
+ },
+ "NSIS": {
+ "color": null,
+ "url": "https://github.com/trending?l=NSIS"
+ },
+ "Nu": {
+ "color": "#c9df40",
+ "url": "https://github.com/trending?l=Nu"
+ },
+ "NumPy": {
+ "color": null,
+ "url": "https://github.com/trending?l=NumPy"
+ },
+ "Objective-C": {
+ "color": "#438eff",
+ "url": "https://github.com/trending?l=Objective-C"
+ },
+ "Objective-C++": {
+ "color": "#6866fb",
+ "url": "https://github.com/trending?l=Objective-C++"
+ },
+ "Objective-J": {
+ "color": "#ff0c5a",
+ "url": "https://github.com/trending?l=Objective-J"
+ },
+ "ObjectScript": {
+ "color": "#424893",
+ "url": "https://github.com/trending?l=ObjectScript"
+ },
+ "OCaml": {
+ "color": "#3be133",
+ "url": "https://github.com/trending?l=OCaml"
+ },
+ "Odin": {
+ "color": "#60AFFE",
+ "url": "https://github.com/trending?l=Odin"
+ },
+ "Omgrofl": {
+ "color": "#cabbff",
+ "url": "https://github.com/trending?l=Omgrofl"
+ },
+ "ooc": {
+ "color": "#b0b77e",
+ "url": "https://github.com/trending?l=ooc"
+ },
+ "Opa": {
+ "color": null,
+ "url": "https://github.com/trending?l=Opa"
+ },
+ "Opal": {
+ "color": "#f7ede0",
+ "url": "https://github.com/trending?l=Opal"
+ },
+ "Open Policy Agent": {
+ "color": null,
+ "url": "https://github.com/trending?l=Open-Policy-Agent"
+ },
+ "OpenCL": {
+ "color": null,
+ "url": "https://github.com/trending?l=OpenCL"
+ },
+ "OpenEdge ABL": {
+ "color": null,
+ "url": "https://github.com/trending?l=OpenEdge-ABL"
+ },
+ "OpenQASM": {
+ "color": "#AA70FF",
+ "url": "https://github.com/trending?l=OpenQASM"
+ },
+ "OpenRC runscript": {
+ "color": null,
+ "url": "https://github.com/trending?l=OpenRC-runscript"
+ },
+ "OpenSCAD": {
+ "color": null,
+ "url": "https://github.com/trending?l=OpenSCAD"
+ },
+ "Ox": {
+ "color": null,
+ "url": "https://github.com/trending?l=Ox"
+ },
+ "Oxygene": {
+ "color": "#cdd0e3",
+ "url": "https://github.com/trending?l=Oxygene"
+ },
+ "Oz": {
+ "color": "#fab738",
+ "url": "https://github.com/trending?l=Oz"
+ },
+ "P4": {
+ "color": "#7055b5",
+ "url": "https://github.com/trending?l=P4"
+ },
+ "Pan": {
+ "color": "#cc0000",
+ "url": "https://github.com/trending?l=Pan"
+ },
+ "Papyrus": {
+ "color": "#6600cc",
+ "url": "https://github.com/trending?l=Papyrus"
+ },
+ "Parrot": {
+ "color": "#f3ca0a",
+ "url": "https://github.com/trending?l=Parrot"
+ },
+ "Parrot Assembly": {
+ "color": null,
+ "url": "https://github.com/trending?l=Parrot-Assembly"
+ },
+ "Parrot Internal Representation": {
+ "color": null,
+ "url": "https://github.com/trending?l=Parrot-Internal-Representation"
+ },
+ "Pascal": {
+ "color": "#E3F171",
+ "url": "https://github.com/trending?l=Pascal"
+ },
+ "Pawn": {
+ "color": "#dbb284",
+ "url": "https://github.com/trending?l=Pawn"
+ },
+ "Pep8": {
+ "color": "#C76F5B",
+ "url": "https://github.com/trending?l=Pep8"
+ },
+ "Perl": {
+ "color": "#0298c3",
+ "url": "https://github.com/trending?l=Perl"
+ },
+ "PHP": {
+ "color": "#4F5D95",
+ "url": "https://github.com/trending?l=PHP"
+ },
+ "PicoLisp": {
+ "color": null,
+ "url": "https://github.com/trending?l=PicoLisp"
+ },
+ "PigLatin": {
+ "color": "#fcd7de",
+ "url": "https://github.com/trending?l=PigLatin"
+ },
+ "Pike": {
+ "color": "#005390",
+ "url": "https://github.com/trending?l=Pike"
+ },
+ "PLpgSQL": {
+ "color": null,
+ "url": "https://github.com/trending?l=PLpgSQL"
+ },
+ "PLSQL": {
+ "color": "#dad8d8",
+ "url": "https://github.com/trending?l=PLSQL"
+ },
+ "PogoScript": {
+ "color": "#d80074",
+ "url": "https://github.com/trending?l=PogoScript"
+ },
+ "Pony": {
+ "color": null,
+ "url": "https://github.com/trending?l=Pony"
+ },
+ "PostScript": {
+ "color": "#da291c",
+ "url": "https://github.com/trending?l=PostScript"
+ },
+ "POV-Ray SDL": {
+ "color": null,
+ "url": "https://github.com/trending?l=POV-Ray-SDL"
+ },
+ "PowerBuilder": {
+ "color": "#8f0f8d",
+ "url": "https://github.com/trending?l=PowerBuilder"
+ },
+ "PowerShell": {
+ "color": "#012456",
+ "url": "https://github.com/trending?l=PowerShell"
+ },
+ "Processing": {
+ "color": "#0096D8",
+ "url": "https://github.com/trending?l=Processing"
+ },
+ "Prolog": {
+ "color": "#74283c",
+ "url": "https://github.com/trending?l=Prolog"
+ },
+ "Propeller Spin": {
+ "color": "#7fa2a7",
+ "url": "https://github.com/trending?l=Propeller-Spin"
+ },
+ "Puppet": {
+ "color": "#302B6D",
+ "url": "https://github.com/trending?l=Puppet"
+ },
+ "PureBasic": {
+ "color": "#5a6986",
+ "url": "https://github.com/trending?l=PureBasic"
+ },
+ "PureScript": {
+ "color": "#1D222D",
+ "url": "https://github.com/trending?l=PureScript"
+ },
+ "Python": {
+ "color": "#3572A5",
+ "url": "https://github.com/trending?l=Python"
+ },
+ "Python console": {
+ "color": null,
+ "url": "https://github.com/trending?l=Python-console"
+ },
+ "q": {
+ "color": "#0040cd",
+ "url": "https://github.com/trending?l=q"
+ },
+ "Q#": {
+ "color": "#fed659",
+ "url": "https://github.com/trending?l=Qsharp"
+ },
+ "QMake": {
+ "color": null,
+ "url": "https://github.com/trending?l=QMake"
+ },
+ "QML": {
+ "color": "#44a51c",
+ "url": "https://github.com/trending?l=QML"
+ },
+ "Qt Script": {
+ "color": "#00b841",
+ "url": "https://github.com/trending?l=Qt-Script"
+ },
+ "Quake": {
+ "color": "#882233",
+ "url": "https://github.com/trending?l=Quake"
+ },
+ "R": {
+ "color": "#198CE7",
+ "url": "https://github.com/trending?l=R"
+ },
+ "Racket": {
+ "color": "#3c5caa",
+ "url": "https://github.com/trending?l=Racket"
+ },
+ "Ragel": {
+ "color": "#9d5200",
+ "url": "https://github.com/trending?l=Ragel"
+ },
+ "Raku": {
+ "color": "#0000fb",
+ "url": "https://github.com/trending?l=Raku"
+ },
+ "RAML": {
+ "color": "#77d9fb",
+ "url": "https://github.com/trending?l=RAML"
+ },
+ "Rascal": {
+ "color": "#fffaa0",
+ "url": "https://github.com/trending?l=Rascal"
+ },
+ "REALbasic": {
+ "color": null,
+ "url": "https://github.com/trending?l=REALbasic"
+ },
+ "Reason": {
+ "color": "#ff5847",
+ "url": "https://github.com/trending?l=Reason"
+ },
+ "Rebol": {
+ "color": "#358a5b",
+ "url": "https://github.com/trending?l=Rebol"
+ },
+ "Red": {
+ "color": "#f50000",
+ "url": "https://github.com/trending?l=Red"
+ },
+ "Redcode": {
+ "color": null,
+ "url": "https://github.com/trending?l=Redcode"
+ },
+ "Ren'Py": {
+ "color": "#ff7f7f",
+ "url": "https://github.com/trending?l=Ren'Py"
+ },
+ "RenderScript": {
+ "color": null,
+ "url": "https://github.com/trending?l=RenderScript"
+ },
+ "REXX": {
+ "color": null,
+ "url": "https://github.com/trending?l=REXX"
+ },
+ "Ring": {
+ "color": "#2D54CB",
+ "url": "https://github.com/trending?l=Ring"
+ },
+ "Riot": {
+ "color": "#A71E49",
+ "url": "https://github.com/trending?l=Riot"
+ },
+ "RobotFramework": {
+ "color": null,
+ "url": "https://github.com/trending?l=RobotFramework"
+ },
+ "Roff": {
+ "color": "#ecdebe",
+ "url": "https://github.com/trending?l=Roff"
+ },
+ "Rouge": {
+ "color": "#cc0088",
+ "url": "https://github.com/trending?l=Rouge"
+ },
+ "RPC": {
+ "color": null,
+ "url": "https://github.com/trending?l=RPC"
+ },
+ "Ruby": {
+ "color": "#701516",
+ "url": "https://github.com/trending?l=Ruby"
+ },
+ "RUNOFF": {
+ "color": "#665a4e",
+ "url": "https://github.com/trending?l=RUNOFF"
+ },
+ "Rust": {
+ "color": "#dea584",
+ "url": "https://github.com/trending?l=Rust"
+ },
+ "Sage": {
+ "color": null,
+ "url": "https://github.com/trending?l=Sage"
+ },
+ "SaltStack": {
+ "color": "#646464",
+ "url": "https://github.com/trending?l=SaltStack"
+ },
+ "SAS": {
+ "color": "#B34936",
+ "url": "https://github.com/trending?l=SAS"
+ },
+ "Scala": {
+ "color": "#c22d40",
+ "url": "https://github.com/trending?l=Scala"
+ },
+ "Scheme": {
+ "color": "#1e4aec",
+ "url": "https://github.com/trending?l=Scheme"
+ },
+ "Scilab": {
+ "color": null,
+ "url": "https://github.com/trending?l=Scilab"
+ },
+ "sed": {
+ "color": "#64b970",
+ "url": "https://github.com/trending?l=sed"
+ },
+ "Self": {
+ "color": "#0579aa",
+ "url": "https://github.com/trending?l=Self"
+ },
+ "ShaderLab": {
+ "color": null,
+ "url": "https://github.com/trending?l=ShaderLab"
+ },
+ "Shell": {
+ "color": "#89e051",
+ "url": "https://github.com/trending?l=Shell"
+ },
+ "ShellSession": {
+ "color": null,
+ "url": "https://github.com/trending?l=ShellSession"
+ },
+ "Shen": {
+ "color": "#120F14",
+ "url": "https://github.com/trending?l=Shen"
+ },
+ "Sieve": {
+ "color": null,
+ "url": "https://github.com/trending?l=Sieve"
+ },
+ "Slash": {
+ "color": "#007eff",
+ "url": "https://github.com/trending?l=Slash"
+ },
+ "Slice": {
+ "color": "#003fa2",
+ "url": "https://github.com/trending?l=Slice"
+ },
+ "Smali": {
+ "color": null,
+ "url": "https://github.com/trending?l=Smali"
+ },
+ "Smalltalk": {
+ "color": "#596706",
+ "url": "https://github.com/trending?l=Smalltalk"
+ },
+ "Smarty": {
+ "color": null,
+ "url": "https://github.com/trending?l=Smarty"
+ },
+ "SmPL": {
+ "color": "#c94949",
+ "url": "https://github.com/trending?l=SmPL"
+ },
+ "SMT": {
+ "color": null,
+ "url": "https://github.com/trending?l=SMT"
+ },
+ "Solidity": {
+ "color": "#AA6746",
+ "url": "https://github.com/trending?l=Solidity"
+ },
+ "SourcePawn": {
+ "color": "#5c7611",
+ "url": "https://github.com/trending?l=SourcePawn"
+ },
+ "SQF": {
+ "color": "#3F3F3F",
+ "url": "https://github.com/trending?l=SQF"
+ },
+ "SQLPL": {
+ "color": null,
+ "url": "https://github.com/trending?l=SQLPL"
+ },
+ "Squirrel": {
+ "color": "#800000",
+ "url": "https://github.com/trending?l=Squirrel"
+ },
+ "SRecode Template": {
+ "color": "#348a34",
+ "url": "https://github.com/trending?l=SRecode-Template"
+ },
+ "Stan": {
+ "color": "#b2011d",
+ "url": "https://github.com/trending?l=Stan"
+ },
+ "Standard ML": {
+ "color": "#dc566d",
+ "url": "https://github.com/trending?l=Standard-ML"
+ },
+ "Starlark": {
+ "color": "#76d275",
+ "url": "https://github.com/trending?l=Starlark"
+ },
+ "Stata": {
+ "color": null,
+ "url": "https://github.com/trending?l=Stata"
+ },
+ "SuperCollider": {
+ "color": "#46390b",
+ "url": "https://github.com/trending?l=SuperCollider"
+ },
+ "Swift": {
+ "color": "#ffac45",
+ "url": "https://github.com/trending?l=Swift"
+ },
+ "SWIG": {
+ "color": null,
+ "url": "https://github.com/trending?l=SWIG"
+ },
+ "SystemVerilog": {
+ "color": "#DAE1C2",
+ "url": "https://github.com/trending?l=SystemVerilog"
+ },
+ "Tcl": {
+ "color": "#e4cc98",
+ "url": "https://github.com/trending?l=Tcl"
+ },
+ "Tcsh": {
+ "color": null,
+ "url": "https://github.com/trending?l=Tcsh"
+ },
+ "Terra": {
+ "color": "#00004c",
+ "url": "https://github.com/trending?l=Terra"
+ },
+ "TeX": {
+ "color": "#3D6117",
+ "url": "https://github.com/trending?l=TeX"
+ },
+ "Thrift": {
+ "color": null,
+ "url": "https://github.com/trending?l=Thrift"
+ },
+ "TI Program": {
+ "color": "#A0AA87",
+ "url": "https://github.com/trending?l=TI-Program"
+ },
+ "TLA": {
+ "color": null,
+ "url": "https://github.com/trending?l=TLA"
+ },
+ "TSQL": {
+ "color": null,
+ "url": "https://github.com/trending?l=TSQL"
+ },
+ "TSX": {
+ "color": null,
+ "url": "https://github.com/trending?l=TSX"
+ },
+ "Turing": {
+ "color": "#cf142b",
+ "url": "https://github.com/trending?l=Turing"
+ },
+ "TXL": {
+ "color": null,
+ "url": "https://github.com/trending?l=TXL"
+ },
+ "TypeScript": {
+ "color": "#2b7489",
+ "url": "https://github.com/trending?l=TypeScript"
+ },
+ "Unified Parallel C": {
+ "color": null,
+ "url": "https://github.com/trending?l=Unified-Parallel-C"
+ },
+ "Unix Assembly": {
+ "color": null,
+ "url": "https://github.com/trending?l=Unix-Assembly"
+ },
+ "Uno": {
+ "color": null,
+ "url": "https://github.com/trending?l=Uno"
+ },
+ "UnrealScript": {
+ "color": "#a54c4d",
+ "url": "https://github.com/trending?l=UnrealScript"
+ },
+ "UrWeb": {
+ "color": null,
+ "url": "https://github.com/trending?l=UrWeb"
+ },
+ "V": {
+ "color": "#5d87bd",
+ "url": "https://github.com/trending?l=V"
+ },
+ "Vala": {
+ "color": "#fbe5cd",
+ "url": "https://github.com/trending?l=Vala"
+ },
+ "VBA": {
+ "color": "#867db1",
+ "url": "https://github.com/trending?l=VBA"
+ },
+ "VBScript": {
+ "color": "#15dcdc",
+ "url": "https://github.com/trending?l=VBScript"
+ },
+ "VCL": {
+ "color": "#148AA8",
+ "url": "https://github.com/trending?l=VCL"
+ },
+ "Verilog": {
+ "color": "#b2b7f8",
+ "url": "https://github.com/trending?l=Verilog"
+ },
+ "VHDL": {
+ "color": "#adb2cb",
+ "url": "https://github.com/trending?l=VHDL"
+ },
+ "Vim script": {
+ "color": "#199f4b",
+ "url": "https://github.com/trending?l=Vim-script"
+ },
+ "Visual Basic .NET": {
+ "color": "#945db7",
+ "url": "https://github.com/trending?l=Visual-Basic-.NET"
+ },
+ "Volt": {
+ "color": "#1F1F1F",
+ "url": "https://github.com/trending?l=Volt"
+ },
+ "Vue": {
+ "color": "#2c3e50",
+ "url": "https://github.com/trending?l=Vue"
+ },
+ "wdl": {
+ "color": "#42f1f4",
+ "url": "https://github.com/trending?l=wdl"
+ },
+ "WebAssembly": {
+ "color": "#04133b",
+ "url": "https://github.com/trending?l=WebAssembly"
+ },
+ "WebIDL": {
+ "color": null,
+ "url": "https://github.com/trending?l=WebIDL"
+ },
+ "wisp": {
+ "color": "#7582D1",
+ "url": "https://github.com/trending?l=wisp"
+ },
+ "Wollok": {
+ "color": "#a23738",
+ "url": "https://github.com/trending?l=Wollok"
+ },
+ "X10": {
+ "color": "#4B6BEF",
+ "url": "https://github.com/trending?l=X10"
+ },
+ "xBase": {
+ "color": "#403a40",
+ "url": "https://github.com/trending?l=xBase"
+ },
+ "XC": {
+ "color": "#99DA07",
+ "url": "https://github.com/trending?l=XC"
+ },
+ "Xojo": {
+ "color": null,
+ "url": "https://github.com/trending?l=Xojo"
+ },
+ "XProc": {
+ "color": null,
+ "url": "https://github.com/trending?l=XProc"
+ },
+ "XQuery": {
+ "color": "#5232e7",
+ "url": "https://github.com/trending?l=XQuery"
+ },
+ "XS": {
+ "color": null,
+ "url": "https://github.com/trending?l=XS"
+ },
+ "XSLT": {
+ "color": "#EB8CEB",
+ "url": "https://github.com/trending?l=XSLT"
+ },
+ "Xtend": {
+ "color": null,
+ "url": "https://github.com/trending?l=Xtend"
+ },
+ "Yacc": {
+ "color": "#4B6C4B",
+ "url": "https://github.com/trending?l=Yacc"
+ },
+ "YARA": {
+ "color": "#220000",
+ "url": "https://github.com/trending?l=YARA"
+ },
+ "YASnippet": {
+ "color": "#32AB90",
+ "url": "https://github.com/trending?l=YASnippet"
+ },
+ "ZAP": {
+ "color": "#0d665e",
+ "url": "https://github.com/trending?l=ZAP"
+ },
+ "Zeek": {
+ "color": null,
+ "url": "https://github.com/trending?l=Zeek"
+ },
+ "ZenScript": {
+ "color": "#00BCD1",
+ "url": "https://github.com/trending?l=ZenScript"
+ },
+ "Zephir": {
+ "color": "#118f9e",
+ "url": "https://github.com/trending?l=Zephir"
+ },
+ "Zig": {
+ "color": "#ec915c",
+ "url": "https://github.com/trending?l=Zig"
+ },
+ "ZIL": {
+ "color": "#dc75e5",
+ "url": "https://github.com/trending?l=ZIL"
+ },
+ "Zimpl": {
+ "color": null,
+ "url": "https://github.com/trending?l=Zimpl"
+ }
+}
diff --git a/ChromeExtension/images/house.png b/ChromeExtension/images/house.png
new file mode 100644
index 0000000..9c755ea
Binary files /dev/null and b/ChromeExtension/images/house.png differ
diff --git a/Chart.bundle.js b/ChromeExtension/libraries/Chart.bundle.js
similarity index 100%
rename from Chart.bundle.js
rename to ChromeExtension/libraries/Chart.bundle.js
diff --git a/ChromeExtension/libraries/jquery.min.js b/ChromeExtension/libraries/jquery.min.js
new file mode 100644
index 0000000..4cf0085
--- /dev/null
+++ b/ChromeExtension/libraries/jquery.min.js
@@ -0,0 +1,5221 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!(function (e, t) {
+ 'use strict';
+ 'object' == typeof module && 'object' == typeof module.exports
+ ? (module.exports = e.document
+ ? t(e, !0)
+ : function (e) {
+ if (!e.document) throw new Error('jQuery requires a window with a document');
+ return t(e);
+ })
+ : t(e);
+})('undefined' != typeof window ? window : this, function (C, e) {
+ 'use strict';
+ var t = [],
+ r = Object.getPrototypeOf,
+ s = t.slice,
+ g = t.flat
+ ? function (e) {
+ return t.flat.call(e);
+ }
+ : function (e) {
+ return t.concat.apply([], e);
+ },
+ u = t.push,
+ i = t.indexOf,
+ n = {},
+ o = n.toString,
+ v = n.hasOwnProperty,
+ a = v.toString,
+ l = a.call(Object),
+ y = {},
+ m = function (e) {
+ return (
+ 'function' == typeof e &&
+ 'number' != typeof e.nodeType &&
+ 'function' != typeof e.item
+ );
+ },
+ x = function (e) {
+ return null != e && e === e.window;
+ },
+ E = C.document,
+ c = { type: !0, src: !0, nonce: !0, noModule: !0 };
+ function b(e, t, n) {
+ var r,
+ i,
+ o = (n = n || E).createElement('script');
+ if (((o.text = e), t))
+ for (r in c)
+ (i = t[r] || (t.getAttribute && t.getAttribute(r))) && o.setAttribute(r, i);
+ n.head.appendChild(o).parentNode.removeChild(o);
+ }
+ function w(e) {
+ return null == e
+ ? e + ''
+ : 'object' == typeof e || 'function' == typeof e
+ ? n[o.call(e)] || 'object'
+ : typeof e;
+ }
+ var f = '3.6.0',
+ S = function (e, t) {
+ return new S.fn.init(e, t);
+ };
+ function p(e) {
+ var t = !!e && 'length' in e && e.length,
+ n = w(e);
+ return (
+ !m(e) &&
+ !x(e) &&
+ ('array' === n || 0 === t || ('number' == typeof t && 0 < t && t - 1 in e))
+ );
+ }
+ (S.fn = S.prototype = {
+ jquery: f,
+ constructor: S,
+ length: 0,
+ toArray: function () {
+ return s.call(this);
+ },
+ get: function (e) {
+ return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e];
+ },
+ pushStack: function (e) {
+ var t = S.merge(this.constructor(), e);
+ return (t.prevObject = this), t;
+ },
+ each: function (e) {
+ return S.each(this, e);
+ },
+ map: function (n) {
+ return this.pushStack(
+ S.map(this, function (e, t) {
+ return n.call(e, t, e);
+ })
+ );
+ },
+ slice: function () {
+ return this.pushStack(s.apply(this, arguments));
+ },
+ first: function () {
+ return this.eq(0);
+ },
+ last: function () {
+ return this.eq(-1);
+ },
+ even: function () {
+ return this.pushStack(
+ S.grep(this, function (e, t) {
+ return (t + 1) % 2;
+ })
+ );
+ },
+ odd: function () {
+ return this.pushStack(
+ S.grep(this, function (e, t) {
+ return t % 2;
+ })
+ );
+ },
+ eq: function (e) {
+ var t = this.length,
+ n = +e + (e < 0 ? t : 0);
+ return this.pushStack(0 <= n && n < t ? [this[n]] : []);
+ },
+ end: function () {
+ return this.prevObject || this.constructor();
+ },
+ push: u,
+ sort: t.sort,
+ splice: t.splice,
+ }),
+ (S.extend = S.fn.extend = function () {
+ var e,
+ t,
+ n,
+ r,
+ i,
+ o,
+ a = arguments[0] || {},
+ s = 1,
+ u = arguments.length,
+ l = !1;
+ for (
+ 'boolean' == typeof a && ((l = a), (a = arguments[s] || {}), s++),
+ 'object' == typeof a || m(a) || (a = {}),
+ s === u && ((a = this), s--);
+ s < u;
+ s++
+ )
+ if (null != (e = arguments[s]))
+ for (t in e)
+ (r = e[t]),
+ '__proto__' !== t &&
+ a !== r &&
+ (l && r && (S.isPlainObject(r) || (i = Array.isArray(r)))
+ ? ((n = a[t]),
+ (o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}),
+ (i = !1),
+ (a[t] = S.extend(l, o, r)))
+ : void 0 !== r && (a[t] = r));
+ return a;
+ }),
+ S.extend({
+ expando: 'jQuery' + (f + Math.random()).replace(/\D/g, ''),
+ isReady: !0,
+ error: function (e) {
+ throw new Error(e);
+ },
+ noop: function () {},
+ isPlainObject: function (e) {
+ var t, n;
+ return (
+ !(!e || '[object Object]' !== o.call(e)) &&
+ (!(t = r(e)) ||
+ ('function' == typeof (n = v.call(t, 'constructor') && t.constructor) &&
+ a.call(n) === l))
+ );
+ },
+ isEmptyObject: function (e) {
+ var t;
+ for (t in e) return !1;
+ return !0;
+ },
+ globalEval: function (e, t, n) {
+ b(e, { nonce: t && t.nonce }, n);
+ },
+ each: function (e, t) {
+ var n,
+ r = 0;
+ if (p(e)) {
+ for (n = e.length; r < n; r++) if (!1 === t.call(e[r], r, e[r])) break;
+ } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break;
+ return e;
+ },
+ makeArray: function (e, t) {
+ var n = t || [];
+ return (
+ null != e &&
+ (p(Object(e)) ? S.merge(n, 'string' == typeof e ? [e] : e) : u.call(n, e)),
+ n
+ );
+ },
+ inArray: function (e, t, n) {
+ return null == t ? -1 : i.call(t, e, n);
+ },
+ merge: function (e, t) {
+ for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];
+ return (e.length = i), e;
+ },
+ grep: function (e, t, n) {
+ for (var r = [], i = 0, o = e.length, a = !n; i < o; i++)
+ !t(e[i], i) !== a && r.push(e[i]);
+ return r;
+ },
+ map: function (e, t, n) {
+ var r,
+ i,
+ o = 0,
+ a = [];
+ if (p(e)) for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i);
+ else for (o in e) null != (i = t(e[o], o, n)) && a.push(i);
+ return g(a);
+ },
+ guid: 1,
+ support: y,
+ }),
+ 'function' == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]),
+ S.each(
+ 'Boolean Number String Function Array Date RegExp Object Error Symbol'.split(' '),
+ function (e, t) {
+ n['[object ' + t + ']'] = t.toLowerCase();
+ }
+ );
+ var d = (function (n) {
+ var e,
+ d,
+ b,
+ o,
+ i,
+ h,
+ f,
+ g,
+ w,
+ u,
+ l,
+ T,
+ C,
+ a,
+ E,
+ v,
+ s,
+ c,
+ y,
+ S = 'sizzle' + 1 * new Date(),
+ p = n.document,
+ k = 0,
+ r = 0,
+ m = ue(),
+ x = ue(),
+ A = ue(),
+ N = ue(),
+ j = function (e, t) {
+ return e === t && (l = !0), 0;
+ },
+ D = {}.hasOwnProperty,
+ t = [],
+ q = t.pop,
+ L = t.push,
+ H = t.push,
+ O = t.slice,
+ P = function (e, t) {
+ for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n;
+ return -1;
+ },
+ R =
+ 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped',
+ M = '[\\x20\\t\\r\\n\\f]',
+ I = '(?:\\\\[\\da-fA-F]{1,6}' + M + '?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+',
+ W =
+ '\\[' +
+ M +
+ '*(' +
+ I +
+ ')(?:' +
+ M +
+ '*([*^$|!~]?=)' +
+ M +
+ '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' +
+ I +
+ '))|)' +
+ M +
+ '*\\]',
+ F =
+ ':(' +
+ I +
+ ')(?:\\(((\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|' +
+ W +
+ ')*)|.*)\\)|)',
+ B = new RegExp(M + '+', 'g'),
+ $ = new RegExp('^' + M + '+|((?:^|[^\\\\])(?:\\\\.)*)' + M + '+$', 'g'),
+ _ = new RegExp('^' + M + '*,' + M + '*'),
+ z = new RegExp('^' + M + '*([>+~]|' + M + ')' + M + '*'),
+ U = new RegExp(M + '|>'),
+ X = new RegExp(F),
+ V = new RegExp('^' + I + '$'),
+ G = {
+ ID: new RegExp('^#(' + I + ')'),
+ CLASS: new RegExp('^\\.(' + I + ')'),
+ TAG: new RegExp('^(' + I + '|[*])'),
+ ATTR: new RegExp('^' + W),
+ PSEUDO: new RegExp('^' + F),
+ CHILD: new RegExp(
+ '^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(' +
+ M +
+ '*(even|odd|(([+-]|)(\\d*)n|)' +
+ M +
+ '*(?:([+-]|)' +
+ M +
+ '*(\\d+)|))' +
+ M +
+ '*\\)|)',
+ 'i'
+ ),
+ bool: new RegExp('^(?:' + R + ')$', 'i'),
+ needsContext: new RegExp(
+ '^' +
+ M +
+ '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(' +
+ M +
+ '*((?:-\\d)?\\d*)' +
+ M +
+ '*\\)|)(?=[^-]|$)',
+ 'i'
+ ),
+ },
+ Y = /HTML$/i,
+ Q = /^(?:input|select|textarea|button)$/i,
+ J = /^h\d$/i,
+ K = /^[^{]+\{\s*\[native \w/,
+ Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+ ee = /[+~]/,
+ te = new RegExp('\\\\[\\da-fA-F]{1,6}' + M + '?|\\\\([^\\r\\n\\f])', 'g'),
+ ne = function (e, t) {
+ var n = '0x' + e.slice(1) - 65536;
+ return (
+ t ||
+ (n < 0
+ ? String.fromCharCode(n + 65536)
+ : String.fromCharCode((n >> 10) | 55296, (1023 & n) | 56320))
+ );
+ },
+ re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+ ie = function (e, t) {
+ return t
+ ? '\0' === e
+ ? '\ufffd'
+ : e.slice(0, -1) + '\\' + e.charCodeAt(e.length - 1).toString(16) + ' '
+ : '\\' + e;
+ },
+ oe = function () {
+ T();
+ },
+ ae = be(
+ function (e) {
+ return !0 === e.disabled && 'fieldset' === e.nodeName.toLowerCase();
+ },
+ { dir: 'parentNode', next: 'legend' }
+ );
+ try {
+ H.apply((t = O.call(p.childNodes)), p.childNodes), t[p.childNodes.length].nodeType;
+ } catch (e) {
+ H = {
+ apply: t.length
+ ? function (e, t) {
+ L.apply(e, O.call(t));
+ }
+ : function (e, t) {
+ var n = e.length,
+ r = 0;
+ while ((e[n++] = t[r++]));
+ e.length = n - 1;
+ },
+ };
+ }
+ function se(t, e, n, r) {
+ var i,
+ o,
+ a,
+ s,
+ u,
+ l,
+ c,
+ f = e && e.ownerDocument,
+ p = e ? e.nodeType : 9;
+ if (((n = n || []), 'string' != typeof t || !t || (1 !== p && 9 !== p && 11 !== p)))
+ return n;
+ if (!r && (T(e), (e = e || C), E)) {
+ if (11 !== p && (u = Z.exec(t)))
+ if ((i = u[1])) {
+ if (9 === p) {
+ if (!(a = e.getElementById(i))) return n;
+ if (a.id === i) return n.push(a), n;
+ } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i)
+ return n.push(a), n;
+ } else {
+ if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n;
+ if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName)
+ return H.apply(n, e.getElementsByClassName(i)), n;
+ }
+ if (
+ d.qsa &&
+ !N[t + ' '] &&
+ (!v || !v.test(t)) &&
+ (1 !== p || 'object' !== e.nodeName.toLowerCase())
+ ) {
+ if (((c = t), (f = e), 1 === p && (U.test(t) || z.test(t)))) {
+ ((f = (ee.test(t) && ye(e.parentNode)) || e) === e && d.scope) ||
+ ((s = e.getAttribute('id'))
+ ? (s = s.replace(re, ie))
+ : e.setAttribute('id', (s = S))),
+ (o = (l = h(t)).length);
+ while (o--) l[o] = (s ? '#' + s : ':scope') + ' ' + xe(l[o]);
+ c = l.join(',');
+ }
+ try {
+ return H.apply(n, f.querySelectorAll(c)), n;
+ } catch (e) {
+ N(t, !0);
+ } finally {
+ s === S && e.removeAttribute('id');
+ }
+ }
+ }
+ return g(t.replace($, '$1'), e, n, r);
+ }
+ function ue() {
+ var r = [];
+ return function e(t, n) {
+ return r.push(t + ' ') > b.cacheLength && delete e[r.shift()], (e[t + ' '] = n);
+ };
+ }
+ function le(e) {
+ return (e[S] = !0), e;
+ }
+ function ce(e) {
+ var t = C.createElement('fieldset');
+ try {
+ return !!e(t);
+ } catch (e) {
+ return !1;
+ } finally {
+ t.parentNode && t.parentNode.removeChild(t), (t = null);
+ }
+ }
+ function fe(e, t) {
+ var n = e.split('|'),
+ r = n.length;
+ while (r--) b.attrHandle[n[r]] = t;
+ }
+ function pe(e, t) {
+ var n = t && e,
+ r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
+ if (r) return r;
+ if (n) while ((n = n.nextSibling)) if (n === t) return -1;
+ return e ? 1 : -1;
+ }
+ function de(t) {
+ return function (e) {
+ return 'input' === e.nodeName.toLowerCase() && e.type === t;
+ };
+ }
+ function he(n) {
+ return function (e) {
+ var t = e.nodeName.toLowerCase();
+ return ('input' === t || 'button' === t) && e.type === n;
+ };
+ }
+ function ge(t) {
+ return function (e) {
+ return 'form' in e
+ ? e.parentNode && !1 === e.disabled
+ ? 'label' in e
+ ? 'label' in e.parentNode
+ ? e.parentNode.disabled === t
+ : e.disabled === t
+ : e.isDisabled === t || (e.isDisabled !== !t && ae(e) === t)
+ : e.disabled === t
+ : 'label' in e && e.disabled === t;
+ };
+ }
+ function ve(a) {
+ return le(function (o) {
+ return (
+ (o = +o),
+ le(function (e, t) {
+ var n,
+ r = a([], e.length, o),
+ i = r.length;
+ while (i--) e[(n = r[i])] && (e[n] = !(t[n] = e[n]));
+ })
+ );
+ });
+ }
+ function ye(e) {
+ return e && 'undefined' != typeof e.getElementsByTagName && e;
+ }
+ for (e in ((d = se.support = {}),
+ (i = se.isXML = function (e) {
+ var t = e && e.namespaceURI,
+ n = e && (e.ownerDocument || e).documentElement;
+ return !Y.test(t || (n && n.nodeName) || 'HTML');
+ }),
+ (T = se.setDocument = function (e) {
+ var t,
+ n,
+ r = e ? e.ownerDocument || e : p;
+ return (
+ r != C &&
+ 9 === r.nodeType &&
+ r.documentElement &&
+ ((a = (C = r).documentElement),
+ (E = !i(C)),
+ p != C &&
+ (n = C.defaultView) &&
+ n.top !== n &&
+ (n.addEventListener
+ ? n.addEventListener('unload', oe, !1)
+ : n.attachEvent && n.attachEvent('onunload', oe)),
+ (d.scope = ce(function (e) {
+ return (
+ a.appendChild(e).appendChild(C.createElement('div')),
+ 'undefined' != typeof e.querySelectorAll &&
+ !e.querySelectorAll(':scope fieldset div').length
+ );
+ })),
+ (d.attributes = ce(function (e) {
+ return (e.className = 'i'), !e.getAttribute('className');
+ })),
+ (d.getElementsByTagName = ce(function (e) {
+ return (
+ e.appendChild(C.createComment('')), !e.getElementsByTagName('*').length
+ );
+ })),
+ (d.getElementsByClassName = K.test(C.getElementsByClassName)),
+ (d.getById = ce(function (e) {
+ return (
+ (a.appendChild(e).id = S),
+ !C.getElementsByName || !C.getElementsByName(S).length
+ );
+ })),
+ d.getById
+ ? ((b.filter.ID = function (e) {
+ var t = e.replace(te, ne);
+ return function (e) {
+ return e.getAttribute('id') === t;
+ };
+ }),
+ (b.find.ID = function (e, t) {
+ if ('undefined' != typeof t.getElementById && E) {
+ var n = t.getElementById(e);
+ return n ? [n] : [];
+ }
+ }))
+ : ((b.filter.ID = function (e) {
+ var n = e.replace(te, ne);
+ return function (e) {
+ var t =
+ 'undefined' != typeof e.getAttributeNode && e.getAttributeNode('id');
+ return t && t.value === n;
+ };
+ }),
+ (b.find.ID = function (e, t) {
+ if ('undefined' != typeof t.getElementById && E) {
+ var n,
+ r,
+ i,
+ o = t.getElementById(e);
+ if (o) {
+ if ((n = o.getAttributeNode('id')) && n.value === e) return [o];
+ (i = t.getElementsByName(e)), (r = 0);
+ while ((o = i[r++]))
+ if ((n = o.getAttributeNode('id')) && n.value === e) return [o];
+ }
+ return [];
+ }
+ })),
+ (b.find.TAG = d.getElementsByTagName
+ ? function (e, t) {
+ return 'undefined' != typeof t.getElementsByTagName
+ ? t.getElementsByTagName(e)
+ : d.qsa
+ ? t.querySelectorAll(e)
+ : void 0;
+ }
+ : function (e, t) {
+ var n,
+ r = [],
+ i = 0,
+ o = t.getElementsByTagName(e);
+ if ('*' === e) {
+ while ((n = o[i++])) 1 === n.nodeType && r.push(n);
+ return r;
+ }
+ return o;
+ }),
+ (b.find.CLASS =
+ d.getElementsByClassName &&
+ function (e, t) {
+ if ('undefined' != typeof t.getElementsByClassName && E)
+ return t.getElementsByClassName(e);
+ }),
+ (s = []),
+ (v = []),
+ (d.qsa = K.test(C.querySelectorAll)) &&
+ (ce(function (e) {
+ var t;
+ (a.appendChild(e).innerHTML =
+ ""),
+ e.querySelectorAll("[msallowcapture^='']").length &&
+ v.push('[*^$]=' + M + '*(?:\'\'|"")'),
+ e.querySelectorAll('[selected]').length ||
+ v.push('\\[' + M + '*(?:value|' + R + ')'),
+ e.querySelectorAll('[id~=' + S + '-]').length || v.push('~='),
+ (t = C.createElement('input')).setAttribute('name', ''),
+ e.appendChild(t),
+ e.querySelectorAll("[name='']").length ||
+ v.push('\\[' + M + '*name' + M + '*=' + M + '*(?:\'\'|"")'),
+ e.querySelectorAll(':checked').length || v.push(':checked'),
+ e.querySelectorAll('a#' + S + '+*').length || v.push('.#.+[+~]'),
+ e.querySelectorAll('\\\f'),
+ v.push('[\\r\\n\\f]');
+ }),
+ ce(function (e) {
+ e.innerHTML =
+ "";
+ var t = C.createElement('input');
+ t.setAttribute('type', 'hidden'),
+ e.appendChild(t).setAttribute('name', 'D'),
+ e.querySelectorAll('[name=d]').length &&
+ v.push('name' + M + '*[*^$|!~]?='),
+ 2 !== e.querySelectorAll(':enabled').length &&
+ v.push(':enabled', ':disabled'),
+ (a.appendChild(e).disabled = !0),
+ 2 !== e.querySelectorAll(':disabled').length &&
+ v.push(':enabled', ':disabled'),
+ e.querySelectorAll('*,:x'),
+ v.push(',.*:');
+ })),
+ (d.matchesSelector = K.test(
+ (c =
+ a.matches ||
+ a.webkitMatchesSelector ||
+ a.mozMatchesSelector ||
+ a.oMatchesSelector ||
+ a.msMatchesSelector)
+ )) &&
+ ce(function (e) {
+ (d.disconnectedMatch = c.call(e, '*')),
+ c.call(e, "[s!='']:x"),
+ s.push('!=', F);
+ }),
+ (v = v.length && new RegExp(v.join('|'))),
+ (s = s.length && new RegExp(s.join('|'))),
+ (t = K.test(a.compareDocumentPosition)),
+ (y =
+ t || K.test(a.contains)
+ ? function (e, t) {
+ var n = 9 === e.nodeType ? e.documentElement : e,
+ r = t && t.parentNode;
+ return (
+ e === r ||
+ !(
+ !r ||
+ 1 !== r.nodeType ||
+ !(n.contains
+ ? n.contains(r)
+ : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))
+ )
+ );
+ }
+ : function (e, t) {
+ if (t) while ((t = t.parentNode)) if (t === e) return !0;
+ return !1;
+ }),
+ (j = t
+ ? function (e, t) {
+ if (e === t) return (l = !0), 0;
+ var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
+ return (
+ n ||
+ (1 &
+ (n =
+ (e.ownerDocument || e) == (t.ownerDocument || t)
+ ? e.compareDocumentPosition(t)
+ : 1) ||
+ (!d.sortDetached && t.compareDocumentPosition(e) === n)
+ ? e == C || (e.ownerDocument == p && y(p, e))
+ ? -1
+ : t == C || (t.ownerDocument == p && y(p, t))
+ ? 1
+ : u
+ ? P(u, e) - P(u, t)
+ : 0
+ : 4 & n
+ ? -1
+ : 1)
+ );
+ }
+ : function (e, t) {
+ if (e === t) return (l = !0), 0;
+ var n,
+ r = 0,
+ i = e.parentNode,
+ o = t.parentNode,
+ a = [e],
+ s = [t];
+ if (!i || !o)
+ return e == C
+ ? -1
+ : t == C
+ ? 1
+ : i
+ ? -1
+ : o
+ ? 1
+ : u
+ ? P(u, e) - P(u, t)
+ : 0;
+ if (i === o) return pe(e, t);
+ n = e;
+ while ((n = n.parentNode)) a.unshift(n);
+ n = t;
+ while ((n = n.parentNode)) s.unshift(n);
+ while (a[r] === s[r]) r++;
+ return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0;
+ })),
+ C
+ );
+ }),
+ (se.matches = function (e, t) {
+ return se(e, null, null, t);
+ }),
+ (se.matchesSelector = function (e, t) {
+ if (
+ (T(e),
+ d.matchesSelector && E && !N[t + ' '] && (!s || !s.test(t)) && (!v || !v.test(t)))
+ )
+ try {
+ var n = c.call(e, t);
+ if (n || d.disconnectedMatch || (e.document && 11 !== e.document.nodeType))
+ return n;
+ } catch (e) {
+ N(t, !0);
+ }
+ return 0 < se(t, C, null, [e]).length;
+ }),
+ (se.contains = function (e, t) {
+ return (e.ownerDocument || e) != C && T(e), y(e, t);
+ }),
+ (se.attr = function (e, t) {
+ (e.ownerDocument || e) != C && T(e);
+ var n = b.attrHandle[t.toLowerCase()],
+ r = n && D.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;
+ return void 0 !== r
+ ? r
+ : d.attributes || !E
+ ? e.getAttribute(t)
+ : (r = e.getAttributeNode(t)) && r.specified
+ ? r.value
+ : null;
+ }),
+ (se.escape = function (e) {
+ return (e + '').replace(re, ie);
+ }),
+ (se.error = function (e) {
+ throw new Error('Syntax error, unrecognized expression: ' + e);
+ }),
+ (se.uniqueSort = function (e) {
+ var t,
+ n = [],
+ r = 0,
+ i = 0;
+ if (((l = !d.detectDuplicates), (u = !d.sortStable && e.slice(0)), e.sort(j), l)) {
+ while ((t = e[i++])) t === e[i] && (r = n.push(i));
+ while (r--) e.splice(n[r], 1);
+ }
+ return (u = null), e;
+ }),
+ (o = se.getText = function (e) {
+ var t,
+ n = '',
+ r = 0,
+ i = e.nodeType;
+ if (i) {
+ if (1 === i || 9 === i || 11 === i) {
+ if ('string' == typeof e.textContent) return e.textContent;
+ for (e = e.firstChild; e; e = e.nextSibling) n += o(e);
+ } else if (3 === i || 4 === i) return e.nodeValue;
+ } else while ((t = e[r++])) n += o(t);
+ return n;
+ }),
+ ((b = se.selectors = {
+ cacheLength: 50,
+ createPseudo: le,
+ match: G,
+ attrHandle: {},
+ find: {},
+ relative: {
+ '>': { dir: 'parentNode', first: !0 },
+ ' ': { dir: 'parentNode' },
+ '+': { dir: 'previousSibling', first: !0 },
+ '~': { dir: 'previousSibling' },
+ },
+ preFilter: {
+ ATTR: function (e) {
+ return (
+ (e[1] = e[1].replace(te, ne)),
+ (e[3] = (e[3] || e[4] || e[5] || '').replace(te, ne)),
+ '~=' === e[2] && (e[3] = ' ' + e[3] + ' '),
+ e.slice(0, 4)
+ );
+ },
+ CHILD: function (e) {
+ return (
+ (e[1] = e[1].toLowerCase()),
+ 'nth' === e[1].slice(0, 3)
+ ? (e[3] || se.error(e[0]),
+ (e[4] = +(e[4]
+ ? e[5] + (e[6] || 1)
+ : 2 * ('even' === e[3] || 'odd' === e[3]))),
+ (e[5] = +(e[7] + e[8] || 'odd' === e[3])))
+ : e[3] && se.error(e[0]),
+ e
+ );
+ },
+ PSEUDO: function (e) {
+ var t,
+ n = !e[6] && e[2];
+ return G.CHILD.test(e[0])
+ ? null
+ : (e[3]
+ ? (e[2] = e[4] || e[5] || '')
+ : n &&
+ X.test(n) &&
+ (t = h(n, !0)) &&
+ (t = n.indexOf(')', n.length - t) - n.length) &&
+ ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))),
+ e.slice(0, 3));
+ },
+ },
+ filter: {
+ TAG: function (e) {
+ var t = e.replace(te, ne).toLowerCase();
+ return '*' === e
+ ? function () {
+ return !0;
+ }
+ : function (e) {
+ return e.nodeName && e.nodeName.toLowerCase() === t;
+ };
+ },
+ CLASS: function (e) {
+ var t = m[e + ' '];
+ return (
+ t ||
+ ((t = new RegExp('(^|' + M + ')' + e + '(' + M + '|$)')) &&
+ m(e, function (e) {
+ return t.test(
+ ('string' == typeof e.className && e.className) ||
+ ('undefined' != typeof e.getAttribute && e.getAttribute('class')) ||
+ ''
+ );
+ }))
+ );
+ },
+ ATTR: function (n, r, i) {
+ return function (e) {
+ var t = se.attr(e, n);
+ return null == t
+ ? '!=' === r
+ : !r ||
+ ((t += ''),
+ '=' === r
+ ? t === i
+ : '!=' === r
+ ? t !== i
+ : '^=' === r
+ ? i && 0 === t.indexOf(i)
+ : '*=' === r
+ ? i && -1 < t.indexOf(i)
+ : '$=' === r
+ ? i && t.slice(-i.length) === i
+ : '~=' === r
+ ? -1 < (' ' + t.replace(B, ' ') + ' ').indexOf(i)
+ : '|=' === r && (t === i || t.slice(0, i.length + 1) === i + '-'));
+ };
+ },
+ CHILD: function (h, e, t, g, v) {
+ var y = 'nth' !== h.slice(0, 3),
+ m = 'last' !== h.slice(-4),
+ x = 'of-type' === e;
+ return 1 === g && 0 === v
+ ? function (e) {
+ return !!e.parentNode;
+ }
+ : function (e, t, n) {
+ var r,
+ i,
+ o,
+ a,
+ s,
+ u,
+ l = y !== m ? 'nextSibling' : 'previousSibling',
+ c = e.parentNode,
+ f = x && e.nodeName.toLowerCase(),
+ p = !n && !x,
+ d = !1;
+ if (c) {
+ if (y) {
+ while (l) {
+ a = e;
+ while ((a = a[l]))
+ if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType)
+ return !1;
+ u = l = 'only' === h && !u && 'nextSibling';
+ }
+ return !0;
+ }
+ if (((u = [m ? c.firstChild : c.lastChild]), m && p)) {
+ (d =
+ (s =
+ (r =
+ (i =
+ (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] ||
+ (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && r[2]),
+ (a = s && c.childNodes[s]);
+ while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop()))
+ if (1 === a.nodeType && ++d && a === e) {
+ i[h] = [k, s, d];
+ break;
+ }
+ } else if (
+ (p &&
+ (d = s =
+ (r =
+ (i =
+ (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] ||
+ (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]),
+ !1 === d)
+ )
+ while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop()))
+ if (
+ (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) &&
+ ++d &&
+ (p &&
+ ((i =
+ (o = a[S] || (a[S] = {}))[a.uniqueID] ||
+ (o[a.uniqueID] = {}))[h] = [k, d]),
+ a === e)
+ )
+ break;
+ return (d -= v) === g || (d % g == 0 && 0 <= d / g);
+ }
+ };
+ },
+ PSEUDO: function (e, o) {
+ var t,
+ a =
+ b.pseudos[e] ||
+ b.setFilters[e.toLowerCase()] ||
+ se.error('unsupported pseudo: ' + e);
+ return a[S]
+ ? a(o)
+ : 1 < a.length
+ ? ((t = [e, e, '', o]),
+ b.setFilters.hasOwnProperty(e.toLowerCase())
+ ? le(function (e, t) {
+ var n,
+ r = a(e, o),
+ i = r.length;
+ while (i--) e[(n = P(e, r[i]))] = !(t[n] = r[i]);
+ })
+ : function (e) {
+ return a(e, 0, t);
+ })
+ : a;
+ },
+ },
+ pseudos: {
+ not: le(function (e) {
+ var r = [],
+ i = [],
+ s = f(e.replace($, '$1'));
+ return s[S]
+ ? le(function (e, t, n, r) {
+ var i,
+ o = s(e, null, r, []),
+ a = e.length;
+ while (a--) (i = o[a]) && (e[a] = !(t[a] = i));
+ })
+ : function (e, t, n) {
+ return (r[0] = e), s(r, null, n, i), (r[0] = null), !i.pop();
+ };
+ }),
+ has: le(function (t) {
+ return function (e) {
+ return 0 < se(t, e).length;
+ };
+ }),
+ contains: le(function (t) {
+ return (
+ (t = t.replace(te, ne)),
+ function (e) {
+ return -1 < (e.textContent || o(e)).indexOf(t);
+ }
+ );
+ }),
+ lang: le(function (n) {
+ return (
+ V.test(n || '') || se.error('unsupported lang: ' + n),
+ (n = n.replace(te, ne).toLowerCase()),
+ function (e) {
+ var t;
+ do {
+ if (
+ (t = E ? e.lang : e.getAttribute('xml:lang') || e.getAttribute('lang'))
+ )
+ return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + '-');
+ } while ((e = e.parentNode) && 1 === e.nodeType);
+ return !1;
+ }
+ );
+ }),
+ target: function (e) {
+ var t = n.location && n.location.hash;
+ return t && t.slice(1) === e.id;
+ },
+ root: function (e) {
+ return e === a;
+ },
+ focus: function (e) {
+ return (
+ e === C.activeElement &&
+ (!C.hasFocus || C.hasFocus()) &&
+ !!(e.type || e.href || ~e.tabIndex)
+ );
+ },
+ enabled: ge(!1),
+ disabled: ge(!0),
+ checked: function (e) {
+ var t = e.nodeName.toLowerCase();
+ return ('input' === t && !!e.checked) || ('option' === t && !!e.selected);
+ },
+ selected: function (e) {
+ return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected;
+ },
+ empty: function (e) {
+ for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1;
+ return !0;
+ },
+ parent: function (e) {
+ return !b.pseudos.empty(e);
+ },
+ header: function (e) {
+ return J.test(e.nodeName);
+ },
+ input: function (e) {
+ return Q.test(e.nodeName);
+ },
+ button: function (e) {
+ var t = e.nodeName.toLowerCase();
+ return ('input' === t && 'button' === e.type) || 'button' === t;
+ },
+ text: function (e) {
+ var t;
+ return (
+ 'input' === e.nodeName.toLowerCase() &&
+ 'text' === e.type &&
+ (null == (t = e.getAttribute('type')) || 'text' === t.toLowerCase())
+ );
+ },
+ first: ve(function () {
+ return [0];
+ }),
+ last: ve(function (e, t) {
+ return [t - 1];
+ }),
+ eq: ve(function (e, t, n) {
+ return [n < 0 ? n + t : n];
+ }),
+ even: ve(function (e, t) {
+ for (var n = 0; n < t; n += 2) e.push(n);
+ return e;
+ }),
+ odd: ve(function (e, t) {
+ for (var n = 1; n < t; n += 2) e.push(n);
+ return e;
+ }),
+ lt: ve(function (e, t, n) {
+ for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; ) e.push(r);
+ return e;
+ }),
+ gt: ve(function (e, t, n) {
+ for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r);
+ return e;
+ }),
+ },
+ }).pseudos.nth = b.pseudos.eq),
+ { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }))
+ b.pseudos[e] = de(e);
+ for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e);
+ function me() {}
+ function xe(e) {
+ for (var t = 0, n = e.length, r = ''; t < n; t++) r += e[t].value;
+ return r;
+ }
+ function be(s, e, t) {
+ var u = e.dir,
+ l = e.next,
+ c = l || u,
+ f = t && 'parentNode' === c,
+ p = r++;
+ return e.first
+ ? function (e, t, n) {
+ while ((e = e[u])) if (1 === e.nodeType || f) return s(e, t, n);
+ return !1;
+ }
+ : function (e, t, n) {
+ var r,
+ i,
+ o,
+ a = [k, p];
+ if (n) {
+ while ((e = e[u])) if ((1 === e.nodeType || f) && s(e, t, n)) return !0;
+ } else
+ while ((e = e[u]))
+ if (1 === e.nodeType || f)
+ if (
+ ((i = (o = e[S] || (e[S] = {}))[e.uniqueID] || (o[e.uniqueID] = {})),
+ l && l === e.nodeName.toLowerCase())
+ )
+ e = e[u] || e;
+ else {
+ if ((r = i[c]) && r[0] === k && r[1] === p) return (a[2] = r[2]);
+ if (((i[c] = a)[2] = s(e, t, n))) return !0;
+ }
+ return !1;
+ };
+ }
+ function we(i) {
+ return 1 < i.length
+ ? function (e, t, n) {
+ var r = i.length;
+ while (r--) if (!i[r](e, t, n)) return !1;
+ return !0;
+ }
+ : i[0];
+ }
+ function Te(e, t, n, r, i) {
+ for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)
+ (o = e[s]) && ((n && !n(o, r, i)) || (a.push(o), l && t.push(s)));
+ return a;
+ }
+ function Ce(d, h, g, v, y, e) {
+ return (
+ v && !v[S] && (v = Ce(v)),
+ y && !y[S] && (y = Ce(y, e)),
+ le(function (e, t, n, r) {
+ var i,
+ o,
+ a,
+ s = [],
+ u = [],
+ l = t.length,
+ c =
+ e ||
+ (function (e, t, n) {
+ for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n);
+ return n;
+ })(h || '*', n.nodeType ? [n] : n, []),
+ f = !d || (!e && h) ? c : Te(c, s, d, n, r),
+ p = g ? (y || (e ? d : l || v) ? [] : t) : f;
+ if ((g && g(f, p, n, r), v)) {
+ (i = Te(p, u)), v(i, [], n, r), (o = i.length);
+ while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a));
+ }
+ if (e) {
+ if (y || d) {
+ if (y) {
+ (i = []), (o = p.length);
+ while (o--) (a = p[o]) && i.push((f[o] = a));
+ y(null, (p = []), i, r);
+ }
+ o = p.length;
+ while (o--)
+ (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a));
+ }
+ } else (p = Te(p === t ? p.splice(l, p.length) : p)), y ? y(null, t, p, r) : H.apply(t, p);
+ })
+ );
+ }
+ function Ee(e) {
+ for (
+ var i,
+ t,
+ n,
+ r = e.length,
+ o = b.relative[e[0].type],
+ a = o || b.relative[' '],
+ s = o ? 1 : 0,
+ u = be(
+ function (e) {
+ return e === i;
+ },
+ a,
+ !0
+ ),
+ l = be(
+ function (e) {
+ return -1 < P(i, e);
+ },
+ a,
+ !0
+ ),
+ c = [
+ function (e, t, n) {
+ var r =
+ (!o && (n || t !== w)) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));
+ return (i = null), r;
+ },
+ ];
+ s < r;
+ s++
+ )
+ if ((t = b.relative[e[s].type])) c = [be(we(c), t)];
+ else {
+ if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) {
+ for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break;
+ return Ce(
+ 1 < s && we(c),
+ 1 < s &&
+ xe(
+ e.slice(0, s - 1).concat({ value: ' ' === e[s - 2].type ? '*' : '' })
+ ).replace($, '$1'),
+ t,
+ s < n && Ee(e.slice(s, n)),
+ n < r && Ee((e = e.slice(n))),
+ n < r && xe(e)
+ );
+ }
+ c.push(t);
+ }
+ return we(c);
+ }
+ return (
+ (me.prototype = b.filters = b.pseudos),
+ (b.setFilters = new me()),
+ (h = se.tokenize = function (e, t) {
+ var n,
+ r,
+ i,
+ o,
+ a,
+ s,
+ u,
+ l = x[e + ' '];
+ if (l) return t ? 0 : l.slice(0);
+ (a = e), (s = []), (u = b.preFilter);
+ while (a) {
+ for (o in ((n && !(r = _.exec(a))) ||
+ (r && (a = a.slice(r[0].length) || a), s.push((i = []))),
+ (n = !1),
+ (r = z.exec(a)) &&
+ ((n = r.shift()),
+ i.push({ value: n, type: r[0].replace($, ' ') }),
+ (a = a.slice(n.length))),
+ b.filter))
+ !(r = G[o].exec(a)) ||
+ (u[o] && !(r = u[o](r))) ||
+ ((n = r.shift()),
+ i.push({ value: n, type: o, matches: r }),
+ (a = a.slice(n.length)));
+ if (!n) break;
+ }
+ return t ? a.length : a ? se.error(e) : x(e, s).slice(0);
+ }),
+ (f = se.compile = function (e, t) {
+ var n,
+ v,
+ y,
+ m,
+ x,
+ r,
+ i = [],
+ o = [],
+ a = A[e + ' '];
+ if (!a) {
+ t || (t = h(e)), (n = t.length);
+ while (n--) (a = Ee(t[n]))[S] ? i.push(a) : o.push(a);
+ (a = A(
+ e,
+ ((v = o),
+ (m = 0 < (y = i).length),
+ (x = 0 < v.length),
+ (r = function (e, t, n, r, i) {
+ var o,
+ a,
+ s,
+ u = 0,
+ l = '0',
+ c = e && [],
+ f = [],
+ p = w,
+ d = e || (x && b.find.TAG('*', i)),
+ h = (k += null == p ? 1 : Math.random() || 0.1),
+ g = d.length;
+ for (i && (w = t == C || t || i); l !== g && null != (o = d[l]); l++) {
+ if (x && o) {
+ (a = 0), t || o.ownerDocument == C || (T(o), (n = !E));
+ while ((s = v[a++]))
+ if (s(o, t || C, n)) {
+ r.push(o);
+ break;
+ }
+ i && (k = h);
+ }
+ m && ((o = !s && o) && u--, e && c.push(o));
+ }
+ if (((u += l), m && l !== u)) {
+ a = 0;
+ while ((s = y[a++])) s(c, f, t, n);
+ if (e) {
+ if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r));
+ f = Te(f);
+ }
+ H.apply(r, f),
+ i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r);
+ }
+ return i && ((k = h), (w = p)), c;
+ }),
+ m ? le(r) : r)
+ )).selector = e;
+ }
+ return a;
+ }),
+ (g = se.select = function (e, t, n, r) {
+ var i,
+ o,
+ a,
+ s,
+ u,
+ l = 'function' == typeof e && e,
+ c = !r && h((e = l.selector || e));
+ if (((n = n || []), 1 === c.length)) {
+ if (
+ 2 < (o = c[0] = c[0].slice(0)).length &&
+ 'ID' === (a = o[0]).type &&
+ 9 === t.nodeType &&
+ E &&
+ b.relative[o[1].type]
+ ) {
+ if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n;
+ l && (t = t.parentNode), (e = e.slice(o.shift().value.length));
+ }
+ i = G.needsContext.test(e) ? 0 : o.length;
+ while (i--) {
+ if (((a = o[i]), b.relative[(s = a.type)])) break;
+ if (
+ (u = b.find[s]) &&
+ (r = u(
+ a.matches[0].replace(te, ne),
+ (ee.test(o[0].type) && ye(t.parentNode)) || t
+ ))
+ ) {
+ if ((o.splice(i, 1), !(e = r.length && xe(o)))) return H.apply(n, r), n;
+ break;
+ }
+ }
+ }
+ return (
+ (l || f(e, c))(r, t, !E, n, !t || (ee.test(e) && ye(t.parentNode)) || t), n
+ );
+ }),
+ (d.sortStable = S.split('').sort(j).join('') === S),
+ (d.detectDuplicates = !!l),
+ T(),
+ (d.sortDetached = ce(function (e) {
+ return 1 & e.compareDocumentPosition(C.createElement('fieldset'));
+ })),
+ ce(function (e) {
+ return (
+ (e.innerHTML = ""), '#' === e.firstChild.getAttribute('href')
+ );
+ }) ||
+ fe('type|href|height|width', function (e, t, n) {
+ if (!n) return e.getAttribute(t, 'type' === t.toLowerCase() ? 1 : 2);
+ }),
+ (d.attributes &&
+ ce(function (e) {
+ return (
+ (e.innerHTML = ''),
+ e.firstChild.setAttribute('value', ''),
+ '' === e.firstChild.getAttribute('value')
+ );
+ })) ||
+ fe('value', function (e, t, n) {
+ if (!n && 'input' === e.nodeName.toLowerCase()) return e.defaultValue;
+ }),
+ ce(function (e) {
+ return null == e.getAttribute('disabled');
+ }) ||
+ fe(R, function (e, t, n) {
+ var r;
+ if (!n)
+ return !0 === e[t]
+ ? t.toLowerCase()
+ : (r = e.getAttributeNode(t)) && r.specified
+ ? r.value
+ : null;
+ }),
+ se
+ );
+ })(C);
+ (S.find = d),
+ (S.expr = d.selectors),
+ (S.expr[':'] = S.expr.pseudos),
+ (S.uniqueSort = S.unique = d.uniqueSort),
+ (S.text = d.getText),
+ (S.isXMLDoc = d.isXML),
+ (S.contains = d.contains),
+ (S.escapeSelector = d.escape);
+ var h = function (e, t, n) {
+ var r = [],
+ i = void 0 !== n;
+ while ((e = e[t]) && 9 !== e.nodeType)
+ if (1 === e.nodeType) {
+ if (i && S(e).is(n)) break;
+ r.push(e);
+ }
+ return r;
+ },
+ T = function (e, t) {
+ for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
+ return n;
+ },
+ k = S.expr.match.needsContext;
+ function A(e, t) {
+ return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase();
+ }
+ var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
+ function j(e, n, r) {
+ return m(n)
+ ? S.grep(e, function (e, t) {
+ return !!n.call(e, t, e) !== r;
+ })
+ : n.nodeType
+ ? S.grep(e, function (e) {
+ return (e === n) !== r;
+ })
+ : 'string' != typeof n
+ ? S.grep(e, function (e) {
+ return -1 < i.call(n, e) !== r;
+ })
+ : S.filter(n, e, r);
+ }
+ (S.filter = function (e, t, n) {
+ var r = t[0];
+ return (
+ n && (e = ':not(' + e + ')'),
+ 1 === t.length && 1 === r.nodeType
+ ? S.find.matchesSelector(r, e)
+ ? [r]
+ : []
+ : S.find.matches(
+ e,
+ S.grep(t, function (e) {
+ return 1 === e.nodeType;
+ })
+ )
+ );
+ }),
+ S.fn.extend({
+ find: function (e) {
+ var t,
+ n,
+ r = this.length,
+ i = this;
+ if ('string' != typeof e)
+ return this.pushStack(
+ S(e).filter(function () {
+ for (t = 0; t < r; t++) if (S.contains(i[t], this)) return !0;
+ })
+ );
+ for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n);
+ return 1 < r ? S.uniqueSort(n) : n;
+ },
+ filter: function (e) {
+ return this.pushStack(j(this, e || [], !1));
+ },
+ not: function (e) {
+ return this.pushStack(j(this, e || [], !0));
+ },
+ is: function (e) {
+ return !!j(this, 'string' == typeof e && k.test(e) ? S(e) : e || [], !1).length;
+ },
+ });
+ var D,
+ q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
+ ((S.fn.init = function (e, t, n) {
+ var r, i;
+ if (!e) return this;
+ if (((n = n || D), 'string' == typeof e)) {
+ if (
+ !(r =
+ '<' === e[0] && '>' === e[e.length - 1] && 3 <= e.length
+ ? [null, e, null]
+ : q.exec(e)) ||
+ (!r[1] && t)
+ )
+ return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
+ if (r[1]) {
+ if (
+ ((t = t instanceof S ? t[0] : t),
+ S.merge(
+ this,
+ S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)
+ ),
+ N.test(r[1]) && S.isPlainObject(t))
+ )
+ for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
+ return this;
+ }
+ return (i = E.getElementById(r[2])) && ((this[0] = i), (this.length = 1)), this;
+ }
+ return e.nodeType
+ ? ((this[0] = e), (this.length = 1), this)
+ : m(e)
+ ? void 0 !== n.ready
+ ? n.ready(e)
+ : e(S)
+ : S.makeArray(e, this);
+ }).prototype = S.fn),
+ (D = S(E));
+ var L = /^(?:parents|prev(?:Until|All))/,
+ H = { children: !0, contents: !0, next: !0, prev: !0 };
+ function O(e, t) {
+ while ((e = e[t]) && 1 !== e.nodeType);
+ return e;
+ }
+ S.fn.extend({
+ has: function (e) {
+ var t = S(e, this),
+ n = t.length;
+ return this.filter(function () {
+ for (var e = 0; e < n; e++) if (S.contains(this, t[e])) return !0;
+ });
+ },
+ closest: function (e, t) {
+ var n,
+ r = 0,
+ i = this.length,
+ o = [],
+ a = 'string' != typeof e && S(e);
+ if (!k.test(e))
+ for (; r < i; r++)
+ for (n = this[r]; n && n !== t; n = n.parentNode)
+ if (
+ n.nodeType < 11 &&
+ (a ? -1 < a.index(n) : 1 === n.nodeType && S.find.matchesSelector(n, e))
+ ) {
+ o.push(n);
+ break;
+ }
+ return this.pushStack(1 < o.length ? S.uniqueSort(o) : o);
+ },
+ index: function (e) {
+ return e
+ ? 'string' == typeof e
+ ? i.call(S(e), this[0])
+ : i.call(this, e.jquery ? e[0] : e)
+ : this[0] && this[0].parentNode
+ ? this.first().prevAll().length
+ : -1;
+ },
+ add: function (e, t) {
+ return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t))));
+ },
+ addBack: function (e) {
+ return this.add(null == e ? this.prevObject : this.prevObject.filter(e));
+ },
+ }),
+ S.each(
+ {
+ parent: function (e) {
+ var t = e.parentNode;
+ return t && 11 !== t.nodeType ? t : null;
+ },
+ parents: function (e) {
+ return h(e, 'parentNode');
+ },
+ parentsUntil: function (e, t, n) {
+ return h(e, 'parentNode', n);
+ },
+ next: function (e) {
+ return O(e, 'nextSibling');
+ },
+ prev: function (e) {
+ return O(e, 'previousSibling');
+ },
+ nextAll: function (e) {
+ return h(e, 'nextSibling');
+ },
+ prevAll: function (e) {
+ return h(e, 'previousSibling');
+ },
+ nextUntil: function (e, t, n) {
+ return h(e, 'nextSibling', n);
+ },
+ prevUntil: function (e, t, n) {
+ return h(e, 'previousSibling', n);
+ },
+ siblings: function (e) {
+ return T((e.parentNode || {}).firstChild, e);
+ },
+ children: function (e) {
+ return T(e.firstChild);
+ },
+ contents: function (e) {
+ return null != e.contentDocument && r(e.contentDocument)
+ ? e.contentDocument
+ : (A(e, 'template') && (e = e.content || e), S.merge([], e.childNodes));
+ },
+ },
+ function (r, i) {
+ S.fn[r] = function (e, t) {
+ var n = S.map(this, i, e);
+ return (
+ 'Until' !== r.slice(-5) && (t = e),
+ t && 'string' == typeof t && (n = S.filter(t, n)),
+ 1 < this.length && (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()),
+ this.pushStack(n)
+ );
+ };
+ }
+ );
+ var P = /[^\x20\t\r\n\f]+/g;
+ function R(e) {
+ return e;
+ }
+ function M(e) {
+ throw e;
+ }
+ function I(e, t, n, r) {
+ var i;
+ try {
+ e && m((i = e.promise))
+ ? i.call(e).done(t).fail(n)
+ : e && m((i = e.then))
+ ? i.call(e, t, n)
+ : t.apply(void 0, [e].slice(r));
+ } catch (e) {
+ n.apply(void 0, [e]);
+ }
+ }
+ (S.Callbacks = function (r) {
+ var e, n;
+ r =
+ 'string' == typeof r
+ ? ((e = r),
+ (n = {}),
+ S.each(e.match(P) || [], function (e, t) {
+ n[t] = !0;
+ }),
+ n)
+ : S.extend({}, r);
+ var i,
+ t,
+ o,
+ a,
+ s = [],
+ u = [],
+ l = -1,
+ c = function () {
+ for (a = a || r.once, o = i = !0; u.length; l = -1) {
+ t = u.shift();
+ while (++l < s.length)
+ !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && ((l = s.length), (t = !1));
+ }
+ r.memory || (t = !1), (i = !1), a && (s = t ? [] : '');
+ },
+ f = {
+ add: function () {
+ return (
+ s &&
+ (t && !i && ((l = s.length - 1), u.push(t)),
+ (function n(e) {
+ S.each(e, function (e, t) {
+ m(t)
+ ? (r.unique && f.has(t)) || s.push(t)
+ : t && t.length && 'string' !== w(t) && n(t);
+ });
+ })(arguments),
+ t && !i && c()),
+ this
+ );
+ },
+ remove: function () {
+ return (
+ S.each(arguments, function (e, t) {
+ var n;
+ while (-1 < (n = S.inArray(t, s, n))) s.splice(n, 1), n <= l && l--;
+ }),
+ this
+ );
+ },
+ has: function (e) {
+ return e ? -1 < S.inArray(e, s) : 0 < s.length;
+ },
+ empty: function () {
+ return s && (s = []), this;
+ },
+ disable: function () {
+ return (a = u = []), (s = t = ''), this;
+ },
+ disabled: function () {
+ return !s;
+ },
+ lock: function () {
+ return (a = u = []), t || i || (s = t = ''), this;
+ },
+ locked: function () {
+ return !!a;
+ },
+ fireWith: function (e, t) {
+ return (
+ a || ((t = [e, (t = t || []).slice ? t.slice() : t]), u.push(t), i || c()),
+ this
+ );
+ },
+ fire: function () {
+ return f.fireWith(this, arguments), this;
+ },
+ fired: function () {
+ return !!o;
+ },
+ };
+ return f;
+ }),
+ S.extend({
+ Deferred: function (e) {
+ var o = [
+ ['notify', 'progress', S.Callbacks('memory'), S.Callbacks('memory'), 2],
+ [
+ 'resolve',
+ 'done',
+ S.Callbacks('once memory'),
+ S.Callbacks('once memory'),
+ 0,
+ 'resolved',
+ ],
+ [
+ 'reject',
+ 'fail',
+ S.Callbacks('once memory'),
+ S.Callbacks('once memory'),
+ 1,
+ 'rejected',
+ ],
+ ],
+ i = 'pending',
+ a = {
+ state: function () {
+ return i;
+ },
+ always: function () {
+ return s.done(arguments).fail(arguments), this;
+ },
+ catch: function (e) {
+ return a.then(null, e);
+ },
+ pipe: function () {
+ var i = arguments;
+ return S.Deferred(function (r) {
+ S.each(o, function (e, t) {
+ var n = m(i[t[4]]) && i[t[4]];
+ s[t[1]](function () {
+ var e = n && n.apply(this, arguments);
+ e && m(e.promise)
+ ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject)
+ : r[t[0] + 'With'](this, n ? [e] : arguments);
+ });
+ }),
+ (i = null);
+ }).promise();
+ },
+ then: function (t, n, r) {
+ var u = 0;
+ function l(i, o, a, s) {
+ return function () {
+ var n = this,
+ r = arguments,
+ e = function () {
+ var e, t;
+ if (!(i < u)) {
+ if ((e = a.apply(n, r)) === o.promise())
+ throw new TypeError('Thenable self-resolution');
+ (t =
+ e &&
+ ('object' == typeof e || 'function' == typeof e) &&
+ e.then),
+ m(t)
+ ? s
+ ? t.call(e, l(u, o, R, s), l(u, o, M, s))
+ : (u++,
+ t.call(
+ e,
+ l(u, o, R, s),
+ l(u, o, M, s),
+ l(u, o, R, o.notifyWith)
+ ))
+ : (a !== R && ((n = void 0), (r = [e])),
+ (s || o.resolveWith)(n, r));
+ }
+ },
+ t = s
+ ? e
+ : function () {
+ try {
+ e();
+ } catch (e) {
+ S.Deferred.exceptionHook &&
+ S.Deferred.exceptionHook(e, t.stackTrace),
+ u <= i + 1 &&
+ (a !== M && ((n = void 0), (r = [e])),
+ o.rejectWith(n, r));
+ }
+ };
+ i
+ ? t()
+ : (S.Deferred.getStackHook &&
+ (t.stackTrace = S.Deferred.getStackHook()),
+ C.setTimeout(t));
+ };
+ }
+ return S.Deferred(function (e) {
+ o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)),
+ o[1][3].add(l(0, e, m(t) ? t : R)),
+ o[2][3].add(l(0, e, m(n) ? n : M));
+ }).promise();
+ },
+ promise: function (e) {
+ return null != e ? S.extend(e, a) : a;
+ },
+ },
+ s = {};
+ return (
+ S.each(o, function (e, t) {
+ var n = t[2],
+ r = t[5];
+ (a[t[1]] = n.add),
+ r &&
+ n.add(
+ function () {
+ i = r;
+ },
+ o[3 - e][2].disable,
+ o[3 - e][3].disable,
+ o[0][2].lock,
+ o[0][3].lock
+ ),
+ n.add(t[3].fire),
+ (s[t[0]] = function () {
+ return s[t[0] + 'With'](this === s ? void 0 : this, arguments), this;
+ }),
+ (s[t[0] + 'With'] = n.fireWith);
+ }),
+ a.promise(s),
+ e && e.call(s, s),
+ s
+ );
+ },
+ when: function (e) {
+ var n = arguments.length,
+ t = n,
+ r = Array(t),
+ i = s.call(arguments),
+ o = S.Deferred(),
+ a = function (t) {
+ return function (e) {
+ (r[t] = this),
+ (i[t] = 1 < arguments.length ? s.call(arguments) : e),
+ --n || o.resolveWith(r, i);
+ };
+ };
+ if (
+ n <= 1 &&
+ (I(e, o.done(a(t)).resolve, o.reject, !n),
+ 'pending' === o.state() || m(i[t] && i[t].then))
+ )
+ return o.then();
+ while (t--) I(i[t], a(t), o.reject);
+ return o.promise();
+ },
+ });
+ var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+ (S.Deferred.exceptionHook = function (e, t) {
+ C.console &&
+ C.console.warn &&
+ e &&
+ W.test(e.name) &&
+ C.console.warn('jQuery.Deferred exception: ' + e.message, e.stack, t);
+ }),
+ (S.readyException = function (e) {
+ C.setTimeout(function () {
+ throw e;
+ });
+ });
+ var F = S.Deferred();
+ function B() {
+ E.removeEventListener('DOMContentLoaded', B),
+ C.removeEventListener('load', B),
+ S.ready();
+ }
+ (S.fn.ready = function (e) {
+ return (
+ F.then(e)['catch'](function (e) {
+ S.readyException(e);
+ }),
+ this
+ );
+ }),
+ S.extend({
+ isReady: !1,
+ readyWait: 1,
+ ready: function (e) {
+ (!0 === e ? --S.readyWait : S.isReady) ||
+ ((S.isReady = !0) !== e && 0 < --S.readyWait) ||
+ F.resolveWith(E, [S]);
+ },
+ }),
+ (S.ready.then = F.then),
+ 'complete' === E.readyState ||
+ ('loading' !== E.readyState && !E.documentElement.doScroll)
+ ? C.setTimeout(S.ready)
+ : (E.addEventListener('DOMContentLoaded', B), C.addEventListener('load', B));
+ var $ = function (e, t, n, r, i, o, a) {
+ var s = 0,
+ u = e.length,
+ l = null == n;
+ if ('object' === w(n)) for (s in ((i = !0), n)) $(e, t, s, n[s], !0, o, a);
+ else if (
+ void 0 !== r &&
+ ((i = !0),
+ m(r) || (a = !0),
+ l &&
+ (a
+ ? (t.call(e, r), (t = null))
+ : ((l = t),
+ (t = function (e, t, n) {
+ return l.call(S(e), n);
+ }))),
+ t)
+ )
+ for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
+ return i ? e : l ? t.call(e) : u ? t(e[0], n) : o;
+ },
+ _ = /^-ms-/,
+ z = /-([a-z])/g;
+ function U(e, t) {
+ return t.toUpperCase();
+ }
+ function X(e) {
+ return e.replace(_, 'ms-').replace(z, U);
+ }
+ var V = function (e) {
+ return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType;
+ };
+ function G() {
+ this.expando = S.expando + G.uid++;
+ }
+ (G.uid = 1),
+ (G.prototype = {
+ cache: function (e) {
+ var t = e[this.expando];
+ return (
+ t ||
+ ((t = {}),
+ V(e) &&
+ (e.nodeType
+ ? (e[this.expando] = t)
+ : Object.defineProperty(e, this.expando, {
+ value: t,
+ configurable: !0,
+ }))),
+ t
+ );
+ },
+ set: function (e, t, n) {
+ var r,
+ i = this.cache(e);
+ if ('string' == typeof t) i[X(t)] = n;
+ else for (r in t) i[X(r)] = t[r];
+ return i;
+ },
+ get: function (e, t) {
+ return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][X(t)];
+ },
+ access: function (e, t, n) {
+ return void 0 === t || (t && 'string' == typeof t && void 0 === n)
+ ? this.get(e, t)
+ : (this.set(e, t, n), void 0 !== n ? n : t);
+ },
+ remove: function (e, t) {
+ var n,
+ r = e[this.expando];
+ if (void 0 !== r) {
+ if (void 0 !== t) {
+ n = (t = Array.isArray(t)
+ ? t.map(X)
+ : (t = X(t)) in r
+ ? [t]
+ : t.match(P) || []).length;
+ while (n--) delete r[t[n]];
+ }
+ (void 0 === t || S.isEmptyObject(r)) &&
+ (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]);
+ }
+ },
+ hasData: function (e) {
+ var t = e[this.expando];
+ return void 0 !== t && !S.isEmptyObject(t);
+ },
+ });
+ var Y = new G(),
+ Q = new G(),
+ J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ K = /[A-Z]/g;
+ function Z(e, t, n) {
+ var r, i;
+ if (void 0 === n && 1 === e.nodeType)
+ if (
+ ((r = 'data-' + t.replace(K, '-$&').toLowerCase()),
+ 'string' == typeof (n = e.getAttribute(r)))
+ ) {
+ try {
+ n =
+ 'true' === (i = n) ||
+ ('false' !== i &&
+ ('null' === i ? null : i === +i + '' ? +i : J.test(i) ? JSON.parse(i) : i));
+ } catch (e) {}
+ Q.set(e, t, n);
+ } else n = void 0;
+ return n;
+ }
+ S.extend({
+ hasData: function (e) {
+ return Q.hasData(e) || Y.hasData(e);
+ },
+ data: function (e, t, n) {
+ return Q.access(e, t, n);
+ },
+ removeData: function (e, t) {
+ Q.remove(e, t);
+ },
+ _data: function (e, t, n) {
+ return Y.access(e, t, n);
+ },
+ _removeData: function (e, t) {
+ Y.remove(e, t);
+ },
+ }),
+ S.fn.extend({
+ data: function (n, e) {
+ var t,
+ r,
+ i,
+ o = this[0],
+ a = o && o.attributes;
+ if (void 0 === n) {
+ if (
+ this.length &&
+ ((i = Q.get(o)), 1 === o.nodeType && !Y.get(o, 'hasDataAttrs'))
+ ) {
+ t = a.length;
+ while (t--)
+ a[t] &&
+ 0 === (r = a[t].name).indexOf('data-') &&
+ ((r = X(r.slice(5))), Z(o, r, i[r]));
+ Y.set(o, 'hasDataAttrs', !0);
+ }
+ return i;
+ }
+ return 'object' == typeof n
+ ? this.each(function () {
+ Q.set(this, n);
+ })
+ : $(
+ this,
+ function (e) {
+ var t;
+ if (o && void 0 === e)
+ return void 0 !== (t = Q.get(o, n))
+ ? t
+ : void 0 !== (t = Z(o, n))
+ ? t
+ : void 0;
+ this.each(function () {
+ Q.set(this, n, e);
+ });
+ },
+ null,
+ e,
+ 1 < arguments.length,
+ null,
+ !0
+ );
+ },
+ removeData: function (e) {
+ return this.each(function () {
+ Q.remove(this, e);
+ });
+ },
+ }),
+ S.extend({
+ queue: function (e, t, n) {
+ var r;
+ if (e)
+ return (
+ (t = (t || 'fx') + 'queue'),
+ (r = Y.get(e, t)),
+ n &&
+ (!r || Array.isArray(n) ? (r = Y.access(e, t, S.makeArray(n))) : r.push(n)),
+ r || []
+ );
+ },
+ dequeue: function (e, t) {
+ t = t || 'fx';
+ var n = S.queue(e, t),
+ r = n.length,
+ i = n.shift(),
+ o = S._queueHooks(e, t);
+ 'inprogress' === i && ((i = n.shift()), r--),
+ i &&
+ ('fx' === t && n.unshift('inprogress'),
+ delete o.stop,
+ i.call(
+ e,
+ function () {
+ S.dequeue(e, t);
+ },
+ o
+ )),
+ !r && o && o.empty.fire();
+ },
+ _queueHooks: function (e, t) {
+ var n = t + 'queueHooks';
+ return (
+ Y.get(e, n) ||
+ Y.access(e, n, {
+ empty: S.Callbacks('once memory').add(function () {
+ Y.remove(e, [t + 'queue', n]);
+ }),
+ })
+ );
+ },
+ }),
+ S.fn.extend({
+ queue: function (t, n) {
+ var e = 2;
+ return (
+ 'string' != typeof t && ((n = t), (t = 'fx'), e--),
+ arguments.length < e
+ ? S.queue(this[0], t)
+ : void 0 === n
+ ? this
+ : this.each(function () {
+ var e = S.queue(this, t, n);
+ S._queueHooks(this, t),
+ 'fx' === t && 'inprogress' !== e[0] && S.dequeue(this, t);
+ })
+ );
+ },
+ dequeue: function (e) {
+ return this.each(function () {
+ S.dequeue(this, e);
+ });
+ },
+ clearQueue: function (e) {
+ return this.queue(e || 'fx', []);
+ },
+ promise: function (e, t) {
+ var n,
+ r = 1,
+ i = S.Deferred(),
+ o = this,
+ a = this.length,
+ s = function () {
+ --r || i.resolveWith(o, [o]);
+ };
+ 'string' != typeof e && ((t = e), (e = void 0)), (e = e || 'fx');
+ while (a--)
+ (n = Y.get(o[a], e + 'queueHooks')) && n.empty && (r++, n.empty.add(s));
+ return s(), i.promise(t);
+ },
+ });
+ var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+ te = new RegExp('^(?:([+-])=|)(' + ee + ')([a-z%]*)$', 'i'),
+ ne = ['Top', 'Right', 'Bottom', 'Left'],
+ re = E.documentElement,
+ ie = function (e) {
+ return S.contains(e.ownerDocument, e);
+ },
+ oe = { composed: !0 };
+ re.getRootNode &&
+ (ie = function (e) {
+ return S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument;
+ });
+ var ae = function (e, t) {
+ return (
+ 'none' === (e = t || e).style.display ||
+ ('' === e.style.display && ie(e) && 'none' === S.css(e, 'display'))
+ );
+ };
+ function se(e, t, n, r) {
+ var i,
+ o,
+ a = 20,
+ s = r
+ ? function () {
+ return r.cur();
+ }
+ : function () {
+ return S.css(e, t, '');
+ },
+ u = s(),
+ l = (n && n[3]) || (S.cssNumber[t] ? '' : 'px'),
+ c = e.nodeType && (S.cssNumber[t] || ('px' !== l && +u)) && te.exec(S.css(e, t));
+ if (c && c[3] !== l) {
+ (u /= 2), (l = l || c[3]), (c = +u || 1);
+ while (a--)
+ S.style(e, t, c + l),
+ (1 - o) * (1 - (o = s() / u || 0.5)) <= 0 && (a = 0),
+ (c /= o);
+ (c *= 2), S.style(e, t, c + l), (n = n || []);
+ }
+ return (
+ n &&
+ ((c = +c || +u || 0),
+ (i = n[1] ? c + (n[1] + 1) * n[2] : +n[2]),
+ r && ((r.unit = l), (r.start = c), (r.end = i))),
+ i
+ );
+ }
+ var ue = {};
+ function le(e, t) {
+ for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)
+ (r = e[c]).style &&
+ ((n = r.style.display),
+ t
+ ? ('none' === n &&
+ ((l[c] = Y.get(r, 'display') || null), l[c] || (r.style.display = '')),
+ '' === r.style.display &&
+ ae(r) &&
+ (l[c] =
+ ((u = a = o = void 0),
+ (a = (i = r).ownerDocument),
+ (s = i.nodeName),
+ (u = ue[s]) ||
+ ((o = a.body.appendChild(a.createElement(s))),
+ (u = S.css(o, 'display')),
+ o.parentNode.removeChild(o),
+ 'none' === u && (u = 'block'),
+ (ue[s] = u)))))
+ : 'none' !== n && ((l[c] = 'none'), Y.set(r, 'display', n)));
+ for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]);
+ return e;
+ }
+ S.fn.extend({
+ show: function () {
+ return le(this, !0);
+ },
+ hide: function () {
+ return le(this);
+ },
+ toggle: function (e) {
+ return 'boolean' == typeof e
+ ? e
+ ? this.show()
+ : this.hide()
+ : this.each(function () {
+ ae(this) ? S(this).show() : S(this).hide();
+ });
+ },
+ });
+ var ce,
+ fe,
+ pe = /^(?:checkbox|radio)$/i,
+ de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i,
+ he = /^$|^module$|\/(?:java|ecma)script/i;
+ (ce = E.createDocumentFragment().appendChild(E.createElement('div'))),
+ (fe = E.createElement('input')).setAttribute('type', 'radio'),
+ fe.setAttribute('checked', 'checked'),
+ fe.setAttribute('name', 't'),
+ ce.appendChild(fe),
+ (y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked),
+ (ce.innerHTML = ''),
+ (y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue),
+ (ce.innerHTML = ''),
+ (y.option = !!ce.lastChild);
+ var ge = {
+ thead: [1, ''],
+ col: [2, ''],
+ tr: [2, ''],
+ td: [3, ''],
+ _default: [0, '', ''],
+ };
+ function ve(e, t) {
+ var n;
+ return (
+ (n =
+ 'undefined' != typeof e.getElementsByTagName
+ ? e.getElementsByTagName(t || '*')
+ : 'undefined' != typeof e.querySelectorAll
+ ? e.querySelectorAll(t || '*')
+ : []),
+ void 0 === t || (t && A(e, t)) ? S.merge([e], n) : n
+ );
+ }
+ function ye(e, t) {
+ for (var n = 0, r = e.length; n < r; n++)
+ Y.set(e[n], 'globalEval', !t || Y.get(t[n], 'globalEval'));
+ }
+ (ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead),
+ (ge.th = ge.td),
+ y.option ||
+ (ge.optgroup = ge.option = [1, "']);
+ var me = /<|?\w+;/;
+ function xe(e, t, n, r, i) {
+ for (
+ var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length;
+ d < h;
+ d++
+ )
+ if ((o = e[d]) || 0 === o)
+ if ('object' === w(o)) S.merge(p, o.nodeType ? [o] : o);
+ else if (me.test(o)) {
+ (a = a || f.appendChild(t.createElement('div'))),
+ (s = (de.exec(o) || ['', ''])[1].toLowerCase()),
+ (u = ge[s] || ge._default),
+ (a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2]),
+ (c = u[0]);
+ while (c--) a = a.lastChild;
+ S.merge(p, a.childNodes), ((a = f.firstChild).textContent = '');
+ } else p.push(t.createTextNode(o));
+ (f.textContent = ''), (d = 0);
+ while ((o = p[d++]))
+ if (r && -1 < S.inArray(o, r)) i && i.push(o);
+ else if (((l = ie(o)), (a = ve(f.appendChild(o), 'script')), l && ye(a), n)) {
+ c = 0;
+ while ((o = a[c++])) he.test(o.type || '') && n.push(o);
+ }
+ return f;
+ }
+ var be = /^([^.]*)(?:\.(.+)|)/;
+ function we() {
+ return !0;
+ }
+ function Te() {
+ return !1;
+ }
+ function Ce(e, t) {
+ return (
+ (e ===
+ (function () {
+ try {
+ return E.activeElement;
+ } catch (e) {}
+ })()) ==
+ ('focus' === t)
+ );
+ }
+ function Ee(e, t, n, r, i, o) {
+ var a, s;
+ if ('object' == typeof t) {
+ for (s in ('string' != typeof n && ((r = r || n), (n = void 0)), t))
+ Ee(e, s, n, r, t[s], o);
+ return e;
+ }
+ if (
+ (null == r && null == i
+ ? ((i = n), (r = n = void 0))
+ : null == i &&
+ ('string' == typeof n
+ ? ((i = r), (r = void 0))
+ : ((i = r), (r = n), (n = void 0))),
+ !1 === i)
+ )
+ i = Te;
+ else if (!i) return e;
+ return (
+ 1 === o &&
+ ((a = i),
+ ((i = function (e) {
+ return S().off(e), a.apply(this, arguments);
+ }).guid = a.guid || (a.guid = S.guid++))),
+ e.each(function () {
+ S.event.add(this, t, i, r, n);
+ })
+ );
+ }
+ function Se(e, i, o) {
+ o
+ ? (Y.set(e, i, !1),
+ S.event.add(e, i, {
+ namespace: !1,
+ handler: function (e) {
+ var t,
+ n,
+ r = Y.get(this, i);
+ if (1 & e.isTrigger && this[i]) {
+ if (r.length)
+ (S.event.special[i] || {}).delegateType && e.stopPropagation();
+ else if (
+ ((r = s.call(arguments)),
+ Y.set(this, i, r),
+ (t = o(this, i)),
+ this[i](),
+ r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : (n = {}),
+ r !== n)
+ )
+ return e.stopImmediatePropagation(), e.preventDefault(), n && n.value;
+ } else
+ r.length &&
+ (Y.set(this, i, {
+ value: S.event.trigger(
+ S.extend(r[0], S.Event.prototype),
+ r.slice(1),
+ this
+ ),
+ }),
+ e.stopImmediatePropagation());
+ },
+ }))
+ : void 0 === Y.get(e, i) && S.event.add(e, i, we);
+ }
+ (S.event = {
+ global: {},
+ add: function (t, e, n, r, i) {
+ var o,
+ a,
+ s,
+ u,
+ l,
+ c,
+ f,
+ p,
+ d,
+ h,
+ g,
+ v = Y.get(t);
+ if (V(t)) {
+ n.handler && ((n = (o = n).handler), (i = o.selector)),
+ i && S.find.matchesSelector(re, i),
+ n.guid || (n.guid = S.guid++),
+ (u = v.events) || (u = v.events = Object.create(null)),
+ (a = v.handle) ||
+ (a = v.handle = function (e) {
+ return 'undefined' != typeof S && S.event.triggered !== e.type
+ ? S.event.dispatch.apply(t, arguments)
+ : void 0;
+ }),
+ (l = (e = (e || '').match(P) || ['']).length);
+ while (l--)
+ (d = g = (s = be.exec(e[l]) || [])[1]),
+ (h = (s[2] || '').split('.').sort()),
+ d &&
+ ((f = S.event.special[d] || {}),
+ (d = (i ? f.delegateType : f.bindType) || d),
+ (f = S.event.special[d] || {}),
+ (c = S.extend(
+ {
+ type: d,
+ origType: g,
+ data: r,
+ handler: n,
+ guid: n.guid,
+ selector: i,
+ needsContext: i && S.expr.match.needsContext.test(i),
+ namespace: h.join('.'),
+ },
+ o
+ )),
+ (p = u[d]) ||
+ (((p = u[d] = []).delegateCount = 0),
+ (f.setup && !1 !== f.setup.call(t, r, h, a)) ||
+ (t.addEventListener && t.addEventListener(d, a))),
+ f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)),
+ i ? p.splice(p.delegateCount++, 0, c) : p.push(c),
+ (S.event.global[d] = !0));
+ }
+ },
+ remove: function (e, t, n, r, i) {
+ var o,
+ a,
+ s,
+ u,
+ l,
+ c,
+ f,
+ p,
+ d,
+ h,
+ g,
+ v = Y.hasData(e) && Y.get(e);
+ if (v && (u = v.events)) {
+ l = (t = (t || '').match(P) || ['']).length;
+ while (l--)
+ if (
+ ((d = g = (s = be.exec(t[l]) || [])[1]),
+ (h = (s[2] || '').split('.').sort()),
+ d)
+ ) {
+ (f = S.event.special[d] || {}),
+ (p = u[(d = (r ? f.delegateType : f.bindType) || d)] || []),
+ (s = s[2] && new RegExp('(^|\\.)' + h.join('\\.(?:.*\\.|)') + '(\\.|$)')),
+ (a = o = p.length);
+ while (o--)
+ (c = p[o]),
+ (!i && g !== c.origType) ||
+ (n && n.guid !== c.guid) ||
+ (s && !s.test(c.namespace)) ||
+ (r && r !== c.selector && ('**' !== r || !c.selector)) ||
+ (p.splice(o, 1),
+ c.selector && p.delegateCount--,
+ f.remove && f.remove.call(e, c));
+ a &&
+ !p.length &&
+ ((f.teardown && !1 !== f.teardown.call(e, h, v.handle)) ||
+ S.removeEvent(e, d, v.handle),
+ delete u[d]);
+ } else for (d in u) S.event.remove(e, d + t[l], n, r, !0);
+ S.isEmptyObject(u) && Y.remove(e, 'handle events');
+ }
+ },
+ dispatch: function (e) {
+ var t,
+ n,
+ r,
+ i,
+ o,
+ a,
+ s = new Array(arguments.length),
+ u = S.event.fix(e),
+ l = (Y.get(this, 'events') || Object.create(null))[u.type] || [],
+ c = S.event.special[u.type] || {};
+ for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t];
+ if (
+ ((u.delegateTarget = this), !c.preDispatch || !1 !== c.preDispatch.call(this, u))
+ ) {
+ (a = S.event.handlers.call(this, u, l)), (t = 0);
+ while ((i = a[t++]) && !u.isPropagationStopped()) {
+ (u.currentTarget = i.elem), (n = 0);
+ while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped())
+ (u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace)) ||
+ ((u.handleObj = o),
+ (u.data = o.data),
+ void 0 !==
+ (r = ((S.event.special[o.origType] || {}).handle || o.handler).apply(
+ i.elem,
+ s
+ )) &&
+ !1 === (u.result = r) &&
+ (u.preventDefault(), u.stopPropagation()));
+ }
+ return c.postDispatch && c.postDispatch.call(this, u), u.result;
+ }
+ },
+ handlers: function (e, t) {
+ var n,
+ r,
+ i,
+ o,
+ a,
+ s = [],
+ u = t.delegateCount,
+ l = e.target;
+ if (u && l.nodeType && !('click' === e.type && 1 <= e.button))
+ for (; l !== this; l = l.parentNode || this)
+ if (1 === l.nodeType && ('click' !== e.type || !0 !== l.disabled)) {
+ for (o = [], a = {}, n = 0; n < u; n++)
+ void 0 === a[(i = (r = t[n]).selector + ' ')] &&
+ (a[i] = r.needsContext
+ ? -1 < S(i, this).index(l)
+ : S.find(i, this, null, [l]).length),
+ a[i] && o.push(r);
+ o.length && s.push({ elem: l, handlers: o });
+ }
+ return (l = this), u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s;
+ },
+ addProp: function (t, e) {
+ Object.defineProperty(S.Event.prototype, t, {
+ enumerable: !0,
+ configurable: !0,
+ get: m(e)
+ ? function () {
+ if (this.originalEvent) return e(this.originalEvent);
+ }
+ : function () {
+ if (this.originalEvent) return this.originalEvent[t];
+ },
+ set: function (e) {
+ Object.defineProperty(this, t, {
+ enumerable: !0,
+ configurable: !0,
+ writable: !0,
+ value: e,
+ });
+ },
+ });
+ },
+ fix: function (e) {
+ return e[S.expando] ? e : new S.Event(e);
+ },
+ special: {
+ load: { noBubble: !0 },
+ click: {
+ setup: function (e) {
+ var t = this || e;
+ return pe.test(t.type) && t.click && A(t, 'input') && Se(t, 'click', we), !1;
+ },
+ trigger: function (e) {
+ var t = this || e;
+ return pe.test(t.type) && t.click && A(t, 'input') && Se(t, 'click'), !0;
+ },
+ _default: function (e) {
+ var t = e.target;
+ return (
+ (pe.test(t.type) && t.click && A(t, 'input') && Y.get(t, 'click')) ||
+ A(t, 'a')
+ );
+ },
+ },
+ beforeunload: {
+ postDispatch: function (e) {
+ void 0 !== e.result &&
+ e.originalEvent &&
+ (e.originalEvent.returnValue = e.result);
+ },
+ },
+ },
+ }),
+ (S.removeEvent = function (e, t, n) {
+ e.removeEventListener && e.removeEventListener(t, n);
+ }),
+ (S.Event = function (e, t) {
+ if (!(this instanceof S.Event)) return new S.Event(e, t);
+ e && e.type
+ ? ((this.originalEvent = e),
+ (this.type = e.type),
+ (this.isDefaultPrevented =
+ e.defaultPrevented || (void 0 === e.defaultPrevented && !1 === e.returnValue)
+ ? we
+ : Te),
+ (this.target =
+ e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target),
+ (this.currentTarget = e.currentTarget),
+ (this.relatedTarget = e.relatedTarget))
+ : (this.type = e),
+ t && S.extend(this, t),
+ (this.timeStamp = (e && e.timeStamp) || Date.now()),
+ (this[S.expando] = !0);
+ }),
+ (S.Event.prototype = {
+ constructor: S.Event,
+ isDefaultPrevented: Te,
+ isPropagationStopped: Te,
+ isImmediatePropagationStopped: Te,
+ isSimulated: !1,
+ preventDefault: function () {
+ var e = this.originalEvent;
+ (this.isDefaultPrevented = we), e && !this.isSimulated && e.preventDefault();
+ },
+ stopPropagation: function () {
+ var e = this.originalEvent;
+ (this.isPropagationStopped = we), e && !this.isSimulated && e.stopPropagation();
+ },
+ stopImmediatePropagation: function () {
+ var e = this.originalEvent;
+ (this.isImmediatePropagationStopped = we),
+ e && !this.isSimulated && e.stopImmediatePropagation(),
+ this.stopPropagation();
+ },
+ }),
+ S.each(
+ {
+ altKey: !0,
+ bubbles: !0,
+ cancelable: !0,
+ changedTouches: !0,
+ ctrlKey: !0,
+ detail: !0,
+ eventPhase: !0,
+ metaKey: !0,
+ pageX: !0,
+ pageY: !0,
+ shiftKey: !0,
+ view: !0,
+ char: !0,
+ code: !0,
+ charCode: !0,
+ key: !0,
+ keyCode: !0,
+ button: !0,
+ buttons: !0,
+ clientX: !0,
+ clientY: !0,
+ offsetX: !0,
+ offsetY: !0,
+ pointerId: !0,
+ pointerType: !0,
+ screenX: !0,
+ screenY: !0,
+ targetTouches: !0,
+ toElement: !0,
+ touches: !0,
+ which: !0,
+ },
+ S.event.addProp
+ ),
+ S.each({ focus: 'focusin', blur: 'focusout' }, function (e, t) {
+ S.event.special[e] = {
+ setup: function () {
+ return Se(this, e, Ce), !1;
+ },
+ trigger: function () {
+ return Se(this, e), !0;
+ },
+ _default: function () {
+ return !0;
+ },
+ delegateType: t,
+ };
+ }),
+ S.each(
+ {
+ mouseenter: 'mouseover',
+ mouseleave: 'mouseout',
+ pointerenter: 'pointerover',
+ pointerleave: 'pointerout',
+ },
+ function (e, i) {
+ S.event.special[e] = {
+ delegateType: i,
+ bindType: i,
+ handle: function (e) {
+ var t,
+ n = e.relatedTarget,
+ r = e.handleObj;
+ return (
+ (n && (n === this || S.contains(this, n))) ||
+ ((e.type = r.origType),
+ (t = r.handler.apply(this, arguments)),
+ (e.type = i)),
+ t
+ );
+ },
+ };
+ }
+ ),
+ S.fn.extend({
+ on: function (e, t, n, r) {
+ return Ee(this, e, t, n, r);
+ },
+ one: function (e, t, n, r) {
+ return Ee(this, e, t, n, r, 1);
+ },
+ off: function (e, t, n) {
+ var r, i;
+ if (e && e.preventDefault && e.handleObj)
+ return (
+ (r = e.handleObj),
+ S(e.delegateTarget).off(
+ r.namespace ? r.origType + '.' + r.namespace : r.origType,
+ r.selector,
+ r.handler
+ ),
+ this
+ );
+ if ('object' == typeof e) {
+ for (i in e) this.off(i, t, e[i]);
+ return this;
+ }
+ return (
+ (!1 !== t && 'function' != typeof t) || ((n = t), (t = void 0)),
+ !1 === n && (n = Te),
+ this.each(function () {
+ S.event.remove(this, e, n, t);
+ })
+ );
+ },
+ });
+ var ke = /
+
+