### A Pluto.jl notebook ### # v0.15.1 using Markdown using InteractiveUtils # ╔═╡ 307cbf7a-1ac5-47a5-8031-3458f9dd1887 begin using PlutoUI PlutoUI.TableOfContents(aside=true) end # ╔═╡ 7d7820ff-c0f5-41ee-be29-5006e7f4361d using LinearAlgebra # ╔═╡ 52819547-9593-446a-91e7-a08e08723e66 using Plots # ╔═╡ 3228a21e-cab8-4738-bdc5-a6827c764c06 using Unitful # ╔═╡ 3f7ae2df-9d4d-46d3-b12e-22107a560b66 begin using CSV using DataFrames using FileIO end # ╔═╡ bb461e00-c0aa-11eb-2c7d-1bd1591779c6 md""" # Julia for People That Were Unfortunate Enough to Learn MATLAB Julia is an incredily performant _(2 order of magnitude faster than Matlab)_, Dynamic _(Data types dont need to be declared unlike C)_, Composable _(The compiler is smart enough to allow functions you write to work for multiple different types of data)_, and most importantly for our use case Julia has very simple syntax that focuses on engineering / science applications. !!! info "Pluto Notebooks" The code in this notebook is running in something called Pluto.jl. Pluto notebooks are similar to Matlab Livescript but have a stricter focus on cells and are immutable meaning that a variable can only be declared once and cannot be changed in other cells. This feels very restricting at first but guarantees that the code you are currently looking at is correct, and allows reactive updating of dependant code. It's important to note that these are Pluto.jl features and not Julia features. """ # ╔═╡ 11ed58ac-1289-4b64-88a8-17cb7f0b6cd2 md""" ## Intro - Things Matlab Does Really Weirdly that no one Else Does To get started, I want to focus on things that Matlab does that are outlandish and make little sense and compare them to things Julia does. Julia is obviously not perfect, but being that it's one of the newest and fastest-growing languages, it's easy to argue that Julia's syntax and language design are the most modern and sane currently available in programming, primarily if you are focusing on engineering or science workloads. In future chapters, I will focus more on how Julia shines rather than why Matlab doesn't. ### Enviroments A significant pain point for large Matlab projects is managing installed Toolboxes and Packages. In Matlab, once something is installed it is available globally and doesn't have to be imported to a script to be used. There are quite a few downsides to this, the largest in my opinion: it is very easy to crowd your namespace. To make it even worse, Matlab usually doesn't even warn you about the issue so if two packages offer a function of the same name, it is just going to choose one and hope it works out. Another big issue this can cause is version conflicts. This is why there are so many issues trying to run code between Matlab versions. Julia has a very intuitive package manager. I won't dig into version management or environments for our uses since they aren't really needed for smaller projects. You can get away with just installing whatever package you need globally until your writing packages or working on production code. The best way to install packages is to open the Julia REPL (basically Matlab's command window) and press `]`, which puts you in Package mode. You can then `add`, `update`, or `remove` packages. You can then press backspace to return to the normal REPL. Once a package is added to Julia, you have to bring it into your environment using the `using` keyword. Below is an example that adds the `LinearAlgebra` library, which is part of the Julia standard library, which means it is included in every Julia installation. !!! warning "Package Management" Pluto will automatically install any of the packages in this notebook that you are missing, but this can take a long time since Julia is still very slow to compile new packages. """ # ╔═╡ 16a7201a-4ce0-4102-9874-96733514ef08 md""" !!! warning This page is just HTML and doesn't have a Julia Backend to allow interactivity. The button in the top right corner has instructions on how to run this notebook yourself. """ # ╔═╡ 3cad3f5f-f6a5-405b-aeb0-495ebd8cca45 md""" ### Growing Arrays In Matlab its very common to grow an array in a for loop using `array(end+1)` _(You really should never do this since it creates a new array every loop which gets very inefficent, but I'm not here to teach you Matlab)_. In Julia, you use `push!` for adding a single number to the end of a `Vector` and `append!` to add collections _(also known as arrays or lists)_ to the end of a `Vector`. You'll notice that `!` at the end of the push and append functions. In Julia the exclamation point at the end of a function name means that the function modifies the function inputs in place compared to returning a new copy of the object. !!! note "Indexing Syntax" Array index syntax uses square brackets `[]` in Julia instead of parenthesis in Matlab `()`. """ # ╔═╡ 0a4dc275-04b3-43e3-8a0d-cb921d769a0a a = [99, 1, 3, 5] # ╔═╡ 193c6a29-4f53-4c96-acc7-b5359043b471 sort(a); a # a is still unsorted since sort(a) doesn't sort in place. # ╔═╡ 6fa90db6-9d2b-47bc-9f41-925b447912e8 sort!(a); a # a is now sorted since sort!(a) sorts in place. # ╔═╡ 58c883b6-3682-424d-a1e9-8ac561bb0dbf a[end+1] = 5 # Can't grow array by indexing like in Matlab # ╔═╡ a74e7cad-8dae-41cd-b77a-65ba082956a3 md""" ### Functions Matlab functions have a ton of weird behaviors. The weirdest being that optional function returns are done based on the amount of return values so: ```julia % Matlab Example P = polyfit(X,Y,N) [P,S] = polyfit(X,Y,N) [P,S,MU] = polyfit(X,Y,N) ``` all return different things. In this case, it's simple to tell what is going on, but if you had no idea what the `polyfit` function did in the first place it is totally unintuitive what the extra returned values are. If a function has optional returns in other languages, it is usually idiomatic to return those values with an optional keyword argument or just have a completely different function to get the different data. In the case of `polyfit`, calculating S and MU are unrelated to calculating P, so it is not like the data was already calculated and can be quickly returned like you would generally expect to be the case with optional returns. To make things even worse, `S` is designed to be an input to a different function, `POLYVAL`, so why wouldn't you just make polyval take `X`, `Y`, and `N` as inputs? Matlab is dumb `/endrant`. Another weird thing is where functions can be placed in Matlab. In livescripts they can only be placed at the end of the file, and there's also the ability to make files that are only a function. In Julia, functions can be anywhere, and files can contain as many functions as you want and can be imported by any other file. The function syntax in Julia is also very sane. """ # ╔═╡ f4d655a2-8539-43f7-9356-56a3e3f9de91 g(x) = x + 1 # Simple functions can be made in one line # ╔═╡ 289727e4-fb29-4ba8-97c5-cce62da725bc function g(x, y) z = x^2 + y^2 return z # Returns can either be the last line of a function or use the return keyword. Returning something ends a function so any lines after a return statement would not execute. end # Multi line functions have to have an end # ╔═╡ ec37197c-f18e-48c2-8266-867e28cfc138 g() = g(6, 9.1) # Multiple functions can share names. # ╔═╡ 7fc003bb-bf1f-42fa-94c7-c7e778edda61 md""" !!! note Functions can also have default values. Instead of the case above where g() just calls g(x, y) with some values that would be common you could instead declare g(x, y) with default values: ```julia function g(x=6, y=9.1) z = x^2 + 6^2 end ``` """ # ╔═╡ 3c921f2d-3972-4b88-990d-36ced0764bc5 # Julia will always use the closest matching function. function g(x::Int, y::Int) # x and y need to be integers z = x+y # last line is returned, so really could just be x+y without the z end # ╔═╡ b7ae33bc-5edd-4741-a578-d210521b1698 g(14) # Since there are 4 different methods for g Julia will find and use the closest match. This is called multiple dispatch and can be very complicated but is incredibly powerful. # ╔═╡ 75eeaff0-4fd3-4745-b042-af8ba12a0506 g(5.0, 6.0) # Normal g function used since inputs are floats # ╔═╡ 8688fe79-00ad-497f-a466-dc86af9e03b0 g() # Uses normal g function since there is no match for g that has a Int and a Float specified as inputs. # ╔═╡ 9440e0bc-7920-4b81-b88a-0b1046d24b4c g(5, 6) # Integer method used since inputs are both integers. # ╔═╡ 86c23c4e-ab5b-4404-b248-c980a4098676 md""" !!! note In Julia when an array is passed into a function the actual array gets passed in, not a copy. This means if array `x` is passed into `f(x)`, any changes made to the array will apply to `x` outside of the array. If you intend to modify the passed in array be sure to add a bang `!` to the end of function name to keep your code idiomatic. """ # ╔═╡ e239604f-2926-455b-a20c-0d9c283cc60a md""" ### Broadcasting Matlab generally does broadcasting for you which can be dangerous since sometimes its unclear what a function or operator will do when used on arrays. Julia uses the same `.` syntax to do broadcasting but it has to be used anytime you want broadcasting and is very powerful in Julia. all operators support broadcasting `.+ .* .^ .==` and even functions support broadcasting by placing the `.` at the end of the function name `sqrt.(b)`. This is awesome because you can write your function as you normally would for one number, and then if it needs to run on a vector Julia takes care of making your function into a very fast and efficient vectorized function! You can still make your own functions that take in vectors since there may be situations where you can write faster code. This means that almost no function in the Julia standard library accepts vectors unlike Matlab. Obviously functions like `maximum` that find the max value in an array take them, but functions like `sin`, `cos`, or `sqrt` all have to use the `.` syntax to work on vectors. """ # ╔═╡ 011bb616-3752-432f-adfd-edaecc083cf0 b = 1:5 # Ranges are similar to Matlab, but will discussed later in the text # ╔═╡ 6124f6b4-6315-4d74-9067-4553ce1d54bc sin(b) # gotta broadcast! # ╔═╡ 95e30983-f305-41aa-a1e2-f38fa0d0c1c3 sin.(b) # Nice! # ╔═╡ 384fe37e-a184-4c3f-8b25-3acfee485cfc b .^ 2 # broadcast operators # ╔═╡ 3738b701-1ac6-414e-b1c2-57a1b4a2f53e b .== b # Compares values element by element # ╔═╡ ae1134f5-b5cc-49a8-aee0-99ec118299f9 b == b # Compares the entire objects against eachother # ╔═╡ 3ef67004-2f85-4aa1-a1b5-5cbf62b292f7 md""" ### Strict Evaluation Matlab evaluates arrays when they are made which is very common in programming languages, but Julia lazily computes values. This means that when you create a range like `1:.1:10` it doesn't create an array immediatly but waits until the array is needed. This has many memory advantages and many functions in Julia use the same behavior. These lazy objects generally behave as arrays but if they don't the `collect` function will turn them into an array. """ # ╔═╡ 1025e3a8-59c9-4725-bc1a-a0b94e6bd6af 1:10 # ╔═╡ e3c28497-29e9-447e-aba0-650aaaa52d88 typeof(1:10) # ╔═╡ 4fd4f72d-45e0-4760-bc0b-5ebb78636e2c enumerate(1:.25:2) # returns an enumerate object # ╔═╡ cf125fe2-c754-4218-92c9-3f491f3109c1 collect(enumerate(1:.25:2)) # Returns an an array of tuples as expected # ╔═╡ 4802d903-e87c-4ef0-a184-e4ae7af69a28 md""" ### Random Small Differences #### Plotting Plots use very similar syntax to Matlab with the exception that there is no `hold` or `figure` keyword the bang `!` syntax is used to modify plots and if a plot method is called without a bang then it creates a new plot object. Its often best practice to wrap everything for a plot in a `begin` and `end` so that the whole plot runs in order every time. !!! warning Pluto only allows one "thing" per cell, but this is a Pluto quirk not Julia. So every cell needs a `begin` or `let` or `function` if there is more than one line but Pluto will also automatically do this for you. """ # ╔═╡ a4665e30-4c64-46d1-8349-a49f40763a0b plot(sin) # ╔═╡ 09303ffe-6cf8-4273-b697-9fbd7cb82cc1 plot(cos) # Makes a new plot! # ╔═╡ e3b51038-2e57-4a5a-9b5d-7bf7148d700b begin plot(sin, label="sin") plot!(cos, label="cos") title!("sin and cos functions") end # ╔═╡ 55e0d022-faca-40f8-a4a9-3a501eb5d19e plot!(atan, label="atan") # Returns a new plot with all the elements of the old plot. # ╔═╡ dc89d08d-29bf-4e04-8470-c79c88ab4689 md""" !!! note The Julia plotting library is massive and supports many frontends that are useful for various use cases such as printing in the terminal or making interactive plots for websites. """ # ╔═╡ b30e6f73-fe46-45e7-898e-dd1205dffe68 md""" #### Keyword Arguments Matlab uses an odd syntax where a string argument is passed before the value of the optional argument. Julia and most other languages allow passing in the optional keywords by the following syntax: ```julia plot(x, y, title="y data vs x data", label="Data") ``` #### Semicolons Julia doesn't automatically print script values except in certain circumstances like in Pluto or in the REPL. This means that lines do not need to be terminated with a semicolon in regular scripts. Semicolons can be used to combine multiple lines into one. `plot(sin); title!("sin function")` #### `...` Syntax Matlab uses `...` to continue lines of code. In Julia this is called the splat operator and is used to pass a collection into arguments of a function: ```julia xs = [1 2 3] # Following functions are identical! f(xs...) f(1, 2, 3) ``` If a line of code is multi line no additional syntax is needed, Julia is smart enough to know when a statement of code is complete. """ # ╔═╡ 916f5f09-1aa3-47a7-9c66-c42513eaccea md""" ## Things Julia Does Well There are a few ways that Julia really shines that make it perfect for engineering and science. Below are a few examples. ## Symbols Julia supports a wide variety of unicode symbols in the language that can be accessed with the syntax `\pi{tab}` to get π. This is a great way to make code closer to LaTex or handwritten examples which makes it easier to read or understand. * `\theta{tab}` θ * `q\bar{tab}` q̄ * `x\ddot{tab}` ẍ ## List Comprehension List comprehensions can be thought of single line for loops and can be very handy in a variety of scenarios. The syntax is: ```julia # Add 1 to each number in a list of numbers [number + 1 for number in numbers] ``` and would return a new list of numbers. List comprehensions are especially useful instead of one line for loops, or when you need to create an array to pass into a function. List comprehensions can be nested, and also support `if` in order to filter values making them extremely powerful: """ # ╔═╡ 2172de3a-7dba-4cbc-9c04-444db595c328 [x for x in 1:12 if x % 3 == 0] # ╔═╡ fd0f5cf6-c90b-4492-9c72-9e707803e736 md""" Since `append!` is usually very slow you can see below that using a list comprehension to create a vector is almost 10x faster. """ # ╔═╡ a2c7e472-2460-428e-bfec-acf925fad89d begin t = [] for i in 1:1e6 append!(t,i) end t end # ╔═╡ bce2eecc-dc01-4bf6-9eaa-880fd8a69768 [i for i in 1:1e6] # ╔═╡ a2df1c35-c0b2-45bb-86b7-57e208287392 md""" --- ### Units Julia has an unofficial units library that is incredibly powerful and much easier to use than Matlabs units functionality. It is simply import as `Unitful` """ # ╔═╡ 7b9b11f2-c6d3-4dab-ab30-6e47a3a4bfb3 md""" Making a value with a unit is as simple as using the `u` string macro like the following: """ # ╔═╡ 09bc71cd-7bc0-4d5a-bcf8-984abe273375 mass = 10u"lb" # ╔═╡ 744b7e78-0e5b-468d-98b1-a5511f7db311 gravity = 9.81u"m/s^2" # ╔═╡ ea6b28d5-f82b-4a21-9ca4-13215c6912b3 mass + gravity # The library automatically detects if units can be added to eachother. # ╔═╡ 871664ac-5a93-4718-ae1a-c9f59f6b8374 weight = mass * gravity # You can mix unit systems # ╔═╡ dd38ffe4-4efb-4571-b5b2-76b811901387 md""" You'll notice that the weight was left as a weird collection of units instead of automatically converting to `N` like we woule expect. This is usually the case but can easily be fixed by using Julias pipe operator, `|>`. !!! note "The Pipe Operator" The pipe operator, or `|>` is a great way to chain function calls in Julia. Using `x |> f` is the exact same as using `f(x)` but in many cases can be much clearer. ```julia inv(sum((x->x.^2 .+ 1)(1:10))) # Hard to read 1:10 |> x -> x.^2 .+ 1 |> sum |> inv # Easier to read ``` """ # ╔═╡ ade2979d-155e-4f20-82db-6da141bb8eaa weight |> u"N" # ╔═╡ 8d4de01a-197f-40cb-942f-bfec335e3844 md""" Units can also be stripped to give a normal number again. """ # ╔═╡ 86da848f-1e84-47c8-8a79-373f241b6025 ustrip(u"N", weight) # ╔═╡ dc898d32-b30b-4baa-a595-b83ccd1dc86d md""" # Everything below isn't close to being finished """ # ╔═╡ 9ea4584c-8177-4f69-9739-b2faa93281a8 md""" --- ### Matrix Math """ # ╔═╡ f43812d2-9f87-489a-9317-e7aa19ffd3bc md""" --- ### Custom Data Types """ # ╔═╡ f6d87354-ac46-4202-92f8-b39a0db13327 μ = 3.986004418e14u"m^3/s^2" # Standard Gravitational Parameter for Earth # ╔═╡ f8039870-2570-47d0-8d46-30922415ec9d earth_radius = 6378u"km" # ╔═╡ 863cd607-a459-49ae-9049-983f3374f523 abstract type Orbit end # ╔═╡ 44daff45-f608-47e3-ad6e-fca43532f322 struct Circular_Orbit <: Orbit """Simple 2d circular orbit""" r::typeof(.1u"km") # altitude end # ╔═╡ efb58b79-24e4-45c6-ad45-aeaa339d82fd ISS = Circular_Orbit(420u"km") # ╔═╡ ad3a2b19-5639-4d11-8d89-bc54772d639b struct Elliptic_Orbit <: Orbit """Simple 2d elliptic orbit""" r::typeof(.1u"km") # altitude a::typeof(.1u"km") # semimajor axis e::Float64 # eccentricity function Elliptic_Orbit(r, a, e) @assert e < 1 "Eccentricity must be less than 1!" @assert 0 < e "Eccentricity must be greater than 0!" new(r, a, e) end function Elliptic_Orbit(perigee, apogee) a = (perigee + apogee) / 2 e = 1 - (perigee/a) r = a*((1-e^2)/(1+e)) # Assume θ is 0 since we aren't keeping track of it Elliptic_Orbit(r,a,e) end end # ╔═╡ b4e08868-d48a-4f66-9d20-f45ea4d83f00 sat = Elliptic_Orbit(earth_radius+537.0u"km", earth_radius+9040.9u"km") # ╔═╡ 3efd8a29-6a56-4f5c-9cab-0f08875b2064 function get_velocity(o::Circular_Orbit) v = sqrt(μ/o.r) return v |> u"km/s" end # ╔═╡ 59207a25-fa6d-4369-979d-cd9cc2f094cf function get_velocity(o::Elliptic_Orbit) v = sqrt(μ*(2/o.r - 1/o.a)) return v |> u"km/s" end # ╔═╡ 11fb3a28-edf3-46ff-8c4a-5286793b6e43 get_velocity(ISS) # ╔═╡ 79a9ab94-06a8-4613-8f60-358e08f0f32e get_velocity(sat) # ╔═╡ c3d943b4-809d-4a96-a99d-be7653ba2c8b begin function Plots.plot(orbit::Elliptic_Orbit) a = orbit.a |> u"km" |> ustrip b = orbit.a*sqrt(1-orbit.e^2) |> u"km" |> ustrip t = 0:.01:2π x_orbit(t) = a*cos(t) y_orbit(t) = b*sin(t) plot(x_orbit, y_orbit, t) x_earth(t) = ustrip(earth_radius)*cos(t) + a*orbit.e y_earth(t) = ustrip(earth_radius)*sin(t) plot!(x_earth,y_earth, t, c=:gray,fill=(0,:blue), legend=false,aspect_ratio=:equal) title!("Satellite Orbiting Earth") end plot(sat) end # ╔═╡ 01ba1742-d26e-4271-ab62-0bd9ce5e291d function get_ΔV(start::Orbit, final::Orbit) get_velocity(start) - get_velocity(final) end # ╔═╡ ad4d24a8-f601-4522-a3eb-c01f6fd68aec get_ΔV(ISS,sat) # ╔═╡ 2d0de5db-5558-41e0-96d5-a3317d151aff # ╔═╡ 8924673f-e99c-44b3-be6d-2abf0b2f5e23 md""" --- ### Tabular Data """ # ╔═╡ c460478a-db52-4a15-a723-9ff64eed9aec # download_csv(url) = DataFrame(CSV.File(download(url))) download_csv(url) = url |> download |> CSV.File |> DataFrame # ╔═╡ 9ccbea0d-6463-4533-88a6-0267879eb263 F10 = download_csv("julia.ansonbiggs.com/AeroTech_F10.csv") # ╔═╡ 4ffebbb2-7021-4c08-82ac-95366dab3d48 G8 = download_csv("julia.ansonbiggs.com/AeroTech_G8ST.csv") # ╔═╡ 2e83292e-8e8c-43e4-82ee-951a2f6a98c1 F15 = download_csv("julia.ansonbiggs.com/Estes_F15.csv") # ╔═╡ c7e2a7f8-626f-45d8-b771-6f9e74a86bd8 let plot(title = "Rocket Motor Comparison", xlabel="Time (s)", ylabel="Thrust (N)") plot!(F10.Time, F10.Thrust,label="F10") plot!(G8.Time, G8.Thrust,label="G8") plot!(F15.Time, F15.Thrust,label="F15") end # ╔═╡ 8ec4af16-1a19-468e-b097-59985bf28f5c describe(F10) # ╔═╡ 9f886419-7259-442e-b068-d0e4c886a886 maximum.([F10.Thrust, G8.Thrust, F15.Thrust]) # ╔═╡ fbc06121-d53a-4a64-9497-63d7f3583fbb md""" ## Things Julia Does Poorly - Time to First Plot - Libraries - Still young and breaking things """ # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" [compat] CSV = "~0.8.5" DataFrames = "~1.2.0" FileIO = "~1.11.0" Plots = "~1.19.0" PlutoUI = "~0.7.9" Unitful = "~1.8.0" """ # ╔═╡ 00000000-0000-0000-0000-000000000002 PLUTO_MANIFEST_TOML_CONTENTS = """ # This file is machine-generated - editing it directly is not advised [[Adapt]] deps = ["LinearAlgebra"] git-tree-sha1 = "84918055d15b3114ede17ac6a7182f68870c16f7" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.3.1" [[ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" [[Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [[Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "c3598e525718abcc440f69cc6d5f60dda0a1b61e" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" version = "1.0.6+5" [[CSV]] deps = ["Dates", "Mmap", "Parsers", "PooledArrays", "SentinelArrays", "Tables", "Unicode"] git-tree-sha1 = "b83aa3f513be680454437a0eee21001607e5d983" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" version = "0.8.5" [[Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] git-tree-sha1 = "e2f47f6d8337369411569fd45ae5753ca10394c6" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.16.0+6" [[ColorSchemes]] deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"] git-tree-sha1 = "ed268efe58512df8c7e224d2e170afd76dd6a417" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" version = "3.13.0" [[ColorTypes]] deps = ["FixedPointNumbers", "Random"] git-tree-sha1 = "024fe24d83e4a5bf5fc80501a314ce0d1aa35597" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" version = "0.11.0" [[Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.12.8" [[Compat]] deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] git-tree-sha1 = "dc7dedc2c2aa9faf59a55c622760a25cbefbe941" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" version = "3.31.0" [[CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" [[ConstructionBase]] deps = ["LinearAlgebra"] git-tree-sha1 = "f74e9d5388b8620b4cee35d4c5a618dd4dc547f4" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.3.0" [[Contour]] deps = ["StaticArrays"] git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" version = "0.5.7" [[Crayons]] git-tree-sha1 = "3f71217b538d7aaee0b69ab47d9b7724ca8afa0d" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" version = "4.0.4" [[DataAPI]] git-tree-sha1 = "ee400abb2298bd13bfc3df1c412ed228061a2385" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.7.0" [[DataFrames]] deps = ["Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrettyTables", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] git-tree-sha1 = "1dadfca11c0e08e03ab15b63aaeda55266754bad" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" version = "1.2.0" [[DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] git-tree-sha1 = "4437b64df1e0adccc3e5d1adbc3ac741095e4677" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" version = "0.18.9" [[DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" version = "1.0.0" [[Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[DelimitedFiles]] deps = ["Mmap"] uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" [[Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[Downloads]] deps = ["ArgTools", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" [[EarCut_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "92d8f9f208637e8d2d28c664051a00569c01493d" uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" version = "2.1.5+1" [[Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "b3bfd02e98aedfa5cf885665493c5598c350cd2f" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" version = "2.2.10+0" [[FFMPEG]] deps = ["FFMPEG_jll"] git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" version = "0.4.1" [[FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] git-tree-sha1 = "3cc57ad0a213808473eafef4845a74766242e05f" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" version = "4.3.1+4" [[FileIO]] deps = ["Pkg", "Requires", "UUIDs"] git-tree-sha1 = "937c29268e405b6808d958a9ac41bfe1a31b08e7" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" version = "1.11.0" [[FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.4" [[Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] git-tree-sha1 = "35895cf184ceaab11fd778b4590144034a167a2f" uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" version = "2.13.1+14" [[Formatting]] deps = ["Printf"] git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" [[FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "cbd58c9deb1d304f5a245a0b7eb841a2560cfec6" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" version = "2.10.1+5" [[FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" uuid = "559328eb-81f9-559d-9380-de523a88c83c" version = "1.0.10+0" [[Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" [[GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] git-tree-sha1 = "dba1e8614e98949abfa60480b13653813d8f0157" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" version = "3.3.5+0" [[GR]] deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] git-tree-sha1 = "b83e3125048a9c3158cbb7ca423790c7b1b57bea" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.57.5" [[GR_jll]] deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] git-tree-sha1 = "e14907859a1d3aee73a019e7b3c98e9e7b8b5b3e" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" version = "0.57.3+0" [[GeometryBasics]] deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] git-tree-sha1 = "15ff9a14b9e1218958d3530cc288cf31465d9ae2" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" version = "0.3.13" [[Gettext_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" version = "0.21.0+0" [[Glib_jll]] deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"] git-tree-sha1 = "47ce50b742921377301e15005c96e979574e130b" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" version = "2.68.1+0" [[Grisu]] git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" version = "1.0.2" [[HTTP]] deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"] git-tree-sha1 = "c6a1fff2fd4b1da29d3dccaffb1e1001244d844e" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" version = "0.9.12" [[IniFile]] deps = ["Test"] git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8" uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" version = "0.5.0" [[InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [[InvertedIndices]] deps = ["Test"] git-tree-sha1 = "15732c475062348b0165684ffe28e85ea8396afc" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" version = "1.0.0" [[IterTools]] git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" version = "1.3.0" [[IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" [[JLLWrappers]] deps = ["Preferences"] git-tree-sha1 = "642a199af8b68253517b80bd3bfd17eb4e84df6e" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" version = "1.3.0" [[JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] git-tree-sha1 = "81690084b6198a2e1da36fcfda16eeca9f9f24e4" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.1" [[JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "d735490ac75c5cb9f1b00d8b5509c11984dc6943" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "2.1.0+0" [[LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" version = "3.100.1+0" [[LZO_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" version = "2.10.1+0" [[LaTeXStrings]] git-tree-sha1 = "c7f1c695e06c01b95a67f0cd1d34994f3e7db104" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" version = "1.2.1" [[Latexify]] deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "Printf", "Requires"] git-tree-sha1 = "a4b12a1bd2ebade87891ab7e36fdbce582301a92" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.15.6" [[LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" [[LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" [[LibGit2]] deps = ["Base64", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" [[LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" [[LibVPX_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "12ee7e23fa4d18361e7c2cde8f8337d4c3101bc7" uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a" version = "1.10.0+0" [[Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[Libffi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "761a393aeccd6aa92ec3515e428c26bf99575b3b" uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" version = "3.2.2+0" [[Libgcrypt_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" version = "1.8.7+0" [[Libglvnd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf" uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" version = "1.3.0+3" [[Libgpg_error_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" version = "1.42.0+0" [[Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" version = "1.16.1+1" [[Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" version = "2.35.0+0" [[Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] git-tree-sha1 = "340e257aada13f95f98ee352d316c3bed37c8ab9" uuid = "89763e89-9b03-5906-acba-b20f662cd828" version = "4.3.0+0" [[Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" version = "2.36.0+0" [[LinearAlgebra]] deps = ["Libdl"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[MacroTools]] deps = ["Markdown", "Random"] git-tree-sha1 = "6a8a2a625ab0dea913aba95c11370589e0239ff0" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.6" [[Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" [[MbedTLS]] deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe" uuid = "739be429-bea8-5141-9913-cc70e7f3736d" version = "1.0.3" [[MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" [[Measures]] git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" version = "0.3.1" [[Missings]] deps = ["DataAPI"] git-tree-sha1 = "4ea90bd5d3985ae1f9a908bd4500ae88921c5ce7" uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" version = "1.0.0" [[Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" [[NaNMath]] git-tree-sha1 = "bfe47e760d60b82b66b61d2d44128b62e3a369fb" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "0.3.5" [[NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" [[Ogg_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "7937eda4681660b4d6aeeecc2f7e1c81c8ee4e2f" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" version = "1.3.5+0" [[OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "15003dcb7d8db3c6c857fda14891a539a8f2705a" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "1.1.10+0" [[Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" uuid = "91d4177d-7536-5919-b921-800302f37372" version = "1.3.2+0" [[OrderedCollections]] git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.4.1" [[PCRE_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" version = "8.44.0+0" [[Parsers]] deps = ["Dates"] git-tree-sha1 = "c8abc88faa3f7a3950832ac5d6e690881590d6dc" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "1.1.0" [[Pixman_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.40.1+0" [[Pkg]] deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" [[PlotThemes]] deps = ["PlotUtils", "Requires", "Statistics"] git-tree-sha1 = "a3a964ce9dc7898193536002a6dd892b1b5a6f1d" uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" version = "2.0.1" [[PlotUtils]] deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"] git-tree-sha1 = "501c20a63a34ac1d015d5304da0e645f42d91c9f" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" version = "1.0.11" [[Plots]] deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "JSON", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"] git-tree-sha1 = "83c762ddea05f5554e1b04f4a5ecae61990ccc8e" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.19.0" [[PlutoUI]] deps = ["Base64", "Dates", "InteractiveUtils", "JSON", "Logging", "Markdown", "Random", "Reexport", "Suppressor"] git-tree-sha1 = "44e225d5837e2a2345e69a1d1e01ac2443ff9fcb" uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" version = "0.7.9" [[PooledArrays]] deps = ["DataAPI", "Future"] git-tree-sha1 = "cde4ce9d6f33219465b55162811d8de8139c0414" uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" version = "1.2.1" [[Preferences]] deps = ["TOML"] git-tree-sha1 = "00cfd92944ca9c760982747e9a1d0d5d86ab1e5a" uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.2.2" [[PrettyTables]] deps = ["Crayons", "Formatting", "Markdown", "Reexport", "Tables"] git-tree-sha1 = "0d1245a357cc61c8cd61934c07447aa569ff22e6" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" version = "1.1.0" [[Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" [[Qt5Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] git-tree-sha1 = "ad368663a5e20dbb8d6dc2fddeefe4dae0781ae8" uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" version = "5.15.3+0" [[REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[Random]] deps = ["Serialization"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[RecipesBase]] git-tree-sha1 = "b3fb709f3c97bfc6e948be68beeecb55a0b340ae" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" version = "1.1.1" [[RecipesPipeline]] deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"] git-tree-sha1 = "2a7a2469ed5d94a98dea0e85c46fa653d76be0cd" uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" version = "0.3.4" [[Reexport]] git-tree-sha1 = "5f6c21241f0f655da3952fd60aa18477cf96c220" uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "1.1.0" [[Requires]] deps = ["UUIDs"] git-tree-sha1 = "4036a3bd08ac7e968e27c203d45f5fff15020621" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.1.3" [[SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" [[Scratch]] deps = ["Dates"] git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" uuid = "6c6a2e73-6563-6170-7368-637461726353" version = "1.1.0" [[SentinelArrays]] deps = ["Dates", "Random"] git-tree-sha1 = "ffae887d0f0222a19c406a11c3831776d1383e3d" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" version = "1.3.3" [[Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[SharedArrays]] deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" [[Showoff]] deps = ["Dates", "Grisu"] git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" [[Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" [[SortingAlgorithms]] deps = ["DataStructures"] git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.0.1" [[SparseArrays]] deps = ["LinearAlgebra", "Random"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[StaticArrays]] deps = ["LinearAlgebra", "Random", "Statistics"] git-tree-sha1 = "a43a7b58a6e7dc933b2fa2e0ca653ccf8bb8fd0e" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.2.6" [[Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [[StatsAPI]] git-tree-sha1 = "1958272568dc176a1d881acb797beb909c785510" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" version = "1.0.0" [[StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] git-tree-sha1 = "2f6792d523d7448bbe2fec99eca9218f06cc746d" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.33.8" [[StructArrays]] deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] git-tree-sha1 = "000e168f5cc9aded17b6999a560b7c11dda69095" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" version = "0.6.0" [[Suppressor]] git-tree-sha1 = "a819d77f31f83e5792a76081eee1ea6342ab8787" uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" version = "0.2.0" [[TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" [[TableTraits]] deps = ["IteratorInterfaceExtensions"] git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" version = "1.0.1" [[Tables]] deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] git-tree-sha1 = "8ed4a3ea724dac32670b062be3ef1c1de6773ae8" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" version = "1.4.4" [[Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" [[Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[URIs]] git-tree-sha1 = "97bbe755a53fe859669cd907f2d96aee8d2c1355" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" version = "1.3.0" [[UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [[Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[Unitful]] deps = ["ConstructionBase", "Dates", "LinearAlgebra", "Random"] git-tree-sha1 = "b3682a0559219355f1e3c8024e9f97adce2d4623" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" version = "1.8.0" [[Wayland_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] git-tree-sha1 = "3e61f0b86f90dacb0bc0e73a0c5a83f6a8636e23" uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" version = "1.19.0+0" [[Wayland_protocols_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll"] git-tree-sha1 = "2839f1c1296940218e35df0bbb220f2a79686670" uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" version = "1.18.0+4" [[XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] git-tree-sha1 = "1acf5bdf07aa0907e0a37d3718bb88d4b687b74a" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" version = "2.9.12+0" [[XSLT_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" uuid = "aed1982a-8fda-507f-9586-7b0439959a61" version = "1.1.34+0" [[Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" version = "1.6.9+4" [[Xorg_libXau_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" version = "1.0.9+4" [[Xorg_libXcursor_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" version = "1.2.0+4" [[Xorg_libXdmcp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" version = "1.1.3+4" [[Xorg_libXext_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" version = "1.3.4+4" [[Xorg_libXfixes_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" version = "5.0.3+4" [[Xorg_libXi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" version = "1.7.10+4" [[Xorg_libXinerama_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" version = "1.1.4+4" [[Xorg_libXrandr_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" version = "1.5.2+4" [[Xorg_libXrender_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" version = "0.9.10+4" [[Xorg_libpthread_stubs_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" version = "0.1.0+3" [[Xorg_libxcb_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" version = "1.13.0+3" [[Xorg_libxkbfile_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2" uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" version = "1.1.0+4" [[Xorg_xcb_util_image_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" version = "0.4.0+1" [[Xorg_xcb_util_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" version = "0.4.0+1" [[Xorg_xcb_util_keysyms_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" version = "0.4.0+1" [[Xorg_xcb_util_renderutil_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" version = "0.3.9+1" [[Xorg_xcb_util_wm_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" version = "0.4.1+1" [[Xorg_xkbcomp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"] git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b" uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" version = "1.4.2+4" [[Xorg_xkeyboard_config_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"] git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d" uuid = "33bec58e-1273-512f-9401-5d533626f822" version = "2.27.0+4" [[Xorg_xtrans_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" version = "1.4.0+3" [[Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" [[Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "cc4bf3fdde8b7e3e9fa0351bdeedba1cf3b7f6e6" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.0+0" [[libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "acc685bcf777b2202a904cdcb49ad34c2fa1880c" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.14.0+4" [[libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "7a5780a0d9c6864184b3a2eeeb833a0c871f00ab" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" version = "0.1.6+4" [[libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" version = "1.6.38+0" [[libvorbis_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] git-tree-sha1 = "c45f4e40e7aafe9d086379e5578947ec8b95a8fb" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" version = "1.3.7+0" [[nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" [[p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" [[x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "d713c1ce4deac133e3334ee12f4adff07f81778f" uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" version = "2020.7.14+2" [[x265_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "487da2f8f2f0c8ee0e83f39d13037d6bbf0a45ab" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" version = "3.0.0+3" [[xkbcommon_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] git-tree-sha1 = "ece2350174195bb31de1a63bea3a41ae1aa593b6" uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" version = "0.9.1+5" """ # ╔═╡ Cell order: # ╟─bb461e00-c0aa-11eb-2c7d-1bd1591779c6 # ╟─307cbf7a-1ac5-47a5-8031-3458f9dd1887 # ╟─11ed58ac-1289-4b64-88a8-17cb7f0b6cd2 # ╠═7d7820ff-c0f5-41ee-be29-5006e7f4361d # ╟─16a7201a-4ce0-4102-9874-96733514ef08 # ╟─3cad3f5f-f6a5-405b-aeb0-495ebd8cca45 # ╠═0a4dc275-04b3-43e3-8a0d-cb921d769a0a # ╠═193c6a29-4f53-4c96-acc7-b5359043b471 # ╠═6fa90db6-9d2b-47bc-9f41-925b447912e8 # ╠═58c883b6-3682-424d-a1e9-8ac561bb0dbf # ╟─a74e7cad-8dae-41cd-b77a-65ba082956a3 # ╠═f4d655a2-8539-43f7-9356-56a3e3f9de91 # ╠═289727e4-fb29-4ba8-97c5-cce62da725bc # ╠═ec37197c-f18e-48c2-8266-867e28cfc138 # ╟─7fc003bb-bf1f-42fa-94c7-c7e778edda61 # ╠═3c921f2d-3972-4b88-990d-36ced0764bc5 # ╠═b7ae33bc-5edd-4741-a578-d210521b1698 # ╠═75eeaff0-4fd3-4745-b042-af8ba12a0506 # ╠═8688fe79-00ad-497f-a466-dc86af9e03b0 # ╠═9440e0bc-7920-4b81-b88a-0b1046d24b4c # ╟─86c23c4e-ab5b-4404-b248-c980a4098676 # ╟─e239604f-2926-455b-a20c-0d9c283cc60a # ╠═011bb616-3752-432f-adfd-edaecc083cf0 # ╠═6124f6b4-6315-4d74-9067-4553ce1d54bc # ╠═95e30983-f305-41aa-a1e2-f38fa0d0c1c3 # ╠═384fe37e-a184-4c3f-8b25-3acfee485cfc # ╠═3738b701-1ac6-414e-b1c2-57a1b4a2f53e # ╠═ae1134f5-b5cc-49a8-aee0-99ec118299f9 # ╟─3ef67004-2f85-4aa1-a1b5-5cbf62b292f7 # ╠═1025e3a8-59c9-4725-bc1a-a0b94e6bd6af # ╠═e3c28497-29e9-447e-aba0-650aaaa52d88 # ╠═4fd4f72d-45e0-4760-bc0b-5ebb78636e2c # ╠═cf125fe2-c754-4218-92c9-3f491f3109c1 # ╟─4802d903-e87c-4ef0-a184-e4ae7af69a28 # ╠═52819547-9593-446a-91e7-a08e08723e66 # ╠═a4665e30-4c64-46d1-8349-a49f40763a0b # ╠═09303ffe-6cf8-4273-b697-9fbd7cb82cc1 # ╠═e3b51038-2e57-4a5a-9b5d-7bf7148d700b # ╠═55e0d022-faca-40f8-a4a9-3a501eb5d19e # ╟─dc89d08d-29bf-4e04-8470-c79c88ab4689 # ╟─b30e6f73-fe46-45e7-898e-dd1205dffe68 # ╟─916f5f09-1aa3-47a7-9c66-c42513eaccea # ╠═2172de3a-7dba-4cbc-9c04-444db595c328 # ╟─fd0f5cf6-c90b-4492-9c72-9e707803e736 # ╠═a2c7e472-2460-428e-bfec-acf925fad89d # ╠═bce2eecc-dc01-4bf6-9eaa-880fd8a69768 # ╟─a2df1c35-c0b2-45bb-86b7-57e208287392 # ╠═3228a21e-cab8-4738-bdc5-a6827c764c06 # ╟─7b9b11f2-c6d3-4dab-ab30-6e47a3a4bfb3 # ╠═09bc71cd-7bc0-4d5a-bcf8-984abe273375 # ╠═744b7e78-0e5b-468d-98b1-a5511f7db311 # ╠═ea6b28d5-f82b-4a21-9ca4-13215c6912b3 # ╠═871664ac-5a93-4718-ae1a-c9f59f6b8374 # ╟─dd38ffe4-4efb-4571-b5b2-76b811901387 # ╠═ade2979d-155e-4f20-82db-6da141bb8eaa # ╟─8d4de01a-197f-40cb-942f-bfec335e3844 # ╠═86da848f-1e84-47c8-8a79-373f241b6025 # ╟─dc898d32-b30b-4baa-a595-b83ccd1dc86d # ╠═9ea4584c-8177-4f69-9739-b2faa93281a8 # ╠═f43812d2-9f87-489a-9317-e7aa19ffd3bc # ╠═f6d87354-ac46-4202-92f8-b39a0db13327 # ╠═f8039870-2570-47d0-8d46-30922415ec9d # ╠═863cd607-a459-49ae-9049-983f3374f523 # ╠═44daff45-f608-47e3-ad6e-fca43532f322 # ╠═efb58b79-24e4-45c6-ad45-aeaa339d82fd # ╠═ad3a2b19-5639-4d11-8d89-bc54772d639b # ╠═b4e08868-d48a-4f66-9d20-f45ea4d83f00 # ╠═3efd8a29-6a56-4f5c-9cab-0f08875b2064 # ╠═59207a25-fa6d-4369-979d-cd9cc2f094cf # ╠═11fb3a28-edf3-46ff-8c4a-5286793b6e43 # ╠═79a9ab94-06a8-4613-8f60-358e08f0f32e # ╠═c3d943b4-809d-4a96-a99d-be7653ba2c8b # ╠═01ba1742-d26e-4271-ab62-0bd9ce5e291d # ╠═ad4d24a8-f601-4522-a3eb-c01f6fd68aec # ╠═2d0de5db-5558-41e0-96d5-a3317d151aff # ╠═8924673f-e99c-44b3-be6d-2abf0b2f5e23 # ╠═3f7ae2df-9d4d-46d3-b12e-22107a560b66 # ╠═c460478a-db52-4a15-a723-9ff64eed9aec # ╠═9ccbea0d-6463-4533-88a6-0267879eb263 # ╠═4ffebbb2-7021-4c08-82ac-95366dab3d48 # ╠═2e83292e-8e8c-43e4-82ee-951a2f6a98c1 # ╠═c7e2a7f8-626f-45d8-b771-6f9e74a86bd8 # ╠═8ec4af16-1a19-468e-b097-59985bf28f5c # ╠═9f886419-7259-442e-b068-d0e4c886a886 # ╠═fbc06121-d53a-4a64-9497-63d7f3583fbb # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002