Manipulate a function

Tutorial by Tobias Thummerer, Johannes Stoljar

🚧 This tutorial is under revision and will be replaced by an up-to-date version soon 🚧

License

# Copyright (c) 2021 Tobias Thummerer, Lars Mikelsons, Josef Kircher, Johannes Stoljar
# Licensed under the MIT license. 
# See LICENSE (https://github.com/thummeto/FMI.jl/blob/main/LICENSE) file in the project root for details.

Introduction to the example

This example shows how to overwrite a FMI function with a custom C-function. For this the FMU model is simulated first without changes. Then the function fmi2GetReal() is overwritten and simulated again. Both simulations are displayed in a graph to show the change caused by overwriting the function. The model used is a one-dimensional spring pendulum with friction. The object-orientated structure of the SpringFrictionPendulum1D can be seen in the following graphic.

svg

Other formats

Besides, this Jupyter Notebook there is also a Julia file with the same name, which contains only the code cells and for the documentation there is a Markdown file corresponding to the notebook.

Code section

To run the example, the previously installed packages must be included.

# imports
using FMI
using FMI: fmi2SetFctGetReal
using FMIZoo
using FMICore
using Plots
using DifferentialEquations # for auto solver detection
┌ Warning: Error requiring `FMIImport` from `FMIZoo`
│   exception =
│    UndefVarError: `fmi2Load` not defined
│    Stacktrace:
│      [1] getproperty(x::Module, f::Symbol)
│        @ Base .\Base.jl:31
│      [2] top-level scope
│        @ C:\Users\runneradmin\.julia\packages\FMIZoo\Yw7SL\src\FMIZoo.jl:46
│      [3] eval
│        @ .\boot.jl:385 [inlined]
│      [4] eval
│        @ C:\Users\runneradmin\.julia\packages\FMIZoo\Yw7SL\src\FMIZoo.jl:6 [inlined]
│      [5] (::FMIZoo.var"#14#20")()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:101
│      [6] macro expansion
│        @ timing.jl:395 [inlined]
│      [7] err(f::Any, listener::Module, modname::String, file::String, line::Any)
│        @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:47
│      [8] (::FMIZoo.var"#13#19")()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:100
│      [9] withpath(f::Any, path::String)
│        @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:37
│     [10] (::FMIZoo.var"#12#18")()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:99
│     [11] listenpkg(f::Any, pkg::Base.PkgId)
│        @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:20
│     [12] macro expansion
│        @ C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:98 [inlined]
│     [13] __init__()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\FMIZoo\Yw7SL\src\FMIZoo.jl:42
│     [14] run_module_init(mod::Module, i::Int64)
│        @ Base .\loading.jl:1197
│     [15] register_restored_modules(sv::Core.SimpleVector, pkg::Base.PkgId, path::String)
│        @ Base .\loading.jl:1185
│     [16] _include_from_serialized(pkg::Base.PkgId, path::String, ocachepath::String, depmods::Vector{Any})
│        @ Base .\loading.jl:1129
│     [17] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String, build_id::UInt128)
│        @ Base .\loading.jl:1655
│     [18] _require(pkg::Base.PkgId, env::String)
│        @ Base .\loading.jl:2012
│     [19] __require_prelocked(uuidkey::Base.PkgId, env::String)
│        @ Base .\loading.jl:1886
│     [20] #invoke_in_world#3
│        @ .\essentials.jl:926 [inlined]
│     [21] invoke_in_world
│        @ .\essentials.jl:923 [inlined]
│     [22] _require_prelocked(uuidkey::Base.PkgId, env::String)
│        @ Base .\loading.jl:1877
│     [23] macro expansion
│        @ .\loading.jl:1864 [inlined]
│     [24] macro expansion
│        @ .\lock.jl:270 [inlined]
│     [25] __require(into::Module, mod::Symbol)
│        @ Base .\loading.jl:1827
│     [26] #invoke_in_world#3
│        @ .\essentials.jl:926 [inlined]
│     [27] invoke_in_world
│        @ .\essentials.jl:923 [inlined]
│     [28] require(into::Module, mod::Symbol)
│        @ Base .\loading.jl:1820
│     [29] eval
│        @ .\boot.jl:385 [inlined]
│     [30] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
│        @ Base .\loading.jl:2160
│     [31] execute_request(socket::ZMQ.Socket, kernel::IJulia.Kernel, msg::IJulia.Msg)
│        @ IJulia C:\Users\runneradmin\.julia\packages\IJulia\Vl5w1\src\execute_request.jl:129
│     [32] #invokelatest#2
│        @ .\essentials.jl:892 [inlined]
│     [33] invokelatest
│        @ .\essentials.jl:889 [inlined]
│     [34] eventloop(socket::ZMQ.Socket, kernel::IJulia.Kernel)
│        @ IJulia C:\Users\runneradmin\.julia\packages\IJulia\Vl5w1\src\eventloop.jl:26
│     [35] (::IJulia.var"#40#43"{IJulia.Kernel})()
│        @ IJulia C:\Users\runneradmin\.julia\packages\IJulia\Vl5w1\src\eventloop.jl:71
└ @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:51

Simulation setup

Next, the start time and end time of the simulation are set.

tStart = 0.0
tStop = 8.0
8.0

Import FMU

Next, the FMU model from FMIZoo.jl is loaded.

# we use an FMU from the FMIZoo.jl
fmu = loadFMU("SpringFrictionPendulum1D", "Dymola", "2022x"; type=:ME)
Model name:	SpringFrictionPendulum1D
Type:		0

Simulate FMU

In the next steps the recorded value is defined. The recorded value is the position of the mass. In the function simulateME() the FMU is simulated in model-exchange mode (ME) with an adaptive step size. In addition, the start and end time and the recorded variables are specified.

# an array of value references... or just one
vrs = ["mass.s"]

simData = simulate(fmu, (tStart, tStop); recordValues=vrs)
Simulating ME-FMU ...   0%|█                             |  ETA: N/A

Simulating ME-FMU ...   0%|█                             |  ETA: N/A

Simulating ME-FMU ... 100%|██████████████████████████████| Time: 0:00:07





Model name:
	SpringFrictionPendulum1D
Success:
	true
f(x)-Evaluations:
	In-place: 439
	Out-of-place: 0
Jacobian-Evaluations:
	∂ẋ_∂p: 0
	∂ẋ_∂x: 0
	∂ẋ_∂u: 0
	∂y_∂p: 0
	∂y_∂x: 0
	∂y_∂u: 0
	∂e_∂p: 0
	∂e_∂x: 0
	∂e_∂u: 0
	∂xr_∂xl: 0
Gradient-Evaluations:
	∂ẋ_∂t: 0
	∂y_∂t: 0
	∂e_∂t: 0
Callback-Evaluations:
	Condition (event-indicators): 666
	Time-Choice (event-instances): 0
	Affect (event-handling): 6
	Save values: 46
	Steps completed: 46
States [46]:
	0.0	[0.5, 0.0]
	2.352941176471972e-11	[0.5, 1.0e-10]
	0.002306805098500577	[0.50001131604032, 0.009814511243574901]
	0.017671223302467173	[0.500666989145529, 0.07566472355097752]
	0.05336453040764681	[0.5061289098366911, 0.23069249511360376]
	0.1184474059074749	[0.5303427356080991, 0.5120833959919191]
	0.1848453912296851	[0.5734637072149397, 0.782680751659161]
	0.2717770318313012	[0.6552396623997402, 1.0873036051683178]
	0.36945081800930646	[0.7743876782686996, 1.3331362624281358]
	...
	8.0	[1.0668036416924662, -1.0000039742283331e-10]
Values [46]:
	0.0	(0.5,)
	2.352941176471972e-11	(0.5,)
	0.002306805098500577	(0.50001131604032,)
	0.017671223302467173	(0.500666989145529,)
	0.05336453040764681	(0.5061289098366911,)
	0.1184474059074749	(0.5303427356080991,)
	0.1848453912296851	(0.5734637072149397,)
	0.2717770318313012	(0.6552396623997402,)
	0.36945081800930646	(0.7743876782686996,)
	...
	8.0	(1.0668036416924662,)
Events [6]:
	State-Event #11 @ 2.352941176471972e-11s (state-change: false)
	State-Event #11 @ 0.9940987965831365s (state-change: false)
	State-Event #19 @ 1.9883957668475916s (state-change: false)
	State-Event #11 @ 2.9832978886371557s (state-change: false)
	State-Event #19 @ 3.9789937954129146s (state-change: false)
	State-Event #11 @ 4.976922554045545s (state-change: false)

Plotting FMU

After the simulation is finished, the result of the FMU for the model-exchange mode can be plotted. In the plot for the FMU it can be seen that the oscillation continues to decrease due to the effect of the friction. If you simulate long enough, the oscillation comes to a standstill in a certain time.

