{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Floating-point arithmetic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Arbitrary real numbers on computers are typically approximated by a set $\\mathbb{F}$ of [floating-point numbers](https://en.wikipedia.org/wiki/Floating_point). Basically, you should think of these as numbers in \"scientific notation:\"\n", "$$\n", "\\pm\\underbrace{d_0.d_1 d_2 d_3 ... d_{p-1}}_\\textrm{significand} \\times \\beta^e, \\;\\; 0 \\le d_k < \\beta\n", "$$\n", "where the $d_k$ are digits of the **significand** in some base $\\beta$ (typically $\\beta=2$), the number of digits $p$ is the **precision**, and $e$ is the **exponent**. That is, the computer actually stores a tuple (*sign*,*significand*,*exponent*), representing *a fixed number of significant digits over a wide range of magnitudes*.\n", "\n", "Our goal is to eventually understand the set $\\mathbb{F}$, how *rounding* occurs when you operate on floating-point values, how rounding errors *accumulate*, and how you analyze the accuracy of numerical algorithms. In this notebook, however, we will just perform a few informal experiments in [Julia](http://julialang.org/) to get a feel for things." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Entering and working with floating-point values" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.5e7" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1.5e7 # a floating-point value 1.5 × 10⁷" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.02040816326530612" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = 1/49 # division of two integers produces a floating-point value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since $1/49 \\notin \\mathbb{F}$, however, $x$ is actually a *rounded* version of $1/49$, and multiplying it by $49$ will yield something that is close to but *not quite equal to 1*." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9999999999999999" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x * 49" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.1102230246251565e-16" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 - x * 49" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is about $10^{-16}$ because the default floating-point precision in Julia is **double precision**, with $p=53$ bits of significand ($\\beta=2$). Double precision, called the `Float64` type in Julia (64 bits overall), is used because it is **fast**: double-precision floating-point arithmetic is implemented by dedicated circuits in your CPU.\n", "\n", "The precision can also be described by $\\epsilon = 2^{p-1}$, which bounds the *relative error* between any element of $\\mathbb{R}$ and the closest element of $\\mathbb{F}$. It is returned by `eps()` in Julia:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2.220446049250313e-16, 2.220446049250313e-16, 2.220446049250313e-16, 2.220446049250313e-16)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2.0^-52, eps(), eps(1.0), eps(Float64) # these are all the same thing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact, there is typically a small rounding error as soon as you enter a floating-point value, because most decimal fractions are not in $\\mathbb{F}$. This can be seen by either:\n", "* converting to a higher precision with `big(x)` (converts to `BigFloat` [arbitrary-precision](https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic) value, by default with $p=256 bits$ or about 80 decimal digits)\n", "* comparing to an exact rational — in Julia, `p // q` produces a `Rational` type, which is stored as a pair of integers" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1.5, true)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1.5 is exactly represented in binary floating point:\n", "big(1.5), 1.5 == 3//2" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.1000000000000000055511151231257827021181583404541015625, false)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 0.1 is *not* exactly represented\n", "big(0.1), 0.1 == 1//10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accumulation of roundoff errors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A common mistake is to confuse **precision** with **accuracy**. A value can be *more accurate* or *less accurate* than the precision (number of digits) with which it is represented.\n", "\n", "For example, the value `3.0` in floating point (represented exactly in $\\mathbb{F}$) is an exact value for the number of sides of a triangle, but a rather inaccurate approximation for π.\n", "\n", "Most commonly, floating-point values are *less accurate* than the precision allows, because **roundoff errors accumulate** over the course of a long computation. To see this, let us consider the function `y = cumsum(x)` in Julia, which computes\n", "$$\n", "y_k = \\sum_{i=1}^k x_i\n", "$$\n", "We will try this for random $x_i \\in [0,1)$, and compare to the \"exact\" value of the sum. Although `cumsum` is built-in to Julia, we will write our own version so that we can see exactly what it is doing:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "my_cumsum (generic function with 1 method)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function my_cumsum(x)\n", " y = similar(x) # allocate an array of the same type and size as x\n", " y[1] = x[1]\n", " for i = 2:length(x)\n", " y[i] = y[i-1] + x[i]\n", " end\n", " return y\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, how to we get the \"exact\" sum for comparing the error? The trick is that we will do the sum in **two precisions**: *double precision* and *single precision* (Julia `Float32` = 32 bits), where single precision is about 7-8 decimal digits ($p=24$ bits). Since double precision has about twice as many digits as single precision, we can treat the double precision result as \"exact\" compared to the single-precision result in order to compute the accuracy in the latter." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1.1920929f-7, 2.220446049250313e-16)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eps(Float32), eps(Float64)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " 0.131986 seconds (18.19 k allocations: 39.103 MiB, 50.29% gc time)\n" ] }, { "data": { "text/plain": [ "PyObject Text(0.5, 1.0, 'naive cumsum implementation')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = rand(Float32, 10^7) # 10^7 single-precision values uniform in [0,1)\n", "@time y = my_cumsum(x)\n", "yexact = my_cumsum(Float64.(x)) # same thing in double precision\n", "err = abs.(y .- yexact) ./ abs.(yexact) # relative error in y\n", "\n", "using PyPlot\n", "n = 1:10:length(err) # downsample by 10 for plotting speed\n", "loglog(n, err[n])\n", "ylabel(\"relative error\")\n", "xlabel(\"# summands\")\n", "# plot a √n line for comparison\n", "loglog([1,length(err)], sqrt.([1,length(err)]) * 1e-7, \"k--\")\n", "text(1e3,1e-5, L\"\\sim \\sqrt{n}\")\n", "title(\"naive cumsum implementation\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the error starts around $10^{-7}$ (about `eps(Float32)`), but gets worse than the precision as the number of summands grows.\n", "\n", "As you can see, the relative error has an upper bound that scales roughly proportional $\\sqrt{n}$ where $n$ is the number of summands. Intuitively, there is a little roundoff error from each addition, but the roundoff error is somewhat random in $[-\\epsilon,+\\epsilon]$ and hence the roundoff errors grow as a [random-walk](https://en.wikipedia.org/wiki/Random_walk) process $\\sim \\sqrt{n}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, **one can do better than this**. If you use the built-in `cumsum` function in Julia 0.3.6 or later, you will see *very different* error growth: the mean errors actually grow as roughly $\\sqrt{\\log n}$. Not only that, but the output of the `@time` macro indicates that the built-in `cumsum` (which is also written in Julia) is actually a bit *faster* than our `my_cumsum`.\n", "\n", "We will have to investigate summation in more detail to understand how this can be possible." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " 0.128348 seconds (228.36 k allocations: 49.486 MiB, 13.83% gc time)\n" ] }, { "data": { "text/plain": [ "1-element Array{PyCall.PyObject,1}:\n", " PyObject " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VERSION < v\"0.3.6\" && warn(\"cumsum is less accurate for Julia < 0.3.6\")\n", "@time y2 = cumsum(x)\n", "err2 = abs.(y2 .- yexact) ./ abs.(yexact)\n", "loglog(n, err2[n])\n", "ylabel(\"relative error\")\n", "xlabel(\"# summands\")\n", "title(\"built-in cumsum function\")\n", "loglog(n, sqrt.(log.(n)) * 1e-7, \"k--\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rounding mode\n", "\n", "By default, each elementary floating-point operation (`+`, `-`, `*`, `/`) behaves as if it computed its result in infinite precision and then rounded the result to the *nearest* floating-point value (rounding to the nearest *even* value in the case of ties). This is called **correct rounding** or **exact rounding**.\n", "\n", "The `rounding` function in Julia returns the current rounding behavior for a given type, and defaults to rounding to the nearest value:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RoundingMode{:Nearest}()" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rounding(Float32)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, it is possible to *change* the rounding mode to always round *up* (or *down*) with the `setrounding` function from the [SetRounding.jl package](https://github.com/JuliaIntervals/SetRounding.jl). (In C/C++ you would use the [`fesetround`](https://en.cppreference.com/w/c/numeric/fenv/feround) function.)\n", "\n", "First, let's install this package if needed. We can do `import Pkg` followed by `Pkg.add(\"SetRounding\")`, but it is nicer to simply start an input cell with `]` at which point you are in \"package mode\" and have a set of [nice package-management commands](https://docs.julialang.org/en/v1/stdlib/Pkg/) available:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m registry at `~/.julia/registries/General`\n", "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m git-repo `https://github.com/JuliaRegistries/General.git`\n", "\u001b[?25l\u001b[2K\u001b[?25h\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m `~/.julia/environments/v1.1/Project.toml`\n", "\u001b[90m [no changes]\u001b[39m\n", "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m `~/.julia/environments/v1.1/Manifest.toml`\n", "\u001b[90m [no changes]\u001b[39m\n" ] } ], "source": [ "] add SetRounding" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "using SetRounding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Changing the rounding mode is supported in the CPU hardware, so it doesn't change the speed of floating-point arithmetic. It can be extremely useful to gain an understanding of the roundoff errors in a problem, and can even be used to implement [interval arithmetic](https://en.wikipedia.org/wiki/Interval_arithmetic), in which you compute a range `[a,b]` that bounds your error rather than a single rounded value — see [IntervalArithmetic.jl](https://github.com/JuliaIntervals/IntervalArithmetic.jl) in Julia. \n", "\n", "In the case of our summation problem, we can change to rounding up, which will result in a very different error growth: O(n) rather than O(√n). The errors now all accumulate in the same direction, so they no longer form a random walk" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkYAAAHJCAYAAABg0/b8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XlcVPX+x/HXyI4iiCiIqCCuuADikuaGay6gaYI77pa4RWppuVFmmXk1xTWVNPebWak/lwyX0lRUMFdCRdwQdxRFYOb8/jDmOgIKiJ1BPs/Hgz/mzJlz3jNzZubD+S5HoyiKghBCCCGEoIjaAYQQQgghjIUURkIIIYQQ/5DCSAghhBDiH1IYCSGEEEL8QwojIYQQQoh/SGEkhBBCCPEPKYyEEEIIIf4hhZEQQgghxD+kMBJCCCGE+IcURkJV/fr1w9XVVe0YIgdcXV3p16+fKvvevXs3Go2G3bt3q7L//Hbq1CmmTJlCXFxcnrexf/9+pkyZwt27dzPd17x5c5o3b573gIVcfh/rcXFxaDQawsPD822b4tUxVTuAKNwmTpzIqFGj1I4hcuDHH3+kePHiasd4LZw6dYqpU6fSvHnzPP9jsH//fqZOnUq/fv2ws7MzuG/+/Pn5kFKIwkkKI6Eqd3d3tSOIHPL29lY7gsghDw8PtSO80KNHj7CyslI7hhCZSFOayLEpU6ag0Wg4efIkPXr0wNbWFkdHRwYMGMC9e/cM1g0LC6Np06aULl2aokWLUqtWLWbMmEFaWprBes82pXl7e9OkSZNM+9ZqtZQtW5YuXbrol6WmpvLZZ59RrVo1LCwsKFWqFP379+fGjRs5ej4HDx7Ez8+PkiVLYmlpibu7O6NHj84227Ovw9M0Gg3Dhw9n+fLlVK1aFSsrK+rWrcuff/6Joih89dVXuLm5UaxYMVq0aEFsbKzB448dO0bHjh0pXbo0FhYWODs706FDBy5fvgw8/1S8RqNhypQpmfIdP36cbt26YWtri729PSEhIaSnp3P27FneeustbGxscHV1ZcaMGTl6vZ5tXsho3lq9ejUffvghZcqUoVixYvj5+XH9+nXu37/PkCFDcHBwwMHBgf79+/PgwYMsX7dFixZRpUoVLCws8PDwYO3atTnKFBkZib+/P/b29lhaWuLt7c369esN1gkPD0ej0fDbb78xePBgSpYsSfHixenbty/JyckkJCQQEBCAnZ0dZcqUYcyYMZmO05wea66urnTs2JFt27ZRp04drKysqFatGsuWLTPI061bNwB8fX3RaDQG7+3OnTvp1KkTLi4uWFpaUqlSJYYOHcrNmzf125gyZQpjx44FwM3NTb+NjKbGrJrSbt++zbBhwyhbtizm5uZUrFiRjz/+mMePH2f5nqxcuZLq1atjbW2Np6cnmzdvztF7kpWM12Xjxo14e3tjaWnJ1KlTAUhJSWH8+PG4ublhbm5O2bJlCQ4OztRE+Oxx/vS2nz4uM97viIgI3nvvPRwcHChZsiRdunTh6tWrBo9NS0tj3LhxODk5YW1tTePGjTl06FCWzyEhIYGhQ4fi4uKCubk5bm5uTJ06lfT0dIP1rl69SkBAADY2Ntja2hIYGEhCQkKOXqesvluefk5PN71mvKY//vgjtWvXxtLSkooVK/LNN9/kaF8ie3LGSORa165dCQwMZODAgfz111+MHz8ewODL/9y5c/Ts2VP/ZRcdHc20adM4c+aMwXrP6t+/P6NGjeLvv/+mcuXK+uU7duzg6tWr9O/fHwCdTkenTp3Yt28f48aNo1GjRly8eJHJkyfTvHlzIiMjn/vf6Pbt2/Hz86N69erMmjWL8uXLExcXx44dO/L8umzevJljx47xxRdfoNFo+PDDD+nQoQNBQUGcP3+eefPmce/ePUJCQujatStRUVFoNBqSk5Np3bo1bm5uhIWF4ejoSEJCAhEREdy/fz/PeQICAujduzdDhw5l586d+sL0119/ZdiwYYwZM0Zf1FSqVMmg6MyNCRMm4OvrS3h4OHFxcYwZM4YePXpgamqKp6cna9as4dixY0yYMAEbG5tMX9w///wzERERhIaGUrRoUebPn69//DvvvJPtfiMiInjrrbdo0KABCxcuxNbWlrVr1xIYGMjDhw8z9REZNGgQXbp0Ye3atfo8GYVily5dGDJkCL/++itffvklzs7OhISEALk/1qKjo/nggw/46KOPcHR05Ntvv2XgwIFUqlSJpk2b0qFDBz7//HMmTJhAWFgYderUAf539vTcuXM0bNiQQYMGYWtrS1xcHLNmzaJx48b89ddfmJmZMWjQIG7fvs3cuXPZuHEjZcqUAbI/U5SSkoKvry/nzp1j6tSp1K5dm3379jF9+nSioqLYsmWLwfpbtmzh8OHDhIaGUqxYMWbMmMHbb7/N2bNnqVixYg6OisyOHj3K6dOn+eSTT3Bzc6No0aIoikLnzp3ZtWsX48ePp0mTJhw/fpzJkydz4MABDhw4gIWFRZ72N2jQIDp06MDq1au5dOkSY8eOpXfv3vz222/6dQYPHsyKFSsYM2YMrVu35sSJE3Tp0iXT5y4hIYH69etTpEgRJk2ahLu7OwcOHOCzzz4jLi6O5cuXA0/OgrVq1YqrV68yffp0qlSpwpYtWwgMDMzTc3iRqKgoRo8ezZQpU3BycmLVqlWMGjWK1NRUxowZ80r2WSgoQuTQ5MmTFUCZMWOGwfJhw4YplpaWik6ny/JxWq1WSUtLU1asWKGYmJgot2/f1t8XFBSkVKhQQX/75s2birm5uTJhwgSDbQQEBCiOjo5KWlqaoiiKsmbNGgVQfvjhB4P1Dh8+rADK/Pnzn/tc3N3dFXd3d+XRo0fZrvNstgwZr8PTAMXJyUl58OCBftmmTZsUQPHy8jJ4bWbPnq0AyvHjxxVFUZTIyEgFUDZt2pRtlgsXLiiAsnz58kz3AcrkyZMz5fv6668N1vPy8lIAZePGjfplaWlpSqlSpZQuXbpku+8MFSpUUIKCgvS3IyIiFEDx8/MzWG/06NEKoIwcOdJgeefOnRV7e/tM2a2srJSEhAT9svT0dKVatWpKpUqVMu0rIiJCv6xatWqKt7e3/pjI0LFjR6VMmTKKVqtVFEVRli9frgDKiBEjMuUBlFmzZhks9/LyUurUqaO/nZtjrUKFCoqlpaVy8eJF/bJHjx4p9vb2ytChQ/XLNmzYkOn5ZEWn0ylpaWnKxYsXFUD56aef9Pd99dVXCqBcuHAh0+OaNWumNGvWTH974cKFCqCsX7/eYL0vv/xSAZQdO3bolwGKo6OjkpSUpF+WkJCgFClSRJk+ffpz82anQoUKiomJiXL27FmD5du2bcvyO2XdunUKoCxevNgg19PH+dPbfvq4zHi/hw0bZrDejBkzFEC5du2aoiiKcvr0aQVQ3n//fYP1Vq1apQAG2xw6dKhSrFgxg/dVURRl5syZCqCcPHlSURRFWbBgQab3SVEUZfDgwdl+fp+W1XfL08/p6fe6QoUKikajUaKiogzWbd26tVK8eHElOTn5ufsS2ZOmNJFr/v7+Brdr165NSkoKiYmJ+mXHjh3D39+fkiVLYmJigpmZGX379kWr1RITE5PttkuWLImfnx/fffcdOp0OgDt37vDTTz/Rt29fTE2fnOTcvHkzdnZ2+Pn5kZ6erv/z8vLCycnpuaOXYmJiOHfuHAMHDsTS0vIlXglDvr6+FC1aVH+7evXqALRr187g9HjG8osXLwJQqVIlSpQowYcffsjChQs5depUvuTp2LGjwe3q1auj0Who166dfpmpqSmVKlXSZ8mv/QB06NAh0/Lbt29nak5r2bIljo6O+tsmJiYEBgYSGxurb0p8VmxsLGfOnKFXr14ABsdA+/btuXbtGmfPns1zzqdfj9wea15eXpQvX15/29LSkipVquT4NU5MTOTdd9+lXLlymJqaYmZmRoUKFQA4ffp0jrbxrN9++42iRYtmOgOXcVZt165dBst9fX2xsbHR33Z0dKR06dIvdZzUrl2bKlWqZMr1dI4M3bp1o2jRoply5UZW31Pwv89dREQEgP4YyhAQEKD/nsmwefNmfH19cXZ2NjgGMj5Le/bs0W/TxsYm07579uyZ5+fxPDVq1MDT0zPTvpKSkjh69Ogr2WdhIIWRyLWSJUsa3M441f3o0SMA4uPjadKkCVeuXGHOnDns27ePw4cPExYWZrBedgYMGMCVK1fYuXMnAGvWrOHx48cGX57Xr1/n7t27mJubY2ZmZvCXkJBg0B/jWRn9QlxcXHL3xF/A3t7e4La5uflzl6ekpABga2vLnj178PLyYsKECdSoUQNnZ2cmT56cqa/Ly+axtrbOVAyam5vrs+TXfp63/Nl9OTk5ZdpmxrJbt25luc/r168DMGbMmEzv/7BhwwAyHQO5yfl0xtwea89+PuDJZ+RFxz08abZr06YNGzduZNy4cezatYtDhw7x559/Ai/+7GTn1q1bODk5Zeq/Urp0aUxNTTO9zi/zHLKT0dz3bC5TU1NKlSplsFyj0eDk5JTt+58TL/qeytj2s8efqalppsdev36dX375JdP7X6NGDeB/x9qtW7cMivwMWR3j+SEvnx3xYtLHSOS7TZs2kZyczMaNG/X/6cKT9vCcaNu2Lc7Ozixfvpy2bduyfPlyGjRoYNB/IqND5bZt27LcxtP/7T4r40s4u7MRGSwtLTN1TIXMP7j5oVatWqxduxZFUTh+/Djh4eGEhoZiZWXFRx99pC9mns3zOnz5ZdUxNWNZVj/Q8OT9Bxg/fny2faOqVq2aL/le5ljLrRMnThAdHU14eDhBQUH65c921s+tkiVLcvDgQRRFMSiOEhMTSU9P17+er1JWnYpLlixJeno6N27cMCiOFEUhISGBevXq6ZdZWFhk+XnM62cg49hKSEigbNmy+uXp6emZtung4EDt2rWZNm1alttydnbWbzOrzts57Xz99Of86b5V2X3n5OWzI15MzhiJfJfxBfj0B1tRFJYsWZKjx5uYmNCnTx82bdrEvn37iIyMZMCAAQbrdOzYkVu3bqHVaqlbt26mv+f9KFapUgV3d3eWLVuW5RdtBldXVxITE/VnJ+DJ6KTt27fn6HnkhUajwdPTk//85z/Y2dnpT4c7OjpiaWnJ8ePHDdb/6aefXlmWf8uuXbsMXmOtVsu6detwd3fP9qxe1apVqVy5MtHR0Vm+/3Xr1s23guVljrXsPHv2IkNWnx2ARYsW5XgbWWnZsiUPHjxg06ZNBstXrFihv18NGfv9/vvvDZb/8MMPJCcnG+RydXXNdPz/9ttvmZpmcypj1N6qVasMlq9fvz7TSLOOHTty4sQJ3N3dszwGMgojX19f7t+/z88//2zw+NWrV+coU8Yo2Gef5y+//JLl+idPniQ6OjrTvmxsbPSd+kXuyRkjke9at26Nubk5PXr0YNy4caSkpLBgwQLu3LmT420MGDCAL7/8kp49e2JlZZVpVEf37t1ZtWoV7du3Z9SoUdSvXx8zMzMuX75MREQEnTp14u233852+2FhYfj5+fHGG2/w/vvvU758eeLj49m+fbv+izIwMJBJkybRvXt3xo4dS0pKCt988w1arTZvL0w2Nm/ezPz58+ncuTMVK1ZEURQ2btzI3bt3ad26NfDkB7N3794sW7YMd3d3PD09OXToUI6/cI2Zg4MDLVq0YOLEifpRaWfOnHnhkP1FixbRrl072rZtS79+/Shbtiy3b9/m9OnTHD16lA0bNuRLvpc91rJSs2ZNABYvXoyNjQ2Wlpa4ublRrVo13N3d+eijj1AUBXt7e3755Rd9s/LTatWqBcCcOXMICgrCzMyMqlWrZlkQ9u3bl7CwMIKCgoiLi6NWrVr8/vvvfP7557Rv355WrVrl4ZV5clw2a9YszzOSt27dmrZt2/Lhhx+SlJTEm2++qR+V5u3tTZ8+ffTr9unTh4kTJzJp0iSaNWvGqVOnmDdvHra2tnnad/Xq1enduzezZ8/GzMyMVq1aceLECWbOnJlpItPQ0FB27txJo0aNGDlyJFWrViUlJYW4uDi2bt3KwoULcXFxoW/fvvznP/+hb9++TJs2jcqVK7N169Yc/zPVvn177O3tGThwIKGhoZiamhIeHs6lS5eyXN/Z2Rl/f3+mTJlCmTJl+P7779m5cydffvkl1tbWeXpdhBRG4hWoVq0aP/zwA5988gldunShZMmS9OzZk5CQEIOOv89TpUoVGjVqxP79++nVq1emLz8TExN+/vln5syZw8qVK5k+fTqmpqa4uLjQrFkz/Y9Gdtq2bcvevXsJDQ1l5MiRpKSk4OLiYtBp0s3NjZ9++okJEybwzjvvUKZMGUJCQrhx44Z+Dpb8ULlyZezs7JgxYwZXr17F3NycqlWrZmpO+frrrwGYMWMGDx48oEWLFmzevLnAX1LF39+fGjVq8MknnxAfH4+7uzurVq164RBnX19fDh06xLRp0xg9ejR37tyhZMmSeHh4EBAQkG/5XvZYy4qbmxuzZ89mzpw5NG/eHK1Wy/Lly+nXrx+//PILo0aNYujQoZiamtKqVSt+/fVXgw7d8OSMx/jx4/nuu+9YsmQJOp2OiIiILC8FYmlpSUREBB9//DFfffUVN27coGzZsowZM4bJkyfn6XXJOFOTVd+hnNJoNGzatIkpU6awfPlypk2bhoODA3369OHzzz83OHM2duxYkpKSCA8PZ+bMmdSvX5/169fTqVOnPO9/6dKlODo6Eh4ezjfffIOXlxc//PAD3bt3N1ivTJkyREZG8umnn/LVV19x+fJlbGxscHNz46233qJEiRIAWFtb89tvvzFq1Cg++ugjNBoNbdq0Ye3atTRq1OiFeYoXL862bdsYPXo0vXv3xs7OjkGDBtGuXTsGDRqUaX0vLy/69+/P5MmT+fvvv3F2dmbWrFm8//77eX5NBGgURVHUDiGEKJw0Gg3BwcHMmzdP7Sgil7Zu3UrHjh2Jjo7OU3EoXo6rqys1a9Z8qYk3Rdakj5EQQohci4iIoHv37lIUideONKUJIYTIta+++krtCEK8EtKUJoQQQgjxD2lKE0IIIYT4hxRGQgghhBD/kMJICCGEEOIf0vn6BXQ6HVevXsXGxibLKe2FEEIIYXwUReH+/fs4OztTpEjOzwNJYfQCV69epVy5cmrHEEIIIUQeXLp0KVcXDZfC6AUypte/dOlSpmnihRBCCGGckpKSKFeuXK6vmyiFUTbCwsIICwvTXxerePHiUhgJIYQQBUxuu8HIPEYvkJSUhK2tLffu3ZPCSAghhCgg8vr7LaPShBBCCCH+IYWREEIIIcQ/pDASQgghhPiHFEZCCCGEEP+QwkgIIYQQ4h9SGAkhhBBC/EMKIyGEEEKIfxSKwmjz5s1UrVqVypUr8+2336odRwghhBBG6rWf+To9PZ2QkBAiIiIoXrw4derUoUuXLtjb26sdTQghhBBG5rU/Y3To0CFq1KhB2bJlsbGxoX379mzfvl3tWEIIIYQwQkZfGO3duxc/Pz+cnZ3RaDRs2rQp0zrz58/Hzc0NS0tLfHx82Ldvn/6+q1evUrZsWf1tFxcXrly58q9kF0IIIUTBYvSFUXJyMp6ensybNy/L+9etW8fo0aP5+OOPOXbsGE2aNKFdu3bEx8cDkNWl4J53QbnHjx+TlJRk8CeEEEKIwsHoC6N27drx2Wef0aVLlyzvnzVrFgMHDmTQoEFUr16d2bNnU65cORYsWABA2bJlDc4QXb58mTJlymS7v+nTp2Nra6v/K1euXP4+ISGEEEIYLaMvjJ4nNTWVI0eO0KZNG4Plbdq0Yf/+/QDUr1+fEydOcOXKFe7fv8/WrVtp27ZtttscP3489+7d0/9dunTplT4HIYQQojA5fPgwTZs25ebNm2pHyVKBLoxu3ryJVqvF0dHRYLmjoyMJCQkAmJqa8vXXX+Pr64u3tzdjx46lZMmS2W7TwsKC4sWLG/wJIYQQ4uUoisLs2bN588032bdvHxMmTFA7UpZei+H6z/YZUhTFYJm/vz/+/v652mZYWBhhYWFotdp8ySiEEEIUVrdv36Z///78/PPPAHTt2pUZM2aonCprBfqMkYODAyYmJvqzQxkSExMznUXKreDgYE6dOsXhw4dfajtCCCFEYXbgwAG8vb35+eefMTc3Z968eWzYsAE7Ozu1o2WpQBdG5ubm+Pj4sHPnToPlO3fupFGjRi+17bCwMDw8PKhXr95LbUcIIYQorH755ReaNm1KfHw87u7uHDhwgODg4OeODleb0TelPXjwgNjYWP3tCxcuEBUVhb29PeXLlyckJIQ+ffpQt25dGjZsyOLFi4mPj+fdd999qf0GBwcTHBxMUlIStra2L/s0hBBCiEKnadOmlCtXjvr167N48eIC0W/X6AujyMhIfH199bdDQkIACAoKIjw8nMDAQG7dukVoaCjXrl2jZs2abN26lQoVKqgVWQghhCi0Tp48iYeHBxqNBltbWw4ePIiDg4NRnyV6mkbJagZEYdD5OiYmhnv37hWISlcIIYRQg06n44svvmDSpEnMnTuX9957T9U8GS0+uf39LtB9jF4l6XwthBBC5ExiYiJvvfUWH3/8MVqtlqNHj6odKc+kMBJCCCFEnkVERODp6cnOnTuxsrJi2bJlLF68WO1YeSaFUTZkVJoQQgiRPa1Wy9SpU2nVqhUJCQl4eHhw+PBh+vfvX2D6E2VF+hi9QF7bKIUQQojX2bFjx6hbty46nY4BAwYwd+5crK2t1Y6ll9ffb6MflSaEEEII4+Pt7c2MGTMoXbo0ffr0UTtOvpHCSAghhBAvlJ6ezqeffkqPHj2oVq0aAB988IHKqfKf9DHKhvQxEkIIIZ64fPkyLVq0IDQ0lICAANLS0tSO9MpIH6MXkD5GQgghCrOtW7fSt29fbt26hY2NDYsXL6Z79+5qx3ohmcdICCGEEPkmLS2NcePG0aFDB27duoW3tzdHjhwpEEXRy5A+RkIIIYQwcPPmTfz9/Tlw4ADwZNLjmTNnYmlpqXKyV08Ko2w8fUkQIYQQojCxs7PDxMQEW1tbli5dSteuXdWO9K+RPkYvIH2MhBBCFAapqakAmJubA086XKemplKxYkU1Y+WZ9DESQgghRJ5cuHCBJk2a8NFHH+mXubi4FNii6GVIYSSEEEIUYhs3bsTb25tDhw7x3XffcePGDbUjqUoKIyGEEKIQevz4MSNGjKBr167cu3ePN954g6NHj1KqVCm1o6lKCiMhhBCikImNjaVRo0bMmzcPgHHjxrF3714qVKigcjL1yai0bMioNCGEEK+j1NRUfH19uXz5MiVLlmTFihW0b99e7VhGQ0alvYCMShNCCPG6Wb9+PfPmzWP16tW4uLioHeeVkFFpQgghhMjS2bNn+f333/W3AwIC2L17t+pFUUqaloiziapmeJYURkIIIcRr7Pvvv8fHx4euXbty7do1/fIiRdQtAS7eSuadhfsZEH6Y/bE3Vc3yNOljJIQQQryGHj58yIgRI1i2bBkA9evXR6PRqJzqiYiziYxcc4z7KemUsDZDa0S9eqQwEkIIIV4zp06dIiAggJMnT6LRaJg0aRITJ07ExMRE7WisPRTPhB//QqeAT4USzOvpTRlbK7Vj6UlhJIQQQrxGwsPDGTZsGI8ePcLJyYlVq1bRokULtWMBsGTveaZtPQ3AOz4ufP52LcxNjatXjxRGQgghxGskIiKCR48e0bp1a1auXImjo6PakQD4bn+cviga1tydsW2rGk3T3tOkMBJCCCEKOEVR9EVGWFgY9erVY9iwYap3sM6w7cQ1pvxyEoCRLSsT0rqKyomyZxyvmBEKCwvDw8ODevXqqR1FCCGEyJKiKCxZsoSAgAB0Oh0AxYoVY/jw4UZTFEVdusuotVEoCvRqUJ73W1VWO9JzyQSPLyATPAohhDBGSUlJDB06lLVr1wJPJm3s1q2byqkM3UlOpcM3+7h6L4WW1UqzqI8Ppib/TsGW199vaUoTQgghCphjx44REBBAbGwsJiYmTJ8+na5du6ody4CiKIzf+BdX76Xg5lCU2d29/rWi6GVIYSSEEEIUEIqisGDBAt5//31SU1MpX748a9eupWHDhmpHM6AoCsv+iGPbyQTMTDTM7eGNjaWZ2rFyRAojIYQQooAICQlh9uzZAPj7+7N8+XLs7e1VTvU/6VodW/66xoLd5ziTcB+AkS0qU7OsrcrJcs74z2kJIYQQAoAePXpQtGhRZs2axaZNm4ymKFIUhc3Hr9Jq1h5GrY3iTMJ9rM1NGNq0Iu82d1c7Xq7IGSMhhBDCSCmKwokTJ6hVqxbw5LIecXFxODg4qJzsf05cucfEn05wLP4uACWszRjY2I0+DV2xtSoYzWdPk8JICCGEMEK3b99mwIABbNu2jT///BMvLy8AoymKHqVqmf1rDEv2nUengLW5CUOaVmRQk4oUsyi45UXBTS6EEEK8pv78808CAwOJj4/H3NyckydP6gsjY3Diyj1GrjnG+ZvJAPh5OvNJh+o4FrdUOdnLKxR9jN5++21KlCjBO++8o3YUIYQQIls6nY6ZM2fSpEkT4uPjcXd358CBA/Tq1UvtaHprDsXTZf5+zt9Mxqm4JUuD6jK3h/drURRBISmMRo4cyYoVK9SOIYQQQmTr5s2b+Pv7M3bsWNLT0wkMDOTo0aPUqVNH7WgAaHUKob+cYvzGv0jV6mhV3ZFto5vQsrpxXIstvxSKwsjX1xcbGxu1YwghhBDZWrlyJVu2bMHCwoJFixaxZs0ao7niQmq6jpFrjrHsjwsAjGlThSV9fbCzNlc5Wf5TvTDau3cvfn5+ODs7o9Fo2LRpU6Z15s+fj5ubG5aWlvj4+LBv3z4VkgohhBCvzsiRIxk6dCgHDx5kyJAhRnPlea1OIWR9FFv+uoaZiYY53b0Y3qKy0eTLb6oXRsnJyXh6ejJv3rws71+3bh2jR4/m448/5tixYzRp0oR27doRHx+vX8fHx4eaNWtm+rt69Wqu8zx+/JikpCSDPyGEECK/JSYmMmLECB49egSAiYkJCxcuxNPTU+Vk/6MoClN+Psnm40+KosV969LJq6zasV4p1UeltWvXjnbt2mV7/6xZsxg4cCBV1X9WAAAgAElEQVSDBg0CYPbs2Wzfvp0FCxYwffp0AI4cOZJveaZPn87UqVPzbXtCCCHEs3bv3k3Pnj25du0aiqJke3JAbXN2/c3KPy+i0cCsAC98q5ZWO9Irp/oZo+dJTU3lyJEjtGnTxmB5mzZt2L9//yvZ5/jx47l3757+79KlS69kP0IIIQofrVbL1KlTadmyJdeuXcPDw4P33ntP7VhZ+r+/rjH7178BCPWvgZ+ns8qJ/h2qnzF6nps3b6LVanF0NOzx7ujoSEJCQo6307ZtW44ePUpycjIuLi78+OOP1KtXL8t1LSwssLCweKncQgghxLMSEhLo1asXv/32GwADBgxg7ty5WFtbq5wss0u3HzL2v8cBGPTPLNaFhVEXRhme7eClKEquOn1t37491/sMCwsjLCwMrVab68cKIYQQTztw4ACdO3cmMTGRokWLsmDBAvr06aN2rCwlpaQxel0UDx6nU7dCCT5qV03tSP8qoy6MHBwcMDExyXR2KDExMdNZpPwWHBxMcHAwSUlJ2NoWnKsCCyGEMD4uLi6kp6dTq1Yt1q9fT7VqxldsxN1MJnx/HBsiL5GcqsXa3IRZAV6Ymhh1r5t8Z9SFkbm5OT4+PuzcuZO3335bv3znzp106tTple5bzhgJIYR4Gffv39fPoVeuXDl+/fVXqlWrhpWVlcrJDF29+4jZv8bw3yOX0SlPllUqXYyJHT0oX9L4mvleNdULowcPHhAbG6u/feHCBaKiorC3t6d8+fKEhITQp08f6tatS8OGDVm8eDHx8fG8++67rzSXnDESQgiRV9u2baNv3758++23+Pv7A+Dt7a1yKkP3HqYxf08s4X/E8ThdB4Bv1VIMaOxG40oOr+08RS+iemEUGRmJr6+v/nZISAgAQUFBhIeHExgYyK1btwgNDeXatWvUrFmTrVu3UqFCBbUiCyGEEFlKS0tj4sSJfPnllwB88803+Pn5GVWRodMprD4Uz1fbz3LvURoA9d3s+ahdNeqUL6FyOvVpFEVR1A5hjJ5uSouJieHevXtGMzW7EEII43Pp0iW6d++un04mODiYmTNnYmlpPBdXvXznIWM3HOfA+VsAVHW04cN2VfGtWtqoirf8kNHik9vfbymMXiCvL6wQQojC45dffqFfv37cvn0bW1tbli5dSteuXdWOZWDX6euMXhfF/ZR0rMxMGPdWVfo2dMWkyOtVEGXI6++36k1pQgghREF2/PhxfT+ievXqsXbtWipWrKhyKkMrD8Qx+eeT6BTwLm/HfwK8cHUoqnYsoySFUTZkVJoQQoicqF27Nu+++y6WlpZ8+eWXmJsbzxXndTqFL7edYdHe8wAE1i3HZ2/XxKyQDcHPDWlKewFpShNCCPGsn376iQYNGuDk5ATkfuLhf8PjdC0frI9m8/FrAIxpU4Vg30pGl/NVyevvt5SMQgghRA49fvyYESNG0LlzZ3r16qVvVTC2YiNdq2PkmmNsPn4NMxMN/wn0ZHiLykaX0xhJU5oQQgiRA7GxsQQGBnL06FEA6tati06nw8TEROVkhhRFYeJPJ9l+8jrmpkVYGlSXJpVLqR2rwJDCKBvSx0gIIUSG9evXM2jQIO7fv0/JkiVZsWIF7du3VztWlsL3x7HmUDxFNPBNdy8pinJJ+hi9gPQxEkKIwislJYX333+fhQsXAtC4cWPWrFmDi4uLysmyFnXpLu8s2E+6TuGTDtUZ1MS4Rsf9m6SPkRBCCJHP0tPTiYiIQKPRMGHCBCIiIoy2KLqTnMrINcdI1yl0qF2GgY3d1I5UIElTmhBCCPGMjFFmxYoVY/369SQkJNCmTRu1Y2Xp6t1HfHcgjnWHL3H3YRpl7az4/O1a0tE6j6Qwyob0MRJCiMLn4cOHjBw5Eg8PD/21O2vXrk3t2rVVTpZZzPX7zI+I5Zfj19DqnvSKqVDSmnk96mBrZaZyuoJL+hi9gPQxEkKIwuHUqVMEBARw8uRJLCwsuHDhAmXKlFE7Vibxtx7y9c6z/Bx9lYxf8Dcq2jPgTTdaVnd8bS/xkVtySRAhhBAij8LDwwkODubhw4c4OTmxatUqoyuKHqVqCYuIZfHe86RqdQC8VcOJYN9K1HKxVTnd60MKIyGEEIXWgwcPCA4OZsWKFQC0bt2alStX4ujoqHIyQ3+ev8W4/x4n/vZDABpXcuCjdtWoWVYKovwmhZEQQohCKS0tjTfffJPjx49TpEgRQkNDGT9+PEWKGM+A7dR0HV9tP8OSfRcAKGNryWQ/D9rWcJLO1a+IFEZCCCEKJTMzM4KCgvj6669Zs2YNTZs2VTuSgcSkFN79/ghH4+8C0KN+OSa0r46NpXSsfpWk83U2nh6VFhMTI52vhRDiNXD//n0SExNxd3cHngzLv3v3LiVKlFA5maHT15Lov/wwCUkpFLc0ZWY3T9rUcFI7VoGS187XUhi9gIxKE0KI10NUVBQBAQEUKVKEyMhIihUrpnakLB25eJt+yw9zPyWdSqWL8W3furg6FFU7VoEjM18LIYQQWVAUhQULFvDGG2/w999/8/DhQ+Lj49WOlaWj8Xfos/QQ91PSqedagh/eayRF0b9MCiMhhBCvrXv37hEYGMiwYcN4/Pgxfn5+REVF4eHhoXa0TGKu36f/8sM8TNXyZqWSfDegvkzUqAIpjIQQQryWIiMjqVOnDhs2bMDMzIxZs2bx008/YW9vr3a0TBLvp9B36SHuPUrDu7wdS/rWxdpcxkepQV51IYQQr6XJkydz/vx5XF1dWbduHfXr11c7UpbStDqCVx0lISkF91JFWd6vnhRFKpIzRkIIIV5LS5cuZdCgQRw7dsxoiyKA2b/GcDjuDjYWpnwbVA87a3O1IxVqUhgJIYR4Lfz5559MnTpVf9vJyYklS5ZgZ2enYqrsxSbe54P10czffQ6AL7rWxk06WqtOztUJIYQo0HQ6HbNmzWL8+PGkp6fj6elJ586d1Y6VJUVR2H/uFov3nmdPzA398n6NXOlQ27iuzVZYSWGUjacneBRCCGGcbt26RVBQEFu2bAEgMDCQFi1aqJwqa/v+vsHXO2KIuvRkJmuNBlpVdyTYtxJe5YzzrFZhJBM8voBM8CiEEMbp999/p0ePHly+fBkLCwvmzJnDkCFDjO4aYmcSkvhs82l+j70JgKVZEQLrlmNAYzcqlJSms1clr7/fcsZICCFEgTN37lzef/99tFotVapUYf369Xh6eqody0BKmpbZv/7Nkn3n0eoUzEw09H6jAsOaV6KUjYXa8UQ2pDASQghR4Li6uqLVaunduzcLFiwwust7HL98lw/WR/N34gMA2tV0YkL76pSzt1Y5mXgRKYyEEEIUCElJSfomET8/Pw4ePEi9evWMqulMURTm7z7HrJ0xaHUKDsXM+fztWnIB2AJEhusLIYQwalqtlk8//ZRKlSpx6dIl/fL69esbVVGUmq5j+JpjfLX9LFqdQsfaZdjxfjMpigoYKYyEEEIYrYSEBNq2bcukSZO4ceMGa9asUTtSlh6naxm26ghbjl/DzETD9C61mNezDvZFZbLGgkaa0oQQQhilXbt20atXL65fv461tTULFy6kT58+asfK5HG6lve+P8pvZxKxMC3Ct0F1aVK5lNqxRB7JGSMhhBBGRavVMmnSJFq3bs3169epVasWR44cMcqiKCVNy7srj/DbmUQszYqwrF89KYoKuNe+MLp06RLNmzfHw8OD2rVrs2HDBrUjCSGEeI45c+bw6aefoigKQ4YM4eDBg1SrVk3tWJk8TtcydOURIs7eeFIUBdXjzUoOascSL+m1n+Dx2rVrXL9+HS8vLxITE6lTpw5nz56laNGcTaolEzwKIcS/69GjR7Ru3Zrhw4fTvXt3teNkSVEUxv33OBuOXNafKWrkLkWRMZEJHrNRpkwZypR5cv2Z0qVLY29vz+3bt3NcGAkhhHi10tLSCA8PZ8CAAZiYmGBlZcW+ffuMasTZs9ZHXmLDkcsU0cCiPnWlKHqNqN6UtnfvXvz8/HB2dkaj0bBp06ZM68yfPx83NzcsLS3x8fFh3759edpXZGQkOp2OcuXKvWxsIYQQ+SCju8OQIUOYPn26frmxFkWp6TrWHIpn4k8nARjTtirNqkifoteJ6meMkpOT8fT0pH///nTt2jXT/evWrWP06NHMnz+fN998k0WLFtGuXTtOnTpF+fLlAfDx8eHx48eZHrtjxw6cnZ2BJxca7Nu3L99+++1z8zx+/NhgW0lJSS/z9IQQQmRj8+bNBAUFcfv2bYoXL26U/YgyPErVsu5wPIv3nufqvRQAGldy4N2m7ionE/nNqPoYaTQafvzxRzp37qxf1qBBA+rUqcOCBQv0y6pXr07nzp0N/rt4nsePH9O6dWsGDx78wlENU6ZMYerUqZmWSx8jIYTIH6mpqYwfP55Zs2YBULduXdatW0fFihVVTpZZUkoay3+PI3z/Be48TAOgtI0FQ5pWpFeDCliZm6icUGTntexjlJqaypEjR/joo48Mlrdp04b9+/fnaBuKotCvXz9atGiRo6Ge48ePJyQkRH87KSlJmt6EECKfXLx4kcDAQA4ePAjA6NGj+eKLL7CwMK6Lqj5O1xL+Rxzzd5/j3qMnBVE5eyuGNHWnm48LlmZSEL2ujLowunnzJlqtFkdHR4Pljo6OJCQk5Ggbf/zxB+vWraN27dr6/ksrV66kVq1aWa5vYWFhdB9QIYR4Xdy9e5eoqCjs7OwIDw+nU6dOakfKJOJsIlN/PkncrYcAVCpdjJEtK9O+phOmJqp3zRWvmFEXRhme7YSnKEqOO+Y1btwYnU6X632GhYURFhaGVqvN9WOFEEL8z9Pf2Z6enqxZswZvb29cXV3VDfaMR6lapv5ykrWHn1yPrZSNBePaVqVLHRdMihhnZ3CR/4y69HVwcMDExCTT2aHExMRMZ5HyW3BwMKdOneLw4cOvdD9CCPE6O3fuHI0bNzb4Ln377beNrij6+/p9OoX9ztrDl9BoYFBjNyLGNKdb3XJSFBUyRl0YmZub4+Pjw86dOw2W79y5k0aNGr3SfYeFheHh4UG9evVe6X6EEOJ1tWHDBurUqcP+/fsZNmwYRjTWR09RFNZHXsJv3u/EXH9AKRsLVg1swCcdPShmUSAaVUQ+U/1df/DgAbGxsfrbFy5cICoqCnt7e8qXL09ISAh9+vShbt26NGzYkMWLFxMfH8+77777SnMFBwcTHBys79UuhBAiZ1JSUggJCdGPJm7cuDFr1qwxurmJ0rU6Jv50kjWH4gFoUtmBWQFelLKRfqaFmeqFUWRkJL6+vvrbGSPCgoKCCA8PJzAwkFu3bhEaGsq1a9eoWbMmW7dupUKFCmpFFkIIkY2YmBgCAgKIjo4Gnoz0DQ0NxdRU9Z8bA2laHaPXRbHl+DWKaOCDNlV5r5k7RaTZrNAzqnmMjMnTna9jYmJkHiMhhHiB06dPU79+fR48eECpUqVYuXIlbdu2VTtWJulaHcNXH2PbyQTMTDTM7VGHt2o6qR1L5LO8zmMkhdELyEVkhRAiZ3Q6Hf7+/iQnJ7Nq1Sr9lQeMiaIojP3vcf575DLmpkVY1NsH32ql1Y4lXoHXcoJHIYQQxu3MmTO4uLhQrFgxihQpwpo1a7C2tsbExDgnQAyLiOW/Ry5jUkRDWM86UhSJTIx6VJqaZFSaEEI8X3h4OD4+PgYjzmxsbIy2KNp9NpGvd8YA8GmnmrT2eLXTvoiCSQqjbMg8RkIIkbXk5GSCgoLo378/Dx8+5OrVq6SkpKgd67muJ6Xw/rooFAV61C9Pzwbl1Y4kjJQ0pQkhhMixEydO0K1bN86cOUORIkWYOnUq48ePN9qzRHeSU1lzOJ6l+55cBLaGc3Gm+HuoHUsYMSmMhBBCvJCiKCxdupQRI0aQkpKCs7Mzq1evplmzZmpHy1Js4gOW/XGBjUcvk5L25LJQTsUt+aaHNxamxlnECeMghVE25FppQgjxP3fv3uXjjz8mJSWFt956ixUrVlCqVCm1Y2USdzOZWTtj+Dn6qn6ZR5niDGzsRkfPMlIUiReS4fovIMP1hRDiiZ07d3L06FHGjh1LkSLG1UX1TnIqc3b9zfd/XiRd9+RnrbWHIwMbu9HAzd7oZt0Wr57MY/SKSGEkhCiMFEVh4cKFlCpVinfeeUftONlSFIUfjl5h2pZT3HmYBkDzqqUY27YqNZzlck6FmcxjJIQQIl/cu3ePwYMHs2HDBmxsbHjjjTdwcXFRO1YmifdT+OiHv/jtTCIAVR1tmOTnwZuVHFROJgoyKYyyIX2MhBCFUWRkJIGBgZw/fx5TU1OmTJlC2bJl1Y6Vyf5zNxmx+hi3klMxNy3C6FaVGdykImYmxtXEJwoeaUp7AWlKE0IUBoqiMHfuXMaMGUNaWhoVKlRg3bp1NGjQQO1omaw4EMfUX06h1SlUc7JhTndvqjrZqB1LGBlpShNCCJEnWq2WgIAANm7cCMDbb7/N0qVLKVGihMrJDOl0Cl9sO8PivecB6OzlzBdda2NpJiPNRP6RwkgIIQo5ExMTypcvj7m5OTNnzmT48OFGN4pLURQm/3ySlX9eBGBs26oMa+5udDlFwSdNaS8gTWlCiNeRTqfj/v372No+GbmVmprKmTNnqF27tsrJsvbF/51h4Z5zaDTwZdfaBNQtp3YkYeTy+vstvdSEEKKQuXXrFv7+/nTo0IG0tCdD3M3NzY22KFp9MJ6Fe84B8PnbtaQoEq+UFEbZCAsLw8PDg3r16qkdRQgh8s0ff/yBl5cXW7ZsITIykiNHjqgd6bmOxd9h8s8nAPigdRV61JeLv4pXS5rSXkCa0oQQrwOdTseMGTP45JNP0Gq1VK5cmfXr1+Pl5aV2tGzdfPCYjt/8TkJSCm/VcGJB7zrSp0jkmIxKE0IIkaUbN27Qt29ftm3bBkDPnj1ZuHAhNjbGO8T93I0HjN0QTUJSCu6livJVt9pSFIl/Ra6a0tLT05k6dSqXLl16VXmEEELks4yiyMrKim+//Zbvv//eKIsiRVHYfTaRwEUHaPn1Ho7G38XctAgLevtgY2mmdjxRSOS6Ka1YsWKcOHECV1fXVxTJuEhTmhCioDt9+jR9+/Zl+fLl1KxZU+04mWh1CttPJhAWEcvJq0kAFNGAb9XSvNfcnbqu9ionFAXRv9aU1qpVK3bv3k2/fv1y+1AhhBD/goSEBHbv3k337t0BqF69OocOHTK6pihFUfjx2BXm/RbL+ZvJAFibm9CrQXkGNHajjK2VyglFYZTrwqhdu3aMHz+eEydO4OPjQ9GiRQ3u9/f3z7dwQgghcmfXrl306tWLGzduULZsWZo0aQJgdEVRbOJ9Jvx4gkMXbgNga2VGv0au9GvkSomi5iqnE4VZrguj9957D4BZs2Zluk+j0chFV4UQQgVarZapU6fy2WefoSgKNWvWxMHB+K4yn5KmZX5ELAv2nCNNq2BlZsLwFpUIauRKMQsZDyTUl+ujUKfTvYocQggh8ujq1av07NmTPXv2ADB48GDmzJmDlZVxNUXF3UxmyMpIYq4/AKBFtdKEdqqBSwlrlZMJ8T9SnmcjLCyMsLAwOQMmhDBqO3bsoHfv3ty4cYNixYqxaNEievbsqXasTP6IvcmwVUe59yiNUjYWhPrX4K2aTkbXxCdEnma+3rNnD35+flSqVInKlSvj7+/Pvn378jubqoKDgzl16hSHDx9WO4oQQmQrNjaWGzdu4OnpyZEjR4yyKFpxII6+yw5x71EaXuXs2DKiMe1qlZGiSBilXBdG33//Pa1atcLa2pqRI0cyfPhwrKysaNmyJatXr34VGYUQQjzl6VlW3nvvPZYsWcKff/5JlSpVVEyVtdm/xjDpp5NodQpdvMuydsgblC5uqXYsIbKV63mMqlevzpAhQ3j//fcNls+aNYslS5Zw+vTpfA2oNpnHSAhhTDZv3kxoaCg7duzAzs5O7TjPtWD3Ob7cdgZ4cp2z4S0qyVki8a/J6+93rs8YnT9/Hj8/v0zL/f39uXDhQm43J4QQIgdSU1MZM2YMfn5+HD58mBkzZqgd6bl+PHZZXxSNb1eNES0rS1EkCoRcF0blypVj165dmZbv2rWLcuXK5UsoIYQQ/xMXF0fTpk35+uuvARg1ahSTJ09WOVX2Dpy7xbj/HgdgcBM3hjZzVzmREDmX61FpH3zwASNHjiQqKopGjRqh0Wj4/fffCQ8PZ86cOa8ioxBCFFqbNm2if//+3L17Fzs7O5YvX07nzp3VjpWthHspDF99lDStQsfaZRjfrrrakYTIlTxN8Ojk5MTXX3/N+vXrgSf9jtatW0enTp3yPaAQQhRWS5cuZdCgQQA0aNCAtWvXGvV1KlPTdYxae4xbyal4lCnOzG6eFCkizWeiYMlV52utVsvvv/9O7dq1KVGixKvMZTSk87UQQi03b96kTp06BAQE8Pnnn2NubpyXykhKSWP94Ut8/+dF4m49xNrchM0jGlOxVDG1o4lC7F+5iKyJiQlt27bl9OnTBaYwun//Pi1atCAtLQ2tVsvIkSMZPHiw2rGEECJLhw4don79+gA4ODjw119/YWtrq3KqrCUmpbBo73nWHIrnYeqTyXBtrcz4poe3FEWiwMp1U1qtWrU4f/48bm5uryJPvrO2tmbPnj1YW1vz8OFDatasSZcuXShZsqTa0YQQQi8lJYWQkBAWLFhAeHg4QUFBAEZZFN188JiwiFhWH4zncfqTy0RVcSxGUCNXOnmVlWueiQIt10fvtGnTGDNmDJ9++ik+Pj4ULVrU4H5ja24yMTHB2vrJdXhSUlLQarXkcuomIYR4pWJiYggICCA6OhqAixcvqpwoaylpWr7dd54Fu8+R/M8Zojrl7RjVqgpNKzvIcHzxWsj1cP233nqL6Oho/P39cXFxoUSJEpQoUQI7O7s8Na/t3bsXPz8/nJ2d0Wg0bNq0KdM68+fPx83NDUtLS3x8fHJ9+ZG7d+/i6emJi4sL48aNM8orTgshCqfVq1fj4+NDdHQ0Dg4ObNu2jUmTJqkdK5Pf/77JW7P3MnNHDMmpWmq72LJyYH1+eK8RzaqUkqJIvDZyfcYoIiIiXwMkJyfj6elJ//796dq1a6b7161bx+jRo5k/fz5vvvkmixYtol27dpw6dYry5csD4OPjw+PHjzM9dseOHTg7O2NnZ0d0dDTXr1+nS5cuvPPOOzg6OmaZ5/HjxwbbSkpKyqdnKoQQ//Pw4UNGjRrFt99+C0CzZs1YvXo1zs7OKiczlJKm5dPNp1h1MB4Ax+IWTGhfHb/azjLiTLyWcjUqLT09nWnTpjFgwIBXMpmjRqPhxx9/NJijo0GDBtSpU4cFCxbol1WvXp3OnTszffr0XO/jvffeo0WLFnTr1i3L+6dMmcLUqVMzLZdRaUKI/LRnzx58fX0B+OSTT5g0aRKmpsbVN+fcjQcErzrKmYT7aDQQ1NCVD9pUwcbSTO1oQrzQv3JJEFNTU2bOnIlWq811wLxITU3lyJEjtGnTxmB5mzZt2L9/f462cf36df1Zn6SkJPbu3UvVqlWzXX/8+PHcu3dP/3fp0qW8PwEhhMhGs2bNmDFjBjt27CA0NNToiqI9MTfwn/s7ZxLuU7KoOd/1r88U/xpSFInXXq77GLVs2ZLdu3e/giiZ3bx5E61Wm6nZy9HRkYSEhBxt4/LlyzRt2hRPT08aN27M8OHDqV27drbrW1hYULx4cYM/IYR4WcnJyQwbNozz58/rl40ZM4ZWrVqpmCpru88mMnhFJMmpWhq42bN1VBOaVimldiwh/hW5/helXbt2jB8/nhMnTmQ5Ks3f3z/fwmV4tlOfoig57ujn4+NDVFRUrvcZFhZGWFjYv3Z2TAjx+jpx4gQBAQGcPn2ao0ePcuDAAaPtrLz7bCJDVh4hNV1H2xqOzO1RB3PTXP8PLUSBladLggDMmjUr030ajSZfCwkHBwdMTEwynR1KTEzMtvN0fgkODiY4OFjfRimEELmlKApLly5lxIgRpKSk4OzszJdffilFkRBGLNdHvE6ny/Yvv8+umJub4+Pjw86dOw2W79y5k0aNGuXrvp4VFhaGh4cH9erVe6X7EUK8nu7fv0/v3r0ZPHgwKSkptG3blqioKJo1a6Z2tCydvHqPoVIUCZH7M0ZPS0lJwdLS8qUCPHjwgNjYWP3tCxcuEBUVhb29PeXLlyckJIQ+ffpQt25dGjZsyOLFi4mPj+fdd999qf2+iJwxEkLk1cWLF2nTpg0xMTGYmJjw2WefMW7cOIoUMc5CIykljWGrjvI4XUezKqWkKBKFWq4LI61Wy+eff87ChQu5fv06MTExVKxYkYkTJ+Lq6srAgQNztb3IyEj9kFWAkJAQAIKCgggPDycwMJBbt24RGhrKtWvXqFmzJlu3bqVChQq5jS6EEP8KJycnbGxscHFxYe3atbz55ptqR8qWoiiM3RDNxVsPKWtnxZzuXlIUiUItV/MYAYSGhvLdd98RGhrK4MGDOXHiBBUrVmT9+vX85z//4cCBA68q67/q6c7XMTExMo+REOK5kpKSsLa21g+7j4+Pp2jRokZ9Xcardx8x759rnpmZaPjvu43wLGendiwh8kVe5zHKdWFUqVIlFi1aRMuWLbGxsSE6OpqKFSty5swZGjZsyJ07d3Id3pjl9YUVQhQeR44cISAggO7duzNt2jS14zyXoijs+/smS/ad54/Ym+j++QX4rHNNer8hZ+LF6+NfmeAR4MqVK1SqVCnTcp1OR1paWm43J4QQBZaiKMydO5dGjRpx/vx51qxZQ3JystqxsqTTKWw/mUCnsD/ou+wQ+/5+UhS9UdGe5f3qSVEkxD9y3ceoRo0a7Nu3L1Mfnw0bNuDt7Z1vwdQm8xgJIZ7nzp07DBw4kB9//BGAzp07s2zZskxzuxmDiDOJfPF/Zzh7/T4AlmZF6FG/PP0buVG+pLXK6YQwLrkujCZPnkyfPn24cjrKdxQAACAASURBVOUKOp2OjRs3cvbsWVasWMHmzZtfRUZVyKg0IQqe2NhYKleuzObNm5k1axYHDhygXLlyrFixggYNGuTbfg4ePEj37t2Ji4vDzMyMmTNnMmLECKObn+jK3UdM/ukEv55OBKCYhSl9G1ZgQGM3HIpZqJxOCOOU6z5GANu3b+fzzz/nyJEj6HQ66tSpw6RJkzJd0+x1IH2MhCg4fvjhB7p160bz5s2ZOHEiLi4uDBs2jPT0dCIiIvJlH0lJSVSoUIG7d+9SsWJF1q1bR926dfNl2/lpQ+Qlpvx8kuRULaZFNPR/05XhvpWxtZZrnYnCIa+/33max6ht27a0bds2Lw8VQogcy+ryP4qikJaWhrm5eab1o6OjsbW1Zd26dZQq9eTaXp07d2bBggX5lql48eLMnj2bLVu2sGTJEqM7o/wwNZ1PNp1g49ErAPhUKMEXXWpR2dFG5WRCFAwyWUU2ZOZrIdRx6dIlevXqhYODA1ZWVrRu3Zply5Zx8uRJtm7dStu2bYmJicnysdHR0fj5+emLIoDz589nOWAkN/744w/279+vvx0UFMS6deuMrii6fOchXRccYOPRKxTRwJg2VVg/tKEURULkghRG2QgODubUqVMcPnxY7ShCFCrLly+nZs2aHDp0iMjISFq2bMncuXOpV68eH374If7+/nh4eGT52OjoaBo2bGiw7NixY3h5eeUpi06n44svvqBZs2YEBARw8+ZN/X3G1p/oxJV7vD1/P6evJeFQzJzVg9/4f/buPC6q6v/j+GtAFgEBccEVtzRFFGTLDQszFXNLU9JC1Fwjly8tbn2tzKTV9Fe4oClqmlimLVpK5ZaaAoIb7qKgsggqq7LM3N8fFt8IUEDgDvB5Ph48cu7M3Hmf28B85p5zz+HV3m0xNNCvnELou0daEkQIIcrb3Llz8ydJBHBwcGD27NkPfV5qaipXr14tdHVsVFQU06dPL3WOmzdvMmbMGH755RcAevXqhYmJfg5YPnU9lVGr/iT9Xh7tG9VhzVg3mljXVjuWEFWSFEZCCL3yz6KoNI4fP46hoSGOjo75265evcrt27dLfcZo//79jBo1ihs3bmBqasrnn3/Oyy+/rHdniQAuJmUwZs1R0u/l4dayLl+OdcPSVAZYC1FWZe5Ky8nJ4dy5c+Tl5ZVnHr0hY4yEqFqOHz9O+/btqV37f2dKIiMjsba2pmXLliXah06nY+HChXh6enLjxg3at2/P0aNHmTBhgl4WRdduZ+Hz5RFuZebQqakVa6QoEuKRlfpy/aysLKZNm8a6desA8heRnT59Ok2aNCnRKe+qRC7XF6LmUBSFkSNH8u233+Lr60tgYKBeTtgI968+G7bsEGcT0mnb0IKQyd2wMS98pZ4QNVWlLQkyZ84cjh8/zt69ezE1Nc3f3qdPH0JCQkq7OyGEUN3f3w81Gg2rV6/m66+/Jjg4WG+LIkVReP2b45xNSKe+hTEbXn5CiiIhykmpC6Pt27fzxRdf0LNnzwKnlu3t7bl06VK5hhNCiIqk1Wp5++23GTVqVH5xZGVlxQsvvKBysgdbf/gqO08mYGSoYcVLLjSyMn34k4QQJVLqUY43b96kYcOGhbZnZmbqZR+8EEIU5caNG7z44ovs3bsXgEmTJtG7d291Qz1AZnYePx6/wddhcRyPuwPArP7tcW1po3IyIaqXUhdGbm5u7Nixg2nTpgH/m8tj1apVheYPEUIIfbRr1y58fHy4efMm5ubmrFy5Um+LotiULL784zLfHbtOevb9i11qGWh4qWsLxvdopXI6IaqfUhdGAQEB9O/fn+joaPLy8li6dCmnT5/m8OHD7Nu3ryIyqiIwMJDAwEC0Wq3aUYQQ5SQvL4/58+cTEBAAgKOjI1u2bKFdu3YqJyssJSObL/Zc5Ks/r5Krvd/N17KeGaPc7Rjm3IwGdfRzTiUhqroyLSJ78uRJPvnkkwKLyM6aNYtOnTpVREZVyVVpQlQfL7zwQv5FIlOnTmXx4sUFLiLRBxnZeQTuuUjwwSvczb3/xcyjbX0m9WpNjzb1MZCZrIUokbJ+fpepMKpJpDASovo4cOAAQ4YMYcWKFYwcOVLtOIVEXL3NjM2RXLt9F4DOzax4s197eratr3IyIaqesn5+l7orzdPTk5deeonnn39e7xZQFEKIf8rNzSUqKip/olYPDw+uXr1KnTr6taiqVqewYt8lFoeeR6tTaFa3NvMH2vOMva1c1CJEJSv15fqdOnXirbfeolGjRgwfPpzt27eTk5NTEdmEEKLMrl69ioeHB56enpw9ezZ/u74VRYlp9/D58ggf7zqHVqcw2LEJO2d40LdjIymKhFBBqQuj//u//+P69et8//331KlTB19fXxo1asSkSZOq1eBrIUTVtX37dpycnDhy5AhGRkbExsaqHalIp66nMujzPzh0KYXaRoZ8/Hxnlr7gJMt6CKGiRx5jdO/ePX788Ufef/99Tp48We2u4pIxRkJUHTk5Obz55pssXboUAHd3d0JCQkq8VlplCr9yizFrjpKVo+Vx2zose8mZNg0s1I4lRLVRaWOM/ikhIYHNmzfz1VdfceLECVlwVQihmsuXL+Pt7U14eDgAr732GosWLcLYWP+WyriYlM7L68LJytHSvU09Vvi4yFkiIfREqQujtLQ0tm7dyqZNm9i7dy+tW7dm9OjRbN68mccee6wiMgohxEOtX7+e8PBwbGxsCA4OZtCgQWpHKlJS2j1814SRejeXLnbWfOnrRm1jQ7VjCSH+UurCyNbWlrp16zJy5EgWLVpUbc8SyQSPQlQtb731Frdv3+a1117Dzs5O7ThFuperZcL6cK7fuUur+uZSFAmhh0o9xmj37t306dMHA4NSj9uukmSMkRD66cKFCwQEBLBixQq97C77N0VReG3Lcb6LvE5dMyO2+/WgRT1ztWMJUW1V2hijvn37lvYpQghRrr7++msmTZpERkYGjRs35v3331c70kMF7b/Md5HXqWWg4fNRzlIUCaGnSlQYOTs789tvv1G3bl26dOnywLk1jh07Vm7hhBDin+7evcuMGTNYtWoVAL169eKVV15ROVXxFEXhSMwtgg9e4ZfTCQDMH2QvM1kLocdKVBgNGTIEExOT/H/LpGNCiMp29uxZRowYwalTp9BoNMybN4+3336bWrUe6eLaCpGVk8fWY9dZf+gKF5IyADDQwMRerfHp2kLldEKIB5G10h5CxhgJob6ffvoJb29vsrKysLW15auvvqJPnz5qxyrkbo6WlfsvsfbgFVLv5gJgZmzIEKcm+HZvSftG8jdEiMpSaWOMWrduTVhYGPXq1Suw/c6dOzg7O3P58uXS7lIIIR6oQ4cOGBoa0rt3bzZu3EijRo3UjlSAoijsOBnPBz+fzV8AtmU9M3y7t2S4SzOZo0iIKqTUhdGVK1eKvIQ9Ozuba9eulUsoIYRISUnJ/wLWpk0bDh06lF8g6ZMryZn89/tTHLiQDEBjK1PmDujAgE6NMTSQYQdCVDUlLox++OGH/H/v2rULKyur/NtarZbffvuNVq1alW86IUSNoygKa9asYcaMGWzfvj2/y8zBwUHlZAUpisI3EddY8GM0Gdl5mNQyYOpTbZjUqzVmxvo37kkIUTIl/u0dOnQoABqNBl9f3wL3GRkZ0bJlSz799NPyTVeOsrKy6NChAyNGjOCTTz5RO44Qogjp6elMnTqVjRs3ArBu3Tq9HUs0a+sJfjh+AwD3ljZ8MLwTrWWtMyGqvBIXRjqdDoBWrVoRFhZG/fpV63LT999/nyeeeELtGEKIYhw/fpyRI0dy/vx5DA0Nee+995g1a5basQq5fucufhuPERV3h1oGGvz7tmNyrzbSbSZENVHq870xMTEVkaNCXbhwgbNnzzJo0CBOnTqldhwhxD8oikJQUBAzZswgOzubpk2bsnnzZnr27Kl2tEKOxd5mwrpwbmXmYG1mxMqXXHiidb2HP1EIUWWUqSM8MzOTffv2ERsbS05OToH7pk+fXqp97d+/n48//piIiAji4+PZtm1bfrfd35YtW8bHH39MfHw8HTt2ZMmSJXh4eJT4NV5//XU+/vhjDh06VKpsQoiKt2fPHqZMmQLAs88+S3BwsF6ekd55Mp6Zm6PI0epwaGpJ4GiZvVqI6qjUhVFkZCQDBgwgKyuLzMxMbGxsSE5OxszMjIYNG5a6MMrMzMTR0ZFx48YxfPjwQveHhIQwc+ZMli1bRo8ePVi5ciVeXl5ER0fnLxTp4uJCdnZ2oefu3r2bsLAw2rVrR7t27UpUGGVnZxfYV1paWqnaI4QoHU9PT8aPH0+HDh3w9/fXy3UYd59OYNrXkWh1Cn3tbVns7YSFiQywFqJaUkrpySefVCZOnKjk5eUpFhYWyqVLl5TY2FilV69eytatW0u7uwIAZdu2bQW2ubu7K1OmTCmwrX379srs2bNLtM/Zs2crzZo1U1q0aKHUq1dPsbS0VN59991iH//2228rQKGf1NTU0jdICFGITqdTVq1apdy8ebPANn118OJNpe3cnUqLWT8pM74+puRp9TerEOJ/UlNTy/T5XeqvZlFRUbz22msYGhpiaGhIdnY2zZs356OPPmLu3LnlWrTl5OQQERFRaOHavn37lrhbLCAggLi4OK5cucInn3zCxIkTmT9/frGPnzNnDqmpqfk/cXFxj9QGIcT/3Llzh+eff56JEycyduxYlL8m3tfXZYYSUu8xbVMkOVodXg6N+GSEowyyFqKaK/W5YCMjo/w/Yra2tsTGxtKhQwesrKyIjY0t13DJyclotVpsbW0LbLe1tSUhIaFcX+tvJiYm+evCCSHKz9GjR/H29ubKlSsYGRnxzDPPqB3pge7lapm8IZyUzBzsG1vymbcTtQz1r5tPCFG+Sl0YdenShfDwcNq1a4enpyfz588nOTmZDRs20KlTp4rIWOjbpKIoZfqGOXbs2BI/NjAwkMDAwCJn+RZClJyiKHz22WfMmjWLvLw8WrVqRUhICG5ubmpHK9LdHC07TsYTfCiGU9fTsDYzYvlLzpga6deM20KIilHqwmjRokWkp6cD8N577+Hr68vUqVN57LHHWLt2bbmGq1+/PoaGhoXODiUlJRU6i1Te/Pz88PPzy1+ETghRerdv38bX15cff/wRgOeff57Vq1fr3e+UoihExd1hx4l4QsLjSL+XB4BxLQOWvtBFrj4TogYpdWHk6uqa/+8GDRqwc+fOcg30T8bGxri4uBAaGspzzz2Xvz00NJQhQ4ZU2OuCnDESojxoNBpOnjyJsbExn332GVOnTtWr8USKorD33E0+3nWO6Pj/XYHa3KY23q7NGenWnIZ1TFVMKISobKpfb5qRkcHFixfzb8fExBAVFYWNjQ12dnb4+/vj4+ODq6sr3bp1IygoiNjY2Px5TyqKnDESomx0Oh0ajQaNRoO1tTXffvstBgYGdOnSRe1oBcTdymLutpP5i7+aGRvyZLsGjHRtzpPtGmAgg6yFqJFKVBh16dKlxN/yjh07VqoA4eHheHp65t/29/cHwNfXl+DgYLy9vUlJSWHBggXEx8fj4ODAzp07adGiRaleRwhR8W7evImvry+DBw/O//Li4uKicqqCtDqFtQdj+HT3ee7majGuZcDY7i2Z+mQb6pobqx1PCKEyjfL39bIP8O6775Z4h2+//fYjBdIX/+xKO3/+PKmpqVhaWqodSwi9tX//fkaNGsWNGzewtrbm6tWrevc7cy4hnTe3nuB43B0Aura24YNhnWlZX8YQCVHd/N3jU9rP7xIVRjVZWQ+sEDWFTqcjICCA+fPno9PpePzxx9myZQudO3dWO1o+RVFYse8yi0PPkatVqGNSi7nPdsDbtbl0mQlRTZX187tMY4zu3LnDt99+y6VLl3jjjTewsbHh2LFj2Nra0rRp07LsUghRBSUmJuLj40NoaCgAPj4+LFu2DAsLC5WT/Y+iKHwWep7/+/3+WMY+HWxZONSBRlYyqFoIUVipC6MTJ07Qp08frKysuHLlChMnTsTGxoZt27Zx9epV1q9fXxE5K51clSbEg2VmZuLi4sL169cxMzMjMDCwVHOFVQadTuH9nWf48o8YAOYOaM9Ej9Z6dWWcEEK/lHoaV39/f8aOHcuFCxcwNf3fNy4vLy/2799fruHU5OfnR3R0NGFhYWpHEUIvmZubM2XKFDp27EhYWJjeFUVancKbW0/kF0VvD7JnUq82UhQJIR6o1GOMrKysOHbsGG3atKFOnTocP36c1q1bc/XqVR5//HHu3btXUVlVIWOMhPifGzducPfuXdq0aQOAVqslOzsbMzMzlZMVlJOnw39LFD+diMfQQMNHwzsz3KWZ2rGEEJWorJ/fpT5jZGpqSlpaWqHt586do0GDBqXdnRCiiti9ezdOTk4MGzaMu3fvAmBoaKh3RRHAvG0n+elEPEaGGv7vhS5SFAkhSqzUhdGQIUNYsGABubm5wP2ZbWNjY5k9ezbDhw8v94BqCQwMxN7eXm/XcxKisuTl5TFv3jz69+/PzZs3gfsLPOurnSfj+SbiGgYaCPJx5dnOjdWOJISoQkrdlZaWlsaAAQM4ffo06enpNGnShISEBLp168bOnTsxN69e84FIV5qoya5du8aoUaP4448/AJgyZQqLFy+mdu3aKicr2p2sHPos3kdyRg5+nm14o197tSMJIVRSaZfrW1pa8scff/D7779z7NgxdDodzs7O9OnTp7S7EkLosZ07dzJmzBhSUlKoU6cOq1atwtvbW+1YD7Tgp2iSM3Jo29CC6U+3VTuOEKIKKlVhlJubS9++fVm5ciW9e/emd+/eFZVLCKEiRVEICAggJSUFZ2dnQkJCeOyxx9SOVazkjGy+PhLLd8euY6CBD4Z3xqSWodqxhBBVUKkKIyMjI06dOlUjLneVeYxETabRaNi0aROff/457733HiYmJmpHKkRRFCLj7rBi7yVCzyTy96CAKU+2waVFXXXDCSGqrFKPMXrttdcwMjLigw8+qKhMekXGGIma4ocffiAyMlLv1zvM0+rYeSqBZXsucjYhPX+7fWNLhnZpwss9W2Moy3wIUeNV2hijnJwcVq9eTWhoKK6uroUGWy9evLi0uxRCqCgnJ4dZs2axZMkSADw8PPS2m/zI5RTe2n6KC0kZABjXMqB/x0ZM6tUah6ZWKqcTQlQHpS6MTp06hbOzMwDnz58vcF9N6GITojq5fPky3t7ehIeHA/dntu/Zs6fKqQq7kpzJwh3R/HomCYA6prUY270lE3q2xsrMSOV0QojqpNSF0Z49eyoihxCikm3dupXx48eTlpZG3bp1WbduHYMGDVI7VgEZ2Xl8/vsF1vwRQ65WoZaBhue6NGW2V3vqWejfuCchRNVX6sJICFH1zZ49mw8//BCAbt26sXnzZuzs7FROVVBMciYvrT7C9Tv3Z9n2aFuftwfZ81jDOionE0JUZ1IYFUOuShPVWZcuXQB48803WbhwIUZG+tUddTYhjZdWHyU5I5tmdWvz7uCO9G7fULrrhRAVrtRXpdU0clWaqC5u3rxZYD3DU6dO4eDgoGKiosXdymJo4EFSMnPo0NiSDS+7U1+6zYQQpVRpi8gKIaqWu3fvMnnyZDp16kRCQkL+dn0rihRF4btj1/BaeoCUzBzaN6rD5oldpSgSQlQqKYyEqMbOnj3LE088QVBQEElJSezevVvtSMVaHHoe/y3HycjOw6GpJcHj3OWKMyFEpZPCSIhqasOGDbi6unLy5EkaNmzIrl27GDNmjNqxivT72UQ+//0iAC8+YceWyd1oZGWqciohRE0kg6+FqGYyMzOZNm0aa9euBcDT05ONGzfSuHFjlZMVLeLqbV7dFAnAmG4tWDBEv7r4hBA1i5wxEqKaef/991m7di0ajYZ33nmH0NBQvS2KLt/MYHxwGFk5Wjza1uetZ+3VjiSEqOHkjJEQ1czcuXM5fPgw8+fPx9PTU+04RdLpFP68nMJ/vz9F6t1cnJpbE+TjinEt+a4mhFCXFEZCVHEZGRmsXr2aGTNmoNFosLCw0NsZ6s/Ep7F87yX2nE0iPTsPAHNjQ5a+4ERtY0OV0wkhhBRGxZIJHkVVcOLECUaOHMm5c+fQ6XT4+/urHalIKRnZrP4jhuV7L+VvszCpxRCnJkzq1ZoW9cwf8GwhhKg8MsHjQ8gEj0IfKYpCUFAQM2bMIDs7m6ZNm/L111/j4eGhdrQCsvO0rNh7mc9/v0Ce7v6fGvdWNozv0YqnOzTEyFC6zoQQFaOsn99yxkiIKiYtLY1JkyYREhICwIABA1i3bh3169dXOVlBJ6+lMjMkkks3MwFoal2b2V7tGeTYROVkQghRPCmMhKhCoqKiGDFiBBcvXqRWrVosWrSI1157DQMD/TnzotUprD0Yw4e/nCVXq2BpWov/DrTneZdmstaZEELvSWEkRBWSnZ3NlStXsLOzY/PmzXTr1k3tSAVEXL3NrK0nuJiUAUDv9g1Z9FwnmaxRCFFlSGEkhJ7T6XT5Z4SeeOIJtm7dSs+ePbGxsVE5WUEHLtxk8oYIsnK0WJsZMb13W8b1aClniYQQVYr+nH8XQhQSFhZGp06dOHHiRP62wYMH611RtOlILD5fHs2fqHH/m56M79lKiiIhRJUjhZEQekhRFJYsWUKPHj2Ijo5m1qxZakcqVvDBGOZuOwlA/46NWOnjgqWpLP4qhKiapCtNCD1z69Ytxo0bxw8//ADAsGHD+PLLL1VOVbRfoxN558doAF7u2Yq3nu0gZ4mEEFVajThjVKtWLZycnHBycmLChAlqxxGiWIcPH6ZLly788MMPGBsb88UXX/Dtt99ibW2tdrRCDl9KwW/TMQB8uraQokgIUS3UiDNG1tbWREVFqR1DiAc6fPgwvXr1Ii8vj8cee4wtW7bQpUsXtWMVKSY5k2lfR5Kdp6NPh4a8NVCKIiFE9VAjCiMhqgJ3d3d69epFw4YNWblypV7PtD7nuxMkZ2TTvlEdvhjtjEktWedMCFE9qN6Vtn//fgYNGkSTJk3QaDRs37690GOWLVtGq1atMDU1xcXFhQMHDpTqNdLS0nBxcaFnz57s27evvKIL8ciOHDnC3bt3ATA0NOSHH35g06ZNel0UffH7Bf68fItaBhpWjXHF1EiKIiFE9aF6YZSZmYmjoyNffPFFkfeHhIQwc+ZM5s2bR2RkJB4eHnh5eREbG5v/GBcXFxwcHAr93LhxA4ArV64QERHBihUrGDNmDGlpacXmyc7OJi0trcCPEOVNp9Px/vvv07179wILv5qbm+tll1ROno6fT8Yz57sTfLL7PACz+renuY2ZysmEEKJ8qd6V5uXlhZeXV7H3L168mJdffjl/0PSSJUvYtWsXy5cvJyAgAICIiIgHvkaTJvfXZnJwcMDe3p7z58/j6upa5GMDAgJ49913y9IUIUokMTERHx8fQkNDgftfDrRaLYaG+nfm5W6Olp9PxfPJrnPcSL2Xv/25Lk2Z2Ku1ismEEKJiqF4YPUhOTg4RERHMnj27wPa+ffty6NChEu3j9u3bmJmZYWJiwrVr14iOjqZ16+L/oM+ZM6fAN/i0tDSaN29etgYI8S979uxh9OjRJCQkULt2bQIDAxk7dqxeniUKjU5k7raT3EzPBqBhHRP62NvS196WJ9s1UDmdEEJUDL0ujJKTk9Fqtdja2hbYbmtrS0JCQon2cebMGSZPnoyBgQEajYalS5c+cNZgExMTTExMHim3EP+m1WpZuHAhCxYsQKfTYW9vz5YtW+jYsaPa0QrZfTqBlfsvE3H1NgBNrWszwrUZEz1aY26i138yhBDikVWJv3L//jatKEqJv2F3796dkydPlvo1AwMDCQwMRKvVlvq5QvxbYmIiS5cuRafTMX78eD7//HPMzPRrfM71O3f5dPc5vjt2HQADDUzs1Zr/9GknA6yFEDWGXhdG9evXx9DQsNDZoaSkpEJnkcqbn58ffn5+pKWlYWVlVaGvJaq/Jk2asH79em7fvo2Pj4/acQoIu3KLlfsusf9CMjl5OgC8XZszsVcrHmtYR+V0QghRufS6MDI2NsbFxYXQ0FCee+65/O2hoaEMGTKkQl9bzhiJR5GXl8c777xD165dGThwIED+f/VF+r1c5m07xY8nbqAo97d1bW3DHK8OODbXv5m2hRCiMqheGGVkZHDx4sX82zExMURFRWFjY4OdnR3+/v74+Pjg6upKt27dCAoKIjY2lilTplRoLjljJMrq2rVrjB49mgMHDmBjY8PFixepW7eu2rEKiLuVxfTNkUTG3gFgmHNTfLq2wKm5tV4OBBdCiMqiemEUHh6Op6dn/u2/rwjz9fUlODgYb29vUlJSWLBgAfHx8Tg4OLBz505atGihVmQhirVz507GjBlDSkoKFhYWBAYG6l1RdCExnedXHCb1bi51TGsRPM4NlxbFX5AghBA1iUZR/j6JLv7pn11p58+fJzU1Va9nIxbqys3NZd68eXz88ccAdOnShZCQENq2batysoIS0+7xXOBBbqTeo1NTK5a+4ETrBhZqxxJCiHL3d49PaT+/pTB6iLIeWFFz3L17l6effprDhw8D8Oqrr/Lxxx9jamqqcrKCLiZlMHlDOJduZtK6vjlbp3anrrmx2rGEEKJClPXzW/WuNCGqutq1a+Pg4EB0dDRffvklw4cPVztSISkZ2XivPExKZg62liasG+8uRZEQQhRB9bXS9FVgYCD29va4ubmpHUXooZycHG7fvp1/e+nSpURGRuplUQSw4KdoUjJzaGdrwY/TesoaZ0IIUQzpSnsI6UoT/xYTE4O3tzdWVlbs2rULAwP9/n5x4todBn9xEAMNbPfrQedmcim+EKL6K+vnt37/RRdCz3z33Xd06dKFsLAwIiIiOH/+vNqRHkhRFJb+egGAoU5NpSgSQoiHkMJIiBLIzs5m2rRpDB8+nNTUVLp2+LOjfQAAIABJREFU7UpkZCTt27dXO1qR8rQ69pxLwndtGL+dTcJAA6/2fkztWEIIofdk8HUxZOZr8beLFy/i7e3NsWPHAHjzzTdZuHAhRkZGKicr2vbI6yzccYbkjGwAjA0NmPdsB7ksXwghSkDGGD2EjDGq2RRFwd3dnfDwcOrVq8f69esZMGCA2rGKpNMprD98hXd+jAbAxtyYwY5N8OnWgjZSFAkhahi5XF+ICqDRaFi9ejVvvPEGa9asoVmzZmpHKtKRyym8v/MMJ66lAjC2e0vmPdsBI0PpLRdCiNKQwkiIfzl37hwRERGMHj0aAEdHR3bv3q1yqqKl38vlv9tPsT3qBgAWJrWY8XRbJni0kjXPhBCiDKQwKoaMMaqZvvrqK6ZMmUJOTg5t27bV23msdDqFnafi+eDns1y7fRcDDYx+wo6ZfdpR38JE7XhCCFFlyRijh5AxRjVDVlYW06ZNY82aNQB4enqyceNGGjdurHKywm5l5vDKxgj+vHwLgGZ1a/N/o7rgbKdfi9UKIYSaZIyREGUUHR3NiBEjiI6ORqPRMH/+fP773/9iaGiodrRCLt3MwHfNUa7dvouZsSGTe7XhZY9WWJjIr7IQQpQH+WsqarR169YxdepU7t69S6NGjdi4cSO9e/dWO1aR4lPv4rP6CDdS79Ginhlf+rryWMM6ascSQohqRQojUaPdvHmTu3fv8swzz7BhwwZsbW3VjlSktHu5+K45yo3Ue7RuYM43k7tRT8YSCSFEuZPCSNQ4Wq02v5vM39+fpk2b4u3trddrni38KZrziRk0rGPC+vHuUhQJIUQF0d9PApUFBgZib2+vt1clidJTFIWgoCDc3NzIyMgAwMDAgFGjRul1UbT3XBJbwq+h0UDgi840q2umdiQhhKi29PfTQGV+fn5ER0cTFhamdhRRDtLS0hg9ejSTJ08mMjKSoKAgtSOVSGxKFnO/OwmAb7eWuLW0UTmREEJUb9KVJqq9yMhIRo4cycWLFzE0NCQgIICZM2eqHeuBdDqFbyOu8e6Pp8nM0dKinhlv9n9c7VhCCFHtSWEkqi1FUVi+fDn/+c9/yMnJwc7Ojs2bN9OtWze1oxVLURR+PZPEZ6HniY5PA8CtZV0Wj3TCzFh+XYUQoqLJX1pRbQUEBDBv3jwABg8ezNq1a7Gx0c+uqOw8Ld9H3eDLAzGcS0wH7i/v8Wrvx5jo0RpDA1neQwghKoPMfP0QMvN11RUfH4+7uzv+/v7MnDlTb9cO23Muif9uP8W123cBMDc2ZEz3lkzyaE1dc2OV0wkhRNUkM1+LGk9RFPbs2ZM/QWPjxo05f/48tWvXVjlZ0ZLS7vHuT9HsOBEPgK2lCeN7tOIFdzusahupnE4IIWomKYxEtXDr1i3Gjx/P999/z5YtWxgxYgSAXhZFOp3CxqOxfPTzWdKz8zA00PByz1bM7NNWxhEJIYTK5K+wqPL+/PNPvL29iY2NxdjYmNTUVLUjFSvuVhbTN0cSGXsHAMdmViwa1omOTaxUTiaEEAKkMCpWYGAggYGBaLVataOIYuh0Oj799FPmzp1LXl4ebdq0YcuWLTg7O6sdrUgxyZmMCvqThLR7WJjU4vW+7fDp1lIGVgshhB6RwdcPIYOv9VNycjJjx45lx44dAHh7exMUFKS3/48uJqUzetURktKzadvQgnXj3WlirX/dfEIIUV2U9fNbZr4WVdKff/7Jjh07MDExYcWKFXz99dd6WxSdS0jnhaA/SUrPpn2jOnw9qasURUIIoaekK01USQMHDuSjjz6ib9++ODo6qh2nWKdvpPLS6iPczsrFvrElX014Ahu5BF8IIfSWnDESVUJSUhKjRo3i2rVr+dveeOMNvS6KTl5LZfSq+0VR52ZWbJooRZEQQug7OWMk9N7evXsZPXo08fHx3Lp1i127dqkd6aEiY28zZs1R0u/l0cXOmnXj3bE0lbmJhBBC38kZI6G3tFotCxYs4OmnnyY+Ph57e3sWL16sdqwHUhSFHSfi8fnyflHk1rIu66UoEkKIKkPOGAm9lJCQwIsvvsjvv/8OwLhx4/j8888xNzdXOVnxrt3OYv73p/n9bBIAXVvb8KWvG+Ym8msmhBBVhfzFFnrn5MmT9OnTh6SkJMzNzVm+fDk+Pj5qxypWnlZH8KErLA49T1aOFmNDA6Y+1YZXPNtgUstQ7XhCCCFKoUYURjExMYwfP57ExEQMDQ35888/9frMQ03Xpk0bGjZsiK2tLVu2bKF9+/ZqRyqSoijsO3+TgJ1nOZeYDoB7SxsWDXPgsYZ1VE4nhBCiLGpEYTR27FgWLlyIh4cHt27dwsTERO1I4l8SExNp0KABBgYGmJmZsWPHDho0aKCXa50BRN9II+DnMxy4kAyAVW0j5ni1Z6RrcwxkJmshhKiyqv3g69OnT2NkZISHhwcANjY21KpVI+rBKuOXX37BwcGBDz74IH+bnZ2dXhZFN9OzeeOb4zz7+QEOXEjG2NCAiR6t2P+GJy+420lRJIQQVZzqhdH+/fsZNGgQTZo0QaPRsH379kKPWbZsGa1atcLU1BQXFxcOHDhQ4v1fuHABCwsLBg8ejLOzM4sWLSrP+OIR5ObmMnv2bLy8vEhOTmb79u3k5uaqHatYcbeyGLb8IN9EXENRYGDnxvzq/yTznrXHykyuOhNCiOpA9VMnmZmZODo6Mm7cOIYPH17o/pCQEGbOnMmyZcvo0aMHK1euxMvLi+joaOzs7ABwcXEhOzu70HN3795Nbm4uBw4cICoqioYNG9K/f3/c3Nx45plnisyTnZ1dYF9paWnl1FLxT7GxsYwaNYpDhw4B4OfnxyeffIKRkX4WGDHJmby46k9upN6jRT0zPvN2wtmurtqxhBBClDO9WkRWo9Gwbds2hg4dmr/tiSeewNnZmeXLl+dv69ChA0OHDiUgIOCh+zx8+DDvvvsuv/zyCwAff/wxcH/W5KK88847vPvuu4W2yyKy5efHH39k7Nix3Lp1C0tLS7788kuef/55tWMV60JiOi+uvr8AbJsG5mya2BVbS1O1YwkhhHiAarmIbE5ODhEREfTt27fA9r59++afaXgYNzc3EhMTuX37Njqdjv3799OhQ4diHz9nzhxSU1Pzf+Li4h6pDaKg+Ph4Ro4cya1bt3B1dSUyMlKvi6Iz8WkFFoDdPKmbFEVCCFGNqd6V9iDJyclotVpsbW0LbLe1tSUhIaFE+6hVqxaLFi2iV69eKIpC3759GThwYLGPNzExkavWKlDjxo1ZvHgx586d48MPP9TrY33yWio+a45wJysXh6aWbBj/BHVlrTMhhKjW9Low+ptGU/BKH0VRCm17EC8vL7y8vEr1moGBgQQGBqLVakv1PFHYtm3baN68Oa6urgBMnTpV5UQPF3H1NmPXHCU9Ow+n5vfXOrOqrZ/jn4QQQpQfve5Kq1+/PoaGhoXODiUlJRU6i1Te/Pz8iI6OJiwsrEJfpzrLzs5m+vTpDBs2jJEjR5Kamqp2pBL540IyPl8eIT07D/eWNnw14QkpioQQoobQ68LI2NgYFxcXQkNDC2wPDQ2le/fuFfragYGB2Nvb4+bmVqGvU11dvHiR7t278/nnnwMwYsQIzMzMVE71cD+fjGd8cBhZOVo82tYneLwbFrLWmRBC1Biq/8XPyMjg4sWL+bdjYmKIiorCxsYGOzs7/P398fHxwdXVlW7duhEUFERsbCxTpkyp0Fx+fn74+fnlj2oXJbdlyxYmTJhAeno69erVY/369QwYMEDtWA+1JSyO2d+dQKfAgE6N+MzbSdY6E0KIGkb1wig8PBxPT8/82/7+/gD4+voSHByMt7c3KSkpLFiwgPj4eBwcHNi5cyctWrRQK7IoRk5ODjNmzGDFihUA9OzZk6+//ppmzZqpnOzhgvZfYtHOswC84Nac95/rhKHMYi2EEDWOXs1jpE/+Ofj6/PnzMo9RCeh0OgYOHMgvv/zC3Llzeeedd/R++RVFUfh41zmW7b0EwOQnWzO7f/tSDe4XQgihf8o6j5EURg9R1gNbk+Tl5eUXQMnJyURFRdGnTx+VUz2cVqfw3+9PselILACz+rdn6lNtVE4lhBCiPJT181u/v84LvZaVlcX06dPJy8sjODgYuH8lYVUoinLydPhvieKnE/FoNPD+0E6MfsJO7VhCCCFUJoVRMWQeoweLjo5m5MiRnD59Go1Gw3/+8x8cHR3VjlUiWp3C9K8j+eV0AkaGGj7zdmJg5yZqxxJCCKEHpCvtIaQrrbDg4GD8/PzIysqiUaNGbNy4kd69e6sdq0QURWHe9vvdZ8aGBgSNceGpxxuqHUsIIUQ5q5ZrpQn9kpGRga+vL+PGjSMrK4tnnnmGqKioKlMUASz59QKbjsSi0cCSF5ykKBJCCFGAdKWJElEUhYEDB7Jv3z4MDAxYsGABc+bMwcCg6tTWG/68ytLfLgDw3hAHBnRqrHIiIYQQ+kYKo2LIGKOCNBoNc+fO5fLly2zcuBEPDw+1I5XKzpPxzP/+FAAznm7LS11lHiwhhBCFyRijh6jJY4zS09M5deoU3bp1y9927949TE1NVUxVeocuJTN2TRg5Wh2jn7Dj/aEOMk+REEJUczLGSJSrqKgoXFxc6N+/P5cvX87fXtWKolPXU5m0PoIcrY7+HRvx3hApioQQQhRPCiNRgKIoLF++nK5du3LhwgWsrKy4ffu22rHK5GpKJmPXhpGRnccTrWxY8oKTLPMhhBDigaQwKkZgYCD29va4ubmpHaXSpKam4u3tzSuvvEJ2djaDBg3KP3NU1dxMz2bMmqMkZ2TTobElq3xdMTWSBWGFEEI8mIwxeoiaMsYoPDwcb29vLl++jJGRER9++CEzZ86skt1O6fdyeSHoT07fSKNZ3dp8N7U7DS2rVhegEEKIRyNLgohHsmnTJi5fvkzLli0JCQnB3d1d7Uhlkp2nZfKGCE7fSKOeuTEbXn5CiiIhhBAlJoWRACAgIAATExNmzZqFtbW12nHKRKtT8A85zqFLKZgZG7J2nBut6purHUsIIUQVImOMaqgjR47w0ksvkZeXB4CJiQkBAQFVtii6m6Nl+uZIdpyMx8hQw0ofFzo3q5ptEUIIoR4pjGoYnU7Hp59+Ss+ePdm4cSOfffaZ2pEeWXzqXUasPMSOE/H5i8J6tG2gdiwhhBBVkHSlFaM6znydkpKCr68vO3bsAGDkyJFMnjxZ5VSPJjL2NpM2RHAzPRsbc2OWv+jME63rqR1LCCFEFSVXpT1Edbkq7eDBg7zwwgtcu3YNExMTli5dyqRJk6rkVWd/2xZ5jVlbT5KTp+Nx2zqs9nWluY2Z2rGEEELoAbkqTRQrODiYCRMmoNVqadeuHVu2bMHR0VHtWGWm0yl8tOscK/ZdAqBPB1uWvOCEhYm8nYUQQjwa+SSpAdzd3TExMWHYsGEsX74cCwsLtSOVWUZ2HjM3R/LrmSQAXnmqDa/3fRwDmdFaCCFEOZDCqJq6fv06TZs2BcDe3p7jx4/Tpk2bKt11FncriwnrwjmXmI5xLQM+Gt6ZoV2aqh1LCCFENSJXpVUzWq2WBQsW0Lp1a/7444/87Y899liVLor+vJzC4C/+4FxiOg3rmLBlcjcpioQQQpQ7OWNUjSQkJPDSSy/x22+/AfDTTz/Rs2dPlVM9uk1HYpn//SnydAqdmlqxaowrjaxkNmshhBDlTwqjauK3337jxRdfJDExETMzM1asWIGPj4/asR5JnlbHwh1nCD50BYCBnRvz8fOO1DaWxWCFEEJUDCmMqri8vDwWLFjAwoULURSFTp06sWXLFtq3b692tEeSmpXLq18f48CFZABee6Ydr/au2t2BQggh9J8URsWoKhM8bt++nffeew+AiRMnsnTpUmrXrq1yqkdz6WYGE9aFE5OcSW0jQz7zdqS/Q2O1YwkhhKgBZILHh9D3CR4VReHll1/mmWeeYdSoUWrHeWT7z9/Eb9Mx0u/l0dS6NkFjXOjYxErtWEIIIaoYmeCxhsjLy+PTTz9lypQpWFlZodFoWLNmjdqxHpmiKKw9eIWFO6LRKeDaoi4rfFyob2GidjQhhBA1iBRGVUhcXByjRo3i4MGDHDt2jJCQELUjlYucPB3zvz/F5rA4AEa4NGPhcw6Y1JJB1kIIISqXFEZVxE8//YSvry+3bt3C0tKSESNGqB2p3Kw5GMPmsDgMNDB3QAde7tlKBlkLIYRQhUzwqOdycnJ47bXXGDRoELdu3cLV1ZXIyEief/55taOVm0tJGQBMebINEzxaS1EkhBBCNXLGSI/FxcUxYsQIjhw5AsDMmTP58MMPMTY2VjlZxahjaqR2BCGEEDWcFEZ6zNTUlLi4OKytrQkODmbIkCFqR6oQclmkEEIIfSGFkZ7Jy8ujVq37/1saNGjA9u3badiwIS1atFA5WcWTHjQhhBBqq/ZjjM6dO4eTk1P+T+3atdm+fbvasYp06dIlunbtyoYNG/K3ubm51YiiSAghhNAH1b4wevzxx4mKiiIqKoo//vgDc3NznnnmGbVjFfLNN9/g7OxMREQEb731Fjk5OWpHqjQyxagQQgh9Ue0Lo3/64YcfePrppzE3N1c7Sr579+7xyiuvMHLkSNLS0ujRowcHDx6stgOsH0R60oQQQqhN9cJo//79DBo0iCZNmqDRaIrs5lq2bBmtWrXC1NQUFxcXDhw4UKbX2rJlC97e3o8audycP3+erl27snz5cgDmzJnD3r17adasmcrJKpciw6+FEELoCdUHX2dmZuLo6Mi4ceMYPnx4oftDQkKYOXMmy5Yto0ePHqxcuRIvLy+io6Oxs7MDwMXFhezs7ELP3b17N02aNAHur5ly8OBBNm/e/MA82dnZBfaVlpb2KM0r1s2bN3FzcyMtLY0GDRqwYcMG+vXrVyGvJYQQQoiSUb0w8vLywsvLq9j7Fy9ezMsvv8yECRMAWLJkCbt27WL58uUEBAQAEBER8dDX+f777+nXrx+mpqYPfFxAQADvvvtuKVpQNg0aNMDPz4/Dhw+zcePG/AKuJpOr0oQQQqhN9a60B8nJySEiIoK+ffsW2N63b18OHTpUqn2VtBttzpw5pKam5v/ExcWV6nVKY8GCBfz6669SFElPmhBCCD2h+hmjB0lOTkar1WJra1tgu62tLQkJCSXeT2pqKkePHmXr1q0PfayJiQkmJpWzovvf8xWJ+zQy/FoIIYTK9PqM0d/+vXaWoiilWk/LysqKxMTEUl3pFRgYiL29PW5ubiV+jigbOWEkhBBCX+h1YVS/fn0MDQ0LnR1KSkoqdBapvPn5+REdHU1YWFiFvo4QQggh9IdeF0bGxsa4uLgQGhpaYHtoaCjdu3ev0NeWM0aVTwZfCyGEUJvqg1wyMjK4ePFi/u2YmBiioqKwsbHBzs4Of39/fHx8cHV1pVu3bgQFBREbG8uUKVMqNJefnx9+fn6kpaVhZWVVoa9V0yky9bUQQgg9oXphFB4ejqenZ/5tf39/AHx9fQkODsbb25uUlBQWLFhAfHw8Dg4O7Ny5U9YPE0IIIUS5U70weuqppx56xuCVV17hlVdeqaRE9wUGBhIYGIhWq63U1xVCCCGEevR6jJGaZPB15ZGONCGEEPpCCiOhN0ozBYMQQghREaQwKoZclVZ5ZOy1EEIIfSGFUTGkK63yyfkiIYQQapPCSAghhBDiL1IYCdVJT5oQQgh9IYVRMWSMUeWTsddCCCHUpvo8Rvrq75mvU1NTsba2Ji0tTe1I1VZOVga67CzuZqbLcRZCCFEu/v48Ke3qChpF1mN4oGvXrtG8eXO1YwghhBCiDOLi4mjWrFmJHy+F0UPodDpu3LhBnTp10Gg0uLm5FbpS7d/bHnT773+npaXRvHlz4uLisLS0LJesRWUr62OLu78k7S9qW2Ucg/Js/4MeI++B0r8Hijse+vweeND9+voeKE37S/J4+R0oefuL2i7vAXXfA4qikJ6eTpMmTTAwKPnIIelKewgDA4MClaahoWGh/3n/3vag2/++z9LSstzeDEVlK+tji7u/JO0valtlHIPybP+DHiPvgdK/Bx52fPTxPfCg+/X1PVCa9pfk8fI7UPL2F7Vd3gPqvwfKsgi84TvvvPNOuSSpQdzd3R+67UG33d3dyc7O5oMPPmDOnDmYmJhUaLayPra4+0vS/qK2VcYxKM/2P+gx8h4o/XugqOOh7++BB92vr++B0rS/JI+X34GSt7+o7fIe0P/3wL9JV5pK0tLSsLKyIjU1tdyq5Kqmph+Dmt5+kGMg7a/Z7Qc5BvrYfjljpCJDQ0OeeuopatWquT2aNf0Y1PT2gxwDaX/Nbj/IMdC39ssZIyGEEEKIv8gEj0IIIYQQf5HCSAghhBDiL1IYCSGEEEL8RQojIYQQQoi/SGEkhBBCCPEXKYz01E8//cTjjz9O27ZtWb16tdpxKt1zzz1H3bp1ef7559WOooq4uDieeuop7O3t6dy5M998843akSpVeno6bm5uODk50alTJ1atWqV2JFVkZWXRokULXn/9dbWjqKJWrVo4OTnh5OTEhAkT1I5T6WJiYvD09MTe3p5OnTqRmZmpdqRKde7cufz//05OTtSuXZvt27dX+OvK5fp6KC8vD3t7e/bs2YOlpSXOzs4cOXIEGxsbtaNVmj179pCRkcG6dev49ttv1Y5T6eLj40lMTMTJyYmkpCScnZ05d+4c5ubmakerFFqtluzsbMzMzMjKysLBwYGwsDDq1aundrRKNW/ePC5cuICdnR2ffPKJ2nEqXf369UlOTlY7hmqefPJJFi5ciIeHB7du3cLS0lJv5vqpbBkZGbRs2ZKrV69W+N9BOWOkh44ePUrHjh1p2rQpderUYcCAAezatUvtWJXK09OTOnXqqB1DNY0bN8bJyQmAhg0bYmNjw61bt1ROVXkMDQ0xMzMD4N69e2i1Wmrad7gLFy5w9uxZBgwYoHYUoYLTp09jZGSEh4cHADY2NjW2KAL44YcfePrppyvly6EURhVg//79DBo0iCZNmqDRaIo89bds2TJatWqFqakpLi4uHDhwIP++Gzdu0LRp0/zbzZo14/r165WSvTw8avurg/I8BuHh4eh0Opo3b17RsctNebT/zp07ODo60qxZM958803q169fWfEfWXm0//XXXycgIKCyIpe78jgGaWlpuLi40LNnT/bt21dZ0cvFo7b/woULWFhYMHjwYJydnVm0aFFlxi8X5fl3cMuWLXh7e1d0ZEAKowqRmZmJo6MjX3zxRZH3h4SEMHPmTObNm0dkZCQeHh54eXkRGxsLUOQ3Y41GU6GZy9Ojtr86KK9jkJKSwpgxYwgKCqqM2OWmPNpvbW3N8ePHiYmJYdOmTSQmJlZW/Ef2qO3//vvvadeuHe3atavM2OWqPN4DV65cISIighUrVjBmzBjS0tIqK/4je9T25+bmcuDAAQIDAzl8+DChoaGEhoZWZhMeWXn9HUxLS+PgwYOVd/ZUERUKULZt21Zgm7u7uzJlypQC29q3b6/Mnj1bURRFOXjwoDJ06ND8+6ZPn65s3Lix4sNWgLK0/2979uxRhg8fXuEZK1pZj8G9e/cUDw8PZf369ZWSs6I8ynvgb1OmTFG2bNlSYRkrUlnaP3v2bKVZs2ZKixYtlHr16imWlpbKu+++W2mZy1t5vAf69++vhIWFVVjGilSW9h86dEjp169f/n0fffSR8tFHH1V82AryKO+B9evXKy+++GKFZ/ybnDGqZDk5OURERNC3b98C2/v27cuhQ4cAcHd359SpU1y/fp309HR27txJv3791Ihb7krS/uquJMdAURTGjh1L79698fHxUSNmhSlJ+xMTE/PPDqSlpbF//34ef/zxSs9aEUrS/oCAAOLi4rhy5QqffPIJEydOZP78+WrErRAlOQa3b98mOzsbgGvXrhEdHU3r1q0rPWtFKEn73dzcSExM5Pbt2+h0Ovbv30+HDh3UiFshSvNZUJndaAA1dySXSpKTk9Fqtdja2hbYbmtrS0JCAnD/EtVPP/0UT09PdDodb775ZrW5Gqck7Qfo168fx44dIzMzk2bNmrFt2zbc3NwqO26FKMkxOHjwICEhIXTu3Dm/X37Dhg106tSp0vOWt5K0/9q1a7z88ssoioKiKLz66qt07txZjbjlrqS/A9VZSY7BmTNnmDx5MgYGBmg0GpYuXVptrswt6efAokWL6NWrF4qi0LdvXwYOHKhG3ApR0t+D1NRUjh49ytatWystmxRGKvn3mCFFUQpsGzx4MIMHD67sWJXmYe2vCVfhPegY9OzZE51Op0asSvOg9ru4uBAVFaVGrErzsN+Bv40dO7aSElW+Bx2D7t27c/LkSTViVZqHvQe8vLzw8vKq7FiV6mHHwMrKqtLHF0pXWiWrX78+hoaGhb4ZJiUlFaqcq6Oa3n6QYyDtr9ntBzkGNb39oN/HQAqjSmZsbIyLi0uhqwtCQ0Pp3r27SqkqT01vP8gxkPbX7PaDHIOa3n7Q72MgXWkVICMjg4sXL+bfjomJISoqChsbG+zs7PD398fHxwdXV1e6detGUFAQsbGxTJkyRcXU5aemtx/kGEj7a3b7QY5BTW8/VOFjUGnXv9Uge/bsUYBCP76+vvmPCQwMVFq0aKEYGxsrzs7Oyr59+9QLXM5qevsVRY6BtL9mt19R5BjU9PYrStU9BrJWmhBCCCHEX2SMkRBCCCHEX6QwEkIIIYT4ixRGQgghhBB/kcJICCGEEOIvUhgJIYQQQvxFCiMhhBBCiL9IYSSEEEII8RcpjIQQQggh/iKFkRBCCCHEX6QwEkIIPRIcHIy1tbXaMYSosaQwEkJUiJs3b2JkZERWVhZ5eXmYm5sTGxurdiwhhHggKYyEEBXi8OHDODk5YWZmRkRERP6K2kIIoc+kMBJCVIhDhw7Ro0cPAP7444/8fz/I3r17cXd3x9zcHGtra3r06MHVq1dtckWQAAAGDElEQVQBGDt2LEOHDi3w+JkzZ/LUU0/l337qqaeYNm0aM2fOpG7dutja2hIUFERmZibjxo2jTp06tGnThp9//rnAa2o0Gnbt2kWXLl2oXbs2vXv3JikpiZ9//pkOHTpgaWnJqFGjyMrKyn/eL7/8Qs+ePbG2tqZevXoMHDiQS5cu5d9/5coVNBoN3333HZ6enpiZmeHo6Mjhw4cLtCE4OBg7OzvMzMx47rnnSElJKXD/8ePH8fT0pE6dOlhaWuLi4kJ4ePhDj6UQomykMBJClJvY2Fisra2xtrZm8eLFrFy5Emtra+bOncv27duxtrbmlVdeKfK5eXl5DB06lCeffJITJ05w+PBhJk2ahEajKVWGdevWUb9+fY4ePcq0adOYOnUqI0aMoHv37hw7dox+/frh4+NToMgBeOedd/jiiy84dOgQcXFxjBw5kiVLlrBp0yZ27NhBaGgon3/+ef7jMzMz8ff3JywsjN9++w0DAwOee+45dDpdgf3OmzeP119/naioKNq1a8eoUaPIy8sD4MiRI4wfP55XXnmFqKgoPD09WbhwYYHnv/jiizRr1oywsDAiIiKYPXs2RkZGpTomQohSUIQQopzk5uYqMTExyvHjxxUjIyMlKipKuXjxomJhYaHs27dPiYmJUW7evFnkc1NSUhRA2bt3b5H3+/r6KkOGDCmwbcaMGcqTTz6Zf/vJJ59UevbsmX87Ly9PMTc3V3x8fPK3xcfHK4By+PBhRVEUZc+ePQqg/Prrr/mPCQgIUADl0qVL+dsmT56s9OvXr9i2JyUlKYBy8uRJRVEUJSYmRgGU1atX5z/m9OnTCqCcOXNGURRFGTVqlNK/f/8C+/H29lasrKzyb9epU0cJDg4u9nWFEOVLzhgJIcpNrVq1aNmyJWfPnsXNzQ1HR0cSEhKwtbWlV69etGzZkvr16xf5XBsbG8aOHUu/fv0YNGgQS5cuJT4+vtQZOnfunP9vQ0ND6tWrR6dOnfK32draApCUlFTs82xtbTEzM6N169YFtv3zOZcuXWL06NG0bt0aS0tLWrVqBVBogPk/99u4ceMCr33mzBm6detW4PH/vu3v78+ECRPo06cPH3zwQYHuOiFE+ZPCSAhRbjp27IiFhQU+Pj4cPXoUCwsLnn76aa5cuYKFhQUdO3Z84PPXrl3L4cOH6d69OyEhIbRr144///wTAAMDAxRFKfD43NzcQvv4dzeTRqMpsO3vrrl/d3n9+zFF7eefzxk0aBApKSmsWrWKI0eOcOTIEQBycnIeuN9/vva/21OUd955h9OnT/Pss8/y+++/Y29vz7Zt2x76PCFE2UhhJIQoNzt37iQqKopGjRrx1VdfERUVhYODA0uWLCEqKoqdO3c+dB9dunRhzpw5HDp0CAcHBzZt2gRAgwYNCp1BioqKqpB2PExKSgpnzpzhrbfe4umnn6ZDhw7cvn271Puxt7fPL/z+9u/bAO3ateM///kPu3fvZtiwYaxdu7bM2YUQDyaFkRCi3LRo0QILCwsSExMZMmQIdnZ2REdHM2zYMB577DFatGhR7HNjYmKYM2cOhw8f5urVq+zevZvz58/ToUMHAHr37k14eDjr16/nwoULvP3225w6daqymlZA3bp1qVevHkFBQVy8eJHff/8df3//Uu9n+vTp/PLLL3z00UecP3+eL774gl9++SX//rt37/Lqq6+yd+9erl69ysGDBwkLC8s/JkKI8ieFkRCiXO3duxc3t/9vzw5xEwqiMIz+BUNYAvinEJiXsAOCfgnySTAYDAoEGollAayBHSDwbALFAlozaSqatE1a1XPsZG5y3ZeZOr1eL9frNcPhMIPB4Mt7/X4/9/s9TdOkqqosFousVqssl8skyXQ6zW63y2azSV3XeT6fadv2r9f5VKfTyfl8zu12y2g0ynq9zuFw+PGcyWSS0+mU4/GY8Xicy+WS7Xb7ft7tdvN4PNK2baqqynw+z2w2y36//811gA9eXr/zyQ0A8A94MQIAKIQRAEAhjAAACmEEAFAIIwCAQhgBABTCCACgEEYAAIUwAgAohBEAQCGMAACKNyIsyNPltgO2AAAAAElFTkSuQmCC", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject Text(0.5, 1.0, 'naive cumsum implementation, rounded up')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "errup = setrounding(Float32, RoundUp) do\n", " # error in single-precision (Float32) sum, rounding temporarily set to RoundUp\n", " abs.(my_cumsum(x) .- yexact) ./ abs.(yexact) # relative error in y\n", "end\n", "\n", "loglog(n, errup[n])\n", "ylabel(\"relative error\")\n", "xlabel(\"# summands\")\n", "# plot an O(n) line for comparison\n", "loglog([1,length(errup)], [1,length(errup)] * 1e-7, \"k--\")\n", "text(1e3,4e-4, L\"\\sim n\")\n", "title(\"naive cumsum implementation, rounded up\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overflow, Underflow, Inf, and NaN" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because a floating-point value uses a finite number of bits to store the exponent `e`, there is a maximum and minimum magnitude for floating-point values. If you go over the maximum, you **overflow** to a special `Inf` value (or `-Inf` for large negative values), representing $\\infty$. If you go under the minimum, you **underflow** to $\\pm 0.0$, where $-0$ is used to represent e.g. a value that underflowed from the negative side." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0e300" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1e300 # okay: 10³⁰⁰ is in the representable range" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Inf" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(1e300)^2 # overflows" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can get the maximum representable magnitude via `floatmax`" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1.7976931348623157e308, 3.4028235f38)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "floatmax(Float64), floatmax(Float32)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0e-300" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1e-300 # okay" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(1e-300)^2 # underflows to +0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can use `floatmin` in Julia to find the minimum-magnitude floating-point value:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2.2250738585072014e-308, 1.1754944f-38)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "floatmin(Float64), floatmin(Float32)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-0.0" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "-1e-300 * 1e-300 # underflows to -0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While -0 is printed differently from +0, they still compare equal. However, you will notice the difference if you do something that depends on the sign:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "+0.0 == -0.0" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(Inf, -Inf)" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 / +0.0, 1 / -0.0" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(false, true)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "signbit(+0.0), signbit(-0.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since 1/-Inf is -0.0, this has the nice property that:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-Inf" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 / (1 / -Inf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A special value `NaN` (\"not a number\") is used to represent the result of floating-point operations that can't be defined in a sensible way (e.g. [indeterminate forms](https://en.wikipedia.org/wiki/Indeterminate_form)):" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(NaN, NaN, NaN)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0 * Inf, Inf / Inf, 0 / 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In some other languages, `NaN` is also used to signal that a function cannot be evaluated. For example, in C, `sqrt(-1.0)` returns `NaN`. However, Julia typically [throws](http://docs.julialang.org/en/latest/manual/control-flow/#man-exception-handling) an [exception](https://en.wikipedia.org/wiki/Exception_handling) in these cases:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "ename": "DomainError", "evalue": "DomainError with -1.0:\nsqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).", "output_type": "error", "traceback": [ "DomainError with -1.0:\nsqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).", "", "Stacktrace:", " [1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31", " [2] sqrt(::Float64) at ./math.jl:492", " [3] top-level scope at In[28]:1" ] } ], "source": [ "sqrt(-1.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you want a complex *output* from the `sqrt` function, you need to give it a complex *input*:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0 + 1.0im" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sqrt(-1.0 + 0im)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The reason for this is a technical criterion called [type stability](http://docs.julialang.org/en/latest/manual/performance-tips/#write-type-stable-functions) that is essential for Julia code to be compiled to fast machine instructions. (The lack of type stability in many standard-library functions is a key contributor to the difficulty of retrofitting fast compilers to languages like Python and Matlab.)" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.1.0", "language": "julia", "name": "julia-1.1" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.1.0" } }, "nbformat": 4, "nbformat_minor": 1 }