{ "cells": [ { "cell_type": "markdown", "id": "436c3735-6643-4c2e-8e7a-2c91eceb5321", "metadata": {}, "source": [ "# CVSS Data\n", "---" ] }, { "cell_type": "code", "execution_count": 1, "id": "a8face4a-ddee-4bd5-a84e-97f2bd508491", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:26:13.162915Z", "iopub.status.busy": "2024-06-16T12:26:13.162744Z", "iopub.status.idle": "2024-06-16T12:26:13.473213Z", "shell.execute_reply": "2024-06-16T12:26:13.472599Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from IPython.core.magic import register_cell_magic\n", "from IPython.display import Markdown\n", "import datetime\n", "from datetime import date\n", "import glob\n", "import logging\n", "import json\n", "import pandas as pd\n", "import plotly\n", "import plotly.graph_objects as go\n", "import plotly.express as px\n", "import numpy as np\n", "import warnings\n", "\n", "\n", "\n", "@register_cell_magic\n", "def markdown(line, cell):\n", " return Markdown(cell.format(**globals()))\n", "\n", "\n", "logging.getLogger('matplotlib.font_manager').disabled = True\n", "warnings.filterwarnings(\"ignore\")\n", "pd.set_option('display.width', 500)\n", "pd.set_option('display.max_rows', 50)\n", "pd.set_option('display.max_columns', 10)\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "fb89c5a2-83da-459d-be6c-456a949cf3dd", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:26:13.476170Z", "iopub.status.busy": "2024-06-16T12:26:13.475682Z", "iopub.status.idle": "2024-06-16T12:26:58.930879Z", "shell.execute_reply": "2024-06-16T12:26:58.930330Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "\n", "row_accumulator = []\n", "for filename in glob.glob('nvdcve-1.1-*.json'):\n", " with open(filename, 'r', encoding='utf-8') as f:\n", " nvd_data = json.load(f)\n", " for entry in nvd_data['CVE_Items']:\n", " cve = entry['cve']['CVE_data_meta']['ID']\n", " try:\n", " assigner = entry['cve']['CVE_data_meta']['ASSIGNER']\n", " except KeyError:\n", " assigner = 'Missing_Data'\n", " try:\n", " published_date = entry['publishedDate']\n", " except KeyError:\n", " published_date = 'Missing_Data'\n", " try:\n", " attack_vector = entry['impact']['baseMetricV3']['cvssV3']['attackVector']\n", " except KeyError:\n", " attack_vector = 'Missing_Data'\n", " try:\n", " attack_complexity = entry['impact']['baseMetricV3']['cvssV3']['attackComplexity']\n", " except KeyError:\n", " attack_complexity = 'Missing_Data'\n", " try:\n", " privileges_required = entry['impact']['baseMetricV3']['cvssV3']['privilegesRequired']\n", " except KeyError:\n", " privileges_required = 'Missing_Data'\n", " try:\n", " user_interaction = entry['impact']['baseMetricV3']['cvssV3']['userInteraction']\n", " except KeyError:\n", " user_interaction = 'Missing_Data'\n", " try:\n", " scope = entry['impact']['baseMetricV3']['cvssV3']['scope']\n", " except KeyError:\n", " scope = 'Missing_Data'\n", " try:\n", " confidentiality_impact = entry['impact']['baseMetricV3']['cvssV3']['confidentialityImpact']\n", " except KeyError:\n", " confidentiality_impact = 'Missing_Data'\n", " try:\n", " integrity_impact = entry['impact']['baseMetricV3']['cvssV3']['integrityImpact']\n", " except KeyError:\n", " integrity_impact = 'Missing_Data'\n", " try:\n", " availability_impact = entry['impact']['baseMetricV3']['cvssV3']['availabilityImpact']\n", " except KeyError:\n", " availability_impact = 'Missing_Data'\n", " try:\n", " base_score = entry['impact']['baseMetricV3']['cvssV3']['baseScore']\n", " except KeyError:\n", " base_score = '0.0'\n", " try:\n", " base_severity = entry['impact']['baseMetricV3']['cvssV3']['baseSeverity']\n", " except KeyError:\n", " base_severity = 'Missing_Data'\n", " try:\n", " exploitability_score = entry['impact']['baseMetricV3']['exploitabilityScore']\n", " except KeyError:\n", " exploitability_score = 'Missing_Data'\n", " try:\n", " impact_score = entry['impact']['baseMetricV3']['impactScore']\n", " except KeyError:\n", " impact_score = 'Missing_Data'\n", " try:\n", " cwe = entry['cve']['problemtype']['problemtype_data'][0]['description'][0]['value']\n", " except IndexError:\n", " cwe = 'Missing_Data'\n", " try:\n", " description = entry['cve']['description']['description_data'][0]['value']\n", " except IndexError:\n", " description = ''\n", " new_row = { \n", " 'CVE': cve, \n", " 'Published': published_date,\n", " 'AttackVector': attack_vector,\n", " 'AttackComplexity': attack_complexity,\n", " 'PrivilegesRequired': privileges_required,\n", " 'UserInteraction': user_interaction,\n", " 'Scope': scope,\n", " 'ConfidentialityImpact': confidentiality_impact,\n", " 'IntegrityImpact': integrity_impact,\n", " 'AvailabilityImpact': availability_impact,\n", " 'BaseScore': base_score,\n", " 'BaseSeverity': base_severity,\n", " 'ExploitabilityScore': exploitability_score,\n", " 'ImpactScore': impact_score,\n", " 'CWE': cwe,\n", " 'Description': description,\n", " 'Assigner' : assigner\n", " }\n", " if not description.startswith('** REJECT **'): # disputed, rejected and other non issues start with '**'\n", " row_accumulator.append(new_row)\n", " nvd = pd.DataFrame(row_accumulator)\n", " \n", "nvd['Published'] = pd.to_datetime(nvd['Published'])\n", "thisyear = ((nvd['Published'] > '2000-01-01') & (nvd['Published'] < '2024-01-01'))\n", "nvd = nvd.loc[thisyear]\n", "nvd = nvd.sort_values(by=['Published'])\n", "nvd = nvd.reset_index(drop=True)\n", "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", "nvd['BaseScore'] = nvd['BaseScore'].replace(0, np.NaN);\n", "nvdcount = nvd['Published'].count()\n", "nvdunique = nvd['Published'].nunique()\n", "startdate = date(2000, 1, 1)\n", "enddate = date.today()\n", "numberofdays = enddate - startdate \n", "per_day = nvdcount/numberofdays.days" ] }, { "cell_type": "markdown", "id": "76ba3fec-e991-4f78-9e2d-15b80300aed8", "metadata": {}, "source": [ "## CVSS Graph" ] }, { "cell_type": "code", "execution_count": 3, "id": "6eb47510-9e6a-42c4-bb57-34763a056c67", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:26:58.933413Z", "iopub.status.busy": "2024-06-16T12:26:58.933129Z", "iopub.status.idle": "2024-06-16T12:26:59.343667Z", "shell.execute_reply": "2024-06-16T12:26:59.343116Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABTUAAAKqCAYAAADrHrqNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABIMklEQVR4nO3debzVdb3v8fcG3IDE3ioyJiLOIqY5hKh4M7lg4oB5Sk1yIs0OlIjzSVGzUvFq6nUgCqVuUmqpFSZGoDjhhJJhSaYYGoMksjdQArLX/aPDOm7BgS24+Onz+Xisx3H9ft+11mctH+1Hvc5vqCqVSqUAAAAAABREs0oPAAAAAACwNkRNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAWAsvvfRSqqqq8n/+z/9p0uvHjh2bqqqqvPTSS+t2MACAjxFREwDgI+yFF17I1772tWy99dZp1apVampqsu++++aaa67Jv/71rzz11FOpqqrK+eef/47v8fzzz6eqqirDhw8vb3vooYfy+c9/Pp/85CfTqlWrbLnlljn00EMzbty4Rq9dsmRJLrzwwvTs2TNt2rRJu3btsttuu+W0007LnDlz3nX2+++/P1VVVY0em222Wfbee+/ccsstH+yHAQCg0FpUegAAANaPu+++O1/84hfTsmXLHHfccenZs2eWL1+ehx56KGeddVaeffbZjB49OjvuuGN+9rOf5Tvf+c4a32dVqBw0aFCS5Pbbb89RRx1VjpObbrppZs2alQceeCA//OEP8+UvfzlJsmLFiuy///557rnncvzxx+cb3/hGlixZkmeffTbjxo3LEUcckS5durzn9/jmN7+ZvfbaK0ny2muv5dZbb82gQYOyaNGiDBkyZF38VAAAFIyoCQDwETRr1qwcffTR6datWyZPnpzOnTuX9w0ZMiR//etfc/fddydJjj322FxwwQV59NFHs/fee6/2Xj/72c+y4447Zvfdd0+SXHTRRenRo0ceffTRVFdXN1r76quvlv/5rrvuytNPP51bbrmlHDpXeeONN7J8+fL39V369OmT//iP/yg///rXv56tt94648aNe9eo2dDQkOXLl6dVq1bv63MAACgOp58DAHwEjRw5MkuWLMmYMWMaBc1Vtt1225x22mlJ/h01k6x26niSTJs2LTNnziyvSf59Svtee+21WtBMkg4dOjRalyT77rvvautWnQrfFNXV1dl0003TokXj//98VVVVhg4dmltuuSU777xzWrZsmQkTJiRJ/v73v+ekk05Kx44d07Jly+y888656aabGr1++fLlGTFiRPbYY4/U1tamTZs26dOnT+677773nKlUKuWUU05JdXV17rjjjvL2Z599Np/73OfSunXrbLHFFvnOd76ThoaGNb7HDTfcUJ67S5cuGTJkSBYtWlTef+2116Z58+aNtl155ZWrXRpg5cqVadu2bc4555wkja8BOnr06GyzzTZp2bJl9tprrzzxxBPv+d0AADZEjtQEAPgI+s1vfpOtt946++yzz3uu7d69e/bZZ5/cdttt+f73v5/mzZuX960KnW890rJbt26ZNGlSXnnllWyxxRbv+L7dunVLkvzkJz/J+eefn6qqqiZ9l8WLF+cf//hHkmThwoUZN25cZsyYkTFjxqy2dvLkybntttsydOjQbL755tlqq60yf/787L333uXo2b59+9xzzz0ZPHhw6uvrM2zYsCRJfX19fvSjH+WYY47JySefnMWLF2fMmDHp379/Hn/88ey2225rnG/lypU56aSTcuutt+bOO+/MgAEDkiTz5s3LAQcckDfffDPnnntu2rRpk9GjR6d169arvcdFF12Uiy++OH379s3Xv/71zJw5MzfeeGOeeOKJPPzww9loo43Sp0+fNDQ05KGHHsohhxySJHnwwQfTrFmzPPjgg+X3evrpp7NkyZLsv//+jT5j3LhxWbx4cb72ta+lqqoqI0eOzBe+8IW8+OKL2Wijjdb63wsAQEWVAAD4SKmrqyslKR1++OHv+zXXX399KUnp3nvvLW9buXJl6ZOf/GSpd+/ejdaOGTOmlKRUXV1dOuCAA0oXXHBB6cEHHyytXLmy0bp//vOfpR122KGUpNStW7fSCSecUBozZkxp/vz572um++67r5RktUezZs1K3/3ud1dbv2rfs88+22j74MGDS507dy794x//aLT96KOPLtXW1pb++c9/lkqlUunNN98sLVu2rNGa119/vdSxY8fSSSedVN42a9asUpLSFVdcUVqxYkXpqKOOKrVu3brRb1cqlUrDhg0rJSk99thj5W2vvvpqqba2tpSkNGvWrPK26urqUr9+/Rr9htddd10pSemmm24qlUr//vdRU1NTOvvss0ulUqnU0NBQateuXemLX/xiqXnz5qXFixeXSqVS6aqrrio1a9as9Prrrzeat127dqWFCxeW3/9Xv/pVKUnpN7/5zTv8GwAA2HA5/RwA4COmvr4+SdK2bdv3/ZqjjjoqG220UaNT0KdMmZK///3vjU49T5KTTjopEyZMyGc/+9k89NBDueSSS9KnT59st912eeSRR8rrWrduncceeyxnnXVWkmTs2LEZPHhwOnfunG984xtZtmzZ+5ptxIgRmThxYiZOnJhbb701xxxzTL71rW/lmmuuWW3t//pf/ys9evQoPy+VSvnlL3+ZQw89NKVSKf/4xz/Kj/79+6euri5PPfVUkqR58+blU+obGhqycOHCvPnmm9lzzz3La95q+fLl+eIXv5jx48fnt7/9bfr169do/29/+9vsvffe+cxnPlPe1r59+9V+z9///vdZvnx5hg0blmbN/ue/np988smpqakpX/u0WbNm2WefffLAAw8kSf785z/ntddey7nnnptSqZSpU6cm+ffRmz179swmm2zS6HOOOuqobLrppuXnffr0SZK8+OKLa/rZAQA2aKImAMBHzKprVS5evPh9v6Zdu3bp379/7rzzzrzxxhtJ/n26cosWLfKlL31ptfX9+/fPvffem0WLFuWBBx7IkCFD8re//S2HHHJIo5sF1dbWZuTIkXnppZfy0ksvZcyYMdlhhx1y3XXX5ZJLLnlfs+2yyy7p27dv+vbtmy996Uv56U9/mkMOOSTnnntuFixY0Ght9+7dGz1fsGBBFi1alNGjR6d9+/aNHieeeGKSxjc3+vGPf5xPfepTadWqVdq1a5f27dvn7rvvTl1d3WpzXXrppbnrrrvyi1/8Ip/97GdX2/+3v/0t22233Wrbd9hhh9XWrWl7dXV1tt566/L+5N8hctq0afnXv/6VBx98MJ07d87uu++eXXfdtXwK+kMPPVQOlm+15ZZbNnq+KnC+/vrrq60FANjQiZoAAB8xNTU16dKlS2bMmLFWrxs0aFDq6+szfvz4LF++PL/85S/Tr1+/tG/f/h1fs/HGG6dPnz657rrrcv755+f111/PPffcs8a13bp1y0knnZSHH344m2yySW655Za1mu+tDjzwwLzxxht5/PHHG21/+/UqV92UZ9CgQeWjPd/+WHUjo5/+9Kc54YQTss0222TMmDGZMGFCJk6cmM997nNrvLlP//7906ZNm4wcObIcgte3/fbbLytWrMjUqVPz4IMPluNlnz598uCDD+a5557LggUL1hg133qt1LcqlUrrdWYAgPXBjYIAAD6CDjnkkIwePTpTp05N796939drDjvssLRt2zbjxo3LRhttlNdff321U6XfzZ577pkkmTt37ruu23TTTbPNNtusdXR9qzfffDNJsmTJkndd1759+7Rt2zYrV65M375933XtL37xi2y99da54447Gt3U6MILL1zj+r333junnnpqDjnkkHzxi1/MnXfe2eiO7N26dcvzzz+/2utmzpzZ6PmqGyrNnDkzW2+9dXn78uXLM2vWrEZzf+Yzn0l1dXUefPDBPPjgg+VT+/fff//88Ic/zKRJk8rPAQA+yhypCQDwEXT22WenTZs2+epXv5r58+evtv+FF15Y7ZqUrVu3zhFHHJHf/va3ufHGG9OmTZscfvjhq712VTh7u9/+9rdJ/uc06j/84Q/lu5a/1d/+9rf86U9/Wu1067Uxfvz4JMmuu+76ruuaN2+eI488Mr/85S/XGFHfevr6qiMZ33rk4mOPPVa+VuWa9O3bNz//+c8zYcKEfOUrX2l0ROfBBx+cRx99tNHRpAsWLFjtCNW+ffumuro61157baPPHjNmTOrq6sp3U0+SVq1aZa+99srPfvazzJ49u9GRmv/6179y7bXXZptttknnzp3f9XcBACg6R2oCAHwEbbPNNhk3blyOOuqo7LTTTjnuuOPSs2fPLF++PI888khuv/32nHDCCau9btCgQfnJT36Se++9N8cee2zatGmz2prDDz883bt3z6GHHpptttkmS5cuze9///v85je/yV577ZVDDz00STJx4sRceOGFOeyww7L33nvnE5/4RF588cXcdNNNWbZsWS666KL39V0efPDB8undCxcuzK9//etMmTIlRx99dHbcccf3fP1ll12W++67L7169crJJ5+cHj16ZOHChXnqqafy+9//PgsXLkzy76Nb77jjjhxxxBEZMGBAZs2alVGjRqVHjx7vekTowIEDc/PNN+e4445LTU1NfvCDHyT5d1j+f//v/+Wggw7KaaedljZt2mT06NHp1q1bnnnmmfLr27dvn/POOy8XX3xxDjrooBx22GGZOXNmbrjhhuy1114ZNGhQo8/r06dPLrvsstTW1maXXXZJknTo0CE77LBDZs6cucZ/rwAAHzWiJgDAR9Rhhx2WZ555JldccUV+9atf5cYbb0zLli3zqU99KldeeWVOPvnk1V7zuc99Lp07d87cuXPf8dTzH/3oR/nVr36V2267LXPmzEmpVMrWW2+db33rWznnnHPKp2AfeeSRWbx4cX73u99l8uTJWbhwYTbddNN85jOfyRlnnJEDDjjgfX2Pa6+9tvzPq26e893vfrd86vV76dixYx5//PF8+9vfzh133JEbbrgh7dq1y84775zLL7+8vO6EE07IvHnz8oMf/CD33ntvevTokZ/+9Ke5/fbbc//997/rZwwaNCiLFy/Of/7nf6ampiZXXHFFOnfunPvuuy/f+MY3ctlll6Vdu3Y59dRT06VLlwwePLjR6y+66KK0b98+1113XU4//fRsttlmOeWUU/K9730vG220UaO1q6LmPvvs0+hu6X369MnMmTPXeD1NAICPmqqSK4MDAAAAAAXimpoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChtKj0AB8VDQ0NmTNnTtq2bZuqqqpKjwMAAAAAhVIqlbJ48eJ06dIlzZq9+7GYouY6MmfOnHTt2rXSYwAAAABAob388svZYost3nWNqLmOtG3bNsm/f/SampoKTwMAAAAAxVJfX5+uXbuWO9u7ETXXkVWnnNfU1IiaAAAAANBE7+fSjm4UBAAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFEqLSg8AAAAflqotL6n0CPCxV5p9QaVHAOAjwJGaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoVQ0al566aXZa6+90rZt23To0CEDBw7MzJkzG6357Gc/m6qqqkaPU089tdGa2bNnZ8CAAdl4443ToUOHnHXWWXnzzTcbrbn//vuz++67p2XLltl2220zduzY1ea5/vrrs9VWW6VVq1bp1atXHn/88XX+nQEAAACAD6aiUXPKlCkZMmRIHn300UycODErVqxIv379snTp0kbrTj755MydO7f8GDlyZHnfypUrM2DAgCxfvjyPPPJIfvzjH2fs2LEZMWJEec2sWbMyYMCAHHDAAZk+fXqGDRuWr371q7n33nvLa2699dYMHz48F154YZ566qnsuuuu6d+/f1599dX1/0MAAAAAAO9bValUKlV6iFUWLFiQDh06ZMqUKdl///2T/PtIzd122y1XX331Gl9zzz335JBDDsmcOXPSsWPHJMmoUaNyzjnnZMGCBamurs4555yTu+++OzNmzCi/7uijj86iRYsyYcKEJEmvXr2y11575brrrkuSNDQ0pGvXrvnGN76Rc8899z1nr6+vT21tberq6lJTU/NBfgYAANaTqi0vqfQI8LFXmn1BpUcAYAO1Nn1tg7qmZl1dXZJks802a7T9lltuyeabb56ePXvmvPPOyz//+c/yvqlTp2aXXXYpB80k6d+/f+rr6/Pss8+W1/Tt27fRe/bv3z9Tp05NkixfvjzTpk1rtKZZs2bp27dvec3bLVu2LPX19Y0eAAAAAMD616LSA6zS0NCQYcOGZd99903Pnj3L27/85S+nW7du6dKlS5555pmcc845mTlzZu64444kybx58xoFzSTl5/PmzXvXNfX19fnXv/6V119/PStXrlzjmueee26N81566aW5+OKLP9iXBgAAAADW2gYTNYcMGZIZM2bkoYcearT9lFNOKf/zLrvsks6dO+fAAw/MCy+8kG222ebDHrPsvPPOy/Dhw8vP6+vr07Vr14rNAwAAAAAfFxtE1Bw6dGjGjx+fBx54IFtsscW7ru3Vq1eS5K9//Wu22WabdOrUabW7lM+fPz9J0qlTp/L/XbXtrWtqamrSunXrNG/ePM2bN1/jmlXv8XYtW7ZMy5Yt3/+XBAAAAADWiYpeU7NUKmXo0KG58847M3ny5HTv3v09XzN9+vQkSefOnZMkvXv3zh//+MdGdymfOHFiampq0qNHj/KaSZMmNXqfiRMnpnfv3kmS6urq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vuU1b7ds2bLU19c3egAAAAAA698GEzUbGhoybNiw7LvvvunZs2eSZN68eamurs4mm2zSaG3Hjh0zb9688pq3Bs1V+1fte7c19fX1+de//pV//OMfWbly5RrXrHqPt7v00ktTW1tbfnTt2rVpXxwAAAAAWCsbTNQcMmRIZsyYkZ///OeVHuV9Oe+881JXV1d+vPzyy5UeCQAAAAA+FlpUeoAkGTp0aMaPH58HHnggW2yxRXl7p06dsnz58ixatKjR0Zrz589Pp06dymvefpfyVXdHf+uat98xff78+ampqUnr1q3TvHnzNG/efI1rVr3H27Vs2TItW7Zs2hcGAAAAAJqsokdqlkqlDB06NHfeeWcmT56c7t27N9q/xx57ZKONNsqkSZPK22bOnJnZs2end+/eSZLevXvnj3/8Y6O7lE+cODE1NTXp0aNHec1b32PVmlXvUV1dnT322KPRmoaGhkyaNKm8BgAAAADYMFT0SM0hQ4Zk3Lhx+dWvfpW2bduWr19ZW1ub1q1bp7a2NoMHD87w4cOz2WabpaamJt/4xjfSu3fv7L333kmSfv36pUePHvnKV76SkSNHZt68eTn//PMzZMiQ8pGUp556aq677rqcffbZOemkkzJ58uTcdtttufvuu8uzDB8+PMcff3z23HPPfOYzn8nVV1+dpUuX5sQTT/zwfxgAAAAA4B1VNGreeOONSZLPfvazjbbffPPNOeGEE5Ik3//+99OsWbMceeSRWbZsWfr3758bbrihvLZ58+YZP358vv71r6d3795p06ZNjj/++Hz7298ur+nevXvuvvvunH766bnmmmuyxRZb5Ec/+lH69+9fXnPUUUdlwYIFGTFiRObNm5fddtstEyZMWO3mQQAAAABAZVWVSqVSpYf4KKivr09tbW3q6upSU1NT6XEAgPWgastLKj0CAFRUafYFlR6BD8h/nym+j/J/Dtemr20wdz8HAAAAAHg/RE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBaVHoAAAAAoBiqtryk0iMAJHGkJgAAAABQMKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKBWNmg888EAOPfTQdOnSJVVVVbnrrrsa7T/hhBNSVVXV6HHQQQc1WrNw4cIce+yxqampySabbJLBgwdnyZIljdY888wz6dOnT1q1apWuXbtm5MiRq81y++23Z8cdd0yrVq2yyy675Le//e06/74AAAAAwAdX0ai5dOnS7Lrrrrn++uvfcc1BBx2UuXPnlh8/+9nPGu0/9thj8+yzz2bixIkZP358HnjggZxyyinl/fX19enXr1+6deuWadOm5YorrshFF12U0aNHl9c88sgjOeaYYzJ48OA8/fTTGThwYAYOHJgZM2as+y8NAAAAAHwgVaVSqVTpIZKkqqoqd955ZwYOHFjedsIJJ2TRokWrHcG5yp///Of06NEjTzzxRPbcc88kyYQJE3LwwQfnlVdeSZcuXXLjjTfmW9/6VubNm5fq6uokybnnnpu77rorzz33XJLkqKOOytKlSzN+/Pjye++9997ZbbfdMmrUqPc1f319fWpra1NXV5eampom/AIAwIauastLKj0CAAAfc6XZF1R6hPVmbfraBn9Nzfvvvz8dOnTIDjvskK9//et57bXXyvumTp2aTTbZpBw0k6Rv375p1qxZHnvssfKa/fffvxw0k6R///6ZOXNmXn/99fKavn37Nvrc/v37Z+rUqe8417Jly1JfX9/oAQAAAACsf02Kmi+++OK6nmONDjrooPzkJz/JpEmTcvnll2fKlCn5/Oc/n5UrVyZJ5s2blw4dOjR6TYsWLbLZZptl3rx55TUdO3ZstGbV8/das2r/mlx66aWpra0tP7p27frBviwAAAAA8L40KWpuu+22OeCAA/LTn/40b7zxxrqeqezoo4/OYYcdll122SUDBw7M+PHj88QTT+T+++9fb5/5fp133nmpq6srP15++eVKjwQAAAAAHwtNippPPfVUPvWpT2X48OHp1KlTvva1r+Xxxx9f17OtZuutt87mm2+ev/71r0mSTp065dVXX2205s0338zChQvTqVOn8pr58+c3WrPq+XutWbV/TVq2bJmamppGDwAAAABg/WtS1Nxtt91yzTXXZM6cObnpppsyd+7c7LfffunZs2euuuqqLFiwYF3PmSR55ZVX8tprr6Vz585Jkt69e2fRokWZNm1aec3kyZPT0NCQXr16ldc88MADWbFiRXnNxIkTs8MOO2TTTTctr5k0aVKjz5o4cWJ69+69Xr4HAAAAANB0H+hGQS1atMgXvvCF3H777bn88svz17/+NWeeeWa6du2a4447LnPnzn3X1y9ZsiTTp0/P9OnTkySzZs3K9OnTM3v27CxZsiRnnXVWHn300bz00kuZNGlSDj/88Gy77bbp379/kmSnnXbKQQcdlJNPPjmPP/54Hn744QwdOjRHH310unTpkiT58pe/nOrq6gwePDjPPvtsbr311lxzzTUZPnx4eY7TTjstEyZMyJVXXpnnnnsuF110UZ588skMHTr0g/w8AAAAAMB68IGi5pNPPpn//M//TOfOnXPVVVflzDPP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4/L2o446KhMmTFhnwwEAAAAAvF2TbhT0u9/9Lvfee2+22GKLRtu32267/O1vf1sngwEAAAAArEmTjtRcunRpoyM0V1m4cGFatmz5gYcCAAAAAHgnTYqaffr0yU9+8pPy86qqqjQ0NGTkyJE54IAD1tlwAAAAAABv16TTz0eOHJkDDzwwTz75ZJYvX56zzz47zz77bBYuXJiHH354Xc8IAAAAAFDWpCM1e/bsmb/85S/Zb7/9cvjhh2fp0qX5whe+kKeffjrbbLPNup4RAAAAAKBsrY/UXLFiRQ466KCMGjUq3/rWt9bHTAAAAAAA72itj9TcaKON8swzz6yPWQAAAAAA3lOTTj8fNGhQxowZs65nAQAAAAB4T026UdCbb76Zm266Kb///e+zxx57pE2bNo32X3XVVetkOAAAAACAt1urqPniiy9mq622yowZM7L77rsnSf7yl780WlNVVbXupgMAAAAAeJu1iprbbbdd5s6dm/vuuy9JctRRR+Xaa69Nx44d18twAAAAAABvt1bX1CyVSo2e33PPPVm6dOk6HQgAAAAA4N006UZBq7w9cgIAAAAArG9rFTWrqqpWu2ama2gCAAAAAB+mtbqmZqlUygknnJCWLVsmSd54442ceuqpq939/I477lh3EwIAAAAAvMVaRc3jjz++0fNBgwat02EAAAAAAN7LWkXNm2++eX3NAQAAAADwvnygGwUBAAAAAHzYRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBaVHoAAPg4qdrykkqPAAAAUHiO1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKpaJR84EHHsihhx6aLl26pKqqKnfddVej/aVSKSNGjEjnzp3TunXr9O3bN88//3yjNQsXLsyxxx6bmpqabLLJJhk8eHCWLFnSaM0zzzyTPn36pFWrVunatWtGjhy52iy33357dtxxx7Rq1Sq77LJLfvvb367z7wsAAAAAfHAVjZpLly7Nrrvumuuvv36N+0eOHJlrr702o0aNymOPPZY2bdqkf//+eeONN8prjj322Dz77LOZOHFixo8fnwceeCCnnHJKeX99fX369euXbt26Zdq0abniiity0UUXZfTo0eU1jzzySI455pgMHjw4Tz/9dAYOHJiBAwdmxowZ6+/LAwAAAABNUlUqlUqVHiJJqqqqcuedd2bgwIFJ/n2UZpcuXXLGGWfkzDPPTJLU1dWlY8eOGTt2bI4++uj8+c9/To8ePfLEE09kzz33TJJMmDAhBx98cF555ZV06dIlN954Y771rW9l3rx5qa6uTpKce+65ueuuu/Lcc88lSY466qgsXbo048ePL8+z9957Z7fddsuoUaPe1/z19fWpra1NXV1dampq1tXPAsBHTNWWl1R6BAAAoMBKsy+o9Ajrzdr0tQ32mpqzZs3KvHnz0rdv3/K22tra9OrVK1OnTk2STJ06NZtsskk5aCZJ375906xZszz22GPlNfvvv385aCZJ//79M3PmzLz++uvlNW/9nFVrVn0OAAAAALDhaFHpAd7JvHnzkiQdO3ZstL1jx47lffPmzUuHDh0a7W/RokU222yzRmu6d+++2nus2rfppptm3rx57/o5a7Js2bIsW7as/Ly+vn5tvh4AAAAA0EQb7JGaG7pLL700tbW15UfXrl0rPRIAAAAAfCxssFGzU6dOSZL58+c32j5//vzyvk6dOuXVV19ttP/NN9/MwoULG61Z03u89TPeac2q/Wty3nnnpa6urvx4+eWX1/YrAgAAAABNsMFGze7du6dTp06ZNGlSeVt9fX0ee+yx9O7dO0nSu3fvLFq0KNOmTSuvmTx5choaGtKrV6/ymgceeCArVqwor5k4cWJ22GGHbLrppuU1b/2cVWtWfc6atGzZMjU1NY0eAAAAAMD6V9GouWTJkkyfPj3Tp09P8u+bA02fPj2zZ89OVVVVhg0blu985zv59a9/nT/+8Y857rjj0qVLl/Id0nfaaaccdNBBOfnkk/P444/n4YcfztChQ3P00UenS5cuSZIvf/nLqa6uzuDBg/Pss8/m1ltvzTXXXJPhw4eX5zjttNMyYcKEXHnllXnuuedy0UUX5cknn8zQoUM/7J8EAAAAAHgPFb1R0JNPPpkDDjig/HxVaDz++OMzduzYnH322Vm6dGlOOeWULFq0KPvtt18mTJiQVq1alV9zyy23ZOjQoTnwwAPTrFmzHHnkkbn22mvL+2tra/O73/0uQ4YMyR577JHNN988I0aMyCmnnFJes88++2TcuHE5//zz81//9V/Zbrvtctddd6Vnz54fwq8AAAAAAKyNqlKpVKr0EB8F9fX1qa2tTV1dnVPRAXhHVVteUukRAACAAivNvqDSI6w3a9PXNthragIAAAAArImoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFMoGHTUvuuiiVFVVNXrsuOOO5f1vvPFGhgwZknbt2uUTn/hEjjzyyMyfP7/Re8yePTsDBgzIxhtvnA4dOuSss87Km2++2WjN/fffn9133z0tW7bMtttum7Fjx34YXw8AAAAAaIINOmomyc4775y5c+eWHw899FB53+mnn57f/OY3uf322zNlypTMmTMnX/jCF8r7V65cmQEDBmT58uV55JFH8uMf/zhjx47NiBEjymtmzZqVAQMG5IADDsj06dMzbNiwfPWrX8299977oX5PAAAAAOD9aVHpAd5LixYt0qlTp9W219XVZcyYMRk3blw+97nPJUluvvnm7LTTTnn00Uez995753e/+13+9Kc/5fe//306duyY3XbbLZdccknOOeecXHTRRamurs6oUaPSvXv3XHnllUmSnXbaKQ899FC+//3vp3///h/qdwUAAAAA3tsGf6Tm888/ny5dumTrrbfOsccem9mzZydJpk2blhUrVqRv377ltTvuuGO23HLLTJ06NUkyderU7LLLLunYsWN5Tf/+/VNfX59nn322vOat77Fqzar3AAAAAAA2LBv0kZq9evXK2LFjs8MOO2Tu3Lm5+OKL06dPn8yYMSPz5s1LdXV1Ntlkk0av6dixY+bNm5ckmTdvXqOguWr/qn3vtqa+vj7/+te/0rp16zXOtmzZsixbtqz8vL6+/gN9VwAAAADg/dmgo+bnP//58j9/6lOfSq9evdKtW7fcdttt7xgbPyyXXnppLr744orOAAAAAAAfRxv86edvtckmm2T77bfPX//613Tq1CnLly/PokWLGq2ZP39++RqcnTp1Wu1u6Kuev9eampqadw2n5513Xurq6sqPl19++YN+PQAAAADgfShU1FyyZEleeOGFdO7cOXvssUc22mijTJo0qbx/5syZmT17dnr37p0k6d27d/74xz/m1VdfLa+ZOHFiampq0qNHj/Kat77HqjWr3uOdtGzZMjU1NY0eAAAAAMD6t0FHzTPPPDNTpkzJSy+9lEceeSRHHHFEmjdvnmOOOSa1tbUZPHhwhg8fnvvuuy/Tpk3LiSeemN69e2fvvfdOkvTr1y89evTIV77ylfzhD3/Ivffem/PPPz9DhgxJy5YtkySnnnpqXnzxxZx99tl57rnncsMNN+S2227L6aefXsmvDgAAAAC8gw36mpqvvPJKjjnmmLz22mtp37599ttvvzz66KNp3759kuT73/9+mjVrliOPPDLLli1L//79c8MNN5Rf37x584wfPz5f//rX07t377Rp0ybHH398vv3tb5fXdO/ePXfffXdOP/30XHPNNdliiy3yox/9KP379//Qvy8AAAAA8N6qSqVSqdJDfBTU19entrY2dXV1TkUH4B1VbXlJpUcAAAAKrDT7gkqPsN6sTV/boE8/BwAAAAB4O1ETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKJQWlR4A+PBUbXlJpUfgAyrNvqDSIwAAAEDFOVITAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACiUFpUeAID3r2rLSyo9AgAAAFScIzUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEJpUekBKJaqLS+p9AgAAAAAfMw5UhMAAAAAKBRREwAAAAAoFFHzba6//vpstdVWadWqVXr16pXHH3+80iMBAAAAAG8har7FrbfemuHDh+fCCy/MU089lV133TX9+/fPq6++WunRAAAAAID/Jmq+xVVXXZWTTz45J554Ynr06JFRo0Zl4403zk033VTp0QAAAACA/+bu5/9t+fLlmTZtWs4777zytmbNmqVv376ZOnXqauuXLVuWZcuWlZ/X1dUlSerr69f/sJXU8EalJwAAAAD42Poot6dV361UKr3nWlHzv/3jH//IypUr07Fjx0bbO3bsmOeee2619Zdeemkuvvji1bZ37dp1vc0IAAAAwMdbbe33Kj3Cerd48eLU1ta+6xpRs4nOO++8DB8+vPy8oaEhCxcuTLt27VJVVVXByT4a6uvr07Vr17z88supqamp9DhAQflbAqwL/pYA64K/JcC68FH/W1IqlbJ48eJ06dLlPdeKmv9t8803T/PmzTN//vxG2+fPn59OnTqttr5ly5Zp2bJlo22bbLLJ+hzxY6mmpuYj+R9S4MPlbwmwLvhbAqwL/pYA68JH+W/Jex2huYobBf236urq7LHHHpk0aVJ5W0NDQyZNmpTevXtXcDIAAAAA4K0cqfkWw4cPz/HHH58999wzn/nMZ3L11Vdn6dKlOfHEEys9GgAAAADw30TNtzjqqKOyYMGCjBgxIvPmzctuu+2WCRMmrHbzINa/li1b5sILL1ztFH+AteFvCbAu+FsCrAv+lgDrgr8l/6Oq9H7ukQ4AAAAAsIFwTU0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETTYol156afbaa6+0bds2HTp0yMCBAzNz5sxKjwUU2GWXXZaqqqoMGzas0qMABfP3v/89gwYNSrt27dK6devssssuefLJJys9FlAgK1euzAUXXJDu3bundevW2WabbXLJJZfE/XqB9/LAAw/k0EMPTZcuXVJVVZW77rqr0f5SqZQRI0akc+fOad26dfr27Zvnn3++MsNWiKjJBmXKlCkZMmRIHn300UycODErVqxIv379snTp0kqPBhTQE088kR/84Af51Kc+VelRgIJ5/fXXs++++2ajjTbKPffckz/96U+58sors+mmm1Z6NKBALr/88tx444257rrr8uc//zmXX355Ro4cmf/7f/9vpUcDNnBLly7Nrrvumuuvv36N+0eOHJlrr702o0aNymOPPZY2bdqkf//+eeONNz7kSSunquT/RcQGbMGCBenQoUOmTJmS/fffv9LjAAWyZMmS7L777rnhhhvyne98J7vttluuvvrqSo8FFMS5556bhx9+OA8++GClRwEK7JBDDknHjh0zZsyY8rYjjzwyrVu3zk9/+tMKTgYUSVVVVe68884MHDgwyb+P0uzSpUvOOOOMnHnmmUmSurq6dOzYMWPHjs3RRx9dwWk/PI7UZINWV1eXJNlss80qPAlQNEOGDMmAAQPSt2/fSo8CFNCvf/3r7LnnnvniF7+YDh065NOf/nR++MMfVnosoGD22WefTJo0KX/5y1+SJH/4wx/y0EMP5fOf/3yFJwOKbNasWZk3b16j/61TW1ubXr16ZerUqRWc7MPVotIDwDtpaGjIsGHDsu+++6Znz56VHgcokJ///Od56qmn8sQTT1R6FKCgXnzxxdx4440ZPnx4/uu//itPPPFEvvnNb6a6ujrHH398pccDCuLcc89NfX19dtxxxzRv3jwrV67Md7/73Rx77LGVHg0osHnz5iVJOnbs2Gh7x44dy/s+DkRNNlhDhgzJjBkz8tBDD1V6FKBAXn755Zx22mmZOHFiWrVqVelxgIJqaGjInnvume9973tJkk9/+tOZMWNGRo0aJWoC79ttt92WW265JePGjcvOO++c6dOnZ9iwYenSpYu/JQAfkNPP2SANHTo048ePz3333Zctttii0uMABTJt2rS8+uqr2X333dOiRYu0aNEiU6ZMybXXXpsWLVpk5cqVlR4RKIDOnTunR48ejbbttNNOmT17doUmAororLPOyrnnnpujjz46u+yyS77yla/k9NNPz6WXXlrp0YAC69SpU5Jk/vz5jbbPnz+/vO/jQNRkg1IqlTJ06NDceeedmTx5crp3717pkYCCOfDAA/PHP/4x06dPLz/23HPPHHvssZk+fXqaN29e6RGBAth3330zc+bMRtv+8pe/pFu3bhWaCCiif/7zn2nWrPH/7G7evHkaGhoqNBHwUdC9e/d06tQpkyZNKm+rr6/PY489lt69e1dwsg+X08/ZoAwZMiTjxo3Lr371q7Rt27Z8LYja2tq0bt26wtMBRdC2bdvVrsPbpk2btGvXzvV5gfft9NNPzz777JPvfe97+dKXvpTHH388o0ePzujRoys9GlAghx56aL773e9myy23zM4775ynn346V111VU466aRKjwZs4JYsWZK//vWv5eezZs3K9OnTs9lmm2XLLbfMsGHD8p3vfCfbbbddunfvngsuuCBdunQp3yH946CqVCqVKj0ErFJVVbXG7TfffHNOOOGED3cY4CPjs5/9bHbbbbdcffXVlR4FKJDx48fnvPPOy/PPP5/u3btn+PDhOfnkkys9FlAgixcvzgUXXJA777wzr776arp06ZJjjjkmI0aMSHV1daXHAzZg999/fw444IDVth9//PEZO3ZsSqVSLrzwwowePTqLFi3KfvvtlxtuuCHbb799BaatDFETAAAAACgU19QEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAK5f8D8Rt1jTj/kQcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", "nvd['BaseScore'] = nvd['BaseScore'].replace(0, np.NaN);\n", "nvd['BaseScore'].plot(kind=\"hist\", title='CVSS Breakdown', color=\"#001d82\", figsize=(16, 8)); " ] }, { "cell_type": "markdown", "id": "31e34b59-d5ae-4bd5-b497-9e448cc1c7e1", "metadata": {}, "source": [ "## CVSS Count" ] }, { "cell_type": "code", "execution_count": 4, "id": "c6d18498-a8bb-4a2c-86b3-88d7a0f1e35a", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:26:59.345887Z", "iopub.status.busy": "2024-06-16T12:26:59.345655Z", "iopub.status.idle": "2024-06-16T12:26:59.357149Z", "shell.execute_reply": "2024-06-16T12:26:59.356610Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/plain": [ "(0.999, 2.0] 18\n", "(2.0, 3.0] 601\n", "(3.0, 4.0] 2106\n", "(4.0, 5.0] 10957\n", "(8.0, 9.0] 20097\n", "(9.0, 10.0] 22459\n", "(5.0, 6.0] 24619\n", "(6.0, 7.0] 25927\n", "(7.0, 8.0] 40860\n", "Name: count, dtype: int64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['BaseScore'].value_counts(bins = [1,2,3,4,5,6,7,8,9,10]).sort_values()" ] }, { "cell_type": "markdown", "id": "5cc77647-3836-4b8f-9925-0619c323097d", "metadata": {}, "source": [ "## Vector Count" ] }, { "cell_type": "code", "execution_count": 5, "id": "2df22bea-1428-47c6-b9aa-d9f9370490e9", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:26:59.359311Z", "iopub.status.busy": "2024-06-16T12:26:59.359134Z", "iopub.status.idle": "2024-06-16T12:26:59.393960Z", "shell.execute_reply": "2024-06-16T12:26:59.393517Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/plain": [ "AttackVector\n", "NETWORK 108078\n", "Missing_Data 85350\n", "LOCAL 34998\n", "ADJACENT_NETWORK 3072\n", "PHYSICAL 1496\n", "Name: count, dtype: int64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['AttackVector'].value_counts()" ] }, { "cell_type": "code", "execution_count": 6, "id": "49dd1629-708b-42a3-8716-59ff9fc381b3", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:26:59.395937Z", "iopub.status.busy": "2024-06-16T12:26:59.395750Z", "iopub.status.idle": "2024-06-16T12:26:59.425075Z", "shell.execute_reply": "2024-06-16T12:26:59.424603Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/plain": [ "AttackVector\n", "NETWORK 0.46\n", "Missing_Data 0.37\n", "LOCAL 0.15\n", "ADJACENT_NETWORK 0.01\n", "PHYSICAL 0.01\n", "Name: proportion, dtype: float64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['AttackVector'].value_counts(normalize=True).round(2)" ] }, { "cell_type": "markdown", "id": "6318a0b7-6796-45d6-95eb-923f4b7529f1", "metadata": {}, "source": [ "## Yearly Breakdown" ] }, { "cell_type": "code", "execution_count": 7, "id": "a308f41c-a8ca-47d5-a031-68ed3b741fad", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:26:59.426977Z", "iopub.status.busy": "2024-06-16T12:26:59.426802Z", "iopub.status.idle": "2024-06-16T12:27:00.373442Z", "shell.execute_reply": "2024-06-16T12:27:00.372909Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
YearAttackVectorAttackVectorCount
2023NETWORK21738
2023LOCAL6379
2023Missing_Data2125
2023ADJACENT_NETWORK490
2023PHYSICAL217
2022NETWORK18106
2022LOCAL6174
2022Missing_Data1459
2022ADJACENT_NETWORK450
2022PHYSICAL242
2021NETWORK14041
2021LOCAL5248
2021Missing_Data1908
2021ADJACENT_NETWORK559
2021PHYSICAL194
2020NETWORK12867
2020LOCAL4457
2020Missing_Data900
2020ADJACENT_NETWORK706
2020PHYSICAL292
2019NETWORK13325
2019LOCAL3462
2019Missing_Data1637
2019ADJACENT_NETWORK318
2019PHYSICAL196
2018NETWORK12936
2018LOCAL3144
2018Missing_Data1647
2018ADJACENT_NETWORK270
2018PHYSICAL157
2017NETWORK10097
2017LOCAL4196
2017Missing_Data3472
2017ADJACENT_NETWORK207
2017PHYSICAL141
2016NETWORK4390
2016LOCAL1729
2016Missing_Data286
2016ADJACENT_NETWORK59
2016PHYSICAL53
2015Missing_Data6421
2015NETWORK149
2015LOCAL18
2015ADJACENT_NETWORK7
2014Missing_Data7942
2014NETWORK41
2014LOCAL22
2014PHYSICAL2
2014ADJACENT_NETWORK1
2013Missing_Data5299
2013NETWORK19
2013LOCAL5
2013ADJACENT_NETWORK1
2012Missing_Data5288
2012NETWORK39
2012LOCAL22
2012ADJACENT_NETWORK2
2011Missing_Data4145
2011NETWORK20
2011LOCAL5
2011PHYSICAL1
2011ADJACENT_NETWORK1
2010Missing_Data4589
2010NETWORK60
2010LOCAL18
2009Missing_Data5710
2009NETWORK38
2009LOCAL30
2008Missing_Data5609
2008NETWORK44
2008LOCAL11
2007Missing_Data6570
2007NETWORK16
2007LOCAL8
2007PHYSICAL1
2007ADJACENT_NETWORK1
2006Missing_Data6643
2006NETWORK12
2006LOCAL4
2005Missing_Data4957
2005NETWORK35
2005LOCAL18
2004Missing_Data2439
2004NETWORK28
2004LOCAL12
2003Missing_Data1532
2003NETWORK13
2003LOCAL3
2002Missing_Data2118
2002NETWORK33
2002LOCAL19
2001Missing_Data1644
2001NETWORK24
2001LOCAL11
2000Missing_Data1010
2000NETWORK7
2000LOCAL3
\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nvd['Year'] = nvd['Published'].dt.strftime('%Y')\n", "nvd2 = nvd[['Year', 'AttackVector']].copy()\n", "av_df = nvd2.value_counts().to_frame('AttackVectorCount').reset_index()\n", "av_df = av_df.sort_values(by=['Year', 'AttackVectorCount'] , ascending=[False, False])\n", "av_df.style.hide()" ] }, { "cell_type": "code", "execution_count": 8, "id": "deb09f97-2065-49e2-92a7-f9942735a908", "metadata": { "execution": { "iopub.execute_input": "2024-06-16T12:27:00.375703Z", "iopub.status.busy": "2024-06-16T12:27:00.375336Z", "iopub.status.idle": "2024-06-16T12:27:00.611868Z", "shell.execute_reply": "2024-06-16T12:27:00.611273Z" }, "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "AttackVector=NETWORK
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "NETWORK", "line": { "color": "#636efa", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "NETWORK", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000" ], "xaxis": "x", "y": [ 21738, 18106, 14041, 12867, 13325, 12936, 10097, 4390, 149, 41, 19, 39, 20, 60, 38, 44, 16, 12, 35, 28, 13, 33, 24, 7 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=LOCAL
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "LOCAL", "line": { "color": "#EF553B", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "LOCAL", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000" ], "xaxis": "x", "y": [ 6379, 6174, 5248, 4457, 3462, 3144, 4196, 1729, 18, 22, 5, 22, 5, 18, 30, 11, 8, 4, 18, 12, 3, 19, 11, 3 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=Missing_Data
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "Missing_Data", "line": { "color": "#00cc96", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "Missing_Data", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000" ], "xaxis": "x", "y": [ 2125, 1459, 1908, 900, 1637, 1647, 3472, 286, 6421, 7942, 5299, 5288, 4145, 4589, 5710, 5609, 6570, 6643, 4957, 2439, 1532, 2118, 1644, 1010 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=ADJACENT_NETWORK
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "ADJACENT_NETWORK", "line": { "color": "#ab63fa", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "ADJACENT_NETWORK", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2007" ], "xaxis": "x", "y": [ 490, 450, 559, 706, 318, 270, 207, 59, 7, 1, 1, 2, 1, 1 ], "yaxis": "y" }, { "hovertemplate": "AttackVector=PHYSICAL
Year=%{x}
AttackVectorCount=%{y}", "legendgroup": "PHYSICAL", "line": { "color": "#FFA15A", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "PHYSICAL", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2014", "2011", "2007" ], "xaxis": "x", "y": [ 217, 242, 194, 292, 196, 157, 141, 53, 2, 1, 1 ], "yaxis": "y" } ], "layout": { "legend": { "title": { "text": "AttackVector" }, "tracegroupgap": 0 }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "xaxis": { "anchor": "y", "domain": [ 0.0, 1.0 ], "title": { "text": "Year" } }, "yaxis": { "anchor": "x", "domain": [ 0.0, 1.0 ], "title": { "text": "AttackVectorCount" } } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig = px.line(av_df, x=\"Year\", y=\"AttackVectorCount\", color='AttackVector' , markers=True)\n", "fig.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" }, "vscode": { "interpreter": { "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" } } }, "nbformat": 4, "nbformat_minor": 5 }