fig = plot(simData, states=false)

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeUBU5fo48OfMwi4MIKuyKMpmiQuKIpr7mkvZTa+W5XJzu5p29Wdf09K01LLMa2ll5ZKmWWqlZl6XNEBzA9wFERAQ2WFgYFhmzvv7Y3JCYGCWs848n79sGs55Zs6Z85z3Pe/7vBQhBBBCCCFbJeE7AIQQQohPmAgRQgjZNEyECCGEbBomQoQQQjYNEyFCCCGbhokQIYSQTcNEiBBCyKZhIkQIIWTTMBEihBCyaZgIEUII2TQeEmFiYuLBgweNf79Wq2UvGGQMQghN03xHYevwh8A7/CEIARs/BB4S4dWrV//44w/j319dXc1eMMgYNE3X1tbyHYWtwx8C72iarqmp4TsKW8fGDwG7RhFCCNk0TIQIIYRsGiZChBBCNg0TIUIIIZuGiRAhhJBNw0SIEELIpmEiRAghZNMwESKEELJpIkiEo0Y5lZXxHYS56mmIXkCPWiHiahSFhTB8uAjOkxa89hr8+SffQVjg9m2YPJnvICyzciX8/DPfQSBkgIzvAFqXlSWpqgJ3d77jMF0dDZPPaJUl1P1C+N9DMrwdxXdE5lCpICtLlJHr5eVBSQnfQVigrAxyc/kOwjL5+VBUxNjWMjIyyvi4O6Zpuq6uzsHBgftdIwCIjIx0dHRkY8siSIQiVUfDpNPaepq80EFaTJNXz2mSn5P7sHIQEbItI0aMcHBwsLe3537XhBCKEvd9oUg9ePBg48aNr7zyChsbx0TIijoa/nFaayeBA0Nkq+Mh2IV6pbNk+h+aYyNk+BtCyEJarfaXX37p0KED34Eg7syaNUuj0bC0cXE/+xGmGi2M+5/GSQb7Bknlj7/gd3tKi9Tw5V0RPyxECCGrZGwi/OSTT0aMGBESEvLtt9+28Da1Wh0XFzdixAgmYvvL0qW13t4Mbo91X6fSFMCegVKZBABgzBgYMQLkEtg7SLryivZuOeE7QNP4+cGyZeLO39OnQ/fufAdhgfBwmDeP7yAs8+KLEBfHdxAIGWBsIpRKpTNmzGjbtq1SqWzhbatWraIoKpfRJ/szZtTb2TG4PdadfEimdZZIH/eB9u0L0dEAAKFu1Npo6dSz2jpRpRVHR5g5U2TJu5GJE8Hfn+8gLODpCVOm8B2EZYYNg/BwvoNAyABjE+GCBQsmTZrk6urawnuSk5Pj4+P//e9/MxGYWGkJxOfTg/yb/2JfC5eEtKFWXsEVVhFCSCgYe0ZYV1c3Y8aMzz77TCqVtvxOQkhtbW3ZY+Xl5UzFIARXikh7Z8rX8OjQL+Kk32eQ03nibmMhhJDVYGzU6Nq1a0ePHt29e/f79++3/M7bt2/v2rXr+++/179y4sSJyMhIQ+9fvx4WLVKxM3uEeb9myQZ4gUr19zLWZ89K7ewgNvavVqAcYEu05JWz8vMj6zzsRJAOq6upL76Qzpmj0mrF2pDdu1ceF6cNChJVl3QDBQXUkSOyyZOrxDtw/8gRWVAQ3bUrM4eAEBH8cBDjamtrVSpVVZVpPwQnJyeJpJUmHzOJMDMzc+vWrTt37jx16tSNGzeqqqpOnTr1zDPPyOXypm/u0qXL7NmzN2/ebOTGd+0ic+dSXl6MRMq6+CLNf7pKXVz+nnL755/g6AjDh//9nrGd4FyJdlGSw6GhrbSehaCwEHbuhCVLCEtTWTlw5Ai0bw9duvAdh7muXYMff4SZM51dXFz4jsVMZ85ATAzExjKzNfHeEHCgvLz8559/1s2302g0aWlp1dXVHTp08PT01L+npKQkMzPTyckpNDRUJvsrC1RWVurnJ0ilUt2DMI1GU1lZqf9DZ2dnuyeHbFRUVEilUmdn54Yv1tfXq1QqV1dXfQdhRkZGSUmJt7d3UFCQ/m11dXVpaWkAEBYWpk8We/fuHTFiRNu2bZt+NHt7excXF0II4z8EZrpG1Wp19+7dN2/evGHDhp9++qm4uHjDhg01NTWt/6V1qdHClWLS37f1X+l70dLMSvJNmljbKAghYVq7dm1FRYXu376+vpMmTXr99dc7duy4YsUK3YtffPFFeHj466+/Pn78+NDQ0Fu3buleHzZsWGBgYEhISEhIyLhx43QvJiYmenl5hTx29OjRhvu6fPmyp6fnzJkzG8XwyiuveHh4pKSk6P5z3Lhxw4cPX7RoUa9evcaMGaNLDYcOHfLz85s8efKkSZNCQkIuXbqke3NVVdXq1auZ/15aZGwizMzMvHr1akVFRU5OztWrV3X1jS5evDh16lQAiIyMPPnYypUrg4KCTp482aZNGxYDF6T4fBLlSbk20wxuzF4K3w2SvnlJm6bETh6ErIc+CQFAdXV1o15cmqarqqoa/QkhpOlQCaVSSdMGb5TLy8ub7R8uLy/fvXv39OnTdf+ZkZFx48aNxMTEy5cvr1u3LiMjAwCmTp1aWFiYmJh47969YcOGvf322/o/P3DgQGlpaWlp6dmzZ/UvRkZGlj72/PPP61+vq6ubO3fuhAkTGsVw9OjR+vr6hh1Ie/bsSU9PT0xMzMrKSktL279/PwCEhIQkJyffvHnz1q1bL7300oIFC3RvnjZt2oEDB4oYrMhnBGMT4f79+998801XV9ekpKQ333zzxo0b0KTVrOPj49O3b1+GwxSJ03n0YD9jO20iFNSqHtKZ8WJ98IYQ0nvrrbfmzJkTExMTHh4eERGRmpr63HPPhYWFtWvXTt/WmTBhQmBgYNeuXcPDw8+fP6978b333vP19Y2NjfX39//hhx8AYN++fe3atevbt2/79u3fe++9Rjv6+uuv/fz8YmNj27Vr1/QB06FDh2JjY/U9h/px/n5+fnK5XJdZXVxc9H3LAQEBDROqSqXKzc1tmoBzc3ObTpxbu3btuHHjujz5yEGpVC5btuyTTz5p+KI+DCcnJ09PT90eo6KiAgMDda/37ds3Pz9f928HB4eBAwcePHiw8VfMJmOfEf7f//3f//3f/zV6sV+/fr/88kujF/v379+/f38GQhOh0w/Jx31MeOw3J0Ly1hVtoRq8xfr0DSFBSFOSbBV3u/Nzgi7uT9zyqtXqo0ePXrx4sV27di+99FL//v2PHj3au3fvjz766O233/7tt98AYN26dREREQBw5MiRmTNn3rlzp7S0dP369Tk5OQqFor6+XtcuXLJkybFjx7p160YI0acHHULI4sWLr1271qFDB5qmCwsLGwWWkJDQs2fPhq98+eWXt2/fvnDhwtq1azt16qR7MScn57PPPsvJyXnw4ME333yjf/Prr78uk8lUKtUnn3wybdo03YtpaWkDBw4sKCjo3bv3t99+6+/vDwDXr1//6aefdA3NhrtbtGjRokWL2rVr1yiwkydPnjhx4vr16+Hh4f/85z8bfagvv/yyYVuzZ8+e8fHxc+bMaekYMAprjTKmrBbSlCTG24TH+BIK+vpQ5wvpCUFY6w4h8+3PIPH53D1x7+ZBfRjT+JZ34sSJugQwaNCg7Ozs3r17A8DgwYO3bNmie0Pbtm23bdv28OHD+vr6tLQ0lUrl6OhoZ2e3YcOGf/zjH927d/fy8gIAf3//TZs2zZgxIzY21s/Pr+EuKIry9fXdsGHDtGnTYmJifH19G8WQl5cXExPT8BU/Pz+VSnXjxo0zZ84sWLBAV6nc3t5eV6k1MTHxxo0boaGhAHD48GHd7n799deJEyfGxMSEhYV17969pKTE2dm5qqpqypQpCxYsOHjwoEajmTVr1rZt2xrVPT99+nRmZmbDzKrn7u4eHBxcXFx88eLFR48eNawTu2rVquzs7O+++07/io+Pz8OHD1s9CgzCRMiYM3l0nC9lZ2JG6+cjScwnE4JafydCyJC3u0t4r5zs5uam+4ednZ2+M9DOzq6urg4ACgoKevbsOWPGjKioKF3foEql8vX1jY+P37p168SJE2ma/u6773TdbFu2bFm4cGFOTs6nn3465cmqQqdOndqyZcusWbOKi4u3b98+fvz4hv9Xvzu9sWPHAsDrr78eERFx+PDhyZMnA4C3t/fs2bMBoFevXosXL544cSIA6JPu6NGjn3766cTExLCwMP0HcXZ2fuONN1544QUA+P7775VKZcJjRUVFW7dunTdv3pIlS6Kjoz/44AMA0Gg0u3btIoRER0cDQHR0tO4fM2bM+PDDD7du3arb7IYNGw4cOHD27NmGY0pqa2s5XutKBA0RigJRDJY+nUeGGCgo00L8cT5UQoGgx8uI5ftvgdg/gtjj17GCj2CJ+Pj48PDwd9999x//+MdTTz2lfw4XGRn56aefZmRkzJw58/333wcAPz+/999//9q1a9u3b2/6QCowMPDDDz+8ffv2hg0bVq5c2ej/du7cOTs7u+nepVKpvb1906nAzs7OTV+sr6/Pz8/38PBo9HpOTo67uzsAdOrU6bnnntNVRKmpqamrq9M9QZwyZYqnp6fudUJIRUVFbW1to404OTnpP/vmzZu/+uqrU6dO+fj4NHxPdna2vheXGyJoEe7Yofb3d+I7itadyiOzI5pJhLNmgczw19zbi7pRSqo14CTUQxEYCLt2iXuax9q1EBLCdxAW6NEDNm3iOwjLLFkCTa6rtqVz585JSUlHjhxxcnJat26dboJdenr6t99+O3jwYHt7+6tXr0ZERNA0/frrr48dO9bDw+OPP/7QPVNMTk4eMWJEQUFBZWXl6tWrR48e7erqmpiYqPu/DQ0dOnTNmjW6f6ekpOzbty8mJkYqlR46dKi8vHzkyJEAsHbtWi8vr8DAwOzs7A0bNsyaNQsAsrOzP/7447i4OIlEsmPHDicnp+HDhwPAli1bKIrq2LHjvXv31q5dqxtiGhMTo++AXbVq1d27d3UJe+nSpfpI/vvf/y5YsED3wPKVV14ZMWKEQqG4fPnyzp07T548CQA//PDDG2+8sXz58mPHjgEARVH/+te/dH+bmJi4aNEito5Ec4R69W0gJkYr/HvJbBUpqyVPuzcTaHBwS3/oKIOnPKjLReQZo4ebckwqhT59yJPdLSITFcV3BJZxcIDoaGgyQFtMwsL4joBlgwcP1s80f+qpp/TNrLZt286fPx8AoqKivvjii507d7q6un744YcHDx50dnZ2cHCQSqWffvopTdPPPPPM/PnzKYrq0KHDrl27Kisru3fvvnfvXgDw9PTUTVRzcHDw8fH56quvqqure/XqtXDhwkZhDB8+fP78+ZmZmR06dGjfvr2zs/O+ffsIIV26dNHN+QOA3r17Hzp06NixY23btt24ceNzzz0HAAqFwtXVdd++fRRFxcTE7N6928nJCQC6dOny3XffnThxwtfXd9euXaNHj260x379+ukeMTbyn//8R/8Is2fPnsePH1cqlR06dDh//nzXrl0BwMPDY+nSpfX19bpJHfqBrLm5uffv32+6I1ZR3Bcr+u9//3v//n3jK8tUVlYKf0rijjT6fw/JvkHmVIpZclHrYU8t7ybcbmqtVltXVyfeyjLWQRQ/BG507Njx9OnTuDBvs3bv3v3nn3/qH8KJzuLFiyMjI/WtQ71Zs2b17dt35syZbPwQRNAiFIXTeWSIv5lNun4+1FeptCie1yKEBO6ll14aOHAg31GY74033vDnfNU0EVx8Z850aFCrQYgIwJk82lAi3L0bDhxo6c/jfCWJBUQr1BEzpaUwfboIzpMWrFgBj4s9iVJ6OnD7xIR5n3wCp0/zHYRtkEgk+onqYhQQENDqEkaME8EF7vx5mcAT4a0y4iilOrRpPhGmpcG9ey39uZcD+DhSt8sEmgnLyyExUaDPL42UkgLczkpiWEEBXLnCdxCWuXULMjP5DoJ99+7d+/33369fv66vXi1qX331lUrVfJ2CkydP6ouUWgERJELhO/2QDG1nUaroJ/hJFAihFqjV6uHDh48YMeLjjz+eMWOGfqmHBQsW6MrKtGDq1KmXL19mP8ZW9O7du2HJ099///3AgQOG1nlQKBS6mYjWARMhAyx5QKjTz4dKxESIkGh98803paWlaWlpR44cuXLliq4aMwCkp6eXlpY2fGd1dXVxcXHDV+7cuVPRpNeruLi45ZGMJSUlLVTlbqiysrLpWkCEkMLCwoaTCK9evdqwIbthw4Z58+bp/7O2tvbRo0f67fTq1au2tjYhIcGYAIQPE6GlNDTE59ODDEylN1KcLyZChESsqKjIw8NDv7af7indl19+ef78+RUrVkRHR+vqUPfu3btbt27PPPNMaGjo1atXAWD9+vWpqanz5s2Ljo7+9ttvAWD//v3BwcGDBw8ODAxsuIC53pEjR0JCQgYNGhQQEKCrZ7Z///5nn31W/4bly5cvX74cADIyMvr379+rV6+wsLBXX31VV3Tm3XffnTlzZmxs7IABA/z9/S9cuAAAM2bMoGl66NCh0dHRFy9eLC4uPnfunG7eIQCsWLGiY8eOY8eO7dSpk74W2oQJE/bs2cPS98kxHDVqqUtFJLgN5WVZPaBQN6paQ3KrSHtncT+NQ4gX165BWlozr8vlMHo06JeSPXsWml3eR6GAYcP++rdWC8eOQZOKKAAAHTpAdHTzAUyePHnz5s29evUaPnz4oEGDBg4cKJPJXnvttcOHD7/88sv6MmkHDhwIDg4GgO+++27BggXnz59/8803Dxw48OGHHw4ZMgQAbt269Z///CcxMTE4ODgjIyM2NrZ///4NR1FmZWX961//Onv2bHh4eF5eXq9evQYMGPDss8++9tpruumDGo1mx44dR48eJYRMmTJl+vTps2fP1mg0zz///Oeff75w4cKamprjx49fuXLF39//448/XrVq1YkTJ7755ptdu3adOnVKtyLukSNHIiIidHXOSktLN2/e/OjRIxcXF5qm9ctQ9OzZs9k8LUaYCC11Oo8MtaxfFAAogL7eksQCMqkjJkKETHbyJDxe7OgJFAW9e4M+jxw4AE/2Sv7FyQmGDv2rCFxlJezbB03qjgEAdOliMBGGh4enpqb+8MMPZ8+e3bZtW0hIyO+//970AZtWq12/fn1eXp5SqUxOTiaEUE+WC/npp5+6du2anp6enp5eW1vr6+v7559/NlyZ4ejRo6Ghobm5ubm5uXV1dUFBQfHx8dOnT58wYcLevXtXrFjx22+/eXp69uzZMzs7Ozk5+d133z116hQhJDg4+MyZM7o5+OPGjdMl14Y1wRt69OiRt7f34y/HydHRcfny5S+++GKfPn10VdYAwNvbOy8vr/mvQ2wwEVrqdB79ZhQDg311jwkndbR8SwjZnCVLjHqbMbPMFQrYt8+cGLy9vefPnz9//vyysrKuXbvu2bOn0UJCaWlpzzzzzLJly0aNGqVWq3fv3q3VamVPFmAsLi4uKSk5deqU7j9HjhzZvn37Rm9QKpX6NwwYMCAkJAQAXn311dmzZ7/11lu7du3SLcxbVFQkk8nOnDmje6eTk5O+q7NpTfBG7O3t9WVCHRwcLly48OWXX86ePbu4uHjfvn2DBw8GgJqaGqspsiGCRCiTEblcoO2kag0kFZM4n5bCk8lAbsSa9XG+1PxEIZb0lMuNil/IxP4RxB4/WMVHaFnDtp27u3tgYGB1dTUAyOVy/YCUM2fODBw4UFdF83SDaZVyuVw/SiUiIuLq1avr1683tKOIiIiff/75/fffl0ieGJcwaNAgmqaPHj16/PhxXSOvc+fOGo1mzpw5wS2XeWwujNDQ0KysLP3/CgkJ2fDYhx9+qEuEWVlZnTt3NmbLwieCRBgfX+3j0/wQXt79kU+6e1IuLf7Cly0zqu5+dFvqXgVR1oGbXetv5lJAACQkNNdPJB47dsDjO2BR6t0bDh3iOwjLfPABPLl0nbVZs2ZNRkbGoEGDPD09T506dfPmzd27dwNAVFTUjh071Gp1165dIyMj33nnnZ9//pmm6Y0bN+r/Nioqatu2bQ8ePIiJiZk2bdqWLVtee+21F154oba29vTp04sXLw4K+nudtokTJ27atGnatGkvv/xyfX39H3/88eqrr0ZGRlIU9dJLL82aNWvQoEG6Ip+urq7Lly8fP378W2+95enpefPmTXd3d/1yu01FRUWtXbu2a9euY8aMiY6OrqyszMnJCQgISE9P//zzzwcPHuzk5HT27Nmox6V7ExISdIW5rYAIEqFCIdzhlKcf0kPatTJe1MjOA7kEenhSl4rIMMumJLLB3R1EXXRboeA7Aou5u4u76LaB2WjWY8aMGYcPH46Pj6+pqenQoUNycnLHjh0B4K233tq/f//9+/fbt28/evToLVu2/Pjjjx4eHl9//fXOnTt1rbqPPvpo37592dnZ4eHhDg4OFy9e/OKLL/bs2WNvb9+7d+9GSxTJZLJz585t37593759Uqk0OjpaX0dm5syZtbW1EyZM0L/5nXfe6dWr17FjxyoqKjp16qQbWTpgwAD9vAt9TXAAOHz48I8//piZmVldXS2Xy1999dXvvvtu2bJl3t7efn5+33//PSFkwoQJM2bMAIC6urojR44IYfojI7DotkV6HNZ8GiuNbbFr1HjLL2vtpLCqB9flhVqFRbeFQMg/BI5h0W0OFBUVDRgwICkpqdkf/ueff37//v0PP/yQs3iw6LZAldRCRiXp5cVYA66fr2TTDXF3QiKErIOXl9fly5f1a0s18vLLL9tbUWe3CCbU9+nj3OyIZ96dfkj396XkrX2F69aBka3ffj7UpSKiEdiImUePIDpaBOdJCyZPhnPn+A7CAikp8Hi4n1gtXgz79/MdBDKRi4uLofrXzs7OshYWHBcbEVzglEqqSXkgQTidR4YYUVCmqgoM1K1tTGEHQS5USqmwnomq1VBRIbjHliZRqYw9BMJk/CkkWGI/BMi6iSARCtbpPEtrbTcV50sl5gsrESKEkHXDRGimByqiqidd3BlOhFh9GyGEOIaJ0EwnH5Ih/hLGewz7+VDx+QJ7SIgQQlbNep52cux0HisT/jq0oWQSKqOSdDSwzC9CCAB+/fVXfTFMZAsyMzP79u3L0sYxEZqDAJzNo9dFs/LtxfpQiQWYCBEyaOrUqef4GAdMCKFp2tBASsQqX1/fnj17srRxTITmuFFK2thRwezkqn4+VGI+ebkTG9tGyBqsWbOGl/1qtdra2lonJyde9o7YI4JnhMHBtLMz30E86dRDE5ak9/YGk7pw4nyoBCGNl3FxgaAgAcVjBj8/8PTkOwgLuLvDkysQiI+vL3h58R0EQgaIoEV4/Hi10CpLJZiycODChaZtvKsHlaMipbXgIYy6Dd7ecPIkLepao9u38x2BZSIjYf9+cdca5akJh5BRRNAiFKDbZeQppidO6Mkk0NubOi+kRiFCCFkxTIQm09DwQEVCXFkczNLPh0oswEkUCCHEBREkwuxsYQWZUUn8nSgHoweOlZWBUmnaLuJ8JMKZVk8INFihU5QePhT3MlJaLeTk8B2EZQoLoaqK7yAQMkBYOaZZo0Y5PnrEdxANpCpJmCnr223aBNu2mbaLPt5UUjGpEcZCFNnZMGqUuMeLz50LZ87wHYQFLl+GqVP5DsIyK1fCgQN8B4GQASJIhDRNaYWREnRSlRDmZkK/KE2DqfG7yCFcQSUVC6JRqNWaHL/QmHEIBEWrBVrkPeViPwTIuokgEQpNajkxKRGap5/AJlEghJC1wkRoslQlCVNwkQiF85gQIYSsGCZCk6UqSZgb63uJ86XOF9CYCRFCiG2YCE1TXgdqDfg5sd4i9Hei2sip1HJMhQghxC5MhKZJLSehbhQ39bDxMSFCCHEAE6Fp0ipIKPsjZXTwMSEj6mlQa0CLXyRCyAARJMIxYzQKU+btscqMIaPdukFUlDn7ivMVRCL09IQxY/gPwzwEYNAxzSWFdsl97Zk8sX6K9u1hyBC+g7BMTAxERPAdBEIGiKDo9saNNS4ucr6j+EuqEl7oYNqfvPCCmfvq4k6V1JBH1eDH66ovbm6waZNYi24feUBX1INyn/RYDv2veG2kO2zuKxXdWo9BQbB6tbiLbs+axXcECBkmghahoKQquZhEqEMB9PWmLhSKfCo1fwjAO0n02p4SCQVjAyV3/iEb6i/p/ZPm9Qvaynq+g0MICQYmQhPQBO5XkE5slttupJ+vgIqOis6hTFpKwdigv05yOwm8/pTk+kRZWS1E/KjZfQ9npyCEAESRCE+ckAmkOFO2injYU6Z20965A/fumbnHfj5UQj7Pl+v6evjtN5H1JQIATWBVEr2mp5QCSEiA0tK/Xvd3onYPlO4fJP3oBr3+mjha2yqVuGulAkBSEuTm8h0EQgaIIBEuWuQgkKLbqUowYyr93r3www9m7jHGi7pdTqo1Zv45I3JyYOFCEZwnjXyfQbeRw6gACgDWr4cLF574v3G+1MGh0o+ua8vF8Ozz2jV4+22+g7DMtm1w4gTfQSBkgPgucDwyu7gaMbdRZy+Fp92pi0XYh2caLYE1yfSa6JYWzejkSo0MkGy9LY5GoRUw+1eAENswEZogjcORMnpxvrhavcm+u097OcAQ/1YO1opuks23tCocOIOQbcNEaIJUJXez6fV6tqWulWAiNIGGhneT6Hd7tr6GYriCGuwv2XoHG4UI2TRMhCa4Ww7h7JfbbiRcQd3BiqOm2HWPDm4Dz/gZdcuysrvkoxvYKETIpmEiNFaVBkpqSYAL1y3CMDfqfiXRYKPFOPU0vJdCv9299eagTqSCGuAr+fIufr8I2S5MhMZKU5JOrpSU83kEDlLwc6QyK7FRaJSvUulwBfT3NeE4reoh2XhDq+Z1aC5CiEeYCI3FzcL0zYp0B+wdNUatFtal0Kt6GNsc1OniTsV4SbanYqMQIRslgkS4dGmttzffQZg7iRAAxoyBESMs2nWEgrpTbtEWLOHnB8uWiSNJfHGX7tGW6u3V+H5l+nTo3r2lP3y7h2TDNVqwjcLwcJg3j+8gLPPiixAXx3cQCBkggkQ4Y0a9nR3fQVgwibBvX4iOtmjXEbyOl3F0hJkzRdAerdHCh9fpVfkfZhkAACAASURBVD2aOaUnTgR//5b+trsn1aMt7EgTaL739IQpU/gOwjLDhkF4ON9BIGSACBKhQHBZbrsRfhOhWHx2m+7jTXXzNPMYreohXX+NrhNoKkQIsQgToVEIQDofkwh1whXU3XKsy9GSKg1svK5d2d3887lnW6qLO+wUaqMQIcQeESTCjz+2U6t5jiGvijjKQGFWD+3p0xAfb9HeFXbgLIe8Kn5SYVUVbNwo9KLbW27Rg/wlXT2aj3PnTsjMbH0j7/SQvpcixEZhfj5s28Z3EJY5fBhSUvgOAiEDRJAIt2+3KynhOYZUJZjdL/r77/DHH5YGwON4mYIC+PJLQZ8nqnrYfFP7tuHm4I8/wu3brW+njzcV6gZ70gWXCe/fh717+Q7CMr/+Cleu8B0EQgYYe4HLy8tbu3btxIkTx48f3+wb7t+//9prr3Xt2rVLly5z5swpKipiLkj+pZk7UoYp+JiwBR/fpEe0l4QzcYBW95C+n0Jj+QKEbIqxifDhw4ePHj0KDQ09e/Zss29IT0/v0KHD7t27Dx069PDhw5dffpmxGAWAx5EyOpgIDVHWwae3tMu7MdNmjfWhApzhu/uYCRGyITIj39erV69evXpdvHhx69atzb5hxIgRIx5Pl1u5cuUzzzxDCKEooT9bMlKqkgzx57N7MEJB/ZiJV+dmbLyhHR8kYXAc08ru0tkJ2ikhEpmg+4MRQoxh5bd+4cKFLl26WE0WBIDUcgjlvNx2Q9gibFZJLWy7TTPVHNQZ7E/5OcEBvO1AyGYY2yI03o0bN1atWnXkyBFDb7h169auXbt2796t+087O7sjR45ERkYaej9NO1ZV1ahUvKWBWi3kVdt7UVUqlTl/XldnJ5WCSmXRUuhtAGq1dtmlVR52XH8P1dUSmnZQqVRarZbjXbfqvWvS5wIoL6q25UOj0TjU1GhUKmMrx/wnXLLsquxZ7zqJMO7l1GqpVmtXVVUl3pvL+nr72lpaJfJlPrRabW1tLU3jTRKfTP0hODk5SSSt3CsznAjT0tJGjhz52WefxRmupxQZGfnqq6+uW7dO/4q7u3sL25RIiLOzs4sLk3Ga5EEZCXLRuruaGYGdHdjZgYuLpdVxwhWa3HqnQAMzBNjj5AQSCbi4uDg6OnK865YV18C3mfXJz8lcnB1afqdMBg4OMuNPofGd4MM7mt+KnF7sKIjuUUdHkErB2dnZhcefgWXkcrC3BxcXe74DsYhWq5XL5U5OTnwHYtMIIYz/EJj8nd+/f3/YsGHvvffelBbrQVEUZW9v795Ay5ulKOD3Ptjs4mp6jMQfqaBu89E7yvv3b8gH17VTQiTtnVsPzoyPsLybdG0KLZDOaMEeApNYwUdA1srYREjTdFlZWWVlJSGkrKysoqJC9/rHH3987tw5AMjKyho8ePD8+fPHjx9fVlZWVlZGGKqFsmOHuuVCkWwzu9y2zqxZMG0aA2FEuPPzmDAwEHbtEmJf0C8PyIwwo07gtWthwADTNj46gLKXwOEsQXzwHj1g0ya+g7DMkiUwbhzfQSBkgAnzCKOjo2fPnu3l5RUdHf3888/rXj9z5kx6ejoAJCQkyGSyL774IvoxpVLJSIgxMVp+7yXTLJs7ERwM7dszEEa4Gz+JUCqFPn0E0jT6W3EN5KvJU+5GHZeoKDCjK2VpV8l2YSzY6+Bgad123oWFgZcX30EgZICxzwjbt29///79pq8fPXpU94+XXnrppZdeYiwuIblbTmaG8v+sKEIBPC7GJDSJBXQfb3bXSR4dIHktQVtZD23kLO4FIcQ7/q/vwsd7WRmdDm2oQjWpEuqaeRw7X0D6+bB79rrIIdaHOpEriEYhQog9IkiEM2c6PH4iyYOiGiAAXq0MS2zJ7t1w4AADkUgo6ORKpSm57qUsLYXp0wV3niQWkH4+xt6drFhhZsXnsYGSI9n8dwunp8OiRXwHYZlPPoHTp/kOAiEDBHeBa+r8eRmPiTC13NLiamlpcO8eM8HwMq2+vBwSE/lvEDdUq4WUEtJ0JXpDUlLg4UNzdjQ+iDqWzX/p0YIC0VesvnXLqAVAEOKFCBIhv3ivMtoQ1pfRuVpMwhSUC/uP7vydqOA21PlC/M4RsmaYCFth+SRCBuF4GR2T+kUtNC5IcuQB301ChBCbMBG2wsJJhMyKUFB3yrB1ohspw1UiDKR+eoDfOULWDBNhKyx/RsigUDcqU0Xqbb598mchHctVIuzmSWkI3MUeaYSsFybClmhoeKAiIa5CSYT2UmjnRGVU2vRF+Z6S2EmpACMqqzHl2QDqFwGMHUUIsQQTYUsyKom/E+Ug5TuOBnC8TGIB4aw5qDM2SPILPiZEyHqJIBHKZETOU2mPNCWEKSzdiEwGDMYf6c71eBm5nMn4LXe+0OQHhBZ+hEF+1J1yUqA2fwsWEtohMIMVfARkxZhfj5Bx8fHVPj78rD7DyNyJZcuYrLsfoaBOP+S0RRgQAAkJAlqJMDGfzI0w7QZuxw5wdTV/j3IJDG0n+TWHns5Tpb3eveHQIV72zJgPPgB7cS/BhKyZCFqECgVvPYGMJEJHR3CwoDBNI7x0jba2UhZ3ymohp4o8bVytbT2FAlpbmLMVYwMpfkvMCOcQmMfFBVuESLhEkAh5lFpOQgUzZFQnXEHdVTK0wJUInS8kMd6UjPPTdnSA5PRDuhoLvSJkjTARtiRVSYQziVDHVQ5udlRulY2mwvMFdKw3D7cmHvbQsy31+yMb/doRsm4iSIR9+jgXF/OwX2UdVGnA3+Jh+uvWwebNjET0F47ryzx6BNHRQjlPEgtIP1+Tg5k8Gc6ds3TXY/krMZOSAiNH8rJnxixeDPv38x0EQgYI5QLXAqWSqqnhYb+pShLqxsAwl6oqUKkYiEeP4/oyajVUVAiif7iehqRiEmN0rW09lYqBQzA+iDqSzU+nNOOnEPcYOQQIsUQEiZAvgiq33ZDNTiVMLiEd21BudvzsvWMbyt0erhTZ4jePkHXDRGiQoIqrNWSziTCxgPTz5fOIjAukfsnGmfUIWRtMhAYJqtx2QzabCM8XEF5GyuiNDZL8ggW4EbI6mAgNEtQCTA35OAJNoJiP56b8umB6TRlmxXhRhWqSadu1XhGyPpgIm0cTuF9BOgum3HYjYQrK1tZDyKwkhEBwGz6PiISCMYESfmfWI4QYh4mwedkq4mHPxRro5olUULdtLBGe57zWdrPGBVJH8DEhQtZFBIkwOJh2duZ6pxmV0MmC6pQNeXuDtzczm9IL5/AxoYsLBAXxn3QtWXTCzw88PZkJY2g7yeUioqxjZmtGcneH9u053SPjfH3By4vvIBAyQARFt48fr27Tpg3HO82oJB0Y6oVbuJCRzTwhQkGdeshRu8TbG06epOu4vfQ3lVhAzK55vX07Y2E4yeAZP8nxHHpyCHc3kZGRsH8/VFZytkPmrVnDdwQIGSaCFiEvsphLhGzguLgM7yrqIaOSRHkK4oiMDcR1ehGyKpgIm5dZCR24boWaIMiFKq4hqnq+4+DKhQIS3ZayE8bZOi5Q8lsuXYcPChGyFsK4tLQoO5uHIDOZaxGWlYFSyciW/iahoLMblarkol1CCGRlcbCfliQW0JZMnHj4EBjs2vV2hDA3Kj6fu0ahVgs5OZztjRWFhVBVxXcQCBkggkQ4apTjo0dc7zSzkjDVIty0CbZtY2ZTDXE2rT47G0aNknKwoxYkFpBYH/PP1blz4cwZBsOBsYESLseOXr4MU6dytjdWrFwJBw7wHQRCBoggEdI0peV2gXS1BsrrwNeRmRYhTQMb8UdylQi1WlbiNyEAAleKSB8LasowfgjGB1FclpjRaoEWeU8sS78ChBghgkTIvQcqEuhCSQQxMsMg2xkvc72UtHemPOz5jqOBLu6UlgA3XdMIIbZhImxGhrBHyuhwOZWQXwn5JI7XWtvNGuJPnXpoE98/QlYPE2EzBD53QqezG/VARWxh7KIlU+nZM7QdJkKErAQmwmYwOGSUPXYSCHCm7ldY/7X4fAHPtbabNdRf8vsjut4GbkQQsnqYCJuRqRJB1yjYxnpMD6tILU06Ca/6ubcjBLtQV4qt/PtHyBZgImyGKFqEYBvjZeLzST8LJk6wCntHEbIOAr3ENDRmjEah4HSPzCbCbt0gKoqpjT2BmxahpyeMGcPb5Z6RB4T9+0PHjoyE84Sh7STcVHxt3x6GDOFgPyyKiYGICL6DQMgAERTd3rixxoXD9ZCUdaChwZO5wfovvMDYphqJdKc232L9QuzmBps28VZ0O7GATOlk6e3asmWMxNLYAF/qHyWkoh5cWT49g4Jg9WpxF92eNYvvCBAyTAQtQo5lVhJ+V381XrgblVpOaOvtnKvSQJqS9BBGre2mnGTQqy2ntdYQQmzARNhYlkocDwgBwEUOHvZUTpXVXoj/LCTd21L2PNd3awlnvaMIIfaIIBGeOCHjsjgT4+tO3LkD9+4xucGGOBgvU18Pv/3Gz51BIkMTJxISoLTU8s00Yxgn42VUKoZrpXIvKQlyc/kOAiEDRPCMcNEihz59uFuhm/HZ9Hv3gpMTLF/O4Cb/FuFO3S4jI9uzmKhycmDhQsnNm+ztwaDzBfTcCAbu1davh7lzYcwYy7fUWI+2VF41yasm/k4sHoJr1+Dtt+H4cfb2wC4tgfWbIbwHGS/y0uE0DXV1lEO11fbBiEKtmoplenqbCBIhxzIrYbA/w9skrP1wIhTUlSLr/FnSBC4Wkm8HCrrTQkrBYH/J6TzycidxdKdziSaw4Tp9MJO+U06kudJLLvBrgri7kQkhhEglEiwfzicHSn7MB9zsmNwmJsLGMitJhzaCvvg2FKGg9qSL++JiyM0y4u1IeTnwHUdrdLMJX+7EdxwCo6yDqb9rVBr4LFbaxZ1anAgx3WHWBNH8spql1Wpra2udnJz4DsSmVVaq29gxXINf3OclG0Q0WAZ0UwnLrLNFmFhA4oRXWa2pof7UqYfstflFKU1J+v6iaedMnRwli/GmOJz9hJA5MBE+oVAN9hJoI57frZcDUBQU1fAdBwsSC0g/4S060VSIK2UvBauvdWe8o9lkwFHNkq6SL+KkcrzAIDHA8/QJ4moO6kQoqNvW2Ci8UED6WrAYL5eGtaNO5lrhITAVTWDlVe2/z2uPjZDNCMVrCxINPFmfIJYqow1Z5cKExTVQWkvCFeI4FkPbUafyrPNJrfHK62Dc/zQJ+eTyBFnPtuI4cAjpYCJ8AuOTCDkQ7kZZ31LpSSWkmycllqvpYH9JfD6x5SWZ0pQk9hdNO2fqf6Nkwh/fhFAjIhg1unRprbc3R7+trEoSxXRBrzFjQM7mQ8cIBfU/Noub+PnBsmVcX+NTSkh35g7E9OnQvTtTG2uGpz10cqX+LCT92XmoGR4O8+axsWFmpJSQ4cc1G2Ok0zobvLF+8UUICOAyKIRMIIJEOGNGvZ0dR4kws5JMCGa4ldy3L7PbayxcAXfZLC7j6AgzZxKOi24nl5DRAYwllYkTmdqSQcPaUace0v19WSkH5+kJU6YItOi2lsBrCdoNvVvKggAwbBhnESFkMuwafUKGCLtGg1yo4hqiquc7DkYlFQu31nazhvhLTuVZWwe1Mbbeph2k8CoOjUFihqfv32gCuVUkyEVM118AkFDQyZW6V2E9V2FVPeRVkzA3MR2IOF/qRilR8rRYFV/y1bA2Rft5nFRMhwqhJkSQCD/+2E6t5mJHedXEw55yYLpz6/RpiI9neJuNRLizOHC0qgo2buT0QpdSQrq4UzLmzs2dOyEzk7GtNctBCn28qbOPWHmYmp8P27axsWFLLTivfS1cEmnE4N7DhyElhYOIEDKHCBLh9u12JSVc7IilIaO//w5//MH8ZhsKc4O7rCXCggL48ktOz5NkRkfKAMCPP8Lt2wxur3lD20lYWoni/n3Yu5eNDVvkt1ySUkKWRxl15/jrr3DlCtsRIWQmESRCzohxEqFOhIJidbwMxxhPhNwY1o6ynceEag3MT9Ru7it1FMF4O4RagYnwb2KcRKhjZXPqk4pFmQi7eVIlNcSK10luaHWyto83xeDIXoR4hInwb+JtEYa5UfcricYqJnTX0XCvgjztIb4DQQEM9merd1RQbpWRr1PpD2Pw6oGsBJ7Kf8usJMHiTIQOUvBzpLJU1nAJvllKQlyZH7LEjaGcLFjPL5rA7ATt2mgpq2sRI8QlTIR/y1JBBxe+gzBXuMJKFkBIEucDQp1h7ahTebQ1HAbDvkql62n4VxheOpD1wLP5L/U0FKhJe2exXoKtZryMSEfK6AS5UG521I1Sq02FxTXw9lXtF3FSiVgPEULNMDYR3rhxY8uWLfPmzTt48KCh95w5c2bixIljx47dt28fQ+EBAFAUcFB9OVtF/J2YnLvWEAfxhysolmZQcPP96yUXkx5Mr13A5UcY6k+dZLp3lOND0IJFf2qndZZ0M+tORSAfAaGmjB37/M033xQXF9+6dcvFxWVic6Ubb968OWHChE8//dTDw2PWrFlOTk7jx49nJMQdO9T+/k6MbKoF7A0ZnTULZOwPMQ93o3aksTJaJjAQdu3iaBwOTeBmGYlieqTM2rUQEsLsJg0a2o7afpf+z9NM3lL16AGbNjG4PTOde0QS8snNieaczUuWgIcH4xEhxAxjz+lNmzYBwKxZswy9YevWrS+//PK0adMAYMWKFZ988glTiTAmRsvBvSR7Q0aDg9nYamMR7mwtzyuVQp8+HBXdTlUSH0fKzY7hzUZFMbzBFgz2l0w/p63Vgj1z430cHCA6muei27VamJOo3RIrcTFrKZWwMKYDQog5jN23JiUlxcbG6v4dGxublJTE1Ja5Id65Ezqe9iCTQAEntejYI+oHhDoKO4hwpy4UWttjwvdTtF3cqbGBOKoAWSHG+uwKCgrc3d11//bw8KioqKiurnZyaqZLMy0t7cCBA/GP62/K5fJt27aFhoYa2nJVVRXFfpPwXrl8pJ9WpRLxXLzQNvLkR9Vx3sx/BK1WW1dXp9VqGd9yI5ceybq4gkol7nw+oK3018z66DYMf13c/BCalV5Jbb0tTxhRp1Lxsn+h0Gq1tbW1NC3iq4QVMPWH4OTkJJG0cgPHWCJ0cXFRP66NXV1dLZfLHRyaX0QwODh4yJAhS5Ys0b/StWtXmeHHaDNm2H/1ldzVlalIm5er1kR42bmwsPTE7t3g4AAvvsj4hhvr4qnNqpWPdGH4nr20FBYtIl98UePo6Mjslpu6WaFZ0lXq4sLw8pMrVsALL0C3bsxu1aDRHciyS1oXF8a+rvR0+PRTWLOGuLjwML+HAPznD83KHpIwb/P7rD/5BJ5+GoYMYTAuHmi1Wrlc3uz9PeIMIcz/EBhLhIGBgZmPK/xnZma2b9/eUBK2s7Pz9vbu2bOnkVs+f15WUQFsJ8KsShLMzmCZtDRgP4MA6GZQKJnvkSsvh8REjhoiKSXEvBGJrWw2Bfr25S4RxvpQd8tJWS242zOzwYICPitW//KALq2F+ZEW3WDdugV8JHGEjGLRyV1cXLx582Zdj9mkSZN2796tVqsJIdu3b580aRJDEXJBrQFlPfiJvFJGuBtbMyi48UBF7KWULyc3Dayyk0A/X+pMnpV0oL2XQr/TQ4JLDiIrZmwiXLNmjYeHx549e7Zs2eLh4fHpp58CwMOHDxctWlRXVwcA//znPzt37hwaGhoZGfno0aOlS5eyGDXTMlUkyEX005zCFSDqOfXJJaS7J99BMGSotSxYfzSbVGtgHI6RQVbN2K7RJUuW/Pvf/9b/p+5xUdeuXaurq3X/lsvlBw8ezM7OrqmpaWHkizCJd92JhoJcqOIaUqUBZ3GujJNczEq/KC+GtaO23rGGFuGaZO2qHhKsI4Osm7GXTEdHx6ZjJSiKavRiYGAgM3FxK6uSBLMwTIZjEgo6u1Gp5cxXZuFGcgm80lmUkTf1lAdVp4VUJQlzE/En+i2XVGvg+WBsDiIrh6c4AECGyCcR6oWzM16GG0klpKc4U3hTFMC4IOrnB2I9FjrvpWhXdMfmILJ+mAgBALKsomsUxDxeplANVfUkyCpuR3TGB0l+fiDi3tGTD0lJDfyjA14ikPUTwVkukxG5WVWdjMdqWRmZDNiOXy9cAXeYHi8jl3MRf3IJ6dGWrfFK3HyERgb6UXfLST4TtQF4iX9tsvatbow1B3n5CAgZSQTDKuLjq3182J2CxGoiXLaMu7r7EQrqbjnDrZCAAEhIYL2mDKvF1XbsYH0ealNyCYxoLznygP5XuKW3m717w6FDjARlrDN5JK8aJnVk7Eb5gw/AnqFZlQgxTgQtQoWC3b4+ZR1oCXiw9it1dAQDNXaYF+pG3a8kGqY75B7XzmMRq4lQoYDWSiyxYnwQxVTvKAeHoKE1ydqV3SUMrkrm4oItQiRcIkiEbMuoJB2t5dGUgxT8HKkslfgeEyaXkO7WMlJGb3SAJKGAVNbzHYeJzheQnCqYEoIXB2Qr8FwX/boTjUQo4I7YxstU1ENeFQl1tZ6joNNGDn28qf/limzIzDtJ2uXdmGwOIiRwIjjZ+/RxLi5mcftsz6Zftw42b2Zx+42EKyhm68s8egTR0eyeJ9dKyNMeFHtX3smT4dw5tjbesvFBEssnUaSkwMiRjITTuj8LSZoSXurE8MFYvBj272d2kwgxRgSJUKmkampY3H5WJQlms0VYVQVcLl4TrmB4BoVaDRUV7LbV2F6GUKXi9BA0ND6I+jWHtvCpLZen0Kok7VvdJHZMXxh4PAQItUoEiZBtmZXEOiYR6oS7UaLrGrWC9XgN8XeiOrpS8QXiOCJXi8mdcng1FC8LyLbgGa/rGrWeq3CEu/gSYVKxWMvCGUNEM+vfuap9M4r55iBCAoenPDxQkSDxFxrV87QHuQQKxLPGe60W7lWQLu7WcwgamRBE/ZRFhH9vklxCkktgOjYHke2x9ZO+QA1OMmhjXTOcGH9MyKobZaSzK+Ug5TsO1nRxp+ylcL1U6EdkdRL9ZpTEig8EQobYeiK0srkTOhEKMfWOJlt1v6jO2EDqpyxBH5FrpeRSET0rzNYvCMg22fp5z/aQUV6EiyoRppSSbh7WdggaGR8k+SVb0I8J1yTTS7tKHUVQchEh5okgEQYH087ObG08U8X6uhPe3uDtze4uGmF2DQoXFwgKYjGtJhezXlPGzw88PVndQytifagcFck2t+KPuzu0b89sRE9IKSEXCshsi2uitsDXF7y82Ns8QhYRwR3g8ePVbdqwlawyKki0F7tX4YULWd18M8IVcFfJ2Na8veHkSbqujrENNqQlcKOMRLHcIty+ndXNt05KwbOBkp8fkAVdzPmkkZGwfz9UVjIe11/evkq/GSVxYvNisGYNixtHyEIiaBGyKtOKCo3qBblQJTVEJYYSl6lK4udEudnxHQf7GCzAzayrxSSphODTQWTLbP3sz7CWJXkbklDQ2Y1KE8NS9cnFVjuVvpHh7SRXiklZLd9xNPHWFe3b3SX4dBDZMhEkwuxstoLU0JBXTQJZnkRYVgZK5joqjcTgeBlCICuLkS01g5uaMg8fAktdu8ZzlMFAP8mvOeY0CrVayMlhPCIAgMQCkqrkopRMYSFUVbG9E4TMJIJEOGqU46NHrGw5p4r4OFJs19HYtAm2bWN3F02Fu1GpDLUIs7Nh1Ci2JpclcdIinDsXzpxheyetGx9EmVeA+/JlmDqV8XAAAFZe0a7qwUUpmZUr4cAB1veCkHlEkAhpmtKys0B6ZiV0ZL9flKaBpfhbEKGAOwytQaHVshU/AbhWSrqxnwh5OQRNjQuSnHxI15geiVYLNAuPF0/nkdxqmMrJuoMCOQQINUsEiZA9GdY4m15HFMVlHlQSRxnl48h3HFzxtIenPajf84RyXFYnad/tgesOImTbidAqy8rohLpR9yuJhav/sC2phHTndXof94RTgPvXHFJaCy92tOkrAEI6Nv0z4KZrlBcOUvBzpDIrhdL4aFZyCelhG0NG9SYEUT8/oGm+DwsBWJ2kXdNTIrGtrx+h5tl0IrTirlEAiFDAXWHPoOCgpozQhLhSbR2oy0U8H5efsmgNgQnBNv3zR0jPpn8JmZWko6vVXojDFRRT42VYklwCNjKJsCHeZ9YTgNVJ9Ls9pTb31SNkgO0mwioNqOrBikdqhCuoVAGPlylUg1rL+iROARofJPnJrEkUTPn+Pm0nhdEBNvfNI2SICBLhmDEahYL5zWZUkGAXioOLQbduEBXF/m6aYGoxJk9PGDOG+Qt3Ugnp4cnF9w8A/ftDx46c7MkI0V5UZT2YVPenfXsYMoSZvWsJvJtMvx/NdXMwJgYiIrjdJUJGE0FhpY0ba1xcmF85N7OSdHRlfKvNeOEFLvbSFFOJ0M0NNm1ivug2NzVldJYt42Y/RqEAxgZSPz8gS7sa+/GDgmD1amaKbu9Jpz0dYGg7rpuDs2ZxvEOETCCCFiFLMivBikfKAICHPdhJIV/NdxwGpJRwMZVemPiaRFFPw5pk+v1oXIQeoSfYcCJUWfOQUR1mFyZk1pUi1hfAEqxB/tTtclLI+T3KzjQ6pA3097XRrx0hQ0SQCE+ckLFRnCmjgqNJhHfuwL17XOyoKUbqy9TXw2+/MXzpLFRDaS0JdePoipyQAKWl3OzKKHYSGN5OcsToNetVKgZqpdbRsO4avbonP83BpCTIzeVlzwi1TgSJcNEiBzaKbnNWVmbvXvjhBw720wxGHhPm5MDChQyfJ5eKSG8vjkbKAMD69XDhAlc7M45JBbivXYO337Z0j5/fobu4Qx9vfpqD27bBiRO87Bmh1okgEbKBcFtfjfDUPSnYiqMXi+gYnq7IAjE6QJJYQHNW+idbRdYmazf05vPpIF+/AoRaZaOJsFANjjJow/xYVGEJd4O7nC+FaIw/C0kfbxs993Tc7GBZlHRWvJab7DA7Qbv4aWmkwqZvPhAyxEYvRpmVpKO1AqQ0VwAAIABJREFUj5QBgEAXqqSGqOr5juNJBOBqMeltqyNl9N54SlJeB3vTWR8++nUqna+GJU/b6I8doVbZ6G/DuquM6kko6OxGmTR3mwN3y4mHPdXWge84+CaTwDcDpEsualkdPppXTf7vsvabAVK5jf7WEWqdjf44rHjdiUaYmlbPoEtFJMbmm4M6UR7U1E6SJRdZXLJ2fiL97y5SG6zpipDxbDYR2kSLEADC3CihrUFxsZDY+EiZhtb0lJ4vJP97yMox+jadzqgkb0bZ6M8cISPZ6C8ko8JWEmGEAu4KbA2Ki9gibMBJBl/GSWcnaBl/lJuvhiUXtd8MkNrZ6K8cIWOJoNbo0qW13t4MP1DKVAE3hUYBYMwYkPM3PDVcQd0pt2g4hp8fLFvG2IAOtQbSlFwXV5s+Hbp353KHphnsT8X5UKuStBtjmp/eEB4O8+aZvNn5idrXwiU9hbHi44svQkAA30EgZIAIEuGMGfV2dkwmQg0Nj6pJgDNHF4i+fbnZT/NC3aiMSqKhQWZus8DREWbOJEwV3U4qIZEKyp7b+WwTJ3K6OzN80lf69MH6f4Y0n7c8PWHKFNOKbu+/T98pJ3sHCeUHPmwY3xEgZJgtdpo8UBE/J8pGBtE5SMHfieJs4nar8AFhszztYUNv6Yw/tPVMtL2La+CNi9pdz0gdsLw2QkawjWzwJNsZMqoT7gbCGS9zsQhnEDbv5U4SX0f45CYDmXBeovblTpJe+D0jZBwRJMKPP7ZTMzrRiuMho6dPQ3w8Z3trRoSCumPBeJmqKti4kbGv6zIfiXDnTsjM5Hif5vg8TvrBde39isZ3Lfn5sG2bsRv5IZO+Xkr4Kq5tyOHDkJLCdxAIGSCCRLh9u11JCZMb5DgR/v47/PEHZ3trhoUVRwsK4MsvmTlPCtWgrCOduVp0Qu/HH+H2bY73aY4Obag3o6RzEhvXXbt/H/buNWoLO9PoBee13w4UXKfor7/ClSt8B4GQASJIhIzLsLWuUcGU3v6zkOZy0QkxWvSUpKwWdt8zuYOUAKxK0q5NoX8fI8NOUYRMIpRBZVzKqCQd2tjQHYBwistcLMKRMq2QUvDNAOnw45pR7SXejsb+VZUGXj6rLVSTC+NkXjZfuw4hU9lQPtCzkYrbeh72IJdAPufroTd1sZDEeNniKWeSrh7UtM6SxX8aW3ctr5oMPKpxt4MzYzALImQOm7sqVdaDWgNeRt9rW4cIBXW7jOdGIU3gajHBXjtjrOohvVhEjue0fsguF5GYn7WTQiRfYwUZhMxlcz8d3UgZW7sYR3tRfxbynAjvKklbB1x0wihOMviqv3RuYit11w5m0s/+T/NprASXWELIEjb3+7GRBZga6edDnS9gfd27ll3CqfSmGOhHDfSjVl412EG6+Sa9+E/61xGy8UE29ytGiFki+AlRFDDYgsushA6cDxnlvQUa6yO5UEjMaxIy9f1f4m8qPbOnEGc+6iP9PoO+VEQaxX9PSV46q92XQV+aIBNIKVFjiPEQIBshglGjO3ao/f2dmNpaZiUJ4bZFOGsWyPj+mn0dwd2eul1Gurib/NkDA2HXLgZakxeLyCud+bnxWrsWQkJ42bNFPO3hoxjp9HPaN8Ilzy+DdTdlKRWaS4XEWU6NDaR+Hy1z5Pu8Mt6SJeDhwXcQCBkggl9STIyW0RYhGerPaSIMDuZybwb186HOF5iTCKVS6NPH0qLbag2klnO96IReVBQvu2XAP0Mkyjo4k09KZORpArPDJd8MkPiKcKhXWBjfESBkmAgSIbMyKqCjqy320fTzoRILyL/C+dn71WLylAfXi05YhzkRkjkRAACVleo2bUSYAxESPBE8I2QQAchSkWAXW0yEsT5UYgFvA0dxMV6EkGCJIBHOnOlQUcHMpvKrwUUOLtwuk7t7Nxw4wOkem9XFnSqtJWZMqy8thenTLT1PLhbyuejEihXirvicng6LFvEdhGU++QROn+Y7CIQMMKFr9Pjx48eOHXN3d58zZ067du2aviE+Pv6XX36pq6uLi4ubOHGiRMJMlj1/XlZRAa5MLCjPS02ZtDRwFECHFgUQ401dKKCfCzbtuJSXQ2KipV/axSLyfi/e7rpSUqBvX+jWja/9W6qgQPQVq2/dAhcXvoNAyABjr03ffffdjBkzunbtWlZW1qdPn8omq2UfOXJk3LhxgYGB3bt3X7FixerVq5kOlQG2OYlQr5+P5DwfvaP5alDVkxCbfDSLEBI+Y1uE69ev/+ijj6ZMmQIA169f37Nnz9y5cxu+4ZdffnnllVcWLFgAAHZ2dh988IEAc6GtLcnbSD8favllHqbVXyykY7xxFhlCSKCMahFWVFTcuHFj8ODBuv8cPHhwQkJCo/d069YtOTm5pqaGEHLhwoVuguyH4nglQqGJ8aKulxK1huv9Yq1thJCQGdUizM/PB4C2bdvq/tPb2/uPJkvNzps379KlS76+vvb29kFBQacNPxnPzs4+duxYbm7uXxHIZKtWrQoKCjL0fkIc1Oqa6moG+vTSlbJ/BNDV1Zy2iurr5TIZVFe3WDWSK+FussRcday3CV+mWk3RtH11dTUxszQNnM+XLo4kHH/tDWm19rW1mupqY9dzEJqaGglN26nVaqlUrBNQNBq7ujq6uprzuzBGabXa2tpavqOwdab+EBwcHFodsGJUIrSzswMAjUYjk8kAoK6uzsGhce3k//73vzdu3Dh79qyrq+ubb745d+7cPXv2NLs1hUIRGhr64osv6l/x9/e3t7dvOYAW/7+xHlSRUHeJvT2njUKZTCKVEnt7QTSJ4nzJ5TLJoAATvgE7O6Aoyt7evuVjZAhNIKWM7usnYeQImkcikcjlcnt7sc6atbOjKIqys7Mz7xAIgVQqkckk9iKfSarVagFAvEfBOtTV1Zl0CCgjHssYdWnw9fWVSCS5ubmdOnUCgNzcXH9//0bv2bVr16JFi3Q9ou+++26XLl2+/vrrZsN1dXXt3LnzpEmTjNk1AFAUkUollt8K19NQoK4PcpVLuU1JFAUSCSWQW/k4X3r3PWLS/ZRUChQFUqnUvObI3TLi7Ui8nfj8/II6BGaQSCw6BEIg9kOgJ+qjYB3YOARG5QQHB4eRI0fu27cPANRq9c8//zxhwgQAUKlUR48e1Wg0AODt7X337l3d++/cuaNQKJi6b5LJiJyJmX8PVKSdEyXjvGEmkwEj8TMizldyvoA2qYtTLrco/ksCmEpv4UfgndjjB6v4CMiKGdtZtGbNmpEjRyYnJ6enp4eFhY0aNQoAcnJyxo4dW15e7ubm9s4774wbN+7GjRtt2rQ5fvz4Rx99xFSI8fHVPj4MTEHK4GPdCQBYtkxAdfd9HaGNHZVaTsIVxsYUEAAJCeY/XbsogNWXduxgZh4qX3r3hkOH+A7CMh98ANihiATL2ETYo0eP1NTUhIQET0/PPn366J49duzYUZf5AKBv377p6elXr16tra396KOP/Pz8mApRoWBm6ltmJeGlyqgQZtM3pCs6anwiBAB3dzC76PbFIjIzjOfnowoFv/tngLs7NJm7KyY4mx4JmQnDB9zd3ceOHdvwFXt7+6eeekr/n25ubvopFgJk43Mn9HTLUMzkZDWAag3cU5KuHvi1I4SESxBDGbmRUQEd8Lb0cYuQm31dLSZP46ITCCFhE0Ei7NPHubiYge3w1TW6bh1s3sz9bg16yp0qUJOiGmPf/+gRREebeZ5cLOL/ASEATJ4M587xHYQFUlJg5Ei+g7DM4sWwfz/fQSBkgAgSoVJJ1Rh91W4BX12jVVWgUnG/W4Mk1F/Vt418v1oNFRVmfm+XCkmvtvwnQpVKWIfAVEI7hcwg9kOArJsIEiEjSmtBQ8CrcRkAG9XPR8JN7+ifhaSPAFqECCHUAltJhHfLSZgbXpH/ws1jwkfVUK3hpzsaIYSMZyuJME2JifBvMd5USgmpYbn05sUiXHQCISQCNpQIQzERPuYsg3AFlVTMbqMwPp/09baVEwwhJF62cp26q4Qw8c+qZlAs+72jP2WR8UF484EQEjpbSYTYNdoI248JrxQTqQSexqn0CCHBE0EiDA6mnZ0t2gJNIKOSdOJp1Ia3N3h787LnlsT5UInGVd92cYGgIJNT5sFM+oVgoWRBPz/w9OQ7CAu4u0P79nwHYRlfX/Dy4jsIhAwQwQptx49X68qZmi1LRbwcKCeePuvChfzst2XtnCknGZWuJJ1bayh7e8PJk7SptUYPZ5G9g4RSUWb7dr4jsExkJOzfL+5ao2vW8B0BQoaJoEVoudRyCHPjOwjhYa939FopqaWhhwCm0iOEUKtsIxHiA8LmsJcIdf2i+I0jhERBBIkwO9vSIPmdO1FWBkolXztviZGJkBDIyjJtywczycQOAjq1Hj40fxkpIdBqISeH7yAsU1gIVVV8B4GQAQK6WhkyapTjo0cWbSFVScJMWX6PWZs2wbZtfO28JU97UHnVpLi1Oq7Z2TBqlAlP+1KVRFkPQqi1rTd3Lpw5w3cQFrh8GaZO5TsIy6xcCQcO8B0EQgaIIBHSNKW1rAZKqpLPZ4Q0DRbGzxIpBb29qD8LW2kUarWmxX8gg7zQQVj9ooI9BEbSaoE2tka6QIn9ECDrJoJEaKEqDZTVkgBnQV2ZhSLWh0o0ehkKIx3MpCcGW/95hRCyGtZ/wUotJ51cKQnmweYwvgxFRiUpUJNYH/y6EUKiYf2JEGvKtKCPN5VcQuqYaxP+kEGeC5ZI8ftGCImH9SfCVCWE4iRCA9rIoZMrlcxc9e2DWbSgxosihFCrrP+axe+QUeFjcDZhThXJrCTP+OK3jRASE+tPhNg12jIGE+EPGWRCkERm/ecUQsiqiOCiNWaMRmHBCkr3+F6JsFs3iIricf+t6NfawFFPTxgzxqhMKdh+0f79oWNHvoOwQPv2MGQI30FYJiYGIiL4DgIhA0RQdHvjxhoXF7l5f5tXTRxkoLBjNiLTvPACn3tvVaALZSeh7leQEAOrc7i5waZNrRfdzlfD3XIy2F+Ije9ly/iOwDJBQbB6tbiLbs+axXcECBkmxPt3BqUqAftFW8XIIr0/ZtLPBkrsrPyEQghZISu/bqWW4wPC1jGSCA9m0hMFswAhQggZTwSJ8MQJmdnFmfgtt61z5w7cu8dvCK1oebxMfT389lsr32FxDaSUkOHtBXo6JSRAaSnfQVhApRJ3rVQASEqC3Fy+g0DIAIFeuRpatMjB7KLbqUrC+0qEe/fCDz/wHEPLojyoHBUprW3+/+bkwMKFrZwnB7PoUQESB6EsxNvY+vVw4QLfQVjg2jV4+22+g7DMtm1w4gTfQSBkgAgSoSVSlSCESYSElVX/GCOTQLQXdbG16tstwH5R1CqB/wqQLbPmRFhHw8Mq0rENXqBb1+okihaU1cKlIjIywJrPJYSQFbPmi1d6BQl0oeTW/BEZY0n17Z8e0EPbSZxFMBMHIYSaYc1ZAmvKGK+vD3Wl2Mzq29gvihASNWtOhKnlWG7bWK5y6NiGulZicqOwsh4SCsiYQGs+kRBC1s2ar1+p2CI0hXlFR39+QD/jJ3E1s/IPQgjxz5oToRAmEYrIs4GSL+/S1RrT/upQFnke+0URQmImgkS4dGmtt7c5fyiQBZjGjIERI/gOwgijA6ieban/d6lx8QI/P1i2rPmHh9Ua+D2PHiv4ftHp06F7d76DsEB4OMybx3cQlnnxRYiL4zsIhAwQwVC/GTPq7ewcTP2r0lqop8HXkY2ITNO3L98RGO2zftJuhzTHcsiYgL9vIBwdYeZM0mzR7WM5dIw35WHPXYTmmTiR7wgs4+kJU6aIu+j2sGF8R4CQYUK/lzdbKvaLms5VDrufkf4rXlOgbv3NmZVk6UV6ToTVnkIIIRthtVcxLLdtnjhfamaY5NVzmpaHzTxQkaG/apd2lUwIstpTCCFkI0RwFfv4Yzu1EQ2URoQzUub0aYiP5zsIU7zTXVpeB9tu//VcsKoKNm584pt8oCKDj2nfeFoyP1IE5w8A7Nz5/9u796ioyr0P4L9huAs6DjocLspFfRE1CfJSulz2ekW0k6KYeIzixVtYnnJpuvJUtvLNbu/rweVKykypw9Iy09KOKGCaiBnKRQQ9zUEQcNARNLnPwJ79/jGt6jXBgT3w7Gf29/PXTD0zfYeZvb/t27OpvJx1CAlu3KAdO1iHkObgQSosZB0CoAMcrMh27nStq+vyq/51l5hPt2313Xf0/fesQ3SFsxP943H1pnyh+LZIRDdv0kcf/fY74a4FiejLL6m0lHUICcrKKD2ddQhp/vlPOn+edQiADnCzLusqmZwyyqkhfVVbxqoXfye0/v9zSCs5bEEAgM455urMItLVBnFoXxRh9yWFOY3or3rtwm9NWNko/idaEAAcDgeXT3RDRaM40F2FaaAlSp2ojjzYPloQiVRVTTQrGy0IAA7IMVdq//pZLgcIudbfjT6epH75R4tJoBlZzmtHowUBwAE55nqtoE6M0GK/qB1MC1DFDKLrzeKaEZbncMkgADgix1y15deJUQNQhPaxbrQ6wFO1bFg3b9sLACBzHBShSkWqLpbahVrxETkVYVfzy4qrmtw5P9rajZ+QrPCe38oBPgI4Kg7WcLt3t/j7e9o+/o6J6lpldMro0qXkzMGfuUODB1NaGt+bg5s305AhrENIEBVFW7eyDiHN2rWk1bIOAdABDtbQ48cLXfp/yQu1YqSPykkuPUjBwawTSKNW06OP3n/SbV5ERLBOII27O40Zw/ek22FhrBMAdIyDXaNdhQOEAABgO0cswloUIQAA2IqDIkxKcq+v78L4/DoxykdGRfjpp/TFF6xDSHD7NiUmcvA76cTf/sb3jM///je9+CLrENL8/e+Unc06BEAHOFjB5eY6216E9W1kaJLXDZh++on0etYhJPj5ZzpzRkZ/z24oLKTr11mHkODmTe5nrC4p4fsGIODYOCjCLimoFUdrVc6O9rEAAKCnOFpj5NfJ6wpCAACQOYcrwloxEkUIAAA2c8AilNWZMgAAIHMOVYTN7XStURzZH0UIAAC26sLMMgUFBSdOnPD19V2wYIG7u/t9x2RlZRUUFGi12ujo6ICAADuFtFVhnTiiv8rFocodAAB6lq2lceDAgRkzZtTW1u7Zs2fatGkWy72TT1osloULF77wwgsGg+Hs2bMHDx60V0RnZ9HFxaaRF2S5X9TZmWzML08uLnznJ/4/Au/5ySE+AjgwW7cIN23alJKSsnjx4ra2tvDw8IyMjJiYmN8PSEtLKy4uvnDhgqdnFybItsXp082+vl62jCyoE8frZFeE69fzPe/+oEGUkyOwTiHJ7t3Uty/rEBKMG0dffcU6hDTvvktubqxDAHTApi3C69evX7p06YknniAiFxeXmTNnHj9+/J4xX331VVJSUnFx8d69e69evWrHiBqNaOPIfJndfcnKw4M62JHMjf79WSeQRqMhJ853mPP+FXh5YYsQ5MumLUKDweDl5eXt7W196ufnd/HixXvGXL161WAwZGdnBwcHP//886mpqXFxcfd9N6PRmJOTs27dul8SODsnJyfrdLqO/usmk8nV1fWBIVsF0tc7DfM0m0y2fCboAkEQzGazE+9lwjkbFwToOYIgmEwmtVrNOoiidXVBcHV1VT1op5xNRahSqUTxt80yURT/+L6CIOh0uqNHjxLRpEmT1q5d21EREpGbm5tGo/n1qV3WsMV3aFhfcsdPFAAAusKmIvT3929qampoaLBuFN64ccPPz++PY8aMGWN9PG7cuMrKytbW1vueXKrT6caOHbtx40YbI0ZFuZw65TRgwAOGXaq3PDJAdHOT3f6XLVvI05P++lfWObqrpoZiYsTcXJUbtwd5Fi2i556jyZNZ5+iuwkLasIH27zfz+xW89BKNH0+LFrHOIY0gCETE77fgGMxm+y8INm2K+fv7jxo16vDhw0TU1tZ27NixGTNmEFFLS8uVK1esY2bNmnXp0iXr4+Li4oCAgI4useiqu3dVra0PHlYg19sQNjVRYyPrEBK0tFB9vRz/sLZrbOT7K+D9J0T8fwXg2Gw9a/SNN95YsWLFxYsXz58/7+fnFx0dTUQFBQUTJ0607jVdtmzZRx999PTTTwcFBX388cfvv/9+D6a+nwu14rP/gYNYAADQNbYWYWxs7JAhQ7Kzs5OSkmJjY61H9YYPH37o0CHrAI1Gc+HChQMHDjQ3N2dnZ48cObKnIt+P2UKXfxZHa/necAEAgN7XhZllIiIiIiIifv9PtFrtk08++evTvn37JiYm2i1aV5TcEUO8VX268GkAAACIHGauUcy1DQAA3eMoRSjXM2UAAEDmHKUIa1GEAADQHRwcVQsOtvTp09l18i3tVHJHjJTrrlGdjjw8WIeQwMuLgoJsneVOnvz8yMeHdQgJ+venwEDWIaT5059o4EDWIQA6wEERHj3a/Ovsbvd1skaMGqDylt2V9L9YvZp1Aml0OsrMtJjNrHNIsHMn6wTSjBhB+/ZRQwPrHBK8+SbrBAAdc4RdoxnVluhAR/ggAADQ+xyhP45Wi7MGyXS/KAAAyBwHRVhZ2VnI8gaxsU3Wl9LfuUN377IOIYEoUkUF6xDSXL9OXO/aFQSqqmIdQhqjkZqaWIcA6AAHRThrlkdNTYf/9tsqcVagk3xrkGjrVtqxg3UICSoradYsvm/q8dxzdOIE6xAS5OXRX/7COoQ0r75KX3zBOgRABzgoQotFJXR8g/SMKku0vPeLWizUSX75EwS+85NDfAUWC+sQ0vD+FYBj46AIO2ESKOemONWf708BAAAM8V0hp26ID2lVWtwdDAAAuovvIsyowoUTAAAgCd8tcrRanBUo6wOEAAAgcxwXYUWD+LNJjMQUowAAIAHHRXi0Wpwp7wsnAABA/jiYa3T27HaN5j4TiWZUi/GhHPTgww+TuzvrEBL4+NDs2XxPuj1pEoWGsg4hQWAgTZ3KOoQ048dTeDjrEAAdUIlib6/jtm3bVlZWlpKSYuP4hoaGP066bbaQ7h9tZU+5+OCU0Z4nCILZbPbg+iYa/LvvggC9SRAEk8nk6enJOoii9cSCwOuu0cPXLKO1KrQgAABIxGURikRbiizrRnMZHgAAZIWDLjl2zPmeyZm+vmaxiDRnMAfhiejyZdLrWYeQoK2NMjI4OBbbiZwcun2bdQgJGhv5niuViPLzqbqadQiADnDQJS++6H7PpNv/XWB5PYqb80XT02n/ftYhJKiqotWrOfiddOLtt+nsWdYhJCgqotdeYx1Cmh076Ngx1iEAOsDfCu6ba5Z2kf4cxFPyXj8hCUB2sBSAbPFUJ1abCy2vRXKzOQgAADLHWREeqRRb2ulJrjYHAQBAzjhrlDcLhDceccL2IAAA2AtPRbi3zNIi0FxsDgIAgP1wMMWa1f8WW/6n2HJouhqbgwAAYEccFGFzO/3X94LRXTz7Z/VgL9QgAADYEwdFOCWpbepDzgnh6j4chL2P2bPJ5T5zhnPDz4/Wr7ewTiFJYiJFRrIOIcHw4ZSczDqENAsX0qBBrEMAdIDXSbehN2HSbTnAgsAcJt2WA0y6DQAAYGcoQgAAUDQOijAzM1O4Z9Zt6F0Gg6GwsJB1CqXLyspqb29nnULRbty4kZ+fzzqF0mVnZ5vNZvu+JwdFuHr16pp7Zt2G3pWZmZmamso6hdK99NJLVVVVrFMoWnZ29gcffMA6hdKtW7euoqLCvu/JQRECc71/RhWADGFBcFQoQgAAUDQUIQAAKBqDa9QrKioOHTpUWlpq4/i6urrFixe7ubn1aCrohMFguHPnzvTp01kHUTSj0ZiQkODu7s46iHLV1NTU1dVhQWDLYDAkJibafjXnvHnzkh80IQWDC+rLysry8vIGDBhg4/jy8vLg4GCVCpOrMdPc3NzQ0ODr68s6iKJVVFQEBQVhQWAIC4IcdHVBCAkJGTJkSOdjGBQhAACAfOAYIQAAKBqKEAAAFA1FCAAAioYiBAAARZP7Lf5KSkp+/PHHoUOHTpo0iXUWhSopKSkqKvLw8Jg8ebJWq2UdR7ksFsvJkycHDRo0bNgw1lkUqqSkJC8vT6PRTJo0ycfHh3UcJcrLy7t8+bJOp5s6daqL/W70Kustwt27d0+ZMuXcuXNLly5dtWoV6zhKtHHjxjlz5hw5cmTXrl1Dhw49d+4c60TKlZqaOnPmzJ07d7IOolAbNmyYPn16VlbWp59+avvtVMGOkpOT4+PjCwsL33nnnaioqIaGBnu9s3wvn2hrawsKCkpLS5s+fbrRaAwNDS0qKnrg5SBgX+Xl5YMHD1ar1US0Zs0avV5/+PBh1qGU6Nq1a3PmzBkxYkRQUNC7777LOo7iZGRkJCYmFhUV6XQ61lkUqqGhQaPRXLp0KTw83GKxDB8+fPPmzQsXLrTLm8t3izA/P7+1tXXq1KlEpNPpJk6ceOTIEdahFCckJMTagkTk5+dnMpnY5lGsFStWbNmyxcvLi3UQhdq7d29iYmJra2t2drbRaGQdR4lcXV29vb2bm5uJqL293WQy2T4rywPJtwivX7/u7+/v5PRLwoCAAIPBwDaSkt2+fXv79u1Lly5lHUSJdu3apdPp5syZwzqIcpWVleXm5s6dOzc1NTU8PPzgwYOsEymOm5vbl19+mZCQEBcXN2bMmOXLl0+ZMsVeby7fk2UEQfj9JDpqtRp3JWWlpaVl/vz50dHR9toRAbarqal5++23z5w5wzqIorW2thJRXl6eWq3+/PPPV61aNW/ePNahlMVisWzbti08PDwuLq60tPSTTz5ZsmRJUFCQXd5cvkXo5+f3+10QN2/eDAsLY5hHsUwm07x58wIDA3fs2ME6ixJ9+OGHnp6er776KhGdOXPG3d3dx8dn/fr1rHMpi7+/f2hoqPUwweOPP15TU1NbW2vHXXPwQLm5uadPnzYajdaTRa9cuZKamrplyxa7vLl8izAyMtKe4KzZAAAEA0lEQVRkMhUWFj788MMtLS2nT59+/fXXWYdSHLPZHBcX5+3tvXv37l93U0NvWrBgwciRI62P9Xq9t7f32LFj2UZSoClTpmRlZVkf6/X6Pn369O/fn20kpVGr1YIgCIJgLUKz2ezsbLf+ku9Zo0S0adOmffv2rVy58siRI25ubt9++y3rRIrz8ssvp6SkLFmyxPqbGzhw4ObNm1mHUq6kpCQfHx+cNdr77t69GxkZGRMTExYWlpKSsnTp0g0bNrAOpSxtbW0TJkzQaDTz588vLS3ds2dPXl6evXYTyroIiejQoUPnzp0LDQ1NSEjALQl738mTJ3/66adfn/bt23fRokUM8yjcqVOn3N3dx48fzzqIEtXW1qalpdXX10+ePNmOp2mA7VpbW/ft26fX6wcMGBAXFxcYGGivd5Z7EQIAAPQoHPUBAABFQxECAICioQgBAEDRUIQAAKBoKEIAAFA0FCEAACiafGeWAQAiqqqqOnHihPVxfHy8q6trJ4MNBkNmZqb18cKFCz08PHo8HwD/UIQALH3zzTeurq7R0dEdDcjPz3/22WejoqI8PDxiY2M7L8Lq6uqdO3cajUa9Xj9jxgwUIYAtsGsUgKX33ntv+/btDxyWnp6ek5Pj7e3d+bBx48bl5OS88sordkoHoAgoQgBe1dfX37p1C5NDAUiEIgRg5tFHH/3hhx+OHz+u1Wq1Wu2CBQtsfGF6enpQUFC/fv10Op2np2d8fHyP5gRwbDhGCMDM1q1bly9f3qdPH+s9PXx8fGx5VWlp6TPPPJOcnLxs2TJXV9fy8vLc3NweTgrgyFCEAMw89thjGo2mX79+06ZNs/1VBQUFgiBs2rRJq9USUVhYWCfn2gDAA2HXKABnIiIinJyc5s6d+9lnn9XW1rKOA8A9FCEAZ0aNGrV///7GxsaEhARfX98JEyacPHmSdSgAjqEIAfgTGxubn59vMBjS0tKamppiYmKqq6tZhwLgFYoQgCUvL6+WlpbuvdbPz2/JkiWpqaktLS1FRUX2DQagHChCAJZGjhyZl5e3f//+8+fP6/V6W16yb9++rVu36vV6s9lsNBr37Nnj4uLy0EMP9XRUAEeFs0YBWFq3bp1er1+5cuXt27dnzpyZkZHxwJeIovjWW2+tWbPG+jQgICA9PX3w4ME9nBTAYaEIAVjy9fX9+uuvu/SS+Pj4p5566tq1a7du3dJqtcHBwc7OWJABug/LDwAHRo8eTURGo1Gj0RCRk5NTSEhISEjIPcMyMzNnz55tsVgYRATglgoTFQLIWWNjY1VVlfVxWFiYk1Nnx/WbmpoqKyutj4cNG4YtRQBboAgBAEDRcNYoAAAoGooQAAAUDUUIAACKhiIEAABF+z+1s0S6l/IZegAAAABJRU5ErkJggg==" />

Override Function

After overwriting a function, the previous one is no longer accessible. The original function fmi2GetReal() is cached by storing the address of the pointer. The addresses of the pointers are kept in the FMU and are thus accessible.

# save, where the original `fmi2GetReal` function was stored, so we can access it in our new function
originalGetReal = fmu.cGetReal
Ptr{Nothing} @0x000000018008da60

To overwrite the function fmi2GetReal!(), the function header of the new custom function must be identical to the previous one. The function header looks like fmi2GetReal!(cfunc::Ptr{Nothing}, c::fmi2Component, vr::Union{Array{fmi2ValueReference}, Ptr{fmi2ValueReference}}, nvr::Csize_t, value::Union{Array{fmi2Real}, Ptr{fmi2Real}})::fmi2Status. The information how the FMI2 function are structured can be seen from FMICore.jl, the api of fmi2GetReal! or the FMI2.0.3-specification.

In the new implementation the original function is called by the previously stored pointer. Next there is a special handling if value is a pointer to an array. In this case the pointer is treated as an array, so that the entries are accessible. Otherwise, each value in value is multiplied by two. Finally, the original state of the original function is output.

function myGetReal!(c::fmi2Component, vr::Union{Array{fmi2ValueReference}, Ptr{fmi2ValueReference}}, 
                    nvr::Csize_t, value::Union{Array{fmi2Real}, Ptr{fmi2Real}})
    # first, we do what the original function does
    status = fmi2GetReal!(originalGetReal, c, vr, nvr, value)

    # if we have a pointer to an array, we must interprete it as array to access elements
    if isa(value, Ptr{fmi2Real})
        value = unsafe_wrap(Array{fmi2Real}, value, nvr, own=false)
    end

    # now, we multiply every value by two (just for fun!)
    for i in 1:nvr 
        value[i] *= 2.0 
    end 

    # return the original status
    return status
end
myGetReal! (generic function with 1 method)

In the next command the original function is overwritten with the new defined function, for which the command fmiSetFctGetReal() is called.

# no we overwrite the original function
fmi2SetFctGetReal(fmu, myGetReal!)
Ptr{Nothing} @0x000002810fdf0fc0

Simulate and Plot FMU with modified function

As before, the identical command is called here for simulation. This is also a model exchange simulation. Immediately afterwards, the results are added to the previous graph as a dashed line.

simData = simulate(fmu, (tStart, tStop); recordValues=vrs)
plot!(fig, simData; states=false, style=:dash)

<img src="data:image/png;base64,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tXPnzpMmTZIwHgt35MgRNze3yMhIqQOxRKWlpZs3b66rq4uNjR06dKjU4ViixsbG77///tq1a66urtOmTfP29haqZVknQoQQQkhs2MdCCCFk0TARIoQQsmiYCBFCCFk0TIQIIYQsGiZChBBCFg0TIUIIIYsm35VlEEIAkJube/r06ZafZ82a1fbG+fn5p06davn5ueeeYxhG3OAQMgs4jxAhKe3YscPFxSU2NlbbBt99993s2bP79eunVqvvZ0RtTpw48c4779y6dSsvL6++vt7GxkboeBEyQzg0ipCUVq5cGR8f3+5me/fubTcLAkBsbOzp06f/8pe/CBEaQpYCEyFCSlVVVYUPiUXIeJgIEZJM165dMzMzf/zxRxcXFxcXl3nz5un4hxs2bPD09HR2dnZzc7Ozs1u0aJGocSJk3rBYBiHJbNiwYebMmYGBga+//joAeHh46PJX586dW7x48YoVK5599lmGYa5fv56SkiJypAiZM0yECElmyJAh9vb2np6eI0eO1P2vLl26RNP0ypUr1Wo1AISHh0+YMEG0GBEyfzg0ipDCREZGchw3bty477//vrKyUupwEFI8TIQIKcygQYO+++67kpKSGTNmuLm5DRs27MKFC1IHhZCCYSJESHlmzpx59erVwsLCb7755vbt26NHj757967UQSGkVJgIEZKSvb19Q0ODYX/r4+MzZ86ctWvXVldXZ2ZmChsYQpYDi2UQklK3bt327t27Z88eX19fZ2fnwMDAdv8kPj6+oaFh7Nixfn5+ZWVlW7ZssbW17dq1qwmiRcgsYY8QISm98847UVFRs2fPjo6OfuONN3T5E5Zl33rrraCgILVa7e3tff78+ZaZiGKHipC5wh4hQlLy8/M7dOiQXn+ycOHCefPm5efnV1RUuLq6+vv74+LaCBkDEyFCCuDn5wcAzc3NLb8yDBMUFBQUFPTQZjt27HjmmWcIIaaODyElw6dPICRr1dXVt27davm53RuBtbW1RUVFLT+Hh4dTFCVucAiZBUyECCGELBoWyyCEELJomAgRQghZNEyECCGELBomQoQQQhbt/wH2HeZCSC1EdAAAAABJRU5ErkJggg==" />

As expected by overwriting the function, all values are doubled.

Unload FMU

After plotting the data, the FMU is unloaded and all unpacked data on disc is removed.

unloadFMU(fmu)

Summary

In this tutorial it is shown how an existing function of the library can be replaced by an own implementation.