diff --git a/.build/CMakeFiles/cmake.check_cache b/.build/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/.build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/.gitignore b/.gitignore index 2688100..03c86e1 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,7 @@ dist ninja_build_release _builds _logs +.venv +.vcpkg +.build +_codeql_detected_source_root diff --git a/.vcpkg b/.vcpkg new file mode 160000 index 0000000..5d57f5a --- /dev/null +++ b/.vcpkg @@ -0,0 +1 @@ +Subproject commit 5d57f5a0a5469a23e005fc79a7c1814ab4fc967e diff --git a/.venv/bin/Activate.ps1 b/.venv/bin/Activate.ps1 new file mode 100644 index 0000000..b49d77b --- /dev/null +++ b/.venv/bin/Activate.ps1 @@ -0,0 +1,247 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/.venv/bin/activate b/.venv/bin/activate new file mode 100644 index 0000000..999ff35 --- /dev/null +++ b/.venv/bin/activate @@ -0,0 +1,70 @@ +# This file must be used with "source bin/activate" *from bash* +# You cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # Call hash to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + hash -r 2> /dev/null + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +# on Windows, a path can contain colons and backslashes and has to be converted: +if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then + # transform D:\path\to\venv to /d/path/to/venv on MSYS + # and to /cygdrive/d/path/to/venv on Cygwin + export VIRTUAL_ENV=$(cygpath /home/runner/work/leanp2p/leanp2p/.venv) +else + # use the path as-is + export VIRTUAL_ENV=/home/runner/work/leanp2p/leanp2p/.venv +fi + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/"bin":$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1='(.venv) '"${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT='(.venv) ' + export VIRTUAL_ENV_PROMPT +fi + +# Call hash to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +hash -r 2> /dev/null diff --git a/.venv/bin/activate.csh b/.venv/bin/activate.csh new file mode 100644 index 0000000..d7e8c33 --- /dev/null +++ b/.venv/bin/activate.csh @@ -0,0 +1,27 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. + +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV /home/runner/work/leanp2p/leanp2p/.venv + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/"bin":$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + set prompt = '(.venv) '"$prompt" + setenv VIRTUAL_ENV_PROMPT '(.venv) ' +endif + +alias pydoc python -m pydoc + +rehash diff --git a/.venv/bin/activate.fish b/.venv/bin/activate.fish new file mode 100644 index 0000000..c1a357c --- /dev/null +++ b/.venv/bin/activate.fish @@ -0,0 +1,69 @@ +# This file must be used with "source /bin/activate.fish" *from fish* +# (https://fishshell.com/). You cannot run it directly. + +function deactivate -d "Exit virtual environment and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + set -e _OLD_FISH_PROMPT_OVERRIDE + # prevents error when using nested fish instances (Issue #93858) + if functions -q _old_fish_prompt + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + end + + set -e VIRTUAL_ENV + set -e VIRTUAL_ENV_PROMPT + if test "$argv[1]" != "nondestructive" + # Self-destruct! + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV /home/runner/work/leanp2p/leanp2p/.venv + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/"bin $PATH + +# Unset PYTHONHOME if set. +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # Save the current fish_prompt function as the function _old_fish_prompt. + functions -c fish_prompt _old_fish_prompt + + # With the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command. + set -l old_status $status + + # Output the venv prompt; color taken from the blue of the Python logo. + printf "%s%s%s" (set_color 4B8BBE) '(.venv) ' (set_color normal) + + # Restore the return status of the previous command. + echo "exit $old_status" | . + # Output the original/"old" prompt. + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" + set -gx VIRTUAL_ENV_PROMPT '(.venv) ' +end diff --git a/.venv/bin/asn1tools b/.venv/bin/asn1tools new file mode 100755 index 0000000..41b6434 --- /dev/null +++ b/.venv/bin/asn1tools @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from asn1tools.__init__ import _main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(_main()) diff --git a/.venv/bin/ccmake b/.venv/bin/ccmake new file mode 100755 index 0000000..be3b98d --- /dev/null +++ b/.venv/bin/ccmake @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from cmake import ccmake +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(ccmake()) diff --git a/.venv/bin/cmake b/.venv/bin/cmake new file mode 100755 index 0000000..0f3b30b --- /dev/null +++ b/.venv/bin/cmake @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from cmake import cmake +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cmake()) diff --git a/.venv/bin/cpack b/.venv/bin/cpack new file mode 100755 index 0000000..c3239ee --- /dev/null +++ b/.venv/bin/cpack @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from cmake import cpack +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cpack()) diff --git a/.venv/bin/ctest b/.venv/bin/ctest new file mode 100755 index 0000000..a69af67 --- /dev/null +++ b/.venv/bin/ctest @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from cmake import ctest +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(ctest()) diff --git a/.venv/bin/pip b/.venv/bin/pip new file mode 100755 index 0000000..d4d3e78 --- /dev/null +++ b/.venv/bin/pip @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/pip3 b/.venv/bin/pip3 new file mode 100755 index 0000000..d4d3e78 --- /dev/null +++ b/.venv/bin/pip3 @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/pip3.12 b/.venv/bin/pip3.12 new file mode 100755 index 0000000..d4d3e78 --- /dev/null +++ b/.venv/bin/pip3.12 @@ -0,0 +1,8 @@ +#!/home/runner/work/leanp2p/leanp2p/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/python b/.venv/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/.venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/.venv/bin/python3 b/.venv/bin/python3 new file mode 120000 index 0000000..ae65fda --- /dev/null +++ b/.venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/.venv/bin/python3.12 b/.venv/bin/python3.12 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/.venv/bin/python3.12 @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/INSTALLER b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/METADATA b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/METADATA new file mode 100644 index 0000000..1c90809 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/METADATA @@ -0,0 +1,466 @@ +Metadata-Version: 2.4 +Name: asn1tools +Version: 0.167.0 +Summary: ASN.1 parsing, encoding and decoding. +Home-page: https://github.com/eerimoq/asn1tools +Author: Erik Moqvist +Author-email: erik.moqvist@gmail.com +License: MIT +Keywords: ASN.1,asn1 +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 3 +License-File: LICENSE +Requires-Dist: pyparsing>=3.1.2 +Requires-Dist: bitstruct +Provides-Extra: shell +Requires-Dist: prompt_toolkit; extra == "shell" +Provides-Extra: cache +Requires-Dist: diskcache; extra == "cache" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: keywords +Dynamic: license +Dynamic: license-file +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: summary + +|coverage|_ +|codecov|_ +|nala|_ + +About +===== + +A Python package for `ASN.1`_ parsing, encoding and decoding. + +This project is *under development* and does only support a subset +of the ASN.1 specification syntax. + +Supported codecs: + +- Basic Encoding Rules (BER) +- Distinguished Encoding Rules (DER) +- Generic String Encoding Rules (GSER) +- JSON Encoding Rules (JER) +- Basic Octet Encoding Rules (OER) +- Aligned Packed Encoding Rules (PER) +- Unaligned Packed Encoding Rules (UPER) +- XML Encoding Rules (XER) + +Miscellaneous features: + +- `C` source code generator for OER and UPER (with some limitations). + +Project homepage: https://github.com/eerimoq/asn1tools + +Documentation: http://asn1tools.readthedocs.org/en/latest + +Known limitations +================= + +- The ``CLASS`` keyword (X.681) and its friends are not yet supported. + +- Parametrization (X.683) is not yet supported. + +- The ``EMBEDDED PDV`` type is not yet supported. + +- The ``ANY`` and ``ANY DEFINED BY`` types are not supported. They + were removed from the ASN.1 standard 1994. + +- ``WITH COMPONENT`` and ``WITH COMPONENTS`` constraints are ignored, + except for OER ``REAL``. + +- The ``DURATION`` type is not yet supported. + +Installation +============ + +.. code-block:: python + + pip install asn1tools + +Example Usage +============= + +This is an example ASN.1 specification defining the messages of a +fictitious Foo protocol (based on the FooProtocol on Wikipedia). + +.. code-block:: text + + Foo DEFINITIONS ::= BEGIN + + Question ::= SEQUENCE { + id INTEGER, + question IA5String + } + + Answer ::= SEQUENCE { + id INTEGER, + answer BOOLEAN + } + + END + +Scripting +--------- + +`Compile`_ the ASN.1 specification, and `encode`_ and `decode`_ a +question using the default codec (BER). + +.. code-block:: python + + >>> import asn1tools + >>> foo = asn1tools.compile_files('tests/files/foo.asn') + >>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) + >>> encoded + bytearray(b'0\x0e\x02\x01\x01\x16\x09Is 1+1=3?') + >>> foo.decode('Question', encoded) + {'id': 1, 'question': 'Is 1+1=3?'} + +The same ASN.1 specification, but using the PER codec. + +.. code-block:: python + + >>> import asn1tools + >>> foo = asn1tools.compile_files('tests/files/foo.asn', 'per') + >>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) + >>> encoded + bytearray(b'\x01\x01\tIs 1+1=3?') + >>> foo.decode('Question', encoded) + {'id': 1, 'question': 'Is 1+1=3?'} + +See the `examples`_ folder for additional examples. + +Command line tool +----------------- + +The shell subcommand +^^^^^^^^^^^^^^^^^^^^ + +Use the command line shell to convert data between given formats. The +default input codec is BER and output codec is GSER (produces human +readable text). + +.. code-block:: text + + > asn1tools shell + + Welcome to the asn1tools shell! + + $ help + Commands: + compile + convert + exit + help + $ compile tests/files/foo.asn + $ convert Question 300e0201011609497320312b313d333f + question Question ::= { + id 1, + question "Is 1+1=3?" + } + $ compile --output-codec xer tests/files/foo.asn + $ convert Question 300e0201011609497320312b313d333f + + 1 + Is 1+1=3? + + $ compile -o uper tests/files/foo.asn + $ convert Question 300e0201011609497320312b313d333f + 01010993cd03156c5eb37e + $ exit + > + +The convert subcommand +^^^^^^^^^^^^^^^^^^^^^^ + +Convert given encoded Question from BER to GSER (produces human +readable text). + +.. code-block:: text + + > asn1tools convert tests/files/foo.asn Question 300e0201011609497320312b313d333f + question Question ::= { + id 1, + question "Is 1+1=3?" + } + > + +Convert given encoded Question from UPER to XER (xml). + +.. code-block:: text + + > asn1tools convert -i uper -o xer tests/files/foo.asn Question 01010993cd03156c5eb37e + + 1 + Is 1+1=3? + + > + +Convert given encoded Question from UPER to JER (json). + +.. code-block:: text + + > asn1tools convert -i uper -o jer tests/files/foo.asn Question 01010993cd03156c5eb37e + { + "id": 1, + "question": "Is 1+1=3?" + } + > + +Continuously convert encoded Questions read from standard input. Any +line that cannot be converted is printed as is, in this example the +dates. + +.. code-block:: text + + > cat encoded.txt + 2018-02-24 11:22:09 + 300e0201011609497320312b313d333f + 2018-02-24 11:24:15 + 300e0201021609497320322b323d353f + > cat encoded.txt | asn1tools convert tests/files/foo.asn Question - + 2018-02-24 11:22:09 + question Question ::= { + id 1, + question "Is 1+1=3?" + } + 2018-02-24 11:24:15 + question Question ::= { + id 2, + question "Is 2+2=5?" + } + > + +The convert subcommand with a cache +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Convert given encoded PCCH-Message from UPER to GSER with the +``--cache-dir`` option set to ``my_cache``. Using a cache +significantly reduces the command execution time after the first call. + +.. code-block:: text + + > time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28 + pcch-message PCCH-Message ::= { + message c1 : paging : { + systemInfoModification true, + nonCriticalExtension { + } + } + } + + real 0m2.090s + user 0m1.977s + sys 0m0.032s + > time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28 + pcch-message PCCH-Message ::= { + message c1 : paging : { + systemInfoModification true, + nonCriticalExtension { + } + } + } + + real 0m0.276s + user 0m0.197s + sys 0m0.026s + > + +The parse subcommand +^^^^^^^^^^^^^^^^^^^^ + +Parse given ASN.1 specification and write it as a Python dictionary to +given file. Use the created file to convert given encoded Question +from BER to GSER (produces human readable text). The conversion is +significantly faster than passing .asn-file(s) to the convert +subcommand, especially for larger ASN.1 specifications. + +.. code-block:: text + + > asn1tools parse tests/files/foo.asn foo.py + > asn1tools convert foo.py Question 300e0201011609497320312b313d333f + question Question ::= { + id 1, + question "Is 1+1=3?" + } + > + +The generate C source subcommand +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Generate OER or UPER C source code from an ASN.1 specification. + +No dynamic memory is used in the generated code. To achieve this all +types in the ASN.1 specification must have a known maximum size, +i.e. ``INTEGER (0..7)``, ``OCTET STRING (SIZE(12))``, etc. + +Below is an example generating OER C source code from +`tests/files/c_source/c_source.asn`_. + +.. code-block:: text + + > asn1tools generate_c_source --namespace oer tests/files/c_source/c_source.asn + Successfully generated oer.h and oer.c. + +The same as above, but generate UPER C source code instead of OER. + +.. code-block:: text + + > asn1tools generate_c_source --codec uper --namespace uper tests/files/c_source/c_source.asn + Successfully generated uper.h and uper.c. + +The same as the first example, but also generate fuzz testing C source +code for `libFuzzer`_. + +.. code-block:: text + + > asn1tools generate_c_source --namespace oer --generate-fuzzer tests/files/c_source/c_source.asn + Successfully generated oer.h and oer.c. + Successfully generated oer_fuzzer.c and oer_fuzzer.mk. + + Run "make -f oer_fuzzer.mk" to build and run the fuzzer. Requires a + recent version of clang. + +See `oer.h`_, `oer.c`_, `uper.h`_, `uper.c`_, `oer_fuzzer.c`_ and +`oer_fuzzer.mk`_ for the contents of the generated files. + +Limitations by design: + +- Only the types ``BOOLEAN``, ``INTEGER``, ``NULL``, ``OCTET STRING``, + ``BIT STRING``, ``ENUMERATED``, ``SEQUENCE``, ``SEQUENCE OF``, and ``CHOICE`` + are supported. The OER generator also supports ``REAL``. + +- All types must have a known maximum size, i.e. ``INTEGER (0..7)``, + ``OCTET STRING (SIZE(12))``. + +- ``INTEGER`` must be 64 bits or less. + +- ``REAL`` must be IEEE 754 binary32 or binary64. binary32 is + generated as ``float`` and binary64 as ``double``. + +- Recursive types are not supported. + +Known limitations: + +- Extension additions (``...``) are only supported in the OER generator. + See `compact_extensions_uper`_ for how to make UPER ``CHOICE`` and + ``SEQUENCE`` extendable without using ``...``. + +- Named numbers in ``ENUMERATED`` are not yet supported. + +Other OER and/or UPER C code generators: + +- https://github.com/vlm/asn1c + +- https://github.com/ttsiodras/asn1scc + +See the `benchmark example`_ for a comparison of `asn1c`, `asn1scc` +and `asn1tools`. + +Contributing +============ + +#. Fork the repository. + +#. Install prerequisites. + + .. code-block:: text + + pip install -r requirements.txt + +#. Implement the new feature or bug fix. + +#. Implement test case(s) to ensure that future changes do not break + legacy. + +#. Run the tests. + + .. code-block:: text + + make test + +#. Create a pull request. + +Specifications +============== + +ASN.1 specifications released by ITU and IETF. + +General +------- + +- `X.680: Specification of basic notation + `_ + +- `X.681: Information object specification + `_ + +- `X.682: Constraint specification + `_ + +- `X.683: Parameterization of ASN.1 specifications + `_ + +Encodings +--------- + +- `X.690: Specification of Basic Encoding Rules (BER), Canonical + Encoding Rules (CER) and Distinguished Encoding Rules (DER) + `_ + +- `X.691: Specification of Packed Encoding Rules (PER) + `_ + +- `X.693: XML Encoding Rules (XER) + `_ + +- `X.696: Specification of Octet Encoding Rules (OER) + `_ + +- `RFC 3641: Generic String Encoding Rules (GSER) for ASN.1 + `_ + +- `Overview of the JSON Encoding Rules (JER) + `_ + +.. |coverage| image:: https://coveralls.io/repos/github/eerimoq/asn1tools/badge.svg?branch=master +.. _coverage: https://coveralls.io/github/eerimoq/asn1tools + +.. |codecov| image:: https://codecov.io/gh/eerimoq/asn1tools/branch/master/graph/badge.svg +.. _codecov: https://codecov.io/gh/eerimoq/asn1tools + +.. |nala| image:: https://img.shields.io/badge/nala-test-blue.svg +.. _nala: https://github.com/eerimoq/nala + +.. _ASN.1: https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One + +.. _Compile: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compile_files +.. _encode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.encode +.. _decode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.decode +.. _examples: https://github.com/eerimoq/asn1tools/tree/master/examples + +.. _tests/files/c_source/c_source.asn: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/c_source.asn + +.. _oer.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.h + +.. _oer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.c + +.. _uper.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.h + +.. _uper.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.c + +.. _oer_fuzzer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.c + +.. _oer_fuzzer.mk: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.mk + +.. _libFuzzer: https://llvm.org/docs/LibFuzzer.html + +.. _benchmark example: https://github.com/eerimoq/asn1tools/blob/master/examples/benchmarks/c_source + +.. _compact_extensions_uper: https://github.com/eerimoq/asn1tools/blob/master/examples/compact_extensions_uper diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/RECORD b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/RECORD new file mode 100644 index 0000000..9a3aaa3 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/RECORD @@ -0,0 +1,69 @@ +../../../bin/asn1tools,sha256=w9EX0z-gQeNm-Gxl-v1p3xXIckc1Ibr-TrCfK2L6GaA,254 +asn1tools-0.167.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +asn1tools-0.167.0.dist-info/METADATA,sha256=FsWqjP0TXq-oqbs4nw9wrA-yaBr0JRbXhDgrShTUyzA,13099 +asn1tools-0.167.0.dist-info/RECORD,, +asn1tools-0.167.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +asn1tools-0.167.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91 +asn1tools-0.167.0.dist-info/entry_points.txt,sha256=XlZKe8mNqNloK6UBPQXKMvZaRS4TwKi0zAa9_UXe5Gk,55 +asn1tools-0.167.0.dist-info/licenses/LICENSE,sha256=me6QDd3yFVOUKdfAmgMKt7LaBbgKcPoNQXctQr-d7N8,1085 +asn1tools-0.167.0.dist-info/top_level.txt,sha256=pPDCQu9GiGgzoNANwDfkiLMGZxU4wcGMphkKJL39eFc,10 +asn1tools/__init__.py,sha256=SDAgCTkPiy5mGX3mfyig-ZHiq8bnCdF5OLtb5hOFPbQ,15009 +asn1tools/__main__.py,sha256=AhtFO2YMJq9DS-C06R_Uy43lLRkQZqgcPeMzk4gpleQ,36 +asn1tools/__pycache__/__init__.cpython-312.pyc,, +asn1tools/__pycache__/__main__.cpython-312.pyc,, +asn1tools/__pycache__/compat.cpython-312.pyc,, +asn1tools/__pycache__/compiler.cpython-312.pyc,, +asn1tools/__pycache__/errors.cpython-312.pyc,, +asn1tools/__pycache__/parser.cpython-312.pyc,, +asn1tools/__pycache__/version.cpython-312.pyc,, +asn1tools/codecs/__init__.py,sha256=Vd8DIWdlKFcIEIWL1pYtlJJh16c6D4DjwIjcGVj4rtc,10234 +asn1tools/codecs/__pycache__/__init__.cpython-312.pyc,, +asn1tools/codecs/__pycache__/ber.cpython-312.pyc,, +asn1tools/codecs/__pycache__/compiler.cpython-312.pyc,, +asn1tools/codecs/__pycache__/constraints_checker.cpython-312.pyc,, +asn1tools/codecs/__pycache__/der.cpython-312.pyc,, +asn1tools/codecs/__pycache__/gser.cpython-312.pyc,, +asn1tools/codecs/__pycache__/jer.cpython-312.pyc,, +asn1tools/codecs/__pycache__/oer.cpython-312.pyc,, +asn1tools/codecs/__pycache__/per.cpython-312.pyc,, +asn1tools/codecs/__pycache__/permitted_alphabet.cpython-312.pyc,, +asn1tools/codecs/__pycache__/type_checker.cpython-312.pyc,, +asn1tools/codecs/__pycache__/uper.cpython-312.pyc,, +asn1tools/codecs/__pycache__/xer.cpython-312.pyc,, +asn1tools/codecs/ber.py,sha256=zINaVhUMV6SHMVLU_JN-27eVJIShn2I6pv7XChfxqR8,57074 +asn1tools/codecs/compiler.py,sha256=9yCWsjfohVZa2ycFfxrI-PYrbYpoztZItmcEy2Nu3so,41188 +asn1tools/codecs/constraints_checker.py,sha256=z9ZAeEkvdTgxAx6RcKJiVDDC-VzOyClnbzRs2umkTBk,14177 +asn1tools/codecs/der.py,sha256=-n16cS7ruAtELyKAyxQLSM2DIDCXdLidzHlxPmvg3Bg,13167 +asn1tools/codecs/gser.py,sha256=kFZDz7XIzNY_a2VokB-O7VKlMhwS53_m53ryBQ18zo4,17000 +asn1tools/codecs/jer.py,sha256=mGvxmMtLbCh8V0jrMygPfrUj_hMQhCKXzimasgvroqo,17498 +asn1tools/codecs/oer.py,sha256=2QDNC3gzsn-j-EBHnL7i1iiORlY7nAqk9mHZRQPRLd8,47470 +asn1tools/codecs/per.py,sha256=VK0ni8T24HnEQt9R6kaQUP8Q98g1YAreLBOQoWhHKGo,74173 +asn1tools/codecs/permitted_alphabet.py,sha256=wYcjO8e8cybjYxU3y4JQk41w7Icz1oMkuRzXTkXxims,621 +asn1tools/codecs/type_checker.py,sha256=rRy1oXBsZXhv5bfGMFdtSXrSFggrikKngDqo_nPcxIc,11443 +asn1tools/codecs/uper.py,sha256=4ATFoT_HesndMM5ej_fPSzXzCHCH_RQ0ZzcplqfSYaY,23321 +asn1tools/codecs/xer.py,sha256=6z_ehaERUSPheTXL1pAFXH_Geyby0SzQ3rrjBCdSj5s,22376 +asn1tools/compat.py,sha256=aaPBngzW9--U39XI2DheDLpIHzqqE7Cq1k4OA-87H-o,1353 +asn1tools/compiler.py,sha256=oglTx2hRStujU1J5h2r3U70y-tqMP29t-FtZwAMJ88Q,13279 +asn1tools/errors.py,sha256=FHAqqFuHF4BOq_6d4fO-r7xGzWhZkPRoU0tgena2DiQ,421 +asn1tools/parser.py,sha256=4unz_bGXF9DcI_KeUEtYhrILEPAfx-hJExSYT9CTBfY,67068 +asn1tools/source/__init__.py,sha256=Nhilk7eOigBq6vkOMRLUUu-APduLMw0MSRvkgK_AfCk,26 +asn1tools/source/__pycache__/__init__.cpython-312.pyc,, +asn1tools/source/c/__init__.py,sha256=WGXZaxLojF5pmXSWvnOdp88pwiH7gETuTJj2y2hoVlg,12170 +asn1tools/source/c/__pycache__/__init__.cpython-312.pyc,, +asn1tools/source/c/__pycache__/oer.cpython-312.pyc,, +asn1tools/source/c/__pycache__/oer_functions.cpython-312.pyc,, +asn1tools/source/c/__pycache__/uper.cpython-312.pyc,, +asn1tools/source/c/__pycache__/uper_functions.cpython-312.pyc,, +asn1tools/source/c/__pycache__/utils.cpython-312.pyc,, +asn1tools/source/c/oer.py,sha256=RChlGq7XpLnAFgZNQYUVoVRdfPJp_KwVDqJNXb2IfcI,44091 +asn1tools/source/c/oer_functions.py,sha256=hXWcsuPVvQ8qgM2EbW5JCs0izpI7Cxi1naht30AtLwc,16306 +asn1tools/source/c/uper.py,sha256=ttMukbpfJGFduF_KhW6BId3gB4fagIZMZps4OboAfsY,25157 +asn1tools/source/c/uper_functions.py,sha256=EkY99vyyBxn6_AlxA90qhxmoEF34gCORTvnqOgw3Cs0,11094 +asn1tools/source/c/utils.py,sha256=ogrniJ51Kfsh5Oq6Ue0p65akiqF9mq8zkmg7Ws_MDkA,28123 +asn1tools/source/rust/__init__.py,sha256=fr8k0QcNsWLIdPse6urUT59Gln9FSmN4LC8j47NtPZw,649 +asn1tools/source/rust/__pycache__/__init__.cpython-312.pyc,, +asn1tools/source/rust/__pycache__/uper.cpython-312.pyc,, +asn1tools/source/rust/__pycache__/utils.cpython-312.pyc,, +asn1tools/source/rust/uper.py,sha256=tW6vusBEEtEI591lCnvd3WvYckIWN6bn4WDffDvy2uI,25253 +asn1tools/source/rust/utils.py,sha256=mnrukPW6G4OsyX7Omwd8GqqowBa1tulAnRwI0i1UFqc,18890 +asn1tools/version.py,sha256=uxD9LWC7QtPL41vPDhCZk3ya_r4IhDxE3NB1eIopg7o,24 diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/REQUESTED b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/WHEEL b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/WHEEL new file mode 100644 index 0000000..e7fa31b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/entry_points.txt b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/entry_points.txt new file mode 100644 index 0000000..2ef4782 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +asn1tools = asn1tools.__init__:_main diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/licenses/LICENSE b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/licenses/LICENSE new file mode 100644 index 0000000..3466fba --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/licenses/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2017-2019 Erik Moqvist + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/top_level.txt b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/top_level.txt new file mode 100644 index 0000000..1dc2202 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools-0.167.0.dist-info/top_level.txt @@ -0,0 +1 @@ +asn1tools diff --git a/.venv/lib/python3.12/site-packages/asn1tools/__init__.py b/.venv/lib/python3.12/site-packages/asn1tools/__init__.py new file mode 100644 index 0000000..bd1df32 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/__init__.py @@ -0,0 +1,448 @@ +"""The top level of the ASN.1 tools package contains commonly used +functions and classes, and the command line interface. + +""" + +import sys +import os +import argparse +import binascii +import logging +from pprint import pformat + + +try: + from prompt_toolkit.completion import WordCompleter + from prompt_toolkit import PromptSession + from prompt_toolkit.history import FileHistory + from prompt_toolkit.auto_suggest import AutoSuggestFromHistory + has_prompt_toolkit = True +except ImportError: + has_prompt_toolkit = False + + +from .compiler import compile_dict +from .compiler import compile_string +from .compiler import compile_files +from .compiler import pre_process_dict +from .parser import parse_string +from .parser import parse_files +from .parser import ParseError +from .errors import Error +from .errors import EncodeError +from .errors import DecodeError +from .errors import CompileError +from .errors import ConstraintsError +from . source import c +from . source import rust +from .version import __version__ + + +__author__ = 'Erik Moqvist' + + +class ArgumentParserError(Error): + pass + + +class ArgumentParser(argparse.ArgumentParser): + + def exit(self, status=0, message=None): + if message: + self._print_message(message, sys.stdout) + + raise ArgumentParserError(message) + + def error(self, message): + self.print_usage(sys.stdout) + message = '{}: error: {}'.format(self.prog, message) + print(message) + + raise ArgumentParserError(message) + + +def _import_module(pyfilepath): + module_name = os.path.splitext(os.path.basename(pyfilepath))[0] + + if sys.version_info > (3, 4): + import importlib.util + spec = importlib.util.spec_from_file_location(module_name, pyfilepath) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + else: + import imp + module = imp.load_source(module_name, pyfilepath) + + return module + + +def _convert_hexstring(input_spec, + output_spec, + output_codec, + type_name, + hexstring): + try: + encoded = binascii.unhexlify(hexstring) + except Exception as e: + raise TypeError("'{}': {}".format(hexstring, str(e))) + + decoded = input_spec.decode(type_name, encoded) + + if output_codec in ['gser', 'xer', 'jer']: + decoded = output_spec.encode(type_name, decoded, indent=4).strip() + else: + decoded = binascii.hexlify(output_spec.encode(type_name, decoded)) + + print(decoded.decode('latin-1')) + + +def _compile_files(specs, input_codec, output_codec, cache_dir): + py_count = [spec.endswith('.py') for spec in specs].count(True) + + if py_count > 0: + if py_count != 1: + raise Exception('Expected one .py-file, but got {}.'.format(py_count)) + + module = _import_module(specs[0]) + parsed = module.SPECIFICATION + input_spec = compile_dict(parsed, input_codec) + output_spec = compile_dict(parsed, output_codec) + else: + input_spec = compile_files(specs, + input_codec, + cache_dir=cache_dir) + output_spec = compile_files(specs, + output_codec, + cache_dir=cache_dir) + + return input_spec, output_spec + + +def _do_convert(args): + input_spec, output_spec = _compile_files(args.specification, + args.input_codec, + args.output_codec, + args.cache_dir) + + if args.hexstring == '-': + for hexstring in sys.stdin: + hexstring = hexstring.strip('\r\n') + + if hexstring: + try: + _convert_hexstring(input_spec, + output_spec, + args.output_codec, + args.type, + hexstring) + except TypeError: + print(hexstring) + except DecodeError as e: + print(hexstring) + print(str(e)) + else: + print(hexstring) + else: + _convert_hexstring(input_spec, + output_spec, + args.output_codec, + args.type, + args.hexstring) + + +def _handle_command_compile(line): + parser = ArgumentParser(prog='compile') + parser.add_argument('-i', '--input-codec', + choices=('ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer'), + default='ber', + help='Input codec (default: %(default)s).') + parser.add_argument('-o', '--output-codec', + choices=( + 'ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer', 'gser' + ), + default='gser', + help='Output codec (default: %(default)s).') + parser.add_argument('-c', '--cache-dir', + help='Cache directory.') + parser.add_argument('specification', + nargs='+', + help='ASN.1 specification as one or more .asn files.') + + try: + args = parser.parse_args(args=line.split()[1:]) + except ArgumentParserError: + return None, None, None + + try: + input_spec, output_spec = _compile_files(args.specification, + args.input_codec, + args.output_codec, + args.cache_dir) + return input_spec, output_spec, args.output_codec + except Exception as e: + print('error: {}'.format(str(e))) + + return None, None, None + + +def _handle_command_convert(line, input_spec, output_spec, output_codec): + if not input_spec: + print("No compiled specification found. Please use the " + "'compile' command to compile one.") + return + + parser = ArgumentParser(prog='convert') + parser.add_argument('type', help='Type to convert.') + parser.add_argument( + 'hexstring', + help='Hexstring to convert.') + + try: + args = parser.parse_args(args=line.split()[1:]) + except ArgumentParserError: + return + + try: + _convert_hexstring(input_spec, + output_spec, + output_codec, + args.type, + args.hexstring) + except Exception as e: + print('error: {}'.format(str(e))) + + +def _handle_command_help(): + print('Commands:') + print(' compile') + print(' convert') + print(' exit') + print(' help') + + +def _do_shell(_args): + if not has_prompt_toolkit: + raise RuntimeError( + 'Shell needs prompt_toolkit, but the package is not installed') + + commands = ['compile', 'convert', 'help', 'exit'] + completer = WordCompleter(commands, WORD=True) + user_home = os.path.expanduser('~') + history = FileHistory(os.path.join(user_home, '.asn1tools-history.txt')) + session = PromptSession(completer=completer, + complete_while_typing=True, + auto_suggest=AutoSuggestFromHistory(), + enable_history_search=True, + history=history) + input_spec = None + output_spec = None + output_codec = None + + print("\nWelcome to the asn1tools shell!\n") + + while True: + try: + line = session.prompt(u'$ ') + except EOFError: + return + + line = line.strip() + + if line: + if line.startswith('compile'): + input_spec, output_spec, output_codec = _handle_command_compile(line) + elif line.startswith('convert'): + _handle_command_convert(line, + input_spec, + output_spec, + output_codec) + elif line == 'help': + _handle_command_help() + elif line == 'exit': + return + else: + print('{}: command not found'.format(line)) + + +def _do_parse(args): + parsed = parse_files(args.specification) + + with open(args.outfile, 'w') as fout: + fout.write('SPECIFICATION = {}'.format(pformat(parsed))) + + +def _do_generate_c_source(args): + if args.namespace is None: + name = os.path.basename(args.specification[0]) + name = os.path.splitext(name)[0] + else: + name = args.namespace + + filename_h = name + '.h' + filename_c = name + '.c' + fuzzer_filename_c = name + '_fuzzer.c' + fuzzer_filename_mk = name + '_fuzzer.mk' + + compiled = compile_files(args.specification, + args.codec) + header, source, fuzzer_source, fuzzer_makefile = c.generate( + compiled, + args.codec, + name, + filename_h, + filename_c, + fuzzer_filename_c) + + with open(filename_h, 'w') as fout: + fout.write(header) + + with open(filename_c, 'w') as fout: + fout.write(source) + + print('Successfully generated {} and {}.'.format(filename_h, + filename_c)) + + if args.generate_fuzzer: + with open(fuzzer_filename_c, 'w') as fout: + fout.write(fuzzer_source) + + with open(fuzzer_filename_mk, 'w') as fout: + fout.write(fuzzer_makefile) + + print('Successfully generated {} and {}.'.format(fuzzer_filename_c, + fuzzer_filename_mk)) + print() + print( + 'Run "make -f {}" to build and run the fuzzer. Requires a'.format( + fuzzer_filename_mk)) + print('recent version of clang.') + + +def _do_generate_rust_source(args): + name = os.path.basename(args.specification[0]) + name = os.path.splitext(name)[0] + filename_rs = name + '.rs' + + compiled = compile_files(args.specification, + args.codec) + source = rust.generate(compiled, args.codec) + + with open(filename_rs, 'w') as fout: + fout.write(source) + + print('Successfully generated {}.'.format(filename_rs)) + + +def _main(): + parser = argparse.ArgumentParser( + description='Various ASN.1 utilities.') + + parser.add_argument('-d', '--debug', action='store_true') + parser.add_argument('-v', '--verbose', + choices=(0, 1, 2), + type=int, + default=1, + help=('Control the verbosity; disable(0), warning(1) ' + 'and debug(2) (default: %(default)s).')) + parser.add_argument('--version', + action='version', + version=__version__, + help='Print version information and exit.') + + # Workaround to make the subparser required in Python 3. + subparsers = parser.add_subparsers(title='subcommands', + dest='subcommand') + subparsers.required = True + + # The 'convert' subparser. + subparser = subparsers.add_parser( + 'convert', + description='Convert given hextring and print it to standard output.') + subparser.add_argument( + '-i', '--input-codec', + choices=('ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer'), + default='ber', + help='Input format (default: %(default)s).') + subparser.add_argument( + '-o', '--output-codec', + choices=('ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer', 'gser'), + default='gser', + help='Output format (default: %(default)s).') + subparser.add_argument('-c', '--cache-dir', + help='Cache directory.') + subparser.add_argument( + 'specification', + nargs='+', + help=('ASN.1 specification as one or more .asn files or one .py ' + 'file. The .py-file may be created with the parse subcommand.')) + subparser.add_argument('type', help='Type to convert.') + subparser.add_argument( + 'hexstring', + help='Hexstring to convert, or - to read hexstrings from standard input.') + subparser.set_defaults(func=_do_convert) + + # The 'shell' subparser. + subparser = subparsers.add_parser('shell', + description='An interactive shell.') + subparser.set_defaults(func=_do_shell) + + # The 'parse' subparser. + subparser = subparsers.add_parser('parse', + description='Convert to a Python dictionary.') + subparser.add_argument('specification', + nargs='+', + help='ASN.1 specification as one or more .asn files.') + subparser.add_argument('outfile', + help='Output file name.') + subparser.set_defaults(func=_do_parse) + + # The 'generate_c_source' subparser. + subparser = subparsers.add_parser( + 'generate_c_source', + description='Generate C source code from given ASN.1 specification.') + subparser.add_argument( + '-c', '--codec', + choices=('oer', 'uper'), + default='oer', + help='Codec to generate code for (default: %(default)s).') + subparser.add_argument( + '-n', '--namespace', + help='Namespace of defines, structs, functions, files, etc.') + subparser.add_argument( + '-f', '--generate-fuzzer', + action='store_true', + help='Also generate fuzzer source code.') + subparser.add_argument('specification', + nargs='+', + help='ASN.1 specification as one or more .asn files.') + subparser.set_defaults(func=_do_generate_c_source) + + # The 'generate_rust_source' subparser. + subparser = subparsers.add_parser( + 'generate_rust_source', + description='Generate Rust source code from given ASN.1 specification.') + subparser.add_argument( + '-c', '--codec', + choices=('uper', ), + default='uper', + help='Codec to generate code for (default: %(default)s).') + subparser.add_argument('specification', + nargs='+', + help='ASN.1 specification as one or more .asn files.') + subparser.set_defaults(func=_do_generate_rust_source) + + args = parser.parse_args() + + levels = [logging.CRITICAL, logging.WARNING, logging.DEBUG] + level = levels[args.verbose] + + logging.basicConfig(format='%(levelname)s: %(message)s', + level=level) + + if args.debug: + args.func(args) + else: + try: + args.func(args) + except BaseException as e: + sys.exit('error: {}'.format(str(e))) diff --git a/.venv/lib/python3.12/site-packages/asn1tools/__main__.py b/.venv/lib/python3.12/site-packages/asn1tools/__main__.py new file mode 100644 index 0000000..1e6ec67 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/__main__.py @@ -0,0 +1,3 @@ +from . import _main as main + +main() diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/__init__.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/__init__.py new file mode 100644 index 0000000..c47c9ed --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/__init__.py @@ -0,0 +1,381 @@ +import binascii +from datetime import datetime +from datetime import timedelta +from functools import wraps + +from ..errors import Error +from ..errors import EncodeError as _EncodeError +from ..errors import DecodeError as _DecodeError +from ..errors import ConstraintsError as _ConstraintsError +from .. import compat + + +class BaseType(object): + """ + Base Type class containing common functionality between all codecs + """ + + def __init__(self, name, type_name): + self.name = name + self.type_name = type_name + self.optional = False + self.default = None + + def set_default(self, value): + self.default = value + + def get_default(self): + return self.default + + def has_default(self): + return self.default is not None + + def is_default(self, value): + return value == self.default + + def encode(self, *args, **kwargs): + raise NotImplementedError('To be implemented by subclasses.') + + def decode(self, *args, **kwargs): + raise NotImplementedError('To be implemented by subclasses.') + + def __repr__(self): + return '{}({})'.format(self.__class__.__name__, + self.name) + + def type_label(self): + return '{}({})'.format(self.type_name, self.name) if self.name else self.type_name + + +class ErrorWithLocation(Exception): + """ + Mixin for Error classes which have location list + """ + def __init__(self, message, location=None): + """ + + :param str message: + :param BaseType location: Type error occured for + """ + self.message = message + self.location = [location] if location else [] + + def add_location(self, element): + """ + Add location data for element + :param BaseType element: + :return: + """ + # Don't add name if it is blank (for SEQUENCE OF, SET OF etc) + if (not getattr(element, 'no_error_location', False) and + (not self.location or element != self.location[-1])): + self.location.append(element) + + @property + def location_str(self): + return '.'.join(loc.name for loc in self.location[::-1] if loc.name) + + def __str__(self): + if self.location: + return "{}: {}".format(self.location_str, self.message) + else: + return self.message + + +class EncodeError(ErrorWithLocation, _EncodeError): + """General ASN.1 encode error. + + """ + pass + + +class DecodeError(ErrorWithLocation, _DecodeError): + """ + General ASN.1 decode error with error location in the message. + """ + + def __init__(self, message, offset=None, location=None): + """ + + :param str message: Message for error + :param int offset: Data offset at which error occurred. Can be bits or bytes depending on codec + :param BaseType location: Element in which error occurred + """ + super(DecodeError, self).__init__(message, location=location) + self.offset = offset + + def __str__(self): + if self.location: + _str = "{}: {}".format(self.location_str, self.message) + else: + _str = self.message + if self.offset is not None: + _str += self.get_offset_message() + return _str + + def get_offset_message(self): + """ + Get offset details to add to error message + :return: + """ + return ' (At offset: {})'.format(self.offset) + + +class ConstraintsError(ErrorWithLocation, _ConstraintsError): + """ + General ASN.1 constraints error with error location in the message. + """ + pass + + +class OutOfDataError(DecodeError): + """ + Error for when trying to read data beyond length of type + """ + + def __init__(self, offset_bits, location=None): + super(OutOfDataError, self).__init__( + 'out of data', offset=offset_bits, location=location) + + def get_offset_message(self): + """ + Get offset details to add to error message + :return: + """ + return ' (At bit offset: {})'.format(self.offset) + + +def _generalized_time_to_datetime(string): + length = len(string) + + if '.' in string: + try: + return datetime.strptime(string, '%Y%m%d%H%M.%f') + except ValueError: + return datetime.strptime(string, '%Y%m%d%H%M%S.%f') + elif ',' in string: + try: + return datetime.strptime(string, '%Y%m%d%H%M,%f') + except ValueError: + return datetime.strptime(string, '%Y%m%d%H%M%S,%f') + elif length == 12: + return datetime.strptime(string, '%Y%m%d%H%M') + elif length == 14: + return datetime.strptime(string, '%Y%m%d%H%M%S') + else: + raise ValueError + + +def format_or(items): + """Return a string of comma separated items, with the last to items + separated by "or". + + [1, 2, 3] -> "1, 2 or 3" + + """ + + formatted_items = [] + + for item in items: + try: + item = "'" + item + "'" + except TypeError: + item = str(item) + + formatted_items.append(item) + + if len(items) == 1: + return formatted_items[0] + else: + return '{} or {}'.format(', '.join(formatted_items[:-1]), + formatted_items[-1]) + + +def utc_time_to_datetime(string): + """Convert given ASN.1 UTC time string `string` to a + ``datetime.datetime`` object. + + """ + + length = len(string) + + try: + if string[-1] == 'Z': + if length == 11: + return datetime.strptime(string[:-1], '%y%m%d%H%M') + elif length == 13: + return datetime.strptime(string[:-1], '%y%m%d%H%M%S') + else: + raise ValueError + elif length == 15: + return compat.strptime(string, '%y%m%d%H%M%z') + elif length == 17: + return compat.strptime(string, '%y%m%d%H%M%S%z') + else: + raise ValueError + except (ValueError, IndexError): + raise Error( + "Expected a UTC time string, but got '{}'.".format(string)) + + +def utc_time_from_datetime(date): + """Convert given ``datetime.datetime`` object `date` to an ASN.1 UTC + time string. + + """ + + fmt = '%y%m%d%H%M' + + if date.second > 0: + fmt += '%S' + + if date.tzinfo is None: + fmt += 'Z' + else: + fmt += '%z' + + return date.strftime(fmt) + + +def restricted_utc_time_to_datetime(string): + """Convert given restricted ASN.1 UTC time string `string` to a + ``datetime.datetime`` object. + + """ + + try: + if string[-1] != 'Z': + raise ValueError + + if len(string) != 13: + raise ValueError + + return datetime.strptime(string[:-1], '%y%m%d%H%M%S') + except (ValueError, IndexError): + raise Error( + "Expected a restricted UTC time string, but got '{}'.".format( + string)) + + +def restricted_utc_time_from_datetime(date): + """Convert given ``datetime.datetime`` object `date` to an restricted + ASN.1 UTC time string. + + """ + + if date.tzinfo is not None: + date -= date.utcoffset() + + return date.strftime('%y%m%d%H%M%S') + 'Z' + + +def generalized_time_to_datetime(string): + """Convert given ASN.1 generalized time string `string` to a + ``datetime.datetime`` object. + + """ + + try: + if string[-1] == 'Z': + date = _generalized_time_to_datetime(string[:-1]) + + return date.replace(tzinfo=compat.timezone(timedelta(hours=0))) + elif string[-5] in '-+': + if '.' in string: + try: + return compat.strptime(string, '%Y%m%d%H%M.%f%z') + except ValueError: + return compat.strptime(string, '%Y%m%d%H%M%S.%f%z') + elif ',' in string: + try: + return compat.strptime(string, '%Y%m%d%H%M,%f%z') + except ValueError: + return compat.strptime(string, '%Y%m%d%H%M%S,%f%z') + else: + return compat.strptime(string, '%Y%m%d%H%M%S%z') + else: + return _generalized_time_to_datetime(string) + except (ValueError, IndexError): + raise Error( + "Expected a generalized time string, but got '{}'.".format( + string)) + + +def generalized_time_from_datetime(date): + """Convert given ``datetime.datetime`` object `date` to an ASN.1 + generalized time string. + + """ + + if date.second == 0: + if date.microsecond > 0: + string = date.strftime('%Y%m%d%H%M.%f').rstrip('0') + else: + string = date.strftime('%Y%m%d%H%M') + else: + if date.microsecond > 0: + string = date.strftime('%Y%m%d%H%M%S.%f').rstrip('0') + else: + string = date.strftime('%Y%m%d%H%M%S') + + if date.tzinfo is not None: + if date.utcoffset(): + string += date.strftime('%z') + else: + string += 'Z' + + return string + + +def restricted_generalized_time_to_datetime(string): + """Convert given restricted ASN.1 generalized time string `string` to + a ``datetime.datetime`` object. + + """ + + try: + if string[-1] != 'Z': + raise ValueError + + if '.' in string: + if string[-2] == '0': + raise ValueError + + if string[14] != '.': + raise ValueError + + return datetime.strptime(string[:-1], '%Y%m%d%H%M%S.%f') + elif len(string) != 15: + raise ValueError + + return datetime.strptime(string[:-1], '%Y%m%d%H%M%S') + except (ValueError, IndexError): + raise Error( + "Expected a restricted generalized time string, but got '{}'.".format( + string)) + + +def restricted_generalized_time_from_datetime(date): + """Convert given ``datetime.datetime`` object `date` to an restricted + ASN.1 generalized time string. + + """ + + if date.tzinfo is not None: + date -= date.utcoffset() + + if date.microsecond > 0: + string = date.strftime('%Y%m%d%H%M%S.%f').rstrip('0') + else: + string = date.strftime('%Y%m%d%H%M%S') + + return string + 'Z' + + +def format_bytes(tag): + """ + Format tag as hex string + :param bytes tag: + :return: + """ + return tag.hex() \ No newline at end of file diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/ber.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/ber.py new file mode 100644 index 0000000..2d94a39 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/ber.py @@ -0,0 +1,1789 @@ +"""Basic Encoding Rules (BER) codec. + +""" + +import time +import math +import binascii +from copy import copy +import datetime + +from ..parser import EXTENSION_MARKER +from . import BaseType, format_bytes, DecodeError, ErrorWithLocation +from . import EncodeError +from . import DecodeError +from . import format_or +from . import compiler +from . import utc_time_to_datetime +from . import utc_time_from_datetime +from . import generalized_time_to_datetime +from . import generalized_time_from_datetime +from .compiler import enum_values_as_dict +from .compiler import clean_bit_string_value + + +class Class(object): + UNIVERSAL = 0x00 + APPLICATION = 0x40 + CONTEXT_SPECIFIC = 0x80 + PRIVATE = 0xc0 + + +class Encoding(object): + PRIMITIVE = 0x00 + CONSTRUCTED = 0x20 + + +class Tag(object): + END_OF_CONTENTS = 0x00 + BOOLEAN = 0x01 + INTEGER = 0x02 + BIT_STRING = 0x03 + OCTET_STRING = 0x04 + NULL = 0x05 + OBJECT_IDENTIFIER = 0x06 + OBJECT_DESCRIPTOR = 0x07 + EXTERNAL = 0x08 + REAL = 0x09 + ENUMERATED = 0x0a + EMBEDDED_PDV = 0x0b + UTF8_STRING = 0x0c + RELATIVE_OID = 0x0d + SEQUENCE = 0x10 + SET = 0x11 + NUMERIC_STRING = 0x12 + PRINTABLE_STRING = 0x13 + T61_STRING = 0x14 + VIDEOTEX_STRING = 0x15 + IA5_STRING = 0x16 + UTC_TIME = 0x17 + GENERALIZED_TIME = 0x18 + GRAPHIC_STRING = 0x19 + VISIBLE_STRING = 0x1a + GENERAL_STRING = 0x1b + UNIVERSAL_STRING = 0x1c + CHARACTER_STRING = 0x1d + BMP_STRING = 0x1e + DATE = 0x1f + TIME_OF_DAY = 0x20 + DATE_TIME = 0x21 + + +END_OF_CONTENTS_OCTETS = b'\x00\x00' +TAG_MISMATCH = object() + + +def flatten(l): + """ + Flatten irregular nested list + :param l: + :return: + """ + if isinstance(l, (list, tuple)): + return [a for i in l for a in flatten(i)] + else: + return [l] + + +def is_end_of_data(data, offset, end_offset): + # Detect end of data + if end_offset is not None: + if offset >= end_offset: + return True, offset + + elif detect_end_of_contents_tag(data, offset): + return True, offset + 2 + + return False, offset + + +def detect_end_of_contents_tag(data, offset): + """ + Determine whether end of contents tag is present at offset in data + :param bytes data: + :param int offset: + :return: + """ + two_bytes = data[offset:offset + 2] + if two_bytes == END_OF_CONTENTS_OCTETS: + return True + # Detect missing data + elif len(two_bytes) != 2: + raise OutOfByteDataError( + 'Ran out of data when trying to find End of Contents tag for indefinite length field', + offset=offset) + else: + return False + + +def check_decode_error(asn_type, decoded_value, data, offset): + """ + Checks if decode result corresponds to TAG_MISMATCH, if so, raise DecodeTagError + :return: + """ + if decoded_value == TAG_MISMATCH: + raise DecodeTagError(asn_type, data, offset, location=asn_type) + + +class MissingMandatoryFieldError(DecodeError): + """ + Error for when there is no data for a mandatory field member + """ + def __init__(self, member, offset): + super().__init__('{} is missing and has no default value'.format(member), + offset=offset, + location=member) + + +class OutOfByteDataError(DecodeError): + """ + Error for when running out of / missing data missing when attempting to decode + """ + pass + + +class MissingDataError(OutOfByteDataError): + """ + Special variant of OutOfByteDataError for when remaining data length is less than decoded element length + """ + def __init__(self, message, offset, expected_length, location=None): + super().__init__(message, offset, location=location) + self.expected_length = expected_length + + +class DecodeTagError(DecodeError): + """ + ASN.1 tag decode error for BER and DER codecs + """ + + def __init__(self, asn_type, data, offset, location=None): + """ + + :param StandardDecodeMixin, Type asn_type: ASN type instance error occurred for + :param bytes data: ASN data + :param int offset: + :param str location: Name of ASN1 element error occurred in + """ + self.actual_tag = format_bytes(read_tag(data, offset) + if asn_type.tag_len is None + else data[offset:offset + asn_type.tag_len]) + self.asn_type = asn_type + tag = asn_type.format_tag() + message = "Expected {} with {}, but got '{}'.".format( + asn_type.type_label(), + 'tags {}'.format(tag) if isinstance(tag, list) else "tag '{}'".format(tag), + self.actual_tag) + super(DecodeTagError, self).__init__(message, offset=offset, location=location) + + +class NoEndOfContentsTagError(DecodeError): + """ + Exception for when end-of-contents tag (00) could not be found for indefinite-length field + """ + pass + + +def encode_length_definite(length): + if length <= 127: + encoded = bytearray([length]) + else: + encoded = bytearray() + + while length > 0: + encoded.append(length & 0xff) + length >>= 8 + + encoded.append(0x80 | len(encoded)) + encoded.reverse() + + return encoded + + +def decode_length(encoded, offset, enforce_definite=True): + """ + Decode definite or indefinite length of an ASN.1 node + :param bytes encoded: + :param int offset: + :param bool enforce_definite: Whether to raise error if length is indefinite + :return: + """ + try: + length = encoded[offset] + except IndexError: + raise OutOfByteDataError('Ran out of data when trying to read length', + offset=offset) + + offset += 1 + + if length & 0x80: # Faster than > 127 + # Handle indefinite length + if length == 128: + if enforce_definite: + raise DecodeError('Expected definite length, but got indefinite.', + offset=offset - 1) + + return None, offset + + else: + # Handle long length + number_of_bytes = (length & 0x7f) + encoded_length = encoded[offset:number_of_bytes + offset] + + # Verify all the length bytes exist + if len(encoded_length) != number_of_bytes: + raise OutOfByteDataError('Expected {} length byte(s) at offset {}, but got {}.'.format( + number_of_bytes, offset, len(encoded_length)), + offset=offset) + + length = int(binascii.hexlify(encoded_length), 16) + offset += number_of_bytes + + # Detect missing data + data_length = len(encoded) + if offset + length > data_length: + raise MissingDataError( + 'Expected at least {} contents byte(s), but got {}.'.format(length, data_length - offset), + offset, + length + ) + + return length, offset + + +def encode_signed_integer(number): + byte_length = (8 + (number + (number < 0)).bit_length()) // 8 + return number.to_bytes(length=byte_length, byteorder='big', signed=True) + + +def encode_tag(number, flags): + if number < 31: + tag = bytearray([flags | number]) + else: + tag = bytearray([flags | 0x1f]) + encoded = bytearray() + + while number > 0: + encoded.append(0x80 | (number & 0x7f)) + number >>= 7 + + encoded[0] &= 0x7f + encoded.reverse() + tag.extend(encoded) + + return tag + + +def skip_tag(data, offset): + try: + byte = data[offset] + offset += 1 + + if byte & 0x1f == 0x1f: + while data[offset] & 0x80: + offset += 1 + + offset += 1 + except IndexError: + raise OutOfByteDataError('Ran out of data when reading tag', + offset=offset) + + if offset >= len(data): + raise OutOfByteDataError('Ran out of data when reading tag', + offset=offset) + + return offset + + +def read_tag(data, offset): + return data[offset:skip_tag(data, offset)] + + +def skip_tag_length_contents(data, offset): + """ + Get offset position at end of node (skip tag, length and contents) + :param data: + :param offset: + :return: + """ + offset = skip_tag(data, offset) + + return sum(decode_length(data, offset)) + + +def encode_real(data): + if data == float('inf'): + data = b'\x40' + elif data == float('-inf'): + data = b'\x41' + elif math.isnan(data): + data = b'\x42' + elif data == 0.0: + data = b'' + else: + if data >= 0: + negative_bit = 0 + else: + negative_bit = 0x40 + data *= -1 + + mantissa, exponent = math.frexp(abs(data)) + mantissa = int(mantissa * 2 ** 53) + lowest_set_bit = compiler.lowest_set_bit(mantissa) + mantissa >>= lowest_set_bit + mantissa |= (0x80 << (8 * ((mantissa.bit_length() // 8) + 1))) + mantissa = binascii.unhexlify(hex(mantissa)[4:].rstrip('L')) + exponent = (52 - lowest_set_bit - exponent) + + if -129 < exponent < 128: + exponent = [0x80 | negative_bit, ((0xff - exponent) & 0xff)] + elif -32769 < exponent < 32768: + exponent = ((0xffff - exponent) & 0xffff) + exponent = [0x81 | negative_bit, (exponent >> 8), exponent & 0xff] + else: + raise NotImplementedError( + 'REAL exponent {} out of range.'.format(exponent)) + + data = bytearray(exponent) + mantissa + + return data + + +def decode_real_binary(control, data): + if control in [0x80, 0xc0]: + exponent = data[1] + + if exponent & 0x80: + exponent -= 0x100 + + offset = 2 + elif control in [0x81, 0xc1]: + exponent = ((data[1] << 8) | data[2]) + + if exponent & 0x8000: + exponent -= 0x10000 + + offset = 3 + else: + raise DecodeError( + 'Unsupported binary REAL control word 0x{:02x}.'.format(control)) + + mantissa = int(binascii.hexlify(data[offset:]), 16) + decoded = float(mantissa * 2 ** exponent) + + if control & 0x40: + decoded *= -1 + + return decoded + + +def decode_real_special(control): + try: + return { + 0x40: float('inf'), + 0x41: float('-inf'), + 0x42: float('nan'), + 0x43: -0.0 + }[control] + except KeyError: + raise DecodeError( + 'Unsupported special REAL control word 0x{:02x}.'.format(control)) + + +def decode_real_decimal(data): + return float(data[1:].replace(b',', b'.')) + + +def decode_real(data): + if len(data) == 0: + decoded = 0.0 + else: + control = data[0] + + if control & 0x80: + decoded = decode_real_binary(control, data) + elif control & 0x40: + decoded = decode_real_special(control) + else: + decoded = decode_real_decimal(data) + + return decoded + + +def encode_object_identifier(data): + identifiers = [int(identifier) for identifier in data.split('.')] + + first_subidentifier = (40 * identifiers[0] + identifiers[1]) + encoded_subidentifiers = encode_object_identifier_subidentifier( + first_subidentifier) + + for identifier in identifiers[2:]: + encoded_subidentifiers += encode_object_identifier_subidentifier( + identifier) + + return encoded_subidentifiers + + +def encode_object_identifier_subidentifier(subidentifier): + encoded = [subidentifier & 0x7f] + subidentifier >>= 7 + + while subidentifier > 0: + encoded.append(0x80 | (subidentifier & 0x7f)) + subidentifier >>= 7 + + return encoded[::-1] + + +def decode_object_identifier(data, offset, end_offset): + subidentifier, offset = decode_object_identifier_subidentifier(data, + offset) + decoded = [subidentifier // 40, subidentifier % 40] + + while offset < end_offset: + subidentifier, offset = decode_object_identifier_subidentifier(data, + offset) + decoded.append(subidentifier) + + return '.'.join([str(v) for v in decoded]) + + +def decode_object_identifier_subidentifier(data, offset): + decoded = 0 + + while data[offset] & 0x80: + decoded += (data[offset] & 0x7f) + decoded <<= 7 + offset += 1 + + decoded += data[offset] + + return decoded, offset + 1 + + +class Type(BaseType): + """ + Base type class for BER types + """ + def __init__(self, name, type_name, number, flags=0): + """ + + :param str name: Name of type instance + :param str type_name: ASN1 Type name + :param int number: Tag number + :param flags: + """ + super().__init__(name, type_name) + if number is None: + self.tag = None + self.tag_len = None + else: + self.tag = encode_tag(number, flags) + self.tag_len = len(self.tag) + + def decode(self, data, offset, values=None): + """ + Decode type value from byte data + :param bytearray data: Binary ASN1 data to decode + :param int offset: Current byte offset + :param dict values: + :return: Tuple of (decoded_value, end_offset) + """ + raise NotImplementedError() + + def encode(self, data, encoded, values=None): + """ + Encode value into byte data + :param data: Value to be encoded + :param bytearray encoded: Existing byte data to add encoded data to + :param values: + :return: None (extend 'encoded' bytearray) + """ + raise NotImplementedError() + + def set_tag(self, number, flags): + self.tag = encode_tag(number, flags) + self.tag_len = len(self.tag) + + def format_tag(self): + """ + Get formatted hex string representation of this type's tag + :return: + """ + return format_bytes(self.tag) if self.tag is not None else '(Unknown)' + + def set_size_range(self, minimum, maximum, has_extension_marker): + pass + + +class StandardDecodeMixin(object): + """ + Type class mixin for standard decoding logic + (single predefined tag to be matched against, then decode length and contents) + """ + indefinite_allowed = False # Whether indefinite length encoding is allowed for this type + + def decode(self, data, offset, values=None): + """ + Implements standard decode logic (single predefined tag to be matched against, then decode length and contents) + :param bytearray data: Binary ASN1 data to decode + :param int offset: Current byte offset + :param dict values: + :return: Tuple of (decoded_value, end_offset) + """ + start_offset = offset + offset += self.tag_len + + # Validate tag + tag_data = data[start_offset:offset] + if tag_data != self.tag: + # Check for missing data + if len(tag_data) != self.tag_len: + raise OutOfByteDataError('Ran out of data when reading tag', + offset=start_offset) + # return TAG_MISMATCH Instead of raising DecodeTagError for better performance so that MembersType does + # not have to catch exception for every missing optional type + # CompiledType.decode_with_length() will detect TAG_MISMATCH returned value and raise appropriate exception + return TAG_MISMATCH, start_offset + + # Decode length + length, offset = decode_length(data, offset, enforce_definite=not self.indefinite_allowed) + + return self.decode_content(data, offset, length) + + def decode_content(self, data, offset, length): + """ + Type-specific logic to decode content + :param bytearray data: Binary data to decode + :param int offset: Offset for start of content bytes + :param int length: Length of content bytes (None if indefinite) + :return: Tuple of (decoded_value, end_offset) + """ + raise NotImplementedError('Type {} does not implement decode_content() method'.format(type(self).__name__)) + + +class StandardEncodeMixin(object): + """ + Type class mixin for standard encoding logic (append tag + length(content) + content) + """ + def encode(self, data, encoded, values=None): + """ + Encode value into byte data + :param data: Value to be encoded + :param bytearray encoded: Existing byte data to add encoded data to + :param values: + :return: + """ + encoded_data = bytearray(self.encode_content(data, values=values)) + encoded.extend(self.tag + encode_length_definite(len(encoded_data)) + encoded_data) + + def encode_content(self, data, values=None): + """ + Encode data value into bytearray + :param data: + :param values: + :return: + """ + raise NotImplementedError() + + +class PrimitiveOrConstructedType(Type): + """ + Base type class for types which can be either primitive or constructed (BitString, OctetString, String) + """ + + def __init__(self, name, type_name, number, segment, flags=0): + super(PrimitiveOrConstructedType, self).__init__(name, + type_name, + number, + flags) + self.segment = segment + self.constructed_tag = copy(self.tag) + self.constructed_tag[0] |= Encoding.CONSTRUCTED + + def set_tag(self, number, flags): + self.tag = encode_tag(number, flags) + self.constructed_tag = copy(self.tag) + self.constructed_tag[0] |= Encoding.CONSTRUCTED + self.tag_len = len(self.tag) + + def decode(self, data, start_offset, values=None): + """ + Custom decode logic to handle primitive or constructed types + Return decoded value and new offset + """ + + offset = start_offset + self.tag_len + tag = data[start_offset:offset] + + # Validate tag + if tag == self.tag: + is_primitive = True + elif tag == self.constructed_tag: + is_primitive = False + elif len(tag) != self.tag_len: + # Detect out of data + raise OutOfByteDataError('Ran out of data when reading tag', + offset=start_offset) + else: + # Tag mismatch. Return DECODE_FAILED instead of raising DecodeError for performance + return TAG_MISMATCH, start_offset + + length, offset = decode_length(data, offset, enforce_definite=False) + + if is_primitive: + end_offset = offset + length + return self.decode_primitive_contents(data, offset, length), end_offset + else: + return self.decode_constructed_contents(data, offset, length) + + def decode_constructed_contents(self, data, offset, length): + segments = [] + + end_offset = None if length is None else offset + length + + while True: + end_of_data, offset = is_end_of_data(data, offset, end_offset) + if end_of_data: + break + + decoded, offset = self.segment.decode(data, offset) + check_decode_error(self.segment, decoded, data, offset) + segments.append(decoded) + + return self.decode_constructed_segments(segments), offset + + def decode_primitive_contents(self, data, offset, length): + raise NotImplementedError('To be implemented by subclasses.') + + def decode_constructed_segments(self, segments): + raise NotImplementedError('To be implemented by subclasses.') + + +class StringType(StandardEncodeMixin, PrimitiveOrConstructedType): + + TAG = None + ENCODING = None + + def __init__(self, name): + super(StringType, self).__init__(name, + self.__class__.__name__, + self.TAG, + OctetString(name)) + + def encode_content(self, data, values=None): + return data.encode(self.ENCODING) + + def decode_primitive_contents(self, data, offset, length): + return data[offset:offset + length].decode(self.ENCODING) + + def decode_constructed_segments(self, segments): + return bytearray().join(segments).decode(self.ENCODING) + + +class MembersType(StandardEncodeMixin, StandardDecodeMixin, Type): + indefinite_allowed = True + + def __init__(self, name, tag_name, tag, root_members, additions): + super(MembersType, self).__init__(name, + tag_name, + tag, + Encoding.CONSTRUCTED) + self.root_members = root_members + self.additions = additions + + def set_tag(self, number, flags): + super(MembersType, self).set_tag(number, + flags | Encoding.CONSTRUCTED) + + def encode_content(self, data, values=None): + encoded_members = bytearray() + + for member in self.root_members: + self.encode_member(member, data, encoded_members) + + + if self.additions: + self.encode_additions(data, encoded_members) + + return encoded_members + + def encode_additions(self, data, encoded_members): + try: + for addition in self.additions: + encoded_addition = bytearray() + + if isinstance(addition, list): + for member in addition: + self.encode_member(member, data, encoded_addition) + else: + self.encode_member(addition, + data, + encoded_addition) + + encoded_members.extend(encoded_addition) + except EncodeError: + pass + + def encode_member(self, member, data, encoded_members): + name = member.name + + if name in data: + value = data[name] + try: + if isinstance(member, AnyDefinedBy): + member.encode(value, encoded_members, data) + elif not member.is_default(value): + member.encode(value, encoded_members) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + elif member.optional: + pass + elif not member.has_default(): + raise EncodeError("{} member '{}' not found in {}.".format( + self.__class__.__name__, + name, + data)) + + def decode_content(self, data, offset, length): + + end_offset = None if length is None else offset + length + + values = {} + + offset, out_of_data = self.decode_members(self.root_members, data, values, offset, end_offset) + + # Decode additions (even if out of data already, so defaults can be added) + if self.additions: + offset, out_of_data = self.decode_members(flatten(self.additions), data, values, offset, end_offset, + ignore_missing=True) + + if out_of_data: + return values, offset + + if end_offset is None: + raise NoEndOfContentsTagError('Could not find end-of-contents tag for indefinite length field.', + offset=offset) + else: + # Extra data is allowed in cases of versioned additions + return values, end_offset + + def decode_members(self, members, data, values, offset, end_offset, ignore_missing=False): + """ + Decode values for members from data starting from offset + Supports member data encoded in different order than members specified + :param list members: List of member types + :param bytearray data: + :param dict values: + :param int offset: + :param int end_offset: End offset of member data (None if indefinite length field) + :param bool ignore_missing: Whether to not raise DecodeError for missing mandatory fields with no defaults + :return: + """ + # Decode member values from data + remaining_members = members + # Outer loop to enable decoding members out of order + while True: + undecoded_members = [] + decode_success = False # Whether at least one member was successfully decoded + + out_of_data, offset = is_end_of_data(data, offset, end_offset) + # Attempt to decode remaining members. If they are encoded in same order, should decode all in one loop + # Otherwise will require multiple iterations of outer loop + for member in remaining_members: + # Dont attempt decode if already out of data, just add member to list of undecoded + if out_of_data: + undecoded_members.append(member) + continue + + # Attempt decode + try: + value, offset = member.decode(data, offset, values=values) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + if value == TAG_MISMATCH: + undecoded_members.append(member) + else: + decode_success = True + values[member.name] = value + + # Detect end of data + out_of_data, offset = is_end_of_data(data, offset, end_offset) + + remaining_members = undecoded_members + if out_of_data: + break + + if not decode_success: + # No members are able to decode data, exit loop + break + + # Handle remaining members that there is no data for + # (will raise error if member is not optional and has no default) + for member in remaining_members: + if member.optional: + continue + + if member.has_default(): + values[member.name] = member.get_default() + elif ignore_missing: + break + elif out_of_data: + raise MissingMandatoryFieldError(member, offset) + else: + raise DecodeTagError(member, data, offset, location=member) + return offset, out_of_data + + def __repr__(self): + return '{}({}, [{}])'.format( + self.__class__.__name__, + self.name, + ', '.join([repr(member) for member in self.root_members])) + + +class ArrayType(StandardEncodeMixin, StandardDecodeMixin, Type): + indefinite_allowed = True + + def __init__(self, name, tag_name, tag, element_type): + super(ArrayType, self).__init__(name, + tag_name, + tag, + Encoding.CONSTRUCTED) + self.element_type = element_type + + def set_tag(self, number, flags): + super(ArrayType, self).set_tag(number, + flags | Encoding.CONSTRUCTED) + + def encode_content(self, data, values=None): + encoded_elements = bytearray() + + for entry in data: + self.element_type.encode(entry, encoded_elements) + + return encoded_elements + + def decode_content(self, data, offset, length): + + decoded = [] + start_offset = offset + # Loop through data until length exceeded or end-of-contents tag reached. + while True: + if length is None: + # Find end of indefinite sequence. + if detect_end_of_contents_tag(data, offset): + offset += 2 + break + elif (offset - start_offset) >= length: + # End of definite length sequence. + break + decoded_element, offset = self.element_type.decode(data, offset) + # Invalid Tag + check_decode_error(self.element_type, decoded_element, data, offset) + decoded.append(decoded_element) + + return decoded, offset + + def __repr__(self): + return '{}({}, {})'.format(self.__class__.__name__, + self.name, + self.element_type) + + +class Boolean(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(Boolean, self).__init__(name, + 'BOOLEAN', + Tag.BOOLEAN) + + def encode_content(self, data, values=None): + return bytearray([0xff * data]) + + def decode_content(self, data, offset, length): + + if length != 1: + raise DecodeError( + 'Expected BOOLEAN contents length 1, but ' + 'got {}.'.format(length), offset=offset-1) + + return bool(data[offset]), offset + length + + +class Integer(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(Integer, self).__init__(name, + 'INTEGER', + Tag.INTEGER) + + def encode_content(self, data, values=None): + return encode_signed_integer(data) + + def decode_content(self, data, offset, length): + end_offset = offset + length + return int.from_bytes(data[offset:end_offset], byteorder='big', signed=True), end_offset + + +class Real(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(Real, self).__init__(name, 'REAL', Tag.REAL) + + def encode_content(self, data, values=None): + return encode_real(data) + + def decode_content(self, data, offset, length): + end_offset = offset + length + decoded = decode_real(data[offset:end_offset]) + + return decoded, end_offset + + +class Null(StandardDecodeMixin, Type): + + def __init__(self, name): + super(Null, self).__init__(name, 'NULL', Tag.NULL) + + def is_default(self, value): + return False + + def encode(self, _, encoded): + encoded.extend(self.tag) + encoded.append(0) + + def decode_content(self, data, offset, length): + return None, offset + + +class BitString(StandardEncodeMixin, PrimitiveOrConstructedType): + + def __init__(self, name, has_named_bits): + super(BitString, self).__init__(name, + 'BIT STRING', + Tag.BIT_STRING, + self) + self.has_named_bits = has_named_bits + + def is_default(self, value): + if self.default is None: + return False + + clean_value = clean_bit_string_value(value, + self.has_named_bits) + clean_default = clean_bit_string_value(self.default, + self.has_named_bits) + + return clean_value == clean_default + + def encode_content(self, data, values=None): + number_of_bytes, number_of_rest_bits = divmod(data[1], 8) + data = bytearray(data[0]) + + if number_of_rest_bits == 0: + data = data[:number_of_bytes] + number_of_unused_bits = 0 + else: + last_byte = data[number_of_bytes] + last_byte &= ((0xff >> number_of_rest_bits) ^ 0xff) + data = data[:number_of_bytes] + data.append(last_byte) + number_of_unused_bits = (8 - number_of_rest_bits) + + return bytearray([number_of_unused_bits]) + data + + def decode_primitive_contents(self, data, offset, length): + length -= 1 + number_of_bits = 8 * length - data[offset] + offset += 1 + + return (data[offset:offset + length], number_of_bits) + + def decode_constructed_segments(self, segments): + decoded = bytearray() + number_of_bits = 0 + + for data, length in segments: + decoded.extend(data) + number_of_bits += length + + return (bytes(decoded), number_of_bits) + + +class OctetString(StandardEncodeMixin, PrimitiveOrConstructedType): + + def __init__(self, name): + super(OctetString, self).__init__(name, + 'OCTET STRING', + Tag.OCTET_STRING, + self) + + def encode_content(self, data, values=None): + return data + + def decode_primitive_contents(self, data, offset, length): + return bytes(data[offset:offset + length]) + + def decode_constructed_segments(self, segments): + return bytes().join(segments) + + +class ObjectIdentifier(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(ObjectIdentifier, self).__init__(name, + 'OBJECT IDENTIFIER', + Tag.OBJECT_IDENTIFIER) + + def encode_content(self, data, values=None): + return encode_object_identifier(data) + + def decode_content(self, data, offset, length): + + end_offset = offset + length + decoded = decode_object_identifier(data, offset, end_offset) + + return decoded, end_offset + + +class Enumerated(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name, values, numeric): + super(Enumerated, self).__init__(name, + 'ENUMERATED', + Tag.ENUMERATED) + if numeric: + self.value_to_data = {k: k for k in enum_values_as_dict(values)} + self.data_to_value = self.value_to_data + else: + self.value_to_data = enum_values_as_dict(values) + self.data_to_value = {v: k for k, v in self.value_to_data.items()} + + self.has_extension_marker = (EXTENSION_MARKER in values) + + def format_names(self): + return format_or(sorted(list(self.value_to_data.values()))) + + def format_values(self): + return format_or(sorted(list(self.value_to_data))) + + def encode_content(self, data, values=None): + try: + value = self.data_to_value[data] + except KeyError: + raise EncodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_names(), + data)) + + return encode_signed_integer(value) + + def decode_content(self, data, offset, length): + + end_offset = offset + length + value = int.from_bytes(data[offset:end_offset], byteorder='big', signed=True) + + if value in self.value_to_data: + return self.value_to_data[value], end_offset + elif self.has_extension_marker: + return None, end_offset + else: + raise DecodeError( + 'Expected enumeration value {}, but got {}.'.format( + self.format_values(), + value), offset=offset) + + +class Sequence(MembersType): + + def __init__(self, name, root_members, additions): + super(Sequence, self).__init__(name, + 'SEQUENCE', + Tag.SEQUENCE, + root_members, + additions) + + +class SequenceOf(ArrayType): + + def __init__(self, name, element_type): + super(SequenceOf, self).__init__(name, + 'SEQUENCE OF', + Tag.SEQUENCE, + element_type) + + +class Set(MembersType): + + def __init__(self, name, root_members, additions): + super(Set, self).__init__(name, + 'SET', + Tag.SET, + root_members, + additions) + + +class SetOf(ArrayType): + + def __init__(self, name, element_type): + super(SetOf, self).__init__(name, + 'SET OF', + Tag.SET, + element_type) + + +class Choice(Type): + + def __init__(self, name, root_members, additions): + super(Choice, self).__init__(name, 'CHOICE', None) + members = root_members + + if additions is not None: + for addition in additions: + if isinstance(addition, list): + members += addition + else: + members.append(addition) + + self.has_extension_marker = True + else: + self.has_extension_marker = False + + self.members = members + self.name_to_member = {member.name: member for member in self.members} + self.tag_to_member = {} + self.add_tags(self.members) + + def add_tags(self, members): + for member in members: + tags = self.get_member_tags(member) + + for tag in tags: + self.tag_to_member[tag] = member + + def get_member_tags(self, member): + tags = [] + + if isinstance(member, Choice): + tags = self.get_choice_tags(member) + elif isinstance(member, Recursive): + if member.inner is None: + member.choice_parents.append(self) + else: + tags = self.get_member_tags(member.inner) + else: + tags.append(bytes(member.tag)) + + if hasattr(member, 'constructed_tag'): + tags.append(bytes(member.constructed_tag)) + + return tags + + def get_choice_tags(self, choice): + tags = [] + + for member in choice.members: + tags.extend(self.get_member_tags(member)) + + return tags + + def format_tag(self): + return [format_bytes(tag) for tag in self.tag_to_member] + + def format_names(self): + return format_or(sorted([member.name for member in self.members])) + + def encode(self, data, encoded, values=None): + try: + member = self.name_to_member[data[0]] + except KeyError: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + try: + member.encode(data[1], encoded) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def decode(self, data, offset, values=None): + tag = bytes(read_tag(data, offset)) + + if tag in self.tag_to_member: + member = self.tag_to_member[tag] + elif self.has_extension_marker: + offset = skip_tag_length_contents(data, offset) + + return (None, None), offset + else: + return TAG_MISMATCH, offset + try: + decoded, offset = member.decode(data, offset) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + return (member.name, decoded), offset + + def __repr__(self): + return 'Choice({}, [{}])'.format( + self.name, + ', '.join([repr(member) for member in self.members])) + + +class UTF8String(StringType): + + TAG = Tag.UTF8_STRING + ENCODING = 'utf-8' + + +class NumericString(StringType): + + TAG = Tag.NUMERIC_STRING + ENCODING = 'ascii' + + +class PrintableString(StringType): + + TAG = Tag.PRINTABLE_STRING + ENCODING = 'ascii' + + +class IA5String(StringType): + + TAG = Tag.IA5_STRING + ENCODING = 'ascii' + + +class VisibleString(StringType): + + TAG = Tag.VISIBLE_STRING + ENCODING = 'ascii' + + +class GeneralString(StringType): + + TAG = Tag.GENERAL_STRING + ENCODING = 'latin-1' + + +class BMPString(StringType): + + TAG = Tag.BMP_STRING + ENCODING = 'utf-16-be' + + +class GraphicString(StringType): + + TAG = Tag.GRAPHIC_STRING + ENCODING = 'latin-1' + + +class UniversalString(StringType): + + TAG = Tag.UNIVERSAL_STRING + ENCODING = 'utf-32-be' + + +class TeletexString(StringType): + + TAG = Tag.T61_STRING + ENCODING = 'iso-8859-1' + + +class ObjectDescriptor(GraphicString): + + TAG = Tag.OBJECT_DESCRIPTOR + + +class UTCTime(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(UTCTime, self).__init__(name, + 'UTCTime', + Tag.UTC_TIME) + + def encode_content(self, data, values=None): + return utc_time_from_datetime(data).encode('ascii') + + def decode_content(self, data, offset, length): + + end_offset = offset + length + decoded = data[offset:end_offset].decode('ascii') + + return utc_time_to_datetime(decoded), end_offset + + +class GeneralizedTime(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(GeneralizedTime, self).__init__(name, + 'GeneralizedTime', + Tag.GENERALIZED_TIME) + + def encode_content(self, data, values=None): + return generalized_time_from_datetime(data).encode('ascii') + + def decode_content(self, data, offset, length): + + end_offset = offset + length + decoded = data[offset:end_offset].decode('ascii') + + return generalized_time_to_datetime(decoded), end_offset + + +class Date(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(Date, self).__init__(name, 'DATE', Tag.DATE) + + def encode_content(self, data, values=None): + return str(data).replace('-', '').encode('ascii') + + def decode_content(self, data, offset, length): + + end_offset = offset + length + decoded = data[offset:end_offset].decode('ascii') + decoded = datetime.date(*time.strptime(decoded, '%Y%m%d')[:3]) + + return decoded, end_offset + + +class TimeOfDay(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(TimeOfDay, self).__init__(name, + 'TIME-OF-DAY', + Tag.TIME_OF_DAY) + + def encode_content(self, data, values=None): + return str(data).replace(':', '').encode('ascii') + + def decode_content(self, data, offset, length): + + end_offset = offset + length + decoded = data[offset:end_offset].decode('ascii') + decoded = datetime.time(*time.strptime(decoded, '%H%M%S')[3:6]) + + return decoded, end_offset + + +class DateTime(StandardEncodeMixin, StandardDecodeMixin, Type): + + def __init__(self, name): + super(DateTime, self).__init__(name, + 'DATE-TIME', + Tag.DATE_TIME) + + def encode_content(self, data, values=None): + return '{:04d}{:02d}{:02d}{:02d}{:02d}{:02d}'.format(*data.timetuple()).encode('ascii') + + def decode_content(self, data, offset, length): + + end_offset = offset + length + decoded = data[offset:end_offset].decode('ascii') + decoded = datetime.datetime(*time.strptime(decoded, '%Y%m%d%H%M%S')[:6]) + + return decoded, end_offset + + +class Any(Type): + + def __init__(self, name): + super(Any, self).__init__(name, 'ANY', None) + + def encode(self, data, encoded): + encoded.extend(data) + + def decode(self, data, offset, values=None): + start = offset + offset = skip_tag(data, offset) + length, offset = decode_length(data, offset) + end_offset = offset + length + + return data[start:end_offset], end_offset + + +class AnyDefinedBy(Type): + + def __init__(self, name, type_member, choices): + super(AnyDefinedBy, self).__init__(name, + 'ANY DEFINED BY', + None, + None) + self.type_member = type_member + self.choices = choices + + def encode(self, data, encoded, values): + if self.choices: + try: + self.choices[values[self.type_member]].encode(data, encoded) + except KeyError: + raise EncodeError('Bad AnyDefinedBy choice {}.'.format( + values[self.type_member])) + else: + encoded.extend(data) + + def decode(self, data, offset, values): + """ + + :param data: + :param int offset: Byte offset in ASN1 data + :param dict values: Dictionary of already decoded values in containing type + :return: + """ + if self.choices: + try: + return self.choices[values[self.type_member]].decode(data, + offset) + except KeyError: + raise DecodeError('Bad AnyDefinedBy choice {}.'.format( + values[self.type_member]), + offset=offset) + else: + start = offset + offset = skip_tag(data, offset) + length, offset = decode_length(data, offset) + end_offset = offset + length + + return data[start:end_offset], end_offset + + +class ExplicitTag(StandardEncodeMixin, StandardDecodeMixin, Type): + # no_error_location = True + indefinite_allowed = True + + def __init__(self, name, inner): + super(ExplicitTag, self).__init__(name, 'ExplicitTag', None) + self.inner = inner + + def set_default(self, value): + self.inner.set_default(value) + + def get_default(self): + return self.inner.get_default() + + def is_default(self, value): + return self.inner.is_default(value) + + def has_default(self): + return self.inner.has_default() + + def set_tag(self, number, flags): + super(ExplicitTag, self).set_tag(number, + flags | Encoding.CONSTRUCTED) + + def encode_content(self, data, values=None): + encoded_inner = bytearray() + self.inner.encode(data, encoded_inner) + return encoded_inner + + def decode_content(self, data, offset, length): + + values, end_offset = self.inner.decode(data, offset) + + check_decode_error(self.inner, values, data, offset) + + # Verify End of Contents tag exists for Indefinite field + if length is None: + if not detect_end_of_contents_tag(data, end_offset): + raise NoEndOfContentsTagError('Expected end-of-contents tag.', + offset=end_offset, + location=self) + end_offset += 2 + + return values, end_offset + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name, 'RECURSIVE', None) + self.type_name = type_name + self.module_name = module_name + self.tag_number = None + self.tag_flags = None + self.inner = None + self.choice_parents = [] + + def set_tag(self, number, flags): + self.tag_number = number + self.tag_flags = flags + + def set_inner_type(self, inner): + self.inner = copy(inner) + + if self.tag_number is not None: + self.inner.set_tag(self.tag_number, self.tag_flags) + + for choice_parent in self.choice_parents: + choice_parent.add_tags([self]) + + def encode(self, data, encoded, values=None): + self.inner.encode(data, encoded) + + def decode(self, data, offset, values=None): + return self.inner.decode(data, offset) + + +class CompiledType(compiler.CompiledType): + + def encode(self, data): + encoded = bytearray() + try: + self._type.encode(data, encoded) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + return encoded + + def decode(self, data): + return self.decode_with_length(data)[0] + + def decode_with_length(self, data): + """ + Decode and return decoded values as well as length of binary data decoded + :param data: + :return: + """ + try: + decoded, offset = self._type.decode(bytearray(data), 0) + # Raise DecodeError + check_decode_error(self._type, decoded, data, offset) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + return decoded, offset + + +def get_tag_no_encoding(member): + value = (member.tag[0] & ~Encoding.CONSTRUCTED) + + return bytearray([value]) + member.tag[1:] + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_implicit_type(self, name, type_descriptor, module_name): + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + compiled = Sequence( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'SEQUENCE OF': + compiled = SequenceOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'SET': + compiled = Set( + name, + *self.compile_members(type_descriptor['members'], + module_name, + sort_by_tag=True)) + elif type_name == 'SET OF': + compiled = SetOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'CHOICE': + compiled = Choice( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + compiled = NumericString(name) + elif type_name == 'PrintableString': + compiled = PrintableString(name) + elif type_name == 'IA5String': + compiled = IA5String(name) + elif type_name == 'VisibleString': + compiled = VisibleString(name) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name) + elif type_name == 'BMPString': + compiled = BMPString(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'BIT STRING': + has_named_bits = ('named-bits' in type_descriptor) + compiled = BitString(name, has_named_bits) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + choices = {} + + for key, value in type_descriptor['choices'].items(): + choices[key] = self.compile_type(key, + value, + module_name) + + compiled = AnyDefinedBy(name, + type_descriptor['value'], + choices) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + compiled = Sequence( + name, + *self.compile_members(self.external_type_descriptor()['members'], + module_name)) + compiled.set_tag(Tag.EXTERNAL, 0) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + return compiled + + def compile_type(self, name, type_descriptor, module_name): + module_name = self.get_module_name(type_descriptor, module_name) + compiled = self.compile_implicit_type(name, + type_descriptor, + module_name) + + if self.is_explicit_tag(type_descriptor): + compiled = ExplicitTag(name, compiled) + + # Set any given tag. + if 'tag' in type_descriptor: + compiled = self.copy(compiled) + tag = type_descriptor['tag'] + class_ = tag.get('class', None) + + if class_ == 'APPLICATION': + flags = Class.APPLICATION + elif class_ == 'PRIVATE': + flags = Class.PRIVATE + elif class_ == 'UNIVERSAL': + flags = 0 + else: + flags = Class.CONTEXT_SPECIFIC + + compiled.set_tag(tag['number'], flags) + + return compiled + + def compile_members(self, + members, + module_name, + sort_by_tag=False): + compiled_members = [] + in_extension = False + additions = None + + for member in members: + if member == EXTENSION_MARKER: + in_extension = not in_extension + + if in_extension: + additions = [] + elif in_extension: + self.compile_extension_member(member, + module_name, + additions) + else: + self.compile_root_member(member, + module_name, + compiled_members) + + if sort_by_tag: + compiled_members = sorted(compiled_members, key=get_tag_no_encoding) + + return compiled_members, additions + + def compile_extension_member(self, + member, + module_name, + additions): + if isinstance(member, list): + compiled_group = [] + + for memb in member: + compiled_member = self.compile_member(memb, + module_name) + compiled_group.append(compiled_member) + + additions.append(compiled_group) + else: + compiled_member = self.compile_member(member, + module_name) + additions.append(compiled_member) + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() + + +def decode_full_length(data): + """ + Get total byte length of ASN1 element (tag + contents length) + :param data: + :return: + """ + try: + return skip_tag_length_contents(bytearray(data), 0) + except MissingDataError as e: + return e.offset + e.expected_length + except OutOfByteDataError: + return None + + diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/compiler.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/compiler.py new file mode 100644 index 0000000..6f4610f --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/compiler.py @@ -0,0 +1,1197 @@ +"""Base Compiler class used by all codecs. + +""" + +import binascii +import sys +from operator import attrgetter +import bitstruct + +from copy import copy +from copy import deepcopy +from ..errors import CompileError +from ..parser import EXTENSION_MARKER + + +def flatten(dlist): + flist = [] + + for item in dlist: + if isinstance(item, list): + flist.extend(item) + else: + flist.append(item) + + return flist + + +def is_object_class_type_name(type_name): + return '&' in type_name + + +def is_open_type(type_name): + index = type_name.find('&') + + if index == -1: + return False + + return type_name[index + 1].isupper() + + +def is_type_name(type_name): + """Does not handle keywords. + + """ + + return type_name[0].isupper() + + +def lowest_set_bit(value): + offset = (value & -value).bit_length() - 1 + + if offset < 0: + offset = 0 + + return offset + + +def rstrip_bit_string_zeros(data): + data = data.rstrip(b'\x00') + + if len(data) == 0: + number_of_bits = 0 + else: + number_of_bits = 8 * len(data) - lowest_set_bit(data[-1]) + + return (data, number_of_bits) + + +def clean_bit_string_value(value, has_named_bits): + data = bytearray(value[0]) + number_of_bits = value[1] + number_of_bytes, number_of_rest_bits = divmod(number_of_bits, 8) + + if number_of_rest_bits == 0: + data = data[:number_of_bytes] + else: + data = data[:number_of_bytes + 1] + data[number_of_bytes] &= ((0xff >> number_of_rest_bits) ^ 0xff) + + if has_named_bits: + return rstrip_bit_string_zeros(data) + else: + return (data, number_of_bits) + + +class CompiledType(object): + + def __init__(self, type_): + self.constraints_checker = None + self.type_checker = None + self._type = type_ + + @property + def type(self): + return self._type + + @property + def name(self): + return self._type.name + + def check_types(self, data): + return self.type_checker.encode(data) + + def check_constraints(self, data): + return self.constraints_checker.encode(data) + + def encode(self, data): + raise NotImplementedError('This codec does not support encode().') + + def decode(self, data): + raise NotImplementedError('This codec does not support decode().') + + def decode_with_length(self, data): + raise NotImplementedError('This codec does not support decode_with_length().') + + def __repr__(self): + return repr(self._type) + + +class Recursive(object): + """ + Mixin used to identify Recursive types + """ + def __repr__(self): + return '{}({})'.format(type(self).__name__, + self.type_name) + + +class OpenType(object): + + def __init__(self, name, table): + self._name = name + self._object_set_name = table[0] + self._table = [] + + for item in table[1]: + offset = item.count('.') + offset *= -1 + self._table.append((offset, item.lstrip('.'))) + + def __repr__(self): + return 'OpenType({}, {}, {})'.format(self._name, + self._object_set_name, + self._table) + + +class OpenTypeSequence(object): + + def __init__(self, name, members): + self._name = name + self._members = members + + def __repr__(self): + return 'OpenTypeSequence({}, {})'.format(self._name, self._members) + + +class OpenTypeSequenceOf(object): + + def __init__(self, name, element_type): + self._name = name + self._element_type = element_type + + def __repr__(self): + return 'OpenTypeSequenceOf({}, {})'.format(self._name, + self._element_type) + + +class CompiledOpenTypes(CompiledType): + + def __init__(self, compiled_open_types, compiled_type): + super(CompiledOpenTypes, self).__init__(compiled_type) + self._compiled_open_types = compiled_open_types + + @property + def type(self): + return self._type.type + + def encode(self, data, **kwargs): + # print() + # print('data:', data) + # print(self._compiled_open_types) + + return self._type.encode(data, **kwargs) + + def decode(self, data): + return self._type.decode(data) + + +class Compiler(object): + + def __init__(self, specification, numeric_enums=False): + self._specification = specification + self._numeric_enums = numeric_enums + self._types_backtrace = [] + self.recursive_types = [] + self.compiled = {} + self.current_type_descriptor = None + + def types_backtrace_push(self, type_name): + self._types_backtrace.append(type_name) + + def types_backtrace_pop(self): + self._types_backtrace.pop() + + @property + def types_backtrace(self): + return self._types_backtrace + + def process(self): + self.pre_process() + + compiled = {} + + for module_name in self._specification: + items = self._specification[module_name]['types'].items() + + for type_name, type_descriptor in items: + self.types_backtrace_push(type_name) + compiled_type = self.process_type(type_name, + type_descriptor, + module_name) + compiled_type.type_name = type_name + compiled_type.module_name = module_name + compiled_open_types = self.compile_open_types(type_name, + type_descriptor, + module_name) + + if compiled_open_types: + compiled_type = CompiledOpenTypes(compiled_open_types, + compiled_type) + + self.types_backtrace_pop() + + if module_name not in compiled: + compiled[module_name] = {} + + compiled[module_name][type_name] = compiled_type + + for recursive_type in self.recursive_types: + compiled_module = compiled[recursive_type.module_name] + inner_type = compiled_module[recursive_type.type_name].type + recursive_type.set_inner_type(inner_type) + + return compiled + + def pre_process(self): + for module_name, module in self._specification.items(): + types = module['types'] + type_descriptors = types.values() + + self.pre_process_components_of(type_descriptors, module_name) + self.pre_process_extensibility_implied(module, type_descriptors) + self.pre_process_tags(module, module_name) + self.pre_process_default_value(type_descriptors, module_name) + + for module_name, module in self._specification.items(): + self.pre_process_parameterization_step_1(module['types'], + module_name) + + for module_name, module in self._specification.items(): + types = module['types'] + types = self.pre_process_parameterization_step_2(types) + module['types'] = types + + return self._specification + + def pre_process_components_of(self, type_descriptors, module_name): + """COMPONENTS OF expansion. + + """ + + for type_descriptor in type_descriptors: + self.pre_process_components_of_type(type_descriptor, + module_name) + + def pre_process_components_of_type(self, type_descriptor, module_name): + if 'members' not in type_descriptor: + return + + type_descriptor['members'] = self.pre_process_components_of_expand_members( + type_descriptor['members'], + module_name) + + def pre_process_components_of_expand_members(self, members, module_name): + expanded_members = [] + + for member in members: + if member != EXTENSION_MARKER and 'components-of' in member: + type_descriptor, inner_module_name = self.lookup_type_descriptor( + member['components-of'], + module_name) + inner_members = self.pre_process_components_of_expand_members( + type_descriptor['members'], + inner_module_name) + + for inner_member in inner_members: + if inner_member == EXTENSION_MARKER: + break + + expanded_members.append(deepcopy(inner_member)) + else: + expanded_members.append(member) + + return expanded_members + + def pre_process_extensibility_implied(self, module, type_descriptors): + """Make all types extensible. + + """ + + if not module['extensibility-implied']: + return + + for type_descriptor in type_descriptors: + self.pre_process_extensibility_implied_type(type_descriptor) + + def pre_process_extensibility_implied_type(self, type_descriptor): + if 'members' not in type_descriptor: + return + + members = type_descriptor['members'] + + for member in members: + if member == EXTENSION_MARKER: + continue + + if isinstance(member, list): + for type_descriptor in member: + self.pre_process_extensibility_implied_type(type_descriptor) + else: + self.pre_process_extensibility_implied_type(member) + + if EXTENSION_MARKER not in members: + members.append(EXTENSION_MARKER) + + def pre_process_tags(self, module, module_name): + """Add tags where missing. + + """ + + module_tags = module.get('tags', 'EXPLICIT') + + for type_descriptor in module['types'].values(): + self.current_type_descriptor = type_descriptor + self.pre_process_tags_type(type_descriptor, + module_tags, + module_name) + + def is_dummy_reference(self, type_name): + if 'parameters' not in self.current_type_descriptor: + return False + + if type_name in self.current_type_descriptor['parameters']: + return True + + return False + + def pre_process_tags_type(self, + type_descriptor, + module_tags, + module_name): + type_name = type_descriptor['type'] + + if 'tag' in type_descriptor: + tag = type_descriptor['tag'] + resolved_type_name = self.resolve_type_name(type_name, module_name) + + if 'kind' not in tag: + if resolved_type_name == 'CHOICE': + tag['kind'] = 'EXPLICIT' + elif self.is_dummy_reference(type_name): + tag['kind'] = 'EXPLICIT' + elif module_tags in ['IMPLICIT', 'EXPLICIT']: + tag['kind'] = module_tags + else: + tag['kind'] = 'IMPLICIT' + + # SEQUENCE, SET and CHOICE. + if 'members' in type_descriptor: + self.pre_process_tags_type_members(type_descriptor, + module_tags, + module_name) + + # SEQUENCE OF and SET OF. + if 'element' in type_descriptor: + self.pre_process_tags_type(type_descriptor['element'], + module_tags, + module_name) + + def pre_process_tags_type_members(self, + type_descriptor, + module_tags, + module_name): + def is_any_member_tagged(members): + for member in members: + if member == EXTENSION_MARKER: + continue + + if 'tag' in member: + return True + + return False + + number = None + members = flatten(type_descriptor['members']) + + # Add tag number to all members if AUTOMATIC TAGS are + # selected and no member is tagged. + if module_tags == 'AUTOMATIC' and not is_any_member_tagged(members): + number = 0 + + for member in members: + if member == EXTENSION_MARKER: + continue + + if number is not None: + if 'tag' not in member: + member['tag'] = {} + + member['tag']['number'] = number + number += 1 + + self.pre_process_tags_type(member, + module_tags, + module_name) + + def pre_process_default_value(self, type_descriptors, module_name): + """SEQUENCE and SET default member value cleanup. + + """ + + sequences_and_sets = self.get_type_descriptors( + type_descriptors, + ['SEQUENCE', 'SET']) + + for type_descriptor in sequences_and_sets: + for member in type_descriptor['members']: + if member == EXTENSION_MARKER: + continue + + if 'default' not in member: + continue + + resolved_member = self.resolve_type_descriptor(member, + module_name) + + if resolved_member['type'] == 'BIT STRING': + self.pre_process_default_value_bit_string(member, + resolved_member) + + if resolved_member['type'] == 'OCTET STRING': + self.pre_process_default_value_octet_string(member) + + if resolved_member['type'] == 'ENUMERATED' and self._numeric_enums: + for key, value in resolved_member['values']: + if key == member['default']: + member['default'] = value + break + + def pre_process_default_value_bit_string(self, member, resolved_member): + default = member['default'] + + if isinstance(default, tuple): + # Already pre-processed. + return + + if isinstance(default, list): + named_bits = dict(resolved_member['named-bits']) + reversed_mask = 0 + + for name in default: + reversed_mask |= (1 << int(named_bits[name])) + + mask = int(bin(reversed_mask)[2:][::-1], 2) + number_of_bits = reversed_mask.bit_length() + elif default.startswith('0x'): + if len(default) % 2 == 1: + default += '0' + + default = '01' + default[2:] + mask = int(default, 16) + mask >>= lowest_set_bit(mask) + number_of_bits = mask.bit_length() - 1 + mask ^= (1 << number_of_bits) + elif default == '0b': + number_of_bits = 0 + else: + mask = int(default, 2) + mask >>= lowest_set_bit(mask) + number_of_bits = len(default) - 2 + + if number_of_bits > 0: + mask = bitstruct.pack('u{}'.format(number_of_bits), mask) + else: + mask = b'' + + member['default'] = (mask, number_of_bits) + + def pre_process_default_value_octet_string(self, member): + default = member['default'] + + if sys.version_info[0] > 2 and isinstance(default, bytes): + # Already pre-processed. + return + + if default.startswith('0b'): + default = default[2:] + if len(default) % 8 != 0: + default += '0' * (-len(default) % 8) + member['default'] = binascii.unhexlify( + hex(int('11111111' + default, 2))[4:] + ) + elif default.startswith('0x'): + default = default[2:] + if len(default) % 2 == 1: + default += '0' + member['default'] = binascii.unhexlify(default) + + def pre_process_parameterization_step_1(self, types, module_name): + """X.683 parameterization pre processing - step 1. + + """ + + for type_name, type_descriptor in types.items(): + # Skip if the type is parameterized. + if 'parameters' in type_descriptor: + continue + + self.pre_process_parameterization_step_1_type(type_descriptor, + type_name, + module_name) + + def pre_process_parameterization_step_1_type(self, + type_descriptor, + type_name, + module_name): + """Recursively find and replace all parameterized types with their + actual types. + + """ + + # SEQUENCE, SET and CHOICE. + if 'members' in type_descriptor: + for member in type_descriptor['members']: + if member == EXTENSION_MARKER: + continue + + self.pre_process_parameterization_step_1_type(member, + type_name, + module_name) + + # SEQUENCE OF and SET OF. + if 'element' in type_descriptor: + self.pre_process_parameterization_step_1_type( + type_descriptor['element'], + type_name, + module_name) + + # Just return if the type is not using a parameterized type. + if 'actual-parameters' not in type_descriptor: + return + + (parameterized_type_descriptor, + parameterized_module_name) = self.lookup_type_descriptor( + type_descriptor['type'], + module_name) + + if 'parameters' not in parameterized_type_descriptor: + raise CompileError( + "Type '{}' in module '{}' is not parameterized.".format( + type_descriptor['type'], + parameterized_module_name)) + + dummy_parameters = parameterized_type_descriptor['parameters'] + actual_parameters = type_descriptor['actual-parameters'] + + if len(dummy_parameters) != len(actual_parameters): + raise CompileError( + "Parameterized type '{}' in module '{}' takes {} " + "parameters, but {} are given in type '{}' in " + "module '{}'.".format(type_descriptor['type'], + parameterized_module_name, + len(dummy_parameters), + len(actual_parameters), + type_name, + module_name)) + + parameterized_type_descriptor = deepcopy(parameterized_type_descriptor) + + self.pre_process_parameterization_step_1_dummy_to_actual_type( + parameterized_type_descriptor, + dummy_parameters, + actual_parameters, + parameterized_module_name) + + self.pre_process_parameterization_step_1_type( + parameterized_type_descriptor, + type_name, + parameterized_module_name) + + type_descriptor.update(parameterized_type_descriptor) + + if 'module-name' not in type_descriptor: + if module_name != parameterized_module_name: + type_descriptor['module-name'] = parameterized_module_name + + if 'parameters' in type_descriptor: + del type_descriptor['parameters'] + + del type_descriptor['actual-parameters'] + + def pre_process_parameterization_step_1_dummy_to_actual_type( + self, + type_descriptor, + dummy_parameters, + actual_parameters, + module_name): + if 'members' in type_descriptor: + for member in type_descriptor['members']: + if member == EXTENSION_MARKER: + continue + + self.pre_process_parameterization_step_1_dummy_to_actual_type( + member, + dummy_parameters, + actual_parameters, + module_name) + elif 'element' in type_descriptor: + self.pre_process_parameterization_step_1_dummy_to_actual_type( + type_descriptor['element'], + dummy_parameters, + actual_parameters, + module_name) + + # Replace dummy with actual in current type descriptor. + for dummy_parameter, actual_parameter in zip(dummy_parameters, + actual_parameters): + if type_descriptor['type'] == dummy_parameter: + type_descriptor.update(actual_parameter) + + if 'actual-parameters' in type_descriptor: + for i, parameter in enumerate(type_descriptor['actual-parameters']): + if parameter['type'] == dummy_parameter: + type_descriptor['actual-parameters'][i] = actual_parameter + + if 'size' in type_descriptor: + actual_size = [] + + for item in type_descriptor['size']: + if isinstance(item, tuple): + minimum, maximum = item + + if minimum == dummy_parameter: + minimum = actual_parameter + + if maximum == dummy_parameter: + maximum = actual_parameter + + item = (minimum, maximum) + elif item == dummy_parameter: + item = actual_parameter + + actual_size.append(item) + + type_descriptor['size'] = actual_size + + if 'restricted-to' in type_descriptor: + actual_restricted_to = [] + + for minimum, maximum in type_descriptor['restricted-to']: + if minimum == dummy_parameter: + minimum = actual_parameter + + if maximum == dummy_parameter: + maximum = actual_parameter + + actual_restricted_to.append((minimum, maximum)) + + type_descriptor['restricted-to'] = actual_restricted_to + + def pre_process_parameterization_step_2(self, types): + """X.683 parameterization pre processing - step 2. + + """ + + # Remove parameterized types as they are no longer needed. + return { + type_name: type_descriptor + for type_name, type_descriptor in types.items() + if 'parameters' not in type_descriptor + } + + def resolve_type_name(self, type_name, module_name): + """Returns the ASN.1 type name of given type. + + """ + + try: + while True: + if is_object_class_type_name(type_name): + type_name, module_name = self.lookup_object_class_type_name( + type_name, + module_name) + else: + type_descriptor, module_name = self.lookup_type_descriptor( + type_name, + module_name) + type_name = type_descriptor['type'] + except CompileError: + pass + + return type_name + + def resolve_type_descriptor(self, type_descriptor, module_name): + type_name = type_descriptor['type'] + + try: + while True: + if is_object_class_type_name(type_name): + type_name, module_name = self.lookup_object_class_type_name( + type_name, + module_name) + else: + type_descriptor, module_name = self.lookup_type_descriptor( + type_name, + module_name) + type_name = type_descriptor['type'] + except CompileError: + pass + + return type_descriptor + + def get_type_descriptors(self, type_descriptors, type_names): + result = [] + + for type_descriptor in type_descriptors: + result += self.get_type_descriptors_type(type_descriptor, + type_names) + + return result + + def get_type_descriptors_type(self, type_descriptor, type_names): + type_descriptors = [] + type_name = type_descriptor['type'] + + if type_name in type_names: + type_descriptors.append(type_descriptor) + + if 'members' in type_descriptor: + for member in type_descriptor['members']: + if member == EXTENSION_MARKER: + continue + + if isinstance(member, list): + type_descriptors.extend(self.get_type_descriptors(member, + type_names)) + else: + type_descriptors += self.get_type_descriptors_type(member, + type_names) + + if 'element' in type_descriptor: + type_descriptors += self.get_type_descriptors_type( + type_descriptor['element'], + type_names) + + return type_descriptors + + def process_type(self, type_name, type_descriptor, module_name): + return NotImplementedError('To be implemented by subclasses.') + + def compile_type(self, name, type_descriptor, module_name): + return NotImplementedError('To be implemented by subclasses.') + + def compile_open_types(self, name, type_descriptor, module_name): + """Compile the open types wrapper for given type. Returns ``None`` if + given type does not have any open types. + + """ + + compiled = None + type_name = type_descriptor['type'] + + if type_name in ['SEQUENCE', 'SET']: + compiled_members = [] + + for member in type_descriptor['members']: + if member == EXTENSION_MARKER: + continue + + if isinstance(member, list): + # ToDo: Handle groups. + continue + + if is_open_type(member['type']): + if 'table' in member: + table = member['table'] + + if isinstance(table, list): + compiled_members.append(OpenType(member['name'], + table)) + else: + compiled_member = self.compile_open_types(member['name'], + member, + module_name) + + if compiled_member is not None: + compiled_members.append(compiled_member) + + if compiled_members: + compiled = OpenTypeSequence(name, compiled_members) + elif type_name in ['SEQUENCE OF', 'SET OF']: + compiled_element = self.compile_open_types('', + type_descriptor['element'], + module_name) + + if compiled_element: + compiled = OpenTypeSequenceOf(name, compiled_element) + elif type_name == 'CHOICE': + # ToDo: Handle CHOICE. + pass + else: + pass + + return compiled + + def compile_user_type(self, name, type_name, module_name): + compiled = self.get_compiled_type(name, + type_name, + module_name) + + if compiled is None: + self.types_backtrace_push(type_name) + compiled = self.compile_type( + name, + *self.lookup_type_descriptor( + type_name, + module_name)) + compiled.type_name = type_name + compiled.module_name = module_name + self.types_backtrace_pop() + self.set_compiled_type(name, + type_name, + module_name, + compiled) + + return compiled + + def compile_members(self, + members, + module_name, + sort_by_tag=False): + compiled_members = [] + has_extension_marker = False + + for member in members: + if member == EXTENSION_MARKER: + has_extension_marker = True + continue + + if isinstance(member, list): + group_members, _ = self.compile_members(member, + module_name) + compiled_members.extend(group_members) + continue + + compiled_member = self.compile_member(member, module_name) + compiled_members.append(compiled_member) + + if sort_by_tag: + compiled_members = sorted(compiled_members, key=attrgetter('tag')) + + return compiled_members, has_extension_marker + + def compile_root_member(self, member, module_name, compiled_members): + compiled_member = self.compile_member(member, + module_name) + compiled_members.append(compiled_member) + + def compile_member(self, member, module_name): + if is_object_class_type_name(member['type']): + member, class_module_name = self.convert_object_class_type_descriptor( + member, + module_name) + compiled_member = self.compile_type(member['name'], + member, + class_module_name) + else: + compiled_member = self.compile_type(member['name'], + member, + module_name) + + if 'optional' in member: + compiled_member = self.copy(compiled_member) + compiled_member.optional = member['optional'] + + if 'default' in member: + compiled_member = self.copy(compiled_member) + compiled_member.set_default(member['default']) + + if 'size' in member: + compiled_member = self.copy(compiled_member) + compiled_member.set_size_range(*self.get_size_range(member, + module_name)) + + return compiled_member + + def get_size_range(self, type_descriptor, module_name): + """Returns a tuple of the minimum and maximum values allowed according + the the ASN.1 specification SIZE parameter. Returns (None, + None, None) if the type does not have a SIZE parameter. + + """ + + size = type_descriptor.get('size', None) + + if size is None: + minimum = None + maximum = None + has_extension_marker = None + else: + if isinstance(size[0], tuple): + minimum, maximum = size[0] + else: + minimum = size[0] + maximum = size[0] + + has_extension_marker = (EXTENSION_MARKER in size) + + if isinstance(minimum, str): + if minimum != 'MIN': + minimum = self.lookup_value(minimum, module_name)[0]['value'] + + if isinstance(maximum, str): + if maximum != 'MAX': + maximum = self.lookup_value(maximum, module_name)[0]['value'] + + return minimum, maximum, has_extension_marker + + def get_enum_values(self, type_descriptor, module_name): + """Converts the enum values to ints if they are value references. + + """ + + enum_values = [] + + for value in type_descriptor['values']: + if value != EXTENSION_MARKER and not isinstance(value[1], int): + lookup = self.lookup_value(value[1], module_name) + enum_values.append((value[0], lookup[0]['value'])) + else: + enum_values.append(value) + + return enum_values + + def get_restricted_to_range(self, type_descriptor, module_name): + def convert_value(value): + try: + value = float(value) + except ValueError: + if not is_type_name(value): + try: + resolved_type_descriptor = self.resolve_type_descriptor( + type_descriptor, + module_name) + value = resolved_type_descriptor['named-numbers'][value] + except KeyError: + value = self.lookup_value(value, + module_name)[0]['value'] + + return value + + restricted_to = type_descriptor['restricted-to'] + + if isinstance(restricted_to[0], tuple): + minimum, maximum = restricted_to[0] + else: + minimum = restricted_to[0] + maximum = restricted_to[0] + + if isinstance(minimum, str): + minimum = convert_value(minimum) + + if isinstance(maximum, str): + maximum = convert_value(maximum) + + has_extension_marker = (EXTENSION_MARKER in restricted_to) + + return minimum, maximum, has_extension_marker + + def get_with_components(self, type_descriptor): + return type_descriptor.get('with-components', None) + + def get_named_bits(self, type_descriptor, module_name): + named_bits = type_descriptor.get('named-bits', None) + if named_bits is not None: + named_bit_values = [] + + for value in named_bits: + if value != EXTENSION_MARKER and not value[1].isdigit(): + lookup = self.lookup_value(value[1], module_name) + named_bit_values.append((value[0], lookup[0]['value'])) + else: + named_bit_values.append((value[0], int(value[1]))) + + return named_bit_values + + def is_explicit_tag(self, type_descriptor): + try: + return type_descriptor['tag']['kind'] == 'EXPLICIT' + except KeyError: + pass + + return False + + def get_module_name(self, type_descriptor, module_name): + module_name = type_descriptor.get('module-name', module_name) + try: + _, module_name = self.lookup_type_descriptor(type_descriptor['type'], + module_name) + except CompileError: + pass + return module_name + + def lookup_in_modules(self, section, debug_string, name, module_name): + begin_debug_string = debug_string[:1].upper() + debug_string[1:] + module = self._specification[module_name] + + if name in module[section]: + return module[section][name], module_name + else: + for from_module_name, imports in module['imports'].items(): + if name not in imports: + continue + + if from_module_name not in self._specification: + raise CompileError( + "Module '{}' cannot import {} '{}' from missing " + "module '{}'.".format(module_name, + debug_string, + name, + from_module_name)) + + try: + return self.lookup_in_modules(section, + debug_string, + name, + from_module_name) + except CompileError: + raise CompileError( + "{} '{}' imported by module '{}' not found in " + "module '{}'.".format( + begin_debug_string, + name, + module_name, + from_module_name)) + + raise CompileError("{} '{}' not found in module '{}'.".format( + begin_debug_string, + name, + module_name)) + + def lookup_type_descriptor(self, type_name, module_name): + return self.lookup_in_modules('types', 'type', type_name, module_name) + + def lookup_value(self, value_name, module_name): + return self.lookup_in_modules('values', 'value', value_name, module_name) + + def lookup_object_class_descriptor(self, object_class_name, module_name): + return self.lookup_in_modules('object-classes', + 'object class', + object_class_name, + module_name) + + def lookup_object_class_type_name(self, type_name, module_name): + class_name, member_name = type_name.split('.') + result = self.lookup_object_class_descriptor(class_name, + module_name) + object_class_descriptor, module_name = result + + for member in object_class_descriptor['members']: + if member['name'] == member_name: + return member['type'], module_name + + def get_compiled_type(self, name, type_name, module_name): + try: + return self.compiled[module_name][type_name][name] + except KeyError: + return None + + def set_compiled_type(self, name, type_name, module_name, compiled): + if module_name not in self.compiled: + self.compiled[module_name] = {} + + if type_name not in self.compiled[module_name]: + self.compiled[module_name][type_name] = {} + + self.compiled[module_name][type_name][name] = compiled + + def convert_object_class_type_descriptor(self, type_descriptor, module_name): + type_name, module_name = self.lookup_object_class_type_name( + type_descriptor['type'], + module_name) + type_descriptor = deepcopy(type_descriptor) + type_descriptor['type'] = type_name + + return type_descriptor, module_name + + def copy(self, compiled_type): + if not isinstance(compiled_type, Recursive): + compiled_type = copy(compiled_type) + + return compiled_type + + def set_compiled_restricted_to(self, compiled, type_descriptor, module_name): + compiled = self.copy(compiled) + compiled.set_restricted_to_range( + *self.get_restricted_to_range(type_descriptor, + module_name)) + + return compiled + + def external_type_descriptor(self): + return { + 'type': 'SEQUENCE', + 'tag': { + 'class': 'UNIVERSAL', + 'number': 8, + 'kind': 'IMPLICIT' + }, + 'members': [ + { + 'name': 'direct-reference', + 'type': 'OBJECT IDENTIFIER', + 'optional': True + }, + { + 'name': 'indirect-reference', + 'type': 'INTEGER', + 'optional': True + }, + { + 'name': 'data-value-descriptor', + 'type': 'ObjectDescriptor', + 'optional': True + }, + { + 'name': 'encoding', + 'type': 'CHOICE', + 'members': [ + { + 'name': 'single-ASN1-type', + 'type': 'NULL', # ToDo: Should be ABSTRACT-SYNTAX.&Type + 'tag': { + 'number': 0 + } + }, + { + 'name': 'octet-aligned', + 'type': 'OCTET STRING', + 'tag': { + 'number': 1, + 'kind': 'IMPLICIT' + } + }, + { + 'name': 'arbitrary', + 'type': 'BIT STRING', + 'tag': { + 'number': 2, + 'kind': 'IMPLICIT' + } + } + ] + } + ] + } + + +def enum_values_as_dict(values): + return { + value[1]: value[0] + for value in values + if value != EXTENSION_MARKER + } + + +def enum_values_split(values): + if EXTENSION_MARKER in values: + index = values.index(EXTENSION_MARKER) + + return values[:index], values[index + 1:] + else: + return values, None + + +def pre_process(specification): + return Compiler(specification).pre_process() diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/constraints_checker.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/constraints_checker.py new file mode 100644 index 0000000..5bdde8d --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/constraints_checker.py @@ -0,0 +1,466 @@ +"""ASN.1 constraints checker. + +""" + +import string +from copy import copy + +from . import ConstraintsError, ErrorWithLocation +from . import compiler +from . import format_or +from .permitted_alphabet import NUMERIC_STRING +from .permitted_alphabet import PRINTABLE_STRING +from .permitted_alphabet import IA5_STRING +from .permitted_alphabet import BMP_STRING +from .permitted_alphabet import VISIBLE_STRING + + +STRING_TYPES = [ + 'OBJECT IDENTIFIER', + 'TeletexString', + 'NumericString', + 'PrintableString', + 'IA5String', + 'VisibleString', + 'GeneralString', + 'UTF8String', + 'BMPString', + 'GraphicString', + 'UniversalString', + 'ObjectDescriptor' +] + +TIME_TYPES = [ + 'UTCTime', + 'GeneralizedTime', + 'DATE', + 'TIME-OF-DAY', + 'DATE-TIME' +] + + +class Type(object): + + def __init__(self, name): + self.name = name + self.minimum = 'MIN' + self.maximum = 'MAX' + + def set_range(self, minimum, maximum, has_extension_marker): + if has_extension_marker: + return + + if minimum is None: + minimum = 'MIN' + + if maximum is None: + maximum = 'MAX' + + self.minimum = minimum + self.maximum = maximum + + def set_size_range(self, minimum, maximum, has_extension_marker): + self.set_range(minimum, maximum, has_extension_marker) + + def set_restricted_to_range(self, + minimum, + maximum, + has_extension_marker): + self.set_range(minimum, maximum, has_extension_marker) + + def is_in_range(self, value): + minimum_ok = (not self.has_lower_bound()) or (value >= self.minimum) + maximum_ok = (not self.has_upper_bound()) or (value <= self.maximum) + + return minimum_ok and maximum_ok + + def set_default(self, value): + pass + + def has_lower_bound(self): + return self.minimum != 'MIN' + + def has_upper_bound(self): + return self.maximum != 'MAX' + + def is_bound(self): + return self.has_lower_bound() and self.has_upper_bound() + + def encode(self, data): + raise NotImplementedError('To be implemented by subclasses.') + + +class String(Type): + + PERMITTED_ALPHABET = None + + def __init__(self, + name, + permitted_alphabet, + minimum, + maximum, + has_extension_marker): + super(String, self).__init__(name) + self.set_size_range(minimum, maximum, has_extension_marker) + + if permitted_alphabet is None: + permitted_alphabet = self.PERMITTED_ALPHABET + + self.permitted_alphabet = permitted_alphabet + + def encode(self, data): + length = len(data) + + if not self.is_in_range(length): + raise ConstraintsError( + 'Expected between {} and {} characters, but got {}.'.format( + self.minimum, + self.maximum, + length)) + + if self.permitted_alphabet is None: + return + + for character in data: + if character not in self.permitted_alphabet: + raise ConstraintsError( + "Expected a character in '{}', but got '{}' (0x{:02x}).".format( + ''.join([c if c in string.printable[:-5] else '.' + for c in self.permitted_alphabet]), + character if character in string.printable else '.', + ord(character))) + + +class Boolean(Type): + + def encode(self, data): + pass + + +class Integer(Type): + + def __init__(self, name): + super(Integer, self).__init__(name) + + def encode(self, data): + if not self.is_in_range(data): + raise ConstraintsError( + 'Expected an integer between {} and {}, but got {}.'.format( + self.minimum, + self.maximum, + data)) + + +class Float(Type): + + def encode(self, data): + pass + + +class Null(Type): + + def encode(self, data): + pass + + +class BitString(Type): + + def __init__(self, name, minimum, maximum, has_extension_marker): + super(BitString, self).__init__(name) + self.set_size_range(minimum, maximum, has_extension_marker) + + def encode(self, data): + number_of_bits = data[1] + + if not self.is_in_range(number_of_bits): + raise ConstraintsError( + 'Expected between {} and {} bits, but got {}.'.format( + self.minimum, + self.maximum, + number_of_bits)) + + +class Enumerated(Type): + + def encode(self, data): + pass + + +class Bytes(Type): + + def __init__(self, name, minimum, maximum, has_extension_marker): + super(Bytes, self).__init__(name) + self.set_size_range(minimum, maximum, has_extension_marker) + + def encode(self, data): + length = len(data) + + if not self.is_in_range(length): + raise ConstraintsError( + 'Expected between {} and {} bytes, but got {}.'.format( + self.minimum, + self.maximum, + length)) + + +class Dict(Type): + + def __init__(self, name, members): + super(Dict, self).__init__(name) + self.members = members + + def encode(self, data): + for member in self.members: + name = member.name + + if name in data: + try: + member.encode(data[name]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + +class List(Type): + + def __init__(self, name, element_type, minimum, maximum, has_extension_marker): + super(List, self).__init__(name) + self.element_type = element_type + self.set_size_range(minimum, maximum, has_extension_marker) + + def encode(self, data): + length = len(data) + + if not self.is_in_range(length): + raise ConstraintsError( + 'Expected a list of between {} and {} elements, but got {}.'.format( + self.minimum, + self.maximum, + length)) + + for entry in data: + self.element_type.encode(entry) + + +class Choice(Type): + + def __init__(self, name, members, has_extension_marker): + super(Choice, self).__init__(name) + self.members = members + self.name_to_member = {member.name: member for member in self.members} + self.has_extension_marker = has_extension_marker + + def format_names(self): + return format_or(sorted(self.name_to_member)) + + def encode(self, data): + value = data[0] + + if value in self.name_to_member: + member = self.name_to_member[value] + elif self.has_extension_marker: + return + else: + raise ConstraintsError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + value)) + try: + member.encode(data[1]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + +class NumericString(String): + + PERMITTED_ALPHABET = NUMERIC_STRING + + +class PrintableString(String): + + PERMITTED_ALPHABET = PRINTABLE_STRING + + +class IA5String(String): + + PERMITTED_ALPHABET = IA5_STRING + + +class BMPString(String): + + PERMITTED_ALPHABET = BMP_STRING + + +class VisibleString(String): + + PERMITTED_ALPHABET = VISIBLE_STRING + + +class Time(Type): + + def encode(self, data): + pass + + +class Skip(Type): + + def encode(self, data): + pass + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name) + self.type_name = type_name + self.module_name = module_name + self.inner = None + + def set_inner_type(self, inner): + self.inner = copy(inner) + + def encode(self, data): + self.inner.encode(data) + + +class CompiledType(compiler.CompiledType): + + def encode(self, data): + try: + self._type.encode(data) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = type_descriptor.get('module-name', module_name) + type_name = type_descriptor['type'] + + if type_name in ['SEQUENCE', 'SET']: + members, _ = self.compile_members(type_descriptor['members'], + module_name) + compiled = Dict(name, members) + elif type_name in ['SEQUENCE OF', 'SET OF']: + element_type = self.compile_type('', + type_descriptor['element'], + module_name) + compiled = List(name, + element_type, + *self.get_size_range( + type_descriptor, + module_name)) + elif type_name == 'CHOICE': + compiled = Choice(name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Float(name) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OCTET STRING': + compiled = Bytes(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name) + elif type_name in TIME_TYPES: + compiled = Time(name) + elif type_name == 'BIT STRING': + compiled = BitString(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'NumericString': + compiled = NumericString(name, + self.get_permitted_alphabet(type_descriptor), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'PrintableString': + compiled = PrintableString(name, + self.get_permitted_alphabet(type_descriptor), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'IA5String': + compiled = IA5String(name, + self.get_permitted_alphabet(type_descriptor), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'BMPString': + compiled = BMPString(name, + self.get_permitted_alphabet(type_descriptor), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'VisibleString': + compiled = VisibleString(name, + self.get_permitted_alphabet(type_descriptor), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name in STRING_TYPES: + compiled = String(name, + self.get_permitted_alphabet(type_descriptor), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name in ['ANY', 'ANY DEFINED BY', 'OpenType']: + compiled = Skip(name) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + members, _ = self.compile_members( + self.external_type_descriptor()['members'], + module_name) + compiled = Dict(name, members) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + if 'restricted-to' in type_descriptor: + compiled = self.set_compiled_restricted_to(compiled, + type_descriptor, + module_name) + + return compiled + + def get_permitted_alphabet(self, type_descriptor): + def char_range(begin, end): + return ''.join([chr(char) + for char in range(ord(begin), ord(end) + 1)]) + + if 'from' not in type_descriptor: + return + + permitted_alphabet = type_descriptor['from'] + value = '' + + for item in permitted_alphabet: + if isinstance(item, tuple): + value += char_range(item[0], item[1]) + else: + value += item + + return ''.join(sorted(value)) + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/der.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/der.py new file mode 100644 index 0000000..0f8351b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/der.py @@ -0,0 +1,409 @@ +"""Distinguished Encoding Rules (DER) codec. + +""" + +from . import ber +from . import restricted_utc_time_to_datetime +from . import restricted_utc_time_from_datetime +from . import restricted_generalized_time_to_datetime +from . import restricted_generalized_time_from_datetime +from .compiler import clean_bit_string_value +from .ber import Class, DecodeTagError, StandardEncodeMixin +from .ber import Encoding +from .ber import Tag +from .ber import encode_length_definite +from .ber import decode_full_length +from .ber import encode_signed_integer +from .ber import Boolean +from .ber import Real +from .ber import Null +from .ber import ObjectIdentifier +from .ber import Enumerated +from .ber import Sequence +from .ber import Set +from .ber import Choice +from .ber import Any +from .ber import AnyDefinedBy +from .ber import Recursive +from .ber import ObjectDescriptor +from .ber import Date +from .ber import TimeOfDay +from .ber import DateTime +# These imports are not used in this module but referenced externally +from .ber import encode_tag +from .ber import encode_real +from .ber import decode_length +from .ber import decode_real + + +class Type(ber.StandardDecodeMixin, ber.Type): + + def set_tag(self, number, flags): + if not Class.APPLICATION & flags: + flags |= Class.CONTEXT_SPECIFIC + + super().set_tag(number, flags) + + +class StringType(StandardEncodeMixin, Type): + + TAG = None + ENCODING = None + + def __init__(self, name): + super(StringType, self).__init__(name, + self.__class__.__name__, + self.TAG) + + def encode_content(self, data, values=None): + return data.encode(self.ENCODING) + + def decode_content(self, data, offset, length): + end_offset = offset + length + return data[offset:end_offset].decode(self.ENCODING), end_offset + + +class ArrayType(StandardEncodeMixin, Type): + + def __init__(self, name, tag_name, tag, element_type): + super(ArrayType, self).__init__(name, + tag_name, + tag, + Encoding.CONSTRUCTED) + self.element_type = element_type + + def set_tag(self, number, flags): + super(ArrayType, self).set_tag(number, + flags | Encoding.CONSTRUCTED) + + def encode_content(self, data, values=None): + encoded_elements = bytearray() + + for entry in data: + self.element_type.encode(entry, encoded_elements) + + return encoded_elements + + def decode_content(self, data, offset, length): + decoded = [] + start_offset = offset + + while (offset - start_offset) < length: + decoded_element, offset = self.element_type.decode(data, offset) + decoded.append(decoded_element) + + return decoded, offset + + def __repr__(self): + return '{}({}, {})'.format(self.__class__.__name__, + self.name, + self.element_type) + + +class Integer(StandardEncodeMixin, Type): + + def __init__(self, name): + super(Integer, self).__init__(name, + 'INTEGER', + Tag.INTEGER) + + def encode_content(self, data, values=None): + return encode_signed_integer(data) + + def decode_content(self, data, offset, length): + end_offset = offset + length + + return int.from_bytes(data[offset:end_offset], byteorder='big', signed=True), end_offset + + +class BitString(Type): + + def __init__(self, name, has_named_bits): + super(BitString, self).__init__(name, + 'BIT STRING', + Tag.BIT_STRING) + self.has_named_bits = has_named_bits + + def is_default(self, value): + if self.default is None: + return False + + clean_value = clean_bit_string_value(value, + self.has_named_bits) + clean_default = clean_bit_string_value(self.default, + self.has_named_bits) + + return clean_value == clean_default + + def encode(self, data, encoded, values=None): + number_of_bytes, number_of_rest_bits = divmod(data[1], 8) + data = bytearray(data[0]) + + if number_of_rest_bits == 0: + data = data[:number_of_bytes] + number_of_unused_bits = 0 + else: + last_byte = data[number_of_bytes] + last_byte &= ((0xff >> number_of_rest_bits) ^ 0xff) + data = data[:number_of_bytes] + data.append(last_byte) + number_of_unused_bits = (8 - number_of_rest_bits) + + encoded.extend(self.tag) + encoded.extend(encode_length_definite(len(data) + 1)) + encoded.append(number_of_unused_bits) + encoded.extend(data) + + def decode_content(self, data, offset, length): + end_offset = offset + length + number_of_bits = 8 * (length - 1) - data[offset] + offset += 1 + + return (bytes(data[offset:end_offset]), number_of_bits), end_offset + + +class OctetString(StandardEncodeMixin, Type): + + def __init__(self, name): + super(OctetString, self).__init__(name, + 'OCTET STRING', + Tag.OCTET_STRING) + + def encode_content(self, data, values=None): + return data + + def decode_content(self, data, offset, length): + end_offset = offset + length + + return bytes(data[offset:end_offset]), end_offset + + +class SequenceOf(ArrayType): + + def __init__(self, name, element_type): + super(SequenceOf, self).__init__(name, + 'SEQUENCE OF', + Tag.SEQUENCE, + element_type) + + +class SetOf(ArrayType): + + def __init__(self, name, element_type): + super(SetOf, self).__init__(name, + 'SET OF', + Tag.SET, + element_type) + + +class UTF8String(StringType): + + TAG = Tag.UTF8_STRING + ENCODING = 'utf-8' + + +class NumericString(StringType): + + TAG = Tag.NUMERIC_STRING + ENCODING = 'ascii' + + +class PrintableString(StringType): + + TAG = Tag.PRINTABLE_STRING + ENCODING = 'ascii' + + +class IA5String(StringType): + + TAG = Tag.IA5_STRING + ENCODING = 'ascii' + + +class VisibleString(StringType): + + TAG = Tag.VISIBLE_STRING + ENCODING = 'ascii' + + +class GeneralString(StringType): + + TAG = Tag.GENERAL_STRING + ENCODING = 'latin-1' + + +class BMPString(StringType): + + TAG = Tag.BMP_STRING + ENCODING = 'utf-16-be' + + +class UniversalString(StringType): + + TAG = Tag.UNIVERSAL_STRING + ENCODING = 'utf-32-be' + + +class GraphicString(StringType): + + TAG = Tag.GRAPHIC_STRING + ENCODING = 'latin-1' + + +class TeletexString(StringType): + + TAG = Tag.T61_STRING + ENCODING = 'iso-8859-1' + + +class UTCTime(StandardEncodeMixin, Type): + + def __init__(self, name): + super(UTCTime, self).__init__(name, + 'UTCTime', + Tag.UTC_TIME) + + def encode_content(self, data, values=None): + return restricted_utc_time_from_datetime(data).encode('ascii') + + def decode_content(self, data, offset, length): + end_offset = offset + length + decoded = data[offset:end_offset].decode('ascii') + + return restricted_utc_time_to_datetime(decoded), end_offset + + +class GeneralizedTime(StandardEncodeMixin, Type): + + def __init__(self, name): + super(GeneralizedTime, self).__init__(name, + 'GeneralizedTime', + Tag.GENERALIZED_TIME) + + def encode_content(self, data, values=None): + return restricted_generalized_time_from_datetime(data).encode('ascii') + + def decode_content(self, data, offset, length): + end_offset = offset + length + decoded = data[offset:end_offset].decode('ascii') + + return restricted_generalized_time_to_datetime(decoded), end_offset + + +class Compiler(ber.Compiler): + + def compile_implicit_type(self, name, type_descriptor, module_name): + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + compiled = Sequence( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'SEQUENCE OF': + compiled = SequenceOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'SET': + compiled = Set( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'SET OF': + compiled = SetOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'CHOICE': + compiled = Choice( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + compiled = NumericString(name) + elif type_name == 'PrintableString': + compiled = PrintableString(name) + elif type_name == 'IA5String': + compiled = IA5String(name) + elif type_name == 'VisibleString': + compiled = VisibleString(name) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name) + elif type_name == 'BMPString': + compiled = BMPString(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'BIT STRING': + has_named_bits = ('named-bits' in type_descriptor) + compiled = BitString(name, has_named_bits) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + choices = {} + + for key, value in type_descriptor['choices'].items(): + choices[key] = self.compile_type(key, + value, + module_name) + + compiled = AnyDefinedBy(name, + type_descriptor['value'], + choices) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + compiled = Sequence( + name, + *self.compile_members(self.external_type_descriptor()['members'], + module_name)) + compiled.set_tag(Tag.EXTERNAL, 0) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + return compiled + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/gser.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/gser.py new file mode 100644 index 0000000..23d70ea --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/gser.py @@ -0,0 +1,569 @@ +"""General String Encoding Rules (GSER). + +""" + +import time +import binascii +import math +from copy import copy +import datetime + +from . import BaseType, format_bytes, ErrorWithLocation +from . import EncodeError +from . import DecodeError +from . import compiler +from . import format_or +from . import utc_time_from_datetime +from . import generalized_time_from_datetime +from .compiler import enum_values_as_dict + + +class Type(BaseType): + + def encode(self, data, _separator, _indent): + raise NotImplementedError('To be implemented by subclasses.') + + def set_size_range(self, minimum, maximum, has_extension_marker): + pass + + +class MembersType(Type): + + def __init__(self, name, members, type_name): + super(MembersType, self).__init__(name, type_name) + self.members = members + + def encode(self, data, separator, indent): + encoded_members = [] + member_separator = separator + ' ' * indent + + for member in self.members: + name = member.name + + if name in data: + try: + encoded_member = member.encode(data[name], + member_separator, + indent) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + encoded_member = u'{}{} {}'.format(member_separator, + member.name, + encoded_member) + encoded_members.append(encoded_member) + elif member.optional: + pass + elif not member.has_default(): + raise EncodeError( + "{} member '{}' not found in {}.".format( + self.__class__.__name__, + name, + data)) + + encoded_members = ','.join(encoded_members) + + return separator.join(['{' + encoded_members, '}']) + + def __repr__(self): + return '{}({}, [{}])'.format( + self.__class__.__name__, + self.name, + ', '.join([repr(member) for member in self.members])) + + +class ArrayType(Type): + + def __init__(self, name, type_name, element_type): + super(ArrayType, self).__init__(name, type_name) + self.element_type = element_type + + def encode(self, data, separator, indent): + encoded_elements = [] + element_separator = separator + ' ' * indent + + for entry in data: + encoded_element = self.element_type.encode(entry, + element_separator, + indent) + encoded_element = u'{}{}'.format(element_separator, + encoded_element) + encoded_elements.append(encoded_element) + + encoded_elements = ','.join(encoded_elements) + + return separator.join(['{' + encoded_elements, '}']) + + def __repr__(self): + return '{}({}, {})'.format(self.__class__.__name__, + self.name, + self.element_type) + + +class Boolean(Type): + + def __init__(self, name): + super(Boolean, self).__init__(name, 'BOOLEAN') + + def encode(self, data, _separator, _indent): + return 'TRUE' if data else 'FALSE' + + +class Integer(Type): + + def __init__(self, name): + super(Integer, self).__init__(name, 'INTEGER') + + def encode(self, data, _separator, _indent): + return str(data) + + +class Real(Type): + + def __init__(self, name): + super(Real, self).__init__(name, 'REAL') + + def encode(self, data, _separator, _indent): + if data == float('inf'): + data = 'PLUS-INFINITY' + elif data == float('-inf'): + data = 'MINUS-INFINITY' + elif math.isnan(data): + raise EncodeError('Cannot encode floating point number NaN.') + elif data == 0.0: + data = '0' + else: + data = '{}E0'.format(data) + + return data + + +class Null(Type): + + def __init__(self, name): + super(Null, self).__init__(name, 'NULL') + + def encode(self, _data, _separator, _indent): + return 'NULL' + + +class BitString(Type): + + def __init__(self, name): + super(BitString, self).__init__(name, 'BIT STRING') + + def encode(self, data, _separator, _indent): + encoded = int(binascii.hexlify(data[0]), 16) + encoded |= (0x80 << (8 * len(data[0]))) + + return "'{}'B".format(bin(encoded)[10:10 + data[1]]).upper() + + +class OctetString(Type): + + def __init__(self, name): + super(OctetString, self).__init__(name, 'OCTET STRING') + + def encode(self, data, _separator, _indent): + return "'{}'H".format(format_bytes(data)).upper() + + +class ObjectIdentifier(Type): + + def __init__(self, name): + super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') + + def encode(self, data, _separator, _indent): + return data + + +class Enumerated(Type): + + def __init__(self, name, values, numeric): + super(Enumerated, self).__init__(name, 'ENUMERATED') + + if numeric: + self.data_to_value = enum_values_as_dict(values) + else: + self.data_to_value = { + v: v for v in enum_values_as_dict(values).values() + } + + def encode(self, data, _separator, _indent): + return self.data_to_value[data] + + +class Sequence(MembersType): + + def __init__(self, name, members): + super(Sequence, self).__init__(name, members, 'SEQUENCE') + + +class SequenceOf(ArrayType): + + def __init__(self, name, element_type): + super(SequenceOf, self).__init__(name, + 'SEQUENCE OF', + element_type) + + +class Set(MembersType): + + def __init__(self, name, members): + super(Set, self).__init__(name, members, 'SET') + + +class SetOf(ArrayType): + + def __init__(self, name, element_type): + super(SetOf, self).__init__(name, + 'SET OF', + element_type) + + +class Choice(Type): + + def __init__(self, name, members): + super(Choice, self).__init__(name, 'CHOICE') + self.members = members + self.name_to_member = {member.name: member for member in self.members} + + def format_names(self): + return format_or(sorted([member.name for member in self.members])) + + def encode(self, data, separator, indent): + try: + member = self.name_to_member[data[0]] + except KeyError: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + try: + encoded = member.encode(data[1], separator, indent) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + return u'{} : {}'.format(data[0], encoded) + + def __repr__(self): + return 'Choice({}, [{}])'.format( + self.name, + ', '.join([repr(member) for member in self.members])) + + +class UTF8String(Type): + + def __init__(self, name): + super(UTF8String, self).__init__(name, 'UTF8String') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class NumericString(Type): + + def __init__(self, name): + super(NumericString, self).__init__(name, 'NumericString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class PrintableString(Type): + + def __init__(self, name): + super(PrintableString, self).__init__(name, 'PrintableString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class IA5String(Type): + + def __init__(self, name): + super(IA5String, self).__init__(name, 'IA5String') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class VisibleString(Type): + + def __init__(self, name): + super(VisibleString, self).__init__(name, 'VisibleString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class GeneralString(Type): + + def __init__(self, name): + super(GeneralString, self).__init__(name, 'GeneralString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class BMPString(Type): + + def __init__(self, name): + super(BMPString, self).__init__(name, 'BMPString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class GraphicString(Type): + + def __init__(self, name): + super(GraphicString, self).__init__(name, 'GraphicString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class UniversalString(Type): + + def __init__(self, name): + super(UniversalString, self).__init__(name, 'UniversalString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class TeletexString(Type): + + def __init__(self, name): + super(TeletexString, self).__init__(name, 'TeletexString') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(data) + + +class ObjectDescriptor(GraphicString): + pass + + +class UTCTime(Type): + + def __init__(self, name): + super(UTCTime, self).__init__(name, 'UTCTime') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(utc_time_from_datetime(data)) + + +class GeneralizedTime(Type): + + def __init__(self, name): + super(GeneralizedTime, self).__init__(name, 'GeneralizedTime') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(generalized_time_from_datetime(data)) + + +class Date(Type): + + def __init__(self, name): + super(Date, self).__init__(name, 'DATE') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(str(data)) + + +class TimeOfDay(Type): + + def __init__(self, name): + super(TimeOfDay, self).__init__(name, 'TIME-OF-DAY') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(str(data)) + + +class DateTime(Type): + + def __init__(self, name): + super(DateTime, self).__init__(name, 'DATE-TIME') + + def encode(self, data, _separator, _indent): + return u'"{}"'.format(str(data).replace(' ', 'T')) + + +class Any(Type): + + def __init__(self, name): + super(Any, self).__init__(name, 'ANY') + + def encode(self, data, _separator, _indent): + data = format_bytes(data).upper() + + return "'{}'H".format(data) + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name, 'RECURSIVE') + self.type_name = type_name + self.module_name = module_name + self.inner = None + + def set_inner_type(self, inner): + self.inner = copy(inner) + + def encode(self, data, separator, indent): + return self.inner.encode(data, separator, indent) + + +class CompiledType(compiler.CompiledType): + + def __init__(self, type_name, compiled_type): + super(CompiledType, self).__init__(compiled_type) + self._value_name = type_name.lower() + self._value_type = type_name + + def encode(self, data, indent=None): + try: + if indent is None: + encoded = self._type.encode(data, ' ', 0) + else: + encoded = self._type.encode(data, '\n', indent) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + encoded = u'{} {} ::= {}'.format(self._value_name, + self._value_type, + encoded.lstrip(' ')) + + return encoded.encode('utf-8') + + def decode(self, data): + raise NotImplementedError('GSER decoding is not implemented.') + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(type_name, compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = self.get_module_name(type_descriptor, module_name) + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + members, _ = self.compile_members( + type_descriptor['members'], + module_name) + compiled = Sequence(name, members) + elif type_name == 'SEQUENCE OF': + compiled = SequenceOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'SET': + members, _ = self.compile_members( + type_descriptor['members'], + module_name) + compiled = Set(name, members) + elif type_name == 'SET OF': + compiled = SetOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'CHOICE': + members, _ = self.compile_members( + type_descriptor['members'], + module_name) + compiled = Choice(name, members) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + compiled = NumericString(name) + elif type_name == 'PrintableString': + compiled = PrintableString(name) + elif type_name == 'IA5String': + compiled = IA5String(name) + elif type_name == 'VisibleString': + compiled = VisibleString(name) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name) + elif type_name == 'BMPString': + compiled = BMPString(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'BIT STRING': + compiled = BitString(name) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + compiled = Any(name) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + members, _ = self.compile_members( + self.external_type_descriptor()['members'], + module_name) + compiled = Sequence(name, members) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + return compiled + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() + + +def decode_full_length(_data): + raise DecodeError('Decode length is not supported for this codec.') diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/jer.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/jer.py new file mode 100644 index 0000000..9c51da8 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/jer.py @@ -0,0 +1,649 @@ +"""JSON Encoding Rules (JER) codec. + +""" + +import time +import json +import binascii +import math +import datetime + +from ..parser import EXTENSION_MARKER +from . import BaseType, format_bytes, ErrorWithLocation +from . import EncodeError +from . import DecodeError +from . import compiler +from . import format_or +from . import utc_time_to_datetime +from . import utc_time_from_datetime +from . import generalized_time_to_datetime +from . import generalized_time_from_datetime +from .compiler import enum_values_as_dict + + +class Type(BaseType): + + def set_size_range(self, minimum, maximum, has_extension_marker): + pass + + +class StringType(Type): + + def __init__(self, name): + super(StringType, self).__init__(name, + self.__class__.__name__) + + def encode(self, data): + return data + + def decode(self, data): + return data + + +class MembersType(Type): + + def __init__(self, + name, + members, + type_name): + super(MembersType, self).__init__(name, type_name) + self.members = members + + def encode(self, data): + values = {} + + for member in self.members: + name = member.name + + if name in data: + try: + value = member.encode(data[name]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + elif member.optional or member.has_default(): + continue + else: + raise EncodeError( + "{} member '{}' not found in {}.".format( + self.__class__.__name__, + name, + data)) + + values[name] = value + + return values + + def decode(self, data): + values = {} + + for member in self.members: + name = member.name + + if name in data: + try: + value = member.decode(data[name]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + values[name] = value + elif member.optional: + pass + elif member.has_default(): + values[name] = member.get_default() + + return values + + def __repr__(self): + return '{}({}, [{}])'.format( + self.__class__.__name__, + self.name, + ', '.join([repr(member) for member in self.members])) + + +class Boolean(Type): + + def __init__(self, name): + super(Boolean, self).__init__(name, 'BOOLEAN') + + def encode(self, data): + return data + + def decode(self, data): + return data + + +class Integer(Type): + + def __init__(self, name): + super(Integer, self).__init__(name, 'INTEGER') + + def encode(self, data): + return data + + def decode(self, data): + return data + + +class Real(Type): + + def __init__(self, name): + super(Real, self).__init__(name, 'REAL') + + def encode(self, data): + if data == float('inf'): + return 'INF' + elif data == float('-inf'): + return '-INF' + elif math.isnan(data): + return 'NaN' + else: + return data + + def decode(self, data): + if isinstance(data, float): + return data + else: + return { + 'INF': float('inf'), + '-INF': float('-inf'), + 'NaN': float('nan'), + '0': 0.0, + '-0': 0.0 + }[data] + + +class Null(Type): + + def __init__(self, name): + super(Null, self).__init__(name, 'NULL') + + def encode(self, data): + return data + + def decode(self, data): + return data + + +class BitString(Type): + + def __init__(self, name, minimum, maximum): + super(BitString, self).__init__(name, 'BIT STRING') + + if minimum is None and maximum is None: + self.size = None + elif minimum == maximum: + self.size = minimum + else: + self.size = None + + def encode(self, data): + value = format_bytes(data[0]).upper() + + if self.size is None: + value = { + "value": value, + "length": data[1] + } + + return value + + def decode(self, data): + if self.size is None: + return (binascii.unhexlify(data['value']), data['length']) + else: + return (binascii.unhexlify(data), self.size) + + +class OctetString(Type): + + def __init__(self, name): + super(OctetString, self).__init__(name, 'OCTET STRING') + + def encode(self, data): + return format_bytes(data).upper() + + def decode(self, data): + return binascii.unhexlify(data) + + +class ObjectIdentifier(Type): + + def __init__(self, name): + super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') + + def encode(self, data): + return data + + def decode(self, data): + return str(data) + + +class Enumerated(Type): + + def __init__(self, name, values, numeric): + super(Enumerated, self).__init__(name, 'ENUMERATED') + + if numeric: + self.values = {k: k for k in enum_values_as_dict(values)} + else: + self.values = { + v: v for v in enum_values_as_dict(values).values() + } + + self.has_extension_marker = (EXTENSION_MARKER in values) + + def format_values(self): + return format_or(sorted(list(self.values))) + + def encode(self, data): + try: + value = self.values[data] + except KeyError: + raise EncodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_values(), + data)) + + return value + + def decode(self, data): + if data in self.values: + return self.values[data] + elif self.has_extension_marker: + return None + else: + raise DecodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_values(), + data)) + + +class Sequence(MembersType): + + def __init__(self, name, members): + super(Sequence, self).__init__(name, members, 'SEQUENCE') + + +class SequenceOf(Type): + + def __init__(self, name, element_type): + super(SequenceOf, self).__init__(name, 'SEQUENCE OF') + self.element_type = element_type + + def encode(self, data): + values = [] + + for entry in data: + value = self.element_type.encode(entry) + values.append(value) + + return values + + def decode(self, data): + values = [] + + for element_data in data: + value = self.element_type.decode(element_data) + values.append(value) + + return values + + def __repr__(self): + return 'SequenceOf({}, {})'.format(self.name, + self.element_type) + + +class Set(MembersType): + + def __init__(self, name, members): + super(Set, self).__init__(name, members, 'SET') + + +class SetOf(Type): + + def __init__(self, name, element_type): + super(SetOf, self).__init__(name, 'SET OF') + self.element_type = element_type + + def encode(self, data): + values = [] + + for entry in data: + value = self.element_type.encode(entry) + values.append(value) + + return values + + def decode(self, data): + values = [] + + for element_data in data: + value = self.element_type.decode(element_data) + values.append(value) + + return values + + def __repr__(self): + return 'SetOf({}, {})'.format(self.name, + self.element_type) + + +class Choice(Type): + + def __init__(self, name, members, has_extension_marker): + super(Choice, self).__init__(name, 'CHOICE') + self.members = members + self.name_to_member = {member.name: member for member in self.members} + self.has_extension_marker = has_extension_marker + + def format_names(self): + return format_or(sorted([member.name for member in self.members])) + + def encode(self, data): + try: + member = self.name_to_member[data[0]] + except KeyError: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + try: + return {member.name: member.encode(data[1])} + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def decode(self, data): + name, value = list(data.items())[0] + + if name in self.name_to_member: + member = self.name_to_member[name] + elif self.has_extension_marker: + return (None, None) + else: + raise DecodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + name)) + try: + return (name, member.decode(value)) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def __repr__(self): + return 'Choice({}, [{}])'.format( + self.name, + ', '.join([repr(member) for member in self.members])) + + +class UTF8String(StringType): + pass + + +class NumericString(StringType): + pass + + +class PrintableString(StringType): + pass + + +class IA5String(StringType): + pass + + +class VisibleString(StringType): + pass + + +class GeneralString(StringType): + pass + + +class BMPString(StringType): + pass + + +class GraphicString(StringType): + pass + + +class UniversalString(StringType): + pass + + +class TeletexString(StringType): + pass + + +class ObjectDescriptor(GraphicString): + pass + + +class UTCTime(StringType): + + def encode(self, data): + return utc_time_from_datetime(data) + + def decode(self, data): + return utc_time_to_datetime(data) + + +class GeneralizedTime(StringType): + + def encode(self, data): + return generalized_time_from_datetime(data) + + def decode(self, data): + return generalized_time_to_datetime(data) + + +class Date(StringType): + + def encode(self, data): + return str(data) + + def decode(self, data): + return datetime.date(*time.strptime(data, '%Y-%m-%d')[:3]) + + +class TimeOfDay(StringType): + + def encode(self, data): + return str(data) + + def decode(self, data): + return datetime.time(*time.strptime(data, '%H:%M:%S')[3:6]) + + +class DateTime(StringType): + + def encode(self, data): + return str(data).replace(' ', 'T') + + def decode(self, data): + return datetime.datetime(*time.strptime(data, '%Y-%m-%dT%H:%M:%S')[:6]) + + +class Any(Type): + + def __init__(self, name): + super(Any, self).__init__(name, 'ANY') + + def encode(self, _data): + raise NotImplementedError('ANY is not yet implemented.') + + def decode(self, _data): + raise NotImplementedError('ANY is not yet implemented.') + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name, 'RECURSIVE') + self.type_name = type_name + self.module_name = module_name + self._inner = None + + def set_inner_type(self, inner): + self._inner = inner + + def encode(self, data): + return self._inner.encode(data) + + def decode(self, data): + return self._inner.decode(data) + + +class CompiledType(compiler.CompiledType): + + def encode(self, data, indent=None): + try: + dictionary = self._type.encode(data) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + if indent is None: + string = json.dumps(dictionary, separators=(',', ':')) + else: + string = json.dumps(dictionary, indent=indent) + + return string.encode('utf-8') + + def decode(self, data): + try: + return self._type.decode(json.loads(data.decode('utf-8'))) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = self.get_module_name(type_descriptor, module_name) + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + members, _ = self.compile_members( + type_descriptor['members'], + module_name) + compiled = Sequence(name, members) + elif type_name == 'SEQUENCE OF': + compiled = SequenceOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'SET': + members, _ = self.compile_members( + type_descriptor['members'], + module_name) + compiled = Set(name, members) + elif type_name == 'SET OF': + compiled = SetOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'CHOICE': + compiled = Choice(name, + *self.compile_members( + type_descriptor['members'], + module_name)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + compiled = NumericString(name) + elif type_name == 'PrintableString': + compiled = PrintableString(name) + elif type_name == 'IA5String': + compiled = IA5String(name) + elif type_name == 'VisibleString': + compiled = VisibleString(name) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name) + elif type_name == 'BMPString': + compiled = BMPString(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'BIT STRING': + minimum, maximum, _ = self.get_size_range(type_descriptor, + module_name) + compiled = BitString(name, minimum, maximum) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + compiled = Any(name) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + members, _ = self.compile_members( + self.external_type_descriptor()['members'], + module_name) + compiled = Sequence(name, members) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + return compiled + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() + + +def decode_full_length(_data): + raise DecodeError('Decode length is not supported for this codec.') diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/oer.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/oer.py new file mode 100644 index 0000000..4a40c02 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/oer.py @@ -0,0 +1,1484 @@ +"""Basic Octet Encoding Rules (OER) codec. + +""" + +import binascii +from copy import copy +import struct +from operator import attrgetter +import datetime + +from ..parser import EXTENSION_MARKER +from . import BaseType, format_bytes, ErrorWithLocation +from . import EncodeError +from . import DecodeError +from . import OutOfDataError +from . import format_or +from . import compiler +from . import utc_time_to_datetime +from . import utc_time_from_datetime +from . import generalized_time_to_datetime +from . import generalized_time_from_datetime +from .compiler import enum_values_as_dict +from .ber import Class +from .ber import Tag +from .ber import encode_object_identifier +from .ber import decode_object_identifier +from . import der + + +def encode_tag(number, flags): + if number < 63: + tag = bytearray([flags | number]) + else: + tag = bytearray([flags | 0x3f]) + encoded = bytearray() + + while number > 0: + encoded.append(0x80 | (number & 0x7f)) + number >>= 7 + + encoded[0] &= 0x7f + encoded.reverse() + tag.extend(encoded) + + return bytes(tag) + + +class Encoder(object): + + def __init__(self): + self.number_of_bits = 0 + self.value = 0 + + def __iadd__(self, other): + self.append_non_negative_binary_integer(other.value, + other.number_of_bits) + + return self + + def number_of_bytes(self): + return (self.number_of_bits + 7) // 8 + + def set_bit(self, offset): + self.value |= (1 << (self.number_of_bits - offset - 1)) + + def align(self): + width = (8 * self.number_of_bytes() - self.number_of_bits) + self.number_of_bits += width + self.value <<= width + + def append_bit(self, bit): + """Append given bit. + + """ + + self.number_of_bits += 1 + self.value <<= 1 + self.value |= bit + + def append_bits(self, data, number_of_bits): + """Append given bits. + + """ + + if number_of_bits == 0: + return + + value = int(binascii.hexlify(data), 16) + value >>= (8 * len(data) - number_of_bits) + + self.append_non_negative_binary_integer(value, number_of_bits) + + def append_u8(self, value): + return self.append_non_negative_binary_integer(value, 8) + + def append_bytes(self, data): + """Append given data. + + """ + + self.append_bits(data, 8 * len(data)) + + def as_bytearray(self): + """Return the bits as a bytearray. + + """ + + if self.number_of_bits == 0: + return bytearray() + + data = self.value + data |= (0x80 << self.number_of_bits) + data = hex(data)[4:].rstrip('L') + + return bytearray(binascii.unhexlify(data)) + + def append_length_determinant(self, value): + if value < 128: + self.append_non_negative_binary_integer(value, 8) + else: + encoded = bytearray() + + while value > 0: + encoded.append(value & 0xff) + value >>= 8 + + length = len(encoded) + + if length > 127: + raise EncodeError('Length determinant {} is too big.'.format(value)) + + self.append_u8(0x80 | length) + self.append_bytes(encoded[::-1]) + + def append_non_negative_binary_integer(self, value, number_of_bits): + """Append given integer value. + + """ + + self.number_of_bits += number_of_bits + self.value <<= number_of_bits + self.value |= value + + def append_integer(self, value): + number_of_bits = value.bit_length() + + if value < 0: + number_of_bytes = ((number_of_bits + 7) // 8) + value = ((1 << (8 * number_of_bytes)) + value) + + if (value & (1 << (8 * number_of_bytes - 1))) == 0: + value |= (0xff << (8 * number_of_bytes)) + number_of_bytes += 1 + elif value > 0: + number_of_bytes = ((number_of_bits + 7) // 8) + + if number_of_bits == (8 * number_of_bytes): + number_of_bytes += 1 + else: + number_of_bytes = 1 + + self.append_length_determinant(number_of_bytes) + self.append_non_negative_binary_integer(value, 8 * number_of_bytes) + + def append_unsigned_integer(self, value): + number_of_bits = max(value.bit_length(), 1) + number_of_bytes = ((number_of_bits + 7) // 8) + self.append_length_determinant(number_of_bytes) + self.append_non_negative_binary_integer(value, 8 * number_of_bytes) + + def __repr__(self): + return format_bytes(self.as_bytearray()) + + +class Decoder(object): + + def __init__(self, encoded): + self.number_of_bits = (8 * len(encoded)) + self.total_number_of_bits = self.number_of_bits + + if len(encoded) > 0: + self.value = int(binascii.hexlify(encoded), 16) + else: + self.value = 0 + + def align(self): + width = (self.number_of_bits & 0x7) + self.number_of_bits -= width + + def number_of_read_bits(self): + return self.total_number_of_bits - self.number_of_bits + + def skip_bits(self, number_of_bits): + if number_of_bits > self.number_of_bits: + raise OutOfDataError(self.number_of_read_bits()) + + self.number_of_bits -= number_of_bits + + def peek_bit(self): + return ((self.value >> (self.number_of_bits - 1)) & 1) + + def clear_bit(self): + self.value &= (1 << (self.number_of_bits - 1)) - 1 + + def read_bit(self): + """Read a bit. + + """ + + if self.number_of_bits == 0: + raise OutOfDataError(self.number_of_read_bits()) + + self.number_of_bits -= 1 + + return ((self.value >> self.number_of_bits) & 1) + + def read_bits(self, number_of_bits): + """Read given number of bits. + + """ + + if number_of_bits > self.number_of_bits: + raise OutOfDataError(self.number_of_read_bits()) + + self.number_of_bits -= number_of_bits + mask = ((1 << number_of_bits) - 1) + value = ((self.value >> self.number_of_bits) & mask) + value &= mask + value |= (0x80 << number_of_bits) + + return binascii.unhexlify(hex(value)[4:].rstrip('L')) + + def read_byte(self): + return self.read_non_negative_binary_integer(8) + + def read_bytes(self, number_of_bytes): + return self.read_bits(8 * number_of_bytes) + + def read_non_negative_binary_integer(self, number_of_bits): + """Read an integer value of given number of bits. + + """ + + if number_of_bits > self.number_of_bits: + raise OutOfDataError(self.number_of_read_bits()) + + self.number_of_bits -= number_of_bits + mask = ((1 << number_of_bits) - 1) + + return ((self.value >> self.number_of_bits) & mask) + + def read_length_determinant(self): + value = self.read_byte() + + if value & 0x80: + length = (value & 0x7f) + value = self.read_non_negative_binary_integer(8 * length) + + return value + + def read_integer(self): + number_of_bytes = self.read_length_determinant() + number_of_bits = 8 * number_of_bytes + value = self.read_non_negative_binary_integer(number_of_bits) + + if value & (1 << (number_of_bits - 1)): + value -= (1 << number_of_bits) - 1 + value -= 1 + + return value + + def read_unsigned_integer(self): + number_of_bytes = self.read_length_determinant() + number_of_bits = 8 * number_of_bytes + + return self.read_non_negative_binary_integer(number_of_bits) + + def read_tag(self): + byte = self.read_byte() + tag = bytearray([byte]) + + if byte & 0x3f == 0x3f: + while True: + byte = self.read_byte() + tag.append(byte) + + if byte & 0x80 == 0: + break + + return bytes(tag) + + +class Type(BaseType): + + def __init__(self, name, type_name, number, flags=0): + super().__init__(name, type_name) + self.module_name = None + + if number is None: + self.tag = None + else: + self.tag = encode_tag(number, flags) + + def set_tag(self, number, flags): + if not Class.APPLICATION & flags: + flags |= Class.CONTEXT_SPECIFIC + + self.tag = encode_tag(number, flags) + + def set_size_range(self, minimum, maximum, has_extension_marker): + pass + + def set_restricted_to_range(self, minimum, maximum, has_extension_marker): + pass + + +class KnownMultiplierStringType(Type): + + TAG = None + ENCODING = None + + def __init__(self, + name, + minimum=None, + maximum=None, + has_extension_marker=False): + super(KnownMultiplierStringType, self).__init__(name, + self.__class__.__name__, + self.TAG) + self.number_of_bytes = None + + if minimum is not None or maximum is not None: + if not has_extension_marker: + if minimum == maximum: + self.number_of_bytes = minimum + + def encode(self, data, encoder): + encoded = data.encode(self.ENCODING) + + if self.number_of_bytes is None: + encoder.append_length_determinant(len(encoded)) + encoder.append_bytes(encoded) + else: + encoder.append_bytes(encoded) + + def decode(self, decoder): + if self.number_of_bytes is None: + number_of_bytes = decoder.read_length_determinant() + else: + number_of_bytes = self.number_of_bytes + + return decoder.read_bytes(number_of_bytes).decode(self.ENCODING) + + +class MembersType(Type): + + def __init__(self, name, type_name, tag, root_members, additions): + super(MembersType, self).__init__(name, + type_name, + tag) + self.root_members = root_members + self.additions = additions + self.optionals = [ + member + for member in root_members + if member.optional or member.default is not None + ] + + def encode(self, data, encoder): + if self.additions is not None: + offset = encoder.number_of_bits + encoder.append_bit(0) + self.encode_root(data, encoder) + + if len(self.additions) > 0: + if self.encode_additions(data, encoder): + encoder.set_bit(offset) + else: + self.encode_root(data, encoder) + + def encode_root(self, data, encoder): + for optional in self.optionals: + if optional.optional: + encoder.append_bit(optional.name in data) + elif optional.name in data: + encoder.append_bit(not optional.is_default(data[optional.name])) + else: + encoder.append_bit(0) + + encoder.align() + + for member in self.root_members: + self.encode_member(member, data, encoder) + + def encode_additions(self, data, encoder): + # Encode extension additions. + presence_bits = 0 + addition_encoders = [] + + try: + for addition in self.additions: + presence_bits <<= 1 + addition_encoder = Encoder() + self.encode_member(addition, + data, + addition_encoder, + encode_default=True) + + if addition_encoder.number_of_bits > 0 or addition.name in data: + addition_encoders.append(addition_encoder) + presence_bits |= 1 + except EncodeError: + pass + + # Return false if no extension additions are present. + if not addition_encoders: + return False + + # Presence bit field. + number_of_additions = len(self.additions) + number_of_unused_bits = (8 - (number_of_additions % 8)) + encoder.append_length_determinant(((number_of_additions + 7) // 8) + 1) + encoder.append_non_negative_binary_integer(number_of_unused_bits, 8) + encoder.append_non_negative_binary_integer(presence_bits, + number_of_additions) + encoder.align() + + for addition_encoder in addition_encoders: + encoder.append_length_determinant(addition_encoder.number_of_bytes()) + encoder += addition_encoder + + return True + + def encode_member(self, member, data, encoder, encode_default=False): + name = member.name + + if name in data: + try: + if member.default is None: + member.encode(data[name], encoder) + elif not member.is_default(data[name]) or encode_default: + member.encode(data[name], encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + elif member.optional or member.has_default(): + pass + else: + raise EncodeError( + "{} member '{}' not found in {}.".format( + self.__class__.__name__, + name, + data)) + + def decode(self, decoder): + if self.additions is not None: + if decoder.read_bit(): + decoded = self.decode_root(decoder) + decoded.update(self.decode_additions(decoder)) + + return decoded + else: + return self.decode_root(decoder) + else: + return self.decode_root(decoder) + + def decode_root(self, decoder): + values = {} + optionals = { + optional: decoder.read_bit() + for optional in self.optionals + } + + decoder.align() + + for member in self.root_members: + if optionals.get(member, True): + try: + value = member.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + values[member.name] = value + elif member.has_default(): + values[member.name] = member.default + + return values + + def decode_additions(self, decoder): + # Presence bit field. + length = decoder.read_length_determinant() + unused_bits = decoder.read_byte() + num_additions = ((length - 1) * 8) - unused_bits + presence_bits = decoder.read_non_negative_binary_integer(num_additions) + decoder.align() + + decoded = {} + + for i in range(num_additions): + if presence_bits & (1 << (num_additions - i - 1)): + member_length = decoder.read_length_determinant() + + if i < len(self.additions): + addition = self.additions[i] + try: + decoded[addition.name] = addition.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(addition) + raise e + else: + decoder.skip_bits(8 * member_length) + + return decoded + + def __repr__(self): + return '{}({}, [{}])'.format( + self.__class__.__name__, + self.name, + ', '.join([repr(member) for member in self.root_members])) + + +class ArrayType(Type): + + def __init__(self, name, type_name, tag, element_type): + super(ArrayType, self).__init__(name, + type_name, + tag) + self.element_type = element_type + + def encode(self, data, encoder): + encoder.append_unsigned_integer(len(data)) + + for entry in data: + self.element_type.encode(entry, encoder) + + def decode(self, decoder): + length = decoder.read_unsigned_integer() + decoded = [] + + for _ in range(length): + decoded_element = self.element_type.decode(decoder) + decoded.append(decoded_element) + + return decoded + + def __repr__(self): + return '{}({}, {})'.format(self.__class__.__name__, + self.name, + self.element_type) + + +class Boolean(Type): + + def __init__(self, name): + super(Boolean, self).__init__(name, + 'BOOLEAN', + Tag.BOOLEAN) + + def encode(self, data, encoder): + encoder.append_non_negative_binary_integer(0xff * data, 8) + + def decode(self, decoder): + return bool(decoder.read_byte()) + + +class Integer(Type): + + def __init__(self, name): + super(Integer, self).__init__(name, + 'INTEGER', + Tag.INTEGER) + self.has_extension_marker = False + self.length = None + self.fmt = None + self.signed = True + + def set_restricted_to_range(self, minimum, maximum, has_extension_marker): + self.has_extension_marker = has_extension_marker + + if minimum != 'MIN': + self.signed = (minimum < 0) + + if minimum == 'MIN' or maximum == 'MAX' or has_extension_marker: + return + + if minimum >= 0: + if maximum < 256: + self.length = 1 + self.fmt = '>B' + elif maximum < 65536: + self.length = 2 + self.fmt = '>H' + elif maximum < 4294967296: + self.length = 4 + self.fmt = '>I' + elif maximum < 18446744073709551616: + self.length = 8 + self.fmt = '>Q' + elif minimum >= -128 and maximum < 128: + self.length = 1 + self.fmt = '>b' + elif minimum >= -32768 and maximum < 32768: + self.length = 2 + self.fmt = '>h' + elif minimum >= -2147483648 and maximum < 2147483648: + self.length = 4 + self.fmt = '>i' + elif minimum >= -9223372036854775808 and maximum < 9223372036854775808: + self.length = 8 + self.fmt = '>q' + + def encode(self, data, encoder): + if self.fmt: + encoder.append_bytes(struct.pack(self.fmt, data)) + elif self.signed: + encoder.append_integer(data) + else: + encoder.append_unsigned_integer(data) + + def decode(self, decoder): + if self.fmt: + return struct.unpack(self.fmt, decoder.read_bytes(self.length))[0] + elif self.signed: + return decoder.read_integer() + else: + return decoder.read_unsigned_integer() + + +class Real(Type): + + def __init__(self, name, with_components): + super(Real, self).__init__(name, 'REAL', Tag.REAL) + + if with_components is None: + self.length = None + self.fmt = None + else: + mantissa, base, exponent = self.unpack_with_components(with_components) + + if all([mantissa, base, exponent]): + if self.is_binary32(mantissa, base, exponent): + self.length = 4 + self.fmt = '>f' + elif self.is_binary64(mantissa, base, exponent): + self.length = 8 + self.fmt = '>d' + else: + self.length = None + self.fmt = None + else: + self.length = None + self.fmt = None + + def unpack_with_components(self, with_components): + with_components = dict(with_components) + + try: + mantissa = with_components['mantissa'] + base = with_components['base'] + exponent = with_components['exponent'] + except KeyError: + mantissa = None + base = None + exponent = None + + return (mantissa, base, exponent) + + def is_binary32(self, mantissa, base, exponent): + return (-16777215 <= mantissa[0] <= mantissa[1] <= 16777215 + and base == 2 + and -149 <= exponent[0] <= exponent[1] <= 104) + + def is_binary64(self, mantissa, base, exponent): + return (-9007199254740991 <= mantissa[0] <= mantissa[1] <= 9007199254740991 + and base == 2 + and -1074 <= exponent[0] <= exponent[1] <= 971) + + def encode(self, data, encoder): + if self.fmt is None: + encoded = der.encode_real(data) + encoder.append_length_determinant(len(encoded)) + encoder.append_bytes(encoded) + else: + try: + encoder.append_bytes(struct.pack(self.fmt, data)) + except (struct.error, OverflowError): + raise EncodeError( + 'Expected an IEEE 754 {} bits floating point number, but ' + 'got {}.'.format(8 * self.length, + data)) + + def decode(self, decoder): + if self.fmt is None: + length = decoder.read_length_determinant() + + return der.decode_real(bytearray(decoder.read_bytes(length))) + else: + return struct.unpack(self.fmt, decoder.read_bytes(self.length))[0] + + +class Null(Type): + + def __init__(self, name): + super(Null, self).__init__(name, 'NULL', Tag.NULL) + + def encode(self, _data, _encoder): + return + + def decode(self, _decoder): + return + + +class BitString(Type): + + def __init__(self, name, named_bits, minimum, maximum, has_extension_marker): + super(BitString, self).__init__(name, + 'BIT STRING', + Tag.BIT_STRING) + self.number_of_bits = None + self.named_bits = named_bits + + if minimum is not None or maximum is not None: + if not has_extension_marker: + if minimum == maximum: + self.number_of_bits = minimum + + def encode(self, data, encoder): + number_of_bytes, number_of_rest_bits = divmod(data[1], 8) + data = bytearray(data[0]) + + if number_of_rest_bits == 0: + data = data[:number_of_bytes] + number_of_unused_bits = 0 + else: + last_byte = data[number_of_bytes] + last_byte &= ((0xff >> number_of_rest_bits) ^ 0xff) + data = data[:number_of_bytes] + data.append(last_byte) + number_of_unused_bits = (8 - number_of_rest_bits) + number_of_bytes += 1 + + if self.number_of_bits is None: + encoder.append_length_determinant(number_of_bytes + 1) + encoder.append_non_negative_binary_integer(number_of_unused_bits, + 8) + encoder.append_bytes(data) + else: + encoder.append_bytes(data) + + def decode(self, decoder): + if self.number_of_bits is None: + number_of_bytes = decoder.read_length_determinant() + number_of_unused_bits = decoder.read_byte() + number_of_bytes -= 1 + number_of_bits = (8 * number_of_bytes - number_of_unused_bits) + else: + number_of_bytes = (self.number_of_bits + 7) // 8 + number_of_bits = self.number_of_bits + + return (decoder.read_bytes(number_of_bytes), number_of_bits) + + +class OctetString(Type): + + def __init__(self, name, minimum, maximum, has_extension_marker): + super(OctetString, self).__init__(name, + 'OCTET STRING', + Tag.OCTET_STRING) + self.number_of_bytes = None + self.set_size_range(minimum, maximum, has_extension_marker) + + def set_size_range(self, minimum, maximum, has_extension_marker): + if minimum is not None or maximum is not None: + if not has_extension_marker: + if minimum == maximum: + self.number_of_bytes = minimum + + def encode(self, data, encoder): + if self.number_of_bytes is None: + encoder.append_length_determinant(len(data)) + encoder.append_bytes(data) + else: + encoder.append_bytes(data) + + def decode(self, decoder): + if self.number_of_bytes is None: + number_of_bytes = decoder.read_length_determinant() + else: + number_of_bytes = self.number_of_bytes + + return decoder.read_bytes(number_of_bytes) + + +class ObjectIdentifier(Type): + + def __init__(self, name): + super(ObjectIdentifier, self).__init__(name, + 'OBJECT IDENTIFIER', + Tag.OBJECT_IDENTIFIER) + + def encode(self, data, encoder): + encoded_subidentifiers = encode_object_identifier(data) + encoder.append_length_determinant(len(encoded_subidentifiers)) + encoder.append_bytes(bytearray(encoded_subidentifiers)) + + def decode(self, decoder): + length = decoder.read_length_determinant() + data = decoder.read_bytes(length) + + return decode_object_identifier(bytearray(data), 0, len(data)) + + +class Enumerated(Type): + + def __init__(self, name, values, numeric): + super(Enumerated, self).__init__(name, + 'ENUMERATED', + Tag.ENUMERATED) + + if numeric: + self.value_to_data = {k: k for k in enum_values_as_dict(values)} + self.data_to_value = self.value_to_data + else: + self.value_to_data = enum_values_as_dict(values) + self.data_to_value = {v: k for k, v in self.value_to_data.items()} + + self.has_extension_marker = (EXTENSION_MARKER in values) + + def format_names(self): + return format_or(sorted(list(self.value_to_data.values()))) + + def format_values(self): + return format_or(sorted(list(self.value_to_data))) + + def encode(self, data, encoder): + try: + value = self.data_to_value[data] + except KeyError: + raise EncodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_names(), + data)) + + if 0 <= value <= 127: + encoder.append_non_negative_binary_integer(value, 8) + else: + offset = encoder.number_of_bits + encoder.append_integer(value) + encoder.set_bit(offset) + + def decode(self, decoder): + if decoder.peek_bit(): + decoder.clear_bit() + value = decoder.read_integer() + else: + value = decoder.read_byte() + + if value in self.value_to_data: + return self.value_to_data[value] + elif self.has_extension_marker: + return None + else: + raise DecodeError( + 'Expected enumeration value {}, but got {}.'.format( + self.format_values(), value)) + + +class Sequence(MembersType): + + def __init__(self, name, root_members, additions): + super(Sequence, self).__init__(name, + 'SEQUENCE', + Tag.SEQUENCE, + root_members, + additions) + + +class SequenceOf(ArrayType): + + def __init__(self, name, element_type): + super(SequenceOf, self).__init__(name, + 'SEQUENCE OF', + Tag.SEQUENCE, + element_type) + + +class Set(MembersType): + + def __init__(self, name, root_members, additions): + super(Set, self).__init__(name, + 'SET', + Tag.SET, + root_members, + additions) + + +class SetOf(ArrayType): + + def __init__(self, name, element_type): + super(SetOf, self).__init__(name, + 'SET OF', + Tag.SET, + element_type) + + +class Choice(Type): + + def __init__(self, name, root_members, additions): + super(Choice, self).__init__(name, 'CHOICE', None) + self.root_members = root_members + self.name_to_root_member = { + member.name: member for member in root_members + } + self.tag_to_root_member = {} + self.add_tags(self.tag_to_root_member, root_members) + + if additions is None: + additions = [] + self.has_extension_marker = False + else: + self.has_extension_marker = True + + self.additions = additions + + self.name_to_addition = { + member.name: member for member in additions + } + self.tag_to_addition = {} + self.add_tags(self.tag_to_addition, additions) + + @property + def members(self): + return self.root_members + self.additions + + def add_tags(self, tag_to_member, members): + for member in members: + tag_to_member[member.tag] = member + + def format_tags(self): + return format_or( + sorted([format_bytes(member.tag) for member in self.members])) + + def format_names(self): + return format_or(sorted([member.name for member in self.members])) + + def encode(self, data, encoder): + name = data[0] + + if name in self.name_to_root_member: + member = self.name_to_root_member[name] + encoder.append_bytes(member.tag) + try: + member.encode(data[1], encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + elif name in self.name_to_addition: + member = self.name_to_addition[name] + encoder.append_bytes(member.tag) + addition_encoder = Encoder() + try: + member.encode(data[1], addition_encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + encoder.append_length_determinant(addition_encoder.number_of_bytes()) + encoder += addition_encoder + else: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + + # def encode_member(self, member, data, encoder): + # try: + # member.encode(data, encoder) + # except EncodeError as e: + # e.location.append(member.name) + # raise + + def decode(self, decoder): + tag = decoder.read_tag() + + if tag in self.tag_to_root_member: + member = self.tag_to_root_member[tag] + try: + decoded = member.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + elif tag in self.tag_to_addition: + member = self.tag_to_addition[tag] + decoder.read_length_determinant() + try: + decoded = member.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + elif self.has_extension_marker: + length = decoder.read_length_determinant() + decoder.skip_bits(8 * length) + + return (None, None) + else: + raise DecodeError( + "Expected choice member tag {}, but got '{}'.".format( + self.format_tags(), format_bytes(tag))) + + return (member.name, decoded) + + def __repr__(self): + return 'Choice({}, [{}])'.format( + self.name, + ', '.join([repr(member) for member in self.members])) + + +class UTF8String(KnownMultiplierStringType): + + TAG = Tag.UTF8_STRING + ENCODING = 'utf-8' + + +class NumericString(KnownMultiplierStringType): + + TAG = Tag.NUMERIC_STRING + ENCODING = 'ascii' + + +class PrintableString(KnownMultiplierStringType): + + TAG = Tag.PRINTABLE_STRING + ENCODING = 'ascii' + + +class IA5String(KnownMultiplierStringType): + + TAG = Tag.IA5_STRING + ENCODING = 'ascii' + + +class VisibleString(KnownMultiplierStringType): + + TAG = Tag.VISIBLE_STRING + ENCODING = 'ascii' + + +class GeneralString(KnownMultiplierStringType): + + TAG = Tag.GENERAL_STRING + ENCODING = 'latin-1' + + +class BMPString(KnownMultiplierStringType): + + TAG = Tag.BMP_STRING + ENCODING = 'utf-16-be' + + +class GraphicString(KnownMultiplierStringType): + + TAG = Tag.GENERAL_STRING + ENCODING = 'latin-1' + + +class UniversalString(KnownMultiplierStringType): + + TAG = Tag.UNIVERSAL_STRING + ENCODING = 'utf-32-be' + + +class TeletexString(KnownMultiplierStringType): + + TAG = Tag.T61_STRING + ENCODING = 'iso-8859-1' + + +class ObjectDescriptor(GraphicString): + + TAG = Tag.OBJECT_DESCRIPTOR + + +class UTCTime(VisibleString): + + TAG = Tag.UTC_TIME + + def encode(self, data, encoder): + encoded = utc_time_from_datetime(data) + + return super(UTCTime, self).encode(encoded, encoder) + + def decode(self, decoder): + decoded = super(UTCTime, self).decode(decoder) + + return utc_time_to_datetime(decoded) + + +class GeneralizedTime(VisibleString): + + TAG = Tag.GENERALIZED_TIME + + def encode(self, data, encoder): + encoded = generalized_time_from_datetime(data) + + return super(GeneralizedTime, self).encode(encoded, encoder) + + def decode(self, decoder): + decoded = super(GeneralizedTime, self).decode(decoder) + + return generalized_time_to_datetime(decoded) + + +class Date(Type): + + def __init__(self, name): + super(Date, self).__init__(name, 'DATE', None) + year = Integer('year') + month = Integer('month') + day = Integer('day') + month.set_restricted_to_range(1, 12, False) + day.set_restricted_to_range(1, 31, False) + self._inner = Sequence('DATE-ENCODING', + [year, month, day], + None) + + def encode(self, data, encoder): + data = { + 'year': data.year, + 'month': data.month, + 'day': data.day + } + + self._inner.encode(data, encoder) + + def decode(self, decoder): + decoded = self._inner.decode(decoder) + + return datetime.date(decoded['year'], + decoded['month'], + decoded['day']) + + +class TimeOfDay(Type): + + def __init__(self, name): + super(TimeOfDay, self).__init__(name, 'TIME-OF-DAY', None) + hours = Integer('hours') + minutes = Integer('minutes') + seconds = Integer('seconds') + hours.set_restricted_to_range(0, 24, False) + minutes.set_restricted_to_range(0, 59, False) + seconds.set_restricted_to_range(0, 60, False) + self._inner = Sequence('TIME-OF-DAY-ENCODING', + [hours, minutes, seconds], + None) + + def encode(self, data, encoder): + data = { + 'hours': data.hour, + 'minutes': data.minute, + 'seconds': data.second + } + + self._inner.encode(data, encoder) + + def decode(self, decoder): + decoded = self._inner.decode(decoder) + + return datetime.time(decoded['hours'], + decoded['minutes'], + decoded['seconds']) + + +class DateTime(Type): + + def __init__(self, name): + super(DateTime, self).__init__(name, 'DATE-TIME', None) + self._date = Date('date') + self._time = TimeOfDay('time') + + def encode(self, data, encoder): + self._date.encode(data, encoder) + self._time.encode(data, encoder) + + def decode(self, decoder): + decoded_date = self._date.decode(decoder) + decoded_time = self._time.decode(decoder) + + return datetime.datetime(decoded_date.year, + decoded_date.month, + decoded_date.day, + decoded_time.hour, + decoded_time.minute, + decoded_time.second) + + +class Any(Type): + + def __init__(self, name): + super(Any, self).__init__(name, 'ANY', None) + + def encode(self, data, encoder): + raise NotImplementedError('ANY is not yet implemented.') + + def decode(self, decoder): + raise NotImplementedError('ANY is not yet implemented.') + + +class AnyDefinedBy(Type): + + def __init__(self, name, type_member, choices): + super(AnyDefinedBy, self).__init__(name, + 'ANY DEFINED BY', + None, + None) + self.type_member = type_member + self.choices = choices + + def encode(self, data, encoder): + raise NotImplementedError('ANY DEFINED BY is not yet implemented.') + + def decode(self, decoder): + raise NotImplementedError('ANY DEFINED BY is not yet implemented.') + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name, 'RECURSIVE', None) + self.type_name = type_name + self.module_name = module_name + self.tag_number = None + self.tag_flags = None + self.inner = None + + def set_inner_type(self, inner): + self.inner = copy(inner) + + if self.tag_number is not None: + self.inner.set_tag(self.tag_number, self.tag_flags) + + def encode(self, data, encoder): + self.inner.encode(data, encoder) + + def decode(self, decoder): + return self.inner.decode(decoder) + + +class CompiledType(compiler.CompiledType): + + def encode(self, data): + encoder = Encoder() + try: + self._type.encode(data, encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + return encoder.as_bytearray() + + def decode(self, data): + decoder = Decoder(bytearray(data)) + try: + return self._type.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = self.get_module_name(type_descriptor, module_name) + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + compiled = Sequence(name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'SEQUENCE OF': + compiled = SequenceOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'SET': + compiled = Set(name, + *self.compile_members(type_descriptor['members'], + module_name, + sort_by_tag=True)) + elif type_name == 'SET OF': + compiled = SetOf(name, + self.compile_type('', + type_descriptor['element'], + module_name)) + elif type_name == 'CHOICE': + compiled = Choice( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name, self.get_with_components(type_descriptor)) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + compiled = NumericString(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'PrintableString': + compiled = PrintableString(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'IA5String': + compiled = IA5String(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'VisibleString': + compiled = VisibleString(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'BMPString': + compiled = BMPString(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'BIT STRING': + compiled = BitString(name, + self.get_named_bits(type_descriptor, + module_name), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + choices = {} + + for key, value in type_descriptor['choices'].items(): + choices[key] = self.compile_type(key, + value, + module_name) + + compiled = AnyDefinedBy(name, + type_descriptor['value'], + choices) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + compiled = Sequence( + name, + *self.compile_members(self.external_type_descriptor()['members'], + module_name)) + compiled.set_tag(Tag.EXTERNAL, 0) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + if 'tag' in type_descriptor: + compiled = self.copy(compiled) + tag = type_descriptor['tag'] + class_ = tag.get('class', None) + + if class_ == 'APPLICATION': + flags = Class.APPLICATION + elif class_ == 'PRIVATE': + flags = Class.PRIVATE + else: + flags = 0 + + compiled.set_tag(tag['number'], flags) + + if 'restricted-to' in type_descriptor: + compiled = self.set_compiled_restricted_to(compiled, + type_descriptor, + module_name) + + return compiled + + def compile_members(self, + members, + module_name, + sort_by_tag=False): + compiled_members = [] + in_extension = False + additions = None + + for member in members: + if member == EXTENSION_MARKER: + in_extension = not in_extension + + if in_extension: + additions = [] + elif in_extension: + self.compile_extension_member(member, + module_name, + additions) + else: + self.compile_root_member(member, + module_name, + compiled_members) + + if sort_by_tag: + compiled_members = sorted(compiled_members, key=attrgetter('tag')) + + return compiled_members, additions + + def compile_extension_member(self, + member, + module_name, + additions): + if isinstance(member, list): + for memb in member: + compiled_member = self.compile_member(memb, + module_name) + additions.append(compiled_member) + else: + compiled_member = self.compile_member(member, + module_name) + additions.append(compiled_member) + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() + + +def decode_full_length(_data): + raise DecodeError('Decode length is not supported for this codec.') diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/per.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/per.py new file mode 100644 index 0000000..d0dec86 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/per.py @@ -0,0 +1,2250 @@ +"""Aligned Packed Encoding Rules (PER) codec. + +""" + +from operator import attrgetter +from operator import itemgetter +import binascii +import string +import datetime + +from ..parser import EXTENSION_MARKER +from . import BaseType, format_bytes, ErrorWithLocation +from . import EncodeError +from . import DecodeError +from . import OutOfDataError +from . import compiler +from . import format_or +from . import restricted_utc_time_to_datetime +from . import restricted_utc_time_from_datetime +from . import restricted_generalized_time_to_datetime +from . import restricted_generalized_time_from_datetime +from .compiler import enum_values_split +from .compiler import enum_values_as_dict +from .compiler import clean_bit_string_value +from .compiler import rstrip_bit_string_zeros +from .ber import encode_real +from .ber import decode_real +from .ber import encode_object_identifier +from .ber import decode_object_identifier +from .permitted_alphabet import NUMERIC_STRING +from .permitted_alphabet import PRINTABLE_STRING +from .permitted_alphabet import IA5_STRING +from .permitted_alphabet import BMP_STRING +from .permitted_alphabet import VISIBLE_STRING + + +def is_unbound(minimum, maximum): + return ((minimum in [None, 'MIN']) + or (maximum in [None, 'MAX']) + or (maximum > 65535)) + + +def to_int(chars): + if isinstance(chars, int): + return chars + + num = 0 + byte_array = bytearray(chars) + while len(byte_array) > 0: + num <<= 8 + byte = byte_array.pop(0) + num += byte + + return num + + +def to_byte_array(num, number_of_bits): + byte_array = bytearray() + + while number_of_bits > 0: + byte_array.insert(0, (num & 0xff)) + num >>= 8 + number_of_bits -= 8 + + return byte_array + + +def integer_as_number_of_bits(size): + """Returns the minimum number of bits needed to fit given positive + integer. + + """ + + if size == 0: + return 0 + else: + return size.bit_length() + + +def integer_as_number_of_bits_power_of_two(size): + """Returns the minimum power of two number of bits needed to fit given + positive integer. + + """ + + if size == 0: + return 0 + else: + bit_length = integer_as_number_of_bits(size) + bit_length_pow_2 = 1 + + while bit_length > bit_length_pow_2: + bit_length_pow_2 <<= 1 + + return bit_length_pow_2 + + +def size_as_number_of_bytes(size): + """Returns the minimum number of bytes needed to fit given positive + integer. + + """ + + if size == 0: + return 1 + else: + number_of_bits = size.bit_length() + rest = (number_of_bits % 8) + + if rest != 0: + number_of_bits += (8 - rest) + + return number_of_bits // 8 + + +CLASS_PRIO = { + 'UNIVERSAL': 0, + 'APPLICATION': 1, + 'CONTEXT_SPECIFIC': 2, + 'PRIVATE': 3 +} + + +class PermittedAlphabet(object): + + def __init__(self, encode_map, decode_map): + self.encode_map = encode_map + self.decode_map = decode_map + + def __len__(self): + return len(self.encode_map) + + def encode(self, value): + try: + return self.encode_map[value] + except KeyError: + raise EncodeError( + "Expected a character in '{}', but got '{}' (0x{:02x})'.".format( + ''.join(sorted([chr(v) for v in self.encode_map])), + chr(value) if chr(value) in string.printable else '.', + value)) + + def decode(self, value): + try: + return self.decode_map[value] + except KeyError: + raise DecodeError( + "Expected a value in {}, but got {:d}.".format( + list(self.decode_map), value)) + + +class Encoder(object): + + def __init__(self): + self.number_of_bits = 0 + self.value = 0 + self.chunks_number_of_bits = 0 + self.chunks = [] + + def __iadd__(self, other): + for value, number_of_bits in other.chunks: + self.append_non_negative_binary_integer(value, number_of_bits) + + self.append_non_negative_binary_integer(other.value, + other.number_of_bits) + + return self + + def reset(self): + self.number_of_bits = 0 + self.value = 0 + self.chunks_number_of_bits = 0 + self.chunks = [] + + def are_all_bits_zero(self): + return not (any([value for value, _ in self.chunks]) or self.value) + + def number_of_bytes(self): + return (self.chunks_number_of_bits + self.number_of_bits + 7) // 8 + + def offset(self): + return (len(self.chunks), self.number_of_bits) + + def set_bit(self, offset): + chunk_offset, bit_offset = offset + + if len(self.chunks) == chunk_offset: + self.value |= (1 << (self.number_of_bits - bit_offset - 1)) + else: + chunk = self.chunks[chunk_offset] + chunk[0] |= (1 << (chunk[1] - bit_offset - 1)) + + def align(self): + self.align_always() + + def align_always(self): + width = 8 * self.number_of_bytes() + width -= self.chunks_number_of_bits + width -= self.number_of_bits + self.number_of_bits += width + self.value <<= width + + def append_bit(self, bit): + """Append given bit. + + """ + + self.number_of_bits += 1 + self.value <<= 1 + self.value |= bit + + def append_bits(self, data, number_of_bits): + """Append given bits. + + """ + + if number_of_bits == 0: + return + + value = int(binascii.hexlify(data), 16) + value >>= (8 * len(data) - number_of_bits) + + self.append_non_negative_binary_integer(value, number_of_bits) + + def append_non_negative_binary_integer(self, value, number_of_bits): + """Append given integer value. + + """ + + if self.number_of_bits > 4096: + self.chunks.append([self.value, self.number_of_bits]) + self.chunks_number_of_bits += self.number_of_bits + self.number_of_bits = 0 + self.value = 0 + + self.number_of_bits += number_of_bits + self.value <<= number_of_bits + self.value |= value + + def append_bytes(self, data): + """Append given data. + + """ + + self.append_bits(data, 8 * len(data)) + + def as_bytearray(self): + """Return the bits as a bytearray. + + """ + + value = 0 + number_of_bits = 0 + + for chunk_value, chunk_number_of_bits in self.chunks: + value <<= chunk_number_of_bits + value |= chunk_value + number_of_bits += chunk_number_of_bits + + value <<= self.number_of_bits + value |= self.value + number_of_bits += self.number_of_bits + + if number_of_bits == 0: + return bytearray() + + number_of_alignment_bits = (8 - (number_of_bits % 8)) + + if number_of_alignment_bits != 8: + value <<= number_of_alignment_bits + number_of_bits += number_of_alignment_bits + + value |= (0x80 << number_of_bits) + value = hex(value)[4:].rstrip('L') + + return bytearray(binascii.unhexlify(value)) + + def append_length_determinant(self, length): + if length < 128: + encoded = bytearray([length]) + elif length < 16384: + encoded = bytearray([(0x80 | (length >> 8)), (length & 0xff)]) + elif length < 32768: + encoded = b'\xc1' + length = 16384 + elif length < 49152: + encoded = b'\xc2' + length = 32768 + elif length < 65536: + encoded = b'\xc3' + length = 49152 + else: + encoded = b'\xc4' + length = 65536 + + self.append_bytes(encoded) + + return length + + def append_length_determinant_chunks(self, length): + offset = 0 + chunk_length = length + + while True: + chunk_length = self.append_length_determinant(chunk_length) + + yield offset, chunk_length + + if chunk_length < 16384: + break + + offset += chunk_length + chunk_length = length - offset + + def append_normally_small_non_negative_whole_number(self, value): + if value < 64: + self.append_non_negative_binary_integer(value, 7) + else: + self.append_bit(1) + length = (value.bit_length() + 7) // 8 + self.append_length_determinant(length) + self.append_non_negative_binary_integer(value, 8 * length) + + def append_normally_small_length(self, value): + if value <= 64: + self.append_non_negative_binary_integer(value - 1, 7) + elif value <= 127: + self.append_non_negative_binary_integer(0x100 | value, 9) + else: + raise NotImplementedError( + 'Normally small length number >127 is not yet supported.') + + def append_constrained_whole_number(self, + value, + minimum, + maximum, + number_of_bits): + _range = (maximum - minimum + 1) + value -= minimum + + if _range <= 255: + self.append_non_negative_binary_integer(value, number_of_bits) + elif _range == 256: + self.align_always() + self.append_non_negative_binary_integer(value, 8) + elif _range <= 65536: + self.align_always() + self.append_non_negative_binary_integer(value, 16) + else: + self.align_always() + self.append_non_negative_binary_integer(value, number_of_bits) + + def append_unconstrained_whole_number(self, value): + number_of_bits = value.bit_length() + + if value < 0: + number_of_bytes = ((number_of_bits + 7) // 8) + value = ((1 << (8 * number_of_bytes)) + value) + + if (value & (1 << (8 * number_of_bytes - 1))) == 0: + value |= (0xff << (8 * number_of_bytes)) + number_of_bytes += 1 + elif value > 0: + number_of_bytes = ((number_of_bits + 7) // 8) + + if number_of_bits == (8 * number_of_bytes): + number_of_bytes += 1 + else: + number_of_bytes = 1 + + self.append_length_determinant(number_of_bytes) + self.append_non_negative_binary_integer(value, + 8 * number_of_bytes) + + def __repr__(self): + return format_bytes(self.as_bytearray()) + + +class Decoder(object): + + def __init__(self, encoded): + self.number_of_bits = (8 * len(encoded)) + self.total_number_of_bits = self.number_of_bits + + if len(encoded) > 0: + value = int(binascii.hexlify(encoded), 16) + value |= (0x80 << self.number_of_bits) + self.value = bin(value)[10:] + else: + self.value = '' + + def align(self): + self.align_always() + + def align_always(self): + width = (self.number_of_bits & 0x7) + self.number_of_bits -= width + + def number_of_read_bits(self): + return self.total_number_of_bits - self.number_of_bits + + def skip_bits(self, number_of_bits): + if number_of_bits > self.number_of_bits: + raise OutOfDataError(self.number_of_read_bits()) + + self.number_of_bits -= number_of_bits + + def read_bit(self): + """Read a bit. + + """ + + if self.number_of_bits == 0: + raise OutOfDataError(self.number_of_read_bits()) + + bit = int(self.value[self.number_of_read_bits()]) + self.number_of_bits -= 1 + + return bit + + def read_bits(self, number_of_bits): + """Read given number of bits. + + """ + + if number_of_bits > self.number_of_bits: + raise OutOfDataError(self.number_of_read_bits()) + + offset = self.number_of_read_bits() + value = self.value[offset:offset + number_of_bits] + self.number_of_bits -= number_of_bits + value = '10000000' + value + number_of_alignment_bits = (8 - (number_of_bits % 8)) + + if number_of_alignment_bits != 8: + value += '0' * number_of_alignment_bits + + return binascii.unhexlify(hex(int(value, 2))[4:].rstrip('L')) + + def read_bytes(self, number_of_bytes): + return self.read_bits(8 * number_of_bytes) + + def read_non_negative_binary_integer(self, number_of_bits): + """Read an integer value of given number of bits. + + """ + + if number_of_bits > self.number_of_bits: + raise OutOfDataError(self.number_of_read_bits()) + + if number_of_bits == 0: + return 0 + + offset = self.number_of_read_bits() + value = self.value[offset:offset + number_of_bits] + self.number_of_bits -= number_of_bits + + return int(value, 2) + + def read_length_determinant(self): + value = self.read_non_negative_binary_integer(8) + + if (value & 0x80) == 0x00: + return value + elif (value & 0xc0) == 0x80: + return (((value & 0x7f) << 8) + | (self.read_non_negative_binary_integer(8))) + else: + try: + return { + 0xc1: 16384, + 0xc2: 32768, + 0xc3: 49152, + 0xc4: 65536 + }[value] + except KeyError: + raise DecodeError( + 'Bad length determinant fragmentation value 0x{:02x}.'.format( + value)) + + def read_length_determinant_chunks(self): + while True: + length = self.read_length_determinant() + + yield length + + if length < 16384: + break + + def read_normally_small_non_negative_whole_number(self): + if not self.read_bit(): + decoded = self.read_non_negative_binary_integer(6) + else: + length = self.read_length_determinant() + decoded = self.read_non_negative_binary_integer(8 * length) + + return decoded + + def read_normally_small_length(self): + if not self.read_bit(): + return self.read_non_negative_binary_integer(6) + 1 + elif not self.read_bit(): + return self.read_non_negative_binary_integer(7) + else: + raise NotImplementedError( + 'Normally small length number >64 is not yet supported.') + + def read_constrained_whole_number(self, + minimum, + maximum, + number_of_bits): + _range = (maximum - minimum + 1) + + if _range <= 255: + value = self.read_non_negative_binary_integer(number_of_bits) + elif _range == 256: + self.align_always() + value = self.read_non_negative_binary_integer(8) + elif _range <= 65536: + self.align_always() + value = self.read_non_negative_binary_integer(16) + else: + self.align_always() + value = self.read_non_negative_binary_integer(number_of_bits) + + return value + minimum + + def read_unconstrained_whole_number(self): + length = self.read_length_determinant() + decoded = self.read_non_negative_binary_integer(8 * length) + number_of_bits = (8 * length) + + if decoded & (1 << (number_of_bits - 1)): + mask = ((1 << number_of_bits) - 1) + decoded = (decoded - mask) + decoded -= 1 + + return decoded + + +class Type(BaseType): + + def __init__(self, name, type_name): + super().__init__(name, type_name) + self.module_name = None + self.tag = None + + def set_size_range(self, minimum, maximum, has_extension_marker): + pass + + def set_restricted_to_range(self, minimum, maximum, has_extension_marker): + pass + + +class KnownMultiplierStringType(Type): + + ENCODING = 'ascii' + PERMITTED_ALPHABET = PermittedAlphabet({}, {}) + + def __init__(self, + name, + minimum=None, + maximum=None, + has_extension_marker=False, + permitted_alphabet=None): + super(KnownMultiplierStringType, self).__init__(name, + self.__class__.__name__) + self.set_size_range(minimum, maximum, has_extension_marker) + + if permitted_alphabet is None: + permitted_alphabet = self.PERMITTED_ALPHABET + + self.permitted_alphabet = permitted_alphabet + self.bits_per_character = integer_as_number_of_bits_power_of_two( + len(permitted_alphabet) - 1) + + if len(self.PERMITTED_ALPHABET) < 2 ** self.bits_per_character: + self.permitted_alphabet = self.PERMITTED_ALPHABET + + def set_size_range(self, minimum, maximum, has_extension_marker): + self.minimum = minimum + self.maximum = maximum + self.has_extension_marker = has_extension_marker + + if is_unbound(minimum, maximum): + self.number_of_bits = None + else: + size = maximum - minimum + self.number_of_bits = integer_as_number_of_bits(size) + + def encode(self, data, encoder): + + if self.has_extension_marker: + if self.minimum <= len(data) <= self.maximum: + encoder.append_bit(0) + else: + raise NotImplementedError( + 'String size extension is not yet implemented.') + + if self.number_of_bits is None: + return self.encode_unbound(data, encoder) + elif self.minimum != self.maximum: + encoder.append_constrained_whole_number(len(data), + self.minimum, + self.maximum, + self.number_of_bits) + + if self.maximum > 1 and len(data) > 0: + encoder.align() + elif self.maximum * self.bits_per_character > 16: + encoder.align() + + for value in data: + encoder.append_non_negative_binary_integer( + self.permitted_alphabet.encode( + to_int(value.encode(self.ENCODING))), + self.bits_per_character) + + def encode_unbound(self, data, encoder): + encoder.align() + + for offset, length in encoder.append_length_determinant_chunks(len(data)): + for entry in data[offset:offset + length]: + encoder.append_non_negative_binary_integer( + self.permitted_alphabet.encode( + to_int(entry.encode(self.ENCODING))), + self.bits_per_character) + + def decode(self, decoder): + if self.has_extension_marker: + bit = decoder.read_bit() + + if bit: + raise NotImplementedError( + 'String size extension is not yet implemented.') + + if self.number_of_bits is None: + return self.decode_unbound(decoder) + else: + if self.minimum != self.maximum: + length = decoder.read_constrained_whole_number(self.minimum, + self.maximum, + self.number_of_bits) + + if self.maximum > 1 and length > 0: + decoder.align() + elif self.maximum * self.bits_per_character > 16: + decoder.align() + length = self.minimum + else: + length = self.minimum + + data = bytearray() + + for _ in range(length): + value = decoder.read_non_negative_binary_integer(self.bits_per_character) + value = self.permitted_alphabet.decode(value) + data += to_byte_array(value, self.bits_per_character) + + return data.decode(self.ENCODING) + + def decode_unbound(self, decoder): + decoder.align() + decoded = bytearray() + orig_bits_per_character = integer_as_number_of_bits_power_of_two( + len(self.ALPHABET) - 1) + + for length in decoder.read_length_determinant_chunks(): + for _ in range(length): + value = decoder.read_non_negative_binary_integer( + self.bits_per_character) + value = self.permitted_alphabet.decode(value) + decoded += to_byte_array(value, orig_bits_per_character) + + return decoded.decode(self.ENCODING) + + +class StringType(Type): + + ENCODING = None + LENGTH_MULTIPLIER = 1 + + def __init__(self, name): + super(StringType, self).__init__(name, self.__class__.__name__) + + def encode(self, data, encoder): + encoded = data.encode(self.ENCODING) + encoder.align() + + for offset, length in encoder.append_length_determinant_chunks(len(data)): + offset *= self.LENGTH_MULTIPLIER + data = encoded[offset:offset + self.LENGTH_MULTIPLIER * length] + encoder.append_bytes(data) + + def decode(self, decoder): + decoder.align() + encoded = [] + + for length in decoder.read_length_determinant_chunks(): + encoded.append(decoder.read_bytes(self.LENGTH_MULTIPLIER * length)) + + return b''.join(encoded).decode(self.ENCODING) + + +class MembersType(Type): + + def __init__(self, + name, + root_members, + additions, + type_name): + super(MembersType, self).__init__(name, type_name) + self.root_members = root_members + self.additions = additions + self.optionals = [ + member + for member in root_members + if member.optional or member.default is not None + ] + + def encode(self, data, encoder): + if self.additions is not None: + offset = encoder.offset() + encoder.append_bit(0) + self.encode_root(data, encoder) + + if len(self.additions) > 0: + if self.encode_additions(data, encoder): + encoder.set_bit(offset) + else: + self.encode_root(data, encoder) + + def encode_root(self, data, encoder): + for optional in self.optionals: + if optional.optional: + encoder.append_bit(optional.name in data) + elif optional.name in data: + encoder.append_bit(not optional.is_default(data[optional.name])) + else: + encoder.append_bit(0) + + for member in self.root_members: + self.encode_member(member, data, encoder) + + def encode_additions(self, data, encoder): + # Encode extension additions. + presence_bits = 0 + addition_encoders = [] + number_of_precence_bits = 0 + + try: + for addition in self.additions: + presence_bits <<= 1 + addition_encoder = encoder.__class__() + number_of_precence_bits += 1 + + if isinstance(addition, AdditionGroup): + addition.encode_addition_group(data, addition_encoder) + else: + self.encode_member(addition, + data, + addition_encoder, + encode_default=True) + + if addition_encoder.number_of_bits > 0 or addition.name in data: + addition_encoders.append(addition_encoder) + presence_bits |= 1 + except EncodeError: + pass + + # Return false if no extension additions are present. + if not addition_encoders: + return False + + # Presence bit field. + number_of_additions = len(self.additions) + presence_bits <<= (number_of_additions - number_of_precence_bits) + encoder.append_normally_small_length(number_of_additions) + encoder.append_non_negative_binary_integer(presence_bits, + number_of_additions) + + # Embed each encoded extension addition in an open type (add a + # length field and multiple of 8 bits). + encoder.align() + + for addition_encoder in addition_encoders: + addition_encoder.align_always() + encoder.append_length_determinant(addition_encoder.number_of_bytes()) + encoder += addition_encoder + + return True + + def encode_addition_group(self, data, encoder): + self.encode_root(data, encoder) + + if (encoder.are_all_bits_zero() + and (encoder.number_of_bits == len(self.optionals))): + encoder.reset() + + def encode_member(self, member, data, encoder, encode_default=False): + name = member.name + + if name in data: + try: + if member.default is None: + member.encode(data[name], encoder) + elif not member.is_default(data[name]) or encode_default: + member.encode(data[name], encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + elif member.optional or member.default is not None: + pass + else: + raise EncodeError( + "{} member '{}' not found in {}.".format( + self.__class__.__name__, + name, + data)) + + def decode(self, decoder): + if self.additions is not None: + if decoder.read_bit(): + decoded = self.decode_root(decoder) + decoded.update(self.decode_additions(decoder)) + else: + decoded = self.decode_root(decoder) + else: + decoded = self.decode_root(decoder) + + return decoded + + def decode_root(self, decoder): + values = {} + optionals = { + optional: decoder.read_bit() + for optional in self.optionals + } + + for member in self.root_members: + if optionals.get(member, True): + try: + value = member.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + values[member.name] = value + elif member.has_default(): + values[member.name] = member.default + + return values + + def decode_additions(self, decoder): + # Presence bit field. + length = decoder.read_normally_small_length() + presence_bits = decoder.read_non_negative_binary_integer(length) + decoder.align() + decoded = {} + + for i in range(length): + if presence_bits & (1 << (length - i - 1)): + # Open type decoding. + open_type_length = decoder.read_length_determinant() + offset = decoder.number_of_bits + + if i < len(self.additions): + addition = self.additions[i] + + try: + if isinstance(addition, AdditionGroup): + decoded.update(addition.decode(decoder)) + else: + decoded[addition.name] = addition.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(addition) + raise e + else: + decoder.skip_bits(8 * open_type_length) + + alignment_bits = (offset - decoder.number_of_bits) % 8 + + if alignment_bits != 0: + decoder.skip_bits(8 - alignment_bits) + + return decoded + + def __repr__(self): + return '{}({}, [{}])'.format( + self.__class__.__name__, + self.name, + ', '.join([repr(member) for member in self.root_members])) + + +class ArrayType(Type): + + def __init__(self, + name, + element_type, + minimum, + maximum, + has_extension_marker, + type_name): + super(ArrayType, self).__init__(name, type_name) + self.element_type = element_type + self.minimum = minimum + self.maximum = maximum + self.has_extension_marker = has_extension_marker + + if is_unbound(minimum, maximum): + self.number_of_bits = None + else: + size = maximum - minimum + self.number_of_bits = integer_as_number_of_bits(size) + + def encode(self, data, encoder): + if self.has_extension_marker: + if self.minimum <= len(data) <= self.maximum: + encoder.append_bit(0) + else: + encoder.append_bit(1) + encoder.align() + encoder.append_length_determinant(len(data)) + + for entry in data: + self.element_type.encode(entry, encoder) + + return + + if self.number_of_bits is None: + return self.encode_unbound(data, encoder) + elif self.minimum != self.maximum: + encoder.append_constrained_whole_number(len(data), + self.minimum, + self.maximum, + self.number_of_bits) + + for entry in data: + self.element_type.encode(entry, encoder) + + def encode_unbound(self, data, encoder): + encoder.align() + + for offset, length in encoder.append_length_determinant_chunks(len(data)): + for entry in data[offset:offset + length]: + self.element_type.encode(entry, encoder) + + def decode(self, decoder): + length = None + + if self.has_extension_marker: + bit = decoder.read_bit() + + if bit: + decoder.align() + length = decoder.read_length_determinant() + + if length is not None: + pass + elif self.number_of_bits is None: + return self.decode_unbound(decoder) + elif self.minimum != self.maximum: + length = decoder.read_constrained_whole_number(self.minimum, + self.maximum, + self.number_of_bits) + else: + length = self.minimum + + decoded = [] + + for _ in range(length): + decoded_element = self.element_type.decode(decoder) + decoded.append(decoded_element) + + return decoded + + def decode_unbound(self, decoder): + decoder.align() + decoded = [] + + for length in decoder.read_length_determinant_chunks(): + for _ in range(length): + decoded_element = self.element_type.decode(decoder) + decoded.append(decoded_element) + + return decoded + + def __repr__(self): + return '{}({}, {})'.format(self.__class__.__name__, + self.name, + self.element_type) + + +class Boolean(Type): + + def __init__(self, name): + super(Boolean, self).__init__(name, 'BOOLEAN') + + def encode(self, data, encoder): + encoder.append_bit(bool(data)) + + def decode(self, decoder): + return bool(decoder.read_bit()) + + +class Integer(Type): + + def __init__(self, name): + super(Integer, self).__init__(name, 'INTEGER') + self.minimum = None + self.maximum = None + self.has_extension_marker = False + self.number_of_bits = None + self.number_of_indefinite_bits = None + + def set_restricted_to_range(self, minimum, maximum, has_extension_marker): + self.has_extension_marker = has_extension_marker + + if minimum == 'MIN' or maximum == 'MAX': + return + + self.minimum = minimum + self.maximum = maximum + size = self.maximum - self.minimum + self.number_of_bits = integer_as_number_of_bits(size) + + if size <= 65535: + self.number_of_indefinite_bits = None + else: + number_of_bits = ((self.number_of_bits + 7) // 8 - 1).bit_length() + self.number_of_indefinite_bits = number_of_bits + + def encode(self, data, encoder): + if self.has_extension_marker: + if self.minimum <= data <= self.maximum: + encoder.append_bit(0) + else: + encoder.append_bit(1) + encoder.align() + encoder.append_unconstrained_whole_number(data) + return + + if self.number_of_bits is None: + encoder.align() + encoder.append_unconstrained_whole_number(data) + else: + if self.number_of_indefinite_bits is None: + number_of_bits = self.number_of_bits + else: + number_of_bytes = size_as_number_of_bytes(data - self.minimum) + number_of_bits = 8 * number_of_bytes + encoder.append_constrained_whole_number( + number_of_bytes - 1, + 0, + 2 ** self.number_of_indefinite_bits, + self.number_of_indefinite_bits) + encoder.align() + + encoder.append_constrained_whole_number(data, + self.minimum, + self.maximum, + number_of_bits) + + def decode(self, decoder): + if self.has_extension_marker: + if decoder.read_bit(): + decoder.align() + + return decoder.read_unconstrained_whole_number() + + if self.number_of_bits is None: + decoder.align() + + return decoder.read_unconstrained_whole_number() + else: + if self.number_of_indefinite_bits is None: + number_of_bits = self.number_of_bits + else: + number_of_bytes = decoder.read_constrained_whole_number( + 0, + 2 ** self.number_of_indefinite_bits, + self.number_of_indefinite_bits) + number_of_bytes += 1 + number_of_bits = (8 * number_of_bytes) + decoder.align() + + return decoder.read_constrained_whole_number(self.minimum, + self.maximum, + number_of_bits) + + +class Real(Type): + + def __init__(self, name): + super(Real, self).__init__(name, 'REAL') + + def encode(self, data, encoder): + encoded = encode_real(data) + encoder.align() + encoder.append_length_determinant(len(encoded)) + encoder.append_bytes(encoded) + + def decode(self, decoder): + decoder.align() + length = decoder.read_length_determinant() + + return decode_real(bytearray(decoder.read_bytes(length))) + + +class Null(Type): + + def __init__(self, name): + super(Null, self).__init__(name, 'NULL') + + def encode(self, _, _encoder): + pass + + def decode(self, _): + return None + + +class BitString(Type): + + def __init__(self, + name, + named_bits, + minimum, + maximum, + has_extension_marker): + super(BitString, self).__init__(name, 'BIT STRING') + self.minimum = minimum + self.maximum = maximum + self.has_extension_marker = has_extension_marker + self.named_bits = named_bits + self.has_named_bits = named_bits is not None + + if is_unbound(minimum, maximum): + self.number_of_bits = None + else: + size = self.maximum - self.minimum + self.number_of_bits = integer_as_number_of_bits(size) + + def is_default(self, value): + clean_value = clean_bit_string_value(value, + self.has_named_bits) + clean_default = clean_bit_string_value(self.default, + self.has_named_bits) + + return clean_value == clean_default + + def rstrip_zeros(self, data, number_of_bits): + data, number_of_bits = rstrip_bit_string_zeros(bytearray(data)) + + if self.minimum is not None: + if number_of_bits < self.minimum: + number_of_bits = self.minimum + number_of_bytes = ((number_of_bits + 7) // 8) + data += (number_of_bytes - len(data)) * b'\x00' + + return (data, number_of_bits) + + def encode(self, data, encoder): + data, number_of_bits = data + + if self.has_extension_marker: + if self.minimum <= number_of_bits <= self.maximum: + encoder.append_bit(0) + else: + raise NotImplementedError( + 'BIT STRING extension is not yet implemented.') + + if self.has_named_bits: + data, number_of_bits = self.rstrip_zeros(data, number_of_bits) + + if self.number_of_bits is None: + return self.encode_unbound(data, number_of_bits, encoder) + elif self.minimum != self.maximum: + encoder.append_constrained_whole_number(number_of_bits, + self.minimum, + self.maximum, + self.number_of_bits) + encoder.align() + elif self.minimum > 16: + encoder.align() + + encoder.append_bits(data, number_of_bits) + + def encode_unbound(self, data, number_of_bits, encoder): + encoder.align() + + for offset, length in encoder.append_length_determinant_chunks(number_of_bits): + encoder.append_bits(data[offset // 8:(offset + length + 7) // 8], length) + + def decode(self, decoder): + if self.has_extension_marker: + if decoder.read_bit(): + raise NotImplementedError( + 'BIT STRING extension is not yet implemented.') + + if self.number_of_bits is None: + return self.decode_unbound(decoder) + else: + number_of_bits = self.minimum + + if self.minimum != self.maximum: + number_of_bits = decoder.read_constrained_whole_number( + self.minimum, + self.maximum, + self.number_of_bits) + decoder.align() + elif self.minimum > 16: + decoder.align() + + value = decoder.read_bits(number_of_bits) + + return (value, number_of_bits) + + def decode_unbound(self, decoder): + decoder.align() + decoded = [] + number_of_bits = 0 + + for length in decoder.read_length_determinant_chunks(): + decoded.append(decoder.read_bits(length)) + number_of_bits += length + + return (b''.join(decoded), number_of_bits) + + +class OctetString(Type): + + def __init__(self, name, minimum, maximum, has_extension_marker): + super(OctetString, self).__init__(name, 'OCTET STRING') + self.set_size_range(minimum, maximum, has_extension_marker) + + def set_size_range(self, minimum, maximum, has_extension_marker): + self.minimum = minimum + self.maximum = maximum + self.has_extension_marker = has_extension_marker + + if is_unbound(minimum, maximum): + self.number_of_bits = None + else: + size = self.maximum - self.minimum + + if size == 0 and self.maximum >= 65536: + self.number_of_bits = None + else: + self.number_of_bits = integer_as_number_of_bits(size) + + def encode(self, data, encoder): + align = True + + if self.has_extension_marker: + if self.minimum <= len(data) <= self.maximum: + encoder.append_bit(0) + else: + encoder.append_bit(1) + encoder.align() + encoder.append_length_determinant(len(data)) + encoder.append_bytes(data) + + return + + if self.number_of_bits is None: + return self.encode_unbound(data, encoder) + elif self.minimum != self.maximum: + encoder.append_constrained_whole_number(len(data), + self.minimum, + self.maximum, + self.number_of_bits) + elif self.maximum <= 2: + align = False + + if align: + encoder.align() + + encoder.append_bytes(data) + + def encode_unbound(self, data, encoder): + encoder.align() + + for offset, length in encoder.append_length_determinant_chunks(len(data)): + encoder.align() + encoder.append_bytes(data[offset:offset + length]) + + def decode(self, decoder): + align = True + + if self.has_extension_marker: + bit = decoder.read_bit() + + if bit: + decoder.align() + length = decoder.read_length_determinant() + + return decoder.read_bytes(length) + + if self.number_of_bits is None: + return self.decode_unbound(decoder) + else: + length = self.minimum + + if self.minimum != self.maximum: + length = decoder.read_constrained_whole_number( + self.minimum, + self.maximum, + self.number_of_bits) + elif self.maximum <= 2: + align = False + + if align: + decoder.align() + + return decoder.read_bytes(length) + + def decode_unbound(self, decoder): + decoder.align() + decoded = [] + + for length in decoder.read_length_determinant_chunks(): + decoder.align() + decoded.append(decoder.read_bytes(length)) + + return b''.join(decoded) + + +class ObjectIdentifier(Type): + + def __init__(self, name): + super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') + + def encode(self, data, encoder): + encoded_subidentifiers = encode_object_identifier(data) + encoder.align() + encoder.append_length_determinant(len(encoded_subidentifiers)) + encoder.append_bytes(bytearray(encoded_subidentifiers)) + + def decode(self, decoder): + decoder.align() + length = decoder.read_length_determinant() + data = decoder.read_bytes(length) + + return decode_object_identifier(bytearray(data), 0, len(data)) + + +class Enumerated(Type): + + def __init__(self, name, values, numeric): + super(Enumerated, self).__init__(name, 'ENUMERATED') + root, additions = enum_values_split(values) + root = sorted(root, key=itemgetter(1)) + + # Root. + index_to_data, data_to_index = self.create_maps(root, + numeric) + self.root_index_to_data = index_to_data + self.root_data_to_index = data_to_index + self.root_number_of_bits = integer_as_number_of_bits(len(index_to_data) - 1) + + if numeric: + self.root_data_to_value = {k: k for k in enum_values_as_dict(root)} + else: + self.root_data_to_value = {v: k for k, v in enum_values_as_dict(root).items()} + + # Optional additions. + if additions is None: + index_to_data = None + data_to_index = None + else: + index_to_data, data_to_index = self.create_maps(additions, + numeric) + + self.additions_index_to_data = index_to_data + self.additions_data_to_index = data_to_index + + def create_maps(self, items, numeric): + if numeric: + index_to_data = { + index: value[1] + for index, value in enumerate(items) + } + else: + index_to_data = { + index: value[0] + for index, value in enumerate(items) + } + + data_to_index = { + data: index + for index, data in index_to_data.items() + } + + return index_to_data, data_to_index + + def format_root_indexes(self): + return format_or(sorted(list(self.root_index_to_data))) + + def encode(self, data, encoder): + if self.additions_index_to_data is None: + index = self.root_data_to_index[data] + encoder.append_non_negative_binary_integer(index, + self.root_number_of_bits) + else: + if data in self.root_data_to_index: + encoder.append_bit(0) + index = self.root_data_to_index[data] + encoder.append_non_negative_binary_integer(index, + self.root_number_of_bits) + else: + encoder.append_bit(1) + index = self.additions_data_to_index[data] + encoder.append_normally_small_non_negative_whole_number(index) + + def decode(self, decoder): + if self.additions_index_to_data is None: + return self.decode_root(decoder) + else: + additions = decoder.read_bit() + + if additions == 0: + return self.decode_root(decoder) + else: + index = decoder.read_normally_small_non_negative_whole_number() + + if index in self.additions_index_to_data: + return self.additions_index_to_data[index] + else: + return None + + def decode_root(self, decoder): + index = decoder.read_non_negative_binary_integer(self.root_number_of_bits) + + try: + data = self.root_index_to_data[index] + except KeyError: + raise DecodeError( + 'Expected enumeration index {}, but got {}.'.format( + self.format_root_indexes(), index)) + + return data + + +class Sequence(MembersType): + + def __init__(self, + name, + root_members, + additions): + super(Sequence, self).__init__(name, + root_members, + additions, + 'SEQUENCE') + + +class SequenceOf(ArrayType): + + def __init__(self, + name, + element_type, + minimum, + maximum, + has_extension_marker): + super(SequenceOf, self).__init__(name, + element_type, + minimum, + maximum, + has_extension_marker, + 'SEQUENCE OF') + + +class Set(MembersType): + + def __init__(self, + name, + root_members, + additions): + super(Set, self).__init__(name, + root_members, + additions, + 'SET') + + +class SetOf(ArrayType): + + def __init__(self, + name, + element_type, + minimum, + maximum, + has_extension_marker): + super(SetOf, self).__init__(name, + element_type, + minimum, + maximum, + has_extension_marker, + 'SET OF') + + +class Choice(Type): + + def __init__(self, name, root_members, additions): + super(Choice, self).__init__(name, 'CHOICE') + + # Root. + index_to_member, name_to_index = self.create_maps(root_members) + self.root_index_to_member = index_to_member + self.root_name_to_index = name_to_index + self.maximum = (len(root_members) - 1) + self.root_number_of_bits = integer_as_number_of_bits(self.maximum) + + if self.maximum <= 65535: + self.number_of_indefinite_bits = None + else: + number_of_bits = ((self.root_number_of_bits + 7) // 8 - 1).bit_length() + self.number_of_indefinite_bits = number_of_bits + + # Optional additions. + if additions is None: + index_to_member = None + name_to_index = None + else: + index_to_member, name_to_index = self.create_maps(additions) + + self.additions_index_to_member = index_to_member + self.additions_name_to_index = name_to_index + + def create_maps(self, members): + index_to_member = { + index: member + for index, member in enumerate(members) + } + name_to_index = { + member.name: index + for index, member in enumerate(members) + } + + return index_to_member, name_to_index + + def format_root_indexes(self): + return format_or(sorted(list(self.root_index_to_member))) + + def format_names(self): + members = list(self.root_index_to_member.values()) + + if self.additions_index_to_member is not None: + members += list(self.additions_index_to_member.values()) + + return format_or(sorted([member.name for member in members])) + + def encode(self, data, encoder): + if self.additions_index_to_member is not None: + if data[0] in self.root_name_to_index: + encoder.append_bit(0) + self.encode_root(data, encoder) + else: + encoder.append_bit(1) + self.encode_additions(data, encoder) + else: + self.encode_root(data, encoder) + + def encode_root(self, data, encoder): + try: + index = self.root_name_to_index[data[0]] + except KeyError: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + + if len(self.root_index_to_member) > 1: + self.encode_root_index(index, encoder) + + member = self.root_index_to_member[index] + try: + member.encode(data[1], encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def encode_root_index(self, index, encoder): + if self.number_of_indefinite_bits is None: + number_of_bits = self.root_number_of_bits + else: + number_of_bytes = size_as_number_of_bytes(index) + number_of_bits = 8 * number_of_bytes + encoder.append_constrained_whole_number( + number_of_bytes - 1, + 0, + 2 ** self.number_of_indefinite_bits, + self.number_of_indefinite_bits) + encoder.align() + + encoder.append_constrained_whole_number(index, + 0, + self.maximum, + number_of_bits) + + def encode_additions(self, data, encoder): + try: + index = self.additions_name_to_index[data[0]] + except KeyError: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + + addition_encoder = encoder.__class__() + addition = self.additions_index_to_member[index] + try: + addition.encode(data[1], addition_encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(addition) + raise e + + # Embed encoded extension addition in an open type (add a + # length field and multiple of 8 bits). + addition_encoder.align_always() + encoder.append_normally_small_non_negative_whole_number(index) + encoder.align() + encoder.append_length_determinant(addition_encoder.number_of_bytes()) + encoder += addition_encoder + + def decode(self, decoder): + if self.additions_index_to_member is not None: + if decoder.read_bit(): + return self.decode_additions(decoder) + else: + return self.decode_root(decoder) + else: + return self.decode_root(decoder) + + def decode_root(self, decoder): + if len(self.root_index_to_member) > 1: + index = self.decode_root_index(decoder) + else: + index = 0 + + try: + member = self.root_index_to_member[index] + except KeyError: + raise DecodeError( + 'Expected choice index {}, but got {}.'.format( + self.format_root_indexes(), index)) + try: + return (member.name, member.decode(decoder)) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def decode_root_index(self, decoder): + if self.number_of_indefinite_bits is None: + number_of_bits = self.root_number_of_bits + else: + number_of_bytes = decoder.read_constrained_whole_number( + 0, + 2 ** self.number_of_indefinite_bits, + self.number_of_indefinite_bits) + number_of_bytes += 1 + number_of_bits = (8 * number_of_bytes) + decoder.align() + + return decoder.read_constrained_whole_number(0, + self.maximum, + number_of_bits) + + def decode_additions(self, decoder): + index = decoder.read_normally_small_non_negative_whole_number() + + if index in self.additions_index_to_member: + addition = self.additions_index_to_member[index] + else: + addition = None + + # Open type decoding. + decoder.align() + length = 8 * decoder.read_length_determinant() + offset = decoder.number_of_bits + + if addition is None: + name = None + decoded = None + else: + name = addition.name + try: + decoded = addition.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(addition) + raise e + length -= (offset - decoder.number_of_bits) + + decoder.skip_bits(length) + + return (name, decoded) + + def __repr__(self): + return 'Choice({}, [{}])'.format( + self.name, + ', '.join([repr(member) + for member in self.root_name_to_index])) + + +class UTF8String(Type): + + def __init__(self, name): + super(UTF8String, self).__init__(name, 'UTF8String') + + def encode(self, data, encoder): + encoded = data.encode('utf-8') + encoder.align() + + for offset, length in encoder.append_length_determinant_chunks(len(encoded)): + encoder.append_bytes(encoded[offset:offset + length]) + + def decode(self, decoder): + decoder.align() + encoded = [] + + for length in decoder.read_length_determinant_chunks(): + encoded.append(decoder.read_bytes(length)) + + return b''.join(encoded).decode('utf-8') + + +class NumericString(KnownMultiplierStringType): + + ALPHABET = bytearray(NUMERIC_STRING.encode('ascii')) + ENCODE_MAP = {v: i for i, v in enumerate(ALPHABET)} + DECODE_MAP = {i: v for i, v in enumerate(ALPHABET)} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, + DECODE_MAP) + + +class PrintableString(KnownMultiplierStringType): + + ALPHABET = bytearray(PRINTABLE_STRING.encode('ascii')) + ENCODE_MAP = {v: v for v in ALPHABET} + DECODE_MAP = {v: v for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, + DECODE_MAP) + + +class IA5String(KnownMultiplierStringType): + + ALPHABET = bytearray(IA5_STRING.encode('ascii')) + ENCODE_DECODE_MAP = {v: v for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, + ENCODE_DECODE_MAP) + + +class BMPString(KnownMultiplierStringType): + + ENCODING = 'utf-16-be' + ALPHABET = BMP_STRING + ENCODE_DECODE_MAP = {ord(v): ord(v) for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, + ENCODE_DECODE_MAP) + + +class VisibleString(KnownMultiplierStringType): + + ALPHABET = bytearray(VISIBLE_STRING.encode('ascii')) + ENCODE_DECODE_MAP = {v: v for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, + ENCODE_DECODE_MAP) + + +class GeneralString(StringType): + + ENCODING = 'latin-1' + + +class GraphicString(StringType): + + ENCODING = 'latin-1' + + +class TeletexString(StringType): + + ENCODING = 'iso-8859-1' + + +class UniversalString(StringType): + + ENCODING = 'utf-32-be' + LENGTH_MULTIPLIER = 4 + + +class ObjectDescriptor(GraphicString): + pass + + +class UTCTime(VisibleString): + + def encode(self, data, encoder): + encoded = restricted_utc_time_from_datetime(data) + + return super(UTCTime, self).encode(encoded, encoder) + + def decode(self, decoder): + decoded = super(UTCTime, self).decode(decoder) + + return restricted_utc_time_to_datetime(decoded) + + +class GeneralizedTime(VisibleString): + + def encode(self, data, encoder): + enceded = restricted_generalized_time_from_datetime(data) + + return super(GeneralizedTime, self).encode(enceded, encoder) + + def decode(self, decoder): + decoded = super(GeneralizedTime, self).decode(decoder) + + return restricted_generalized_time_to_datetime(decoded) + + +class Date(Type): + + def __init__(self, name): + super(Date, self).__init__(name, 'DATE') + immediate = Integer('immediate') + near_future = Integer('near_future') + near_past = Integer('near_past') + reminder = Integer('reminder') + immediate.set_restricted_to_range(2005, 2020, False) + near_future.set_restricted_to_range(2021, 2276, False) + near_past.set_restricted_to_range(1749, 2004, False) + reminder.set_restricted_to_range('MIN', 1748, False) + year = Choice('year', + [immediate, near_future, near_past, reminder], + None) + month = Integer('month') + day = Integer('day') + month.set_restricted_to_range(1, 12, False) + day.set_restricted_to_range(1, 31, False) + self._inner = Sequence('DATE-ENCODING', + [year, month, day], + None) + + def encode(self, data, encoder): + if 2005 <= data.year <= 2020: + choice = 'immediate' + elif 2021 <= data.year <= 2276: + choice = 'near_future' + elif 1749 <= data.year <= 2004: + choice = 'near_past' + else: + choice = 'reminder' + + data = { + 'year': (choice, data.year), + 'month': data.month, + 'day': data.day + } + + return self._inner.encode(data, encoder) + + def decode(self, decoder): + decoded = self._inner.decode(decoder) + + return datetime.date(decoded['year'][1], + decoded['month'], + decoded['day']) + + +class TimeOfDay(Type): + + def __init__(self, name): + super(TimeOfDay, self).__init__(name, 'TIME-OF-DAY') + hours = Integer('hours') + minutes = Integer('minutes') + seconds = Integer('seconds') + hours.set_restricted_to_range(0, 24, False) + minutes.set_restricted_to_range(0, 59, False) + seconds.set_restricted_to_range(0, 60, False) + self._inner = Sequence('TIME-OF-DAY-ENCODING', + [hours, minutes, seconds], + None) + + def encode(self, data, encoder): + data = { + 'hours': data.hour, + 'minutes': data.minute, + 'seconds': data.second + } + + return self._inner.encode(data, encoder) + + def decode(self, decoder): + decoded = self._inner.decode(decoder) + + return datetime.time(decoded['hours'], + decoded['minutes'], + decoded['seconds']) + + +class DateTime(Type): + + def __init__(self, name): + super(DateTime, self).__init__(name, 'DATE-TIME') + self._inner = Sequence('DATE-TIME-ENCODING', + [Date('date'), TimeOfDay('time')], + None) + + def encode(self, data, encoder): + data = { + 'date': data, + 'time': data + } + + return self._inner.encode(data, encoder) + + def decode(self, decoder): + decoded = self._inner.decode(decoder) + + return datetime.datetime(decoded['date'].year, + decoded['date'].month, + decoded['date'].day, + decoded['time'].hour, + decoded['time'].minute, + decoded['time'].second) + + +class OpenType(Type): + + def __init__(self, name): + super(OpenType, self).__init__(name, 'OpenType') + + def encode(self, data, encoder): + encoder.align() + encoder.append_length_determinant(len(data)) + encoder.append_bytes(data) + + def decode(self, decoder): + decoder.align() + length = decoder.read_length_determinant() + + return decoder.read_bytes(length) + + +class Any(Type): + + def __init__(self, name): + super(Any, self).__init__(name, 'ANY') + + def encode(self, _, _encoder): + raise NotImplementedError('ANY is not yet implemented.') + + def decode(self, _decoder): + raise NotImplementedError('ANY is not yet implemented.') + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name, 'RECURSIVE') + self.type_name = type_name + self.module_name = module_name + self._inner = None + + def set_inner_type(self, inner): + self._inner = inner + + def encode(self, data, encoder): + self._inner.encode(data, encoder) + + def decode(self, decoder): + return self._inner.decode(decoder) + + +class AdditionGroup(Sequence): + pass + + +class CompiledType(compiler.CompiledType): + + def encode(self, data): + encoder = Encoder() + try: + self._type.encode(data, encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + return encoder.as_bytearray() + + def decode(self, data): + decoder = Decoder(bytearray(data)) + try: + return self._type.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = self.get_module_name(type_descriptor, module_name) + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + compiled = Sequence( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'SEQUENCE OF': + compiled = SequenceOf(name, + self.compile_type('', + type_descriptor['element'], + module_name), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'SET': + compiled = Set( + name, + *self.compile_members(type_descriptor['members'], + module_name, + sort_by_tag=True)) + elif type_name == 'SET OF': + compiled = SetOf(name, + self.compile_type('', + type_descriptor['element'], + module_name), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'CHOICE': + compiled = Choice(name, + *self.compile_members( + type_descriptor['members'], + module_name, + flat_additions=True)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = NumericString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'PrintableString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = PrintableString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'IA5String': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = IA5String(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'BMPString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = BMPString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'VisibleString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = VisibleString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'BIT STRING': + compiled = BitString(name, + self.get_named_bits(type_descriptor, + module_name), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + compiled = Any(name) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'OpenType': + compiled = OpenType(name) + elif type_name == 'EXTERNAL': + compiled = Sequence( + name, + *self.compile_members(self.external_type_descriptor()['members'], + module_name)) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + if 'tag' in type_descriptor: + compiled = self.set_compiled_tag(compiled, type_descriptor) + + if 'restricted-to' in type_descriptor: + compiled = self.set_compiled_restricted_to(compiled, + type_descriptor, + module_name) + + return compiled + + def set_compiled_tag(self, compiled, type_descriptor): + compiled = self.copy(compiled) + tag = type_descriptor['tag'] + class_prio = CLASS_PRIO[tag.get('class', 'CONTEXT_SPECIFIC')] + class_number = tag['number'] + compiled.tag = (class_prio, class_number) + + return compiled + + def compile_members(self, + members, + module_name, + sort_by_tag=False, + flat_additions=False): + compiled_members = [] + in_extension = False + additions = None + + for member in members: + if member == EXTENSION_MARKER: + in_extension = not in_extension + + if in_extension: + additions = [] + elif in_extension: + self.compile_extension_member(member, + module_name, + additions, + flat_additions) + else: + self.compile_root_member(member, + module_name, + compiled_members) + + if sort_by_tag: + compiled_members = sorted(compiled_members, key=attrgetter('tag')) + + return compiled_members, additions + + def compile_extension_member(self, + member, + module_name, + additions, + flat_additions): + if isinstance(member, list): + if flat_additions: + for memb in member: + compiled_member = self.compile_member(memb, + module_name) + additions.append(compiled_member) + else: + compiled_member, _ = self.compile_members(member, + module_name) + compiled_group = AdditionGroup('ExtensionAddition', + compiled_member, + None) + additions.append(compiled_group) + else: + compiled_member = self.compile_member(member, + module_name) + additions.append(compiled_member) + + def get_permitted_alphabet(self, type_descriptor): + def char_range(begin, end): + return ''.join([chr(char) + for char in range(ord(begin), ord(end) + 1)]) + + if 'from' not in type_descriptor: + return + + permitted_alphabet = type_descriptor['from'] + value = '' + + for item in permitted_alphabet: + if isinstance(item, tuple): + value += char_range(item[0], item[1]) + else: + value += item + + value = sorted(value) + encode_map = {ord(v): i for i, v in enumerate(value)} + decode_map = {i: ord(v) for i, v in enumerate(value)} + + return PermittedAlphabet(encode_map, decode_map) + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() + + +def decode_full_length(_data): + raise DecodeError('Decode length is not supported for this codec.') diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/permitted_alphabet.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/permitted_alphabet.py new file mode 100644 index 0000000..4a14f82 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/permitted_alphabet.py @@ -0,0 +1,26 @@ +"""Permitted alphabet. + +""" + +import string + +try: + unichr +except NameError: + unichr = chr + + +NUMERIC_STRING = ' 0123456789' + +PRINTABLE_STRING = (string.ascii_uppercase + + string.ascii_lowercase + + string.digits + + " '()+,-./:=?") + +IA5_STRING = ''.join([chr(v) for v in range(128)]) + +# ud800 - udfff are reserved code points for utf-16 surrogates. +# at this point, do not support code points in supplementary planes. +BMP_STRING = ''.join([unichr(v) for v in range(65536) if v < 0xd800 or v > 0xdfff]) + +VISIBLE_STRING = ''.join([chr(v) for v in range(32, 127)]) diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/type_checker.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/type_checker.py new file mode 100644 index 0000000..cfadb05 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/type_checker.py @@ -0,0 +1,384 @@ +"""Python type checker. + +""" + +import sys +import datetime +from copy import copy + +from . import EncodeError, ErrorWithLocation +from . import compiler +from . import format_or + + +STRING_TYPES = [ + 'OBJECT IDENTIFIER', + 'TeletexString', + 'NumericString', + 'PrintableString', + 'IA5String', + 'VisibleString', + 'GeneralString', + 'UTF8String', + 'BMPString', + 'GraphicString', + 'UniversalString', + 'ObjectDescriptor' +] + + +class Type(object): + + TYPE = None + + def __init__(self, name): + self.name = name + + def set_size_range(self, minimum, maximum, has_extension_marker): + pass + + def set_default(self, value): + pass + + def encode(self, data): + if not isinstance(data, self.TYPE): + raise EncodeError( + 'Expected data of type {}, but got {}.'.format(self.TYPE.__name__, + data)) + + +class Boolean(Type): + + TYPE = bool + + +class Integer(Type): + + def encode(self, data): + if sys.version_info[0] > 2: + if not isinstance(data, (int, str)): + raise EncodeError( + 'Expected data of type int or str, but got {}.'.format( + data)) + else: + if not isinstance(data, (int, long, str, unicode)): + raise EncodeError( + 'Expected data of type int or str, but got {}.'.format( + data)) + + +class Float(Type): + + def encode(self, data): + if sys.version_info[0] > 2: + if not isinstance(data, (float, int)): + raise EncodeError( + 'Expected data of type float or int, but got {}.'.format( + data)) + else: + if not isinstance(data, (float, int, long)): + raise EncodeError( + 'Expected data of type float or int, but got {}.'.format( + data)) + + +class Null(Type): + + def encode(self, data): + if data is not None: + raise EncodeError('Expected None, but got {}.'.format(data)) + + +class BitString(Type): + + def encode(self, data): + if (not isinstance(data, tuple) + or len(data) != 2 + or not isinstance(data[0], (bytes, bytearray)) + or not isinstance(data[1], int)): + raise EncodeError( + 'Expected data of type tuple(bytes, int), but got {}.'.format( + data)) + + if 8 * len(data[0]) < data[1]: + raise EncodeError( + 'Expected at least {} bit(s) data, but got {}.'.format( + data[1], + 8 * len(data[0]))) + + +class Bytes(Type): + + def encode(self, data): + if not isinstance(data, (bytes, bytearray)): + raise EncodeError( + 'Expected data of type bytes or bytearray, but got {}.'.format( + data)) + + +class String(Type): + + def encode(self, data): + if sys.version_info[0] > 2: + if not isinstance(data, str): + raise EncodeError( + 'Expected data of type str, but got {}.'.format(data)) + else: + if not isinstance(data, (str, unicode)): + raise EncodeError( + 'Expected data of type str, but got {}.'.format(data)) + + +class Dict(Type): + + TYPE = dict + + def __init__(self, name, members): + super(Dict, self).__init__(name) + self.members = members + + def encode(self, data): + super(Dict, self).encode(data) + self.encode_members(data) + + def encode_members(self, data): + for member in self.members: + name = member.name + + if name in data: + try: + member.encode(data[name]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + +class List(Type): + + TYPE = list + + def __init__(self, name, element_type): + super(List, self).__init__(name) + self.element_type = element_type + + def encode(self, data): + super(List, self).encode(data) + self.encode_members(data) + + def encode_members(self, data): + for entry in data: + self.element_type.encode(entry) + + +class Enumerated(Type): + + def __init__(self, name, numeric_enums): + super(Enumerated, self).__init__(name) + self._numeric_enums = numeric_enums + + def encode(self, data): + if self._numeric_enums: + self.encode_integer(data) + else: + self.encode_string(data) + + def encode_integer(self, data): + if sys.version_info[0] > 2: + if not isinstance(data, int): + raise EncodeError( + 'Expected data of type int, but got {}.'.format( + data)) + else: + if not isinstance(data, (int, long)): + raise EncodeError( + 'Expected data of type int, but got {}.'.format( + data)) + + def encode_string(self, data): + if sys.version_info[0] > 2: + if not isinstance(data, str): + raise EncodeError( + 'Expected data of type str, but got {}.'.format(data)) + else: + if not isinstance(data, (str, unicode)): + raise EncodeError( + 'Expected data of type str, but got {}.'.format(data)) + + +class Choice(Type): + + def __init__(self, name, members): + super(Choice, self).__init__(name) + self.members = members + self.name_to_member = {member.name: member for member in self.members} + + def format_names(self): + return format_or(sorted([member.name for member in self.members])) + + def encode(self, data): + if sys.version_info[0] > 2: + if (not isinstance(data, tuple) + or len(data) != 2 + or not isinstance(data[0], str)): + raise EncodeError( + 'Expected data of type tuple(str, object), but got {}.'.format( + data)) + else: + if (not isinstance(data, tuple) + or len(data) != 2 + or not isinstance(data[0], (str, unicode))): + raise EncodeError( + 'Expected data of type tuple(str, object), but got {}.'.format( + data)) + + try: + member = self.name_to_member[data[0]] + except KeyError: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + try: + member.encode(data[1]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + +class Date(Type): + + def encode(self, data): + if not isinstance(data, datetime.date): + raise EncodeError( + 'Expected data of type datetime.date, but got {}.'.format( + data)) + + +class TimeOfDay(Type): + + def encode(self, data): + if not isinstance(data, datetime.time): + raise EncodeError( + 'Expected data of type datetime.time, but got {}.'.format( + data)) + + +class DateTime(Type): + + def encode(self, data): + if not isinstance(data, datetime.datetime): + raise EncodeError( + 'Expected data of type datetime.datetime, but got {}.'.format( + data)) + + +class Skip(Type): + + def encode(self, data): + pass + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name) + self.type_name = type_name + self.module_name = module_name + self.inner = None + + def set_inner_type(self, inner): + self.inner = copy(inner) + + def encode(self, data): + try: + self.inner.encode(data) + except ErrorWithLocation as e: + # Add member location + e.add_location(self.inner) + raise e + + +class CompiledType(compiler.CompiledType): + + def encode(self, data): + try: + self._type.encode(data) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = type_descriptor.get('module-name', module_name) + type_name = type_descriptor['type'] + + if type_name in ['SEQUENCE', 'SET']: + members, _ = self.compile_members(type_descriptor['members'], + module_name) + compiled = Dict(name, members) + elif type_name in ['SEQUENCE OF', 'SET OF']: + element_type = self.compile_type('', + type_descriptor['element'], + module_name) + compiled = List(name, element_type) + elif type_name == 'CHOICE': + members, _ = self.compile_members(type_descriptor['members'], + module_name) + compiled = Choice(name, members) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Float(name) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OCTET STRING': + compiled = Bytes(name) + elif type_name in ['UTCTime', 'GeneralizedTime', 'DATE-TIME']: + compiled = DateTime(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'BIT STRING': + compiled = BitString(name) + elif type_name in STRING_TYPES: + compiled = String(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, self._numeric_enums) + elif type_name in ['ANY', 'ANY DEFINED BY', 'OpenType']: + compiled = Skip(name) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + members, _ = self.compile_members( + self.external_type_descriptor()['members'], + module_name) + compiled = Dict(name, members) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + return compiled + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/uper.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/uper.py new file mode 100644 index 0000000..6f978bf --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/uper.py @@ -0,0 +1,662 @@ +"""Unaligned Packed Encoding Rules (UPER) codec. + +""" + +from . import DecodeError, ErrorWithLocation +from . import per +from . import restricted_utc_time_to_datetime +from . import restricted_utc_time_from_datetime +from . import restricted_generalized_time_to_datetime +from . import restricted_generalized_time_from_datetime +from .per import to_int +from .per import to_byte_array +from .per import integer_as_number_of_bits +from .per import PermittedAlphabet +from .per import Type +from .per import Boolean +from .per import Real +from .per import Null +from .per import Enumerated +from .per import ObjectIdentifier +from .per import Sequence +from .per import Set +from .per import UTF8String +from .per import GeneralString +from .per import GraphicString +from .per import TeletexString +from .per import UniversalString +from .per import ObjectDescriptor +from .per import Any +from .per import Recursive +from .permitted_alphabet import NUMERIC_STRING +from .permitted_alphabet import PRINTABLE_STRING +from .permitted_alphabet import IA5_STRING +from .permitted_alphabet import BMP_STRING +from .permitted_alphabet import VISIBLE_STRING + + +class Encoder(per.Encoder): + + def align(self): + pass + + +class Decoder(per.Decoder): + + def align(self): + pass + + +class KnownMultiplierStringType(per.KnownMultiplierStringType): + + ENCODING = 'ascii' + PERMITTED_ALPHABET = '' + + def __init__(self, + name, + minimum=None, + maximum=None, + has_extension_marker=None, + permitted_alphabet=None): + super(KnownMultiplierStringType, self).__init__(name, + self.__class__.__name__) + self.set_size_range(minimum, maximum, has_extension_marker) + + if permitted_alphabet is None: + permitted_alphabet = self.PERMITTED_ALPHABET + + self.permitted_alphabet = permitted_alphabet + self.bits_per_character = integer_as_number_of_bits( + len(permitted_alphabet) - 1) + + def encode(self, data, encoder): + if self.has_extension_marker: + encoder.append_bit(0) + + if self.number_of_bits is None: + return self.encode_unbound(data, encoder) + elif self.minimum != self.maximum: + encoder.append_non_negative_binary_integer(len(data) - self.minimum, + self.number_of_bits) + + for value in data: + encoder.append_non_negative_binary_integer( + self.permitted_alphabet.encode( + to_int(value.encode(self.ENCODING))), + self.bits_per_character) + + def decode(self, decoder): + if self.has_extension_marker: + bit = decoder.read_bit() + + if bit: + raise NotImplementedError( + 'String size extension is not yet implemented.') + + if self.number_of_bits is None: + return self.decode_unbound(decoder) + else: + length = self.minimum + + if self.minimum != self.maximum: + length += decoder.read_non_negative_binary_integer(self.number_of_bits) + + data = bytearray() + + for _ in range(length): + value = decoder.read_non_negative_binary_integer(self.bits_per_character) + value = self.permitted_alphabet.decode(value) + data += to_byte_array(value, self.bits_per_character) + + return data.decode(self.ENCODING) + + +class ArrayType(per.ArrayType): + + def encode(self, data, encoder): + if self.has_extension_marker: + if self.minimum <= len(data) <= self.maximum: + encoder.append_bit(0) + else: + encoder.append_bit(1) + encoder.append_length_determinant(len(data)) + + for entry in data: + self.element_type.encode(entry, encoder) + + return + + if self.number_of_bits is None: + return self.encode_unbound(data, encoder) + elif self.minimum != self.maximum: + encoder.append_non_negative_binary_integer(len(data) - self.minimum, + self.number_of_bits) + + for entry in data: + self.element_type.encode(entry, encoder) + + def decode(self, decoder): + length = None + + if self.has_extension_marker: + bit = decoder.read_bit() + + if bit: + length = decoder.read_length_determinant() + + if length is not None: + pass + elif self.number_of_bits is None: + return self.decode_unbound(decoder) + else: + length = self.minimum + + if self.minimum != self.maximum: + length += decoder.read_non_negative_binary_integer( + self.number_of_bits) + + decoded = [] + + for _ in range(length): + decoded_element = self.element_type.decode(decoder) + decoded.append(decoded_element) + + return decoded + + +class Integer(Type): + + def __init__(self, name): + super(Integer, self).__init__(name, 'INTEGER') + self.minimum = None + self.maximum = None + self.has_extension_marker = None + self.number_of_bits = None + + def set_restricted_to_range(self, minimum, maximum, has_extension_marker): + self.has_extension_marker = has_extension_marker + + if minimum == 'MIN' or maximum == 'MAX': + return + + self.minimum = minimum + self.maximum = maximum + size = self.maximum - self.minimum + self.number_of_bits = integer_as_number_of_bits(size) + + def encode(self, data, encoder): + if self.has_extension_marker: + if self.minimum <= data <= self.maximum: + encoder.append_bit(0) + else: + encoder.append_bit(1) + encoder.append_unconstrained_whole_number(data) + return + + if self.number_of_bits is None: + encoder.append_unconstrained_whole_number(data) + else: + encoder.append_non_negative_binary_integer(data - self.minimum, + self.number_of_bits) + + def decode(self, decoder): + if self.has_extension_marker: + if decoder.read_bit(): + return decoder.read_unconstrained_whole_number() + + if self.number_of_bits is None: + return decoder.read_unconstrained_whole_number() + else: + value = decoder.read_non_negative_binary_integer(self.number_of_bits) + + return value + self.minimum + + def __repr__(self): + return 'Integer({})'.format(self.name) + + +class BitString(per.BitString): + + def encode(self, data, encoder): + data, number_of_bits = data + + if self.has_extension_marker: + if self.minimum <= number_of_bits <= self.maximum: + encoder.append_bit(0) + else: + raise NotImplementedError( + 'BIT STRING extension is not yet implemented.') + + if self.has_named_bits: + data, number_of_bits = self.rstrip_zeros(data, number_of_bits) + + if self.number_of_bits is None: + return self.encode_unbound(data, number_of_bits, encoder) + elif self.minimum != self.maximum: + encoder.append_non_negative_binary_integer( + number_of_bits - self.minimum, + self.number_of_bits) + + encoder.append_bits(data, number_of_bits) + + def decode(self, decoder): + if self.has_extension_marker: + if decoder.read_bit(): + raise NotImplementedError( + 'BIT STRING extension is not yet implemented.') + + if self.number_of_bits is None: + return self.decode_unbound(decoder) + else: + number_of_bits = self.minimum + + if self.minimum != self.maximum: + number_of_bits += decoder.read_non_negative_binary_integer( + self.number_of_bits) + + value = decoder.read_bits(number_of_bits) + + return (value, number_of_bits) + + +class OctetString(per.OctetString): + + def encode(self, data, encoder): + if self.has_extension_marker: + if self.minimum <= len(data) <= self.maximum: + encoder.append_bit(0) + else: + encoder.append_bit(1) + encoder.align() + encoder.append_length_determinant(len(data)) + encoder.append_bytes(data) + + return + + if self.number_of_bits is None: + return self.encode_unbound(data, encoder) + elif self.minimum != self.maximum: + encoder.append_non_negative_binary_integer(len(data) - self.minimum, + self.number_of_bits) + + encoder.append_bytes(data) + + def decode(self, decoder): + if self.has_extension_marker: + bit = decoder.read_bit() + + if bit: + length = decoder.read_length_determinant() + + return decoder.read_bytes(length) + + if self.number_of_bits is None: + return self.decode_unbound(decoder) + else: + length = self.minimum + + if self.minimum != self.maximum: + length += decoder.read_non_negative_binary_integer( + self.number_of_bits) + + return decoder.read_bytes(length) + + +class SequenceOf(ArrayType): + + def __init__(self, + name, + element_type, + minimum, + maximum, + has_extension_marker): + super(SequenceOf, self).__init__(name, + element_type, + minimum, + maximum, + has_extension_marker, + 'SEQUENCE OF') + + +class SetOf(ArrayType): + + def __init__(self, + name, + element_type, + minimum, + maximum, + has_extension_marker): + super(SetOf, self).__init__(name, + element_type, + minimum, + maximum, + has_extension_marker, + 'SET OF') + + +class Choice(per.Choice): + + def encode_root_index(self, index, encoder): + encoder.append_non_negative_binary_integer(index, self.root_number_of_bits) + + def decode_root_index(self, decoder): + return decoder.read_non_negative_binary_integer(self.root_number_of_bits) + + +class NumericString(KnownMultiplierStringType): + + ALPHABET = bytearray(NUMERIC_STRING.encode('ascii')) + ENCODE_MAP = {v: i for i, v in enumerate(ALPHABET)} + DECODE_MAP = {i: v for i, v in enumerate(ALPHABET)} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, + DECODE_MAP) + + +class PrintableString(KnownMultiplierStringType): + + ALPHABET = bytearray(PRINTABLE_STRING.encode('ascii')) + ENCODE_MAP = {v: v for v in ALPHABET} + DECODE_MAP = {v: v for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, + DECODE_MAP) + + +class IA5String(KnownMultiplierStringType): + + ALPHABET = bytearray(IA5_STRING.encode('ascii')) + ENCODE_DECODE_MAP = {v: v for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, + ENCODE_DECODE_MAP) + + +class BMPString(KnownMultiplierStringType): + + ENCODING = 'utf-16-be' + ALPHABET = BMP_STRING + ENCODE_DECODE_MAP = {ord(v): ord(v) for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, + ENCODE_DECODE_MAP) + + +class VisibleString(KnownMultiplierStringType): + + ALPHABET = bytearray(VISIBLE_STRING.encode('ascii')) + ENCODE_DECODE_MAP = {v: v for v in ALPHABET} + PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, + ENCODE_DECODE_MAP) + + +class UTCTime(VisibleString): + + def encode(self, data, encoder): + encoded = restricted_utc_time_from_datetime(data) + + return super(UTCTime, self).encode(encoded, encoder) + + def decode(self, decoder): + decoded = super(UTCTime, self).decode(decoder) + + return restricted_utc_time_to_datetime(decoded) + + +class GeneralizedTime(VisibleString): + + def encode(self, data, encoder): + enceded = restricted_generalized_time_from_datetime(data) + + return super(GeneralizedTime, self).encode(enceded, encoder) + + def decode(self, decoder): + decoded = super(GeneralizedTime, self).decode(decoder) + + return restricted_generalized_time_to_datetime(decoded) + + +class Date(per.Date): + + def __init__(self, name): + super(Date, self).__init__(name) + immediate = Integer('immediate') + near_future = Integer('near_future') + near_past = Integer('near_past') + reminder = Integer('reminder') + immediate.set_restricted_to_range(2005, 2020, False) + near_future.set_restricted_to_range(2021, 2276, False) + near_past.set_restricted_to_range(1749, 2004, False) + reminder.set_restricted_to_range('MIN', 1748, False) + year = Choice('year', + [immediate, near_future, near_past, reminder], + None) + month = Integer('month') + day = Integer('day') + month.set_restricted_to_range(1, 12, False) + day.set_restricted_to_range(1, 31, False) + self._inner = Sequence('DATE-ENCODING', + [year, month, day], + None) + + +class TimeOfDay(per.TimeOfDay): + + def __init__(self, name): + super(TimeOfDay, self).__init__(name) + hours = Integer('hours') + minutes = Integer('minutes') + seconds = Integer('seconds') + hours.set_restricted_to_range(0, 24, False) + minutes.set_restricted_to_range(0, 59, False) + seconds.set_restricted_to_range(0, 60, False) + self._inner = Sequence('TIME-OF-DAY-ENCODING', + [hours, minutes, seconds], + None) + + +class DateTime(per.DateTime): + + def __init__(self, name): + super(DateTime, self).__init__(name) + self._inner = Sequence('DATE-TIME-ENCODING', + [Date('date'), TimeOfDay('time')], + None) + + +class OpenType(Type): + + def __init__(self, name): + super(OpenType, self).__init__(name, 'OpenType') + + def encode(self, data, encoder): + encoder.align() + encoder.append_length_determinant(len(data)) + encoder.append_bytes(data) + + def decode(self, decoder): + decoder.align() + length = decoder.read_length_determinant() + + return decoder.read_bytes(length) + + +class CompiledType(per.CompiledType): + + def encode(self, data): + encoder = Encoder() + try: + self._type.encode(data, encoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + return encoder.as_bytearray() + + def decode(self, data): + decoder = Decoder(bytearray(data)) + try: + return self._type.decode(decoder) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + +class Compiler(per.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = self.get_module_name(type_descriptor, module_name) + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + compiled = Sequence( + name, + *self.compile_members(type_descriptor['members'], + module_name)) + elif type_name == 'SEQUENCE OF': + compiled = SequenceOf(name, + self.compile_type('', + type_descriptor['element'], + module_name), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'SET': + compiled = Set( + name, + *self.compile_members(type_descriptor['members'], + module_name, + sort_by_tag=True)) + elif type_name == 'SET OF': + compiled = SetOf(name, + self.compile_type('', + type_descriptor['element'], + module_name), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'CHOICE': + compiled = Choice(name, + *self.compile_members( + type_descriptor['members'], + module_name, + flat_additions=True)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name, + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = NumericString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'PrintableString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = PrintableString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'IA5String': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = IA5String(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'BMPString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = BMPString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'VisibleString': + permitted_alphabet = self.get_permitted_alphabet(type_descriptor) + compiled = VisibleString(name, + *self.get_size_range(type_descriptor, + module_name), + permitted_alphabet=permitted_alphabet) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'BIT STRING': + compiled = BitString(name, + self.get_named_bits(type_descriptor, + module_name), + *self.get_size_range(type_descriptor, + module_name)) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + compiled = Any(name) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'OpenType': + compiled = OpenType(name) + elif type_name == 'EXTERNAL': + compiled = Sequence( + name, + *self.compile_members(self.external_type_descriptor()['members'], + module_name)) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + if 'tag' in type_descriptor: + compiled = self.set_compiled_tag(compiled, type_descriptor) + + if 'restricted-to' in type_descriptor: + compiled = self.set_compiled_restricted_to(compiled, + type_descriptor, + module_name) + + return compiled + + +def compile_dict(specification, numeric_enums=False): + return Compiler(specification, numeric_enums).process() + + +def decode_full_length(_data): + raise DecodeError('Decode length is not supported for this codec.') diff --git a/.venv/lib/python3.12/site-packages/asn1tools/codecs/xer.py b/.venv/lib/python3.12/site-packages/asn1tools/codecs/xer.py new file mode 100644 index 0000000..a12e3e2 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/codecs/xer.py @@ -0,0 +1,795 @@ +"""XML Encoding Rules (XER) codec. + +""" + +import time +import sys +from xml.etree import ElementTree +import binascii +import datetime + +from ..parser import EXTENSION_MARKER +from . import BaseType, format_bytes, ErrorWithLocation +from . import EncodeError +from . import DecodeError +from . import compiler +from . import format_or +from . import utc_time_to_datetime +from . import utc_time_from_datetime +from . import generalized_time_to_datetime +from . import generalized_time_from_datetime +from .compiler import enum_values_as_dict + + +def indent_xml(element, indent, level=0): + i = "\n" + level * indent + + if len(element): + if not element.text or not element.text.strip(): + element.text = i + indent + + if not element.tail or not element.tail.strip(): + element.tail = i + + for element in element: + indent_xml(element, indent, level + 1) + + if not element.tail or not element.tail.strip(): + element.tail = i + else: + if level and (not element.tail or not element.tail.strip()): + element.tail = i + + +class Type(BaseType): + + def __init__(self, name, type_name): + super().__init__(name.replace(' ', '_'), type_name) + + def set_size_range(self, minimum, maximum, has_extension_marker): + pass + + def encode_of(self, data): + # Used by ArrayType + return self.encode(data) + + def decode_of(self, element): + # Used by ArrayType + return self.decode(element) + + +class StringType(Type): + + def __init__(self, name, type_name=None): + if type_name is None: + type_name = self.__class__.__name__ + + super(StringType, self).__init__(name, type_name) + + def encode(self, data): + element = ElementTree.Element(self.name) + + if len(data) > 0: + element.text = data + + return element + + def decode(self, element): + if element.text is None: + return u'' + else: + if sys.version_info[0] > 2: + return element.text + else: + return unicode(element.text) + + def __repr__(self): + return '{}({})'.format(self.__class__.__name__, + self.name) + + +class MembersType(Type): + + def __init__(self, name, members, type_name): + super(MembersType, self).__init__(name, type_name) + self.members = members + + def encode(self, data): + element = ElementTree.Element(self.name) + + for member in self.members: + name = member.name + + if name in data: + try: + member_element = member.encode(data[name]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + elif member.optional or member.has_default(): + continue + else: + raise EncodeError( + "{} member '{}' not found in {}.".format( + self.__class__.__name__, + name, + data)) + + element.append(member_element) + + return element + + def decode(self, element): + values = {} + + for member in self.members: + name = member.name + member_element = element.find(name) + + if member_element is not None: + try: + value = member.decode(member_element) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + values[name] = value + elif member.optional: + pass + elif member.has_default(): + values[name] = member.get_default() + + return values + + def __repr__(self): + return '{}({}, [{}])'.format( + self.__class__.__name__, + self.name, + ', '.join([repr(member) for member in self.members])) + + +class ArrayType(Type): + + def __init__(self, name, element_type, type_name): + super(ArrayType, self).__init__(name, type_name) + self.element_type = element_type + + def encode(self, data): + element = ElementTree.Element(self.name) + + for entry in data: + element.append(self.element_type.encode_of(entry)) + + return element + + def decode(self, element): + values = [] + + for member_element in list(element): + value = self.element_type.decode_of(member_element) + values.append(value) + + return values + + def __repr__(self): + return '{}({}, {})'.format(self.__class__.__name__, + self.name, + self.element_type) + + +class Boolean(Type): + + def __init__(self, name): + super(Boolean, self).__init__(name, 'BOOLEAN') + + def encode(self, data): + element = ElementTree.Element(self.name) + ElementTree.SubElement(element, 'true' if data else 'false') + + return element + + def decode(self, element): + return element.find('true') is not None + + def encode_of(self, data): + return ElementTree.Element('true' if data else 'false') + + def decode_of(self, element): + return element.tag == 'true' + + +class Integer(Type): + + def __init__(self, name): + super(Integer, self).__init__(name, 'INTEGER') + + def encode(self, data): + element = ElementTree.Element(self.name) + element.text = str(data) + + return element + + def decode(self, element): + return int(element.text) + + +class Real(Type): + + def __init__(self, name): + super(Real, self).__init__(name, 'REAL') + + def encode(self, data): + data = float(data) + exponent = 0 + + while abs(data) >= 10: + data /= 10 + exponent += 1 + + element = ElementTree.Element(self.name) + element.text = '{}E{}'.format(data, exponent) + + return element + + def decode(self, element): + return float(element.text) + + +class Null(Type): + + def __init__(self, name): + super(Null, self).__init__(name, 'NULL') + + def encode(self, data): + return ElementTree.Element(self.name) + + def decode(self, element): + return None + + +class BitString(Type): + + def __init__(self, name): + super(BitString, self).__init__(name, 'BIT STRING') + + def encode(self, data): + element = ElementTree.Element(self.name) + + if data[1] > 0: + encoded = int(binascii.hexlify(data[0]), 16) + encoded |= (0x80 << (8 * len(data[0]))) + element.text = bin(encoded)[10:10 + data[1]].upper() + + return element + + def decode(self, element): + encoded = element.text + + if encoded is None: + number_of_bits = 0 + decoded = b'' + else: + number_of_bits = len(encoded) + decoded = int(encoded, 2) + decoded |= (0x80 << number_of_bits) + rest = (number_of_bits % 8) + + if rest != 0: + decoded <<= (8 - rest) + + decoded = binascii.unhexlify(hex(decoded).rstrip('L')[4:]) + + return (decoded, number_of_bits) + + +class OctetString(Type): + + def __init__(self, name): + super(OctetString, self).__init__(name, 'OCTET STRING') + + def encode(self, data): + element = ElementTree.Element(self.name) + + if len(data) > 0: + element.text = format_bytes(data).upper() + + return element + + def decode(self, element): + if element.text is None: + return b'' + else: + if len(element.text) % 2: + return binascii.unhexlify(element.text.zfill(len(element.text)+1)) + return binascii.unhexlify(element.text) + + +class ObjectIdentifier(StringType): + + def __init__(self, name): + super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') + + def decode(self, element): + if element.text is None: + raise DecodeError("Expected an OBJECT IDENTIFIER, but got ''.") + + return element.text + + +class Enumerated(Type): + + def __init__(self, name, values, numeric): + super(Enumerated, self).__init__(name, 'ENUMERATED') + + if numeric: + self.data_to_value = enum_values_as_dict(values) + self.value_to_data = {v: k for k, v in self.data_to_value.items()} + else: + self.value_to_data = { + k: k for k in enum_values_as_dict(values).values() + } + self.data_to_value = self.value_to_data + + self.has_extension_marker = (EXTENSION_MARKER in values) + + def format_names(self): + return format_or(sorted(list(self.value_to_data.values()))) + + def format_values(self): + return format_or(sorted(list(self.value_to_data))) + + def encode(self, data): + try: + value = self.data_to_value[data] + except KeyError: + raise EncodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_names(), + data)) + + element = ElementTree.Element(self.name) + element.append(ElementTree.Element(value)) + + return element + + def decode(self, element): + value = element[0].tag + + if value in self.value_to_data: + return self.value_to_data[value] + elif self.has_extension_marker: + return None + else: + raise DecodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_values(), value)) + + def encode_of(self, data): + try: + value = self.data_to_value[data] + except KeyError: + raise EncodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_names(), + data)) + + return ElementTree.Element(value) + + def decode_of(self, element): + value = element.tag + + try: + return self.value_to_data[value] + except KeyError: + raise DecodeError( + "Expected enumeration value {}, but got '{}'.".format( + self.format_values(), value)) + + +class Sequence(MembersType): + + def __init__(self, name, members): + super(Sequence, self).__init__(name, members, 'SEQUENCE') + + +class SequenceOf(ArrayType): + + def __init__(self, name, element_type): + super(SequenceOf, self).__init__(name, + element_type, + 'SEQUENCE OF') + + +class Set(MembersType): + + def __init__(self, name, members): + super(Set, self).__init__(name, members, 'SET') + + +class SetOf(ArrayType): + + def __init__(self, name, element_type): + super(SetOf, self).__init__(name, + element_type, + 'SET OF') + + +class Choice(Type): + + def __init__(self, name, members, has_extension_marker): + super(Choice, self).__init__(name, 'CHOICE') + self.members = members + self.name_to_member = {member.name: member for member in self.members} + self.has_extension_marker = has_extension_marker + + def format_names(self): + return format_or(sorted([member.name for member in self.members])) + + def encode(self, data): + try: + member = self.name_to_member[data[0]] + except KeyError: + raise EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + + element = ElementTree.Element(self.name) + + try: + element.append(member.encode(data[1])) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + return element + + def decode(self, element): + member_element = element[0] + name = member_element.tag + + if name in self.name_to_member: + member = self.name_to_member[name] + elif self.has_extension_marker: + return (None, None) + else: + raise DecodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), name)) + try: + return (name, member.decode(member_element)) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def encode_of(self, data): + try: + member = self.name_to_member[data[0]] + except KeyError: + e = EncodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), + data[0])) + # e.add_location(self.name) + raise e + try: + return member.encode(data[1]) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def decode_of(self, element): + name = element.tag + + try: + member = self.name_to_member[name] + except KeyError: + raise DecodeError( + "Expected choice {}, but got '{}'.".format( + self.format_names(), name)) + try: + return (name, member.decode(element)) + except ErrorWithLocation as e: + # Add member location + e.add_location(member) + raise e + + def __repr__(self): + return 'Choice({}, [{}])'.format( + self.name, + ', '.join([repr(member) for member in self.members])) + + +class UTF8String(StringType): + pass + + +class NumericString(StringType): + pass + + +class PrintableString(StringType): + pass + + +class IA5String(StringType): + pass + + +class VisibleString(StringType): + pass + + +class GeneralString(StringType): + pass + + +class BMPString(StringType): + pass + + +class GraphicString(StringType): + pass + + +class UniversalString(StringType): + pass + + +class TeletexString(StringType): + pass + + +class ObjectDescriptor(GraphicString): + pass + + +class UTCTime(Type): + + def __init__(self, name): + super(UTCTime, self).__init__(name, 'UTCTime') + + def encode(self, data): + element = ElementTree.Element(self.name) + element.text = utc_time_from_datetime(data) + + return element + + def decode(self, element): + return utc_time_to_datetime(element.text) + + +class GeneralizedTime(Type): + + def __init__(self, name): + super(GeneralizedTime, self).__init__(name, 'GeneralizedTime') + + def encode(self, data): + element = ElementTree.Element(self.name) + element.text = generalized_time_from_datetime(data) + + return element + + def decode(self, element): + return generalized_time_to_datetime(element.text) + + +class Date(StringType): + + def encode(self, data): + element = ElementTree.Element(self.name) + element.text = str(data) + + return element + + def decode(self, element): + return datetime.date(*time.strptime(element.text, '%Y-%m-%d')[:3]) + + +class TimeOfDay(StringType): + + def encode(self, data): + element = ElementTree.Element(self.name) + element.text = str(data) + + return element + + def decode(self, element): + return datetime.time(*time.strptime(element.text, '%H:%M:%S')[3:6]) + + +class DateTime(StringType): + + def encode(self, data): + element = ElementTree.Element(self.name) + element.text = str(data).replace(' ', 'T') + + return element + + def decode(self, element): + return datetime.datetime(*time.strptime(element.text, + '%Y-%m-%dT%H:%M:%S')[:6]) + + +class Any(Type): + + def __init__(self, name): + super(Any, self).__init__(name, 'ANY') + + def encode(self, data): + raise NotImplementedError('ANY is not yet implemented.') + + def decode(self, element): + raise NotImplementedError('ANY is not yet implemented.') + + +class Recursive(compiler.Recursive, Type): + + def __init__(self, name, type_name, module_name): + super(Recursive, self).__init__(name, 'RECURSIVE') + self.type_name = type_name + self.module_name = module_name + self._inner = None + + def set_inner_type(self, inner): + self._inner = inner + + def encode(self, data): + encoded = self._inner.encode(data) + encoded.tag = self.name + + return encoded + + def decode(self, element): + return self._inner.decode(element) + + +class CompiledType(compiler.CompiledType): + + def encode(self, data, indent=None): + try: + element = self._type.encode(data) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + if indent is not None: + indent_xml(element, indent * " ") + + return ElementTree.tostring(element) + + def decode(self, data): + element = ElementTree.fromstring(data.decode('utf-8')) + try: + return self._type.decode(element) + except ErrorWithLocation as e: + # Add member location + e.add_location(self._type) + raise e + + +class Compiler(compiler.Compiler): + + def process_type(self, type_name, type_descriptor, module_name): + compiled_type = self.compile_type(type_name, + type_descriptor, + module_name) + + return CompiledType(compiled_type) + + def compile_type(self, name, type_descriptor, module_name): + module_name = self.get_module_name(type_descriptor, module_name) + type_name = type_descriptor['type'] + + if type_name == 'SEQUENCE': + members, _ = self.compile_members( + type_descriptor['members'], + module_name) + compiled = Sequence(name, members) + elif type_name == 'SEQUENCE OF': + element = type_descriptor['element'] + compiled = SequenceOf(name, + self.compile_type(type_descriptor.get('element_name') or element['type'], + element, + module_name)) + elif type_name == 'SET': + members, _ = self.compile_members( + type_descriptor['members'], + module_name) + compiled = Set(name, members) + elif type_name == 'SET OF': + element = type_descriptor['element'] + compiled = SetOf(name, + self.compile_type(type_descriptor.get('element_name') or element['type'], + element, + module_name)) + elif type_name == 'CHOICE': + compiled = Choice(name, + *self.compile_members( + type_descriptor['members'], + module_name)) + elif type_name == 'INTEGER': + compiled = Integer(name) + elif type_name == 'REAL': + compiled = Real(name) + elif type_name == 'ENUMERATED': + compiled = Enumerated(name, + self.get_enum_values(type_descriptor, + module_name), + self._numeric_enums) + elif type_name == 'BOOLEAN': + compiled = Boolean(name) + elif type_name == 'OBJECT IDENTIFIER': + compiled = ObjectIdentifier(name) + elif type_name == 'OCTET STRING': + compiled = OctetString(name) + elif type_name == 'TeletexString': + compiled = TeletexString(name) + elif type_name == 'NumericString': + compiled = NumericString(name) + elif type_name == 'PrintableString': + compiled = PrintableString(name) + elif type_name == 'IA5String': + compiled = IA5String(name) + elif type_name == 'VisibleString': + compiled = VisibleString(name) + elif type_name == 'GeneralString': + compiled = GeneralString(name) + elif type_name == 'UTF8String': + compiled = UTF8String(name) + elif type_name == 'BMPString': + compiled = BMPString(name) + elif type_name == 'GraphicString': + compiled = GraphicString(name) + elif type_name == 'UTCTime': + compiled = UTCTime(name) + elif type_name == 'UniversalString': + compiled = UniversalString(name) + elif type_name == 'GeneralizedTime': + compiled = GeneralizedTime(name) + elif type_name == 'DATE': + compiled = Date(name) + elif type_name == 'TIME-OF-DAY': + compiled = TimeOfDay(name) + elif type_name == 'DATE-TIME': + compiled = DateTime(name) + elif type_name == 'BIT STRING': + compiled = BitString(name) + elif type_name == 'ANY': + compiled = Any(name) + elif type_name == 'ANY DEFINED BY': + compiled = Any(name) + elif type_name == 'NULL': + compiled = Null(name) + elif type_name == 'EXTERNAL': + members, _ = self.compile_members(self.external_type_descriptor()['members'], + module_name) + compiled = Sequence(name, members) + elif type_name == 'ObjectDescriptor': + compiled = ObjectDescriptor(name) + else: + if type_name in self.types_backtrace: + compiled = Recursive(name, + type_name, + module_name) + self.recursive_types.append(compiled) + else: + compiled = self.compile_user_type(name, + type_name, + module_name) + + return compiled + + +def compile_dict(specification, numeric_enums): + return Compiler(specification, numeric_enums).process() + + +def decode_full_length(_data): + raise DecodeError('Decode length is not supported for this codec.') diff --git a/.venv/lib/python3.12/site-packages/asn1tools/compat.py b/.venv/lib/python3.12/site-packages/asn1tools/compat.py new file mode 100644 index 0000000..990b468 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/compat.py @@ -0,0 +1,54 @@ +"""Python 2 & 3 compatibility. + +""" + +import sys +from datetime import datetime +from datetime import timedelta +from datetime import tzinfo + + +if sys.version_info[0] > 2: + from datetime import timezone + + UTC = timezone.utc + + def strptime(data, fmt): + return datetime.strptime(data, fmt) +else: + class timezone(tzinfo): + + def __init__(self, offset): + self._utcoffset = offset + + def utcoffset(self, dt): + return self._utcoffset + + def tzname(self, dt): + return "-" + + def dst(self, dt): + return timedelta(0) + + UTC = timezone(timedelta(hours=0, minutes=0)) + + def strptime(data, fmt): + if fmt.endswith('%z'): + date = datetime.strptime(data[:-5], fmt[:-2]) + + try: + sign = {'-': -1, '+': 1}[data[-5]] + hours = sign * int(data[-4:-2]) + minutes = sign * int(data[-2:]) + except KeyError: + raise ValueError( + "time data '{}' does not match format '{}'.".format( + data, + fmt)) + + date = date.replace(tzinfo=timezone(timedelta(hours=hours, + minutes=minutes))) + else: + date = datetime.strptime(data, fmt) + + return date diff --git a/.venv/lib/python3.12/site-packages/asn1tools/compiler.py b/.venv/lib/python3.12/site-packages/asn1tools/compiler.py new file mode 100644 index 0000000..1422fef --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/compiler.py @@ -0,0 +1,403 @@ +"""Compile ASN.1 specifications to Python objects that can be used to +encode and decode types. + +""" + +try: + import diskcache + has_diskcache = True +except ImportError: + has_diskcache = False + +from .parser import parse_files +from .parser import parse_string +from .codecs import compiler +from .codecs import ber +from .codecs import der +from .codecs import gser +from .codecs import jer +from .codecs import oer +from .codecs import per +from .codecs import uper +from .codecs import xer +from .codecs import type_checker +from .codecs import constraints_checker +from .errors import CompileError +from .errors import EncodeError +from .errors import DecodeError + + +class Specification(object): + """This class is used to encode and decode ASN.1 types found in an + ASN.1 specification. + + Instances of this class are created by the factory functions + :func:`~asn1tools.compile_files()`, + :func:`~asn1tools.compile_string()` and + :func:`~asn1tools.compile_dict()`. + + """ + + def __init__(self, + modules, + decode_length, + type_checkers, + constraints_checkers): + self._modules = modules + self._decode_length = decode_length + self._types = {} + + duplicated = set() + + for module_name in modules: + types = modules[module_name] + + for type_name, type_ in types.items(): + type_.type_checker = type_checkers[module_name][type_name] + type_.constraints_checker = constraints_checkers[module_name][type_name] + + if type_name in duplicated: + continue + + if type_name in self._types: + del self._types[type_name] + duplicated.add(type_name) + continue + + self._types[type_name] = type_ + + @property + def types(self): + """A dictionary of all unique types in the specification. Types found + in two or more modules are not part of this dictionary. + + >>> question = foo.types['Question'] + >>> question + Sequence(Question, [Integer(id), IA5String(question)]) + >>> question.encode({'id': 1, 'question': 'Is 1+1=3?'}) + b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?' + + """ + + return self._types + + @property + def modules(self): + """A dictionary of all modules in the specification. Unlike + :attr:`.types`, this attribute contains every type, even if + the type name was found in two or more modules. + + >>> question = foo.modules['Foo']['Question'] + >>> question + Sequence(Question, [Integer(id), IA5String(question)]) + >>> question.encode({'id': 1, 'question': 'Is 1+1=3?'}) + b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?' + + """ + + return self._modules + + def encode(self, + name, + data, + check_types=True, + check_constraints=False, + **kwargs): + """Encode given dictionary `data` as given type `name` and return the + encoded data as a bytes object. + + If `check_types` is ``True`` all objects in `data` are checked + against the expected Python type for its ASN.1 type. Set + `check_types` to ``False`` to minimize the runtime overhead, + but instead get less informative error messages. + + See `Types`_ for a mapping table from ASN.1 types to Python + types. + + If `check_constraints` is ``True`` all objects in `data` are + checked against their ASN.1 type constraints. A + ConstraintsError exception is raised if the constraints are + not fulfilled. Set `check_constraints` to ``False`` to skip + the constraints check and minimize the runtime overhead, but + instead get less informative error messages and allow encoding + of values not fulfilling the constraints. + + >>> foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) + b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?' + + """ + + try: + type_ = self._types[name] + except KeyError: + raise EncodeError( + "Type '{}' not found in types dictionary.".format(name)) + + if check_types: + type_.check_types(data) + + if check_constraints: + type_.check_constraints(data) + + return bytes(type_.encode(data, **kwargs)) + + def decode(self, name, data, check_constraints=False): + """Decode given bytes object `data` as given type `name` and return + the decoded data as a dictionary. + + If `check_constraints` is ``True`` all objects in `data` are + checked against their ASN.1 type constraints. A + ConstraintsError exception is raised if the constraints are + not fulfilled. Set `check_constraints` to ``False`` to skip + the constraints check and minimize the runtime overhead, but + instead allow decoding of values not fulfilling the + constraints. + + >>> foo.decode('Question', b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?') + {'id': 1, 'question': 'Is 1+1=3?'} + + """ + + try: + type_ = self._types[name] + except KeyError: + raise DecodeError( + "Type '{}' not found in types dictionary.".format(name)) + + decoded = type_.decode(data) + + if check_constraints: + type_.check_constraints(decoded) + + return decoded + + def decode_with_length(self, name, data, check_constraints=False): + """Same as :func:`~asn1tools.compiler.Specification.decode`, but also + returns the byte length of the decoded data. + + Use to get the length of indefinite-length BER encoded data. + + >>> foo.decode_with_length('Question', + b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?') + ({'id': 1, 'question': 'Is 1+1=3?'}, 16) + + """ + + try: + type_ = self._types[name] + except KeyError: + raise DecodeError( + "Type '{}' not found in types dictionary.".format(name)) + + decoded, length = type_.decode_with_length(data) + + if check_constraints: + type_.check_constraints(decoded) + + return decoded, length + + def decode_length(self, data): + """Decode the length of given data `data`. Returns None if not enough + data was given to decode the length. + + This method only works for BER and DER codecs with definite + length in the first data encoding. Other codecs and + combinations lacks length information in the data. + + >>> foo.decode_length(b'\\x30\\x0e\\x02\\x01\\x01') + 16 + + """ + + return self._decode_length(data) + + +def _compile_any_defined_by_type(type_, choices): + type_['choices'] = {} + + for key, value in choices.items(): + specification = 'A DEFINITIONS ::= BEGIN B ::= {} END'.format(value) + type_['choices'][key] = parse_string(specification)['A']['types']['B'] + + +def _compile_any_defined_by_choices(specification, + any_defined_by_choices): + for location, choices in any_defined_by_choices.items(): + module_name = location[0] + type_names = location[1:-1] + member_name = location[-1] + types = specification[module_name]['types'] + + if len(type_names) == 0: + _compile_any_defined_by_type(types[member_name], choices) + else: + for type_name in type_names: + types = types[type_name] + + for member in types['members']: + if member['name'] != member_name: + continue + + _compile_any_defined_by_type(member, choices) + break + + +def _compile_files_cache(filenames, + codec, + any_defined_by_choices, + encoding, + cache_dir, + numeric_enums): + key = [codec.encode('ascii')] + + if isinstance(filenames, str): + filenames = [filenames] + + for filename in filenames: + with open(filename, 'rb') as fin: + key.append(fin.read()) + + key = b''.join(key) + cache = diskcache.Cache(cache_dir) + + try: + return cache[key] + except KeyError: + compiled = compile_dict(parse_files(filenames, encoding), + codec, + any_defined_by_choices, + numeric_enums) + cache[key] = compiled + + return compiled + + +def compile_dict(specification, + codec='ber', + any_defined_by_choices=None, + numeric_enums=False): + """Compile given ASN.1 specification dictionary and return a + :class:`~asn1tools.compiler.Specification` object that can be used + to encode and decode data structures with given codec + `codec`. `codec` may be one of ``'ber'``, ``'der'``, ``'gser'``, + ``'jer'``, ``oer``, ``'per'``, ``'uper'`` and ``'xer'``. + + Give `numeric_enums` as ``True`` for numeric enumeration values + instead of strings. + + >>> foo = asn1tools.compile_dict(asn1tools.parse_files('foo.asn')) + + """ + + codecs = { + 'ber': ber, + 'der': der, + 'gser': gser, + 'jer': jer, + 'oer': oer, + 'per': per, + 'uper': uper, + 'xer': xer + } + + try: + codec = codecs[codec] + except KeyError: + raise CompileError("Unsupported codec '{}'.".format(codec)) + + if any_defined_by_choices: + _compile_any_defined_by_choices(specification, + any_defined_by_choices) + + return Specification(codec.compile_dict(specification, + numeric_enums), + codec.decode_full_length, + type_checker.compile_dict(specification, + numeric_enums), + constraints_checker.compile_dict(specification, + numeric_enums)) + + +def compile_string(string, + codec='ber', + any_defined_by_choices=None, + numeric_enums=False): + """Compile given ASN.1 specification string and return a + :class:`~asn1tools.compiler.Specification` object that can be used + to encode and decode data structures with given codec + `codec`. `codec` may be one of ``'ber'``, ``'der'``, ``'gser'``, + ``'jer'``, ``oer``, ``'per'``, ``'uper'`` and ``'xer'``. + + Give `numeric_enums` as ``True`` for numeric enumeration values + instead of strings. + + >>> with open('foo.asn') as fin: + ... foo = asn1tools.compile_string(fin.read()) + + """ + + return compile_dict(parse_string(string), + codec, + any_defined_by_choices, + numeric_enums) + + +def compile_files(filenames, + codec='ber', + any_defined_by_choices=None, + encoding='utf-8', + cache_dir=None, + numeric_enums=False): + """Compile given ASN.1 specification file(s) and return a + :class:`~asn1tools.compiler.Specification` object that can be used + to encode and decode data structures with given codec + `codec`. `codec` may be one of ``'ber'``, ``'der'``, ``'gser'``, + ``'jer'``, ``oer``, ``'per'``, ``'uper'`` and ``'xer'``. + + `encoding` is the text encoding. This argument is passed to the + built-in function `open()`. + + `cache_dir` specifies the compiled files cache location in the + file system. Give as ``None`` to disable the cache. By default the + cache is disabled. The cache key is the concatenated contents of + given files and the codec name. Using a cache will significantly + reduce the compile time when recompiling the same files. The cache + directory is automatically created if it does not exist. Remove + the cache directory `cache_dir` to clear the cache. + + Give `numeric_enums` as ``True`` for numeric enumeration values + instead of strings. + + >>> foo = asn1tools.compile_files('foo.asn') + + Give `cache_dir` as a string to use a cache. + + >>> foo = asn1tools.compile_files('foo.asn', cache_dir='my_cache') + + """ + + if cache_dir is None: + return compile_dict(parse_files(filenames, encoding), + codec, + any_defined_by_choices, + numeric_enums) + else: + if not has_diskcache: + raise RuntimeError( + 'Cache access requested, but diskcache module is missing') + + return _compile_files_cache(filenames, + codec, + any_defined_by_choices, + encoding, + cache_dir, + numeric_enums) + + +def pre_process_dict(specification): + """Pre-process given specification dictionary, expanding COMPONENTS OF + and adding extension markers if EXTENSIBILITY IMPLIED is active. + + """ + + return compiler.pre_process(specification) diff --git a/.venv/lib/python3.12/site-packages/asn1tools/errors.py b/.venv/lib/python3.12/site-packages/asn1tools/errors.py new file mode 100644 index 0000000..8fc0078 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/errors.py @@ -0,0 +1,33 @@ +"""Various exceptions/errors. + +""" + + +class Error(Exception): + """Base exception of all asn1tools exceptions. + + """ + + +class CompileError(Error): + """General ASN.1 compile error. + + """ + + +class EncodeError(Error): + """General ASN.1 encode error. + + """ + + +class DecodeError(Error): + """General ASN.1 decode error. + + """ + + +class ConstraintsError(Error): + """General ASN.1 constraints error. + + """ diff --git a/.venv/lib/python3.12/site-packages/asn1tools/parser.py b/.venv/lib/python3.12/site-packages/asn1tools/parser.py new file mode 100644 index 0000000..0892d52 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/parser.py @@ -0,0 +1,1897 @@ +"""Convert ASN.1 specifications to Python data structures. + +""" + +import logging +import re +import sys + +from pyparsing import Literal +from pyparsing import Keyword +from pyparsing import Word +from pyparsing import ZeroOrMore +from pyparsing import Regex +from pyparsing import printables +from pyparsing import delimitedList +from pyparsing import Group +from pyparsing import Optional +from pyparsing import Forward +from pyparsing import StringEnd +from pyparsing import OneOrMore +from pyparsing import nums +from pyparsing import Suppress +from pyparsing import ParseException +from pyparsing import ParseSyntaxException +from pyparsing import NotAny +from pyparsing import NoMatch +from pyparsing import QuotedString +from pyparsing import Combine +from pyparsing import ParseResults +from pyparsing import lineno + +from .errors import Error + + +LOGGER = logging.getLogger(__name__) + +EXTENSION_MARKER = None + + +class ParseError(Error): + pass + + +class InternalParserError(Error): + pass + + +class Tokens(object): + + def __init__(self, tag, tokens): + self.tag = tag + self.tokens = tokens + + def __getitem__(self, index): + return self.tokens[index] + + def __len__(self): + return len(self.tokens) + + def __iter__(self): + for token in self.tokens: + yield token + + def __bool__(self): + return len(self.tokens) > 0 + + def __eq__(self, other): + return other == self.tag + + def __repr__(self): + return "Tokens(tag='{}', tokens='{}')".format(self.tag, + self.tokens) + + +class Tag(Group): + + def __init__(self, tag, expr): + super(Tag, self).__init__(expr) + self.tag = tag + + def postParse(self, instring, loc, tokenlist): + return Tokens(self.tag, tokenlist.asList()) + + +def merge_dicts(dicts): + return {k: v for d in dicts for k, v in d.items()} + + +def convert_integer(_s, _l, tokens): + try: + return int(tokens[0]) + except (IndexError, ValueError): + return tokens + + +def convert_real_number(_s, _l, tokens): + if '.' not in tokens[0]: + tokens = int(tokens[0]) + + return tokens + + +def convert_number(token): + if isinstance(token, list): + token = token[0] + + try: + return int(token) + except (ValueError, TypeError): + return token + + +def convert_size(tokens): + if len(tokens) == 0: + return None + + tokens = tokens[0] + + if tokens[0] == 'SIZE': + values = [] + + for item_tokens in tokens[1].asList(): + if '..' in item_tokens: + value = (convert_number(item_tokens[0]), + convert_number(item_tokens[2])) + else: + value = convert_number(item_tokens[0]) + + values.append(value) + + return values + elif isinstance(tokens[0], dict): + if 'size' in tokens[0]: + return tokens[0]['size'] + + +def convert_table(tokens): + tokens = tokens[0] + + try: + if isinstance(tokens[1][0][0], list): + defined_object_set = tokens[1][0][0][0] + else: + defined_object_set = tokens[1][0][0] + except IndexError: + return None + + try: + component_ids = tokens[4] + except IndexError: + return defined_object_set + + return [defined_object_set, component_ids] + + +def convert_enum_values(string, location, tokens): + number = 0 + values = [] + used_numbers = [] + root, extension = tokens + root = root.asList() + extension = extension.asList() + + def add_used_numbers(items): + for item in items: + if not isinstance(item, list): + continue + + item_number = item[2] + + if item_number in used_numbers: + raise ParseError( + 'Duplicated ENUMERATED number {} at line {}.'.format( + item_number, + lineno(location, string))) + + used_numbers.append(item_number) + + # Root enumeration. + add_used_numbers(root) + + for token in root: + if isinstance(token, list): + values.append((token[0], token[2])) + else: + while number in used_numbers: + number += 1 + + used_numbers.append(number) + values.append((token, number)) + number += 1 + + # Optional additional enumeration. + if extension: + values.append(EXTENSION_MARKER) + additional = extension[1:] + add_used_numbers(additional) + + for token in additional: + if isinstance(token, list): + number = token[2] + values.append((token[0], number)) + else: + if number in used_numbers: + raise ParseError( + 'Duplicated ENUMERATED number {} at line {}.'.format( + number, + lineno(location, string))) + + values.append((token, number)) + used_numbers.append(number) + + number += 1 + + return values + + +def convert_tag(tokens): + if len(tokens) > 0: + if len(tokens[0]) == 1: + tag = { + 'number': int(tokens[0][0]) + } + else: + tag = { + 'number': convert_number(tokens[0][1]), + 'class': tokens[0][0] + } + + if tokens[1]: + tag['kind'] = tokens[1][0] if tokens[1] else None + + return tag + + +def convert_value_range(_s, _l, tokens): + tokens = tokens.asList() + minimum = tokens[0] + + if isinstance(minimum, list): + minimum = minimum[0] + + maximum = tokens[1] + + if isinstance(maximum, list): + maximum = maximum[0] + + return (minimum, maximum) + + +def convert_inner_type_constraints(_s, _l, tokens): + tokens = tokens.asList() + components = [] + + if tokens[0] == 'WITH COMPONENTS': + for item_tokens in tokens[2]: + if item_tokens == '...': + value = EXTENSION_MARKER + elif len(item_tokens) == 2: + if isinstance(item_tokens[1], list): + value = item_tokens[1][0] + + if isinstance(value, list): + value = value[0] + + value = (item_tokens[0], value) + else: + value = (item_tokens[0], item_tokens[1]) + else: + value = item_tokens + + components.append(value) + + return {'with-components': components} + else: + return {} + + +def convert_size_constraint(_s, _l, tokens): + tokens = tokens.asList()[1] + values = [] + + for item_tokens in tokens: + if item_tokens == '...': + value = EXTENSION_MARKER + elif '..' in item_tokens: + value = (convert_number(item_tokens[0]), + convert_number(item_tokens[2])) + else: + value = convert_number(item_tokens[0]) + + values.append(value) + + return {'size': values} + + +def convert_permitted_alphabet(_s, _l, tokens): + tokens = tokens.asList() + values = [] + + for token in tokens[1:]: + if isinstance(token[0], list): + for char in token[0][0]: + values.append((char, char)) + else: + values.append(token[0]) + + return {'from': values} + + +def convert_constraint(_s, _l, tokens): + tokens = tokens.asList() + # print('constraint:', tokens) + + +def convert_members(tokens): + members = [] + + for member_tokens in tokens: + if member_tokens in [['...'], '...']: + members.append(EXTENSION_MARKER) + continue + + if member_tokens[0] == 'COMPONENTS OF': + members.append({ + 'components-of': member_tokens[1][0]['type'] + }) + continue + + if member_tokens[0] == '[[': + members.append(convert_members(member_tokens[1])) + continue + + if len(member_tokens) == 2: + member_tokens, qualifiers = member_tokens + qualifiers = qualifiers.asList() + else: + qualifiers = [] + + member = convert_type(member_tokens[2], []) + member['name'] = member_tokens[0] + + if 'OPTIONAL' in qualifiers: + member['optional'] = True + + if 'DEFAULT' in qualifiers: + if len(qualifiers[1]) == 0: + value = [] + else: + value = convert_value(qualifiers[1], member['type']) + + member['default'] = value + + tag = convert_tag(member_tokens[1]) + + if tag: + member['tag'] = tag + + members.append(member) + + return members + + +def convert_sequence_type(_s, _l, tokens): + return { + 'type': 'SEQUENCE', + 'members': convert_members(tokens[2]) + } + + +def convert_sequence_of_type(_s, _l, tokens): + is_named_element = len(tokens) == 6 + + converted_type = { + 'type': 'SEQUENCE OF', + 'element': convert_type(tokens[5 if is_named_element else 4], []), + } + + if (is_named_element): + converted_type['element_name'] = tokens[3] + + if len(tokens[1]) > 0: + converted_type['size'] = tokens[1][0][0]['size'] + + if len(tokens[1]) > 1 and tokens[1][1] == '...': + converted_type['size'].append(None) + + tag = convert_tag(tokens[4 if is_named_element else 3]) + + if tag: + converted_type['element']['tag'] = tag + + return converted_type + + +def convert_set_type(_s, _l, tokens): + return { + 'type': 'SET', + 'members': convert_members(tokens[2]) + } + + +def convert_set_of_type(_s, _l, tokens): + is_named_element = len(tokens) == 6 + + converted_type = { + 'type': 'SET OF', + 'element': convert_type(tokens[5 if is_named_element else 4], []) + } + + if (is_named_element): + converted_type['element_name'] = tokens[3] + + if len(tokens[1]) > 0: + converted_type['size'] = tokens[1][0][0]['size'] + + if len(tokens[1]) > 1 and tokens[1][1] == '...': + converted_type['size'].append(None) + + tag = convert_tag(tokens[4 if is_named_element else 3]) + + if tag: + converted_type['element']['tag'] = tag + + return converted_type + + +def convert_choice_type(_s, _l, tokens): + return { + 'type': 'CHOICE', + 'members': convert_members(tokens[2]) + } + + +def convert_defined_type(_s, _l, tokens): + converted = { + 'type': tokens[0] + } + + # actual-parameters + if len(tokens) == 2: + converted.update(tokens[1]) + + return converted + + +def convert_integer_type(_s, _l, tokens): + tokens = tokens.asList() + compiled = {'type': 'INTEGER'} + + if tokens[1]: + compiled['named-numbers'] = { + item[0]: item[2] for item in tokens[1] + } + + return compiled + + +def convert_real_type(_s, _l, _tokens): + return {'type': 'REAL'} + + +def convert_enumerated_type(string, location, tokens): + return { + 'type': 'ENUMERATED', + 'values': convert_enum_values(string, location, tokens[2]) + } + + +def convert_keyword_type(_s, _l, tokens): + return { + 'type': tokens[0] + } + + +def convert_print(_s, _l, tokens): + print('convert_print', tokens) + + +def convert_object_identifier_type(_s, _l, _tokens): + return { + 'type': 'OBJECT IDENTIFIER' + } + + +def convert_bit_string_type(_s, _l, tokens): + converted_type = { + 'type': 'BIT STRING' + } + + named_bit_list = tokens.asList()[1] + + if named_bit_list: + converted_type['named-bits'] = [ + tuple(named_bit) for named_bit in named_bit_list + ] + + return converted_type + + +def convert_octet_string_type(_s, _l, _tokens): + return { + 'type': 'OCTET STRING' + } + + +def convert_ia5_string_type(_s, _l, _tokens): + return { + 'type': 'IA5String' + } + + +def convert_any_defined_by_type(_s, _l, tokens): + return { + 'type': 'ANY DEFINED BY', + 'value': tokens[1], + 'choices': {} + } + + +def convert_actual_parameter_list(_s, _l, tokens): + tokens = tokens.asList()[0] + converted = [] + + for parameter in tokens: + converted.append(parameter[0][0]) + + if converted: + converted = {'actual-parameters': converted} + else: + converted = None + + return converted + + +def convert_parameter_list(_s, _l, tokens): + tokens = tokens.asList() + + if tokens[0]: + converted = {'parameters': tokens[0]} + else: + converted = None + + return converted + + +def convert_null_type(_s, _l, _tokens): + return { + 'type': 'NULL' + } + + +def convert_boolean_type(_s, _l, _tokens): + return { + 'type': 'BOOLEAN' + } + + +def convert_type(tokens, parameters): + converted_type, constraints = tokens + + restricted_to = [] + + for constraint_tokens in constraints: + if isinstance(constraint_tokens, ParseResults): + constraint_tokens = constraint_tokens.asList() + + if constraint_tokens == '...': + if restricted_to: + restricted_to.append(EXTENSION_MARKER) + + if 'size' in converted_type: + converted_type['size'].append(None) + elif len(constraint_tokens) == 1: + if not isinstance(constraint_tokens[0], dict): + restricted_to.append(convert_number(constraint_tokens[0])) + elif 'size' in constraint_tokens[0]: + converted_type.update(constraint_tokens[0]) + elif 'from' in constraint_tokens[0]: + converted_type.update(constraint_tokens[0]) + elif 'with-components' in constraint_tokens[0]: + converted_type.update(constraint_tokens[0]) + + if isinstance(parameters, dict): + converted_type.update(parameters) + + if '{' in restricted_to: + restricted_to = [] + + if restricted_to: + converted_type['restricted-to'] = restricted_to + + types = [ + 'BIT STRING', + 'OCTET STRING', + 'IA5String', + 'BMPString', + 'VisibleString', + 'UTF8String', + 'NumericString', + 'PrintableString' + ] + + if converted_type['type'] in types: + size = convert_size(constraints) + + if size: + converted_type['size'] = size + + if '&' in converted_type['type']: + converted_type['table'] = convert_table(tokens.asList()[1:]) + + return converted_type + + +def convert_bstring(_s, _l, tokens): + return '0b' + re.sub(r"[\sB']", '', tokens[0]) + + +def convert_hstring(_s, _l, tokens): + return '0x' + re.sub(r"[\sH']", '', tokens[0]).lower() + + +def convert_bit_string_value(tokens): + value = tokens[0] + + if value == 'IdentifierList': + value = value[:] + elif isinstance(value, str): + value = value + else: + value = None + + return value + + +def convert_value(tokens, type_=None): + if type_ == 'INTEGER': + value = int(tokens[0]) + elif type_ == 'OBJECT IDENTIFIER': + value = [] + + for value_tokens in tokens: + if len(value_tokens) == 2: + value.append((value_tokens[0], int(value_tokens[1]))) + else: + value.append(convert_number(value_tokens[0])) + elif type_ == 'BOOLEAN': + value = (tokens[0] == 'TRUE') + elif tokens[0] == 'BitStringValue': + value = convert_bit_string_value(tokens[0]) + elif isinstance(tokens[0], str): + value = convert_number(tokens[0]) + elif isinstance(tokens[0], int): + value = tokens[0] + else: + value = None + + return value + + +def convert_parameterized_object_set_assignment(_s, _l, tokens): + members = [] + + try: + for member_tokens in tokens[4].asList(): + if len(member_tokens[0]) == 1: + member = member_tokens[0][0] + else: + member = {} + + for item_tokens in member_tokens[0]: + name = item_tokens[0] + value = item_tokens[1][0] + + if isinstance(value, Tokens): + value = value[0] + + member[name] = convert_number(value) + + members.append(member) + except (IndexError, KeyError): + pass + + converted_type = { + 'class': tokens[1], + 'members': members + } + + return ('parameterized-object-set-assignment', + tokens[0], + converted_type) + + +def convert_parameterized_object_assignment(_s, _l, tokens): + type_ = tokens[1] + + converted_type = { + 'type': type_, + 'value': None + } + + return ('parameterized-object-assignment', + tokens[0], + converted_type) + + +def convert_parameterized_object_class_assignment(_s, _l, tokens): + members = [] + + for member in tokens[3]: + if member[0][1].islower(): + converted_member = member[1][0] + + if isinstance(converted_member, Tokens): + converted_member = converted_member[0] + else: + converted_member = {'type': 'OpenType'} + + converted_member['name'] = member[0] + + members.append(converted_member) + + converted_type = { + 'members': members + } + + return ('parameterized-object-class-assignment', + tokens[0], + converted_type) + + +def convert_parameterized_type_assignment(_s, _l, tokens): + tokens = tokens.asList() + converted_type = convert_type(tokens[4], tokens[1]) + + try: + tag = convert_tag(tokens[3]) + except ValueError: + tag = None + + if tag: + converted_type['tag'] = tag + + return ('parameterized-type-assignment', + tokens[0], + converted_type) + + +def convert_parameterized_value_assignment(_s, _l, tokens): + type_ = tokens[1][0][0] + + if isinstance(type_, Tokens): + type_ = type_[0] + elif isinstance(type_, dict): + type_ = type_['type'] + + converted_type = { + 'type': type_, + 'value': convert_value(tokens[2], type_) + } + + return ('parameterized-value-assignment', + tokens[0], + converted_type) + + +def convert_imports(_s, _l, tokens): + tokens = tokens.asList() + imports = {} + + if tokens: + for from_tokens in tokens: + from_name = from_tokens[2] + + LOGGER.debug("Converting imports from '%s'.", from_name) + + imported = from_tokens[0] + + if from_name in imports: + imported = list(set(imports[from_name] + imported)) + + imports[from_name] = sorted(imported) + + return {'imports': imports} + + +def convert_assignment_list(_s, _l, tokens): + types = {} + values = {} + object_classes = {} + object_sets = {} + + for kind, name, value in tokens: + if kind == 'parameterized-object-set-assignment': + if name in object_sets: + LOGGER.warning("Object set '%s' already defined.", name) + + object_sets[name] = value + elif kind == 'parameterized-object-assignment': + if name in values: + LOGGER.warning("Object '%s' already defined.", name) + + values[name] = value + elif kind == 'parameterized-object-class-assignment': + if name in object_classes: + LOGGER.warning("Object class '%s' already defined.", name) + + object_classes[name] = value + elif kind == 'parameterized-type-assignment': + if name in types: + LOGGER.warning("Type '%s' already defined.", name) + + types[name] = value + elif kind == 'parameterized-value-assignment': + if name in values: + LOGGER.warning("Value '%s' already defined.", name) + + values[name] = value + else: + raise InternalParserError( + 'Unrecognized assignment kind {}.'.format(kind)) + + return { + 'types': types, + 'values': values, + 'object-classes': object_classes, + 'object-sets': object_sets + } + + +def convert_module_body(_s, _l, tokens): + return merge_dicts(tokens) + + +def convert_module_definition(_s, _l, tokens): + tokens = tokens.asList() + module = tokens[1][0] + module['extensibility-implied'] = (tokens[0][3] != []) + + if tokens[0][2]: + module['tags'] = tokens[0][2][0] + + return {tokens[0][0]: module} + + +def convert_specification(_s, _l, tokens): + return merge_dicts(tokens) + + +def create_grammar(): + """Return the ASN.1 grammar as Pyparsing objects. + + """ + + # Keywords. + SEQUENCE = Keyword('SEQUENCE').setName('SEQUENCE') + CHOICE = Keyword('CHOICE').setName('CHOICE') + ENUMERATED = Keyword('ENUMERATED').setName('ENUMERATED') + DEFINITIONS = Keyword('DEFINITIONS').setName('DEFINITIONS') + BEGIN = Keyword('BEGIN').setName('BEGIN') + END = Keyword('END').setName('END') + AUTOMATIC = Keyword('AUTOMATIC').setName('AUTOMATIC') + TAGS = Keyword('TAGS').setName('TAGS') + OPTIONAL = Keyword('OPTIONAL').setName('OPTIONAL') + OF = Keyword('OF').setName('OF') + SIZE = Keyword('SIZE').setName('SIZE') + INTEGER = Keyword('INTEGER').setName('INTEGER') + REAL = Keyword('REAL').setName('REAL') + BIT_STRING = Keyword('BIT STRING').setName('BIT STRING') + OCTET_STRING = Keyword('OCTET STRING').setName('OCTET STRING') + DEFAULT = Keyword('DEFAULT').setName('DEFAULT') + IMPORTS = Keyword('IMPORTS').setName('IMPORTS') + EXPORTS = Keyword('EXPORTS').setName('EXPORTS') + FROM = Keyword('FROM').setName('FROM') + CONTAINING = Keyword('CONTAINING').setName('CONTAINING') + ENCODED_BY = Keyword('ENCODED_BY').setName('ENCODED_BY') + IMPLICIT = Keyword('IMPLICIT').setName('IMPLICIT') + EXPLICIT = Keyword('EXPLICIT').setName('EXPLICIT') + OBJECT_IDENTIFIER = Keyword('OBJECT IDENTIFIER').setName('OBJECT IDENTIFIER') + UNIVERSAL = Keyword('UNIVERSAL').setName('UNIVERSAL') + APPLICATION = Keyword('APPLICATION').setName('APPLICATION') + PRIVATE = Keyword('PRIVATE').setName('PRIVATE') + SET = Keyword('SET').setName('SET') + ANY_DEFINED_BY = Keyword('ANY DEFINED BY').setName('ANY DEFINED BY') + EXTENSIBILITY_IMPLIED = Keyword('EXTENSIBILITY IMPLIED').setName( + 'EXTENSIBILITY IMPLIED') + BOOLEAN = Keyword('BOOLEAN').setName('BOOLEAN') + TRUE = Keyword('TRUE').setName('TRUE') + FALSE = Keyword('FALSE').setName('FALSE') + CLASS = Keyword('CLASS').setName('CLASS') + WITH_SYNTAX = Keyword('WITH SYNTAX').setName('WITH SYNTAX') + UNIQUE = Keyword('UNIQUE').setName('UNIQUE') + NULL = Keyword('NULL').setName('NULL') + WITH_COMPONENT = Keyword('WITH COMPONENT').setName('WITH COMPONENT') + WITH_COMPONENTS = Keyword('WITH COMPONENTS').setName('WITH COMPONENTS') + WITH_SUCCESSORS = Keyword('WITH SUCCESSORS').setName('WITH SUCCESSORS') + WITH_DESCENDANTS = Keyword('WITH DESCENDANTS').setName('WITH DESCENDANTS') + COMPONENTS_OF = Keyword('COMPONENTS OF').setName('COMPONENTS OF') + PRESENT = Keyword('PRESENT').setName('PRESENT') + ABSENT = Keyword('ABSENT').setName('ABSENT') + ALL = Keyword('ALL').setName('ALL') + EXCEPT = Keyword('EXCEPT').setName('EXCEPT') + MIN = Keyword('MIN').setName('MIN') + MAX = Keyword('MAX').setName('MAX') + INCLUDES = Keyword('INCLUDES').setName('INCLUDES') + PATTERN = Keyword('PATTERN').setName('PATTERN') + CONSTRAINED_BY = Keyword('CONSTRAINED BY').setName('CONSTRAINED BY') + UNION = Keyword('UNION').setName('UNION') + INTERSECTION = Keyword('INTERSECTION').setName('INTERSECTION') + PLUS_INFINITY = Keyword('PLUS-INFINITY').setName('PLUS-INFINITY') + MINUS_INFINITY = Keyword('MINUS-INFINITY').setName('MINUS-INFINITY') + BMPString = Keyword('BMPString').setName('BMPString') + GeneralString = Keyword('GeneralString').setName('GeneralString') + GraphicString = Keyword('GraphicString').setName('GraphicString') + IA5String = Keyword('IA5String').setName('IA5String') + ISO646String = Keyword('ISO646String').setName('ISO646String') + NumericString = Keyword('NumericString').setName('NumericString') + PrintableString = Keyword('PrintableString').setName('PrintableString') + TeletexString = Keyword('TeletexString').setName('TeletexString') + UTCTime = Keyword('UTCTime').setName('UTCTime') + GeneralizedTime = Keyword('GeneralizedTime').setName('GeneralizedTime') + T61String = Keyword('T61String').setName('T61String') + UniversalString = Keyword('UniversalString').setName('UniversalString') + UTF8String = Keyword('UTF8String').setName('UTF8String') + VideotexString = Keyword('VideotexString').setName('VideotexString') + VisibleString = Keyword('VisibleString').setName('VisibleString') + CHARACTER_STRING = Keyword('CHARACTER STRING').setName('CHARACTER STRING') + + # Various literals. + word = Word(printables, excludeChars=',(){}[].:=;"|').setName('word') + identifier = Regex(r'[a-z][a-zA-Z0-9-]*').setName('identifier') + assign = Literal('::=').setName('::=') + left_parenthesis = Literal('(') + right_parenthesis = Literal(')') + left_brace = Literal('{') + right_brace = Literal('}') + left_bracket = Literal('[') + right_bracket = Literal(']') + left_version_brackets = Literal('[[') + right_version_brackets = Literal(']]') + colon = Literal(':') + semi_colon = Literal(';') + dot = Literal('.') + range_separator = Literal('..') + ellipsis = Literal('...') + pipe = Literal('|') + caret = Literal('^') + comma = Literal(',') + at = Literal('@') + exclamation_mark = Literal('!') + integer = Word(nums + '-') + real_number = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?') + bstring = Regex(r"'[01\s]*'B") + hstring = Regex(r"'[0-9A-F\s]*'H") + cstring = QuotedString('"') + number = (Word(nums).setName('number') + ~dot) + ampersand = Literal('&') + less_than = Literal('<') + + reserved_words = Regex(r'(END|SEQUENCE|ENUMERATED|WITH)(\s|$)') + + # Forward declarations. + value = Forward() + type_ = Forward() + object_ = Forward() + object_set = Forward() + primitive_field_name = Forward() + constraint = Forward() + element_set_spec = Forward() + token_or_group_spec = Forward() + value_reference = Forward().setName('valuereference') + type_reference = Forward().setName('typereference') + value_set = Forward().setName('"valueSet" not implemented') + named_type = Forward() + root_element_set_spec = Forward() + defined_object_set = Forward() + syntax_list = Forward() + object_from_object = Forward() + object_set_from_objects = Forward() + defined_value = Forward().setName('DefinedValue') + component_type_lists = Forward() + extension_and_exception = Forward() + optional_extension_marker = Forward() + additional_element_set_spec = Forward() + reference = Forward() + defined_object_class = Forward() + defined_type = Forward() + module_reference = Forward() + external_type_reference = Forward() + external_value_reference = Forward() + simple_defined_type = Forward() + defined_object = Forward() + referenced_value = Forward() + builtin_value = Forward() + named_value = Forward() + sequence_value = Forward() + signed_number = Forward() + name_and_number_form = Forward() + number_form = Forward().setName('numberForm') + definitive_number_form = Forward().setName('definitiveNumberForm') + version_number = Forward() + union_mark = Forward() + named_number = Forward() + size_constraint = Forward() + + value_field_reference = Combine(ampersand + value_reference) + type_field_reference = Combine(ampersand + type_reference) + + # ToDo: Remove size_paren as they are a workaround for + # SEQUENCE/SET OF. + size_paren = (Suppress(Optional(left_parenthesis)) + + size_constraint + + Suppress(Optional(right_parenthesis))) + + class_number = (number | defined_value).setName('ClassNumber') + tag = Group(Optional(Suppress(left_bracket) + - Group(Optional(UNIVERSAL + | APPLICATION + | PRIVATE) + + class_number) + - Suppress(right_bracket) + + Group(Optional(IMPLICIT | EXPLICIT)))) + + any_defined_by_type = (ANY_DEFINED_BY + word) + any_defined_by_type.setName('ANY DEFINED BY') + + identifier_list = delimitedList(identifier) + + # X.683: 8. Parameterized assignments + dummy_reference = reference + dummy_governor = dummy_reference + governor = (type_ | defined_object_class) + param_governor = (governor | dummy_governor) + parameter = (Suppress(Optional(param_governor + colon)) + dummy_reference) + parameter_list = Group(Optional(Suppress(left_brace) + + delimitedList(parameter) + + Suppress(right_brace))) + + # X.683: 9. Referencing parameterized definitions + actual_parameter = Group(type_ + | value + | value_set + | defined_object_class + | object_ + | object_set) + actual_parameter_list = Group(Suppress(left_brace) + + delimitedList(actual_parameter) + + Suppress(right_brace)) + parameterized_object = (defined_object + actual_parameter_list) + parameterized_object_set = (defined_object_set + actual_parameter_list) + parameterized_object_class = (defined_object_class + actual_parameter_list) + parameterized_value_set_type = (simple_defined_type + + actual_parameter_list) + simple_defined_value = (external_value_reference + | value_reference) + parameterized_value = (simple_defined_value + + actual_parameter_list) + simple_defined_type <<= (external_type_reference + | type_reference) + parameterized_type = (simple_defined_type + + actual_parameter_list) + parameterized_reference = (reference + Optional(left_brace + right_brace)) + + # X.682: 11. Contents constraints + contents_constraint = ((CONTAINING + type_) + | (ENCODED_BY + value) + | (CONTAINING + type_ + ENCODED_BY + value)) + + # X.682: 10. Table constraints, including component relation constraints + level = OneOrMore(dot) + component_id_list = identifier + at_notation = (Suppress(at) + - (component_id_list + | Combine(level + component_id_list))) + component_relation_constraint = (left_brace + + Group(Group(defined_object_set)) + + right_brace + + left_brace + - Group(delimitedList(at_notation)) + - right_brace) + component_relation_constraint.setName('"{"') + simple_table_constraint = object_set + table_constraint = (component_relation_constraint + | simple_table_constraint) + + # X.682: 9. User-defined constants + user_defined_constraint_parameter = ((governor + + colon + + (value + | value_set + | object_ + | object_set)) + | type_ + | defined_object_class) + user_defined_constraint = (CONSTRAINED_BY + - left_brace + - Optional(delimitedList( + user_defined_constraint_parameter)) + - right_brace) + user_defined_constraint.setName('CONSTRAINED_BY') + + # X.682: 8. General constraint specification + general_constraint = (user_defined_constraint + | table_constraint + | contents_constraint) + + # X.681: 7. ASN.1 lexical items + object_set_reference = type_reference + value_set_field_reference = NoMatch().setName( + '"valueSetFieldReference" not implemented') + object_field_reference = NoMatch().setName( + '"objectFieldReference" not implemented') + object_set_field_reference = NoMatch().setName( + '"objectSetFieldReference" not implemented') + object_class_reference = (NotAny(reserved_words) + + Regex(r'[A-Z][A-Z0-9-]*')) + object_reference = value_reference + + # X.681: 8. Referencing definitions + external_object_set_reference = NoMatch().setName( + '"externalObjectSetReference" not implemented') + defined_object_set <<= (external_object_set_reference + | object_set_reference) + defined_object <<= NoMatch().setName('"definedObject" not implemented') + defined_object_class <<= object_class_reference + + # X.681: 9. Information object class definition and assignment + field_name = primitive_field_name + primitive_field_name <<= (type_field_reference + | value_field_reference + | value_set_field_reference + | object_field_reference + | object_set_field_reference) + object_set_field_spec = NoMatch().setName('"objectSetFieldSpec" not implemented') + object_field_spec = NoMatch().setName('"objectFieldSpec" not implemented') + variable_type_value_set_field_spec = NoMatch().setName( + '"variableTypeValueSetFieldSpec" not implemented') + fixed_type_value_set_field_spec = NoMatch().setName( + '"fixedTypeValueSetFieldSpec" not implemented') + variable_type_value_field_spec = NoMatch().setName( + '"variableTypeValueFieldSpec" not implemented') + fixed_type_value_field_spec = (value_field_reference + + type_ + + Optional(UNIQUE) + + Optional(OPTIONAL + | (DEFAULT - value))) + type_field_spec = (type_field_reference + + Optional(OPTIONAL + | (DEFAULT - type_))) + field_spec = Group(type_field_spec + | fixed_type_value_field_spec + | variable_type_value_field_spec + | fixed_type_value_set_field_spec + | variable_type_value_set_field_spec + | object_field_spec + | object_set_field_spec) + with_syntax_spec = (WITH_SYNTAX - syntax_list) + object_class_defn = (CLASS + - Suppress(left_brace) + - Group(delimitedList(field_spec)) + - Suppress(right_brace) + - Optional(with_syntax_spec)) + object_class = (object_class_defn + # | defined_object_class + | parameterized_object_class) + parameterized_object_class_assignment = (object_class_reference + + Suppress(parameter_list) + + assign + + object_class) + + # X.681: 10. Syntax list + literal = (word | comma) + required_token = (literal | primitive_field_name) + optional_group = (left_bracket + + OneOrMore(token_or_group_spec) + + right_bracket) + token_or_group_spec <<= (required_token | optional_group) + syntax_list <<= (left_brace + + OneOrMore(token_or_group_spec) + + right_brace) + + # X.681: 11. Information object definition and assignment + setting = (type_ | value | value_set | object_ | object_set | QuotedString('"')) + field_setting = Group(primitive_field_name + setting) + default_syntax = (Suppress(left_brace) + + delimitedList(field_setting) + + Suppress(right_brace)) + defined_syntax_token = (literal | setting) + defined_syntax = (left_brace + ZeroOrMore(defined_syntax_token) + right_brace) + object_defn = Group(default_syntax | defined_syntax) + object_ <<= (defined_object + | object_defn + | object_from_object + | parameterized_object) + parameterized_object_assignment = (object_reference + + Suppress(parameter_list) + + defined_object_class + + Suppress(assign) + + object_) + + # X.681: 12. Information object set definition and assignment + object_set_elements = (object_ + | defined_object_set + | object_set_from_objects + | parameterized_object_set) + object_set_spec = ((root_element_set_spec + + Optional(comma + + ellipsis + + Optional(comma + + additional_element_set_spec))) + | (ellipsis + Optional(comma + additional_element_set_spec))) + object_set <<= (left_brace + Group(object_set_spec) + right_brace) + object_set.setName('"{"') + parameterized_object_set_assignment = (object_set_reference + + Suppress(parameter_list) + + defined_object_class + - assign + - object_set) + + # X.681: 13. Associated tables + + # X.681: 14. Notation for the object class field type + fixed_type_field_val = (builtin_value | referenced_value) + open_type_field_val = (type_ + colon + value) + object_class_field_value = (open_type_field_val + | fixed_type_field_val) + object_class_field_type = Combine(defined_object_class + + dot + + field_name) + object_class_field_type.setName('ObjectClassFieldType') + + # X.681: 15. Information from objects + object_set_from_objects <<= NoMatch().setName( + '"objectSetFromObjects" not implemented') + object_from_object <<= NoMatch().setName('"objectFromObject" not implemented') + + # X.680: 49. The exception identifier + exception_spec = Optional( + exclamation_mark + + NoMatch().setName('"exceptionSpec" not implemented')) + + # X.680: 47. Subtype elements + pattern_constraint = (PATTERN + value) + value_constraint = constraint + presence_constraint = (PRESENT | ABSENT | OPTIONAL) + component_constraint = (Optional(value_constraint) + + Optional(presence_constraint)) + named_constraint = Group(identifier + component_constraint) + type_constraints = delimitedList(named_constraint) + full_specification = (left_brace + Group(type_constraints) + right_brace) + partial_specification = (left_brace + + Group(ellipsis + + Suppress(comma) + + type_constraints) + + right_brace) + single_type_constraint = constraint + multiple_type_constraints = (full_specification | partial_specification) + with_component = WITH_COMPONENT - single_type_constraint + with_components = WITH_COMPONENTS - multiple_type_constraints + inner_type_constraints = with_component | with_components + permitted_alphabet = (FROM - constraint) + type_constraint = type_ + size_constraint <<= (SIZE - Group(constraint)) + upper_end_value = (value | MAX) + lower_end_value = (value | MIN) + upper_endpoint = (Optional(less_than) + upper_end_value) + lower_endpoint = (lower_end_value + Optional(less_than)) + value_range = (((Combine(integer + dot) + Suppress(range_separator)) + | (integer + Suppress(range_separator)) + | (lower_endpoint + Suppress(range_separator))) + - upper_endpoint) + contained_subtype = (Optional(INCLUDES) + type_) + single_value = value + subtype_elements = (size_constraint + | permitted_alphabet + | value_range + | inner_type_constraints + | single_value + | pattern_constraint + | contained_subtype + | type_constraint) + # X.680: 46. Element set specification + union_mark <<= (pipe | UNION) + intersection_mark = (caret | INTERSECTION) + elements = Group(subtype_elements + | object_set_elements + | (left_parenthesis + element_set_spec + right_parenthesis)) + unions = delimitedList(elements, delim=(union_mark | intersection_mark)) + exclusions = (EXCEPT + elements) + element_set_spec <<= (Suppress(ALL + exclusions) | unions) + root_element_set_spec <<= element_set_spec + additional_element_set_spec <<= element_set_spec + element_set_specs = (root_element_set_spec + + Optional(Suppress(comma) - ellipsis + + Optional(Suppress(comma) + - additional_element_set_spec))) + + # X.680: 45. Constrained types + subtype_constraint = element_set_specs + constraint_spec = (general_constraint + | subtype_constraint) + constraint_spec.setName('one or more constraints') + constraint <<= (Suppress(left_parenthesis) + - constraint_spec + - Suppress(right_parenthesis)) + + # X.680: 40. Definition of unrestricted character string types + unrestricted_character_string_type = CHARACTER_STRING + unrestricted_character_string_value = NoMatch().setName( + '"unrestrictedCharacterStringValue" not implemented') + + # X.680: 39. Canonical order of characters + + # X.680: 38. Specification of the ASN.1 module "ASN.1-CHARACTER-MODULE" + + # X.680: 37. Definition of restricted character string types + group = number + plane = number + row = number + cell = number + quadruple = (left_brace + + group + comma + + plane + comma + + row + comma + + cell + + right_brace) + table_column = number + table_row = number + tuple_ = (left_brace + table_column + comma + table_row + right_brace) + chars_defn = (cstring | quadruple | tuple_ | defined_value) + charsyms = delimitedList(chars_defn) + character_string_list = (left_brace + charsyms + right_brace) + restricted_character_string_value = (cstring + | character_string_list + | quadruple + | tuple_) + restricted_character_string_type = (BMPString + | GeneralString + | GraphicString + | IA5String + | ISO646String + | NumericString + | PrintableString + | TeletexString + | UTCTime + | GeneralizedTime + | T61String + | UniversalString + | UTF8String + | VideotexString + | VisibleString) + + # X.680: 36. Notation for character string types + character_string_value = (restricted_character_string_value + | unrestricted_character_string_value) + character_string_type = (restricted_character_string_type + | unrestricted_character_string_type) + + # X.680: 35. The character string types + + # X.680: 34. Notation for the external type + # external_value = sequence_value + + # X.680: 33. Notation for embedded-pdv type + # embedded_pdv_value = sequence_value + + # X.680: 32. Notation for relative object identifier type + relative_oid_components = Group(number_form + | name_and_number_form + | defined_value) + relative_oid_component_list = OneOrMore(relative_oid_components) + relative_oid_value = (Suppress(left_brace) + + relative_oid_component_list + + Suppress(right_brace)) + + # X.680: 31. Notation for object identifier type + name_and_number_form <<= (identifier + + Suppress(left_parenthesis) + - number_form + - Suppress(right_parenthesis)) + number_form <<= (number | defined_value) + name_form = identifier + obj_id_components = Group(name_and_number_form + | defined_value + | number_form + | name_form) + obj_id_components_list = OneOrMore(obj_id_components) + object_identifier_value = ((Suppress(left_brace) + + obj_id_components_list + + Suppress(right_brace)) + | (Suppress(left_brace) + + defined_value + + obj_id_components_list + + Suppress(right_brace))) + + object_identifier_type = (OBJECT_IDENTIFIER + + Optional(left_parenthesis + + delimitedList(word, delim='|') + + right_parenthesis)) + object_identifier_type.setName('OBJECT IDENTIFIER') + + # X.680: 30. Notation for tagged types + tagged_value = NoMatch() + + # X.680: 29. Notation for selection types + + # X.680: 28. Notation for the choice types + alternative_type_list = delimitedList(named_type) + extension_addition_alternatives_group = Group(left_version_brackets + + Suppress(version_number) + - Group(alternative_type_list) + - right_version_brackets) + extension_addition_alternative = (extension_addition_alternatives_group + | named_type) + extension_addition_alternatives_list = delimitedList(extension_addition_alternative) + extension_addition_alternatives = Optional(Suppress(comma) + + extension_addition_alternatives_list) + root_alternative_type_list = alternative_type_list + alternative_type_lists = (root_alternative_type_list + + Optional(Suppress(comma) + + extension_and_exception + + extension_addition_alternatives + + optional_extension_marker)) + choice_type = (CHOICE + - left_brace + + Group(alternative_type_lists) + - right_brace) + choice_type.setName('CHOICE') + choice_value = (identifier + colon + value) + + # X.680: 27. Notation for the set-of types + # set_of_value = NoMatch() + set_of_type = (SET + + Group(Optional(Group(size_constraint) | constraint)) + + OF + + Optional(identifier) + - tag + - type_) + set_of_type.setName('SET OF') + + # X.680: 26. Notation for the set types + # set_value = NoMatch() + set_type = (SET + + left_brace + + Group(Optional(component_type_lists + | (extension_and_exception + + optional_extension_marker))) + - right_brace) + set_type.setName('SET') + + # X.680: 25. Notation for the sequence-of types + sequence_of_value = NoMatch() + sequence_of_type = (SEQUENCE + + Group(Optional(Group(size_constraint) | constraint)) + + OF + + Optional(identifier) + - tag + - type_) + sequence_of_type.setName('SEQUENCE OF') + + # X.680: 24. Notation for the sequence types + component_value_list = delimitedList(named_value) + sequence_value <<= (left_brace + + Optional(component_value_list) + + right_brace) + component_type = Group(named_type + + Group(Optional(OPTIONAL + | (DEFAULT + value))) + | (COMPONENTS_OF - type_)) + version_number <<= Optional(number + Suppress(colon)) + extension_addition_group = Group(left_version_brackets + + Suppress(version_number) + + Group(delimitedList(component_type)) + + right_version_brackets) + extension_and_exception <<= (ellipsis + Optional(exception_spec)) + extension_addition = (component_type | extension_addition_group) + extension_addition_list = delimitedList(extension_addition) + extension_additions = Optional(Suppress(comma) + extension_addition_list) + extension_end_marker = (Suppress(comma) + ellipsis) + optional_extension_marker <<= Optional(Suppress(comma) + ellipsis) + component_type_list = delimitedList(component_type) + root_component_type_list = component_type_list + component_type_lists <<= ((root_component_type_list + + Optional(Suppress(comma) + + extension_and_exception + + extension_additions + + ((extension_end_marker + + Suppress(comma) + + root_component_type_list) + | optional_extension_marker))) + | (extension_and_exception + + extension_additions + + ((extension_end_marker + + Suppress(comma) + + root_component_type_list) + | optional_extension_marker))) + sequence_type = (SEQUENCE + - left_brace + + Group(Optional(component_type_lists + | (extension_and_exception + + optional_extension_marker))) + - right_brace) + sequence_type.setName('SEQUENCE') + + # X.680: 23. Notation for the null type + null_value = NULL + null_type = NULL + + # X.680: 22. Notation for the octetstring type + # octet_string_value = (bstring + # | hstring + # | (CONTAINING + value)) + octet_string_type = OCTET_STRING + octet_string_type.setName('OCTET STRING') + + # X.680: 21. Notation for the bitstring type + bit_string_type = (BIT_STRING + + Group(Optional( + Suppress(left_brace) + + delimitedList(Group(word + + Suppress(left_parenthesis) + + word + + Suppress(right_parenthesis))) + + Suppress(right_brace)))) + bit_string_type.setName('BIT STRING') + bit_string_value = Tag('BitStringValue', + bstring + | hstring + | Tag('IdentifierList', + Suppress(left_brace) + + Optional(identifier_list) + + Suppress(right_brace)) + | (CONTAINING - value)) + + # X.680: 20. Notation for the real type + special_real_value = (PLUS_INFINITY + | MINUS_INFINITY) + numeric_real_value = (real_number + | sequence_value) + real_value = (numeric_real_value + | special_real_value) + real_type = REAL + real_type.setName('REAL') + + # X.680: 19. Notation for the enumerated type + enumerated_value = identifier + enumeration_item = (named_number | identifier) + enumeration = delimitedList(enumeration_item) + root_enumeration = enumeration + additional_enumeration = enumeration + enumerations = Group(Group(root_enumeration) + + Group(Optional(Group(Suppress(comma + - ellipsis + + exception_spec)) + + Optional(Suppress(comma) + - additional_enumeration)))) + enumerated_type = (ENUMERATED + - left_brace + + enumerations + - right_brace) + enumerated_type.setName('ENUMERATED') + + # X.680: 18. Notation for the integer type + integer_value = (signed_number | identifier) + signed_number <<= Combine(Optional('-') + number) + named_number <<= Group(identifier + + left_parenthesis + + (signed_number | defined_value) + + right_parenthesis) + named_number_list = delimitedList(named_number) + integer_type = (INTEGER + + Group(Optional(Suppress(left_brace) + + named_number_list + + Suppress(right_brace)))) + integer_type.setName('INTEGER') + + # X.680: 17. Notation for boolean type + boolean_type = BOOLEAN + boolean_value = (TRUE | FALSE) + + # X.680: 16. Definition of types and values + named_value <<= (identifier + value) + referenced_value <<= NoMatch().setName('"referencedValue" not implemented') + builtin_value <<= (bit_string_value + | boolean_value + | character_string_value + | choice_value + | relative_oid_value + | sequence_value + # | embedded_pdv_value + | enumerated_value + # | external_value + # | instance_of_value + | real_value + | integer_value + | null_value + | object_identifier_value + # | octet_string_value + | sequence_of_value + # | set_value + # | set_of_value + | tagged_value) + value <<= Group(object_class_field_value) + # | referenced_value + # | builtin_value) + named_type <<= Group(identifier + - tag + - type_) + referenced_type = defined_type + referenced_type.setName('ReferencedType') + builtin_type = (choice_type + | integer_type + | null_type + | real_type + | bit_string_type + | octet_string_type + | enumerated_type + | sequence_of_type + | sequence_type + | object_class_field_type + | set_of_type + | set_type + | object_identifier_type + | boolean_type + | character_string_type) + type_ <<= Group((builtin_type + | any_defined_by_type + | referenced_type).setName('Type') + + Group(ZeroOrMore(constraint))) + + # X.680: 15. Assigning types and values + type_reference <<= (NotAny(reserved_words) + + Regex(r'[A-Z][a-zA-Z0-9-]*')) + value_reference <<= Regex(r'[a-z][a-zA-Z0-9-]*') + value_set <<= NoMatch().setName('"valueSet" not implemented') + parameterized_type_assignment = (type_reference + + parameter_list + - assign + - tag + - type_) + parameterized_value_assignment = (value_reference + + Suppress(parameter_list) + - Group(type_) + - Suppress(assign) + - value) + + # X.680: 14. Notation to support references to ASN.1 components + + # X.680: 13. Referencing type and value definitions + external_value_reference <<= (module_reference + + dot + + value_reference) + external_type_reference <<= (module_reference + + dot + + type_reference) + defined_type <<= (external_type_reference + | parameterized_type + | parameterized_value_set_type + | type_reference) + defined_value <<= (external_value_reference + | parameterized_value + | value_reference) + + # X.680: 12. Module definition + module_reference <<= (NotAny(reserved_words) + + Regex(r'[A-Z][a-zA-Z0-9-]*').setName('modulereference')) + assigned_identifier = Suppress(Optional(object_identifier_value + | (defined_value + ~(comma | FROM)))) + global_module_reference = (module_reference + assigned_identifier) + reference <<= (type_reference + | value_reference + | object_class_reference + | object_reference + | object_set_reference) + symbol = (parameterized_reference + | reference) + symbol_list = Group(delimitedList(symbol)) + symbols_from_module = (symbol_list + + FROM + + global_module_reference + + Suppress(Optional(WITH_SUCCESSORS + | WITH_DESCENDANTS))) + symbols_imported = ZeroOrMore(Group(symbols_from_module)) + imports = Optional(Suppress(IMPORTS) + - symbols_imported + - Suppress(semi_colon)) + symbols_exported = OneOrMore(symbol_list) + exports = Suppress(Optional(EXPORTS + - (ALL | symbols_exported) + semi_colon)) + assignment = (parameterized_object_set_assignment + | parameterized_object_assignment + | parameterized_object_class_assignment + | parameterized_type_assignment + | parameterized_value_assignment) + assignment_list = ZeroOrMore(assignment) + module_body = (exports + imports + assignment_list) + definitive_name_and_number_form = (identifier + + Suppress(left_parenthesis) + - definitive_number_form + - Suppress(right_parenthesis)) + definitive_number_form <<= number + definitive_obj_id_component = Group(definitive_name_and_number_form + | name_form + | definitive_number_form) + definitive_obj_id_components_list = OneOrMore(definitive_obj_id_component) + definitive_identifier = Group(Optional(Suppress(left_brace) + - definitive_obj_id_components_list + - Suppress(right_brace))) + module_identifier = (module_reference + + definitive_identifier) + tag_default = Group(Optional((AUTOMATIC | EXPLICIT | IMPLICIT) + TAGS)) + extension_default = Group(Optional(EXTENSIBILITY_IMPLIED)) + module_definition = (Group(module_identifier + - Suppress(DEFINITIONS) + + tag_default + + extension_default + - Suppress(assign) + - Suppress(BEGIN)) + + Group(module_body) + - Suppress(END)) + + # The whole specification. + specification = OneOrMore(module_definition) + StringEnd() + + # Parse actions converting tokens to asn1tools representation. + integer.setParseAction(convert_integer) + signed_number.setParseAction(convert_integer) + real_number.setParseAction(convert_real_number) + bstring.setParseAction(convert_bstring) + hstring.setParseAction(convert_hstring) + value_range.setParseAction(convert_value_range) + with_component.setParseAction(convert_inner_type_constraints) + with_components.setParseAction(convert_inner_type_constraints) + size_constraint.setParseAction(convert_size_constraint) + permitted_alphabet.setParseAction(convert_permitted_alphabet) + constraint.setParseAction(convert_constraint) + module_body.setParseAction(convert_module_body) + specification.setParseAction(convert_specification) + module_definition.setParseAction(convert_module_definition) + assignment_list.setParseAction(convert_assignment_list) + imports.setParseAction(convert_imports) + parameterized_object_set_assignment.setParseAction( + convert_parameterized_object_set_assignment) + parameterized_object_assignment.setParseAction( + convert_parameterized_object_assignment) + parameterized_object_class_assignment.setParseAction( + convert_parameterized_object_class_assignment) + parameterized_type_assignment.setParseAction( + convert_parameterized_type_assignment) + parameterized_value_assignment.setParseAction( + convert_parameterized_value_assignment) + sequence_type.setParseAction(convert_sequence_type) + sequence_of_type.setParseAction(convert_sequence_of_type) + set_type.setParseAction(convert_set_type) + set_of_type.setParseAction(convert_set_of_type) + integer_type.setParseAction(convert_integer_type) + real_type.setParseAction(convert_real_type) + boolean_type.setParseAction(convert_boolean_type) + bit_string_type.setParseAction(convert_bit_string_type) + octet_string_type.setParseAction(convert_octet_string_type) + null_type.setParseAction(convert_null_type) + object_identifier_type.setParseAction(convert_object_identifier_type) + enumerated_type.setParseAction(convert_enumerated_type) + choice_type.setParseAction(convert_choice_type) + defined_type.setParseAction(convert_defined_type) + character_string_type.setParseAction(convert_keyword_type) + object_class_field_type.setParseAction(convert_keyword_type) + any_defined_by_type.setParseAction(convert_any_defined_by_type) + actual_parameter_list.setParseAction(convert_actual_parameter_list) + parameter_list.setParseAction(convert_parameter_list) + + return specification + + +def ignore_comments(string): + """Ignore comments in given string by replacing them with spaces. This + reduces the parsing time by roughly a factor of two. + + """ + + comments = [ + (mo.start(), mo.group(0)) + for mo in re.finditer(r'(/\*|\*/|--|\n)', string) + ] + + comments.sort() + + in_single_line_comment = False + multi_line_comment_depth = 0 + start_offset = 0 + non_comment_offset = 0 + chunks = [] + + for offset, kind in comments: + if in_single_line_comment: + if kind in ['--', '\n']: + in_single_line_comment = False + + if kind == '--': + offset += 2 + + chunks.append(' ' * (offset - start_offset)) + non_comment_offset = offset + elif multi_line_comment_depth > 0: + if kind == '/*': + multi_line_comment_depth += 1 + elif kind == '*/': + multi_line_comment_depth -= 1 + + if multi_line_comment_depth == 0: + offset += 2 + chunks.append(' ' * (offset - start_offset)) + non_comment_offset = offset + elif kind == '--': + in_single_line_comment = True + start_offset = offset + chunks.append(string[non_comment_offset:start_offset]) + elif kind == '/*': + multi_line_comment_depth = 1 + start_offset = offset + chunks.append(string[non_comment_offset:start_offset]) + + if in_single_line_comment: + raise ParseSyntaxException( + string, + start_offset, + 'Missing newline or -- for single line comment') + + if multi_line_comment_depth > 0: + raise ParseSyntaxException( + string, + start_offset, + 'Missing */ for multi line comment') + + chunks.append(string[non_comment_offset:]) + + return ''.join(chunks) + + +def parse_string(string): + """Parse given ASN.1 specification string and return a dictionary of + its contents. + + The dictionary can later be compiled with + :func:`~asn1tools.compile_dict()`. + + >>> with open('foo.asn') as fin: + ... foo = asn1tools.parse_string(fin.read()) + + """ + + grammar = create_grammar() + + try: + string = ignore_comments(string) + tokens = grammar.parseString(string).asList() + except (ParseException, ParseSyntaxException) as e: + raise ParseError("Invalid ASN.1 syntax at line {}, column {}: '{}': {}.".format( + e.lineno, + e.column, + e.markInputline(), + e.msg)) + + return tokens[0] + + +def parse_files(filenames, encoding='utf-8'): + """Parse given ASN.1 specification file(s) and return a dictionary of + its/their contents. + + The dictionary can later be compiled with + :func:`~asn1tools.compile_dict()`. + + `encoding` is the text encoding. This argument is passed to the + built-in function `open()`. + + >>> foo = asn1tools.parse_files('foo.asn') + + """ + + if isinstance(filenames, str): + filenames = [filenames] + + string = '' + + for filename in filenames: + if sys.version_info[0] < 3: + with open(filename, 'r') as fin: + string += fin.read() + string += '\n' + else: + with open(filename, 'r', encoding=encoding, errors='replace') as fin: + string += fin.read() + string += '\n' + + return parse_string(string) diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/__init__.py b/.venv/lib/python3.12/site-packages/asn1tools/source/__init__.py new file mode 100644 index 0000000..3b2bda0 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/__init__.py @@ -0,0 +1 @@ +# Source code generators. diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/c/__init__.py b/.venv/lib/python3.12/site-packages/asn1tools/source/c/__init__.py new file mode 100644 index 0000000..13a5174 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/c/__init__.py @@ -0,0 +1,420 @@ +import time + +from ...version import __version__ +from . import oer +from . import uper +from .utils import camel_to_snake_case + + +HEADER_FMT = '''\ +/** + * The MIT License (MIT) + * + * Copyright (c) 2018-2019 Erik Moqvist + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * This file was generated by asn1tools version {version} {date}. + */ + +#ifndef {include_guard} +#define {include_guard} + +#include +#include +#include + +#ifndef ENOMEM +# define ENOMEM 12 +#endif + +#ifndef EINVAL +# define EINVAL 22 +#endif + +#ifndef EOUTOFDATA +# define EOUTOFDATA 500 +#endif + +#ifndef EBADCHOICE +# define EBADCHOICE 501 +#endif + +#ifndef EBADLENGTH +# define EBADLENGTH 502 +#endif + +#ifndef EBADENUM +# define EBADENUM 503 +#endif + +{structs} +{declarations} +#endif +''' + +SOURCE_FMT = '''\ +/** + * The MIT License (MIT) + * + * Copyright (c) 2018-2019 Erik Moqvist + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * This file was generated by asn1tools version {version} {date}. + */ + +#include + +#include "{header}" + +{helpers} +{definitions}\ +''' + +FUZZER_SOURCE_FMT = '''\ +/** + * The MIT License (MIT) + * + * Copyright (c) 2018-2019 Erik Moqvist + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * This file was generated by asn1tools version {version} {date}. + */ + +#include +#include +#include +#include +#include + +#include "{header}" + +static void assert_first_encode(ssize_t res) +{{ + if (res < 0) {{ + printf("First encode failed with %ld.\\n", res); + __builtin_trap(); + }} +}} + +static void assert_second_decode(ssize_t res) +{{ + if (res < 0) {{ + printf("Second decode failed with %ld.\\n", res); + __builtin_trap(); + }} +}} + +static void assert_second_decode_data(const void *decoded_p, + const void *decoded2_p, + size_t size) +{{ + if (memcmp(decoded_p, decoded2_p, size) != 0) {{ + printf("Second decode data does not match first decoded data.\\n"); + __builtin_trap(); + }} +}} + +static void assert_second_encode(ssize_t res, ssize_t res2) +{{ + if (res != res2) {{ + printf("Second encode result %ld does not match first pack " + "result %ld.\\n", + res, + res2); + __builtin_trap(); + }} +}} + +static void assert_second_encode_data(const uint8_t *encoded_p, + const uint8_t *encoded2_p, + ssize_t size) +{{ + ssize_t i; + + if (memcmp(encoded_p, encoded2_p, size) != 0) {{ + for (i = 0; i < size; i++) {{ + printf("[%04ld]: 0x%02x 0x%02x\\n", i, encoded_p[i], encoded2_p[i]); + }} + + __builtin_trap(); + }} +}} + +{tests} + +int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) +{{ +{llvm_body} + + return (0); +}} +''' + +FUZZER_MAKEFILE_FMT = '''\ +# +# The MIT License (MIT) +# +# Copyright (c) 2018-2019 Erik Moqvist +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, sublicense, and/or sell copies +# of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# +# This file was generated by asn1tools version {version} {date}. +# + +CC = clang +EXE = fuzzer +C_SOURCES = \\ +\t{source} \\ +\t{fuzzer_source} +CFLAGS = \\ +\t-fprofile-instr-generate \\ +\t-fcoverage-mapping \\ +\t-I. \\ +\t-g -fsanitize=address,fuzzer \\ +\t-fsanitize=signed-integer-overflow \\ +\t-fno-sanitize-recover=all +EXECUTION_TIME ?= 5 + +all: +\t$(CC) $(CFLAGS) $(C_SOURCES) -o $(EXE) +\trm -f $(EXE).profraw +\tLLVM_PROFILE_FILE="$(EXE).profraw" \\ +\t ./$(EXE) \\ +\t -max_total_time=$(EXECUTION_TIME) +\tllvm-profdata merge -sparse $(EXE).profraw -o $(EXE).profdata +\tllvm-cov show ./$(EXE) -instr-profile=$(EXE).profdata +\tllvm-cov report ./$(EXE) -instr-profile=$(EXE).profdata + +''' + +TEST_FMT = ''' +static void test_{name}( + const uint8_t *encoded_p, + size_t size) +{{ + ssize_t res; + ssize_t res2; + ssize_t i; + uint8_t encoded[size]; + uint8_t encoded2[size]; + struct {name}_t decoded; + struct {name}_t decoded2; + + memset(&decoded, 0, sizeof(decoded)); + + res = {name}_decode( + &decoded, + encoded_p, + size); + + if (res >= 0) {{ + res = {name}_encode( + &encoded[0], + sizeof(encoded), + &decoded); + + assert_first_encode(res); + + memset(&decoded2, 0, sizeof(decoded2)); + + res2 = {name}_decode( + &decoded2, + &encoded[0], + res); + + assert_second_decode(res2); + assert_second_decode_data(&decoded, + &decoded2, + sizeof(decoded)); + + res2 = {name}_encode( + &encoded2[0], + sizeof(encoded2), + &decoded); + + assert_second_encode(res, res2); + assert_second_encode_data(&encoded[0], &encoded2[0], res); + }} +}}\ +''' + + +def _generate_fuzzer_source(namespace, + compiled, + date, + header_name, + source_name, + fuzzer_source_name): + tests = [] + calls = [] + + for module_name, module in sorted(compiled.modules.items()): + for type_name in sorted(module): + name = '{}_{}_{}'.format(namespace, + camel_to_snake_case(module_name), + camel_to_snake_case(type_name)) + + test = TEST_FMT.format(name=name) + tests.append(test) + + call = ' test_{}(data_p, size);'.format(name) + calls.append(call) + + source = FUZZER_SOURCE_FMT.format(version=__version__, + date=date, + header=header_name, + tests='\n'.join(tests), + llvm_body='\n'.join(calls)) + + makefile = FUZZER_MAKEFILE_FMT.format(version=__version__, + date=date, + source=source_name, + fuzzer_source=fuzzer_source_name) + + return source, makefile + + +def generate(compiled, + codec, + namespace, + header_name, + source_name, + fuzzer_source_name): + """Generate C source code from given compiled specification. + + `namespace` is used as a prefix for all defines, data structures + and functions. + + `header_name` is the file name of the C header file, which is + included by the C source file. + + `source_name` is the file name of the C source file, which is + needed by the fuzzer makefile. + + `fuzzer_source_name` is the file name of the C source file, which + is needed by the fuzzer makefile. + + This function returns a tuple of the C header and source files as + strings. + + """ + + date = time.ctime() + namespace = camel_to_snake_case(namespace) + include_guard = '{}_H'.format(namespace.upper()) + + if codec == 'oer': + structs, declarations, helpers, definitions = oer.generate( + compiled, + namespace) + elif codec == 'uper': + structs, declarations, helpers, definitions = uper.generate( + compiled, + namespace) + else: + raise Exception() + + header = HEADER_FMT.format(version=__version__, + date=date, + include_guard=include_guard, + structs=structs, + declarations=declarations) + + source = SOURCE_FMT.format(version=__version__, + date=date, + header=header_name, + helpers=helpers, + definitions=definitions) + + fuzzer_source, fuzzer_makefile = _generate_fuzzer_source( + namespace, + compiled, + date, + header_name, + source_name, + fuzzer_source_name) + + return header, source, fuzzer_source, fuzzer_makefile diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/c/oer.py b/.venv/lib/python3.12/site-packages/asn1tools/source/c/oer.py new file mode 100644 index 0000000..3863f43 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/c/oer.py @@ -0,0 +1,1113 @@ +"""Basic Octet Encoding Rules (OER) C source code codec generator. + +""" +from operator import itemgetter + +import bitstruct +import textwrap + +from .utils import ENCODER_AND_DECODER_STRUCTS +from .utils import Generator +from .utils import camel_to_snake_case +from .utils import is_user_type +from .utils import indent_lines +from .utils import dedent_lines +from .utils import canonical +from .oer_functions import functions +from ...codecs import oer + + +def get_encoded_real_lengths(type_): + return [4] if type_.fmt == '>f' else [8] + + +def get_sequence_optionals(type_): + return [ + member + for member in type_.root_members + if member.optional or member.default is not None + ] + + +def get_sequence_extension_bit(type_): + return 1 if type_.additions is not None else 0 + + +def get_sequence_present_mask_length(optionals, extension_bit): + return (len(optionals) + extension_bit + 7) // 8 + + +def get_length_determinant_length(length): + if length < 128: + return 1 + elif length < 256: + return 2 + elif length < 65536: + return 3 + elif length < 1677726: + return 4 + else: + return 5 + + +def add_encoded_lengths(lengths): + length = 0 + + for length_part in lengths: + + if isinstance(length_part, int): + length += length_part + else: + length = None + break + + return length + + +def encoded_lengths_as_string(lengths): + length = 0 + length_strings = [] + + for length_part in lengths: + + if isinstance(length_part, int): + length += length_part + else: + length_strings.append(length_part) + + if length > 0 or len(length_strings) == 0: + length_strings.append(str(length) + 'u') + + return ' + '.join(length_strings) + + +def get_sequence_additions_mask_length(additions): + return (len(additions) + 7) // 8 + + +def format_null_inner(): + return ( + [ + '(void)encoder_p;', + '(void)src_p;' + ], + [ + '(void)decoder_p;', + '(void)dst_p;' + ] + ) + + +class _Generator(Generator): + + def __init__(self, namespace): + super(_Generator, self).__init__(namespace) + self.additional_helpers = {} + + def format_real(self, type_): + if type_.fmt is None: + raise self.error('REAL not IEEE 754 binary32 or binary64.') + + if type_.fmt == '>f': + return ['float'] + else: + return ['double'] + + def get_enumerated_value_length(self, value): + if -128 <= value < 128: + return 1 + elif -32768 <= value < 32768: + return 2 + elif -8388608 <= value < 8388608: + return 3 + elif -2147483648 <= value < 2147483648: + return 4 + else: + raise self.error( + '{} does not fit in int32_t.'.format(value)) + + def get_enumerated_values(self, type_): + return sorted([(canonical(data), value) + for data, value in type_.data_to_value.items()], + key=itemgetter(1)) + + def get_choice_members(self, type_): + return type_.root_members + + def format_default(self, type_): + if isinstance(type_, oer.Boolean): + return str(type_.default).lower() + elif isinstance(type_, oer.Enumerated): + return self.format_default_enumerated(type_) + else: + return str(type_.default) + + def format_type(self, type_, checker): + if isinstance(type_, oer.Integer): + return self.format_integer(checker) + elif isinstance(type_, oer.Boolean): + return self.format_boolean() + elif isinstance(type_, oer.Real): + return self.format_real(type_) + elif isinstance(type_, oer.Null): + return [] + elif is_user_type(type_): + return self.format_user_type(type_.type_name, + type_.module_name) + elif isinstance(type_, oer.OctetString): + return self.format_octet_string(checker) + elif isinstance(type_, oer.Sequence): + return self.format_sequence(type_, checker) + elif isinstance(type_, oer.Choice): + return self.format_choice(type_, checker) + elif isinstance(type_, oer.SequenceOf): + return self.format_sequence_of(type_, checker) + elif isinstance(type_, oer.Enumerated): + return self.format_enumerated(type_) + elif isinstance(type_, oer.BitString): + return self.format_bit_string(type_, checker) + else: + raise self.error( + "Unsupported type '{}'.".format(type_.type_name)) + + def get_encoded_type_lengths(self, type_, checker): + if isinstance(type_, oer.Integer): + return self.get_encoded_integer_lengths(checker) + elif isinstance(type_, oer.Boolean): + return [1] + elif isinstance(type_, oer.Real): + return get_encoded_real_lengths(type_) + elif isinstance(type_, oer.Null): + return [0] + elif isinstance(type_, oer.OctetString): + return self.get_encoded_octet_string_lengths(type_, checker) + elif isinstance(type_, oer.Sequence): + return self.get_encoded_sequence_lengths(type_, checker) + elif isinstance(type_, oer.Choice): + return self.get_encoded_choice_lengths(type_, checker) + elif isinstance(type_, oer.SequenceOf): + return self.get_encoded_sequence_of_lengths(type_, checker) + elif isinstance(type_, oer.Enumerated): + return self.get_encoded_enumerated_length(type_) + else: + raise self.error( + "Unsupported type '{}'.".format(type_.type_name)) + + def generate_type_declaration_process(self, type_, checker): + if isinstance(type_, oer.Integer): + lines = self.format_integer(checker) + lines[0] += ' value;' + elif isinstance(type_, oer.Boolean): + lines = self.format_boolean() + lines[0] += ' value;' + elif isinstance(type_, oer.Real): + lines = self.format_real(type_) + lines[0] += ' value;' + elif isinstance(type_, oer.Enumerated): + lines = self.format_enumerated(type_) + lines[0] += ' value;' + elif isinstance(type_, oer.Sequence): + lines = self.format_sequence(type_, checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, oer.SequenceOf): + lines = self.format_sequence_of(type_, checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, oer.Choice): + lines = self.format_choice(type_, checker) + lines = dedent_lines(lines[1:-1]) + elif isinstance(type_, oer.OctetString): + lines = self.format_octet_string(checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, oer.BitString): + lines = self.format_bit_string(type_, checker) + lines[0] += ' value;' + elif isinstance(type_, oer.Null): + lines = [] + else: + raise self.error( + "Unsupported type '{}'.".format(type_.type_name)) + + return lines + + def format_integer_inner(self, checker): + type_name = self.format_type_name(checker.minimum, checker.maximum)[:-2] + + return ( + [ + 'encoder_append_{}(encoder_p, src_p->{});'.format( + type_name, + self.location_inner()) + ], + [ + 'dst_p->{} = decoder_read_{}(decoder_p);'.format( + self.location_inner(), + type_name) + ] + ) + + def format_bit_string_inner(self, checker): + max_value = 2**checker.minimum - 1 + type_name = self.format_type_name(max_value, max_value) + type_length = self.value_length(max_value) + + if type_length <= 4: + encode_lines = [ + 'encoder_append_uint(encoder_p, (uint32_t)src_p->{}, {});'.format( + self.location_inner(), + type_length) + ] + decode_lines = [ + 'dst_p->{} = ({})decoder_read_uint(decoder_p, {});'.format( + self.location_inner(), + type_name, + type_length) + ] + else: + encode_lines = [ + 'encoder_append_long_uint(encoder_p, (uint64_t)src_p->{}, {});'.format( + self.location_inner(), + type_length) + ] + decode_lines = [ + 'dst_p->{} = ({})decoder_read_long_uint(decoder_p, {});'.format( + self.location_inner(), + type_name, + type_length) + ] + + if type_length == 3: + decode_lines += [ + 'dst_p->{} &= 0x00ffffffu;'.format( + self.location_inner()) + ] + + return encode_lines, decode_lines + + def get_encoded_integer_lengths(self, checker): + return [self.type_length(checker.minimum, checker.maximum) // 8] + + def format_boolean_inner(self): + return ( + [ + 'encoder_append_bool(encoder_p, src_p->{});'.format( + self.location_inner()) + ], + [ + 'dst_p->{} = decoder_read_bool(decoder_p);'.format( + self.location_inner()) + ] + ) + + def format_real_inner(self, type_): + if type_.fmt == '>f': + c_type = 'float' + else: + c_type = 'double' + + return ( + [ + 'encoder_append_{}(encoder_p, src_p->{});'.format( + c_type, + self.location_inner()) + ], + [ + 'dst_p->{} = decoder_read_{}(decoder_p);'.format( + self.location_inner(), + c_type) + ] + ) + + def format_sequence_inner(self, type_, checker): + encode_lines = [] + decode_lines = [] + + optionals = get_sequence_optionals(type_) + extension_bit = get_sequence_extension_bit(type_) + + present_mask_length = get_sequence_present_mask_length(optionals, + extension_bit) + default_condition_by_member_name = {} + + if present_mask_length > 0: + fmt = 'uint8_t {{}}[{}];'.format(present_mask_length) + unique_present_mask = self.add_unique_variable(fmt, 'present_mask') + start_set_byte = 0 + + if extension_bit == 1 and len(type_.additions) > 0: + if_line = 'if({}) {{'.format(self.get_addition_present_condition(type_)) + encode_lines.extend(textwrap.wrap(if_line, 100, + subsequent_indent=' ' * len('if('))) + encode_lines.append(' {}[0] = 0x80;'.format(unique_present_mask)) + encode_lines.append('}') + encode_lines.append('else {') + encode_lines.append(' {}[0] = 0x0;'.format(unique_present_mask)) + encode_lines.append('}') + start_set_byte = 1 + + for i in range(start_set_byte, present_mask_length): + encode_lines.append('{}[{}] = 0;'.format(unique_present_mask, i)) + + encode_lines.append('') + + decode_lines += [ + 'decoder_read_bytes(decoder_p,', + ' &{}[0],'.format(unique_present_mask), + ' sizeof({}));'.format(unique_present_mask), + '' + ] + + for i, member in enumerate(optionals, start=extension_bit): + byte, bit = divmod(i, 8) + mask = '0x{:02x}'.format(1 << (7 - bit)) + present_mask = '{}[{}]'.format(unique_present_mask, + byte) + default_condition = '({0} & {1}u) == {1}u'.format(present_mask, mask) + default_condition_by_member_name[member.name] = default_condition + + if member.optional: + encode_lines += [ + 'if (src_p->{}is_{}_present) {{'.format( + self.location_inner('', '.'), + canonical(member.name)), + ' {} |= {}u;'.format(present_mask, mask), + '}', + '' + ] + decode_lines.append( + 'dst_p->{0}is_{1}_present = (({2} & {3}u) == {3}u);'.format( + self.location_inner('', '.'), + canonical(member.name), + present_mask, + mask)) + else: + inner = ' {} |= {}u;'.format(present_mask, mask) + + if self.is_buffer_type(member): + default_variable = canonical(member.name) + '_default' + + encode_lines += [ + 'if ((memcmp(src_p->{}{}.buf, {}, sizeof({})) != 0) ||'.format( + self.location_inner('', '.'), + canonical(member.name), + default_variable, + default_variable, + self.format_default(member)), + ' (src_p->{}{}.length != sizeof({}))) {{'.format( + self.location_inner('', '.'), + canonical(member.name), + default_variable), + inner, + '}', + '' + ] + else: + encode_lines += [ + 'if (src_p->{}{}{} != {}) {{'.format( + self.location_inner('', '.'), + canonical(member.name), + '.value' if self.is_complex_user_type(member) else '', + self.format_default(member)), + inner, + '}', + '' + ] + + encode_lines += [ + 'encoder_append_bytes(encoder_p,', + ' &{}[0],'.format(unique_present_mask), + ' sizeof({}));'.format(unique_present_mask), + '' + ] + decode_lines.append('') + + for member in type_.root_members: + (member_encode_lines, + member_decode_lines) = self.format_sequence_inner_member( + member, + checker, + default_condition_by_member_name) + + encode_lines += member_encode_lines + decode_lines += member_decode_lines + + if type_.additions is not None and len(type_.additions) > 0: + additions_encode_lines, additions_decode_lines = ( + self.format_sequence_additions(type_, checker)) + + addition_condition = 'if(({}[0] & 0x80u) == 0x80u) {{'.format( + unique_present_mask) + encode_lines += [ + '', + addition_condition + ] + indent_lines(additions_encode_lines) + [ + '}' + ] + + decode_lines += [ + '', + addition_condition + ] + indent_lines(additions_decode_lines) + [ + '}', + 'else {' + ] + [ + ' dst_p->{}is_{}_addition_present = false;'.format( + self.location_inner('', '.'), addition.name) + for addition in type_.additions] + [ + '}' + ] + + return encode_lines, decode_lines + + def format_sequence_additions(self, type_, checker): + encode_lines = [''] + decode_lines = [''] + + addition_mask_length = get_sequence_additions_mask_length(type_.additions) + addition_mask_unused_bits = (addition_mask_length * 8) - len(type_.additions) + + encode_lines.append('encoder_append_length_determinant(encoder_p, {});'.format( + addition_mask_length + 1)) + unique_addition_length = self.add_unique_decode_variable( + 'uint32_t {};', 'addition_length') + decode_lines += [ + '{} = decoder_read_length_determinant(decoder_p);'.format( + unique_addition_length), + '', + 'if({} <= 1u) {{'.format(unique_addition_length), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '{} -= 1u;'.format(unique_addition_length)] + + encode_lines.append('encoder_append_uint8(encoder_p, {});'.format( + addition_mask_unused_bits)) + unique_addition_unused_bits = self.add_unique_decode_variable( + 'uint8_t {};', 'addition_unused_bits') + unique_addition_bits = self.add_unique_decode_variable( + 'uint32_t {};', 'addition_bits') + decode_lines += [ + '{} = decoder_read_uint8(decoder_p);'.format(unique_addition_unused_bits), + '', + 'if ({} > 7u) {{'.format(unique_addition_unused_bits), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '{} = (({} * 8u) - {});'.format(unique_addition_bits, unique_addition_length, + unique_addition_unused_bits)] + + fmt = 'uint8_t {{}}[{}];'.format(addition_mask_length) + unique_addition_mask = self.add_unique_variable( + fmt, 'addition_mask') + + for i in range(addition_mask_length): + encode_lines.append('{}[{}] = 0;'.format(unique_addition_mask, i)) + + for i, addition in enumerate(type_.additions): + byte, bit = divmod(i, 8) + mask = '0x{:02x}'.format(1 << (7 - bit)) + addition_mask = '{}[{}]'.format(unique_addition_mask, + byte) + encode_lines += [ + '', + 'if (src_p->{}is_{}_addition_present) {{'.format( + self.location_inner('', '.'), addition.name), + ' {} |= {}u;'.format(addition_mask, mask), + '}' + ] + encode_lines += [ + 'encoder_append_bytes(encoder_p,', + ' &{}[0],'.format(unique_addition_mask), + ' sizeof({}));'.format(unique_addition_mask)] + + unique_i = self.add_unique_decode_variable('uint32_t {};', 'i') + unique_tmp_addition_mask = self.add_unique_decode_variable('uint8_t {};', + 'tmp_addition_mask') + unique_unknown_addition_bits = self.add_unique_decode_variable( + 'uint32_t {};', 'unknown_addition_bits') + unique_mask = self.add_unique_decode_variable('uint8_t {};', 'mask') + + decode_lines += [ + 'decoder_read_bytes(decoder_p,', + ' {mask},'.format(mask=unique_addition_mask), + ' ({read} < {defined}u) ? {read} : {defined}u);'.format( + read=unique_addition_length, defined=addition_mask_length), + '', + '{} = {}[{}];'.format(unique_tmp_addition_mask, unique_addition_mask, + addition_mask_length - 1), + '{} = 0x{:02x};'.format(unique_mask, 0x80 >> (len(type_.additions) % 8)), + '{} = 0;'.format(unique_unknown_addition_bits), + '', + 'for (i = {}; i < {}; i++) {{'.format(len(type_.additions), + unique_addition_bits), + '', + ' if ({} == 0u) {{'.format(unique_mask), + ' decoder_read_bytes(decoder_p, &{}, 1);'.format( + unique_tmp_addition_mask), + '', + ' if (decoder_get_result(decoder_p) < 0) {', + '', + ' return;', + ' }', + ' {} = 0x80;'.format(unique_mask), + ' }', + '', + ' if( ({tmp_addition} & {mask}) == {mask}) {{'.format( + tmp_addition=unique_tmp_addition_mask, mask=unique_mask), + ' {} += 1u;'.format(unique_unknown_addition_bits), + ' };', + ' {} >>= 1;'.format(unique_mask), + '}' + ] + + for i, addition in enumerate(type_.additions): + byte, bit = divmod(i, 8) + mask = '0x{:02x}'.format(1 << (7 - bit)) + + (addition_encode_lines, + addition_decode_lines) = self.format_sequence_inner_member( + addition, + checker, + None, + skip_when_not_present=False) + + member_checker = self.get_member_checker(checker, addition.name) + encoded_lengths = self.get_encoded_type_lengths(addition, member_checker) + encoder_line = 'encoder_append_length_determinant(encoder_p, {});'.format( + encoded_lengths_as_string(encoded_lengths)) + wrapped_encoder_lines = textwrap.wrap(encoder_line, 100, + subsequent_indent=' ' * 4) + encode_lines += [ + '', + 'if (src_p->{}is_{}_addition_present) {{' + .format(self.location_inner('', '.'), addition.name) + ] + indent_lines(wrapped_encoder_lines + addition_encode_lines) + [ + '}' + ] + + decode_lines += [ + 'dst_p->{location}is_{name}_addition_present = ' + '(({addition_bits} > {current_bit}u) && ' + '(({addition_mask}[{index}] & {mask}u) == {mask}u));'.format( + location=self.location_inner('', '.'), + name=addition.name, + addition_bits=unique_addition_bits, + current_bit=i, + addition_mask=unique_addition_mask, + index=byte, + mask=mask), + '', + 'if (dst_p->{location}is_{name}_addition_present) {{'.format( + location=self.location_inner('', '.'), + name=addition.name), + ' (void)decoder_read_length_determinant(decoder_p);' + ] + indent_lines(addition_decode_lines) + [ + '}', + ''] + + unique_tmp_length = self.add_unique_decode_variable('uint32_t {};', 'tmp_length') + decode_lines += [ + 'for ({i} = 0; {i} < {unique_unknown_addition_bits}; {i}++) {{'.format( + i=unique_i, + first_bit=len(type_.additions), + unique_unknown_addition_bits=unique_unknown_addition_bits), + ' {} = decoder_read_length_determinant(decoder_p);'.format( + unique_tmp_length), + '', + ' if (decoder_free(decoder_p, {}) < 0) {{'.format(unique_tmp_length), + '', + ' return;', + ' }', + '}'] + + return encode_lines, decode_lines + + def get_encoded_sequence_lengths(self, type_, checker): + lengths = [] + optionals = get_sequence_optionals(type_) + extension_bit = get_sequence_extension_bit(type_) + + lengths.append(get_sequence_present_mask_length(optionals, + extension_bit)) + for member in type_.root_members: + member_checker = self.get_member_checker(checker, member.name) + lengths.extend(self.get_encoded_type_lengths(member, member_checker)) + + if type_.additions is not None and len(type_.additions) > 0: + additions_mask_length = ( + get_sequence_additions_mask_length(type_.additions)) + lengths.append(get_length_determinant_length(additions_mask_length)) + lengths.append(1) + lengths.append(additions_mask_length) + + for addition in type_.additions: + member_checker = self.get_member_checker(checker, addition.name) + additions_lengths = self.get_encoded_type_lengths(addition, + member_checker) + addition_length = add_encoded_lengths(additions_lengths) + + if addition_length is not None: + lengths.append(get_length_determinant_length(addition_length)) + else: + lengths.append('length_determinant_length({})'.format( + encoded_lengths_as_string(lengths))) + lengths.extend(additions_lengths) + + return lengths + + def format_octet_string_inner(self, checker): + location = self.location_inner('', '.') + + if checker.minimum == checker.maximum: + encode_lines = [ + 'encoder_append_bytes(encoder_p,', + ' &src_p->{}buf[0],'.format(location), + ' {});'.format(checker.maximum) + ] + decode_lines = [ + 'decoder_read_bytes(decoder_p,', + ' &dst_p->{}buf[0],'.format(location), + ' {});'.format(checker.maximum) + ] + elif checker.maximum < 128: + encode_lines = [ + 'encoder_append_uint8(encoder_p, src_p->{}length);'.format( + location), + 'encoder_append_bytes(encoder_p,', + ' &src_p->{}buf[0],'.format(location), + ' src_p->{}length);'.format(location) + ] + decode_lines = [ + 'dst_p->{}length = decoder_read_uint8(decoder_p);'.format( + location), + '', + 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '', + 'decoder_read_bytes(decoder_p,', + ' &dst_p->{}buf[0],'.format(location), + ' dst_p->{}length);'.format(location) + ] + else: + encode_lines = [ + 'encoder_append_length_determinant(encoder_p, src_p->{}length);'.format( + location), + 'encoder_append_bytes(encoder_p,', + ' &src_p->{}buf[0],'.format(location), + ' src_p->{}length);'.format(location) + ] + decode_lines = [ + 'dst_p->{}length = decoder_read_length_determinant(decoder_p);'.format( + location), + '', + 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '', + 'decoder_read_bytes(decoder_p,', + ' &dst_p->{}buf[0],'.format(location), + ' dst_p->{}length);'.format(location) + ] + + return encode_lines, decode_lines + + def get_encoded_octet_string_lengths(self, type_, checker): + with self.members_backtrace_push(type_.name): + if checker.minimum == checker.maximum: + + return [checker.maximum] + else: + location = self.location_inner('', '.') + src_length = 'src_p->{}length'.format(location) + + return ['length_determinant_length({})'.format(src_length), + src_length] + + def format_user_type_inner(self, type_name, module_name): + prefix = self.get_user_type_prefix(type_name, module_name) + encode_lines = [ + '{}_encode_inner(encoder_p, &src_p->{});'.format( + prefix, + self.location_inner()) + ] + decode_lines = [ + '{}_decode_inner(decoder_p, &dst_p->{});'.format( + prefix, + self.location_inner()) + ] + + return encode_lines, decode_lines + + def format_choice_inner(self, type_, checker): + encode_lines = [] + decode_lines = [] + unique_tag = self.add_unique_decode_variable('uint32_t {};', 'tag') + choice = '{}choice'.format(self.location_inner('', '.')) + + for member in type_.root_members: + member_checker = self.get_member_checker(checker, + member.name) + + with self.asn1_members_backtrace_push(canonical(member.name)): + with self.c_members_backtrace_push('value'): + with self.c_members_backtrace_push(canonical(member.name)): + choice_encode_lines, choice_decode_lines = self.format_type_inner( + member, + member_checker) + + tag_length = len(member.tag) + + if tag_length > 4: + raise self.error( + 'CHOICE tags of more than four bytes are not yet supported.') + + tag = bitstruct.unpack('u{}'.format(8 * tag_length), + member.tag)[0] + tag = '0x{{:0{}x}}'.format(2 * tag_length).format(tag) + + choice_encode_lines = [ + 'encoder_append_uint(encoder_p, {}, {});'.format( + tag, + tag_length) + ] + choice_encode_lines + [ + 'break;' + ] + encode_lines += [ + 'case {}_choice_{}_e:'.format(self.location, canonical(member.name)) + ] + indent_lines(choice_encode_lines) + [ + '' + ] + + choice_decode_lines = [ + 'dst_p->{} = {}_choice_{}_e;'.format(choice, + self.location, + canonical(member.name)) + ] + choice_decode_lines + [ + 'break;' + ] + decode_lines += [ + 'case {}:'.format(tag) + ] + indent_lines(choice_decode_lines) + [ + '' + ] + + encode_lines = [ + '', + 'switch (src_p->{}) {{'.format(choice), + '' + ] + encode_lines + [ + 'default:', + ' encoder_abort(encoder_p, EBADCHOICE);', + ' break;', + '}', + '' + ] + + decode_lines = [ + '{} = decoder_read_tag(decoder_p);'.format(unique_tag), + '', + 'switch ({}) {{'.format(unique_tag), + '' + ] + decode_lines + [ + 'default:', + ' decoder_abort(decoder_p, EBADCHOICE);', + ' break;', + '}', + '' + ] + + return encode_lines, decode_lines + + def get_encoded_choice_lengths(self, type_, checker): + function_name = 'get_choice_{}_length'.format(camel_to_snake_case(type_.name)) + + if function_name not in self.additional_helpers: + with self.members_backtrace_push(type_.name): + choice = '{}choice'.format(self.location_inner('', '.')) + choice_length_lines = [] + + for member in type_.root_members: + member_checker = self.get_member_checker(checker, + member.name) + + with self.asn1_members_backtrace_push(canonical(member.name)): + with self.c_members_backtrace_push('value'): + with self.c_members_backtrace_push(canonical(member.name)): + choice_type_lengths = self.get_encoded_type_lengths( + member, + member_checker) + + choice_type_lengths.append(len(member.tag)) + length_line = 'length = {};'.format( + encoded_lengths_as_string(choice_type_lengths)) + wrapped_length_lines = textwrap.wrap(length_line, 100, + subsequent_indent=' ' * 4) + + choice_length_lines += [ + 'case {}_choice_{}_e:'.format(self.location, canonical(member.name)) + ] + indent_lines(wrapped_length_lines) + [ + ' break;', + ''] + + length_lines = [ + 'uint32_t length;', + '', + 'switch (src_p->{}) {{'.format(choice), + '' + ] + choice_length_lines + [ + 'default:', + ' length = 0;' + ' break;', + '}', + 'return length;'] + + length_lines = [ + 'static uint32_t {}(const struct {}_t *src_p) {{'.format( + function_name, self.location) + ] + indent_lines(length_lines) + [ + '}'] + self.additional_helpers[function_name] = length_lines + + return ['{}(src_p)'.format(function_name)] + + def format_enumerated_inner(self, type_): + encode_lines = [] + decode_lines = [] + + max_value = max(type_.value_to_data) + min_value = min(type_.value_to_data) + + type_name = '{}_e'.format(self.location) + type_length = max(self.get_enumerated_value_length(min_value), + self.get_enumerated_value_length(max_value)) + + unique_enum_length = self.add_unique_variable('uint8_t {};', + 'enum_length') + encode_lines += [ + '{} = enumerated_value_length(src_p->{});'.format( + unique_enum_length, self.location_inner()), + '', + 'if ({} != 0u) {{'.format(unique_enum_length), + ' encoder_append_uint8(encoder_p, 0x80u | {});'.format( + unique_enum_length), + ' encoder_append_int(encoder_p, (int32_t)src_p->{}, {});'.format( + self.location_inner(), unique_enum_length), + '}', + 'else {', + ' encoder_append_uint8(encoder_p, (uint8_t)src_p->{});'.format( + self.location_inner()), + '}'] + decode_lines += [ + '{} = decoder_read_uint8(decoder_p);'.format(unique_enum_length), + '', + 'if (({} & 0x80u) == 0x80u) {{'.format(unique_enum_length), + ' {} &= 0x7fu;'.format(unique_enum_length), + '', + ' if (({length} > {type_length}u) || ({length} == 0u)) {{'.format( + type_length=type_length, length=unique_enum_length), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + ' }', + ' dst_p->{} = (enum {})decoder_read_int(decoder_p, {});'.format( + self.location_inner(), type_name, unique_enum_length), + '}', + 'else {', + ' dst_p->{} = (enum {}){};'.format(self.location_inner(), type_name, + unique_enum_length), + '}'] + + return encode_lines, decode_lines + + def get_encoded_enumerated_length(self, type_): + with self.members_backtrace_push(type_.name): + return ['(uint32_t)enumerated_value_length((int32_t)src_p->{})'.format( + self.location_inner()), 1] + + def format_sequence_of_inner(self, type_, checker): + unique_number_of_length_bytes = self.add_unique_variable( + 'uint8_t {};', + 'number_of_length_bytes') + unique_i = self.add_unique_variable( + '{} {{}};'.format(self.format_type_name(0, checker.maximum)), + 'i') + + if checker.minimum == checker.maximum: + unique_length = self.add_unique_decode_variable('uint8_t {};', + 'length') + + with self.c_members_backtrace_push('elements[{}]'.format(unique_i)): + encode_lines, decode_lines = self.format_type_inner( + type_.element_type, + checker.element_type) + + location = self.location_inner('', '.') + + if checker.minimum == checker.maximum: + encode_lines = [ + '{} = minimum_uint_length({});'.format( + unique_number_of_length_bytes, + checker.maximum), + 'encoder_append_uint8(encoder_p, {});'.format( + unique_number_of_length_bytes), + 'encoder_append_uint(encoder_p,', + ' {},'.format(checker.maximum), + ' {});'.format(unique_number_of_length_bytes), + '', + 'for ({ui} = 0; {ui} < {maximum}u; {ui}++) {{'.format( + ui=unique_i, + maximum=checker.maximum), + ] + indent_lines(encode_lines) + decode_lines = [ + '{} = decoder_read_uint8(decoder_p);'.format( + unique_number_of_length_bytes), + '{} = decoder_read_uint8(decoder_p);'.format(unique_length), + '', + 'if (({} != 1u) || ({} > {}u)) {{'.format(unique_number_of_length_bytes, + unique_length, + checker.maximum), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '', + 'for ({ui} = 0; {ui} < {maximum}u; {ui}++) {{'.format( + ui=unique_i, + maximum=checker.maximum), + ] + indent_lines(decode_lines) + else: + if checker.maximum < 256: + cast = '(uint8_t)' + else: + cast = '' + encode_lines = [ + '{} = minimum_uint_length(src_p->{}length);'.format( + unique_number_of_length_bytes, + location), + 'encoder_append_uint8(encoder_p, {});'.format( + unique_number_of_length_bytes), + 'encoder_append_uint(encoder_p,', + ' src_p->{}length,'.format(location), + ' {});'.format(unique_number_of_length_bytes), + '', + 'for ({ui} = 0; {ui} < src_p->{loc}length; {ui}++) {{'.format( + ui=unique_i, + loc=location), + ] + indent_lines(encode_lines) + decode_lines = [ + '{} = decoder_read_uint8(decoder_p);'.format( + unique_number_of_length_bytes), + 'dst_p->{}length = {}decoder_read_uint('.format(location, cast), + ' decoder_p,', + ' {});'.format(unique_number_of_length_bytes), + '', + 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '', + 'for ({ui} = 0; {ui} < dst_p->{loc}length; {ui}++) {{'.format( + loc=location, + ui=unique_i), + ] + indent_lines(decode_lines) + + encode_lines += ['}', ''] + decode_lines += ['}', ''] + + return encode_lines, decode_lines + + def get_encoded_sequence_of_lengths(self, type_, checker): + inner_lengths = self.get_encoded_type_lengths(type_.element_type, + checker.element_type) + inner_length = encoded_lengths_as_string(inner_lengths) + + with self.c_members_backtrace_push(type_.name): + + return [1, + '(uint32_t)minimum_uint_length(src_p->{loc}length)'.format( + loc=self.location_inner('', '.')), + '(uint32_t)(src_p->{loc}length * ({inner_length}))'.format( + loc=self.location_inner('', '.'), inner_length=inner_length)] + + def format_type_inner(self, type_, checker): + if isinstance(type_, oer.Integer): + return self.format_integer_inner(checker) + elif isinstance(type_, oer.Real): + return self.format_real_inner(type_) + elif isinstance(type_, oer.Null): + return [], [] + elif isinstance(type_, oer.Boolean): + return self.format_boolean_inner() + elif is_user_type(type_): + return self.format_user_type_inner(type_.type_name, + type_.module_name) + elif isinstance(type_, oer.OctetString): + return self.format_octet_string_inner(checker) + elif isinstance(type_, oer.Sequence): + return self.format_sequence_inner(type_, checker) + elif isinstance(type_, oer.Choice): + return self.format_choice_inner(type_, checker) + elif isinstance(type_, oer.SequenceOf): + return self.format_sequence_of_inner(type_, checker) + elif isinstance(type_, oer.Enumerated): + return self.format_enumerated_inner(type_) + elif isinstance(type_, oer.BitString): + return self.format_bit_string_inner(checker) + else: + raise self.error(str(type_)) + + def generate_definition_inner_process(self, type_, checker): + if isinstance(type_, oer.Integer): + return self.format_integer_inner(checker) + elif isinstance(type_, oer.Boolean): + return self.format_boolean_inner() + elif isinstance(type_, oer.Real): + return self.format_real_inner(type_) + elif isinstance(type_, oer.Sequence): + return self.format_sequence_inner(type_, checker) + elif isinstance(type_, oer.SequenceOf): + return self.format_sequence_of_inner(type_, checker) + elif isinstance(type_, oer.Choice): + return self.format_choice_inner(type_, checker) + elif isinstance(type_, oer.OctetString): + return self.format_octet_string_inner(checker) + elif isinstance(type_, oer.BitString): + return self.format_bit_string_inner(checker) + elif isinstance(type_, oer.Enumerated): + return self.format_enumerated_inner(type_) + elif isinstance(type_, oer.Null): + return format_null_inner() + else: + return [], [] + + def is_complex_user_type(self, type_): + return is_user_type(type_) and \ + not isinstance(type_, (oer.Integer, oer.Boolean, oer.Real, oer.Null)) + + def is_buffer_type(self, type_): + return isinstance(type_, oer.OctetString) + + def generate_helpers(self, definitions): + helpers = [] + + for pattern, definition in functions: + is_in_helpers = any([pattern in helper for helper in helpers]) + + if pattern in definitions or is_in_helpers: + helpers.insert(0, definition) + + for additional_helpers in self.additional_helpers.values(): + helpers.extend(additional_helpers + ['']) + + return [ENCODER_AND_DECODER_STRUCTS] + helpers + [''] + + +def generate(compiled, namespace): + return _Generator(namespace).generate(compiled) diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/c/oer_functions.py b/.venv/lib/python3.12/site-packages/asn1tools/source/c/oer_functions.py new file mode 100644 index 0000000..a03ea0f --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/c/oer_functions.py @@ -0,0 +1,686 @@ +"""Functions required by the OER C code generator + +""" + +from .utils import ENCODER_ABORT +from .utils import DECODER_ABORT + +ENUMERATED_VALUE_LENGTH = ''' +static uint8_t enumerated_value_length(int32_t value) +{ + uint8_t length; + + if ((value >=0) && (value < 128)) { + length = 0; + } else if ((value >= -128) && (value < 128)) { + length = 1; + } else if ((value >= -32768) && (value < 32768)) { + length = 2; + } else if ((value >= -8388608) && (value < 8388608)) { + length = 3; + } else { + length = 4; + } + + return length; +}\ +''' + +LENGTH_DETERMINANT_LENGTH = ''' +static uint32_t length_determinant_length(uint32_t value) +{ + uint32_t length; + + if (value < 128u) { + length = 1; + } else if (value < 256u) { + length = 2; + } else if (value < 65536u) { + length = 3; + } else if (value < 16777216u) { + length = 4; + } else { + length = 5; + } + + return (length); +}\ +''' + +MINIMUM_UINT_LENGTH = ''' +static uint8_t minimum_uint_length(uint32_t value) +{ + uint8_t length; + + if (value < 256u) { + length = 1; + } else if (value < 65536u) { + length = 2; + } else if (value < 16777216u) { + length = 3; + } else { + length = 4; + } + + return (length); +}\ +''' + +ENCODER_INIT = '''\ +static void encoder_init(struct encoder_t *self_p, + uint8_t *buf_p, + size_t size) +{ + self_p->buf_p = buf_p; + self_p->size = (ssize_t)size; + self_p->pos = 0; +}\ +''' + +ENCODER_GET_RESULT = ''' +static ssize_t encoder_get_result(const struct encoder_t *self_p) +{ + return (self_p->pos); +}\ +''' + +ENCODER_ALLOC = ''' +static ssize_t encoder_alloc(struct encoder_t *self_p, + size_t size) +{ + ssize_t pos; + + if ((self_p->pos + (ssize_t)size) <= self_p->size) { + pos = self_p->pos; + self_p->pos += (ssize_t)size; + } else { + pos = -ENOMEM; + encoder_abort(self_p, ENOMEM); + } + + return (pos); +}\ +''' + +ENCODER_APPEND_BYTES = ''' +static void encoder_append_bytes(struct encoder_t *self_p, + const uint8_t *buf_p, + size_t size) +{ + ssize_t pos; + + pos = encoder_alloc(self_p, size); + + if (pos < 0) { + return; + } + + (void)memcpy(&self_p->buf_p[pos], buf_p, size); +}\ +''' + +ENCODER_APPEND_UINT8 = ''' +static void encoder_append_uint8(struct encoder_t *self_p, + uint8_t value) +{ + encoder_append_bytes(self_p, &value, sizeof(value)); +}\ +''' + +ENCODER_APPEND_UINT16 = ''' +static void encoder_append_uint16(struct encoder_t *self_p, + uint16_t value) +{ + uint8_t buf[2]; + + buf[0] = (uint8_t)(value >> 8); + buf[1] = (uint8_t)value; + + encoder_append_bytes(self_p, &buf[0], sizeof(buf)); +}\ +''' + +ENCODER_APPEND_UINT32 = ''' +static void encoder_append_uint32(struct encoder_t *self_p, + uint32_t value) +{ + uint8_t buf[4]; + + buf[0] = (uint8_t)(value >> 24); + buf[1] = (uint8_t)(value >> 16); + buf[2] = (uint8_t)(value >> 8); + buf[3] = (uint8_t)value; + + encoder_append_bytes(self_p, &buf[0], sizeof(buf)); +}\ +''' + +ENCODER_APPEND_UINT64 = ''' +static void encoder_append_uint64(struct encoder_t *self_p, + uint64_t value) +{ + uint8_t buf[8]; + + buf[0] = (uint8_t)(value >> 56); + buf[1] = (uint8_t)(value >> 48); + buf[2] = (uint8_t)(value >> 40); + buf[3] = (uint8_t)(value >> 32); + buf[4] = (uint8_t)(value >> 24); + buf[5] = (uint8_t)(value >> 16); + buf[6] = (uint8_t)(value >> 8); + buf[7] = (uint8_t)value; + + encoder_append_bytes(self_p, &buf[0], sizeof(buf)); +}\ +''' + +ENCODER_APPEND_INT8 = ''' +static void encoder_append_int8(struct encoder_t *self_p, + int8_t value) +{ + encoder_append_uint8(self_p, (uint8_t)value); +}\ +''' + +ENCODER_APPEND_INT16 = ''' +static void encoder_append_int16(struct encoder_t *self_p, + int16_t value) +{ + encoder_append_uint16(self_p, (uint16_t)value); +}\ +''' + +ENCODER_APPEND_INT32 = ''' +static void encoder_append_int32(struct encoder_t *self_p, + int32_t value) +{ + encoder_append_uint32(self_p, (uint32_t)value); +}\ +''' + +ENCODER_APPEND_INT64 = ''' +static void encoder_append_int64(struct encoder_t *self_p, + int64_t value) +{ + encoder_append_uint64(self_p, (uint64_t)value); +}\ +''' + +ENCODER_APPEND_UINT = ''' +static void encoder_append_uint(struct encoder_t *self_p, + uint32_t value, + uint8_t number_of_bytes) +{ + switch (number_of_bytes) { + + case 1: + encoder_append_uint8(self_p, (uint8_t)value); + break; + + case 2: + encoder_append_uint16(self_p, (uint16_t)value); + break; + + case 3: + encoder_append_uint8(self_p, (uint8_t)(value >> 16)); + encoder_append_uint16(self_p, (uint16_t)value); + break; + + default: + encoder_append_uint32(self_p, value); + break; + } +}\ +''' + +ENCODER_APPEND_LONG_UINT = ''' +static void encoder_append_long_uint(struct encoder_t *self_p, + uint64_t value, + uint8_t number_of_bytes) +{ + const uint8_t *value_p = (const uint8_t*)&value; + uint8_t buf[8]; + for(uint32_t byte = 0; byte < number_of_bytes; byte++) { + buf[number_of_bytes - byte - 1] = *value_p++; + } + encoder_append_bytes(self_p, buf, number_of_bytes); +}\ +''' + +ENCODER_APPEND_INT = ''' +static void encoder_append_int(struct encoder_t *self_p, + int32_t value, + uint8_t number_of_bytes) +{ + switch (number_of_bytes) { + + case 1: + encoder_append_int8(self_p, (int8_t)value); + break; + + case 2: + encoder_append_int16(self_p, (int16_t)value); + break; + + case 3: + encoder_append_uint8(self_p, (uint8_t)((uint32_t)value >> 16)); + encoder_append_int16(self_p, (int16_t)value); + break; + + default: + encoder_append_int32(self_p, value); + break; + } +}\ +''' + +ENCODER_APPEND_FLOAT = ''' +static void encoder_append_float(struct encoder_t *self_p, + float value) +{ + uint32_t i32; + + (void)memcpy(&i32, &value, sizeof(i32)); + + encoder_append_uint32(self_p, i32); +}\ +''' + +ENCODER_APPEND_DOUBLE = ''' +static void encoder_append_double(struct encoder_t *self_p, + double value) +{ + uint64_t i64; + + (void)memcpy(&i64, &value, sizeof(i64)); + + encoder_append_uint64(self_p, i64); +}\ +''' + +ENCODER_APPEND_BOOL = ''' +static void encoder_append_bool(struct encoder_t *self_p, bool value) +{ + encoder_append_uint8(self_p, value ? 255u : 0u); +}\ +''' + +ENCODER_APPEND_LENGTH_DETERMINANT = ''' +static void encoder_append_length_determinant(struct encoder_t *self_p, + uint32_t length) +{ + if (length < 128u) { + encoder_append_int8(self_p, (int8_t)length); + } else if (length < 256u) { + encoder_append_uint8(self_p, 0x81u); + encoder_append_uint8(self_p, (uint8_t)length); + } else if (length < 65536u) { + encoder_append_uint8(self_p, 0x82u); + encoder_append_uint16(self_p, (uint16_t)length); + } else if (length < 16777216u) { + encoder_append_uint32(self_p, length | (0x83u << 24u)); + } else { + encoder_append_uint8(self_p, 0x84u); + encoder_append_uint32(self_p, length); + } +}\ +''' + +DECODER_INIT = ''' +static void decoder_init(struct decoder_t *self_p, + const uint8_t *buf_p, + size_t size) +{ + self_p->buf_p = buf_p; + self_p->size = (ssize_t)size; + self_p->pos = 0; +}\ +''' + +DECODER_GET_RESULT = ''' +static ssize_t decoder_get_result(const struct decoder_t *self_p) +{ + return (self_p->pos); +}\ +''' + +DECODER_FREE = ''' +static ssize_t decoder_free(struct decoder_t *self_p, + size_t size) +{ + ssize_t pos; + + if ((self_p->pos + (ssize_t)size) <= self_p->size) { + pos = self_p->pos; + self_p->pos += (ssize_t)size; + } else { + pos = -EOUTOFDATA; + decoder_abort(self_p, EOUTOFDATA); + } + + return (pos); +}\ +''' + +DECODER_READ_BYTES = ''' +static void decoder_read_bytes(struct decoder_t *self_p, + uint8_t *buf_p, + size_t size) +{ + ssize_t pos; + + pos = decoder_free(self_p, size); + + if (pos >= 0) { + (void)memcpy(buf_p, &self_p->buf_p[pos], size); + } else { + (void)memset(buf_p, 0, size); + } +}\ +''' + +DECODER_READ_UINT8 = ''' +static uint8_t decoder_read_uint8(struct decoder_t *self_p) +{ + uint8_t value; + + decoder_read_bytes(self_p, &value, sizeof(value)); + + return (value); +}\ +''' + +DECODER_READ_UINT16 = ''' +static uint16_t decoder_read_uint16(struct decoder_t *self_p) +{ + uint8_t buf[2]; + + decoder_read_bytes(self_p, &buf[0], sizeof(buf)); + + return (uint16_t)(((uint16_t)buf[0] << 8) | (uint16_t)buf[1]); +}\ +''' + +DECODER_READ_UINT32 = ''' +static uint32_t decoder_read_uint32(struct decoder_t *self_p) +{ + uint8_t buf[4]; + + decoder_read_bytes(self_p, &buf[0], sizeof(buf)); + + return (((uint32_t)buf[0] << 24) + | ((uint32_t)buf[1] << 16) + | ((uint32_t)buf[2] << 8) + | (uint32_t)buf[3]); +}\ +''' + +DECODER_READ_UINT64 = ''' +static uint64_t decoder_read_uint64(struct decoder_t *self_p) +{ + uint8_t buf[8]; + + decoder_read_bytes(self_p, &buf[0], sizeof(buf)); + + return (((uint64_t)buf[0] << 56) + | ((uint64_t)buf[1] << 48) + | ((uint64_t)buf[2] << 40) + | ((uint64_t)buf[3] << 32) + | ((uint64_t)buf[4] << 24) + | ((uint64_t)buf[5] << 16) + | ((uint64_t)buf[6] << 8) + | (uint64_t)buf[7]); +}\ +''' + +DECODER_READ_INT8 = ''' +static int8_t decoder_read_int8(struct decoder_t *self_p) +{ + return ((int8_t)decoder_read_uint8(self_p)); +}\ +''' + +DECODER_READ_INT16 = ''' +static int16_t decoder_read_int16(struct decoder_t *self_p) +{ + return ((int16_t)decoder_read_uint16(self_p)); +}\ +''' + +DECODER_READ_INT32 = ''' +static int32_t decoder_read_int32(struct decoder_t *self_p) +{ + return ((int32_t)decoder_read_uint32(self_p)); +}\ +''' + +DECODER_READ_INT64 = ''' +static int64_t decoder_read_int64(struct decoder_t *self_p) +{ + return ((int64_t)decoder_read_uint64(self_p)); +}\ +''' + +DECODER_READ_UINT = ''' +static uint32_t decoder_read_uint(struct decoder_t *self_p, + uint8_t number_of_bytes) +{ + uint32_t value; + + switch (number_of_bytes) { + + case 1: + value = decoder_read_uint8(self_p); + break; + + case 2: + value = decoder_read_uint16(self_p); + break; + + case 3: + value = ((uint32_t)decoder_read_uint8(self_p) << 16u); + value |= decoder_read_uint16(self_p); + break; + + case 4: + value = decoder_read_uint32(self_p); + break; + + default: + value = 0xffffffffu; + break; + } + + return (value); +}\ +''' + +DECODER_READ_LONG_UINT = ''' +static uint64_t decoder_read_long_uint(struct decoder_t *self_p, + uint8_t number_of_bytes) +{ + uint64_t value = 0; + + for(uint8_t byte = 0; byte < number_of_bytes; byte++) { + value = decoder_read_uint8(self_p) | (value << 8); + } + + return (value); +}\ +''' + +DECODER_READ_INT = ''' +static int32_t decoder_read_int(struct decoder_t *self_p, + uint8_t number_of_bytes) +{ + int32_t value; + uint32_t tmp; + + switch (number_of_bytes) { + + case 1: + value = decoder_read_int8(self_p); + break; + + case 2: + value = decoder_read_int16(self_p); + break; + + case 3: + tmp = ((uint32_t)decoder_read_uint8(self_p) << 16u); + tmp |= decoder_read_uint16(self_p); + if((tmp & 0x800000u) == 0x800000u) { + tmp += 0xff000000u; + } + value = (int32_t)tmp; + break; + + case 4: + value = decoder_read_int32(self_p); + break; + + default: + value = 2147483647; + break; + } + + return (value); +}\ +''' + +DECODER_READ_FLOAT = ''' +static float decoder_read_float(struct decoder_t *self_p) +{ + float value; + uint32_t i32; + + i32 = decoder_read_uint32(self_p); + + (void)memcpy(&value, &i32, sizeof(value)); + + return (value); +}\ +''' + +DECODER_READ_DOUBLE = ''' +static double decoder_read_double(struct decoder_t *self_p) +{ + double value; + uint64_t i64; + + i64 = decoder_read_uint64(self_p); + + (void)memcpy(&value, &i64, sizeof(value)); + + return (value); +}\ +''' + +DECODER_READ_BOOL = ''' +static bool decoder_read_bool(struct decoder_t *self_p) +{ + return (decoder_read_uint8(self_p) != 0u); +}\ +''' + +DECODER_READ_LENGTH_DETERMINANT = ''' +static uint32_t decoder_read_length_determinant(struct decoder_t *self_p) +{ + uint32_t length; + + length = decoder_read_uint8(self_p); + + if ((length & 0x80u) != 0u) { + switch (length & 0x7fu) { + + case 1: + length = decoder_read_uint8(self_p); + break; + + case 2: + length = decoder_read_uint16(self_p); + break; + + case 3: + length = (((uint32_t)decoder_read_uint8(self_p) << 16) + | decoder_read_uint16(self_p)); + break; + + case 4: + length = decoder_read_uint32(self_p); + break; + + default: + length = 0xffffffffu; + break; + } + } + + return (length); +}\ +''' + +DECODER_READ_TAG = ''' +static uint32_t decoder_read_tag(struct decoder_t *self_p) +{ + uint32_t tag; + + tag = decoder_read_uint8(self_p); + + if ((tag & 0x3fu) == 0x3fu) { + do { + tag <<= 8; + tag |= (uint32_t)decoder_read_uint8(self_p); + } while ((tag & 0x80u) == 0x80u); + } + + return (tag); +}\ +''' + +functions = [ + ('decoder_read_tag(', DECODER_READ_TAG), + ('decoder_read_length_determinant(', DECODER_READ_LENGTH_DETERMINANT), + ('decoder_read_bool(', DECODER_READ_BOOL), + ('decoder_read_double(', DECODER_READ_DOUBLE), + ('decoder_read_float(', DECODER_READ_FLOAT), + ('decoder_read_int(', DECODER_READ_INT), + ('decoder_read_uint(', DECODER_READ_UINT), + ('decoder_read_long_uint(', DECODER_READ_LONG_UINT), + ('decoder_read_int64(', DECODER_READ_INT64), + ('decoder_read_int32(', DECODER_READ_INT32), + ('decoder_read_int16(', DECODER_READ_INT16), + ('decoder_read_int8(', DECODER_READ_INT8), + ('decoder_read_uint64(', DECODER_READ_UINT64), + ('decoder_read_uint32(', DECODER_READ_UINT32), + ('decoder_read_uint16(', DECODER_READ_UINT16), + ('decoder_read_uint8(', DECODER_READ_UINT8), + ('decoder_read_bytes(', DECODER_READ_BYTES), + ('decoder_free(', DECODER_FREE), + ('decoder_abort(', DECODER_ABORT), + ('decoder_get_result(', DECODER_GET_RESULT), + ('decoder_init(', DECODER_INIT), + ('encoder_append_length_determinant(', ENCODER_APPEND_LENGTH_DETERMINANT), + ('encoder_append_bool(', ENCODER_APPEND_BOOL), + ('encoder_append_double(', ENCODER_APPEND_DOUBLE), + ('encoder_append_float(', ENCODER_APPEND_FLOAT), + ('encoder_append_int(', ENCODER_APPEND_INT), + ('encoder_append_uint(', ENCODER_APPEND_UINT), + ('encoder_append_long_uint(', ENCODER_APPEND_LONG_UINT), + ('encoder_append_int64(', ENCODER_APPEND_INT64), + ('encoder_append_int32(', ENCODER_APPEND_INT32), + ('encoder_append_int16(', ENCODER_APPEND_INT16), + ('encoder_append_int8(', ENCODER_APPEND_INT8), + ('encoder_append_uint64(', ENCODER_APPEND_UINT64), + ('encoder_append_uint32(', ENCODER_APPEND_UINT32), + ('encoder_append_uint16(', ENCODER_APPEND_UINT16), + ('encoder_append_uint8(', ENCODER_APPEND_UINT8), + ('encoder_append_bytes(', ENCODER_APPEND_BYTES), + ('encoder_alloc(', ENCODER_ALLOC), + ('encoder_abort(', ENCODER_ABORT), + ('encoder_get_result(', ENCODER_GET_RESULT), + ('encoder_init(', ENCODER_INIT), + ('minimum_uint_length(', MINIMUM_UINT_LENGTH), + ('length_determinant_length(', LENGTH_DETERMINANT_LENGTH), + ('enumerated_value_length(', ENUMERATED_VALUE_LENGTH) +] diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/c/uper.py b/.venv/lib/python3.12/site-packages/asn1tools/source/c/uper.py new file mode 100644 index 0000000..4778e05 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/c/uper.py @@ -0,0 +1,634 @@ +"""Unaligned Packed Encoding Rules (UPER) C source code codec generator. + +""" +import textwrap + +from .utils import ENCODER_AND_DECODER_STRUCTS +from .utils import Generator +from .utils import camel_to_snake_case +from .utils import is_user_type +from .utils import indent_lines +from .utils import dedent_lines +from .utils import canonical +from .uper_functions import functions +from ...codecs import uper + + +def does_bits_match_range(number_of_bits, minimum, maximum): + return 2 ** number_of_bits == (maximum - minimum + 1) + + +class _Generator(Generator): + + def format_real(self): + return [] + + def get_enumerated_values(self, type_): + return sorted([(canonical(data), value) + for data, value in type_.root_data_to_value.items()]) + + def get_choice_members(self, type_): + return type_.root_index_to_member.values() + + def format_default(self, type_): + if isinstance(type_, uper.Boolean): + return str(type_.default).lower() + elif isinstance(type_, uper.Enumerated): + return self.format_default_enumerated(type_) + else: + return str(type_.default) + + def format_type(self, type_, checker): + if isinstance(type_, uper.Integer): + return self.format_integer(checker) + elif isinstance(type_, uper.Boolean): + return self.format_boolean() + elif isinstance(type_, uper.Real): + return self.format_real() + elif isinstance(type_, uper.Null): + return [] + elif is_user_type(type_): + return self.format_user_type(type_.type_name, + type_.module_name) + elif isinstance(type_, uper.OctetString): + return self.format_octet_string(checker) + elif isinstance(type_, uper.Sequence): + return self.format_sequence(type_, checker) + elif isinstance(type_, uper.Choice): + return self.format_choice(type_, checker) + elif isinstance(type_, uper.SequenceOf): + return self.format_sequence_of(type_, checker) + elif isinstance(type_, uper.Enumerated): + return self.format_enumerated(type_) + elif isinstance(type_, uper.BitString): + return self.format_bit_string(type_, checker) + else: + raise self.error( + "Unsupported type '{}'.".format(type_.type_name)) + + def generate_type_declaration_process(self, type_, checker): + if isinstance(type_, uper.Integer): + lines = self.format_integer(checker) + lines[0] += ' value;' + elif isinstance(type_, uper.Boolean): + lines = self.format_boolean() + lines[0] += ' value;' + elif isinstance(type_, uper.Real): + lines = self.format_real() + elif isinstance(type_, uper.Enumerated): + lines = self.format_enumerated(type_) + lines[0] += ' value;' + elif isinstance(type_, uper.Sequence): + lines = self.format_sequence(type_, checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, uper.SequenceOf): + lines = self.format_sequence_of(type_, checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, uper.Choice): + lines = self.format_choice(type_, checker) + lines = dedent_lines(lines[1:-1]) + elif isinstance(type_, uper.OctetString): + lines = self.format_octet_string(checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, uper.BitString): + lines = self.format_bit_string(type_, checker) + lines[0] += ' value;' + elif isinstance(type_, uper.Null): + lines = [] + else: + raise self.error( + "Unsupported type '{}'.".format(type_.type_name)) + + return lines + + def generate_definition_inner_process(self, type_, checker): + if isinstance(type_, uper.Integer): + return self.format_integer_inner(type_, checker) + elif isinstance(type_, uper.Boolean): + return self.format_boolean_inner() + elif isinstance(type_, uper.Real): + return self.format_real_inner() + elif isinstance(type_, uper.Sequence): + return self.format_sequence_inner(type_, checker) + elif isinstance(type_, uper.SequenceOf): + return self.format_sequence_of_inner(type_, checker) + elif isinstance(type_, uper.Choice): + return self.format_choice_inner(type_, checker) + elif isinstance(type_, uper.OctetString): + return self.format_octet_string_inner(type_, checker) + elif isinstance(type_, uper.BitString): + return self.format_bit_string_inner(type_, checker) + elif isinstance(type_, uper.Enumerated): + return self.format_enumerated_inner(type_) + elif isinstance(type_, uper.Null): + return self.format_null_inner() + else: + return [], [] + + def format_integer_inner(self, type_, checker): + type_name = self.format_type_name(checker.minimum, checker.maximum) + suffix = type_name[:-2] + location = self.location_inner() + + if type_.number_of_bits in [8, 16, 32, 64] and \ + checker.minimum in [0, -128, -32768, -2147483648, -9223372036854775808]: + return ( + [ + 'encoder_append_{}(encoder_p, src_p->{});'.format( + suffix, + location) + ], + [ + 'dst_p->{} = decoder_read_{}(decoder_p);'.format(location, + suffix) + ] + ) + else: + return ( + [ + 'encoder_append_non_negative_binary_integer(', + ' encoder_p,', + ' (uint64_t)(src_p->{} - {}),'.format(location, checker.minimum), + ' {});'.format(type_.number_of_bits) + ], + [ + 'dst_p->{} = ({})decoder_read_non_negative_binary_integer('.format( + location, + type_name), + ' decoder_p,', + ' {});'.format(type_.number_of_bits), + 'dst_p->{} += {};'.format(location, checker.minimum) + ] + ) + + def format_bit_string_inner(self, type_, checker): + location = self.location_inner() + max_value = 2 ** checker.minimum - 1 + type_name = self.format_type_name(max_value, max_value) + + return ( + [ + 'encoder_append_non_negative_binary_integer(', + ' encoder_p,', + ' (uint64_t)(src_p->{}),'.format(location), + ' {});'.format(type_.maximum) + ], + [ + 'dst_p->{} = ({})decoder_read_non_negative_binary_integer('.format( + location, + type_name), + ' decoder_p,', + ' {});'.format(type_.maximum) + ] + ) + + def format_boolean_inner(self): + return ( + [ + 'encoder_append_bool(encoder_p, src_p->{});'.format( + self.location_inner()) + ], + [ + 'dst_p->{} = decoder_read_bool(decoder_p);'.format( + self.location_inner()) + ] + ) + + def format_real_inner(self): + return [], [] + + def format_sequence_inner(self, type_, checker): + encode_lines = [] + decode_lines = [] + member_name_to_is_present = {} + + if type_.additions is not None: + + if len(type_.additions) > 0: + if_line = 'if({}) {{'.format(self.get_addition_present_condition(type_)) + encode_lines.extend(textwrap.wrap(if_line, 120, + subsequent_indent=' ' * len('if('))) + encode_lines.append(' encoder_abort(encoder_p, EINVAL);') + encode_lines.append(' return;') + encode_lines.append('}') + + encode_lines.append('encoder_append_bool(encoder_p, false);') + + if len(type_.additions) > 0: + unique_extension_present = \ + self.add_unique_decode_variable('bool {};', 'extension_is_present') + decode_lines.append( + 'extension_is_present = decoder_read_bool(decoder_p);') + else: + decode_lines.append('decoder_read_bool(decoder_p);') + + for member in type_.root_members: + + if member.optional: + name = '{}is_{}_present'.format(self.location_inner('', '.'), + canonical(member.name)) + encode_lines.append( + 'encoder_append_bool(encoder_p, src_p->{});'.format( + name)) + decode_lines.append( + 'dst_p->{} = decoder_read_bool(decoder_p);'.format( + name)) + elif member.default is not None: + unique_is_present = self.add_unique_decode_variable('bool {};', + 'is_present') + member_name_to_is_present[member.name] = unique_is_present + + if self.is_buffer_type(member): + default_variable = canonical(member.name) + '_default' + + encode_lines += [ + 'encoder_append_bool(encoder_p, (memcmp(src_p->{}{}.buf, {}, sizeof({})) != 0) ||'.format( + self.location_inner('', '.'), + canonical(member.name), + default_variable, + default_variable), + ' (src_p->{}{}.length != sizeof({})));'.format( + self.location_inner('', '.'), + canonical(member.name), + default_variable) + ] + else: + encode_lines.append( + 'encoder_append_bool(encoder_p, src_p->{}{}{} != {});'.format( + self.location_inner('', '.'), + canonical(member.name), + '.value' if self.is_complex_user_type(member) else '', + self.format_default(member))) + decode_lines.append( + '{} = decoder_read_bool(decoder_p);'.format( + unique_is_present)) + + for member in type_.root_members: + (member_encode_lines, + member_decode_lines) = self.format_sequence_inner_member( + member, + checker, + member_name_to_is_present) + + encode_lines += member_encode_lines + decode_lines += member_decode_lines + + if type_.additions is not None and len(type_.additions) > 0: + decode_lines.append('if({}) {{'.format(unique_extension_present)) + decode_lines.append(' decoder_abort(decoder_p, EINVAL);') + decode_lines.append(' return;') + decode_lines.append('}') + + return encode_lines, decode_lines + + def format_octet_string_inner(self, type_, checker): + location = self.location_inner('', '.') + if checker.maximum < 256: + length_type = 'uint8_t' + else: + length_type = 'uint32_t' + + if checker.minimum == checker.maximum: + encode_lines = [ + 'encoder_append_bytes(encoder_p,', + ' &src_p->{}buf[0],'.format(location), + ' {});'.format(checker.maximum) + ] + decode_lines = [ + 'decoder_read_bytes(decoder_p,', + ' &dst_p->{}buf[0],'.format(location), + ' {});'.format(checker.maximum) + ] + else: + encode_lines = [ + 'encoder_append_non_negative_binary_integer(', + ' encoder_p,', + ' src_p->{}length - {}u,'.format(location, checker.minimum), + ' {});'.format(type_.number_of_bits), + 'encoder_append_bytes(encoder_p,', + ' &src_p->{}buf[0],'.format(location), + ' src_p->{}length);'.format(location) + ] + decode_lines = [ + 'dst_p->{}length = ({})decoder_read_non_negative_binary_integer('.format( + location, + length_type), + ' decoder_p,', + ' {});'.format(type_.number_of_bits), + 'dst_p->{}length += {}u;'.format(location, checker.minimum) + ] + + if not does_bits_match_range(type_.number_of_bits, + checker.minimum, + checker.maximum): + decode_lines += [ + '', + 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '' + ] + + decode_lines += [ + 'decoder_read_bytes(decoder_p,', + ' &dst_p->{}buf[0],'.format(location), + ' dst_p->{}length);'.format(location) + ] + + return encode_lines, decode_lines + + def format_user_type_inner(self, type_name, module_name): + module_name_snake = camel_to_snake_case(module_name) + type_name_snake = camel_to_snake_case(type_name) + prefix = '{}_{}_{}'.format(self.namespace, + module_name_snake, + type_name_snake) + encode_lines = [ + '{}_encode_inner(encoder_p, &src_p->{});'.format( + prefix, + self.location_inner()) + ] + decode_lines = [ + '{}_decode_inner(decoder_p, &dst_p->{});'.format( + prefix, + self.location_inner()) + ] + + return encode_lines, decode_lines + + def format_choice_inner(self, type_, checker): + encode_lines = [] + decode_lines = [] + type_name = self.format_type_name(0, max(type_.root_index_to_member)) + unique_choice = self.add_unique_decode_variable( + '{} {{}};'.format(type_name), + 'choice') + choice = '{}choice'.format(self.location_inner('', '.')) + + for member in type_.root_index_to_member.values(): + member_checker = self.get_member_checker(checker, + member.name) + + with self.asn1_members_backtrace_push(canonical(member.name)): + with self.c_members_backtrace_push('value'): + with self.c_members_backtrace_push(canonical(member.name)): + choice_encode_lines, choice_decode_lines = self.format_type_inner( + member, + member_checker) + + index = type_.root_name_to_index[member.name] + + choice_encode_lines = [ + 'encoder_append_non_negative_binary_integer(encoder_p, {}, {});'.format( + index, + type_.root_number_of_bits) + ] + choice_encode_lines + [ + 'break;' + ] + encode_lines += [ + 'case {}_choice_{}_e:'.format(self.location, canonical(member.name)) + ] + indent_lines(choice_encode_lines) + [ + '' + ] + + choice_decode_lines = [ + 'dst_p->{} = {}_choice_{}_e;'.format(choice, + self.location, + canonical(member.name)) + ] + choice_decode_lines + [ + 'break;' + ] + decode_lines += [ + 'case {}:'.format(index) + ] + indent_lines(choice_decode_lines) + [ + '' + ] + + encode_lines = [ + '', + 'switch (src_p->{}) {{'.format(choice), + '' + ] + encode_lines + [ + 'default:', + ' encoder_abort(encoder_p, EBADCHOICE);', + ' break;', + '}', + '' + ] + + decode_lines = [ + '{} = ({})decoder_read_non_negative_binary_integer(decoder_p, {});'.format( + unique_choice, + type_name, + type_.root_number_of_bits), + '', + 'switch ({}) {{'.format(unique_choice), + '' + ] + decode_lines + [ + 'default:', + ' decoder_abort(decoder_p, EBADCHOICE);', + ' break;', + '}', + '' + ] + + return encode_lines, decode_lines + + def format_enumerated_inner(self, type_): + type_name = self.format_type_name(0, max(type_.root_data_to_value.values())) + unique_value = self.add_unique_variable( + '{} {{}};'.format(type_name), + 'value') + location = self.location_inner() + + value_mapping_required = any([(type_.root_data_to_index[data] + != type_.root_data_to_value[data]) + for data in type_.root_data_to_index]) + + if value_mapping_required: + encode_lines = ['switch (src_p->{}) {{'.format(location)] + + for data, _ in self.get_enumerated_values(type_): + encode_lines += [ + 'case {}_{}_e:'.format(self.location, data), + ' {} = {};'.format(unique_value, type_.root_data_to_index[data]), + ' break;'] + + encode_lines += [ + 'default:', + ' encoder_abort(encoder_p, EBADENUM);', + ' return;', + '}'] + else: + encode_lines = ['{} = src_p->{};'.format(unique_value, location)] + + encode_lines.append('encoder_append_non_negative_binary_integer(encoder_p, ' + '{}, {});'.format(unique_value, type_.root_number_of_bits)) + + decode_lines = [ + '{} = ({})decoder_read_non_negative_binary_integer(' + 'decoder_p, {});'.format(unique_value, + type_name, + type_.root_number_of_bits) + ] + + if bin(len(self.get_enumerated_values(type_))).count('1') != 1 and (not + value_mapping_required): + decode_lines += [ + '', + 'if ({} > {}u) {{'.format(unique_value, + len(self.get_enumerated_values(type_)) - 1), + ' decoder_abort(decoder_p, EBADENUM);', + '', + ' return;', + '}', + '' + ] + + if value_mapping_required: + decode_lines.append('switch ({}) {{'.format(unique_value)) + + for data, _ in self.get_enumerated_values(type_): + decode_lines.append('case {}:'.format(type_.root_data_to_index[data])) + decode_lines.append(' dst_p->{} = {}_{}_e;'.format(location, + self.location, + data)) + decode_lines.append(' break;') + decode_lines += [ + 'default:', + ' decoder_abort(decoder_p, EBADENUM);', + ' return;', + '}'] + else: + decode_lines += [ + 'dst_p->{} = (enum {}_e){};'.format(location, + self.location, + unique_value) + ] + + return encode_lines, decode_lines + + def format_null_inner(self): + return ( + [ + '(void)encoder_p;', + '(void)src_p;' + ], + [ + '(void)decoder_p;', + '(void)dst_p;' + ] + ) + + def format_sequence_of_inner(self, type_, checker): + type_name = self.format_type_name(0, checker.maximum) + unique_i = self.add_unique_variable('{} {{}};'.format(type_name), + 'i') + + with self.c_members_backtrace_push('elements[{}]'.format(unique_i)): + encode_lines, decode_lines = self.format_type_inner( + type_.element_type, + checker.element_type) + + if checker.minimum == checker.maximum: + first_encode_lines = first_decode_lines = [ + '', + 'for ({0} = 0; {0} < {1}; {0}++) {{'.format( + unique_i, + checker.maximum) + ] + else: + location = self.location_inner('', '.') + first_encode_lines = [ + 'encoder_append_non_negative_binary_integer(', + ' encoder_p,', + ' src_p->{}length - {}u,'.format(location, checker.minimum), + ' {});'.format(type_.number_of_bits), + '', + 'for ({0} = 0; {0} < src_p->{1}length; {0}++) {{'.format( + unique_i, + location) + ] + first_decode_lines = [ + 'dst_p->{}length = ({})decoder_read_non_negative_binary_integer('.format( + location, + type_name), + ' decoder_p,', + ' {});'.format(type_.number_of_bits), + 'dst_p->{}length += {}u;'.format(location, checker.minimum), + '' + ] + + if not does_bits_match_range(type_.number_of_bits, + checker.minimum, + checker.maximum): + first_decode_lines += [ + 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), + ' decoder_abort(decoder_p, EBADLENGTH);', + '', + ' return;', + '}', + '' + ] + + first_decode_lines += [ + 'for ({0} = 0; {0} < dst_p->{1}length; {0}++) {{'.format( + unique_i, + location) + ] + + encode_lines = first_encode_lines + indent_lines(encode_lines) + ['}', ''] + decode_lines = first_decode_lines + indent_lines(decode_lines) + ['}', ''] + + return encode_lines, decode_lines + + def format_type_inner(self, type_, checker): + if isinstance(type_, uper.Integer): + return self.format_integer_inner(type_, checker) + elif isinstance(type_, uper.Real): + return self.format_real_inner() + elif isinstance(type_, uper.Null): + return [], [] + elif isinstance(type_, uper.Boolean): + return self.format_boolean_inner() + elif is_user_type(type_): + return self.format_user_type_inner(type_.type_name, + type_.module_name) + elif isinstance(type_, uper.OctetString): + return self.format_octet_string_inner(type_, checker) + elif isinstance(type_, uper.Sequence): + return self.format_sequence_inner(type_, checker) + elif isinstance(type_, uper.Choice): + return self.format_choice_inner(type_, checker) + elif isinstance(type_, uper.SequenceOf): + return self.format_sequence_of_inner(type_, checker) + elif isinstance(type_, uper.Enumerated): + return self.format_enumerated_inner(type_) + elif isinstance(type_, uper.BitString): + return self.format_bit_string_inner(type_, checker) + else: + raise self.error(type_) + + def is_complex_user_type(self, type_): + return is_user_type(type_) and \ + not isinstance(type_, (uper.Integer, uper.Boolean, uper.Real, uper.Null)) + + def is_buffer_type(self, type_): + return isinstance(type_, uper.OctetString) + + def generate_helpers(self, definitions): + helpers = [] + + for pattern, definition in functions: + is_in_helpers = any([pattern in helper for helper in helpers]) + + if pattern in definitions or is_in_helpers: + helpers.insert(0, definition) + + return [ENCODER_AND_DECODER_STRUCTS] + helpers + [''] + + +def generate(compiled, namespace): + return _Generator(namespace).generate(compiled) diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/c/uper_functions.py b/.venv/lib/python3.12/site-packages/asn1tools/source/c/uper_functions.py new file mode 100644 index 0000000..9520e35 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/c/uper_functions.py @@ -0,0 +1,468 @@ +"""Functions required by the UPER C code generator + +""" + +from .utils import ENCODER_ABORT +from .utils import DECODER_ABORT + +ENCODER_INIT = '''\ +static void encoder_init(struct encoder_t *self_p, + uint8_t *buf_p, + size_t size) +{ + self_p->buf_p = buf_p; + self_p->size = (8 * (ssize_t)size); + self_p->pos = 0; +}\ +''' + +ENCODER_GET_RESULT = ''' +static ssize_t encoder_get_result(const struct encoder_t *self_p) +{ + if (self_p->size >= 0) { + return ((self_p->pos + 7) / 8); + } else { + return (self_p->pos); + } +}\ +''' + +ENCODER_ALLOC = ''' +static ssize_t encoder_alloc(struct encoder_t *self_p, + size_t size) +{ + ssize_t pos; + + if ((self_p->pos + (ssize_t)size) <= self_p->size) { + pos = self_p->pos; + self_p->pos += (ssize_t)size; + } else { + pos = -ENOMEM; + encoder_abort(self_p, ENOMEM); + } + + return (pos); +}\ +''' + +ENCODER_APPEND_BIT = ''' +static void encoder_append_bit(struct encoder_t *self_p, + int value) +{ + ssize_t pos; + + pos = encoder_alloc(self_p, 1); + + if (pos < 0) { + return; + } + + if ((pos % 8) == 0) { + self_p->buf_p[pos / 8] = 0; + } + + self_p->buf_p[pos / 8] |= (uint8_t)(value << (7 - (pos % 8))); +}\ +''' + +ENCODER_APPEND_BYTES = ''' +static void encoder_append_bytes(struct encoder_t *self_p, + const uint8_t *buf_p, + size_t size) +{ + size_t i; + ssize_t pos; + size_t byte_pos; + size_t pos_in_byte; + + pos = encoder_alloc(self_p, 8u * size); + + if (pos < 0) { + return; + } + + byte_pos = ((size_t)pos / 8u); + pos_in_byte = ((size_t)pos % 8u); + + if (pos_in_byte == 0u) { + (void)memcpy(&self_p->buf_p[byte_pos], buf_p, size); + } else { + for (i = 0; i < size; i++) { + self_p->buf_p[byte_pos + i] |= (buf_p[i] >> pos_in_byte); + self_p->buf_p[byte_pos + i + 1] = (buf_p[i] << (8u - pos_in_byte)); + } + } +}\ +''' + +ENCODER_APPEND_UINT8 = ''' +static void encoder_append_uint8(struct encoder_t *self_p, + uint8_t value) +{ + uint8_t buf[1]; + + buf[0] = (uint8_t)value; + + encoder_append_bytes(self_p, &buf[0], sizeof(buf)); +}\ +''' + +ENCODER_APPEND_UINT16 = ''' +static void encoder_append_uint16(struct encoder_t *self_p, + uint16_t value) +{ + uint8_t buf[2]; + + buf[0] = (uint8_t)(value >> 8); + buf[1] = (uint8_t)value; + + encoder_append_bytes(self_p, &buf[0], sizeof(buf)); +}\ +''' + +ENCODER_APPEND_UINT32 = ''' +static void encoder_append_uint32(struct encoder_t *self_p, + uint32_t value) +{ + uint8_t buf[4]; + + buf[0] = (uint8_t)(value >> 24); + buf[1] = (uint8_t)(value >> 16); + buf[2] = (uint8_t)(value >> 8); + buf[3] = (uint8_t)value; + + encoder_append_bytes(self_p, &buf[0], sizeof(buf)); +}\ +''' + +ENCODER_APPEND_UINT64 = ''' +static void encoder_append_uint64(struct encoder_t *self_p, + uint64_t value) +{ + uint8_t buf[8]; + + buf[0] = (uint8_t)(value >> 56); + buf[1] = (uint8_t)(value >> 48); + buf[2] = (uint8_t)(value >> 40); + buf[3] = (uint8_t)(value >> 32); + buf[4] = (uint8_t)(value >> 24); + buf[5] = (uint8_t)(value >> 16); + buf[6] = (uint8_t)(value >> 8); + buf[7] = (uint8_t)value; + + encoder_append_bytes(self_p, &buf[0], sizeof(buf)); +}\ +''' + +ENCODER_APPEND_INT8 = ''' +static void encoder_append_int8(struct encoder_t *self_p, + int8_t value) +{ + encoder_append_uint8(self_p, (uint8_t)value + 128); +}\ +''' + +ENCODER_APPEND_INT16 = ''' +static void encoder_append_int16(struct encoder_t *self_p, + int16_t value) +{ + encoder_append_uint16(self_p, (uint16_t)value + 32768); +}\ +''' + +ENCODER_APPEND_INT32 = ''' +static void encoder_append_int32(struct encoder_t *self_p, + int32_t value) +{ + encoder_append_uint32(self_p, (uint32_t)value + 2147483648); +}\ +''' + +ENCODER_APPEND_INT64 = ''' +static void encoder_append_int64(struct encoder_t *self_p, + int64_t value) +{ + uint64_t u64_value; + + u64_value = (uint64_t)value; + u64_value += 9223372036854775808ull; + + encoder_append_uint64(self_p, u64_value); +}\ +''' + +ENCODER_APPEND_BOOL = ''' +static void encoder_append_bool(struct encoder_t *self_p, bool value) +{ + encoder_append_bit(self_p, value ? 1 : 0); +}\ +''' + +ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER = ''' +static void encoder_append_non_negative_binary_integer(struct encoder_t *self_p, + uint64_t value, + size_t size) +{ + size_t i; + + for (i = 0; i < size; i++) { + encoder_append_bit(self_p, (value >> (size - i - 1)) & 1); + } +}\ +''' + +DECODER_INIT = ''' +static void decoder_init(struct decoder_t *self_p, + const uint8_t *buf_p, + size_t size) +{ + self_p->buf_p = buf_p; + self_p->size = (8 * (ssize_t)size); + self_p->pos = 0; +}\ +''' + +DECODER_GET_RESULT = ''' +static ssize_t decoder_get_result(const struct decoder_t *self_p) +{ + if (self_p->size >= 0) { + return ((self_p->pos + 7) / 8); + } else { + return (self_p->pos); + } +}\ +''' + +DECODER_FREE = ''' +static ssize_t decoder_free(struct decoder_t *self_p, + size_t size) +{ + ssize_t pos; + + if ((self_p->pos + (ssize_t)size) <= self_p->size) { + pos = self_p->pos; + self_p->pos += (ssize_t)size; + } else { + pos = -EOUTOFDATA; + decoder_abort(self_p, EOUTOFDATA); + } + + return (pos); +}\ +''' + +DECODER_READ_BIT = ''' +static int decoder_read_bit(struct decoder_t *self_p) +{ + ssize_t pos; + int value; + + pos = decoder_free(self_p, 1); + + if (pos >= 0) { + value = ((self_p->buf_p[pos / 8] >> (7 - (pos % 8))) & 1); + } else { + value = 0; + } + + return (value); +}\ +''' + +DECODER_READ_BYTES = ''' +static void decoder_read_bytes(struct decoder_t *self_p, + uint8_t *buf_p, + size_t size) +{ + size_t i; + ssize_t pos; + size_t byte_pos; + size_t pos_in_byte; + + pos = decoder_free(self_p, 8u * size); + + if (pos < 0) { + return; + } + + byte_pos = ((size_t)pos / 8u); + pos_in_byte = ((size_t)pos % 8u); + + if (pos_in_byte == 0) { + (void)memcpy(buf_p, &self_p->buf_p[byte_pos], size); + } else { + for (i = 0; i < size; i++) { + buf_p[i] = (self_p->buf_p[byte_pos + i] << pos_in_byte); + buf_p[i] |= (self_p->buf_p[byte_pos + i + 1] >> (8u - pos_in_byte)); + } + } +}\ +''' + +DECODER_READ_UINT8 = ''' +static uint8_t decoder_read_uint8(struct decoder_t *self_p) +{ + uint8_t value = 0; + + decoder_read_bytes(self_p, &value, sizeof(value)); + + return (value); +}\ +''' + +DECODER_READ_UINT16 = ''' +static uint16_t decoder_read_uint16(struct decoder_t *self_p) +{ + uint8_t buf[2]; + + decoder_read_bytes(self_p, &buf[0], sizeof(buf)); + + return (((uint16_t)buf[0] << 8) | (uint16_t)buf[1]); +}\ +''' + +DECODER_READ_UINT32 = ''' +static uint32_t decoder_read_uint32(struct decoder_t *self_p) +{ + uint8_t buf[4]; + + decoder_read_bytes(self_p, &buf[0], sizeof(buf)); + + return (((uint32_t)buf[0] << 24) + | ((uint32_t)buf[1] << 16) + | ((uint32_t)buf[2] << 8) + | (uint32_t)buf[3]); +}\ +''' + +DECODER_READ_UINT64 = ''' +static uint64_t decoder_read_uint64(struct decoder_t *self_p) +{ + uint8_t buf[8]; + + decoder_read_bytes(self_p, &buf[0], sizeof(buf)); + + return (((uint64_t)buf[0] << 56) + | ((uint64_t)buf[1] << 48) + | ((uint64_t)buf[2] << 40) + | ((uint64_t)buf[3] << 32) + | ((uint64_t)buf[4] << 24) + | ((uint64_t)buf[5] << 16) + | ((uint64_t)buf[6] << 8) + | (uint64_t)buf[7]); +}\ +''' + +DECODER_READ_INT8 = ''' +static int8_t decoder_read_int8(struct decoder_t *self_p) +{ + int8_t value; + + value = (int8_t)decoder_read_uint8(self_p); + value -= 128; + + return (value); +}\ +''' + +DECODER_READ_INT16 = ''' +static int16_t decoder_read_int16(struct decoder_t *self_p) +{ + int16_t value; + + value = (int16_t)decoder_read_uint16(self_p); + value -= 32768; + + return (value); +}\ +''' + +DECODER_READ_INT32 = ''' +static int32_t decoder_read_int32(struct decoder_t *self_p) +{ + int32_t value; + + value = (int32_t)decoder_read_uint32(self_p); + value -= 2147483648; + + return (value); +}\ +''' + +DECODER_READ_INT64 = ''' +static int64_t decoder_read_int64(struct decoder_t *self_p) +{ + uint64_t value; + + value = decoder_read_uint64(self_p); + value -= 9223372036854775808ull; + + return ((int64_t)value); +}\ +''' + +DECODER_READ_BOOL = ''' +static bool decoder_read_bool(struct decoder_t *self_p) +{ + return (decoder_read_bit(self_p) != 0); +}\ +''' + +DECODER_READ_NON_NEGATIVE_BINARY_INTEGER = ''' +static uint64_t decoder_read_non_negative_binary_integer(struct decoder_t *self_p, + size_t size) +{ + size_t i; + uint64_t value; + + value = 0; + + for (i = 0; i < size; i++) { + value <<= 1; + value |= (uint64_t)decoder_read_bit(self_p); + } + + return (value); +}\ +''' + +functions = [ + ( + 'decoder_read_non_negative_binary_integer(', + DECODER_READ_NON_NEGATIVE_BINARY_INTEGER + ), + ('decoder_read_bool(', DECODER_READ_BOOL), + ('decoder_read_int64(', DECODER_READ_INT64), + ('decoder_read_int32(', DECODER_READ_INT32), + ('decoder_read_int16(', DECODER_READ_INT16), + ('decoder_read_int8(', DECODER_READ_INT8), + ('decoder_read_uint64(', DECODER_READ_UINT64), + ('decoder_read_uint32(', DECODER_READ_UINT32), + ('decoder_read_uint16(', DECODER_READ_UINT16), + ('decoder_read_uint8(', DECODER_READ_UINT8), + ('decoder_read_bytes(', DECODER_READ_BYTES), + ('decoder_read_bit(', DECODER_READ_BIT), + ('decoder_free(', DECODER_FREE), + ('decoder_abort(', DECODER_ABORT), + ('decoder_get_result(', DECODER_GET_RESULT), + ('decoder_init(', DECODER_INIT), + ( + 'encoder_append_non_negative_binary_integer(', + ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER + ), + ('encoder_append_bool(', ENCODER_APPEND_BOOL), + ('encoder_append_int64(', ENCODER_APPEND_INT64), + ('encoder_append_int32(', ENCODER_APPEND_INT32), + ('encoder_append_int16(', ENCODER_APPEND_INT16), + ('encoder_append_int8(', ENCODER_APPEND_INT8), + ('encoder_append_uint64(', ENCODER_APPEND_UINT64), + ('encoder_append_uint32(', ENCODER_APPEND_UINT32), + ('encoder_append_uint16(', ENCODER_APPEND_UINT16), + ('encoder_append_uint8(', ENCODER_APPEND_UINT8), + ('encoder_append_bytes(', ENCODER_APPEND_BYTES), + ('encoder_append_bit(', ENCODER_APPEND_BIT), + ('encoder_alloc(', ENCODER_ALLOC), + ('encoder_abort(', ENCODER_ABORT), + ('encoder_get_result(', ENCODER_GET_RESULT), + ('encoder_init(', ENCODER_INIT) +] diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/c/utils.py b/.venv/lib/python3.12/site-packages/asn1tools/source/c/utils.py new file mode 100644 index 0000000..7193ade --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/c/utils.py @@ -0,0 +1,856 @@ +import re +from operator import itemgetter + +from ...errors import Error + + +TYPE_DECLARATION_FMT = '''\ +/** + * Type {type_name} in module {module_name}. + */ +{helper_types}\ +struct {namespace}_{module_name_snake}_{type_name_snake}_t {{ +{members} +}}; +''' + +DECLARATION_FMT = '''\ +/** + * Encode type {type_name} defined in module {module_name}. + * + * @param[out] dst_p Buffer to encode into. + * @param[in] size Size of dst_p. + * @param[in] src_p Data to encode. + * + * @return Encoded data length or negative error code. + */ +ssize_t {namespace}_{module_name_snake}_{type_name_snake}_encode( + uint8_t *dst_p, + size_t size, + const struct {namespace}_{module_name_snake}_{type_name_snake}_t *src_p); + +/** + * Decode type {type_name} defined in module {module_name}. + * + * @param[out] dst_p Decoded data. + * @param[in] src_p Data to decode. + * @param[in] size Size of src_p. + * + * @return Number of bytes decoded or negative error code. + */ +ssize_t {namespace}_{module_name_snake}_{type_name_snake}_decode( + struct {namespace}_{module_name_snake}_{type_name_snake}_t *dst_p, + const uint8_t *src_p, + size_t size); +''' + +DEFINITION_INNER_FMT = '''\ +static void {namespace}_{module_name_snake}_{type_name_snake}_encode_inner( + struct encoder_t *encoder_p, + const struct {namespace}_{module_name_snake}_{type_name_snake}_t *src_p) +{{ +{encode_body}\ +}} + +static void {namespace}_{module_name_snake}_{type_name_snake}_decode_inner( + struct decoder_t *decoder_p, + struct {namespace}_{module_name_snake}_{type_name_snake}_t *dst_p) +{{ +{decode_body}\ +}} +''' + +DEFINITION_FMT = '''\ +ssize_t {namespace}_{module_name_snake}_{type_name_snake}_encode( + uint8_t *dst_p, + size_t size, + const struct {namespace}_{module_name_snake}_{type_name_snake}_t *src_p) +{{ + struct encoder_t encoder; + + encoder_init(&encoder, dst_p, size); + {namespace}_{module_name_snake}_{type_name_snake}_encode_inner(&encoder, src_p); + + return (encoder_get_result(&encoder)); +}} + +ssize_t {namespace}_{module_name_snake}_{type_name_snake}_decode( + struct {namespace}_{module_name_snake}_{type_name_snake}_t *dst_p, + const uint8_t *src_p, + size_t size) +{{ + struct decoder_t decoder; + + decoder_init(&decoder, src_p, size); + {namespace}_{module_name_snake}_{type_name_snake}_decode_inner(&decoder, dst_p); + + return (decoder_get_result(&decoder)); +}} +''' + +ENCODER_AND_DECODER_STRUCTS = '''\ +struct encoder_t { + uint8_t *buf_p; + ssize_t size; + ssize_t pos; +}; + +struct decoder_t { + const uint8_t *buf_p; + ssize_t size; + ssize_t pos; +}; +''' + +ENCODER_ABORT = ''' +static void encoder_abort(struct encoder_t *self_p, + ssize_t error) +{ + if (self_p->size >= 0) { + self_p->size = -error; + self_p->pos = -error; + } +}\ +''' + +DECODER_ABORT = ''' +static void decoder_abort(struct decoder_t *self_p, + ssize_t error) +{ + if (self_p->size >= 0) { + self_p->size = -error; + self_p->pos = -error; + } +}\ +''' + + +class _MembersBacktracesContext(object): + + def __init__(self, backtraces, member_name): + self.backtraces = backtraces + self.member_name = member_name + + def __enter__(self): + for backtrace in self.backtraces: + backtrace.append(self.member_name) + + def __exit__(self, *args): + for backtrace in self.backtraces: + backtrace.pop() + + +class _UserType(object): + + def __init__(self, + type_name, + module_name, + type_declaration, + declaration, + definition_inner, + definition): + self.type_name = type_name + self.module_name = module_name + self.type_declaration = type_declaration + self.declaration = declaration + self.definition_inner = definition_inner + self.definition = definition + + +class Generator(object): + + def __init__(self, namespace): + self.namespace = canonical(namespace) + self.asn1_members_backtrace = [] + self.c_members_backtrace = [] + self.module_name = None + self.type_name = None + self.helper_lines = [] + self.base_variables = set() + self.used_suffixes_by_base_variables = {} + self.encode_variable_lines = [] + self.decode_variable_lines = [] + self.used_user_types = [] + + def reset_type(self): + self.helper_lines = [] + self.base_variables = set() + self.used_suffixes_by_base_variables = {} + self.encode_variable_lines = [] + self.decode_variable_lines = [] + self.used_user_types = [] + + @property + def module_name_snake(self): + return camel_to_snake_case(self.module_name) + + @property + def type_name_snake(self): + return camel_to_snake_case(self.type_name) + + def type_length(self, minimum, maximum): + # Make sure it fits in 64 bits. + if minimum < -9223372036854775808: + raise self.error( + '{} does not fit in int64_t.'.format(minimum)) + elif maximum > 18446744073709551615: + raise self.error( + '{} does not fit in uint64_t.'.format(maximum)) + elif minimum < 0 and maximum > 9223372036854775807: + raise self.error( + '{} does not fit in int64_t.'.format(maximum)) + + # Calculate the number of bytes needed. + if minimum < -2147483648: + minimum_length = 64 + elif minimum < -32768: + minimum_length = 32 + elif minimum < -128: + minimum_length = 16 + elif minimum < 0: + minimum_length = 8 + else: + minimum_length = 0 + + if maximum > 4294967295: + maximum_length = 64 + elif maximum > 65535: + maximum_length = 32 + elif maximum > 255: + maximum_length = 16 + elif maximum > 0: + maximum_length = 8 + else: + maximum_length = 0 + + if minimum_length == maximum_length == 0: + length = 8 + else: + length = max(minimum_length, maximum_length) + + return length + + @staticmethod + def value_length(value): + if value < 256: + length = 1 + elif value < 65536: + length = 2 + elif value < 16777216: + length = 3 + elif value < 4294967296: + length = 4 + else: + length = 8 + return length + + def format_type_name(self, minimum, maximum): + length = self.type_length(minimum, maximum) + type_name = 'int{}_t'.format(length) + + if minimum >= 0: + type_name = 'u' + type_name + + return type_name + + def format_default_enumerated(self, type_): + if is_user_type(type_): + return '{}_{}_e'.format(self.get_user_type_prefix(type_.type_name, + type_.module_name), + type_.default) + else: + with self.members_backtrace_push(type_.name): + return '{}_{}_e'.format(self.location, type_.default) + + def get_addition_present_condition(self, type_): + return ' || '.join(['src_p->{}is_{}_addition_present'. + format(self.location_inner('', '.'), addition.name) + for addition in type_.additions]) + + def get_named_number_values(self, type_): + if type_.named_bits is not None: + return sorted([(canonical(data), value) + for data, value in type_.named_bits], + key=itemgetter(1)) + + def get_user_type_prefix(self, type_name, module_name): + module_name_snake = camel_to_snake_case(module_name) + type_name_snake = camel_to_snake_case(type_name) + + return '{}_{}_{}'.format(self.namespace, + module_name_snake, + type_name_snake) + + @property + def location(self): + location = '{}_{}_{}'.format(self.namespace, + self.module_name_snake, + self.type_name_snake) + + if self.asn1_members_backtrace: + location += '_{}'.format('_'.join(self.asn1_members_backtrace)) + + return location + + def location_inner(self, default='value', end=''): + if self.c_members_backtrace: + return '.'.join(self.c_members_backtrace) + end + else: + return default + + def location_error(self): + location = '{}.{}'.format(self.module_name, self.type_name) + + if self.asn1_members_backtrace: + location += '.{}'.format('.'.join(self.asn1_members_backtrace)) + + return location + + def members_backtrace_push(self, member_name): + backtraces = [ + self.asn1_members_backtrace, + self.c_members_backtrace + ] + + return _MembersBacktracesContext(backtraces, member_name) + + def asn1_members_backtrace_push(self, member_name): + backtraces = [self.asn1_members_backtrace] + + return _MembersBacktracesContext(backtraces, member_name) + + def c_members_backtrace_push(self, member_name): + backtraces = [self.c_members_backtrace] + + return _MembersBacktracesContext(backtraces, member_name) + + def get_member_checker(self, checker, name): + for member in checker.members: + if member.name == name: + return member + + raise Error('No member checker found for {}.'.format(name)) + + def add_unique_variable(self, fmt, name, variable_lines=None): + if name in self.base_variables: + try: + suffix = self.used_suffixes_by_base_variables[name] + suffix += 1 + except KeyError: + suffix = 2 + + self.used_suffixes_by_base_variables[name] = suffix + unique_name = '{}_{}'.format(name, suffix) + else: + self.base_variables.add(name) + unique_name = name + + line = fmt.format(unique_name) + + if variable_lines is None: + self.encode_variable_lines.append(line) + self.decode_variable_lines.append(line) + elif variable_lines == 'encode': + self.encode_variable_lines.append(line) + else: + self.decode_variable_lines.append(line) + + return unique_name + + def add_unique_encode_variable(self, fmt, name): + return self.add_unique_variable(fmt, name, 'encode') + + def add_unique_decode_variable(self, fmt, name): + return self.add_unique_variable(fmt, name, 'decode') + + def add_sequence_member(self, member, checker): + member_checker = self.get_member_checker(checker, member.name) + + with self.members_backtrace_push(canonical(member.name)): + member_lines = self.format_type(member, member_checker) + + if member_lines: + member_lines[-1] += ' {};'.format(canonical(member.name)) + + return member_lines + + def error(self, message): + return Error('{}: {}'.format(self.location_error(), message)) + + def format_integer(self, checker): + if not checker.has_lower_bound(): + raise self.error('INTEGER has no minimum value.') + + if not checker.has_upper_bound(): + raise self.error('INTEGER has no maximum value.') + + type_name = self.format_type_name(checker.minimum, checker.maximum) + + return [type_name] + + def format_boolean(self): + return ['bool'] + + def format_octet_string(self, checker): + if not checker.has_upper_bound(): + raise self.error('OCTET STRING has no maximum length.') + + if checker.minimum == checker.maximum: + lines = [] + elif checker.maximum < 256: + lines = [' uint8_t length;'] + else: + lines = [' uint32_t length;'] + + return [ + 'struct {' + ] + lines + [ + ' uint8_t buf[{}];'.format(checker.maximum), + '}' + ] + + def format_bit_string(self, type_, checker): + def get_value(value): + byte = (length - 1) - (value // 8) + bit = 7 - (value % 8) + return ('0x{:0' + str(length // 4) + 'x}').format(1 << (bit + byte * 8)) + + if checker.minimum != checker.maximum: + raise self.error('BIT STRING with variable SIZE not supported.') + if checker.minimum > 64: + raise self.error('BIT STRING with a length of more than 64 bits are not ' + 'supported.') + + max_value = 2**checker.minimum - 1 + + length = self.value_length(max_value) + named_bits = self.get_named_number_values(type_) + type_name = self.format_type_name(max_value, max_value) + + if named_bits is not None: + self.helper_lines += [ + 'static const {} {}_{} = {};'.format(type_name, self.location.upper(), + name.upper(), get_value(value)) + for name, value in self.get_named_number_values(type_) + ] + + return [type_name] + + def format_sequence(self, type_, checker): + lines = [] + + for member in type_.root_members: + + if member.optional: + lines += ['bool is_{}_present;'.format(canonical(member.name))] + + lines += self.add_sequence_member(member, checker) + + if type_.additions is not None and len(type_.additions) > 0: + for addition in type_.additions: + lines += ['bool is_{}_addition_present;'.format(addition.name)] + + lines += self.add_sequence_member(addition, checker) + + return ['struct {'] + indent_lines(lines) + ['}'] + + def format_sequence_of(self, type_, checker): + if not checker.is_bound(): + raise self.error('SEQUENCE OF has no maximum length.') + + lines = self.format_type(type_.element_type, checker.element_type) + + if lines: + lines[-1] += ' elements[{}];'.format(checker.maximum) + + if checker.minimum == checker.maximum: + length_lines = [] + elif checker.maximum < 256: + length_lines = ['uint8_t length;'] + else: + length_lines = ['uint32_t length;'] + + return ['struct {'] + indent_lines(length_lines + lines) + ['}'] + + def format_enumerated(self, type_): + lines = ['enum {}_e'.format(self.location)] + + values = [ + ' {}_{}_e = {}'.format(self.location, name, value) + for name, value in self.get_enumerated_values(type_) + ] + self.helper_lines += [ + 'enum {}_e {{'.format(self.location) + ] + join_lines(values, ',') + [ + '};', + '' + ] + + return lines + + def format_choice(self, type_, checker): + lines = [] + choices = [] + + for member in self.get_choice_members(type_): + member_checker = self.get_member_checker(checker, + member.name) + + with self.members_backtrace_push(canonical(member.name)): + choice_lines = self.format_type(member, member_checker) + + if choice_lines: + choice_lines[-1] += ' {};'.format(canonical(member.name)) + + lines += choice_lines + choices.append(' {}_choice_{}_e'.format(self.location, + canonical(member.name))) + + self.helper_lines += [ + 'enum {}_choice_e {{'.format(self.location) + ] + join_lines(choices, ',') + [ + '};', + '' + ] + + lines = [ + 'enum {}_choice_e choice;'.format(self.location), + 'union {' + ] + indent_lines(lines) + [ + '} value;' + ] + + lines = ['struct {'] + indent_lines(lines) + ['}'] + + return lines + + def format_user_type(self, type_name, module_name): + module_name_snake = camel_to_snake_case(module_name) + type_name_snake = camel_to_snake_case(type_name) + + self.used_user_types.append((type_name, module_name)) + + return ['struct {}_{}_{}_t'.format(self.namespace, + module_name_snake, + type_name_snake)] + + def format_sequence_inner_member(self, + member, + checker, + default_condition_by_member_name, + skip_when_not_present=True): + member_checker = self.get_member_checker(checker, member.name) + + with self.members_backtrace_push(canonical(member.name)): + encode_lines, decode_lines = self.format_type_inner( + member, + member_checker) + + location = self.location_inner('', '.') + + if member.optional and skip_when_not_present: + is_present = '{}is_{}_present'.format(location, canonical(member.name)) + encode_lines = [ + '', + 'if (src_p->{}) {{'.format(is_present) + ] + indent_lines(encode_lines) + [ + '}', + '' + ] + decode_lines = [ + '', + 'if (dst_p->{}) {{'.format(is_present) + ] + indent_lines(decode_lines) + [ + '}', + '' + ] + elif member.default is not None and skip_when_not_present: + name = '{}{}'.format(location, canonical(member.name)) + + if self.is_buffer_type(member): + default_value = '{{' + ', '.join(['0x%02X' % m for m in member.default]) + '}};' + default_variable = self.add_unique_variable('static const uint8_t {}[] = ' + default_value, + canonical(member.name) + '_default') + + encode_lines = [ + '', + 'if ((memcmp(src_p->{}.buf, {}, sizeof({})) != 0) ||'.format( + name, + default_variable, + default_variable), + ' (src_p->{}.length != sizeof({}))) {{'.format( + name, + default_variable) + ] + indent_lines(encode_lines) + [ + '}', + '' + ] + decode_lines = [ + '', + 'if ({}) {{'.format(default_condition_by_member_name[member.name]) + ] + indent_lines(decode_lines) + [ + '} else {', + ' memcpy(dst_p->{}.buf, {}, sizeof({}));'.format( + name, + default_variable, + default_variable), + ' dst_p->{}.length = sizeof({});'.format( + name, + default_variable + ), + '}', + '' + ] + else: + encode_lines = [ + '', + 'if (src_p->{}{} != {}) {{'.format( + name, + '.value' if self.is_complex_user_type(member) else '', + self.format_default(member)) + ] + indent_lines(encode_lines) + [ + '}', + '' + ] + decode_lines = [ + '', + 'if ({}) {{'.format(default_condition_by_member_name[member.name]) + ] + indent_lines(decode_lines) + [ + '} else {', + ' dst_p->{}{} = {};'.format( + name, + '.value' if self.is_complex_user_type(member) else '', + self.format_default(member)), + '}', + '' + ] + + return encode_lines, decode_lines + + def generate_type_declaration(self, compiled_type): + type_ = compiled_type.type + checker = compiled_type.constraints_checker.type + + lines = self.generate_type_declaration_process(type_, checker) + + if not lines: + lines = ['uint8_t dummy;'] + + lines = indent_lines(lines) + + if self.helper_lines: + self.helper_lines.append('') + + return [ + TYPE_DECLARATION_FMT.format(namespace=self.namespace, + module_name=self.module_name, + type_name=self.type_name, + module_name_snake=self.module_name_snake, + type_name_snake=self.type_name_snake, + helper_types='\n'.join(self.helper_lines), + members='\n'.join(lines)) + ] + + def generate_declaration(self): + return DECLARATION_FMT.format(namespace=self.namespace, + module_name=self.module_name, + type_name=self.type_name, + module_name_snake=self.module_name_snake, + type_name_snake=self.type_name_snake) + + def generate_definition(self): + return DEFINITION_FMT.format(namespace=self.namespace, + module_name_snake=self.module_name_snake, + type_name_snake=self.type_name_snake) + + def generate_definition_inner(self, compiled_type): + encode_lines, decode_lines = self.generate_definition_inner_process( + compiled_type.type, + compiled_type.constraints_checker.type) + + if self.encode_variable_lines: + encode_lines = self.encode_variable_lines + [''] + encode_lines + + if self.decode_variable_lines: + decode_lines = self.decode_variable_lines + [''] + decode_lines + + encode_lines = indent_lines(encode_lines) + [''] + decode_lines = indent_lines(decode_lines) + [''] + + return DEFINITION_INNER_FMT.format(namespace=self.namespace, + module_name_snake=self.module_name_snake, + type_name_snake=self.type_name_snake, + encode_body='\n'.join(encode_lines), + decode_body='\n'.join(decode_lines)) + + def generate(self, compiled): + user_types = {} + user_type_dependencies = {} + + for module_name, module in sorted(compiled.modules.items()): + self.module_name = module_name + + for type_name, compiled_type in sorted(module.items()): + self.type_name = type_name + self.reset_type() + + type_declaration = self.generate_type_declaration(compiled_type) + + if not type_declaration: + continue + + declaration = self.generate_declaration() + definition_inner = self.generate_definition_inner(compiled_type) + definition = self.generate_definition() + + user_type = _UserType(type_name, + module_name, + type_declaration, + declaration, + definition_inner, + definition) + user_type_name_tuple = (user_type.type_name, user_type.module_name) + user_types[user_type_name_tuple] = user_type + user_type_dependencies[user_type_name_tuple] = self.used_user_types + + user_type_sorted_names = topological_sort(user_type_dependencies) + + type_declarations = [] + declarations = [] + definitions_inner = [] + definitions = [] + + for user_type_name in user_type_sorted_names: + user_type = user_types[user_type_name] + type_declarations.extend(user_type.type_declaration) + declarations.append(user_type.declaration) + definitions_inner.append(user_type.definition_inner) + definitions.append(user_type.definition) + + type_declarations = '\n'.join(type_declarations) + declarations = '\n'.join(declarations) + definitions = '\n'.join(definitions_inner + definitions) + helpers = '\n'.join(self.generate_helpers(definitions)) + + return type_declarations, declarations, helpers, definitions + + def format_default(self, type_): + raise NotImplementedError('To be implemented by subclasses.') + + def format_type(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def format_type_inner(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def get_enumerated_values(self, type_): + raise NotImplementedError('To be implemented by subclasses.') + + def get_choice_members(self, type_): + raise NotImplementedError('To be implemented by subclasses.') + + def generate_type_declaration_process(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def generate_definition_inner_process(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def generate_helpers(self, definitions): + raise NotImplementedError('To be implemented by subclasses.') + + def is_complex_user_type(self, type_): + raise NotImplementedError('To be implemented by subclasses.') + + def is_buffer_type(self, type_): + raise NotImplementedError('To be implemented by subclasses.') + + +def canonical(value): + """Replace anything but 'a-z', 'A-Z' and '0-9' with '_'. + + """ + + return re.sub(r'[^a-zA-Z0-9]', '_', value) + + +def camel_to_snake_case(value): + value = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', value) + value = re.sub(r'(_+)', '_', value) + value = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', value).lower() + value = canonical(value) + + return value + + +def join_lines(lines, suffix): + return[line + suffix for line in lines[:-1]] + lines[-1:] + + +def is_user_type(type_): + return type_.module_name is not None + + +def strip_blank_lines(lines): + try: + while lines[0] == '': + del lines[0] + + while lines[-1] == '': + del lines[-1] + except IndexError: + pass + + stripped = [] + + for line in lines: + if line == '' and stripped[-1] == '': + continue + + stripped.append(line) + + return stripped + + +def indent_lines(lines): + indented_lines = [] + + for line in lines: + if line: + indented_line = 4 * ' ' + line + else: + indented_line = line + + indented_lines.append(indented_line) + + return strip_blank_lines(indented_lines) + + +def dedent_lines(lines): + return [line[4:] for line in lines] + + +def topological_sort(graph): + """Topological sort algorithm to return a list of keys to a dictionary + of lists of dependencies. The returned keys define an order so + that all dependent items are in front of the originating item. + + """ + + def recurse(node, path): + if node not in path: + edges = graph[node] + + for edge in edges: + if edge not in path: + path = recurse(edge, path) + + path = path + [node] + + return path + + path = [] + + for node in sorted(graph): + path = recurse(node, path) + + return path diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/rust/__init__.py b/.venv/lib/python3.12/site-packages/asn1tools/source/rust/__init__.py new file mode 100644 index 0000000..d74b6eb --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/rust/__init__.py @@ -0,0 +1,32 @@ +import time + +from ...version import __version__ +from . import uper + + +SOURCE_FMT = '''\ +//! This file was generated by asn1tools version {version} {date}. + +{helpers} +{types_code}\ +''' + + +def generate(compiled, codec): + """Generate Rust source code from given compiled specification. + + """ + + date = time.ctime() + + if codec == 'uper': + helpers, types_code = uper.generate(compiled) + else: + raise Exception() + + source = SOURCE_FMT.format(version=__version__, + date=date, + helpers=helpers, + types_code=types_code) + + return source diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/rust/uper.py b/.venv/lib/python3.12/site-packages/asn1tools/source/rust/uper.py new file mode 100644 index 0000000..7a87841 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/rust/uper.py @@ -0,0 +1,781 @@ +"""Unaligned Packed Encoding Rules (UPER) Rust source code codec generator. + +""" + +from .utils import ENCODER_AND_DECODER_STRUCTS +from .utils import ENCODER_ABORT +from .utils import DECODER_ABORT +from .utils import Generator +from .utils import is_user_type +from .utils import indent_lines +from .utils import dedent_lines +from .utils import make_camel_case +from ...codecs import uper + + +ENCODER_INIT = '''\ + fn new(dst: &'a mut [u8]) -> Encoder { + Encoder { + size: 8 * dst.len(), + buf: dst, + pos: 0, + error: None + } + }\ +''' + +ENCODER_GET_RESULT = ''' + fn get_result(&self) -> Result { + if self.error.is_none() { + return Ok((self.pos + 7) / 8); + } else { + return Err(self.error.unwrap()); + } + }\ +''' + +ENCODER_ALLOC = ''' + fn alloc(&mut self, size: usize) -> Result { + if self.pos + size <= self.size { + let pos = self.pos; + self.pos += size; + Ok(pos) + } else { + self.abort(Error::OutOfMemory); + Err(()) + } + }\ +''' + +ENCODER_APPEND_BIT = ''' + fn append_bit(&mut self, value: u8) { + if let Ok(pos) = self.alloc(1) { + if pos % 8 == 0 { + self.buf[pos / 8] = 0; + } + + self.buf[pos / 8] |= value << (7 - (pos % 8)); + } + }\ +''' + +ENCODER_APPEND_BYTES = ''' + fn append_bytes(&mut self, buf: &[u8]) { + if let Ok(pos) = self.alloc(8 * buf.len()) { + let byte_pos = pos / 8; + let pos_in_byte = pos % 8; + + if pos_in_byte == 0 { + self.buf.get_mut(byte_pos..byte_pos + buf.len()) + .unwrap() + .copy_from_slice(buf.get(0..buf.len()).unwrap()); + } else { + for i in 0..buf.len() { + self.buf[byte_pos + i] |= buf[i] >> pos_in_byte; + self.buf[byte_pos + i + 1] = buf[i] << (8 - pos_in_byte); + } + } + } + }\ +''' + +ENCODER_APPEND_U8 = ''' + fn append_u8(&mut self, value: u8) { + self.append_bytes(&value.to_be_bytes()); + }\ +''' + +ENCODER_APPEND_U16 = ''' + fn append_u16(&mut self, value: u16) { + self.append_bytes(&value.to_be_bytes()); + }\ +''' + +ENCODER_APPEND_U32 = ''' + fn append_u32(&mut self, value: u32) { + self.append_bytes(&value.to_be_bytes()); + }\ +''' + +ENCODER_APPEND_U64 = ''' + fn append_u64(&mut self, value: u64) { + self.append_bytes(&value.to_be_bytes()); + }\ +''' + +ENCODER_APPEND_I8 = ''' + fn append_i8(&mut self, value: i8) { + self.append_u8((value as u8).wrapping_add(128)); + }\ +''' + +ENCODER_APPEND_I16 = ''' + fn append_i16(&mut self, value: i16) { + self.append_u16((value as u16).wrapping_add(32768)); + }\ +''' + +ENCODER_APPEND_I32 = ''' + fn append_i32(&mut self, value: i32) { + self.append_u32((value as u32).wrapping_add(2147483648)); + }\ +''' + +ENCODER_APPEND_I64 = ''' + fn append_i64(&mut self, value: i64) { + self.append_u64((value as u64).wrapping_add(9223372036854775808)); + }\ +''' + +ENCODER_APPEND_BOOL = ''' + fn append_bool(&mut self, value: bool) { + self.append_bit(value as u8); + }\ +''' + +ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER = ''' + fn append_non_negative_binary_integer(&mut self, value: u64, size: usize) { + for i in 0..size { + self.append_bit((value >> (size - i - 1)) as u8 & 1); + } + }\ +''' + +DECODER_INIT = ''' + fn new(src: &'a[u8]) -> Decoder { + Decoder { + buf: src, + size: 8 * src.len(), + pos: 0, + error: None + } + }\ +''' + +DECODER_GET_RESULT = ''' + fn get_result(&self) -> Result { + if self.error.is_none() { + Ok((self.pos + 7) / 8) + } else { + Err(self.error.unwrap()) + } + }\ +''' + +DECODER_FREE = ''' + fn free(&mut self, size: usize) -> Result { + if self.pos + size <= self.size { + let pos = self.pos; + self.pos += size; + Ok(pos) + } else { + self.abort(Error::OutOfData); + Err(()) + } + }\ +''' + +DECODER_READ_BIT = ''' + fn read_bit(&mut self) -> u8 { + if let Ok(pos) = self.free(1) { + (self.buf[pos / 8] >> (7 - (pos % 8))) & 1 + } else { + 0 + } + }\ +''' + +DECODER_READ_BYTES = ''' + fn read_bytes(&mut self, buf: &mut [u8]) { + if let Ok(pos) = self.free(8 * buf.len()) { + let byte_pos = pos / 8; + let pos_in_byte = pos % 8; + + if pos_in_byte == 0 { + buf.copy_from_slice( + self.buf.get(byte_pos..byte_pos + buf.len()).unwrap()); + } else { + for i in 0..buf.len() { + buf[i] = self.buf[byte_pos + i] << pos_in_byte; + buf[i] |= self.buf[byte_pos + i + 1] >> (8 - pos_in_byte); + } + } + } + }\ +''' + +DECODER_READ_U8 = ''' + fn read_u8(&mut self) -> u8 { + let mut buf = [0; 1]; + + self.read_bytes(&mut buf); + + u8::from_be_bytes(buf) + }\ +''' + +DECODER_READ_U16 = ''' + fn read_u16(&mut self) -> u16 { + let mut buf = [0; 2]; + + self.read_bytes(&mut buf); + + u16::from_be_bytes(buf) + }\ +''' + +DECODER_READ_U32 = ''' + fn read_u32(&mut self) -> u32 { + let mut buf = [0; 4]; + + self.read_bytes(&mut buf); + + u32::from_be_bytes(buf) + }\ +''' + +DECODER_READ_U64 = ''' + fn read_u64(&mut self) -> u64 { + let mut buf = [0; 8]; + + self.read_bytes(&mut buf); + + u64::from_be_bytes(buf) + }\ +''' + +DECODER_READ_I8 = ''' + fn read_i8(&mut self) -> i8 { + self.read_u8().wrapping_sub(128) as i8 + }\ +''' + +DECODER_READ_I16 = ''' + fn read_i16(&mut self) -> i16 { + self.read_u16().wrapping_sub(32768) as i16 + }\ +''' + +DECODER_READ_I32 = ''' + fn read_i32(&mut self) -> i32 { + self.read_u32().wrapping_sub(2147483648) as i32 + }\ +''' + +DECODER_READ_I64 = ''' + fn read_i64(&mut self) -> i64 { + self.read_u64().wrapping_sub(9223372036854775808) as i64 + }\ +''' + +DECODER_READ_BOOL = ''' + fn read_bool(&mut self) -> bool { + self.read_bit() != 0 + }\ +''' + +DECODER_READ_NON_NEGATIVE_BINARY_INTEGER = ''' + fn read_non_negative_binary_integer(&mut self, size: usize) -> u64 { + let mut value: u64 = 0; + + for _ in 0..size { + value <<= 1; + value |= self.read_bit() as u64; + } + + value + }\ +''' + + +def does_bits_match_range(number_of_bits, minimum, maximum): + return 2 ** number_of_bits == (maximum - minimum + 1) + + +class _Generator(Generator): + + def format_real(self): + return [] + + def get_enumerated_values(self, type_): + return sorted(type_.root_data_to_index) + + def get_choice_members(self, type_): + return type_.root_index_to_member.values() + + def format_type(self, type_, checker): + if isinstance(type_, uper.Integer): + return self.format_integer(checker) + elif isinstance(type_, uper.Boolean): + return self.format_boolean() + elif isinstance(type_, uper.Real): + return self.format_real() + elif isinstance(type_, uper.Null): + return [] + elif is_user_type(type_): + return self.format_user_type(type_.type_name, + type_.module_name) + elif isinstance(type_, uper.OctetString): + return self.format_octet_string(checker) + elif isinstance(type_, uper.Sequence): + return self.format_sequence(type_, checker) + elif isinstance(type_, uper.Choice): + return self.format_choice(type_, checker) + elif isinstance(type_, uper.SequenceOf): + return self.format_sequence_of(type_, checker) + elif isinstance(type_, uper.Enumerated): + return self.format_enumerated(type_) + else: + raise self.error( + "Unsupported type '{}'.".format(type_.type_name)) + + def generate_type_declaration_process(self, type_, checker): + if isinstance(type_, uper.Integer): + lines = self.format_integer(checker) + lines[0] += ' value;' + elif isinstance(type_, uper.Boolean): + lines = self.format_boolean() + lines[0] += ' value;' + elif isinstance(type_, uper.Real): + lines = self.format_real() + elif isinstance(type_, uper.Enumerated): + lines = self.format_enumerated(type_) + lines[0] += ' value;' + elif isinstance(type_, uper.Sequence): + lines = self.format_sequence(type_, checker) + elif isinstance(type_, uper.SequenceOf): + lines = self.format_sequence_of(type_, checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, uper.Choice): + lines = self.format_choice(type_, checker) + elif isinstance(type_, uper.OctetString): + lines = self.format_octet_string(checker)[1:-1] + lines = dedent_lines(lines) + elif isinstance(type_, uper.Null): + lines = [] + else: + raise self.error( + "Unsupported type '{}'.".format(type_.type_name)) + + return lines + + def generate_definition_inner_process(self, type_, checker): + if isinstance(type_, uper.Integer): + return self.format_integer_inner(type_, checker) + elif isinstance(type_, uper.Boolean): + return self.format_boolean_inner() + elif isinstance(type_, uper.Real): + return self.format_real_inner() + elif isinstance(type_, uper.Sequence): + return self.format_sequence_inner(type_, checker) + elif isinstance(type_, uper.SequenceOf): + return self.format_sequence_of_inner(type_, checker) + elif isinstance(type_, uper.Choice): + return self.format_choice_inner(type_, checker) + elif isinstance(type_, uper.OctetString): + return self.format_octet_string_inner(type_, checker) + elif isinstance(type_, uper.Enumerated): + return self.format_enumerated_inner(type_) + elif isinstance(type_, uper.Null): + return self.format_null_inner() + else: + return [], [] + + def format_integer_inner(self, type_, checker): + type_name = self.format_type_name(checker.minimum, checker.maximum) + location = self.location_inner() + + if (type_.number_of_bits % 8) == 0: + return ( + [ + 'encoder.append_{}(self.{});'.format( + type_name, + location) + ], + [ + 'self.{} = decoder.read_{}();'.format(location, type_name) + ] + ) + else: + return ( + [ + 'encoder.append_non_negative_binary_integer(', + ' (self.{} - {}) as u64,'.format(location, checker.minimum), + ' {});'.format(type_.number_of_bits) + ], + [ + 'self.{} = ' + 'decoder.read_non_negative_binary_integer({}) as {};'.format( + location, + type_.number_of_bits, + type_name), + 'self.{} += {};'.format(location, checker.minimum) + ] + ) + + def format_boolean_inner(self): + return ( + [ + 'encoder.append_bool(self.{});'.format( + self.location_inner()) + ], + [ + 'self.{} = decoder.read_bool();'.format( + self.location_inner()) + ] + ) + + def format_real_inner(self): + return [], [] + + def format_sequence_inner(self, type_, checker): + encode_lines = [] + decode_lines = [] + member_name_to_is_present = {} + + for member in type_.root_members: + if member.optional: + name = '{}is_{}_present'.format(self.location_inner('', '.'), + member.name) + encode_lines.append( + 'encoder.append_bit(self.{} as u8);'.format(name)) + decode_lines.append( + 'self.{} = decoder.read_bit() != 0;'.format( + name)) + elif member.default is not None: + unique_is_present = self.add_unique_variable('is_present') + member_name_to_is_present[member.name] = unique_is_present + encode_lines.append( + 'encoder.append_bit((self.{}{} != {}) as u8);'.format( + self.location_inner('', '.'), + member.name, + member.default)) + decode_lines.append( + '{} = decoder.read_bit() == 1;'.format( + unique_is_present)) + + for member in type_.root_members: + (member_encode_lines, + member_decode_lines) = self.format_sequence_inner_member( + member, + checker, + member_name_to_is_present) + + encode_lines += member_encode_lines + decode_lines += member_decode_lines + + return encode_lines, decode_lines + + def format_octet_string_inner(self, type_, checker): + location = self.location_inner('', '.') + + if checker.minimum == checker.maximum: + encode_lines = [ + 'encoder.append_bytes(&self.{}buf);'.format(location) + ] + decode_lines = [ + 'decoder.read_bytes(&mut self.{}buf);'.format(location) + ] + else: + encode_lines = [ + 'encoder.append_non_negative_binary_integer(', + ' (self.{}length - {}) as u64,'.format(location, + checker.minimum), + ' {});'.format(type_.number_of_bits), + 'encoder.append_bytes(&self.{}buf,'.format(location), + ' self.{}length);'.format(location) + ] + decode_lines = [ + 'self.{}length = decoder.read_non_negative_binary_integer('.format( + location), + ' {});'.format(type_.number_of_bits), + 'self.{}length += {};'.format(location, checker.minimum) + ] + + if not does_bits_match_range(type_.number_of_bits, + checker.minimum, + checker.maximum): + decode_lines += [ + '', + 'if self.{}length > {} {{'.format(location, checker.maximum), + ' decoder.abort(Error::BadLength);', + '', + ' return;', + '}', + '' + ] + + decode_lines += [ + 'decoder.read_bytes(&mut self.{}buf,'.format(location), + ' self.{}length);'.format(location) + ] + + return encode_lines, decode_lines + + def format_user_type_inner(self): + encode_lines = [ + 'self.{}.encode_inner(&mut encoder);'.format( + self.location_inner()) + ] + decode_lines = [ + 'self.{}.decode_inner(&mut decoder);'.format( + self.location_inner()) + ] + + return encode_lines, decode_lines + + def format_choice_inner(self, type_, checker): + encode_lines = [] + decode_lines = [] + unique_choice = self.add_unique_variable('choice') + choice = '{}choice'.format(self.location_inner('', '.')) + + for member in type_.root_index_to_member.values(): + member_checker = self.get_member_checker(checker, + member.name) + + with self.asn1_members_backtrace_push(member.name): + with self.c_members_backtrace_push(member.name): + choice_encode_lines, choice_decode_lines = self.format_type_inner( + member, + member_checker) + + index = type_.root_name_to_index[member.name] + + choice_encode_lines = [ + 'encoder.append_non_negative_binary_integer({}, {});'.format( + index, + type_.root_number_of_bits) + ] + choice_encode_lines + encode_lines += [ + ' {}({}) => {{'.format(make_camel_case(member.name), + unique_choice) + ] + indent_lines(choice_encode_lines, 8) + [ + ' },' + ] + + choice_decode_lines = [ + 'self.{} = {}{};'.format(choice, + self.location, + make_camel_case(member.name)) + ] + choice_decode_lines + decode_lines += [ + ' {} => {{'.format(index) + ] + indent_lines(choice_decode_lines, 8) + [ + ' },' + ] + + encode_lines = [ + '', + 'match self {' + ] + encode_lines + [ + ' _ => encoder.abort(Error::BadChoice);', + '}', + '' + ] + + decode_lines = [ + '', + 'match decoder.read_non_negative_binary_integer({}) {{'.format( + type_.root_number_of_bits) + ] + decode_lines + [ + ' _ => decoder.abort(Error::BadChoice);', + '}', + '' + ] + + return encode_lines, decode_lines + + def format_enumerated_inner(self, type_): + return ( + [ + 'encoder.append_non_negative_binary_integer(' + 'self.{}, {});'.format(self.location_inner(), + type_.root_number_of_bits) + ], + [ + 'self.{} = decoder.read_non_negative_binary_integer(' + '{});'.format(self.location_inner(), + type_.root_number_of_bits) + ] + ) + + def format_null_inner(self): + return ( + [ + '(void)src_p;' + ], + [ + '(void)dst_p;' + ] + ) + + def format_sequence_of_inner(self, type_, checker): + unique_i = self.add_unique_variable('i') + + with self.c_members_backtrace_push('elements[{}]'.format(unique_i)): + encode_lines, decode_lines = self.format_type_inner( + type_.element_type, + checker.element_type) + + if checker.minimum == checker.maximum: + first_encode_lines = first_decode_lines = [ + '', + 'for {} in 0..{} {{'.format(unique_i, checker.maximum) + ] + else: + location = self.location_inner('', '.') + first_encode_lines = [ + 'encoder.append_non_negative_binary_integer(', + ' (self.{}length - {}) as u64,'.format(location, + checker.minimum), + ' {});'.format(type_.number_of_bits), + '', + 'for {} in 0..self.{}length {{'.format(unique_i, location) + ] + first_decode_lines = [ + 'self.{}length = ' + 'decoder.read_non_negative_binary_integer({});'.format( + location, + type_.number_of_bits), + 'self.{}length += {};'.format(location, checker.minimum), + '' + ] + + if not does_bits_match_range(type_.number_of_bits, + checker.minimum, + checker.maximum): + first_decode_lines += [ + 'if self.{}length > {} {{'.format(location, checker.maximum), + ' decoder.abort(Error::BadLength);', + '', + ' return;', + '}', + '' + ] + + first_decode_lines += [ + 'for {} in 0..self.{}length {{'.format(unique_i, location) + ] + + encode_lines = first_encode_lines + indent_lines(encode_lines) + ['}', ''] + decode_lines = first_decode_lines + indent_lines(decode_lines) + ['}', ''] + + return encode_lines, decode_lines + + def format_type_inner(self, type_, checker): + if isinstance(type_, uper.Integer): + return self.format_integer_inner(type_, checker) + elif isinstance(type_, uper.Real): + return self.format_real_inner() + elif isinstance(type_, uper.Null): + return [], [] + elif isinstance(type_, uper.Boolean): + return self.format_boolean_inner() + elif is_user_type(type_): + return self.format_user_type_inner() + elif isinstance(type_, uper.OctetString): + return self.format_octet_string_inner(type_, checker) + elif isinstance(type_, uper.Sequence): + return self.format_sequence_inner(type_, checker) + elif isinstance(type_, uper.Choice): + return self.format_choice_inner(type_, checker) + elif isinstance(type_, uper.SequenceOf): + return self.format_sequence_of_inner(type_, checker) + elif isinstance(type_, uper.Enumerated): + return self.format_enumerated_inner(type_) + else: + raise self.error(type_) + + def generate_encoder(self, definitions): + functions = [ + ('encoder.init(', ENCODER_INIT), + ('encoder.get_result(', ENCODER_GET_RESULT), + ('encoder.abort(', ENCODER_ABORT), + ('encoder.append_bit(', ENCODER_ALLOC), + ('encoder.append_bit(', ENCODER_APPEND_BIT), + ('encoder.append_bytes(', ENCODER_APPEND_BYTES), + ('encoder.append_u8(', ENCODER_APPEND_U8), + ('encoder.append_u16(', ENCODER_APPEND_U16), + ('encoder.append_u32(', ENCODER_APPEND_U32), + ('encoder.append_u64(', ENCODER_APPEND_U64), + ('encoder.append_i8(', ENCODER_APPEND_I8), + ('encoder.append_i16(', ENCODER_APPEND_I16), + ('encoder.append_i32(', ENCODER_APPEND_I32), + ('encoder.append_i64(', ENCODER_APPEND_I64), + ('encoder.append_bool(', ENCODER_APPEND_BOOL), + ( + 'encoder.append_non_negative_binary_integer(', + ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER + ) + ] + + helpers = [ + "impl<'a> Encoder<'a> {", + " fn new(dst: &'a mut [u8]) -> Encoder {", + ' Encoder {', + ' size: 8 * dst.len(),', + ' buf: dst,', + ' pos: 0,', + ' error: None', + ' }', + ' }' + ] + + for pattern, definition in functions: + if pattern in definitions: + helpers.append(definition) + + return helpers + ['}', ''] + + def generate_decoder(self, definitions): + functions = [ + ('decoder.init(', DECODER_INIT), + ('decoder.get_result(', DECODER_GET_RESULT), + ('decoder.abort(', DECODER_ABORT), + ('decoder.read_bit(', DECODER_FREE), + ('decoder.read_bit(', DECODER_READ_BIT), + ('decoder.read_bytes(', DECODER_READ_BYTES), + ('decoder.read_u8(', DECODER_READ_U8), + ('decoder.read_u16(', DECODER_READ_U16), + ('decoder.read_u32(', DECODER_READ_U32), + ('decoder.read_u64(', DECODER_READ_U64), + ('decoder.read_i8(', DECODER_READ_I8), + ('decoder.read_i16(', DECODER_READ_I16), + ('decoder.read_i32(', DECODER_READ_I32), + ('decoder.read_i64(', DECODER_READ_I64), + ('decoder.read_bool(', DECODER_READ_BOOL), + ( + 'decoder.read_non_negative_binary_integer(', + DECODER_READ_NON_NEGATIVE_BINARY_INTEGER + ) + ] + + helpers = [ + "impl<'a> Decoder<'a> {", + " fn new(src: &'a[u8]) -> Decoder {", + ' Decoder {', + ' buf: src,', + ' size: 8 * src.len(),', + ' pos: 0,', + ' error: None', + ' }', + ' }' + ] + + for pattern, definition in functions: + if pattern in definitions: + helpers.append(definition) + + return helpers + ['}'] + + def generate_helpers(self, definitions): + helpers = [ENCODER_AND_DECODER_STRUCTS] + helpers += self.generate_encoder(definitions) + helpers += self.generate_decoder(definitions) + + return helpers + [''] + + +def generate(compiled): + return _Generator().generate(compiled) diff --git a/.venv/lib/python3.12/site-packages/asn1tools/source/rust/utils.py b/.venv/lib/python3.12/site-packages/asn1tools/source/rust/utils.py new file mode 100644 index 0000000..d0de494 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/source/rust/utils.py @@ -0,0 +1,637 @@ +import re + +from ...errors import Error + + +TYPE_DECLARATION_FMT = '''\ +/// Type {type_name} in module {module_name}. +{members} +''' + +DEFINITION_FMT = ''' +impl {module_name}{type_name} {{ + pub fn encode(&mut self, mut dst: &mut [u8]) -> Result {{ + let mut encoder = Encoder::new(&mut dst); + + self.encode_inner(&mut encoder); + + encoder.get_result() + }} + + pub fn decode(&mut self, src: &[u8]) -> Result {{ + let mut decoder = Decoder::new(&src); + + self.decode_inner(&mut decoder); + + decoder.get_result() + }} + + fn encode_inner(&mut self, encoder: &mut Encoder) {{ +{encode_body}\ + }} + + fn decode_inner(&mut self, decoder: &mut Decoder) {{ +{decode_body}\ + }} +}} +''' + +ENCODER_AND_DECODER_STRUCTS = '''\ +#[derive(Debug, PartialEq, Copy, Clone)] +pub enum Error { + BadChoice, + BadEnum, + BadLength, + OutOfData, + OutOfMemory +} + +struct Encoder<'a> { + buf: &'a mut [u8], + size: usize, + pos: usize, + error: Option +} + +struct Decoder<'a> { + buf: &'a[u8], + size: usize, + pos: usize, + error: Option +} +''' + +ENCODER_ABORT = ''' + fn abort(&mut self, error: Error) { + if self.error.is_none() { + self.error = Some(error); + } + }\ +''' + +DECODER_ABORT = ''' + fn abort(&mut self, error: Error) { + if self.error.is_none() { + self.error = Some(error); + } + }\ +''' + + +class _MembersBacktracesContext(object): + + def __init__(self, backtraces, member_name): + self.backtraces = backtraces + self.member_name = member_name + + def __enter__(self): + for backtrace in self.backtraces: + backtrace.append(self.member_name) + + def __exit__(self, *args): + for backtrace in self.backtraces: + backtrace.pop() + + +class _UserType(object): + + def __init__(self, + type_name, + module_name, + type_code, + used_user_types): + self.type_name = type_name + self.module_name = module_name + self.type_code = type_code + self.used_user_types = used_user_types + + +class Generator(object): + + def __init__(self): + self.namespace = 'a' + self.asn1_members_backtrace = [] + self.c_members_backtrace = [] + self.module_name = None + self.type_name = None + self.helper_lines = [] + self.base_variables = set() + self.used_suffixes_by_base_variables = {} + self.encode_variable_lines = [] + self.decode_variable_lines = [] + self.used_user_types = [] + + def reset_type(self): + self.helper_lines = [] + self.base_variables = set() + self.used_suffixes_by_base_variables = {} + self.encode_variable_lines = [] + self.decode_variable_lines = [] + self.used_user_types = [] + + @property + def module_name_snake(self): + return camel_to_snake_case(self.module_name) + + @property + def type_name_snake(self): + return camel_to_snake_case(self.type_name) + + def type_length(self, minimum, maximum): + # Make sure it fits in 64 bits. + if minimum < -9223372036854775808: + raise self.error( + '{} does not fit in int64_t.'.format(minimum)) + elif maximum > 18446744073709551615: + raise self.error( + '{} does not fit in uint64_t.'.format(maximum)) + elif minimum < 0 and maximum > 9223372036854775807: + raise self.error( + '{} does not fit in int64_t.'.format(maximum)) + + # Calculate the number of bytes needed. + if minimum < -4294967296: + minimum_length = 64 + elif minimum < -65536: + minimum_length = 32 + elif minimum < -256: + minimum_length = 16 + elif minimum < 0: + minimum_length = 8 + else: + minimum_length = 0 + + if maximum > 4294967295: + maximum_length = 64 + elif maximum > 65535: + maximum_length = 32 + elif maximum > 255: + maximum_length = 16 + elif maximum > 0: + maximum_length = 8 + else: + maximum_length = 0 + + if minimum_length == maximum_length == 0: + length = 8 + else: + length = max(minimum_length, maximum_length) + + return length + + def format_type_name(self, minimum, maximum): + length = self.type_length(minimum, maximum) + + if minimum >= 0: + type_name = 'u{}'.format(length) + else: + type_name = 'i{}'.format(length) + + return type_name + + @property + def location(self): + location = '{}{}'.format(self.module_name, + self.type_name) + + for member in self.asn1_members_backtrace: + location += make_camel_case(member) + + return location + + def location_inner(self, default='value', end=''): + if self.c_members_backtrace: + return '.'.join(self.c_members_backtrace) + end + else: + return default + + def location_error(self): + location = '{}.{}'.format(self.module_name, self.type_name) + + if self.asn1_members_backtrace: + location += '.{}'.format('.'.join(self.asn1_members_backtrace)) + + return location + + def members_backtrace_push(self, member_name): + backtraces = [ + self.asn1_members_backtrace, + self.c_members_backtrace + ] + + return _MembersBacktracesContext(backtraces, member_name) + + def asn1_members_backtrace_push(self, member_name): + backtraces = [self.asn1_members_backtrace] + + return _MembersBacktracesContext(backtraces, member_name) + + def c_members_backtrace_push(self, member_name): + backtraces = [self.c_members_backtrace] + + return _MembersBacktracesContext(backtraces, member_name) + + def get_member_checker(self, checker, name): + for member in checker.members: + if member.name == name: + return member + + raise Error('No member checker found for {}.'.format(name)) + + def add_unique_variable(self, name): + if name in self.base_variables: + try: + suffix = self.used_suffixes_by_base_variables[name] + suffix += 1 + except KeyError: + suffix = 2 + + self.used_suffixes_by_base_variables[name] = suffix + unique_name = '{}_{}'.format(name, suffix) + else: + self.base_variables.add(name) + unique_name = name + + return unique_name + + def error(self, message): + return Error('{}: {}'.format(self.location_error(), message)) + + def format_integer(self, checker): + if not checker.has_lower_bound(): + raise self.error('INTEGER has no minimum value.') + + if not checker.has_upper_bound(): + raise self.error('INTEGER has no maximum value.') + + type_name = self.format_type_name(checker.minimum, checker.maximum) + + return [type_name] + + def format_boolean(self): + return ['bool'] + + def format_octet_string(self, checker): + if not checker.has_upper_bound(): + raise self.error('OCTET STRING has no maximum length.') + + if checker.minimum == checker.maximum: + lines = [] + elif checker.maximum < 256: + lines = [' let length: u8;'] + else: + lines = [' let length: u32;'] + + return [ + '#[derive(Debug, Default, PartialEq, Copy, Clone)]', + 'pub struct {} {{'.format(self.location) + ] + lines + [ + ' pub buf: [u8; {}]'.format(checker.maximum), + '}' + ] + + def format_sequence(self, type_, checker): + helper_lines = [] + lines = [] + + for member in type_.root_members: + member_checker = self.get_member_checker(checker, member.name) + + if member.optional: + lines += ['pub is_{}_present: bool,'.format(member.name)] + + with self.members_backtrace_push(member.name): + member_lines = self.format_type(member, member_checker) + member_location = self.location + + if not member_lines: + continue + + if is_inline_member_lines(member_lines): + member_lines[-1] = 'pub {}: {},'.format(member.name, + member_lines[-1]) + else: + helper_lines += member_lines + [''] + member_lines = ['pub {}: {},'.format(member.name, + member_location)] + + lines += member_lines + + if lines: + lines[-1] = lines[-1].strip(',') + + return helper_lines + [ + '#[derive(Debug, Default, PartialEq, Copy, Clone)]', + 'pub struct {} {{'.format(self.location) + ] + indent_lines(lines) + [ + '}' + ] + + def format_sequence_of(self, type_, checker): + if not checker.is_bound(): + raise self.error('SEQUENCE OF has no maximum length.') + + with self.asn1_members_backtrace_push('elem'): + lines = self.format_type(type_.element_type, + checker.element_type) + + if lines: + lines[-1] += ' elements[{}];'.format(checker.maximum) + + if checker.minimum == checker.maximum: + length_lines = [] + elif checker.maximum < 256: + length_lines = ['let length: u8;'] + else: + length_lines = ['let length: u32;'] + + return ['struct {'] + indent_lines(length_lines + lines) + ['}'] + + def format_enumerated(self, type_): + lines = [ + '#[derive(Debug, PartialEq, Copy, Clone)]', + 'pub enum {} {{'.format(self.location) + ] + [ + ' {},'.format(make_camel_case(value)) + for value in self.get_enumerated_values(type_) + ] + [ + '}', + '', + 'impl Default for {} {{'.format(self.location), + ' fn default() -> Self {', + ' {}::{}'.format(self.location, + self.get_enumerated_values(type_)[0].upper()), + ' }', + '}' + + ] + + return lines + + def format_choice(self, type_, checker): + helper_lines = [] + lines = [] + + for member in self.get_choice_members(type_): + member_checker = self.get_member_checker(checker, + member.name) + + with self.members_backtrace_push(member.name): + member_lines = self.format_type(member, member_checker) + member_location = self.location + + if not member_lines: + continue + + if is_inline_member_lines(member_lines): + member_lines[-1] = '{}({}),'.format(make_camel_case(member.name), + member_lines[-1]) + else: + helper_lines += member_lines + [''] + member_lines = ['pub {}: {},'.format(member.name, + member_location)] + + lines += member_lines + + if lines: + lines[-1] = lines[-1].strip(',') + + return helper_lines + [ + '#[derive(Debug, PartialEq, Copy, Clone)]', + 'pub enum {} {{'.format(self.location) + ] + indent_lines(lines) + [ + '}' + ] + + def format_user_type(self, type_name, module_name): + self.used_user_types.append((type_name, module_name)) + + return ['{}{}'.format(module_name, type_name)] + + def format_sequence_inner_member(self, + member, + checker, + default_condition_by_member_name): + member_checker = self.get_member_checker(checker, member.name) + + with self.members_backtrace_push(member.name): + encode_lines, decode_lines = self.format_type_inner( + member, + member_checker) + + location = self.location_inner('', '.') + + if member.optional: + is_present = '{}is_{}_present'.format(location, member.name) + encode_lines = [ + '', + 'if src.{} {{'.format(is_present) + ] + indent_lines(encode_lines) + [ + '}', + '' + ] + decode_lines = [ + '', + 'if dst.{} {{'.format(is_present) + ] + indent_lines(decode_lines) + [ + '}', + '' + ] + elif member.default is not None: + name = '{}{}'.format(location, member.name) + encode_lines = [ + '', + 'if src.{} != {} {{'.format(name, member.default) + ] + indent_lines(encode_lines) + [ + '}', + '' + ] + decode_lines = [ + '', + 'if {} {{'.format(default_condition_by_member_name[member.name]) + ] + indent_lines(decode_lines) + [ + '} else {', + ' dst.{} = {};'.format(name, member.default), + '}', + '' + ] + + return encode_lines, decode_lines + + def generate_type_declaration(self, compiled_type): + type_ = compiled_type.type + checker = compiled_type.constraints_checker.type + + lines = self.generate_type_declaration_process(type_, checker) + + if not lines: + lines = ['dummy: u8;'] + + if self.helper_lines: + self.helper_lines.append('') + + return TYPE_DECLARATION_FMT.format(module_name=self.module_name, + type_name=self.type_name, + members='\n'.join(lines)) + + def generate_definition(self, compiled_type): + encode_lines, decode_lines = self.generate_definition_inner_process( + compiled_type.type, + compiled_type.constraints_checker.type) + + if self.encode_variable_lines: + encode_lines = self.encode_variable_lines + [''] + encode_lines + + if self.decode_variable_lines: + decode_lines = self.decode_variable_lines + [''] + decode_lines + + encode_lines = indent_lines(indent_lines(encode_lines)) + [''] + decode_lines = indent_lines(indent_lines(decode_lines)) + [''] + + return DEFINITION_FMT.format(module_name=self.module_name, + type_name=self.type_name, + encode_body='\n'.join(encode_lines), + decode_body='\n'.join(decode_lines)) + + def generate(self, compiled): + user_types = [] + + for module_name, module in sorted(compiled.modules.items()): + self.module_name = module_name + + for type_name, compiled_type in sorted(module.items()): + self.type_name = type_name + self.reset_type() + + type_declaration = self.generate_type_declaration(compiled_type) + definition = self.generate_definition(compiled_type) + user_type = _UserType(type_name, + module_name, + type_declaration + definition, + self.used_user_types) + user_types.append(user_type) + + user_types = sort_user_types_by_used_user_types(user_types) + + types_code = [] + + for user_type in user_types: + types_code.append(user_type.type_code) + + types_code = '\n'.join(types_code) + helpers = '\n'.join(self.generate_helpers(types_code)) + + return helpers, types_code + + def format_type(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def format_type_inner(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def get_enumerated_values(self, type_): + raise NotImplementedError('To be implemented by subclasses.') + + def get_choice_members(self, type_): + raise NotImplementedError('To be implemented by subclasses.') + + def generate_type_declaration_process(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def generate_definition_inner_process(self, type_, checker): + raise NotImplementedError('To be implemented by subclasses.') + + def generate_helpers(self, definitions): + raise NotImplementedError('To be implemented by subclasses.') + + +def canonical(value): + """Replace anything but 'a-z', 'A-Z' and '0-9' with '_'. + + """ + + return re.sub(r'[^a-zA-Z0-9]', '_', value) + + +def camel_to_snake_case(value): + value = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', value) + value = re.sub(r'(_+)', '_', value) + value = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', value).lower() + value = canonical(value) + + return value + + +def make_camel_case(value): + return value[0].upper() + value[1:] + + +def join_lines(lines, suffix): + return[line + suffix for line in lines[:-1]] + lines[-1:] + + +def is_user_type(type_): + return type_.module_name is not None + + +def strip_blank_lines(lines): + try: + while lines[0] == '': + del lines[0] + + while lines[-1] == '': + del lines[-1] + except IndexError: + pass + + stripped = [] + + for line in lines: + if line == '' and stripped[-1] == '': + continue + + stripped.append(line) + + return stripped + + +def indent_lines(lines, width=4): + indented_lines = [] + + for line in lines: + if line: + indented_line = width * ' ' + line + else: + indented_line = line + + indented_lines.append(indented_line) + + return strip_blank_lines(indented_lines) + + +def dedent_lines(lines, width=4): + return [line[width:] for line in lines] + + +def sort_user_types_by_used_user_types(user_types): + reversed_sorted_user_types = [] + + for user_type in user_types: + user_type_name_tuple = (user_type.type_name, user_type.module_name) + + # Insert first in the reversed list if there are no types + # using this type. + insert_index = 0 + + for i, reversed_sorted_user_type in enumerate(reversed_sorted_user_types, 1): + if user_type_name_tuple in reversed_sorted_user_type.used_user_types: + if i > insert_index: + insert_index = i + + reversed_sorted_user_types.insert(insert_index, user_type) + + return reversed(reversed_sorted_user_types) + + +def is_inline_member_lines(member_lines): + return len(member_lines) == 1 diff --git a/.venv/lib/python3.12/site-packages/asn1tools/version.py b/.venv/lib/python3.12/site-packages/asn1tools/version.py new file mode 100644 index 0000000..c1db08b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/asn1tools/version.py @@ -0,0 +1 @@ +__version__ = '0.167.0' diff --git a/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/INSTALLER b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/METADATA b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/METADATA new file mode 100644 index 0000000..0ba8387 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/METADATA @@ -0,0 +1,252 @@ +Metadata-Version: 2.4 +Name: bitstruct +Version: 8.21.0 +Summary: This module performs conversions between Python values and C bit field structs represented as Python byte strings. +Author: Ilya Petukhov +Author-email: Erik Moqvist +License-Expression: MIT +Project-URL: Documentation, https://bitstruct.readthedocs.io/en/latest/ +Project-URL: Issues, https://github.com/eerimoq/bitstruct/issues +Project-URL: Source, https://github.com/eerimoq/bitstruct +Project-URL: Homepage, https://github.com/eerimoq/bitstruct +Keywords: bit field,bit parsing,bit unpack,bit pack +Classifier: Development Status :: 5 - Production/Stable +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: Implementation :: CPython +Requires-Python: >=3.9 +Description-Content-Type: text/x-rst +License-File: LICENSE +Dynamic: license-file + +About +===== + +This module is intended to have a similar interface as the python +struct module, but working on bits instead of primitive data types +(char, int, ...). + +Project homepage: https://github.com/eerimoq/bitstruct + +Documentation: https://bitstruct.readthedocs.io + +Installation +============ + +.. code-block:: python + + pip install bitstruct + +Performance +=========== + +Parts of this package has been re-implemented in C for faster pack and +unpack operations. There are two independent C implementations; +`bitstruct.c`, which is part of this package, and the standalone +package `cbitstruct`_. These implementations are only available in +CPython 3, and must be explicitly imported. By default the pure Python +implementation is used. + +To use `bitstruct.c`, do ``import bitstruct.c as bitstruct``. + +To use `cbitstruct`_, do ``import cbitstruct as bitstruct``. + +`bitstruct.c` has a few limitations compared to the pure Python +implementation: + +- Integers and booleans must be 64 bits or less. + +- Text and raw must be a multiple of 8 bits. + +- Bit endianness and byte order are not yet supported. + +- ``byteswap()`` can only swap 1, 2, 4 and 8 bytes. + +See `cbitstruct`_ for its limitations. + +MicroPython +=========== + +The C implementation has been ported to `MicroPython`_. See +`bitstruct-micropython`_ for more details. + +Example usage +============= + +A basic example of `packing`_ and `unpacking`_ four integers using the +format string ``'u1u3u4s16'``: + +.. code-block:: python + + >>> from bitstruct import * + >>> pack('u1u3u4s16', 1, 2, 3, -4) + b'\xa3\xff\xfc' + >>> unpack('u1u3u4s16', b'\xa3\xff\xfc') + (1, 2, 3, -4) + >>> calcsize('u1u3u4s16') + 24 + +An example `compiling`_ the format string once, and use it to `pack`_ +and `unpack`_ data: + +.. code-block:: python + + >>> import bitstruct + >>> cf = bitstruct.compile('u1u3u4s16') + >>> cf.pack(1, 2, 3, -4) + b'\xa3\xff\xfc' + >>> cf.unpack(b'\xa3\xff\xfc') + (1, 2, 3, -4) + +Use the `pack into`_ and `unpack from`_ functions to pack/unpack +values at a bit offset into the data, in this example the bit offset +is 5: + +.. code-block:: python + + >>> from bitstruct import * + >>> data = bytearray(b'\x00\x00\x00\x00') + >>> pack_into('u1u3u4s16', data, 5, 1, 2, 3, -4) + >>> data + bytearray(b'\x05\x1f\xff\xe0') + >>> unpack_from('u1u3u4s16', data, 5) + (1, 2, 3, -4) + +The unpacked values can be named by assigning them to variables or by +wrapping the result in a named tuple: + +.. code-block:: python + + >>> from bitstruct import * + >>> from collections import namedtuple + >>> MyName = namedtuple('myname', ['a', 'b', 'c', 'd']) + >>> unpacked = unpack('u1u3u4s16', b'\xa3\xff\xfc') + >>> myname = MyName(*unpacked) + >>> myname + myname(a=1, b=2, c=3, d=-4) + >>> myname.c + 3 + +Use the `pack_dict`_ and `unpack_dict`_ functions to pack/unpack +values in dictionaries: + +.. code-block:: python + + >>> from bitstruct import * + >>> names = ['a', 'b', 'c', 'd'] + >>> pack_dict('u1u3u4s16', names, {'a': 1, 'b': 2, 'c': 3, 'd': -4}) + b'\xa3\xff\xfc' + >>> unpack_dict('u1u3u4s16', names, b'\xa3\xff\xfc') + {'a': 1, 'b': 2, 'c': 3, 'd': -4} + +An example of `packing`_ and `unpacking`_ an unsigned integer, a +signed integer, a float, a boolean, a byte string and a string: + +.. code-block:: python + + >>> from bitstruct import * + >>> pack('u5s5f32b1r13t40', 1, -1, 3.75, True, b'\xff\xff', 'hello') + b'\x0f\xd0\x1c\x00\x00?\xffhello' + >>> unpack('u5s5f32b1r13t40', b'\x0f\xd0\x1c\x00\x00?\xffhello') + (1, -1, 3.75, True, b'\xff\xf8', 'hello') + >>> calcsize('u5s5f32b1r13t40') + 96 + +The same format string and values as in the previous example, but +using LSB (Least Significant Bit) first instead of the default MSB +(Most Significant Bit) first: + +.. code-block:: python + + >>> from bitstruct import * + >>> pack('>> unpack('>> calcsize('>> from bitstruct import * + >>> from binascii import unhexlify + >>> unpack('s17s13r24', unhexlify('0123456789abcdef')) + (582, -3751, b'\xe2j\xf3') + >>> with open("test.bin", "rb") as fin: + ... unpack('s17s13r24', fin.read(8)) + ... + ... + (582, -3751, b'\xe2j\xf3') + +Change endianness of the data with `byteswap`_, and then unpack the +values: + +.. code-block:: python + + >>> from bitstruct import * + >>> packed = pack('u1u3u4s16', 1, 2, 3, 1) + >>> unpack('u1u3u4s16', byteswap('12', packed)) + (1, 2, 3, 256) + +A basic example of `packing`_ and `unpacking`_ four integers using the +format string ``'u1u3u4s16'`` using the C implementation: + +.. code-block:: python + + >>> from bitstruct.c import * + >>> pack('u1u3u4s16', 1, 2, 3, -4) + b'\xa3\xff\xfc' + >>> unpack('u1u3u4s16', b'\xa3\xff\xfc') + (1, 2, 3, -4) + +Contributing +============ + +#. Fork the repository. + +#. Install prerequisites. + + .. code-block:: text + + pip install -r requirements.txt + +#. Implement the new feature or bug fix. + +#. Implement test case(s) to ensure that future changes do not break + legacy. + +#. Run the tests. + + .. code-block:: text + + make test + +#. Create a pull request. + +.. _packing: http://bitstruct.readthedocs.io/en/latest/#bitstruct.pack + +.. _unpacking: http://bitstruct.readthedocs.io/en/latest/#bitstruct.unpack + +.. _pack: http://bitstruct.readthedocs.io/en/latest/#bitstruct.CompiledFormat.pack + +.. _unpack: http://bitstruct.readthedocs.io/en/latest/#bitstruct.CompiledFormat.unpack + +.. _pack into: http://bitstruct.readthedocs.io/en/latest/#bitstruct.pack_into + +.. _unpack from: http://bitstruct.readthedocs.io/en/latest/#bitstruct.unpack_from + +.. _pack_dict: http://bitstruct.readthedocs.io/en/latest/#bitstruct.pack_dict + +.. _unpack_dict: http://bitstruct.readthedocs.io/en/latest/#bitstruct.unpack_dict + +.. _byteswap: http://bitstruct.readthedocs.io/en/latest/#bitstruct.byteswap + +.. _compiling: http://bitstruct.readthedocs.io/en/latest/#bitstruct.compile + +.. _cbitstruct: https://github.com/qchateau/cbitstruct + +.. _MicroPython: https://github.com/micropython/micropython + +.. _bitstruct-micropython: https://github.com/peterzuger/bitstruct-micropython diff --git a/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/RECORD b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/RECORD new file mode 100644 index 0000000..0e665ff --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/RECORD @@ -0,0 +1,12 @@ +bitstruct-8.21.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +bitstruct-8.21.0.dist-info/METADATA,sha256=zUEb8iQLijBH4jRbhyDaNJn-isGvFxWLZYGnCao0yIg,7341 +bitstruct-8.21.0.dist-info/RECORD,, +bitstruct-8.21.0.dist-info/WHEEL,sha256=KiTXh7n7p_FQI2KVe1JoI_BsX9D_sBmLIl9O7QtgDL0,151 +bitstruct-8.21.0.dist-info/licenses/LICENSE,sha256=7T2TtOL_oh75b3QyWjeJu-6qMOQpJXmIW0hddxJ1L-k,1085 +bitstruct-8.21.0.dist-info/top_level.txt,sha256=b0kw0ViH-dPZgGdKvrcClAN_7YmjDw8qUAUUXSNmkq0,10 +bitstruct/__init__.py,sha256=mMKszXL4Dnl1HX7oPdd-5kgYZuw7exdPZeMFUcV3HhI,20166 +bitstruct/__pycache__/__init__.cpython-312.pyc,, +bitstruct/bitstream.c,sha256=FXu85k4t7lfJ524g6N5WD3_8TORI1sqV9YuGh6savds,17486 +bitstruct/bitstream.h,sha256=basgoSY8P8FR3cOcC4rsbuPmeR6l1EyRH5EDaoXr4lQ,6047 +bitstruct/c.c,sha256=-OE2uA8ub5x0iYJ6z6SUDisXDqkKG84FP2T6rq8yLlI,68290 +bitstruct/c.cpython-312-x86_64-linux-gnu.so,sha256=ocpv1YGxQFfXEySpzSqkDs1eUC6-kWafkFjNp-YVVTI,177664 diff --git a/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/WHEEL b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/WHEEL new file mode 100644 index 0000000..8560847 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.4.0) +Root-Is-Purelib: false +Tag: cp312-cp312-manylinux_2_17_x86_64 +Tag: cp312-cp312-manylinux2014_x86_64 + diff --git a/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/licenses/LICENSE b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/licenses/LICENSE new file mode 100644 index 0000000..3e69c4e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/licenses/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015-2019 Erik Moqvist + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/top_level.txt b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/top_level.txt new file mode 100644 index 0000000..2426106 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct-8.21.0.dist-info/top_level.txt @@ -0,0 +1 @@ +bitstruct diff --git a/.venv/lib/python3.12/site-packages/bitstruct/__init__.py b/.venv/lib/python3.12/site-packages/bitstruct/__init__.py new file mode 100644 index 0000000..155765b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct/__init__.py @@ -0,0 +1,700 @@ +__version__ = '8.21.0' + +import binascii +import re +import struct +from io import BytesIO + + +class Error(Exception): + pass + + +class _Info: + + def __init__(self, size, name=None): + self.size = size + self.name = name + self.endianness = None + + +class _SignedInteger(_Info): + + def __init__(self, size, name): + super().__init__(size, name) + self.minimum = -2 ** (size - 1) + self.maximum = -self.minimum - 1 + + def pack(self, arg): + value = int(arg) + + if value < self.minimum or value > self.maximum: + raise Error( + '"s{}" requires {} <= integer <= {} (got {})'.format( + self.size, + self.minimum, + self.maximum, + arg)) + + if value < 0: + value += (1 << self.size) + + value += (1 << self.size) + + return bin(value)[3:] + + def unpack(self, bits): + value = int(bits, 2) + + if bits[0] == '1': + value -= (1 << len(bits)) + + return value + + +class _UnsignedInteger(_Info): + + def __init__(self, size, name): + super().__init__(size, name) + self.maximum = 2 ** size - 1 + + def pack(self, arg): + value = int(arg) + + if value < 0 or value > self.maximum: + raise Error( + f'"u{self.size}" requires 0 <= integer <= {self.maximum} (got {arg})') + + return bin(value + (1 << self.size))[3:] + + def unpack(self, bits): + return int(bits, 2) + + +class _Boolean(_UnsignedInteger): + + def pack(self, arg): + return super().pack(int(bool(arg))) + + def unpack(self, bits): + return bool(super().unpack(bits)) + + +class _Float(_Info): + + def pack(self, arg): + value = float(arg) + + if self.size == 16: + value = struct.pack('>e', value) + elif self.size == 32: + value = struct.pack('>f', value) + elif self.size == 64: + value = struct.pack('>d', value) + else: + raise Error(f'expected float size of 16, 32, or 64 bits (got {self.size})') + + return bin(int(b'01' + binascii.hexlify(value), 16))[3:] + + def unpack(self, bits): + packed = _unpack_bytearray(self.size, bits) + + if self.size == 16: + value = struct.unpack('>e', packed)[0] + elif self.size == 32: + value = struct.unpack('>f', packed)[0] + elif self.size == 64: + value = struct.unpack('>d', packed)[0] + else: + raise Error(f'expected float size of 16, 32, or 64 bits (got {self.size})') + + return value + + +class _Raw(_Info): + + def pack(self, arg): + number_of_padding_bytes = ((self.size - 8 * len(arg)) // 8) + arg += (number_of_padding_bytes * b'\x00') + + return bin(int(b'01' + binascii.hexlify(arg), 16))[3:self.size + 3] + + def unpack(self, bits): + rest = self.size % 8 + + if rest > 0: + bits += (8 - rest) * '0' + + return binascii.unhexlify(hex(int('10000000' + bits, 2))[4:].rstrip('L')) + + +class _Padding(_Info): + + pass + + +class _ZeroPadding(_Padding): + + def pack(self): + return self.size * '0' + + +class _OnePadding(_Padding): + + def pack(self): + return self.size * '1' + + +class _Text(_Info): + + def __init__(self, size, name, encoding, errors): + super().__init__(size, name) + self.encoding = encoding + self.errors = errors + + def pack(self, arg): + encoded = arg.encode('utf-8') + number_of_padding_bytes = ((self.size - 8 * len(encoded)) // 8) + encoded += (number_of_padding_bytes * b'\x00') + + return _pack_bytearray(self.size, encoded) + + def unpack(self, bits): + return _unpack_bytearray(self.size, bits).decode(self.encoding, self.errors) + + +def _parse_format(fmt, names, text_encoding, text_errors): + if fmt and fmt[-1] in '><': + byte_order = fmt[-1] + fmt = fmt[:-1] + else: + byte_order = '' + + parsed_infos = re.findall(r'([<>]?)([a-zA-Z])(\d+)(\s*)', fmt) + + if ''.join([''.join(info) for info in parsed_infos]) != fmt: + raise Error(f"bad format '{fmt + byte_order}'") + + # Use big endian as default and use the endianness of the previous + # value if none is given for the current value. + infos = [] + endianness = ">" + i = 0 + + for parsed_info in parsed_infos: + if parsed_info[0] != "": + endianness = parsed_info[0] + + type_ = parsed_info[1] + size = int(parsed_info[2]) + + if size == 0: + raise Error(f"bad format '{fmt + byte_order}'") + + if names is None: + name = i + elif type_ not in 'pP': + name = names[i] + + if type_ == 's': + info = _SignedInteger(size, name) + i += 1 + elif type_ == 'u': + info = _UnsignedInteger(size, name) + i += 1 + elif type_ == 'f': + info = _Float(size, name) + i += 1 + elif type_ == 'b': + info = _Boolean(size, name) + i += 1 + elif type_ == 't': + info = _Text(size, name, text_encoding, text_errors) + i += 1 + elif type_ == 'r': + info = _Raw(size, name) + i += 1 + elif type_ == 'p': + info = _ZeroPadding(size) + elif type_ == 'P': + info = _OnePadding(size) + else: + raise Error(f"bad char '{type_}' in format") + + info.endianness = endianness + + infos.append(info) + + return infos, byte_order or '>' + + +def _pack_bytearray(size, arg): + return bin(int(b'01' + binascii.hexlify(arg), 16))[3:size + 3] + + +def _unpack_bytearray(size, bits): + rest = size % 8 + + if rest > 0: + bits += (8 - rest) * '0' + + return binascii.unhexlify(hex(int('10000000' + bits, 2))[4:].rstrip('L')) + + +class _CompiledFormat: + + def __init__(self, + fmt, + names=None, + text_encoding='utf-8', + text_errors='strict'): + infos, byte_order = _parse_format(fmt, names, text_encoding, text_errors) + self._infos = infos + self._byte_order = byte_order + self._number_of_bits_to_unpack = sum([info.size for info in infos]) + + def pack_value(self, info, value, bits): + value_bits = info.pack(value) + + # Reverse the bit order in little endian values. + if info.endianness == "<": + value_bits = value_bits[::-1] + + # Reverse bytes order for least significant byte first. + if self._byte_order == ">" or isinstance(info, (_Raw, _Text)): + bits += value_bits + else: + aligned_offset = len(value_bits) - (8 - (len(bits) % 8)) + + while aligned_offset > 0: + bits += value_bits[aligned_offset:] + value_bits = value_bits[:aligned_offset] + aligned_offset -= 8 + + bits += value_bits + + return bits + + def pack_any(self, values): + bits = '' + + for info in self._infos: + if isinstance(info, _Padding): + bits += info.pack() + else: + bits = self.pack_value(info, values[info.name], bits) + + # Padding of last byte. + tail = len(bits) % 8 + + if tail != 0: + bits += (8 - tail) * '0' + + return bytes(_unpack_bytearray(len(bits), bits)) + + def unpack_from_any(self, data, offset, allow_truncated): + bits = bin(int(b'01' + binascii.hexlify(data), 16))[3 + offset:] + + # Sanity check. + if not allow_truncated and self._number_of_bits_to_unpack > len(bits): + raise Error( + "unpack requires at least {} bits to unpack (got {})".format( + self._number_of_bits_to_unpack, + len(bits))) + + offset = 0 + + for info in self._infos: + if offset + info.size > len(bits): + # Stop unpacking if we ran out of bytes to + # unpack. Note that this condition will never trigger + # if `allow_truncated` is not `True` because of the + # sanity check above. + return + + if isinstance(info, _Padding): + pass + else: + # Reverse bytes order for least significant byte + # first. + if self._byte_order == ">" or isinstance(info, (_Raw, _Text)): + value_bits = bits[offset:offset + info.size] + else: + value_bits_tmp = bits[offset:offset + info.size] + aligned_offset = (info.size - ((offset + info.size) % 8)) + value_bits = '' + + while aligned_offset > 0: + value_bits += value_bits_tmp[aligned_offset:aligned_offset + 8] + value_bits_tmp = value_bits_tmp[:aligned_offset] + aligned_offset -= 8 + + value_bits += value_bits_tmp + + # Reverse the bit order in little endian values. + if info.endianness == "<": + value_bits = value_bits[::-1] + + yield info, info.unpack(value_bits) + + offset += info.size + + def pack_into_any(self, buf, offset, data, **kwargs): + fill_padding = kwargs.get('fill_padding', True) + buf_bits = _pack_bytearray(8 * len(buf), buf) + bits = buf_bits[0:offset] + + for info in self._infos: + if isinstance(info, _Padding): + if fill_padding: + bits += info.pack() + else: + bits += buf_bits[len(bits):len(bits) + info.size] + else: + bits = self.pack_value(info, data[info.name], bits) + + bits += buf_bits[len(bits):] + + if len(bits) > len(buf_bits): + raise Error( + f'pack_into requires a buffer of at least {len(bits)} bits') + + buf[:] = _unpack_bytearray(len(bits), bits) + + def calcsize(self): + """Return the number of bits in the compiled format string. + + """ + + return self._number_of_bits_to_unpack + + +class CompiledFormat(_CompiledFormat): + """A compiled format string that can be used to pack and/or unpack + data multiple times. + + Instances of this class are created by the factory function + :func:`~bitstruct.compile()`. + + """ + + def __init__(self, fmt, text_encoding='utf-8', text_errors='strict'): + super().__init__(fmt, None, text_encoding, text_errors) + self._number_of_arguments = 0 + + for info in self._infos: + if not isinstance(info, _Padding): + self._number_of_arguments += 1 + + def pack(self, *args): + """See :func:`~bitstruct.pack()`. + + """ + + # Sanity check of the number of arguments. + if len(args) < self._number_of_arguments: + raise Error( + "pack expected {} item(s) for packing (got {})".format( + self._number_of_arguments, + len(args))) + + return self.pack_any(args) + + def unpack(self, data, allow_truncated=False): + """See :func:`~bitstruct.unpack()`. + + """ + + return self.unpack_from(data, allow_truncated=allow_truncated) + + def pack_into(self, buf, offset, *args, **kwargs): + """See :func:`~bitstruct.pack_into()`. + + """ + + # Sanity check of the number of arguments. + if len(args) < self._number_of_arguments: + raise Error( + "pack expected {} item(s) for packing (got {})".format( + self._number_of_arguments, + len(args))) + + self.pack_into_any(buf, offset, args, **kwargs) + + def unpack_from(self, data, offset=0, allow_truncated=False): + """See :func:`~bitstruct.unpack_from()`. + + """ + + return tuple([v[1] for v in self.unpack_from_any( + data, offset, allow_truncated=allow_truncated)]) + +class CompiledFormatDict(_CompiledFormat): + """See :class:`~bitstruct.CompiledFormat`. + + """ + + def pack(self, data): + """See :func:`~bitstruct.pack_dict()`. + + """ + + try: + return self.pack_any(data) + except KeyError as e: + raise Error(f'{str(e)} not found in data dictionary') + + def unpack(self, data, allow_truncated=False): + """See :func:`~bitstruct.unpack_dict()`. + + """ + + return self.unpack_from(data, allow_truncated=allow_truncated) + + def pack_into(self, buf, offset, data, **kwargs): + """See :func:`~bitstruct.pack_into_dict()`. + + """ + + try: + self.pack_into_any(buf, offset, data, **kwargs) + except KeyError as e: + raise Error(f'{str(e)} not found in data dictionary') + + def unpack_from(self, data, offset=0, allow_truncated=False): + """See :func:`~bitstruct.unpack_from_dict()`. + + """ + + return { + info.name: v for info, v in self.unpack_from_any( + data, offset, allow_truncated=allow_truncated)} + + +def pack(fmt, *args): + """Return a bytes object containing the values v1, v2, ... packed + according to given format string `fmt`. If the total number of + bits are not a multiple of 8, padding will be added at the end of + the last byte. + + `fmt` is a string of bit order-type-length groups, and optionally + a byte order identifier after the groups. Bit Order and byte order + may be omitted. + + Bit Order is either ``>`` or ``<``, where ``>`` means MSB first + and ``<`` means LSB first. If bit order is omitted, the previous + values' bit order is used for the current value. For example, in + the format string ``'u1`` or ``<``, where ``>`` means most + significant byte first and ``<`` means least significant byte + first. If byte order is omitted, most significant byte first is + used. + + There are eight types; ``u``, ``s``, ``f``, ``b``, ``t``, ``r``, + ``p`` and ``P``. + + - ``u`` -- unsigned integer + - ``s`` -- signed integer + - ``f`` -- floating point number of 16, 32, or 64 bits + - ``b`` -- boolean + - ``t`` -- text (ascii or utf-8) + - ``r`` -- raw, bytes + - ``p`` -- padding with zeros, ignore + - ``P`` -- padding with ones, ignore + + Length is the number of bits to pack the value into. + + Example format string with default bit and byte ordering: + ``'u1u3p7s16'`` + + Same format string, but with least significant byte first: + ``'u1u3p7s16<'`` + + Same format string, but with LSB first (``<`` prefix) and least + significant byte first (``<`` suffix): ``'>> pack_dict('u4u4', ['foo', 'bar'], {'foo': 1, 'bar': 2}) + b'\\x12' + + """ + + return CompiledFormatDict(fmt, names).pack(data) + + +def unpack_dict(fmt, + names, + data, + allow_truncated=False, + text_encoding='utf-8', + text_errors='strict'): + """Same as :func:`~bitstruct.unpack()`, but returns a dictionary. + + See :func:`~bitstruct.pack_dict()` for details on `names`. + + >>> unpack_dict('u4u4', ['foo', 'bar'], b'\\x12') + {'foo': 1, 'bar': 2} + + """ + + return CompiledFormatDict(fmt, names, text_encoding, text_errors).unpack( + data, allow_truncated=allow_truncated) + + +def pack_into_dict(fmt, names, buf, offset, data, **kwargs): + """Same as :func:`~bitstruct.pack_into()`, but data is read from a + dictionary. + + See :func:`~bitstruct.pack_dict()` for details on `names`. + + """ + + return CompiledFormatDict(fmt, names).pack_into(buf, + offset, + data, + **kwargs) + + +def unpack_from_dict(fmt, + names, + data, + offset=0, + allow_truncated=False, + text_encoding='utf-8', + text_errors='strict'): + """Same as :func:`~bitstruct.unpack_from()`, but returns a + dictionary. + + See :func:`~bitstruct.pack_dict()` for details on `names`. + + """ + + return CompiledFormatDict(fmt, names, text_encoding, text_errors).unpack_from( + data, offset, allow_truncated=allow_truncated) + + +def calcsize(fmt): + """Return the number of bits in given format string `fmt`. + + >>> calcsize('u1s3p4') + 8 + + """ + + return CompiledFormat(fmt).calcsize() + + +def byteswap(fmt, data, offset=0): + """Swap bytes in `data` according to `fmt`, starting at byte `offset` + and return the result. `fmt` must be an iterable, iterating over + number of bytes to swap. For example, the format string ``'24'`` + applied to the bytes ``b'\\x00\\x11\\x22\\x33\\x44\\x55'`` will + produce the result ``b'\\x11\\x00\\x55\\x44\\x33\\x22'``. + + """ + + data = BytesIO(data) + data.seek(offset) + data_swapped = BytesIO() + + for f in fmt: + swapped = data.read(int(f))[::-1] + data_swapped.write(swapped) + + return data_swapped.getvalue() + + +def compile(fmt, + names=None, + text_encoding='utf-8', + text_errors='strict'): + """Compile given format string `fmt` and return a compiled format + object that can be used to pack and/or unpack data multiple times. + + Returns a :class:`~bitstruct.CompiledFormat` object if `names` is + ``None``, and otherwise a :class:`~bitstruct.CompiledFormatDict` + object. + + See :func:`~bitstruct.pack_dict()` for details on `names`. + + See :func:`~bitstruct.unpack()` for details on `text_encoding` and + `text_errors`. + + """ + + if names is None: + return CompiledFormat(fmt, text_encoding, text_errors) + else: + return CompiledFormatDict(fmt, names, text_encoding, text_errors) diff --git a/.venv/lib/python3.12/site-packages/bitstruct/bitstream.c b/.venv/lib/python3.12/site-packages/bitstruct/bitstream.c new file mode 100644 index 0000000..a404355 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct/bitstream.c @@ -0,0 +1,600 @@ +/** + * The MIT License (MIT) + * + * Copyright (c) 2019 Erik Moqvist + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include "bitstream.h" + +void bitstream_writer_init(struct bitstream_writer_t *self_p, + uint8_t *buf_p) +{ + self_p->buf_p = buf_p; + self_p->byte_offset = 0; + self_p->bit_offset = 0; +} + +int bitstream_writer_size_in_bits(struct bitstream_writer_t *self_p) +{ + return (8 * self_p->byte_offset + self_p->bit_offset); +} + +int bitstream_writer_size_in_bytes(struct bitstream_writer_t *self_p) +{ + return (self_p->byte_offset + (self_p->bit_offset + 7) / 8); +} + +void bitstream_writer_write_bit(struct bitstream_writer_t *self_p, + int value) +{ + if (self_p->bit_offset == 0) { + self_p->buf_p[self_p->byte_offset] = (value << 7); + self_p->bit_offset = 1; + } else { + self_p->buf_p[self_p->byte_offset] |= (value << (8 - self_p->bit_offset - 1)); + + if (self_p->bit_offset == 7) { + self_p->bit_offset = 0; + self_p->byte_offset++; + } else { + self_p->bit_offset++; + } + } +} + +void bitstream_writer_write_bytes(struct bitstream_writer_t *self_p, + const uint8_t *buf_p, + int length) +{ + int i; + uint8_t *dst_p; + + dst_p = &self_p->buf_p[self_p->byte_offset]; + + if (self_p->bit_offset == 0) { + memcpy(dst_p, buf_p, sizeof(uint8_t) * length); + } else { + for (i = 0; i < length; i++) { + dst_p[i] |= (buf_p[i] >> self_p->bit_offset); + dst_p[i + 1] = (uint8_t)(buf_p[i] << (8 - self_p->bit_offset)); + } + } + + self_p->byte_offset += length; +} + +void bitstream_writer_write_u8(struct bitstream_writer_t *self_p, + uint8_t value) +{ + if (self_p->bit_offset == 0) { + self_p->buf_p[self_p->byte_offset] = value; + } else { + self_p->buf_p[self_p->byte_offset] |= (value >> self_p->bit_offset); + self_p->buf_p[self_p->byte_offset + 1] = + (uint8_t)(value << (8 - self_p->bit_offset)); + } + + self_p->byte_offset++; +} + +void bitstream_writer_write_u16(struct bitstream_writer_t *self_p, + uint16_t value) +{ + if (self_p->bit_offset == 0) { + self_p->buf_p[self_p->byte_offset] = (value >> 8); + } else { + self_p->buf_p[self_p->byte_offset] |= (value >> (8 + self_p->bit_offset)); + self_p->buf_p[self_p->byte_offset + 2] = + (uint8_t)(value << (8 - self_p->bit_offset)); + value >>= self_p->bit_offset; + } + + self_p->buf_p[self_p->byte_offset + 1] = (uint8_t)value; + self_p->byte_offset += 2; +} + +void bitstream_writer_write_u32(struct bitstream_writer_t *self_p, + uint32_t value) +{ + int i; + + if (self_p->bit_offset == 0) { + self_p->buf_p[self_p->byte_offset] = (value >> 24); + } else { + self_p->buf_p[self_p->byte_offset] |= (value >> (24 + self_p->bit_offset)); + self_p->buf_p[self_p->byte_offset + 4] = + (uint8_t)(value << (8 - self_p->bit_offset)); + value >>= self_p->bit_offset; + } + + for (i = 3; i > 0; i--) { + self_p->buf_p[self_p->byte_offset + i] = value; + value >>= 8; + } + + self_p->byte_offset += 4; +} + +void bitstream_writer_write_u64(struct bitstream_writer_t *self_p, + uint64_t value) +{ + int i; + + + if (self_p->bit_offset == 0) { + self_p->buf_p[self_p->byte_offset] = (value >> 56); + } else { + self_p->buf_p[self_p->byte_offset] |= (value >> (56 + self_p->bit_offset)); + self_p->buf_p[self_p->byte_offset + 8] = + (uint8_t)(value << (8 - self_p->bit_offset)); + value >>= self_p->bit_offset; + } + + for (i = 7; i > 0; i--) { + self_p->buf_p[self_p->byte_offset + i] = (uint8_t)value; + value >>= 8; + } + + self_p->byte_offset += 8; +} + +void bitstream_writer_write_u64_bits(struct bitstream_writer_t *self_p, + uint64_t value, + int number_of_bits) +{ + int i; + int first_byte_bits; + int last_byte_bits; + int full_bytes; + + if (number_of_bits == 0) { + return; + } + + /* Align beginning. */ + first_byte_bits = (8 - self_p->bit_offset); + + if (first_byte_bits != 8) { + if (number_of_bits < first_byte_bits) { + self_p->buf_p[self_p->byte_offset] |= + (uint8_t)(value << (first_byte_bits - number_of_bits)); + self_p->bit_offset += number_of_bits; + } else { + self_p->buf_p[self_p->byte_offset] |= (value >> (number_of_bits + - first_byte_bits)); + self_p->byte_offset++; + self_p->bit_offset = 0; + } + + number_of_bits -= first_byte_bits; + + if (number_of_bits <= 0) { + return; + } + } + + /* Align end. */ + last_byte_bits = (number_of_bits % 8); + full_bytes = (number_of_bits / 8); + + if (last_byte_bits != 0) { + self_p->buf_p[self_p->byte_offset + full_bytes] = + (uint8_t)(value << (8 - last_byte_bits)); + value >>= last_byte_bits; + self_p->bit_offset = last_byte_bits; + } + + /* Copy middle bytes. */ + for (i = full_bytes; i > 0; i--) { + self_p->buf_p[self_p->byte_offset + i - 1] = (uint8_t)value; + value >>= 8; + } + + self_p->byte_offset += full_bytes; +} + +void bitstream_writer_write_repeated_bit(struct bitstream_writer_t *self_p, + int value, + int length) +{ + int rest; + + if (value != 0) { + value = 0xff; + } + + rest = (length % 8); + bitstream_writer_write_u64_bits(self_p, value & ((1 << rest) - 1), rest); + bitstream_writer_write_repeated_u8(self_p, value, length / 8); +} + +void bitstream_writer_write_repeated_u8(struct bitstream_writer_t *self_p, + uint8_t value, + int length) +{ + int i; + + for (i = 0; i < length; i++) { + bitstream_writer_write_u8(self_p, value); + } +} + +void bitstream_writer_insert_bit(struct bitstream_writer_t *self_p, + int value) +{ + struct bitstream_writer_bounds_t bounds; + + bitstream_writer_bounds_save(&bounds, + self_p, + (8 * self_p->byte_offset) + self_p->bit_offset, + 1); + bitstream_writer_write_bit(self_p, value); + bitstream_writer_bounds_restore(&bounds); +} + +void bitstream_writer_insert_bytes(struct bitstream_writer_t *self_p, + const uint8_t *buf_p, + int length) +{ + struct bitstream_writer_bounds_t bounds; + + bitstream_writer_bounds_save(&bounds, + self_p, + (8 * self_p->byte_offset) + self_p->bit_offset, + 8 * length); + bitstream_writer_write_bytes(self_p, buf_p, length); + bitstream_writer_bounds_restore(&bounds); +} + +void bitstream_writer_insert_u8(struct bitstream_writer_t *self_p, + uint8_t value) +{ + struct bitstream_writer_bounds_t bounds; + + bitstream_writer_bounds_save(&bounds, + self_p, + (8 * self_p->byte_offset) + self_p->bit_offset, + 8); + bitstream_writer_write_u8(self_p, value); + bitstream_writer_bounds_restore(&bounds); +} + +void bitstream_writer_insert_u16(struct bitstream_writer_t *self_p, + uint16_t value) +{ + struct bitstream_writer_bounds_t bounds; + + bitstream_writer_bounds_save(&bounds, + self_p, + (8 * self_p->byte_offset) + self_p->bit_offset, + 16); + bitstream_writer_write_u16(self_p, value); + bitstream_writer_bounds_restore(&bounds); +} + +void bitstream_writer_insert_u32(struct bitstream_writer_t *self_p, + uint32_t value) +{ + struct bitstream_writer_bounds_t bounds; + + bitstream_writer_bounds_save(&bounds, + self_p, + (8 * self_p->byte_offset) + self_p->bit_offset, + 32); + bitstream_writer_write_u32(self_p, value); + bitstream_writer_bounds_restore(&bounds); +} + +void bitstream_writer_insert_u64(struct bitstream_writer_t *self_p, + uint64_t value) +{ + struct bitstream_writer_bounds_t bounds; + + bitstream_writer_bounds_save(&bounds, + self_p, + (8 * self_p->byte_offset) + self_p->bit_offset, + 64); + bitstream_writer_write_u64(self_p, value); + bitstream_writer_bounds_restore(&bounds); +} + +void bitstream_writer_insert_u64_bits(struct bitstream_writer_t *self_p, + uint64_t value, + int number_of_bits) +{ + struct bitstream_writer_bounds_t bounds; + + bitstream_writer_bounds_save(&bounds, + self_p, + (8 * self_p->byte_offset) + self_p->bit_offset, + number_of_bits); + bitstream_writer_write_u64_bits(self_p, value, number_of_bits); + bitstream_writer_bounds_restore(&bounds); +} + +void bitstream_writer_seek(struct bitstream_writer_t *self_p, + int offset) +{ + offset += ((8 * self_p->byte_offset) + self_p->bit_offset); + self_p->byte_offset = (offset / 8); + self_p->bit_offset = (offset % 8); +} + +void bitstream_writer_bounds_save(struct bitstream_writer_bounds_t *self_p, + struct bitstream_writer_t *writer_p, + int bit_offset, + int length) +{ + int number_of_bits; + + self_p->writer_p = writer_p; + number_of_bits = (bit_offset % 8); + + if (number_of_bits == 0) { + self_p->first_byte_offset = -1; + } else { + self_p->first_byte_offset = (bit_offset / 8); + self_p->first_byte = writer_p->buf_p[self_p->first_byte_offset]; + self_p->first_byte &= (0xff00 >> number_of_bits); + } + + number_of_bits = ((bit_offset + length) % 8); + + if (number_of_bits == 0) { + self_p->last_byte_offset = -1; + } else { + self_p->last_byte_offset = ((bit_offset + length) / 8); + self_p->last_byte = writer_p->buf_p[self_p->last_byte_offset]; + self_p->last_byte &= ~(0xff00 >> number_of_bits); + writer_p->buf_p[self_p->last_byte_offset] = 0; + } + + if (self_p->first_byte_offset != -1) { + writer_p->buf_p[self_p->first_byte_offset] = 0; + } +} + +void bitstream_writer_bounds_restore(struct bitstream_writer_bounds_t *self_p) +{ + if (self_p->first_byte_offset != -1) { + self_p->writer_p->buf_p[self_p->first_byte_offset] |= self_p->first_byte; + } + + if (self_p->last_byte_offset != -1) { + self_p->writer_p->buf_p[self_p->last_byte_offset] |= self_p->last_byte; + } +} + +void bitstream_reader_init(struct bitstream_reader_t *self_p, + const uint8_t *buf_p) +{ + self_p->buf_p = buf_p; + self_p->byte_offset = 0; + self_p->bit_offset = 0; +} + +int bitstream_reader_read_bit(struct bitstream_reader_t *self_p) +{ + int value; + + if (self_p->bit_offset == 0) { + value = (self_p->buf_p[self_p->byte_offset] >> 7); + self_p->bit_offset = 1; + } else { + value = ((self_p->buf_p[self_p->byte_offset] >> (7 - self_p->bit_offset)) & 0x1); + + if (self_p->bit_offset == 7) { + self_p->bit_offset = 0; + self_p->byte_offset++; + } else { + self_p->bit_offset++; + } + } + + return (value); +} + +void bitstream_reader_read_bytes(struct bitstream_reader_t *self_p, + uint8_t *buf_p, + int length) +{ + int i; + const uint8_t *src_p; + + src_p = &self_p->buf_p[self_p->byte_offset]; + + if (self_p->bit_offset == 0) { + memcpy(buf_p, src_p, sizeof(uint8_t) * length); + } else { + for (i = 0; i < length; i++) { + buf_p[i] = (src_p[i] << self_p->bit_offset); + buf_p[i] |= (src_p[i + 1] >> (8 - self_p->bit_offset)); + } + } + + self_p->byte_offset += length; +} + +uint8_t bitstream_reader_read_u8(struct bitstream_reader_t *self_p) +{ + uint8_t value; + + value = (self_p->buf_p[self_p->byte_offset] << self_p->bit_offset); + self_p->byte_offset++; + + if (self_p->bit_offset != 0) { + value |= (self_p->buf_p[self_p->byte_offset] >> (8 - self_p->bit_offset)); + } + + return (value); +} + +uint16_t bitstream_reader_read_u16(struct bitstream_reader_t *self_p) +{ + uint16_t value; + int i; + int offset; + const uint8_t *src_p; + + src_p = &self_p->buf_p[self_p->byte_offset]; + offset = (16 + self_p->bit_offset); + value = 0; + + for (i = 0; i < 2; i++) { + offset -= 8; + value |= ((uint16_t)src_p[i] << offset); + } + + if (offset != 0) { + value |= (src_p[2] >> (8 - offset)); + } + + self_p->byte_offset += 2; + + return (value); +} + +uint32_t bitstream_reader_read_u32(struct bitstream_reader_t *self_p) +{ + uint32_t value; + int i; + int offset; + const uint8_t *src_p; + + src_p = &self_p->buf_p[self_p->byte_offset]; + offset = (32 + self_p->bit_offset); + value = 0; + + for (i = 0; i < 4; i++) { + offset -= 8; + value |= ((uint32_t)src_p[i] << offset); + } + + if (offset != 0) { + value |= (src_p[4] >> (8 - offset)); + } + + self_p->byte_offset += 4; + + return (value); +} + +uint64_t bitstream_reader_read_u64(struct bitstream_reader_t *self_p) +{ + uint64_t value; + int i; + int offset; + const uint8_t *src_p; + + src_p = &self_p->buf_p[self_p->byte_offset]; + offset = (64 + self_p->bit_offset); + value = 0; + + for (i = 0; i < 8; i++) { + offset -= 8; + value |= ((uint64_t)src_p[i] << offset); + } + + if (offset != 0) { + value |= ((uint64_t)src_p[8] >> (8 - offset)); + } + + self_p->byte_offset += 8; + + return (value); +} + +uint64_t bitstream_reader_read_u64_bits(struct bitstream_reader_t *self_p, + int number_of_bits) +{ + uint64_t value; + int i; + int first_byte_bits; + int last_byte_bits; + int full_bytes; + + if (number_of_bits == 0) { + return (0); + } + + /* Align beginning. */ + first_byte_bits = (8 - self_p->bit_offset); + + if (first_byte_bits != 8) { + if (number_of_bits < first_byte_bits) { + value = (self_p->buf_p[self_p->byte_offset] >> (first_byte_bits + - number_of_bits)); + value &= ((1 << number_of_bits) - 1); + self_p->bit_offset += number_of_bits; + } else { + value = self_p->buf_p[self_p->byte_offset]; + value &= ((1 << first_byte_bits) - 1); + self_p->byte_offset++; + self_p->bit_offset = 0; + } + + number_of_bits -= first_byte_bits; + + if (number_of_bits <= 0) { + return (value); + } + } else { + value = 0; + } + + /* Copy middle bytes. */ + full_bytes = (number_of_bits / 8); + + for (i = 0; i < full_bytes; i++) { + value <<= 8; + value |= self_p->buf_p[self_p->byte_offset + i]; + } + + /* Last byte. */ + last_byte_bits = (number_of_bits % 8); + + if (last_byte_bits != 0) { + value <<= last_byte_bits; + value |= (self_p->buf_p[self_p->byte_offset + full_bytes] + >> (8 - last_byte_bits)); + self_p->bit_offset = last_byte_bits; + } + + self_p->byte_offset += full_bytes; + + return (value); +} + +void bitstream_reader_seek(struct bitstream_reader_t *self_p, + int offset) +{ + offset += ((8 * self_p->byte_offset) + self_p->bit_offset); + self_p->byte_offset = (offset / 8); + self_p->bit_offset = (offset % 8); +} + +int bitstream_reader_tell(struct bitstream_reader_t *self_p) +{ + return ((8 * self_p->byte_offset) + self_p->bit_offset); +} diff --git a/.venv/lib/python3.12/site-packages/bitstruct/bitstream.h b/.venv/lib/python3.12/site-packages/bitstruct/bitstream.h new file mode 100644 index 0000000..8ca53b1 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct/bitstream.h @@ -0,0 +1,170 @@ +/** + * The MIT License (MIT) + * + * Copyright (c) 2019 Erik Moqvist + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BITSTREAM_H +#define BITSTREAM_H + +#include + +#define BITSTREAM_VERSION "0.8.0" + +struct bitstream_writer_t { + uint8_t *buf_p; + int byte_offset; + int bit_offset; +}; + +struct bitstream_writer_bounds_t { + struct bitstream_writer_t *writer_p; + int first_byte_offset; + uint8_t first_byte; + int last_byte_offset; + uint8_t last_byte; +}; + +struct bitstream_reader_t { + const uint8_t *buf_p; + int byte_offset; + int bit_offset; +}; + +/* + * The writer. + */ + +void bitstream_writer_init(struct bitstream_writer_t *self_p, + uint8_t *buf_p); + +int bitstream_writer_size_in_bits(struct bitstream_writer_t *self_p); + +int bitstream_writer_size_in_bytes(struct bitstream_writer_t *self_p); + +/* Write bits to the stream. Clears each byte before bits are + written. */ +void bitstream_writer_write_bit(struct bitstream_writer_t *self_p, + int value); + +void bitstream_writer_write_bytes(struct bitstream_writer_t *self_p, + const uint8_t *buf_p, + int length); + +void bitstream_writer_write_u8(struct bitstream_writer_t *self_p, + uint8_t value); + +void bitstream_writer_write_u16(struct bitstream_writer_t *self_p, + uint16_t value); + +void bitstream_writer_write_u32(struct bitstream_writer_t *self_p, + uint32_t value); + +void bitstream_writer_write_u64(struct bitstream_writer_t *self_p, + uint64_t value); + +/* Upper unused bits must be zero. */ +void bitstream_writer_write_u64_bits(struct bitstream_writer_t *self_p, + uint64_t value, + int number_of_bits); + +void bitstream_writer_write_repeated_bit(struct bitstream_writer_t *self_p, + int value, + int length); + +void bitstream_writer_write_repeated_u8(struct bitstream_writer_t *self_p, + uint8_t value, + int length); + +/* Insert bits into the stream. Leaves all other bits unmodified. */ +void bitstream_writer_insert_bit(struct bitstream_writer_t *self_p, + int value); + +void bitstream_writer_insert_bytes(struct bitstream_writer_t *self_p, + const uint8_t *buf_p, + int length); + +void bitstream_writer_insert_u8(struct bitstream_writer_t *self_p, + uint8_t value); + +void bitstream_writer_insert_u16(struct bitstream_writer_t *self_p, + uint16_t value); + +void bitstream_writer_insert_u32(struct bitstream_writer_t *self_p, + uint32_t value); + +void bitstream_writer_insert_u64(struct bitstream_writer_t *self_p, + uint64_t value); + +void bitstream_writer_insert_u64_bits(struct bitstream_writer_t *self_p, + uint64_t value, + int number_of_bits); + +/* Move write position. Seeking backwards makes the written size + smaller. Use write with care after seek, as seek does not clear + bytes. */ +void bitstream_writer_seek(struct bitstream_writer_t *self_p, + int offset); + +/* Save-restore first and last bytes in given range, so write can be + used in given range. */ +void bitstream_writer_bounds_save(struct bitstream_writer_bounds_t *self_p, + struct bitstream_writer_t *writer_p, + int bit_offset, + int length); + +void bitstream_writer_bounds_restore(struct bitstream_writer_bounds_t *self_p); + +/* + * The reader. + */ + +void bitstream_reader_init(struct bitstream_reader_t *self_p, + const uint8_t *buf_p); + +/* Read bits from the stream. */ +int bitstream_reader_read_bit(struct bitstream_reader_t *self_p); + +void bitstream_reader_read_bytes(struct bitstream_reader_t *self_p, + uint8_t *buf_p, + int length); + +uint8_t bitstream_reader_read_u8(struct bitstream_reader_t *self_p); + +uint16_t bitstream_reader_read_u16(struct bitstream_reader_t *self_p); + +uint32_t bitstream_reader_read_u32(struct bitstream_reader_t *self_p); + +uint64_t bitstream_reader_read_u64(struct bitstream_reader_t *self_p); + +uint64_t bitstream_reader_read_u64_bits(struct bitstream_reader_t *self_p, + int number_of_bits); + +/* Move read position. */ +void bitstream_reader_seek(struct bitstream_reader_t *self_p, + int offset); + +/* Get read position. */ +int bitstream_reader_tell(struct bitstream_reader_t *self_p); + +#endif diff --git a/.venv/lib/python3.12/site-packages/bitstruct/c.c b/.venv/lib/python3.12/site-packages/bitstruct/c.c new file mode 100644 index 0000000..0ab2ed0 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/bitstruct/c.c @@ -0,0 +1,2622 @@ +/** + * CPython 3 C extension. + */ + +#include +#include +#include "bitstream.h" + +#include + +struct field_info_t; + +typedef void (*pack_field_t)(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p); + +typedef PyObject *(*unpack_field_t)(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p); + +struct field_info_t { + pack_field_t pack; + unpack_field_t unpack; + int number_of_bits; + bool is_padding; + union { + struct { + int64_t lower; + int64_t upper; + } s; + struct { + uint64_t upper; + } u; + } limits; +}; + +struct info_t { + int number_of_bits; + int number_of_fields; + int number_of_non_padding_fields; + struct field_info_t fields[1]; +}; + +struct compiled_format_t { + PyObject_HEAD + struct info_t *info_p; + PyObject *format_p; +}; + +struct compiled_format_dict_t { + PyObject_HEAD + struct info_t *info_p; + PyObject *format_p; + PyObject *names_p; +}; + +static const char* pickle_version_key = "_pickle_version"; +static int pickle_version = 1; + +static PyObject *compiled_format_new(PyTypeObject *type_p, + PyObject *args_p, + PyObject *kwargs_p); + +static int compiled_format_init(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static int compiled_format_init_inner(struct compiled_format_t *self_p, + PyObject *format_p); + +static void compiled_format_dealloc(struct compiled_format_t *self_p); + +static PyObject *m_compiled_format_pack(struct compiled_format_t *self_p, + PyObject *args_p); + +static PyObject *m_compiled_format_unpack(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static PyObject *m_compiled_format_pack_into(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static PyObject *m_compiled_format_unpack_from(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static PyObject *m_compiled_format_calcsize(struct compiled_format_t *self_p); + +static PyObject *m_compiled_format_copy(struct compiled_format_t *self_p); + +static PyObject *m_compiled_format_deepcopy(struct compiled_format_t *self_p, + PyObject *args_p); + +static PyObject *m_compiled_format_getstate(struct compiled_format_t *self_p, + PyObject *args_p); + +static PyObject *m_compiled_format_setstate(struct compiled_format_t *self_p, + PyObject *args_p); + +static PyObject *compiled_format_dict_new(PyTypeObject *type_p, + PyObject *args_p, + PyObject *kwargs_p); + +static int compiled_format_dict_init(struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static int compiled_format_dict_init_inner(struct compiled_format_dict_t *self_p, + PyObject *format_p, + PyObject *names_p); + +static void compiled_format_dict_dealloc(struct compiled_format_dict_t *self_p); + +static PyObject *m_compiled_format_dict_pack(struct compiled_format_dict_t *self_p, + PyObject *data_p); + +static PyObject *m_compiled_format_dict_unpack( + struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static PyObject *m_compiled_format_dict_pack_into( + struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static PyObject *m_compiled_format_dict_unpack_from( + struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p); + +static PyObject *m_compiled_format_dict_calcsize( + struct compiled_format_dict_t *self_p); + +static PyObject *m_compiled_format_dict_copy( + struct compiled_format_dict_t *self_p); + +static PyObject *m_compiled_format_dict_deepcopy( + struct compiled_format_dict_t *self_p, + PyObject *args_p); + +static PyObject *m_compiled_format_dict_getstate(struct compiled_format_dict_t *self_p, + PyObject *args_p); + +static PyObject *m_compiled_format_dict_setstate(struct compiled_format_dict_t *self_p, + PyObject *args_p); + +PyDoc_STRVAR(pack___doc__, + "pack(fmt, *args)\n" + "--\n" + "\n"); +PyDoc_STRVAR(compiled_format_pack___doc__, + "pack(*args)\n" + "--\n" + "\n"); + +PyDoc_STRVAR(unpack___doc__, + "unpack(fmt, data, allow_truncated=False)\n" + "--\n" + "\n"); +PyDoc_STRVAR(compiled_format_unpack___doc__, + "unpack(data, allow_truncated=False)\n" + "--\n" + "\n"); + +PyDoc_STRVAR(pack_into___doc__, + "pack_into(fmt, buf, offset, *args, **kwargs)\n" + "--\n" + "\n"); +PyDoc_STRVAR(compiled_format_pack_into___doc__, + "pack_into(buf, offset, *args, **kwargs)\n" + "--\n" + "\n"); + +PyDoc_STRVAR(unpack_from___doc__, + "unpack_from(fmt, data, offset=0, allow_truncated=False)\n" + "--\n" + "\n"); +PyDoc_STRVAR(compiled_format_unpack_from___doc__, + "unpack_from(data, offset=0, allow_truncated=False)\n" + "--\n" + "\n"); + +PyDoc_STRVAR(calcsize___doc__, + "calcsize(fmt)\n" + "--\n" + "\n"); +PyDoc_STRVAR(compiled_format_calcsize___doc__, + "calcsize()\n" + "--\n" + "\n"); + +static PyObject *py_zero_p = NULL; + +static struct PyMethodDef compiled_format_methods[] = { + { + "pack", + (PyCFunction)m_compiled_format_pack, + METH_VARARGS, + compiled_format_pack___doc__ + }, + { + "unpack", + (PyCFunction)m_compiled_format_unpack, + METH_VARARGS | METH_KEYWORDS, + compiled_format_unpack___doc__ + }, + { + "pack_into", + (PyCFunction)m_compiled_format_pack_into, + METH_VARARGS | METH_KEYWORDS, + compiled_format_pack_into___doc__ + }, + { + "unpack_from", + (PyCFunction)m_compiled_format_unpack_from, + METH_VARARGS | METH_KEYWORDS, + compiled_format_unpack_from___doc__ + }, + { + "calcsize", + (PyCFunction)m_compiled_format_calcsize, + METH_NOARGS, + compiled_format_calcsize___doc__ + }, + { + "__copy__", + (PyCFunction)m_compiled_format_copy, + METH_NOARGS + }, + { + "__deepcopy__", + (PyCFunction)m_compiled_format_deepcopy, + METH_VARARGS + }, + { + "__getstate__", + (PyCFunction)m_compiled_format_getstate, + METH_NOARGS + }, + { + "__setstate__", + (PyCFunction)m_compiled_format_setstate, + METH_O + }, + { NULL } +}; + +static PyTypeObject compiled_format_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "bitstruct.c.CompiledFormat", + .tp_doc = NULL, + .tp_basicsize = sizeof(struct compiled_format_t), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_new = compiled_format_new, + .tp_init = (initproc)compiled_format_init, + .tp_dealloc = (destructor)compiled_format_dealloc, + .tp_methods = compiled_format_methods, +}; + +static struct PyMethodDef compiled_format_dict_methods[] = { + { + "pack", + (PyCFunction)m_compiled_format_dict_pack, + METH_O, + pack___doc__ + }, + { + "unpack", + (PyCFunction)m_compiled_format_dict_unpack, + METH_VARARGS | METH_KEYWORDS, + unpack___doc__ + }, + { + "pack_into", + (PyCFunction)m_compiled_format_dict_pack_into, + METH_VARARGS | METH_KEYWORDS, + pack_into___doc__ + }, + { + "unpack_from", + (PyCFunction)m_compiled_format_dict_unpack_from, + METH_VARARGS | METH_KEYWORDS, + unpack_from___doc__ + }, + { + "calcsize", + (PyCFunction)m_compiled_format_dict_calcsize, + METH_NOARGS, + calcsize___doc__ + }, + { + "__copy__", + (PyCFunction)m_compiled_format_dict_copy, + METH_NOARGS + }, + { + "__deepcopy__", + (PyCFunction)m_compiled_format_dict_deepcopy, + METH_VARARGS + }, + { + "__getstate__", + (PyCFunction)m_compiled_format_dict_getstate, + METH_NOARGS + }, + { + "__setstate__", + (PyCFunction)m_compiled_format_dict_setstate, + METH_O + }, + { NULL } +}; + +static PyTypeObject compiled_format_dict_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "bitstruct.c.CompiledFormatDict", + .tp_doc = NULL, + .tp_basicsize = sizeof(struct compiled_format_dict_t), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_new = compiled_format_dict_new, + .tp_init = (initproc)compiled_format_dict_init, + .tp_dealloc = (destructor)compiled_format_dict_dealloc, + .tp_methods = compiled_format_dict_methods, +}; + +static bool is_names_list(PyObject *names_p) +{ + if (!PyList_Check(names_p)) { + PyErr_SetString(PyExc_TypeError, "Names is not a list."); + + return (false); + } + + return (true); +} + +static void pack_signed_integer(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + int64_t value; + int64_t lower; + int64_t upper; + + value = PyLong_AsLongLong(value_p); + + if ((value == -1) && PyErr_Occurred()) { + return; + } + + if (field_info_p->number_of_bits < 64) { + lower = field_info_p->limits.s.lower; + upper = field_info_p->limits.s.upper; + + if ((value < lower) || (value > upper)) { + PyErr_Format(PyExc_OverflowError, + "Signed integer value %lld out of range.", + (long long)value); + } + + value &= ((1ull << field_info_p->number_of_bits) - 1); + } + + bitstream_writer_write_u64_bits(self_p, + (uint64_t)value, + field_info_p->number_of_bits); +} + +static PyObject *unpack_signed_integer(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + uint64_t value; + uint64_t sign_bit; + + value = bitstream_reader_read_u64_bits(self_p, field_info_p->number_of_bits); + sign_bit = (1ull << (field_info_p->number_of_bits - 1)); + + if (value & sign_bit) { + value |= ~(((sign_bit) << 1) - 1); + } + + return (PyLong_FromLongLong((long long)value)); +} + +static void pack_unsigned_integer(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + uint64_t value; + + value = PyLong_AsUnsignedLongLong(value_p); + + if ((value == (uint64_t)-1) && PyErr_Occurred()) { + return; + } + + if (value > field_info_p->limits.u.upper) { + PyErr_Format(PyExc_OverflowError, + "Unsigned integer value %llu out of range.", + (unsigned long long)value); + } + + bitstream_writer_write_u64_bits(self_p, + value, + field_info_p->number_of_bits); +} + +static PyObject *unpack_unsigned_integer(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + uint64_t value; + + value = bitstream_reader_read_u64_bits(self_p, + field_info_p->number_of_bits); + + return (PyLong_FromUnsignedLongLong(value)); +} + +#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 6 + +static void pack_float_16(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + uint8_t buf[2]; + +#if PY_VERSION_HEX >= 0x030B00A7 + PyFloat_Pack2(PyFloat_AsDouble(value_p), + (char*)&buf[0], + PY_BIG_ENDIAN); +#else + _PyFloat_Pack2(PyFloat_AsDouble(value_p), + &buf[0], + PY_BIG_ENDIAN); +#endif + bitstream_writer_write_bytes(self_p, &buf[0], sizeof(buf)); +} + +static PyObject *unpack_float_16(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + uint8_t buf[2]; + double value; + + bitstream_reader_read_bytes(self_p, &buf[0], sizeof(buf)); +#if PY_VERSION_HEX >= 0x030B00A7 + value = PyFloat_Unpack2((const char*)&buf[0], PY_BIG_ENDIAN); +#else + value = _PyFloat_Unpack2(&buf[0], PY_BIG_ENDIAN); +#endif + + return (PyFloat_FromDouble(value)); +} + +#endif + +static void pack_float_32(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + float value; + uint32_t data; + + value = (float)PyFloat_AsDouble(value_p); + memcpy(&data, &value, sizeof(data)); + bitstream_writer_write_u32(self_p, data); +} + +static PyObject *unpack_float_32(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + float value; + uint32_t data; + + data = bitstream_reader_read_u32(self_p); + memcpy(&value, &data, sizeof(value)); + + return (PyFloat_FromDouble(value)); +} + +static void pack_float_64(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + double value; + uint64_t data; + + value = PyFloat_AsDouble(value_p); + memcpy(&data, &value, sizeof(data)); + bitstream_writer_write_u64_bits(self_p, + data, + field_info_p->number_of_bits); +} + +static PyObject *unpack_float_64(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + double value; + uint64_t data; + + data = bitstream_reader_read_u64(self_p); + memcpy(&value, &data, sizeof(value)); + + return (PyFloat_FromDouble(value)); +} + +static void pack_bool(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + bitstream_writer_write_u64_bits(self_p, + PyObject_IsTrue(value_p), + field_info_p->number_of_bits); +} + +static PyObject *unpack_bool(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + return (PyBool_FromLong((long)bitstream_reader_read_u64_bits( + self_p, + field_info_p->number_of_bits))); +} + +static void pack_text(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + Py_ssize_t size; + const char* buf_p; + + buf_p = PyUnicode_AsUTF8AndSize(value_p, &size); + + if (buf_p != NULL) { + if (size < (field_info_p->number_of_bits / 8)) { + PyErr_SetString(PyExc_NotImplementedError, "Short text."); + } else { + bitstream_writer_write_bytes(self_p, + (uint8_t *)buf_p, + field_info_p->number_of_bits / 8); + } + } +} + +static PyObject *unpack_text(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + uint8_t *buf_p; + PyObject *value_p; + int number_of_bytes; + + number_of_bytes = (field_info_p->number_of_bits / 8); + buf_p = PyMem_RawMalloc(number_of_bytes); + + if (buf_p == NULL) { + return (NULL); + } + + bitstream_reader_read_bytes(self_p, buf_p, number_of_bytes); + value_p = PyUnicode_FromStringAndSize((const char *)buf_p, number_of_bytes); + PyMem_RawFree(buf_p); + + return (value_p); +} + +static void pack_raw(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + Py_ssize_t size; + char* buf_p; + int res; + + res = PyBytes_AsStringAndSize(value_p, &buf_p, &size); + + if (res != -1) { + if (size < (field_info_p->number_of_bits / 8)) { + PyErr_SetString(PyExc_NotImplementedError, "Short raw data."); + } else { + bitstream_writer_write_bytes(self_p, + (uint8_t *)buf_p, + field_info_p->number_of_bits / 8); + } + } +} + +static PyObject *unpack_raw(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + uint8_t *buf_p; + PyObject *value_p; + int number_of_bytes; + + number_of_bytes = (field_info_p->number_of_bits / 8); + value_p = PyBytes_FromStringAndSize(NULL, number_of_bytes); + buf_p = (uint8_t *)PyBytes_AS_STRING(value_p); + bitstream_reader_read_bytes(self_p, buf_p, number_of_bytes); + + return (value_p); +} + +static void pack_zero_padding(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + bitstream_writer_write_repeated_bit(self_p, + 0, + field_info_p->number_of_bits); +} + +static void pack_one_padding(struct bitstream_writer_t *self_p, + PyObject *value_p, + struct field_info_t *field_info_p) +{ + bitstream_writer_write_repeated_bit(self_p, + 1, + field_info_p->number_of_bits); +} + +static PyObject *unpack_padding(struct bitstream_reader_t *self_p, + struct field_info_t *field_info_p) +{ + bitstream_reader_seek(self_p, field_info_p->number_of_bits); + + return (NULL); +} + +static int field_info_init_signed(struct field_info_t *self_p, + int number_of_bits) +{ + uint64_t limit; + + self_p->pack = pack_signed_integer; + self_p->unpack = unpack_signed_integer; + + if (number_of_bits > 64) { + PyErr_SetString(PyExc_NotImplementedError, + "Signed integer over 64 bits."); + return (-1); + } + + limit = (1ull << (number_of_bits - 1)); + self_p->limits.s.lower = -limit; + self_p->limits.s.upper = (limit - 1); + + return (0); +} + +static int field_info_init_unsigned(struct field_info_t *self_p, + int number_of_bits) +{ + self_p->pack = pack_unsigned_integer; + self_p->unpack = unpack_unsigned_integer; + + if (number_of_bits > 64) { + PyErr_SetString(PyExc_NotImplementedError, + "Unsigned integer over 64 bits."); + return (-1); + } + + if (number_of_bits < 64) { + self_p->limits.u.upper = ((1ull << number_of_bits) - 1); + } else { + self_p->limits.u.upper = (uint64_t)-1; + } + + return (0); +} + +static int field_info_init_float(struct field_info_t *self_p, + int number_of_bits) +{ + switch (number_of_bits) { + +#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 6 + case 16: + self_p->pack = pack_float_16; + self_p->unpack = unpack_float_16; + break; +#endif + + case 32: + self_p->pack = pack_float_32; + self_p->unpack = unpack_float_32; + break; + + case 64: + self_p->pack = pack_float_64; + self_p->unpack = unpack_float_64; + break; + + default: +#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 6 + PyErr_SetString(PyExc_NotImplementedError, + "Float not 16, 32 or 64 bits."); +#else + PyErr_SetString(PyExc_NotImplementedError, "Float not 32 or 64 bits."); +#endif + return (-1); + } + + return (0); +} + +static int field_info_init_bool(struct field_info_t *self_p, + int number_of_bits) +{ + self_p->pack = pack_bool; + self_p->unpack = unpack_bool; + + if (number_of_bits > 64) { + PyErr_SetString(PyExc_NotImplementedError, "Bool over 64 bits."); + return (-1); + } + + return (0); +} + +static int field_info_init_text(struct field_info_t *self_p, + int number_of_bits) +{ + self_p->pack = pack_text; + self_p->unpack = unpack_text; + + if ((number_of_bits % 8) != 0) { + PyErr_SetString(PyExc_NotImplementedError, + "Text not multiple of 8 bits."); + return (-1); + } + + return (0); +} + +static int field_info_init_raw(struct field_info_t *self_p, + int number_of_bits) +{ + self_p->pack = pack_raw; + self_p->unpack = unpack_raw; + + if ((number_of_bits % 8) != 0) { + PyErr_SetString(PyExc_NotImplementedError, + "Raw not multiple of 8 bits."); + return (-1); + } + + return (0); +} + +static int field_info_init_zero_padding(struct field_info_t *self_p) +{ + self_p->pack = pack_zero_padding; + self_p->unpack = unpack_padding; + + return (0); +} + +static int field_info_init_one_padding(struct field_info_t *self_p) +{ + self_p->pack = pack_one_padding; + self_p->unpack = unpack_padding; + + return (0); +} + +static int field_info_init(struct field_info_t *self_p, + int kind, + int number_of_bits) +{ + int res; + bool is_padding; + + is_padding = false; + + switch (kind) { + + case 's': + res = field_info_init_signed(self_p, number_of_bits); + break; + + case 'u': + res = field_info_init_unsigned(self_p, number_of_bits); + break; + + case 'f': + res = field_info_init_float(self_p, number_of_bits); + break; + + case 'b': + res = field_info_init_bool(self_p, number_of_bits); + break; + + case 't': + res = field_info_init_text(self_p, number_of_bits); + break; + + case 'r': + res = field_info_init_raw(self_p, number_of_bits); + break; + + case 'p': + is_padding = true; + res = field_info_init_zero_padding(self_p); + break; + + case 'P': + is_padding = true; + res = field_info_init_one_padding(self_p); + break; + + default: + PyErr_Format(PyExc_ValueError, "Bad format field type '%c'.", kind); + res = -1; + break; + } + + self_p->number_of_bits = number_of_bits; + self_p->is_padding = is_padding; + + return (res); +} + +static int count_number_of_fields(const char *format_p, + int *number_of_padding_fields_p) +{ + int count; + + count = 0; + *number_of_padding_fields_p = 0; + + while (*format_p != '\0') { + if ((*format_p >= 'A') && (*format_p <= 'z')) { + count++; + + if ((*format_p == 'p') || (*format_p == 'P')) { + (*number_of_padding_fields_p)++; + } + } + + format_p++; + } + + return (count); +} + +const char *parse_field(const char *format_p, + int *kind_p, + int *number_of_bits_p) +{ + while (isspace(*format_p)) { + format_p++; + } + + *kind_p = *format_p; + *number_of_bits_p = 0; + format_p++; + + while (isdigit(*format_p)) { + if (*number_of_bits_p > (INT_MAX / 100)) { + PyErr_SetString(PyExc_ValueError, "Field too long."); + + return (NULL); + } + + *number_of_bits_p *= 10; + *number_of_bits_p += (*format_p - '0'); + format_p++; + } + + if (*number_of_bits_p == 0) { + PyErr_SetString(PyExc_ValueError, "Field of size 0."); + format_p = NULL; + } + + return (format_p); +} + +static struct info_t *parse_format(PyObject *format_obj_p) +{ + int number_of_fields; + struct info_t *info_p; + const char *format_p; + int i; + int kind; + int number_of_bits; + int number_of_padding_fields; + int res; + + format_p = PyUnicode_AsUTF8(format_obj_p); + + if (format_p == NULL) { + return (NULL); + } + + number_of_fields = count_number_of_fields(format_p, + &number_of_padding_fields); + + info_p = PyMem_RawMalloc( + sizeof(*info_p) + number_of_fields * sizeof(info_p->fields[0])); + + if (info_p == NULL) { + return (NULL); + } + + info_p->number_of_bits = 0; + info_p->number_of_fields = number_of_fields; + info_p->number_of_non_padding_fields = ( + number_of_fields - number_of_padding_fields); + + for (i = 0; i < info_p->number_of_fields; i++) { + format_p = parse_field(format_p, &kind, &number_of_bits); + + if (format_p == NULL) { + PyMem_RawFree(info_p); + + return (NULL); + } + + res = field_info_init(&info_p->fields[i], kind, number_of_bits); + + if (res != 0) { + PyMem_RawFree(info_p); + + return (NULL); + } + + info_p->number_of_bits += number_of_bits; + } + + return (info_p); +} + +static void pack_pack(struct info_t *info_p, + PyObject *args_p, + int consumed_args, + struct bitstream_writer_t *writer_p) +{ + PyObject *value_p; + int i; + struct field_info_t *field_p; + + for (i = 0; i < info_p->number_of_fields; i++) { + field_p = &info_p->fields[i]; + + if (field_p->is_padding) { + value_p = NULL; + } else { + value_p = PyTuple_GET_ITEM(args_p, consumed_args); + consumed_args++; + } + + info_p->fields[i].pack(writer_p, value_p, field_p); + } +} + +static PyObject *pack_prepare(struct info_t *info_p, + struct bitstream_writer_t *writer_p) +{ + PyObject *packed_p; + + packed_p = PyBytes_FromStringAndSize(NULL, (info_p->number_of_bits + 7) / 8); + + if (packed_p == NULL) { + return (NULL); + } + + bitstream_writer_init(writer_p, (uint8_t *)PyBytes_AS_STRING(packed_p)); + + return (packed_p); +} + +static PyObject *pack_finalize(PyObject *packed_p) +{ + if (PyErr_Occurred() != NULL) { + Py_DECREF(packed_p); + packed_p = NULL; + } + + return (packed_p); +} + +static PyObject *pack(struct info_t *info_p, + PyObject *args_p, + int consumed_args, + Py_ssize_t number_of_args) +{ + struct bitstream_writer_t writer; + PyObject *packed_p; + + if (number_of_args < info_p->number_of_non_padding_fields) { + PyErr_SetString(PyExc_ValueError, "Too few arguments."); + + return (NULL); + } + + packed_p = pack_prepare(info_p, &writer); + + if (packed_p == NULL) { + return (NULL); + } + + pack_pack(info_p, args_p, consumed_args, &writer); + + return (pack_finalize(packed_p)); +} + +static PyObject *m_pack(PyObject *module_p, PyObject *args_p) +{ + Py_ssize_t number_of_args; + PyObject *packed_p; + struct info_t *info_p; + + number_of_args = PyTuple_GET_SIZE(args_p); + + if (number_of_args < 1) { + PyErr_SetString(PyExc_ValueError, "No format string."); + + return (NULL); + } + + info_p = parse_format(PyTuple_GET_ITEM(args_p, 0)); + + if (info_p == NULL) { + return (NULL); + } + + packed_p = pack(info_p, args_p, 1, number_of_args - 1); + PyMem_RawFree(info_p); + + return (packed_p); +} + +static PyObject *unpack(struct info_t *info_p, + PyObject *data_p, + long offset, + PyObject *allow_truncated_p) +{ + struct bitstream_reader_t reader; + PyObject *unpacked_p = NULL; + PyObject *value_p; + Py_buffer view = {NULL, NULL}; + int i; + int tmp; + int produced_args; + int res; + int allow_truncated; + int num_result_fields; + + res = PyObject_GetBuffer(data_p, &view, PyBUF_C_CONTIGUOUS); + if (res == -1) { + return (NULL); + } + + allow_truncated = PyObject_IsTrue(allow_truncated_p); + + if (allow_truncated) { + num_result_fields = 0; + tmp = 0; + for (i = 0; i < info_p->number_of_fields; i++) { + if (view.len*8 < tmp + info_p->fields[i].number_of_bits) { + break; + } + + tmp += info_p->fields[i].number_of_bits; + + if (!info_p->fields[i].is_padding) { + ++num_result_fields; + } + } + } + else { + num_result_fields = info_p->number_of_non_padding_fields; + + if (view.len < ((info_p->number_of_bits + offset + 7) / 8)) { + PyErr_SetString(PyExc_ValueError, "Short data."); + goto exit; + } + } + + unpacked_p = PyTuple_New(num_result_fields); + + if (unpacked_p == NULL) { + goto exit; + } + + bitstream_reader_init(&reader, (uint8_t *)view.buf); + bitstream_reader_seek(&reader, offset); + produced_args = 0; + + for (i = 0; i < info_p->number_of_fields; i++) { + if (produced_args == num_result_fields) { + break; + } + + value_p = info_p->fields[i].unpack(&reader, &info_p->fields[i]); + + if (value_p != NULL) { + PyTuple_SET_ITEM(unpacked_p, produced_args, value_p); + produced_args++; + } + } + + /* + out1: + if (PyErr_Occurred() != NULL) { + Py_DECREF(unpacked_p); + unpacked_p = NULL; + } + */ +exit: + PyBuffer_Release(&view); + return (unpacked_p); +} + +static PyObject *m_unpack(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *data_p; + PyObject *unpacked_p; + PyObject *allow_truncated_p; + struct info_t *info_p; + int res; + static char *keywords[] = { + "fmt", + "data", + "allow_truncated", + NULL + }; + + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OO|O", + &keywords[0], + &format_p, + &data_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + unpacked_p = unpack(info_p, data_p, 0, allow_truncated_p); + PyMem_RawFree(info_p); + + return (unpacked_p); +} + +static long parse_offset(PyObject *offset_p) +{ + unsigned long offset; + + offset = PyLong_AsUnsignedLong(offset_p); + + if (offset == (unsigned long)-1) { + return (-1); + } + + if (offset > 0x7fffffff) { + PyErr_Format(PyExc_ValueError, + "Offset must be less or equal to %d bits.", + 0x7fffffff); + + return (-1); + } + + return (offset); +} + +static int pack_into_prepare(struct info_t *info_p, + PyObject *buf_p, + PyObject *offset_p, + struct bitstream_writer_t *writer_p, + struct bitstream_writer_bounds_t *bounds_p) +{ + uint8_t *packed_p; + Py_ssize_t size; + long offset; + + offset = parse_offset(offset_p); + + if (offset == -1) { + return (-1); + } + + if (!PyByteArray_Check(buf_p)) { + PyErr_SetString(PyExc_TypeError, "Bytearray needed."); + + return (-1); + } + + packed_p = (uint8_t *)PyByteArray_AsString(buf_p); + + if (packed_p == NULL) { + return (-1); + } + + size = PyByteArray_GET_SIZE(buf_p); + + if (size < ((info_p->number_of_bits + offset + 7) / 8)) { + PyErr_Format(PyExc_ValueError, + "pack_into requires a buffer of at least %ld bits", + info_p->number_of_bits + offset); + + return (-1); + } + + bitstream_writer_init(writer_p, packed_p); + bitstream_writer_bounds_save(bounds_p, + writer_p, + offset, + info_p->number_of_bits); + bitstream_writer_seek(writer_p, offset); + + return (0); +} + +static PyObject *pack_into_finalize(struct bitstream_writer_bounds_t *bounds_p) +{ + bitstream_writer_bounds_restore(bounds_p); + + if (PyErr_Occurred() != NULL) { + return (NULL); + } + + Py_RETURN_NONE; +} + +static PyObject *pack_into(struct info_t *info_p, + PyObject *buf_p, + PyObject *offset_p, + PyObject *args_p, + Py_ssize_t consumed_args, + Py_ssize_t number_of_args) +{ + struct bitstream_writer_t writer; + struct bitstream_writer_bounds_t bounds; + int res; + + if ((number_of_args - consumed_args) < info_p->number_of_non_padding_fields) { + PyErr_SetString(PyExc_ValueError, "Too few arguments."); + + return (NULL); + } + + res = pack_into_prepare(info_p, buf_p, offset_p, &writer, &bounds); + + if (res != 0) { + return (NULL); + } + + pack_pack(info_p, args_p, consumed_args, &writer); + + return (pack_into_finalize(&bounds)); +} + +static PyObject *m_pack_into(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *buf_p; + PyObject *offset_p; + PyObject *res_p; + Py_ssize_t number_of_args; + struct info_t *info_p; + + number_of_args = PyTuple_GET_SIZE(args_p); + + if (number_of_args < 3) { + PyErr_SetString(PyExc_ValueError, "Too few arguments."); + + return (NULL); + } + + format_p = PyTuple_GET_ITEM(args_p, 0); + buf_p = PyTuple_GET_ITEM(args_p, 1); + offset_p = PyTuple_GET_ITEM(args_p, 2); + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + res_p = pack_into(info_p, + buf_p, + offset_p, + args_p, + 3, + number_of_args); + PyMem_RawFree(info_p); + + return (res_p); +} + +static PyObject *unpack_from(struct info_t *info_p, + PyObject *data_p, + PyObject *offset_p, + PyObject *allow_truncated_p) +{ + long offset; + + offset = parse_offset(offset_p); + + if (offset == -1) { + return (NULL); + } + + return (unpack(info_p, data_p, offset, allow_truncated_p)); +} + +static PyObject *m_unpack_from(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *data_p; + PyObject *offset_p; + PyObject *unpacked_p; + PyObject *allow_truncated_p; + struct info_t *info_p; + int res; + static char *keywords[] = { + "fmt", + "data", + "offset", + "allow_truncated", + NULL + }; + + offset_p = py_zero_p; + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OO|OO", + &keywords[0], + &format_p, + &data_p, + &offset_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + unpacked_p = unpack_from(info_p, data_p, offset_p, allow_truncated_p); + PyMem_RawFree(info_p); + + return (unpacked_p); +} + +static void pack_dict_pack(struct info_t *info_p, + PyObject *names_p, + PyObject *data_p, + struct bitstream_writer_t *writer_p) +{ + PyObject *value_p; + int i; + int consumed_args; + struct field_info_t *field_p; + + consumed_args = 0; + + for (i = 0; i < info_p->number_of_fields; i++) { + field_p = &info_p->fields[i]; + + if (field_p->is_padding) { + value_p = NULL; + } else { + value_p = PyDict_GetItem(data_p, + PyList_GET_ITEM(names_p, consumed_args)); + consumed_args++; + + if (value_p == NULL) { + PyErr_SetString(PyExc_KeyError, "Missing value."); + break; + } + } + + info_p->fields[i].pack(writer_p, value_p, field_p); + } +} + +static PyObject *pack_dict(struct info_t *info_p, + PyObject *names_p, + PyObject *data_p) +{ + struct bitstream_writer_t writer; + PyObject *packed_p; + + if (PyList_GET_SIZE(names_p) < info_p->number_of_non_padding_fields) { + PyErr_SetString(PyExc_ValueError, "Too few names."); + + return (NULL); + } + + packed_p = pack_prepare(info_p, &writer); + + if (packed_p == NULL) { + return (NULL); + } + + pack_dict_pack(info_p, names_p, data_p, &writer); + + return (pack_finalize(packed_p)); +} + +PyDoc_STRVAR(pack_dict___doc__, + "pack_dict(fmt, names, data)\n" + "--\n" + "\n"); + +static PyObject *m_pack_dict(PyObject *module_p, PyObject *args_p) +{ + PyObject *format_p; + PyObject *names_p; + PyObject *data_p; + PyObject *packed_p; + struct info_t *info_p; + int res; + + res = PyArg_ParseTuple(args_p, "OOO", &format_p, &names_p, &data_p); + + if (res == 0) { + return (NULL); + } + + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + if (!is_names_list(names_p)) { + return (NULL); + } + + packed_p = pack_dict(info_p, names_p, data_p); + PyMem_RawFree(info_p); + + return (packed_p); +} + +static PyObject *unpack_dict(struct info_t *info_p, + PyObject *names_p, + PyObject *data_p, + long offset, + PyObject *allow_truncated_p) +{ + struct bitstream_reader_t reader; + PyObject *unpacked_p; + PyObject *value_p; + Py_buffer view = {NULL, NULL}; + int i; + int res; + int produced_args; + int allow_truncated; + + if (PyList_GET_SIZE(names_p) < info_p->number_of_non_padding_fields) { + PyErr_SetString(PyExc_ValueError, "Too few names."); + + return (NULL); + } + + unpacked_p = PyDict_New(); + + if (unpacked_p == NULL) { + return (NULL); + } + + res = PyObject_GetBuffer(data_p, &view, PyBUF_C_CONTIGUOUS); + + if (res == -1) { + goto out1; + } + + allow_truncated = PyObject_IsTrue(allow_truncated_p); + + if (!allow_truncated && view.len < ((info_p->number_of_bits + offset + 7) / 8)) { + PyErr_SetString(PyExc_ValueError, "Short data."); + + goto out1; + } + + bitstream_reader_init(&reader, (uint8_t *)view.buf); + bitstream_reader_seek(&reader, offset); + produced_args = 0; + + for (i = 0; i < info_p->number_of_fields; i++) { + if (view.len*8 < reader.bit_offset + info_p->fields[i].number_of_bits) + break; + + value_p = info_p->fields[i].unpack(&reader, &info_p->fields[i]); + + if (value_p != NULL) { + PyDict_SetItem(unpacked_p, + PyList_GET_ITEM(names_p, produced_args), + value_p); + Py_DECREF(value_p); + produced_args++; + } + } + + out1: + if (PyErr_Occurred() != NULL) { + Py_DECREF(unpacked_p); + unpacked_p = NULL; + } + + if (view.obj != NULL) { + PyBuffer_Release(&view); + } + + return (unpacked_p); +} + +PyDoc_STRVAR(unpack_dict___doc__, + "unpack_dict(fmt, names, data, allow_truncated=False)\n" + "--\n" + "\n"); + +static PyObject *m_unpack_dict(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *names_p; + PyObject *data_p; + PyObject *allow_truncated_p; + PyObject *unpacked_p; + struct info_t *info_p; + int res; + static char *keywords[] = { + "fmt", + "names", + "data", + "allow_truncated", + NULL + }; + + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OOO|O", + &keywords[0], + &format_p, + &names_p, + &data_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + if (!is_names_list(names_p)) { + return (NULL); + } + + unpacked_p = unpack_dict(info_p, names_p, data_p, 0, allow_truncated_p); + PyMem_RawFree(info_p); + + return (unpacked_p); +} + +static PyObject *unpack_from_dict(struct info_t *info_p, + PyObject *names_p, + PyObject *data_p, + PyObject *offset_p, + PyObject *allow_truncated_p) +{ + long offset; + + offset = parse_offset(offset_p); + + if (offset == -1) { + return (NULL); + } + + return (unpack_dict(info_p, names_p, data_p, offset, allow_truncated_p)); +} + +static PyObject *pack_into_dict(struct info_t *info_p, + PyObject *names_p, + PyObject *buf_p, + PyObject *offset_p, + PyObject *data_p) +{ + struct bitstream_writer_t writer; + struct bitstream_writer_bounds_t bounds; + int res; + + res = pack_into_prepare(info_p, buf_p, offset_p, &writer, &bounds); + + if (res != 0) { + return (NULL); + } + + pack_dict_pack(info_p, names_p, data_p, &writer); + + return (pack_into_finalize(&bounds)); +} + +PyDoc_STRVAR(pack_into_dict___doc__, + "pack_into_dict(fmt, names, buf, offset, data, **kwargs)\n" + "--\n" + "\n"); + +static PyObject *m_pack_into_dict(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *names_p; + PyObject *buf_p; + PyObject *offset_p; + PyObject *data_p; + PyObject *res_p; + struct info_t *info_p; + int res; + static char *keywords[] = { + "fmt", + "names", + "buf", + "offset", + "data", + NULL + }; + + offset_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OOOOO", + &keywords[0], + &format_p, + &names_p, + &buf_p, + &offset_p, + &data_p); + + if (res == 0) { + return (NULL); + } + + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + if (!is_names_list(names_p)) { + return (NULL); + } + + res_p = pack_into_dict(info_p, names_p, buf_p, offset_p, data_p); + PyMem_RawFree(info_p); + + return (res_p); +} + +PyDoc_STRVAR(unpack_from_dict___doc__, + "unpack_from_dict(fmt, names, data, offset=0, allow_truncated=False)\n" + "--\n" + "\n"); + +static PyObject *m_unpack_from_dict(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *names_p; + PyObject *data_p; + PyObject *offset_p; + PyObject *allow_truncated_p; + PyObject *unpacked_p; + struct info_t *info_p; + int res; + static char *keywords[] = { + "fmt", + "names", + "data", + "offset", + "allow_truncated", + NULL + }; + + offset_p = py_zero_p; + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OOO|OO", + &keywords[0], + &format_p, + &names_p, + &data_p, + &offset_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + if (!is_names_list(names_p)) { + return (NULL); + } + + unpacked_p = unpack_from_dict(info_p, names_p, data_p, offset_p, allow_truncated_p); + PyMem_RawFree(info_p); + + return (unpacked_p); +} + +static PyObject *calcsize(struct info_t *info_p) +{ + return (PyLong_FromLong(info_p->number_of_bits)); +} + +static PyObject *m_calcsize(PyObject *module_p, PyObject *format_p) +{ + PyObject *size_p; + struct info_t *info_p; + + info_p = parse_format(format_p); + + if (info_p == NULL) { + return (NULL); + } + + size_p = calcsize(info_p); + PyMem_RawFree(info_p); + + return (size_p); +} + +PyDoc_STRVAR(byteswap___doc__, + "byteswap(fmt, data, offset=0)\n" + "--\n" + "\n"); + +static PyObject *m_byteswap(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *data_p; + PyObject *swapped_p; + const char *c_format_p; + uint8_t *src_p; + uint8_t *dst_p; + Py_ssize_t size; + int res; + int offset; + + static char *keywords[] = { + "fmt", + "data", + NULL + }; + + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OO", + &keywords[0], + &format_p, + &data_p); + + if (res == 0) { + return (NULL); + } + + c_format_p = PyUnicode_AsUTF8(format_p); + + if (c_format_p == NULL) { + return (NULL); + } + + res = PyBytes_AsStringAndSize(data_p, (char **)&src_p, &size); + + if (res == -1) { + return (NULL); + } + + swapped_p = PyBytes_FromStringAndSize(NULL, size); + + if (swapped_p == NULL) { + return (NULL); + } + + dst_p = (uint8_t *)PyBytes_AS_STRING(swapped_p); + offset = 0; + + while (*c_format_p != '\0') { + switch (*c_format_p) { + + case '1': + if ((size - offset) < 1) { + goto out1; + } + + dst_p[offset] = src_p[offset]; + offset += 1; + break; + + case '2': + if ((size - offset) < 2) { + goto out1; + } + + dst_p[offset + 0] = src_p[offset + 1]; + dst_p[offset + 1] = src_p[offset + 0]; + offset += 2; + break; + + case '4': + if ((size - offset) < 4) { + goto out1; + } + + dst_p[offset + 0] = src_p[offset + 3]; + dst_p[offset + 1] = src_p[offset + 2]; + dst_p[offset + 2] = src_p[offset + 1]; + dst_p[offset + 3] = src_p[offset + 0]; + offset += 4; + break; + + case '8': + if ((size - offset) < 8) { + goto out1; + } + + dst_p[offset + 0] = src_p[offset + 7]; + dst_p[offset + 1] = src_p[offset + 6]; + dst_p[offset + 2] = src_p[offset + 5]; + dst_p[offset + 3] = src_p[offset + 4]; + dst_p[offset + 4] = src_p[offset + 3]; + dst_p[offset + 5] = src_p[offset + 2]; + dst_p[offset + 6] = src_p[offset + 1]; + dst_p[offset + 7] = src_p[offset + 0]; + offset += 8; + break; + + default: + PyErr_Format(PyExc_ValueError, + "Expected 1, 2, 4 or 8, but got %c.", + (char)*c_format_p); + goto out2; + } + + c_format_p++; + } + + return (swapped_p); + + out1: + PyErr_SetString(PyExc_ValueError, "Out of data to swap."); + + out2: + + return (NULL); +} + +static PyObject *compiled_format_create(PyTypeObject *type_p, + PyObject *format_p) +{ + PyObject *self_p; + + self_p = compiled_format_new(type_p, NULL, NULL); + + if (self_p == NULL) { + return (NULL); + } + + if (compiled_format_init_inner((struct compiled_format_t *)self_p, + format_p) != 0) { + return (NULL); + } + + return (self_p); +} + +static PyObject *compiled_format_new(PyTypeObject *type_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + return (type_p->tp_alloc(type_p, 0)); +} + +static int compiled_format_init(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + int res; + PyObject *format_p; + + static char *keywords[] = { + "fmt", + NULL + }; + + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "O", + &keywords[0], + &format_p); + + if (res == 0) { + return (-1); + } + + return (compiled_format_init_inner(self_p, format_p)); +} + +static int compiled_format_init_inner(struct compiled_format_t *self_p, + PyObject *format_p) +{ + self_p->info_p = parse_format(format_p); + + if (self_p->info_p == NULL) { + PyObject_Free(self_p); + + return (-1); + } + + Py_INCREF(format_p); + self_p->format_p = format_p; + + return (0); +} + +static void compiled_format_dealloc(struct compiled_format_t *self_p) +{ + PyMem_RawFree(self_p->info_p); + Py_DECREF(self_p->format_p); + Py_TYPE(self_p)->tp_free((PyObject *)self_p); +} + +static PyObject *m_compiled_format_pack(struct compiled_format_t *self_p, + PyObject *args_p) +{ + return (pack(self_p->info_p, args_p, 0, PyTuple_GET_SIZE(args_p))); +} + +static PyObject *m_compiled_format_unpack(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *data_p; + PyObject *allow_truncated_p; + int res; + static char *keywords[] = { + "data", + "allow_truncated", + NULL + }; + + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "O|O", + &keywords[0], + &data_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + return (unpack(self_p->info_p, data_p, 0, allow_truncated_p)); +} + +static PyObject *m_compiled_format_pack_into(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *buf_p; + PyObject *offset_p; + Py_ssize_t number_of_args; + + number_of_args = PyTuple_GET_SIZE(args_p); + + if (number_of_args < 2) { + PyErr_SetString(PyExc_ValueError, "Too few arguments."); + + return (NULL); + } + + buf_p = PyTuple_GET_ITEM(args_p, 0); + offset_p = PyTuple_GET_ITEM(args_p, 1); + + return (pack_into(self_p->info_p, + buf_p, + offset_p, + args_p, + 2, + number_of_args)); +} + +static PyObject *m_compiled_format_unpack_from(struct compiled_format_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *data_p; + PyObject *offset_p; + PyObject *allow_truncated_p; + int res; + static char *keywords[] = { + "data", + "offset", + "allow_truncated", + NULL + }; + + offset_p = py_zero_p; + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "O|OO", + &keywords[0], + &data_p, + &offset_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + return (unpack_from(self_p->info_p, data_p, offset_p, allow_truncated_p)); +} + +static PyObject *m_compiled_format_calcsize(struct compiled_format_t *self_p) +{ + return (calcsize(self_p->info_p)); +} + +static PyObject *m_compiled_format_copy(struct compiled_format_t *self_p) +{ + struct compiled_format_t *new_p; + size_t info_size; + + new_p = (struct compiled_format_t *)compiled_format_new( + &compiled_format_type, + NULL, + NULL); + + if (new_p == NULL) { + return (NULL); + } + + info_size = sizeof(*self_p->info_p); + info_size += (sizeof(self_p->info_p->fields[0]) + * (self_p->info_p->number_of_fields - 1)); + + new_p->info_p = PyMem_RawMalloc(info_size); + + if (new_p->info_p == NULL) { + /* ToDo: Free new_p. */ + return (NULL); + } + + memcpy(new_p->info_p, self_p->info_p, info_size); + Py_INCREF(self_p->format_p); + new_p->format_p = self_p->format_p; + + return ((PyObject *)new_p); +} + +static PyObject *m_compiled_format_deepcopy(struct compiled_format_t *self_p, + PyObject *args_p) +{ + return (m_compiled_format_copy(self_p)); +} + +static PyObject *m_compiled_format_getstate(struct compiled_format_t *self_p, + PyObject *args_p) +{ + return (Py_BuildValue("{sOsi}", + "format", + self_p->format_p, + pickle_version_key, + pickle_version)); +} + +static PyObject *m_compiled_format_setstate(struct compiled_format_t *self_p, + PyObject *state_p) +{ + PyObject *version_p; + int version; + PyObject *format_p; + + if (!PyDict_CheckExact(state_p)) { + PyErr_SetString(PyExc_ValueError, "Pickled object is not a dict."); + + return (NULL); + } + + version_p = PyDict_GetItemString(state_p, pickle_version_key); + + if (version_p == NULL) { + PyErr_Format(PyExc_KeyError, + "No \"%s\" in pickled dict.", + pickle_version_key); + + return (NULL); + } + + version = (int)PyLong_AsLong(version_p); + + if (version != pickle_version) { + PyErr_Format(PyExc_ValueError, + "Pickle version mismatch. Got version %d but expected version %d.", + version, pickle_version); + + return (NULL); + } + + format_p = PyDict_GetItemString(state_p, "format"); + + if (format_p == NULL) { + PyErr_SetString(PyExc_KeyError, "No \"format\" in pickled dict."); + + return (NULL); + } + + if (compiled_format_init_inner(self_p, format_p) != 0) { + return (NULL); + } + + Py_RETURN_NONE; +} + +static PyObject *compiled_format_dict_create(PyTypeObject *type_p, + PyObject *format_p, + PyObject *names_p) +{ + PyObject *self_p; + + self_p = compiled_format_dict_new(type_p, NULL, NULL); + + if (self_p == NULL) { + return (NULL); + } + + if (compiled_format_dict_init_inner((struct compiled_format_dict_t *)self_p, + format_p, + names_p) != 0) { + return (NULL); + } + + return (self_p); +} + +static PyObject *compiled_format_dict_new(PyTypeObject *type_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + return (type_p->tp_alloc(type_p, 0)); +} + +static int compiled_format_dict_init(struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + int res; + PyObject *format_p; + PyObject *names_p; + static char *keywords[] = { + "fmt", + "names", + NULL + }; + + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OO", + &keywords[0], + &format_p, + &names_p); + + if (res == 0) { + return (-1); + } + + return (compiled_format_dict_init_inner(self_p, format_p, names_p)); +} + +static int compiled_format_dict_init_inner(struct compiled_format_dict_t *self_p, + PyObject *format_p, + PyObject *names_p) +{ + if (!is_names_list(names_p)) { + return (-1); + } + + self_p->info_p = parse_format(format_p); + + if (self_p->info_p == NULL) { + PyObject_Free(self_p); + + return (-1); + } + + Py_INCREF(format_p); + self_p->format_p = format_p; + Py_INCREF(names_p); + self_p->names_p = names_p; + + return (0); +} + +static void compiled_format_dict_dealloc(struct compiled_format_dict_t *self_p) +{ + PyMem_RawFree(self_p->info_p); + Py_DECREF(self_p->names_p); + Py_DECREF(self_p->format_p); + Py_TYPE(self_p)->tp_free((PyObject *)self_p); +} + +static PyObject *m_compiled_format_dict_pack(struct compiled_format_dict_t *self_p, + PyObject *data_p) +{ + return (pack_dict(self_p->info_p, self_p->names_p, data_p)); +} + +static PyObject *m_compiled_format_dict_unpack( + struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *data_p; + PyObject *allow_truncated_p; + int res; + static char *keywords[] = { + "data", + "allow_truncated", + NULL + }; + + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "O|O", + &keywords[0], + &data_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + return (unpack_dict(self_p->info_p, self_p->names_p, data_p, 0, allow_truncated_p)); +} + +static PyObject *m_compiled_format_dict_pack_into( + struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *buf_p; + PyObject *data_p; + PyObject *offset_p; + int res; + static char *keywords[] = { + "buf", + "data", + "offset", + NULL + }; + + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "OOO", + &keywords[0], + &buf_p, + &data_p, + &offset_p); + + if (res == 0) { + return (NULL); + } + + return (pack_into_dict(self_p->info_p, + self_p->names_p, + buf_p, + data_p, + offset_p)); +} + +static PyObject *m_compiled_format_dict_unpack_from( + struct compiled_format_dict_t *self_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *data_p; + PyObject *offset_p; + PyObject *allow_truncated_p; + int res; + static char *keywords[] = { + "data", + "offset", + NULL + }; + + offset_p = py_zero_p; + allow_truncated_p = py_zero_p; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "O|OO", + &keywords[0], + &data_p, + &offset_p, + &allow_truncated_p); + + if (res == 0) { + return (NULL); + } + + return (unpack_from_dict(self_p->info_p, + self_p->names_p, + data_p, + offset_p, + allow_truncated_p)); +} + +static PyObject *m_compiled_format_dict_calcsize( + struct compiled_format_dict_t *self_p) +{ + return (calcsize(self_p->info_p)); +} + +static PyObject *m_compiled_format_dict_copy(struct compiled_format_dict_t *self_p) +{ + struct compiled_format_dict_t *new_p; + size_t info_size; + + new_p = (struct compiled_format_dict_t *)compiled_format_dict_new( + &compiled_format_dict_type, + NULL, + NULL); + + if (new_p == NULL) { + return (NULL); + } + + info_size = sizeof(*self_p->info_p); + info_size += (sizeof(self_p->info_p->fields[0]) + * (self_p->info_p->number_of_fields - 1)); + + new_p->info_p = PyMem_RawMalloc(info_size); + + if (new_p->info_p == NULL) { + /* ToDo: Free new_p. */ + return (NULL); + } + + memcpy(new_p->info_p, self_p->info_p, info_size); + Py_INCREF(self_p->names_p); + new_p->names_p = self_p->names_p; + Py_INCREF(self_p->format_p); + new_p->format_p = self_p->format_p; + + return ((PyObject *)new_p); +} + +static PyObject *m_compiled_format_dict_deepcopy(struct compiled_format_dict_t *self_p, + PyObject *args_p) +{ + return (m_compiled_format_dict_copy(self_p)); +} + +PyDoc_STRVAR(compile___doc__, + "compile(fmt, names=None)\n" + "--\n" + "\n"); + +static PyObject *m_compiled_format_dict_getstate(struct compiled_format_dict_t *self_p, + PyObject *args_p) +{ + return (Py_BuildValue("{sOsOsi}", + "format", + self_p->format_p, + "names", + self_p->names_p, + pickle_version_key, + pickle_version)); +} + +static PyObject *m_compiled_format_dict_setstate(struct compiled_format_dict_t *self_p, + PyObject *state_p) +{ + PyObject *version_p; + int version; + PyObject *format_p; + PyObject *names_p; + + if (!PyDict_CheckExact(state_p)) { + PyErr_SetString(PyExc_ValueError, "Pickled object is not a dict."); + + return (NULL); + } + + version_p = PyDict_GetItemString(state_p, pickle_version_key); + + if (version_p == NULL) { + PyErr_Format(PyExc_KeyError, + "No \"%s\" in pickled dict.", + pickle_version_key); + + return (NULL); + } + + version = (int)PyLong_AsLong(version_p); + + if (version != pickle_version) { + PyErr_Format(PyExc_ValueError, + "Pickle version mismatch. Got version %d but expected version %d.", + version, pickle_version); + + return (NULL); + } + + format_p = PyDict_GetItemString(state_p, "format"); + + if (format_p == NULL) { + PyErr_SetString(PyExc_KeyError, "No \"format\" in pickled dict."); + + return (NULL); + } + + names_p = PyDict_GetItemString(state_p, "names"); + + if (names_p == NULL) { + PyErr_SetString(PyExc_KeyError, "No \"names\" in pickled dict."); + + return (NULL); + } + + if (compiled_format_dict_init_inner(self_p, format_p, names_p) != 0) { + return (NULL); + } + + Py_RETURN_NONE; +} + +static PyObject *m_compile(PyObject *module_p, + PyObject *args_p, + PyObject *kwargs_p) +{ + PyObject *format_p; + PyObject *names_p; + int res; + static char *keywords[] = { + "fmt", + "names", + NULL + }; + + names_p = Py_None; + res = PyArg_ParseTupleAndKeywords(args_p, + kwargs_p, + "O|O", + &keywords[0], + &format_p, + &names_p); + + if (res == 0) { + return (NULL); + } + + if (names_p == Py_None) { + return (compiled_format_create(&compiled_format_type, format_p)); + } else { + return (compiled_format_dict_create(&compiled_format_dict_type, + format_p, + names_p)); + } +} + +static struct PyMethodDef methods[] = { + { + "pack", + m_pack, + METH_VARARGS, + pack___doc__ + }, + { + "unpack", + (PyCFunction)m_unpack, + METH_VARARGS | METH_KEYWORDS, + unpack___doc__ + }, + { + "pack_into", + (PyCFunction)m_pack_into, + METH_VARARGS | METH_KEYWORDS, + pack_into___doc__ + }, + { + "unpack_from", + (PyCFunction)m_unpack_from, + METH_VARARGS | METH_KEYWORDS, + unpack_from___doc__ + }, + { + "pack_dict", + m_pack_dict, + METH_VARARGS, + pack_dict___doc__ + }, + { + "unpack_dict", + (PyCFunction)m_unpack_dict, + METH_VARARGS | METH_KEYWORDS, + unpack_dict___doc__ + }, + { + "pack_into_dict", + (PyCFunction)m_pack_into_dict, + METH_VARARGS | METH_KEYWORDS, + pack_into_dict___doc__ + }, + { + "unpack_from_dict", + (PyCFunction)m_unpack_from_dict, + METH_VARARGS | METH_KEYWORDS, + unpack_from_dict___doc__ + }, + { + "calcsize", + m_calcsize, + METH_O, + calcsize___doc__ + }, + { + "byteswap", + (PyCFunction)m_byteswap, + METH_VARARGS | METH_KEYWORDS, + byteswap___doc__ + }, + { + "compile", + (PyCFunction)m_compile, + METH_VARARGS | METH_KEYWORDS, + compile___doc__ + }, + { NULL } +}; + +static PyModuleDef module = { + PyModuleDef_HEAD_INIT, + .m_name = "bitstruct.c", + .m_doc = "bitstruct C extension", + .m_size = -1, + .m_methods = methods +}; + +PyMODINIT_FUNC PyInit_c(void) +{ + PyObject *module_p; + + if (PyType_Ready(&compiled_format_type) < 0) { + return (NULL); + } + + if (PyType_Ready(&compiled_format_dict_type) < 0) { + return (NULL); + } + + py_zero_p = PyLong_FromLong(0); + module_p = PyModule_Create(&module); + + if (module_p == NULL) { + return (NULL); + } + + Py_INCREF(&compiled_format_type); + + if (PyModule_AddObject(module_p, + "CompiledFormat", + (PyObject *)&compiled_format_type) < 0) { + Py_DECREF(&compiled_format_type); + Py_DECREF(module_p); + + return (NULL); + } + + if (PyModule_AddObject(module_p, + "CompiledFormatDict", + (PyObject *)&compiled_format_dict_type) < 0) { + Py_DECREF(&compiled_format_dict_type); + Py_DECREF(module_p); + + return (NULL); + } + + return (module_p); +} diff --git a/.venv/lib/python3.12/site-packages/bitstruct/c.cpython-312-x86_64-linux-gnu.so b/.venv/lib/python3.12/site-packages/bitstruct/c.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000..e460772 Binary files /dev/null and b/.venv/lib/python3.12/site-packages/bitstruct/c.cpython-312-x86_64-linux-gnu.so differ diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/INSTALLER b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/METADATA b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/METADATA new file mode 100644 index 0000000..4a47bbd --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/METADATA @@ -0,0 +1,131 @@ +Metadata-Version: 2.1 +Name: cmake +Version: 3.31.1 +Summary: CMake is an open-source, cross-platform family of tools designed to build, test and package software +Keywords: CMake,build,c++,fortran,cross-platform,cross-compilation +Author-Email: Jean-Christophe Fillion-Robin +License: Apache 2.0 +Classifier: License :: OSI Approved :: Apache Software License +Classifier: License :: OSI Approved :: BSD License +Classifier: Programming Language :: C +Classifier: Programming Language :: C++ +Classifier: Programming Language :: Fortran +Classifier: Programming Language :: Python +Classifier: Operating System :: OS Independent +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Topic :: Software Development :: Build Tools +Classifier: Typing :: Typed +Project-URL: Homepage, https://cmake.org +Project-URL: Documentation, https://cmake-python-distributions.readthedocs.io +Project-URL: Source, https://github.com/scikit-build/cmake-python-distributions +Project-URL: Mailing list, https://groups.google.com/forum/#!forum/scikit-build +Project-URL: Bug tracker, https://github.com/scikit-build/cmake-python-distributions/issues +Requires-Python: >=3.7 +Requires-Dist: importlib_metadata>=1.4; python_version < "3.8" +Requires-Dist: coverage>=4.2; extra == "test" +Requires-Dist: pytest>=3.0.3; extra == "test" +Requires-Dist: pytest-cov>=2.4.0; extra == "test" +Provides-Extra: test +Description-Content-Type: text/x-rst + +========================== +CMake Python Distributions +========================== + +`CMake `_ is used to control the software compilation +process using simple platform and compiler independent configuration files, +and generate native makefiles and workspaces that can be used in the +compiler environment of your choice. + +The suite of CMake tools were created by Kitware in response to the need +for a powerful, cross-platform build environment for open-source projects +such as ITK and VTK. + +The CMake python wheels provide `CMake 3.31.1 `_. + +Latest Release +-------------- + +.. table:: + + +----------------------------------------------------------------------+---------------------------------------------------------------------------+ + | Versions | Downloads | + +======================================================================+===========================================================================+ + | .. image:: https://img.shields.io/pypi/v/cmake.svg | .. image:: https://static.pepy.tech/badge/cmake | + | :target: https://pypi.python.org/pypi/cmake | :target: https://pypi.python.org/pypi/cmake | + | | .. image:: https://img.shields.io/pypi/dm/cmake | + | | :target: https://pypi.python.org/pypi/cmake | + +----------------------------------------------------------------------+---------------------------------------------------------------------------+ + +Build Status +------------ + +.. table:: + + +---------------+--------------------------------------------------------------------------------------------------------------+ + | | GitHub Actions (Windows, macOS, Linux) | + +===============+==============================================================================================================+ + | PyPI | .. image:: https://github.com/scikit-build/cmake-python-distributions/actions/workflows/build.yml/badge.svg | + | | :target: https://github.com/scikit-build/cmake-python-distributions/actions/workflows/build.yml | + +---------------+--------------------------------------------------------------------------------------------------------------+ + +Platforms +--------- + +The following platforms are supported with binary wheels: + +.. table:: + + +---------------+---------------------------+ + | OS | Arch | + +===============+===========================+ + | Windows | | 64-bit | + | | | 32-bit | + +---------------+---------------------------+ + | Linux Intel | | manylinux2010+ x86_64 | + | | | musllinux_1_1+ x86_64 | + | | | manylinux2010+ i686 | + | | | musllinux_1_1+ i686 | + +---------------+---------------------------+ + | Linux ARM | | manylinux2014+ AArch64 | + | | | musllinux_1_1+ AArch64 | + | | | manylinux_2_31+ armv7l | + | | | musllinux_1_2+ armv7l | + +---------------+---------------------------+ + | Linux PowerPC | | manylinux2014+ ppc64le | + | | | musllinux_1_1+ ppc64le | + +---------------+---------------------------+ + | Linux IBM Z | | manylinux2014+ s390x | + | | | musllinux_1_1+ s390x | + +---------------+---------------------------+ + | macOS 10.10+ | Intel | + +---------------+---------------------------+ + | macOS 11+ | Apple Silicon | + +---------------+---------------------------+ + +The last version to provide ``manylinux1`` wheels was ``3.22.x``. +The last version to provide Python 2 to Python 3.6 support was ``3.28.x``. + +Maintainers +----------- + +* `How to update CMake version? `_ + +* `How to make a release? `_ + +Miscellaneous +------------- + +* Documentation: https://cmake-python-distributions.readthedocs.io/en/latest/ +* Source code: https://github.com/scikit-build/cmake-python-distributions +* Mailing list: https://groups.google.com/forum/#!forum/scikit-build + +License +------- + +This project is maintained by Jean-Christophe Fillion-Robin from Kitware Inc. +It is covered by the `Apache License, Version 2.0 `_. + +CMake is distributed under the OSI-approved BSD 3-clause License. +For more information about CMake, visit https://cmake.org diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/RECORD b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/RECORD new file mode 100644 index 0000000..55e99f6 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/RECORD @@ -0,0 +1,3785 @@ +../../../bin/ccmake,sha256=WQoGgo1RpuXMA43MfFm6rgV9bhaG01mMtXPF3ehCRiw,243 +../../../bin/cmake,sha256=_eLyMm1z6Wlpv188NXIYwXwGKDj0Wa7g1VLGtQXUaZo,241 +../../../bin/cpack,sha256=jV9PgapjMfGnVE9jqgvHakpiPJKbEm3FDWxGHtKPsLI,241 +../../../bin/ctest,sha256=iGRC3VVD2pahspcQwPEE274K6SQkY0wfDezf975YoAo,241 +cmake-3.31.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cmake-3.31.1.dist-info/METADATA,sha256=I_iBGlVH3jcCOT3P9fImb84YpRwKsEAs_FpTMPBYVVs,6485 +cmake-3.31.1.dist-info/RECORD,, +cmake-3.31.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +cmake-3.31.1.dist-info/WHEEL,sha256=_RqigxPIWFlgxdc8jB3bk4A2ZdDW_VpodoepfOXSSIw,150 +cmake-3.31.1.dist-info/entry_points.txt,sha256=oh_BH1E4iQ79Hu6YLsrv3sd38e3AM-dOJg3bWjkVbqA,101 +cmake-3.31.1.dist-info/licenses/AUTHORS.rst,sha256=nL_HiihHndHvVTAh9YQcKV2JZp874uYNGCS93dmXobE,142 +cmake-3.31.1.dist-info/licenses/LICENSE_Apache_20,sha256=c7p036pSC0mkAbXSFFmoUjoUbzt1GKgz7qXvqFEwv2g,10273 +cmake-3.31.1.dist-info/licenses/LICENSE_BSD_3,sha256=o59j7IqOnWPuj9herJ7aYVmVIW7_Q8UA9owI1Mkivz8,1668 +cmake/__init__.py,sha256=bNqp4329FdRP1dMXURjeQkPGRlSzqtDiiKL2lCu0Xgc,1873 +cmake/__main__.py,sha256=NgbD-AQgV3EQwkDB72fPF_pHCJ9VTldrUhR0vINzbRA,68 +cmake/__pycache__/__init__.cpython-312.pyc,, +cmake/__pycache__/__main__.cpython-312.pyc,, +cmake/__pycache__/_version.cpython-312.pyc,, +cmake/_version.py,sha256=vD22R0Bq0lutNSkDB6eoPA93QhV-IGwzn-ipxsFNnw4,19 +cmake/_version.pyi,sha256=GxQ4ZGLPQObN92QW_Hb8IJPEuYINNn186FjrRovM09g,13 +cmake/data/bin/cmake,sha256=XgRrPRIKFzys-hKGNr7nfRf9YacKXM0OFYUg3cDrTcY,18806648 +cmake/data/bin/cpack,sha256=qhVkUyUBEX5v6pHzRjvnkMH9Z4ssGeo1tuz-WxwWqpU,19290040 +cmake/data/bin/ctest,sha256=M3PeKaDK0SCJu8GhCItEBVN03S48qpkswmP7cjxxQDQ,20360696 +cmake/data/doc/cmake-3.31/Copyright.txt,sha256=BnbjCCdoRIeqDqj3LwHpRgpjIPo0ooiN8K0d0-igbrg,5477 +cmake/data/doc/cmake-3.31/cmcppdap/NOTICE,sha256=MQOsdEM7EvFyjMDgm6vmdiDF46sV150iK0nV0iZoGmw,173 +cmake/data/doc/cmake-3.31/cmcurl/COPYING,sha256=rbH8BlR_0TYkQXmAn3t8LSrmxFNPFgqlE6-bahKGajI,1088 +cmake/data/doc/cmake-3.31/cmlibarchive/COPYING,sha256=ss33YzRd4t40zr9UOU3zxhoQXDtxKIYDwlHy-mOCALo,3086 +cmake/data/doc/cmake-3.31/cmliblzma/COPYING,sha256=vLApc-9uh-pz0zGzqA33dIQH8X79t4S2G0fg5hDTu1w,2775 +cmake/data/doc/cmake-3.31/cmlibrhash/COPYING,sha256=lT5Vg4NTM1FIyQtaOKSJQpJoCx1MNyKP_d3b8YzlS_U,736 +cmake/data/doc/cmake-3.31/cmlibuv/LICENSE,sha256=lbixY8YNF8_OPO9hotipz3ATdQLI-189k80vxSn6mMg,2943 +cmake/data/doc/cmake-3.31/cmnghttp2/COPYING,sha256=a5Tzq8GqvQxyp8fZKnf3ndp8igyz34Oal4kLQRai3io,1156 +cmake/data/doc/cmake-3.31/cmsys/Copyright.txt,sha256=eqkq4Lhvc_gZR9F3Y5VW_n-OpCp0di7N9WPj2vcQakA,1813 +cmake/data/doc/cmake-3.31/cmzlib/Copyright.txt,sha256=D87Qpyn_xlpg6dOn9rvH-CcwFjItnEA359NLP5QX5TE,1040 +cmake/data/doc/cmake-3.31/cmzstd/LICENSE,sha256=cFUmZJdjPJAlt3fHjrcjWvE5IhF0gO1cZ0Z3rcOBydg,1549 +cmake/data/share/aclocal/cmake.m4,sha256=x2rWJXJbr8sYLUbvp8R_sBhXv2pf2IfT3MQ6ItJW6pg,1465 +cmake/data/share/bash-completion/completions/cmake,sha256=TTba9KAF3jfxMcs0-LemYTmzhEqX6Nfqj8njUp5tUYM,8323 +cmake/data/share/bash-completion/completions/cpack,sha256=gAKZtuED9CTXvgfk5s_cIiHR7TmAvScKaY_M4XFiHSo,2961 +cmake/data/share/bash-completion/completions/ctest,sha256=C1zeI9P27OFB-KVadVADXIRZbupAKoNYQgN6w5IskBI,4626 +cmake/data/share/cmake-3.31/Help/command/DEPRECATED_POLICY_VERSIONS.txt,sha256=OM44GwT39st2LHxEYBuSdLkHo6t9fe4rLcduDCh8dlc,1024 +cmake/data/share/cmake-3.31/Help/command/DEVICE_LINK_OPTIONS.txt,sha256=k8BPjU4H5sUv5ADn4gtU6XKyofQzY7efgg36UE4nEDs,651 +cmake/data/share/cmake-3.31/Help/command/FIND_XXX.txt,sha256=Sk6cmQ3DZ5X7ICw0yWw99YTgYElRkLCh1ugAKllsZNk,9440 +cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ORDER.txt,sha256=AX5PCEURY2xFEtAFDhzlapIVaPNnyKja7fUyVKYmlm0,446 +cmake/data/share/cmake-3.31/Help/command/FIND_XXX_REGISTRY_VIEW.txt,sha256=KfSPpUCXNA0eHI2c6bTEPrTcHST4Y0c2eOtBaxRWdQ0,1344 +cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ROOT.txt,sha256=OGKT3DajSrYGCFJx7qRt1BJegUNVoexAi2RPBwhIhjc,1448 +cmake/data/share/cmake-3.31/Help/command/GENEX_NOTE.txt,sha256=wV1YYpMOZ9hWX9YOE3uqtcJ_4mJZTqEUJ29c2gS5zp8,310 +cmake/data/share/cmake-3.31/Help/command/LINK_OPTIONS_LINKER.txt,sha256=5MhTr0bZf51b7BtSfFDyQpRK9NB_FNfID7pq72Hbvc0,1096 +cmake/data/share/cmake-3.31/Help/command/OPTIONS_SHELL.txt,sha256=GMmPDQZ-4CMKaYSenvGmIxL5HpoaUuoSQ5LQGaWvJcQ,772 +cmake/data/share/cmake-3.31/Help/command/SUPPORTED_LANGUAGES.txt,sha256=wuHfcKXc3valWiMu7iNTfIAow-fvX8EFWTqiYt1XV4g,753 +cmake/data/share/cmake-3.31/Help/command/UNSET_NOTE.txt,sha256=eC_iYhdltWw5OPUck22_hgT9cxSox6Hwr8nBpAh4Qqk,514 +cmake/data/share/cmake-3.31/Help/command/add_compile_definitions.rst,sha256=k3EGGLb7BEJwshKeCN2jVH24Ip3sz2tnVDBsUC_Qi7U,1067 +cmake/data/share/cmake-3.31/Help/command/add_compile_options.rst,sha256=otSUHidjOkarT3XfXxZiaWhhYyAyuQ_j5XmId7vymZg,1889 +cmake/data/share/cmake-3.31/Help/command/add_custom_command.rst,sha256=vh1IPlviok-nmjp9BMDc8v7Y-0KJp3M6OWwnOn-Fujo,27280 +cmake/data/share/cmake-3.31/Help/command/add_custom_target.rst,sha256=4GcOOGtR2_pc1E52ECPRX7RE-EYFlrUV2CbvrdfOioc,8313 +cmake/data/share/cmake-3.31/Help/command/add_definitions.rst,sha256=B0T9_qZb9qlQ61ajfsrDbuHFwWPxLX92mxIRv-b39MU,1417 +cmake/data/share/cmake-3.31/Help/command/add_dependencies.rst,sha256=gecNm3Gz37goLBi-XU6eAxFoErFJQV10cUZWmcoWhCg,1464 +cmake/data/share/cmake-3.31/Help/command/add_executable.rst,sha256=_QyNnYDUyXb84_U_5t90VKGkJCIIzJ9blsBslicQyOM,4420 +cmake/data/share/cmake-3.31/Help/command/add_library.rst,sha256=_Mr7lMVQoB2FSgjGEcjuCRrPZGg5AMNIREjr2iwliuY,12069 +cmake/data/share/cmake-3.31/Help/command/add_link_options.rst,sha256=ncvWDrgTBeQdbNCa7jfWggM4Ty8_TddsUrTF4tY1G6M,1328 +cmake/data/share/cmake-3.31/Help/command/add_subdirectory.rst,sha256=qV7caZXdQeh4mAkndc9ljxkcKG0DZKiOPCfihl_L-Lc,1521 +cmake/data/share/cmake-3.31/Help/command/add_test.rst,sha256=AdxT2MPdRKKxpX_QLIIJRlx-6cAagmWzWZrv_xwD45s,4029 +cmake/data/share/cmake-3.31/Help/command/aux_source_directory.rst,sha256=62kGKLF9EQoMkld5f6t72Y1McOXjF0cisvScwwp8G9s,1085 +cmake/data/share/cmake-3.31/Help/command/block.rst,sha256=zfqMF7X2loIjNFWQ7ivjKqGPg-7g_lYKFV4vPBcF430,1935 +cmake/data/share/cmake-3.31/Help/command/break.rst,sha256=Sw1GJPsx1M8XbDk-0BH3UmGMDxjwce0ClVYNv3jU0RQ,208 +cmake/data/share/cmake-3.31/Help/command/build_command.rst,sha256=0CYFgSUV9wm6fmYmua1izB7bVLL6RyjDp0HlVHEdHm4,1907 +cmake/data/share/cmake-3.31/Help/command/build_name.rst,sha256=hn6vQYQnIo3DJttBMJsGyyJFJfp4v72sqXQHsk9bJd0,430 +cmake/data/share/cmake-3.31/Help/command/cmake_file_api.rst,sha256=YFP3EfXt90ubeOAB5123SeLDW5KDAF7f8FDC-vu_qb0,2829 +cmake/data/share/cmake-3.31/Help/command/cmake_host_system_information.rst,sha256=n4j8OF3xf4suxjonZ8AVKDUUGT7v3CNh-7xFuTfxrWo,11888 +cmake/data/share/cmake-3.31/Help/command/cmake_language.rst,sha256=ohvvngmOM_i3sgO9Y5gG5-azizGQ5vZMNHYDRNDt5iY,20484 +cmake/data/share/cmake-3.31/Help/command/cmake_minimum_required.rst,sha256=2u4S1g6b1aXjAE-z399um4kcpFkIkFF2wugQT-BSqOw,3307 +cmake/data/share/cmake-3.31/Help/command/cmake_parse_arguments.rst,sha256=znnltTJLCpVzYNaLrnlakdEn71_A7dmMfBJxji-Kz5M,7789 +cmake/data/share/cmake-3.31/Help/command/cmake_path.rst,sha256=SwhCoXAWolT99DBBiNAKTm9sx50RK2YH3KAiSCtLRxY,25728 +cmake/data/share/cmake-3.31/Help/command/cmake_pkg_config.rst,sha256=Jb0SEErDakM-Zuovsw4IGIVxQgRKholqnzV99g83b7U,11621 +cmake/data/share/cmake-3.31/Help/command/cmake_policy.rst,sha256=N9GW5EM_32Uxqn_sGtsmixEhajTNQHCZNMq2tfUkBks,5867 +cmake/data/share/cmake-3.31/Help/command/configure_file.rst,sha256=jVeSurDyJbZzANL736xYgqYfDV8r_uW3ILF8hk85ksE,5635 +cmake/data/share/cmake-3.31/Help/command/continue.rst,sha256=NdSUBJw5uTyobuNNWs7aIuGYMbJpxhbW1tCCV-4zNAo,362 +cmake/data/share/cmake-3.31/Help/command/create_test_sourcelist.rst,sha256=0M98S4PV4RcM__axlB-LONEkYEI__wZesQa0szPCEBA,2187 +cmake/data/share/cmake-3.31/Help/command/ctest_build.rst,sha256=W5r7NX_tgpEl44EbHuO23BEjvJmfYIvh38T0q0gQpVQ,3309 +cmake/data/share/cmake-3.31/Help/command/ctest_configure.rst,sha256=FmQo7u1xPJRC6ZUCFKikajpcRwa8C3FxuYsiE0Pk1Us,1704 +cmake/data/share/cmake-3.31/Help/command/ctest_coverage.rst,sha256=_2d7Rg_93QUvF7ulqIkmFMgdrxF_sglwycMXTLvB1ZE,1661 +cmake/data/share/cmake-3.31/Help/command/ctest_empty_binary_directory.rst,sha256=QMZWliQSyCVlb65ATLkOUtcpPO3EGLhipRj_7sDaWjE,323 +cmake/data/share/cmake-3.31/Help/command/ctest_memcheck.rst,sha256=4oFMSRacfBGGtih919fICPrMLvGe4lDIaGPqC-ClQHM,1526 +cmake/data/share/cmake-3.31/Help/command/ctest_read_custom_files.rst,sha256=hPyxZmbMcRMR7G-mY8krooWxHRAoANG1uZsxVQIGCN0,332 +cmake/data/share/cmake-3.31/Help/command/ctest_run_script.rst,sha256=s1y5y9N17PW9n_G7O2fqYe5sbuVcq_iwPGr5LbkTqbI,577 +cmake/data/share/cmake-3.31/Help/command/ctest_sleep.rst,sha256=Cx-XgxjK2UvgregMvR-B9CVnWhWwfETXaLD6CVpnN14,265 +cmake/data/share/cmake-3.31/Help/command/ctest_start.rst,sha256=QUIdn60J5CiGPLQ2lWlmeqXW2XwwuEvteyw-mZqE7Lk,3194 +cmake/data/share/cmake-3.31/Help/command/ctest_submit.rst,sha256=kY7NasHlZWsbkVra_Od77jzZy4jrL7p1cwzCiFH2s9Q,4111 +cmake/data/share/cmake-3.31/Help/command/ctest_test.rst,sha256=Byk5_p34SDeif2WPwKif1ipyWwBx9BgZ0oKVNoRtXZA,11031 +cmake/data/share/cmake-3.31/Help/command/ctest_update.rst,sha256=K_pydXstjZbzp0zpe0yJxs5pm5uid0mL0KGJXM_67S4,1374 +cmake/data/share/cmake-3.31/Help/command/ctest_upload.rst,sha256=YrVk7h4Ip3eaQmGWuhCQ6BZzeNdsHyl86OYRdO89f84,678 +cmake/data/share/cmake-3.31/Help/command/define_property.rst,sha256=HbpPI3Duyu1NhljHZ2ApdKyvQIXkYvawGIE1DrwM9iM,4359 +cmake/data/share/cmake-3.31/Help/command/else.rst,sha256=HVfATgLh8F4aYwm8VJkpsVOwXZiJ2eFvRJeYbZjpjTw,129 +cmake/data/share/cmake-3.31/Help/command/elseif.rst,sha256=OXM0EBo7cV2svu8xpVuefNwhqz6tpQ55t6_FKaKOc3g,194 +cmake/data/share/cmake-3.31/Help/command/enable_language.rst,sha256=UfPO1za4YTuLabm3dciefs0anY2LMN902f_ZZGmlqKE,1073 +cmake/data/share/cmake-3.31/Help/command/enable_testing.rst,sha256=-yJAFPCcjvVSiRBUdC3COL60JZtCJOsCGDxxPGFTnao,474 +cmake/data/share/cmake-3.31/Help/command/endblock.rst,sha256=Bb9BNFYAsJjzuYzgHo5sKVwWK7RE3M9UF0ch_0H1P3I,190 +cmake/data/share/cmake-3.31/Help/command/endforeach.rst,sha256=OVCq_66-lVzfIM344fmNaQxnq_nNsOoG8uUzRA3q3vU,342 +cmake/data/share/cmake-3.31/Help/command/endfunction.rst,sha256=3EM_NxROb76inCROEaA3nmmJ58SkFNAHSdgXX9kFXIs,337 +cmake/data/share/cmake-3.31/Help/command/endif.rst,sha256=xrxFP09LFcXrhoUu1ml1bwYkntzTSahUDy3hx_0LZhI,300 +cmake/data/share/cmake-3.31/Help/command/endmacro.rst,sha256=vEqaQUpKgafPMOq0CHrtwk6jPAHD34WhCJgEw7TnfuM,319 +cmake/data/share/cmake-3.31/Help/command/endwhile.rst,sha256=6NePpXuAhwkVttX7PK8CZ4pN0f1qvPdQhjfzeqZJ9ik,317 +cmake/data/share/cmake-3.31/Help/command/exec_program.rst,sha256=FymayDn809-Jkn9YfttIQQ-Ys4mmSoH2oKCqwT3BJLA,1127 +cmake/data/share/cmake-3.31/Help/command/execute_process.rst,sha256=fBxPPNGW34qWOuEcQaueDJ6HC16-Nj3mkk5xt_kqMrk,6362 +cmake/data/share/cmake-3.31/Help/command/export.rst,sha256=KYI4qC8J7VJadyoT31JUNUv7FC5K2HWCCSSL0WL-hYc,8331 +cmake/data/share/cmake-3.31/Help/command/export_library_dependencies.rst,sha256=Od8t-06bvGAHYzEVoz2g6c6FU2_UrgpVfdeYbAX_rdE,1152 +cmake/data/share/cmake-3.31/Help/command/file.rst,sha256=dwNraTXfn2tnod5CHwX5uNjPJk13xrDZlzjlLrnsu6Y,52432 +cmake/data/share/cmake-3.31/Help/command/find_file.rst,sha256=uMc7iKZ6-dSiZzU-tdxWPP4V3D4PgrKdOc4_-I1NTQo,1974 +cmake/data/share/cmake-3.31/Help/command/find_library.rst,sha256=fXCBYckLYMqem3R1duQxp6vxKnaQ39HX4aHZZCShzSI,4414 +cmake/data/share/cmake-3.31/Help/command/find_package.rst,sha256=H1kCv5giqt6wdGd0RaGYiA52M1iWcb47VhacQP0Yj6c,35380 +cmake/data/share/cmake-3.31/Help/command/find_path.rst,sha256=u2OyumpBFc-RR1c3LEzrIUqPP6jxprI7TbYVGX9W_LU,2269 +cmake/data/share/cmake-3.31/Help/command/find_program.rst,sha256=dlvCcW6yDIinRhYSGQr8MihAa_JQgGckzWPYy2pHy9U,2159 +cmake/data/share/cmake-3.31/Help/command/fltk_wrap_ui.rst,sha256=p3MAJvR1Yo7UO8KCvHwY664vW9JWh9rab65zqOzX7Ks,380 +cmake/data/share/cmake-3.31/Help/command/foreach.rst,sha256=eSj9xBZIrY9SwusiIGaxp0C3a9Xt4M694-30atyRNuw,3653 +cmake/data/share/cmake-3.31/Help/command/function.rst,sha256=4-y_KWASYYPNr5Qk_EGaYj--QYDkbBAeV4MT2XQO0vE,2373 +cmake/data/share/cmake-3.31/Help/command/get_cmake_property.rst,sha256=fNT4Yzk3WzUMcEe2ykV0C89Ostdof0DzWKER49oWI2s,782 +cmake/data/share/cmake-3.31/Help/command/get_directory_property.rst,sha256=TzFrI2pa3JVPU4AmZEIIAkLcQmNa_mr8oGNnDiU96Co,1315 +cmake/data/share/cmake-3.31/Help/command/get_filename_component.rst,sha256=H5j4OMdrz4yPaCI5XLqhR4QEc_mK4XVO9sU7P12sblo,2595 +cmake/data/share/cmake-3.31/Help/command/get_property.rst,sha256=b_mjkdrciIjuTtFoddHKVpzfQASiauzrf-0AbtqgBks,4135 +cmake/data/share/cmake-3.31/Help/command/get_source_file_property.rst,sha256=mMpfLglRxQb9bXfEf1SRI4hDgd3CI1mTtbKvkaFhSZM,1904 +cmake/data/share/cmake-3.31/Help/command/get_target_property.rst,sha256=ayiejTc7EwvUZ0lHQ9AxwM02fOELD_304jtv_tsT-Rc,1059 +cmake/data/share/cmake-3.31/Help/command/get_test_property.rst,sha256=nSrSF0XrWSCDqELt_PqLhal6yMEVqQencbpiCWdT8r8,1267 +cmake/data/share/cmake-3.31/Help/command/if.rst,sha256=9USsqU2wMKPsCbhUiZpuvBvIcBXCJ3gW6ulRFm7FlL0,17749 +cmake/data/share/cmake-3.31/Help/command/include.rst,sha256=dCN6xV8g_BOfpgOoWmPKVKdN2TNUE0JcAMhU1tnBPgc,1087 +cmake/data/share/cmake-3.31/Help/command/include_directories.rst,sha256=B7DZjKTqck2-2TYTZzW25DMPDAPcN2q7TQ_UeifEdVg,1610 +cmake/data/share/cmake-3.31/Help/command/include_external_msproject.rst,sha256=9YdHT9Jzj9Lz2wAUsFL652ApfgcNgHBJ-Q70lxqy4Ug,1161 +cmake/data/share/cmake-3.31/Help/command/include_guard.rst,sha256=rLy7qOT6IZGBory866-JYOUsdRHbcTXJ6YIVYMQ9J9Q,1844 +cmake/data/share/cmake-3.31/Help/command/include_regular_expression.rst,sha256=wiGPNUvlyIk7kA0QwjUSPDwURffkEMKHeAT1uKKNFu0,571 +cmake/data/share/cmake-3.31/Help/command/install.rst,sha256=qaFVcbkiD7Hmyci6yTvk4RlrG1GSARHzTrym-IuZU1s,53922 +cmake/data/share/cmake-3.31/Help/command/install_files.rst,sha256=djwAA1ZRfTM_RDw63Id0fy0Ixeyrb_GxyM7m84-nY5E,1428 +cmake/data/share/cmake-3.31/Help/command/install_programs.rst,sha256=Vaa1t4lnX_yjlG0nS7sJqnjHsubDTTLEm7AS3Ga26Rg,1292 +cmake/data/share/cmake-3.31/Help/command/install_targets.rst,sha256=J-7IB_GKYPFgfK_-v3_lPx57gp5Gb4T0d0uKKiAAIgU,664 +cmake/data/share/cmake-3.31/Help/command/link_directories.rst,sha256=Ow6DL7Yzcqf7YgbnAsgX7xivz4pnYrYEQ5U0rImAnSY,2594 +cmake/data/share/cmake-3.31/Help/command/link_libraries.rst,sha256=Y5C6f8xZoS0duqarxEKqZB7v77FLRprRikgTXNfNtek,669 +cmake/data/share/cmake-3.31/Help/command/list.rst,sha256=u6LZTsbAyg_L3nSl1W37w_jh_TJKhudC_WEZys4LebA,10957 +cmake/data/share/cmake-3.31/Help/command/load_cache.rst,sha256=owO4d8tCd324AV_lGXFtgPG4wVbSX8Jf6_mJQQ0KyFY,1001 +cmake/data/share/cmake-3.31/Help/command/load_command.rst,sha256=K2NVWTbniobqN5BHpW9jttuEMdOYcmlmSZbt2BrvpnM,686 +cmake/data/share/cmake-3.31/Help/command/macro.rst,sha256=qjyQRARq94XkpEi8LGm6m0cdM_EJKNHSz6Ws3lZQjlY,4877 +cmake/data/share/cmake-3.31/Help/command/make_directory.rst,sha256=tD1uMbesFtp7KV43qdvkCTjTfey2AQhVWoKm11XL_KM,306 +cmake/data/share/cmake-3.31/Help/command/mark_as_advanced.rst,sha256=UVcz9-UsWvCZ3LWsn5MCzX3eP-BPNVnDDMXWblEAFew,867 +cmake/data/share/cmake-3.31/Help/command/math.rst,sha256=Bmo6q8yndatZiDe6l_5--nabYe1Ou2OtXs5y1PNFmDc,1319 +cmake/data/share/cmake-3.31/Help/command/message.rst,sha256=JfcJ6rny4nUFOZ4vzMJw9LP6F_mQTcadteaXEDElPPY,8315 +cmake/data/share/cmake-3.31/Help/command/option.rst,sha256=_NJxU2rqI-EqiWX44jUcwj7qsEHB7YR3mPzFk-iS2Rc,615 +cmake/data/share/cmake-3.31/Help/command/output_required_files.rst,sha256=nCua1CP_7Gj3ptcMNTyZtKXdwMdXVXnfbSR9qRwML7c,680 +cmake/data/share/cmake-3.31/Help/command/project.rst,sha256=zvYT6Qy-5Z3KazWbAGLclSxmgeRalelpKTFgHMsMIvM,7629 +cmake/data/share/cmake-3.31/Help/command/qt_wrap_cpp.rst,sha256=8geIdIYm_fj_ymAnbkLAb8xK4K1JbEo8X7kiCEl893s,884 +cmake/data/share/cmake-3.31/Help/command/qt_wrap_ui.rst,sha256=sjUvkNQuY5_z7etPpgwQbRZFoFeGbMJf5q8l1EXwYW0,981 +cmake/data/share/cmake-3.31/Help/command/remove.rst,sha256=WZX6NiEi8Zy4TThGOwDW2xYWsI1a7MnDOVH0zTnUHdk,306 +cmake/data/share/cmake-3.31/Help/command/remove_definitions.rst,sha256=4sCYmLWFhNNpMj-ldk9DGrr8o9IiiphVie-COVd99Y8,293 +cmake/data/share/cmake-3.31/Help/command/return.rst,sha256=ZL90u6NwgUakxS_Cq35KXuj9R2g435xydg8JARam7Hc,3292 +cmake/data/share/cmake-3.31/Help/command/separate_arguments.rst,sha256=OEv3VURKYqxQexzW1gvU3n04QZcWgQ7aKLDYs8F4yDw,2623 +cmake/data/share/cmake-3.31/Help/command/set.rst,sha256=ov2Kxr0DMc_N_Vt76aGqTTBAVxzf-fkTdkBslh0S450,4799 +cmake/data/share/cmake-3.31/Help/command/set_directory_properties.rst,sha256=qYGUEP2bZNFJ58X0gUeuw-lx-SQjt2vrT4bkf78gYAA,638 +cmake/data/share/cmake-3.31/Help/command/set_property.rst,sha256=mwFO1fMWEoKIpQcnfO7HYZppaK47qUSQFdOk9leQEKY,5153 +cmake/data/share/cmake-3.31/Help/command/set_source_files_properties.rst,sha256=s-Uim0qTzgQIM9BJ1R1Zr_QpuqkCknFATPoDd8xLOfI,1725 +cmake/data/share/cmake-3.31/Help/command/set_target_properties.rst,sha256=llIboBRD_swHbCB_6W5KMuAofiayQQbDmVgfBfXmq1g,826 +cmake/data/share/cmake-3.31/Help/command/set_tests_properties.rst,sha256=pxI5Usb0RtcqT3VkR9fnuZKdcPO1-p6KskRtszxSSKE,1207 +cmake/data/share/cmake-3.31/Help/command/site_name.rst,sha256=WPHl8E8tGRJlVYI-J_g0cNW8AtZfMGbs651SozPwyjE,304 +cmake/data/share/cmake-3.31/Help/command/source_group.rst,sha256=KfmEpStkM8r1JEIO1SYZgGsKQGGmCxpQABI4_oC-hPM,2228 +cmake/data/share/cmake-3.31/Help/command/string.rst,sha256=OL4W5PNm1_8FstuFodAslI77AU_XQvqvXh07hJrunlQ,19140 +cmake/data/share/cmake-3.31/Help/command/subdir_depends.rst,sha256=ML_rvlDUVj4AeNiBbwBxD9cJg4sdsAEZ9ofH9wA2LJA,306 +cmake/data/share/cmake-3.31/Help/command/subdirs.rst,sha256=z9FQqgv48jUmD2DusNhr0CoDCvxEaGPkyojXrXaWqCc,1075 +cmake/data/share/cmake-3.31/Help/command/target_compile_definitions.rst,sha256=1nb0sYyzkB1bhHA4xLltQGy1NO9KPF-VcjPn4JBSsDs,2197 +cmake/data/share/cmake-3.31/Help/command/target_compile_features.rst,sha256=QP5_rYKXLPC5XwyQmzx1SO41lKTNEVINf_MsM0Shm-g,1862 +cmake/data/share/cmake-3.31/Help/command/target_compile_options.rst,sha256=1FmoHPkiSGBRBRfDRbSNFyeOsxdAbwfxOhCWg-sXjZY,2690 +cmake/data/share/cmake-3.31/Help/command/target_include_directories.rst,sha256=14IZBLpe97nrB31S57Wr9Z0KKY2l-0bwzwQdQZuWlag,3646 +cmake/data/share/cmake-3.31/Help/command/target_link_directories.rst,sha256=It635ROLikMzxdiJKjC1t5YHAi6Azb8v66r4Gd756BQ,2833 +cmake/data/share/cmake-3.31/Help/command/target_link_libraries.rst,sha256=wVuGDWwcWApqCOZFGifSlrqV4X7urEoAXJiuR-wHNpY,17483 +cmake/data/share/cmake-3.31/Help/command/target_link_options.rst,sha256=2T8OeIihkFg7DA_EV9obstZdGV-0JYL-bok_dsWZf5I,2410 +cmake/data/share/cmake-3.31/Help/command/target_precompile_headers.rst,sha256=V5N0xBtw7BfPZdJm9vKe5wpJ-CHXRqAQFD9BeCJZcOA,5733 +cmake/data/share/cmake-3.31/Help/command/target_sources.rst,sha256=MpktgyjMwpcn4Yi02ofHXF8nxruc458EWH2mqcy6zgU,7469 +cmake/data/share/cmake-3.31/Help/command/try_compile.rst,sha256=amUshM9AnJZW9PH1vENMFN1dRoUBufnznMYfnJo3JEg,15291 +cmake/data/share/cmake-3.31/Help/command/try_run.rst,sha256=AUk7mLsJ668p3KZoXbPuwzOK0DH_7CIdGFzQu2hK8kk,5955 +cmake/data/share/cmake-3.31/Help/command/unset.rst,sha256=bEGmLqXIIpOYdRuwZvdUpYfskL5jZjH3OXjDYGI5un0,1106 +cmake/data/share/cmake-3.31/Help/command/use_mangled_mesa.rst,sha256=T8lrKLZFJAUl4Du_Y8gfKN2hfdA2-Fbi5tjDPQmG8fI,475 +cmake/data/share/cmake-3.31/Help/command/utility_source.rst,sha256=oz50Wi0Mt9TH7RzY8nc4LsnjFZ7UBZ9g6O_2GG8W2Kg,977 +cmake/data/share/cmake-3.31/Help/command/variable_requires.rst,sha256=lY-zBYFvrgph78ie8Awr6ik43hGlvosD1ppqB-4VqDg,784 +cmake/data/share/cmake-3.31/Help/command/variable_watch.rst,sha256=ApGfq593-9PzXVCh-TU0XQgeY8exIpnSUG7u_ylCHY8,1799 +cmake/data/share/cmake-3.31/Help/command/while.rst,sha256=juEwvGSyRl3oFeEN8n40WDjo0h7CtA9kMJ_CuDn9Apk,891 +cmake/data/share/cmake-3.31/Help/command/write_file.rst,sha256=itqwnycSyKuyHv2AX5O2mF_LPa8flmK7RgRmevJ-eCI,705 +cmake/data/share/cmake-3.31/Help/cpack_gen/archive.rst,sha256=tYYiJf5-YS8FNDgqT8_ZE0dhlTHmTsJjurF_qo_GNT4,3078 +cmake/data/share/cmake-3.31/Help/cpack_gen/bundle.rst,sha256=b12q1QGSS1GPVplKaAYSn0pASAYgdFcdkQuTTNLjUF4,2533 +cmake/data/share/cmake-3.31/Help/cpack_gen/cygwin.rst,sha256=U-Ta7VJRct_FPu4rqoDJzzmnhZhofwTb5xsfudZnRH8,735 +cmake/data/share/cmake-3.31/Help/cpack_gen/deb.rst,sha256=l5GJkhIUU5XSaRJlTJge26KFpORI9ZgzJIH5FTEomOY,23310 +cmake/data/share/cmake-3.31/Help/cpack_gen/dmg.rst,sha256=xXvF59H2mHs2gyVCzqF4An6VaybYDTGtj6OGaOSPeEA,5800 +cmake/data/share/cmake-3.31/Help/cpack_gen/external.rst,sha256=1crcQEuDlA6ZrjOGOGfvWkkdaLR5SXdbMlVS_8bd_Gw,11868 +cmake/data/share/cmake-3.31/Help/cpack_gen/freebsd.rst,sha256=NIFWp4ZddhBkA30GCf9PtjMSvEpHqbnkBgbkl-9f24g,5428 +cmake/data/share/cmake-3.31/Help/cpack_gen/ifw.rst,sha256=wd79O5K7wDojCH-JPcjIxlMVbXIqtIXo8QxzT9Lgw3A,14595 +cmake/data/share/cmake-3.31/Help/cpack_gen/innosetup.rst,sha256=pQFPdPAdil37UzyYklSBURNIgpSdFCtZS6Vt3Jb1GQA,14443 +cmake/data/share/cmake-3.31/Help/cpack_gen/nsis.rst,sha256=IGO7J33Rd8rWpUShMrZsqZTT5YpFV1fyBNg3Tobzb5o,7245 +cmake/data/share/cmake-3.31/Help/cpack_gen/nuget.rst,sha256=6GbQCtdFb29kIGZi5NHxYziNREzL_xiKf03Ys0G63x8,12943 +cmake/data/share/cmake-3.31/Help/cpack_gen/packagemaker.rst,sha256=lADrJBPXecPUxKDF0Ezt2z33fV74EXIhD26aVfDEB-A,280 +cmake/data/share/cmake-3.31/Help/cpack_gen/productbuild.rst,sha256=DLk_hI_UhVfNN1iZae7o-c1Y8sTeORnBa5fDeGA33JU,8743 +cmake/data/share/cmake-3.31/Help/cpack_gen/rpm.rst,sha256=sVvTsSTWqEbK_OZQDKdYnq7PZ8R45sXqunDR8427i94,34187 +cmake/data/share/cmake-3.31/Help/cpack_gen/wix.rst,sha256=0fW6lSWscD_pxvGn1x7Rf640khRlxqRKdhQ1qRH9XAc,15586 +cmake/data/share/cmake-3.31/Help/envvar/ADSP_ROOT.rst,sha256=w3PrEwFgRJ_VT9dzCF_7tyTXBfR_5Ca08oAC8bmmTqw,277 +cmake/data/share/cmake-3.31/Help/envvar/ASM_DIALECT.rst,sha256=QlIrDoV9O4K68VInCa2j1sZsSH5T4VKnRl2HXjgOhRc,899 +cmake/data/share/cmake-3.31/Help/envvar/ASM_DIALECTFLAGS.rst,sha256=WePQCIZCvocehttmmJ69rF3hgBLUgrMrU8bcUjfHqmI,534 +cmake/data/share/cmake-3.31/Help/envvar/CC.rst,sha256=BX-u350QTjPudn6piK_CdE9gGt5R8ftB5h7VEQwI7QE,648 +cmake/data/share/cmake-3.31/Help/envvar/CCMAKE_COLORS.rst,sha256=oQnkPsH_bjE_AfglbJK0jIRb9hxQ2198s57_MQZ7Co8,1499 +cmake/data/share/cmake-3.31/Help/envvar/CFLAGS.rst,sha256=mXcs9UsVIza13-tceu88Kgw8qkGXRRb_H-o60IPS5jc,312 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_APPBUNDLE_PATH.rst,sha256=j4IJzfs86VgugsuLqxmGPKAQc5G3rIZTdTJlLWPlqoc,526 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_APPLE_SILICON_PROCESSOR.rst,sha256=bbHOsfLRuFziCP_7grnQiHlQyr8S_RAtqXJSpQRJ3lk,424 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_BUILD_PARALLEL_LEVEL.rst,sha256=P7YEaEB_Ahy4JTOlWjbF472cVhVMQfr2n_WNfBX7Q1M,573 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_BUILD_TYPE.rst,sha256=EJWyE5ZNLeOZwR5whh3VtXCwg4-prlToMvJk4dxmUT8,299 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_COLOR_DIAGNOSTICS.rst,sha256=2sj8WjZ6otb6Oj3GzaRUOS5UN875tBL8rhyKLC6A-8s,234 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_CONFIGURATION_TYPES.rst,sha256=R6mSXmAFfSNqgJ30uW-O3bjmF02arQxOLX_ClNTIDqM,335 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_CONFIG_DIR.rst,sha256=SBv45SlQPvm4JQ6k6QSH3aYx8a1wDxmTzSh9HIdeaC4,509 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_CONFIG_TYPE.rst,sha256=7xIHjatxTX_yWzBRaD_GmemB8A_Fe9pu7V71fjuajHE,197 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_CROSSCOMPILING_EMULATOR.rst,sha256=Gp-adiF0DcMBDa4jcPzPcfM3kvh22Pz6bkbILVh0-pk,390 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_EXPORT_BUILD_DATABASE.rst,sha256=cwjScRjkO3WAeLf2oqgYnS74Rz_M4JqrGZBfVUBDnLM,557 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_EXPORT_COMPILE_COMMANDS.rst,sha256=0Clafmmged_zaBdSm75krcA95Aoz0RrF1jvSiM3zj5Y,390 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_FRAMEWORK_PATH.rst,sha256=OYLno4zvVIOnXL0HZcMtK2TGb5zH2BIb2bRHu7GC71s,562 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_GENERATOR.rst,sha256=xkF4exeUfXigximayvYwgEsTpLN72wMM4esvB0fS3_E,574 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_GENERATOR_INSTANCE.rst,sha256=_NGWsK4jUM89JN-7ns02isaFzYbHxM4r2Pd37TflRQs,250 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_GENERATOR_PLATFORM.rst,sha256=3ZhDSry8gKjBOCZhs5kLjbRxJRZuHCOkhCd-QVX2gEY,305 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_GENERATOR_TOOLSET.rst,sha256=xbD-R5etHPgcr9V7utX7ehFHzkaBOHsiB9kEtKOFj2c,302 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_INCLUDE_PATH.rst,sha256=NYO2OMJHZJU2y4p3MI1KzuPTgoMq1R1-ejPHfpaC4kk,482 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_INSTALL_MODE.rst,sha256=Ytm_DJJX0oCS875RJ2kT0YFpiNEH0Dkd9hXqHtc6jl8,4548 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_INSTALL_PARALLEL_LEVEL.rst,sha256=DDjxqQgC09wWJWwu67qcY_nXzrY-tmsfgkeJ0Pwk9kQ,288 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_INSTALL_PREFIX.rst,sha256=jP5e-MF14XAORFh_lvjOiJpvZyRy_AZQKp1ARERe8nY,345 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_LANG_COMPILER_LAUNCHER.rst,sha256=OEfvKHcu4EdXrF1Oc0Q98M7QmIL-czkBzG5rlMoR-uk,505 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES_EXCLUDE.rst,sha256=FAso-wLGDLzaesWvfw2o6eAkFHLhcE2ubZ1OCua-Sd8,489 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_LANG_LINKER_LAUNCHER.rst,sha256=UmqWTIWiOeC4ZVRqzaT2RZqdxD-0WVLp9UpVCLgnvcU,511 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_LIBRARY_PATH.rst,sha256=dX15N31rcQq2wYRCZhNtaxRxf8lypTZUey5vZf7n-gQ,459 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_MAXIMUM_RECURSION_DEPTH.rst,sha256=VlSTH0RGFtW5_rpvI0wD9NBrbi4LAX2w_ErpkcPexno,306 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_MSVCIDE_RUN_PATH.rst,sha256=PmECwxvvEL0J5OEsfi8QCL4c5pDvNoxcLCo1Rua56pE,317 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_NO_VERBOSE.rst,sha256=QoKb72wnkx44AeHhOiXKJtqdIIv5fi_eVB_yCJycN8A,257 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_OSX_ARCHITECTURES.rst,sha256=_-DkOH_Gt5TIRzLHIvFxuLWluTxlx57aM5abWU53_nM,303 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_PREFIX_PATH.rst,sha256=qHo5itH6gvAnEQCSv7nNzj4M_0H7VJMFF4dTTeeerUM,712 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_PROGRAM_PATH.rst,sha256=trHb5kZFMnEeh68dAqXTyuujDU4oNpAFc4y42ZmCU5Q,459 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_TEST_LAUNCHER.rst,sha256=QNhabfrujPYWCe7cQJn6EMAiqQqEL_4JOWqCJPFa9_0,363 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_TLS_VERIFY.rst,sha256=kIyJCKgeiEPeZLgpqvLDToU0cygK_m7y1_vcg4u5h0c,494 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_TLS_VERSION.rst,sha256=iLhHUnb6cbk7QDXwg_FXwZv7rRkKQQ4QpYojLi09PVQ,536 +cmake/data/share/cmake-3.31/Help/envvar/CMAKE_TOOLCHAIN_FILE.rst,sha256=6wdz5BZKEfBcnX-XNs2ukC8lrswt6tNEpVZDXc0xwnw,424 +cmake/data/share/cmake-3.31/Help/envvar/CSFLAGS.rst,sha256=QB4fpkKKPcC5jpPXuvMgLof7LjNdoARVUbwogrjoCHM,359 +cmake/data/share/cmake-3.31/Help/envvar/CTEST_INTERACTIVE_DEBUG_MODE.rst,sha256=XB4RkHLAx6-7KKZDA4vKBHRu_qgsgWoLr_N7JGjyvrI,213 +cmake/data/share/cmake-3.31/Help/envvar/CTEST_NO_TESTS_ACTION.rst,sha256=A2NVuX9hOTFiUopY_PP8wBMt3nepB8Zx0eqr87mADGU,415 +cmake/data/share/cmake-3.31/Help/envvar/CTEST_OUTPUT_ON_FAILURE.rst,sha256=cC1bpXWJgKA2eLkRff2Wtsx19IeABiBSAOWZlNBUaak,323 +cmake/data/share/cmake-3.31/Help/envvar/CTEST_PARALLEL_LEVEL.rst,sha256=_tn_aLEi1DvjAaWIMaHKZCsC5426J89OiTDi2QOu8gQ,804 +cmake/data/share/cmake-3.31/Help/envvar/CTEST_PROGRESS_OUTPUT.rst,sha256=lPbhTf-V3XUmDBpdZ-i7WOlovv-q9Ap9olHH1ydiS2M,782 +cmake/data/share/cmake-3.31/Help/envvar/CTEST_USE_LAUNCHERS_DEFAULT.rst,sha256=Qkwpd8WCiaq59xvdu9cpAV2bLcnNRl8gkEePlgAVw4M,164 +cmake/data/share/cmake-3.31/Help/envvar/CUDAARCHS.rst,sha256=qUO6tECrkHzhZXdNWnwvbwdHBWnDJNzjGzpnKNZjmx0,318 +cmake/data/share/cmake-3.31/Help/envvar/CUDACXX.rst,sha256=U2HqruTvjuA55Nw-kjB51h78vATssOBQxeSqifsGsbA,700 +cmake/data/share/cmake-3.31/Help/envvar/CUDAFLAGS.rst,sha256=jkePQ0YoYEb6M2p91Wqe3XcEZYrckpszlTW7RbZZrDs,353 +cmake/data/share/cmake-3.31/Help/envvar/CUDAHOSTCXX.rst,sha256=d5a4Yg2P7TAftLhrzdT8NQk35Vr1YOupxaanr4hDwHg,809 +cmake/data/share/cmake-3.31/Help/envvar/CXX.rst,sha256=TAlzXHiloj7vxSwBtQBWirRJpd-3Igv3jJHaHpAFzFY,660 +cmake/data/share/cmake-3.31/Help/envvar/CXXFLAGS.rst,sha256=f-2qUOUJqQv_wQms3vfRk2KN8bfOIYA2Ssp6xEhfqPQ,330 +cmake/data/share/cmake-3.31/Help/envvar/DASHBOARD_TEST_FROM_CTEST.rst,sha256=5svdoVtuPoWziSP1u2Vrge-B7AxwoR98BCmvD-mKeus,246 +cmake/data/share/cmake-3.31/Help/envvar/DESTDIR.rst,sha256=ZB8eCu0n_So2R6W36rT1YqFhAN774U38zXcETJqZOlI,1114 +cmake/data/share/cmake-3.31/Help/envvar/ENV_VAR.txt,sha256=pAqwpo7BhXsE_XCjHCACV9zfvkYFWGsOcGKYARYURnM,149 +cmake/data/share/cmake-3.31/Help/envvar/FC.rst,sha256=qyLOLxH_WlyZP_uNU-frsxKGct-I57qpsS24xtzuihc,677 +cmake/data/share/cmake-3.31/Help/envvar/FFLAGS.rst,sha256=KTzdeYkMfcGEhNgqdHbmwZnB0Ax9mrl1OjT9hQACtW8,336 +cmake/data/share/cmake-3.31/Help/envvar/HIPCXX.rst,sha256=GrC8Mq6fyyS13VSX0uTS3oXe-HkYq2Wpq4EwV7TraaU,498 +cmake/data/share/cmake-3.31/Help/envvar/HIPFLAGS.rst,sha256=aq_2yRiljGjCgsDW284GureGk4OAl2hNWJxz8qnj1_A,348 +cmake/data/share/cmake-3.31/Help/envvar/HIPHOSTCXX.rst,sha256=9KrCVv6kSBycCKuE-W4myX0u8eNCUXfjGmwiSwWsSsw,592 +cmake/data/share/cmake-3.31/Help/envvar/ISPC.rst,sha256=Piuo8OfX2X_TtlZg7iY3SeS4Q5mxmyG9gJBGDjbR97c,502 +cmake/data/share/cmake-3.31/Help/envvar/ISPCFLAGS.rst,sha256=5FQA6NrLvtiQQvLZkPPZRwao0-3ZUFyK0XnjL56Ofww,354 +cmake/data/share/cmake-3.31/Help/envvar/LANG_FLAGS.txt,sha256=nr2QAIjfsYUKluCZrADopKtdKP4LOXe714GzESfAA9E,393 +cmake/data/share/cmake-3.31/Help/envvar/LDFLAGS.rst,sha256=HBP62Vyqp1yAIQqGz5txGjygjF6bwJsq1hm7K-8FHls,498 +cmake/data/share/cmake-3.31/Help/envvar/MACOSX_DEPLOYMENT_TARGET.rst,sha256=HR8vg5Hnrm5Z5zjLghdAeMqVahBCXdXumU_diq-f8JA,299 +cmake/data/share/cmake-3.31/Help/envvar/OBJC.rst,sha256=RgsQtjvA-jyc9FfHYHIpm_LX1vjyV11GsWpcW6fANvk,593 +cmake/data/share/cmake-3.31/Help/envvar/OBJCFLAGS.rst,sha256=lM0jf05VysH70inCXnEYjmYCuQNW2yGwPYF-_mcniXc,361 +cmake/data/share/cmake-3.31/Help/envvar/OBJCXX.rst,sha256=6i1jRxqHlDRELeUh9oV_VLRaUmD8Nd4ZFWxSFiWTgq4,610 +cmake/data/share/cmake-3.31/Help/envvar/OBJCXXFLAGS.rst,sha256=GzNbTmGVlaRXMWtw0CxOZRna3EOfY-uc4mrTfeCR2Q0,379 +cmake/data/share/cmake-3.31/Help/envvar/PackageName_ROOT.rst,sha256=WFw7aKqSj8tx35pVujsJM3PPb1yj2_Go6yfVI8cmUzY,1161 +cmake/data/share/cmake-3.31/Help/envvar/RC.rst,sha256=gFZAkU744qd47Tf5a9UE4tqEdo0vbOfCKymp35x076o,655 +cmake/data/share/cmake-3.31/Help/envvar/RCFLAGS.rst,sha256=r0aj8kPpA86uRfbn3E14M9k5Ta6yd-xk2Bh0aukXkGQ,329 +cmake/data/share/cmake-3.31/Help/envvar/SSL_CERT_DIR.rst,sha256=DZK4H0VgkCQxDM6QDJwBXs-zTwxI_5Gpld_kAB7aBHE,176 +cmake/data/share/cmake-3.31/Help/envvar/SSL_CERT_FILE.rst,sha256=dji5tmFb4debAsupJxWy9448ksEkLfA98N3UdQ9sxEo,182 +cmake/data/share/cmake-3.31/Help/envvar/SWIFTC.rst,sha256=rScy98zGD1qz6jfnTLIyltW6QP_aGcABpplL5LmMvOo,704 +cmake/data/share/cmake-3.31/Help/envvar/VERBOSE.rst,sha256=7Afh0GS1KjDlHN-wW0r0MGY4DtsiBmSgyW7DI4x42Sc,330 +cmake/data/share/cmake-3.31/Help/generator/Borland Makefiles.rst,sha256=wyxEzUktAWqoK2SpFdY4DNEhqMHKJiEXuTQRUU1wsY0,66 +cmake/data/share/cmake-3.31/Help/generator/CodeBlocks.rst,sha256=ZTTq1tdaJpq9vAIox7liQFcviZd_qnm_XpVqKHur-Bc,1295 +cmake/data/share/cmake-3.31/Help/generator/CodeLite.rst,sha256=7PkahzX4B4uwhvFfdpkgAzuS0imO4dGKuMJwLiTtdd4,1089 +cmake/data/share/cmake-3.31/Help/generator/Eclipse CDT4.rst,sha256=W28jVaHyetAX5fLEM9QazQVZA4JzdM9l68fOXNZR-54,999 +cmake/data/share/cmake-3.31/Help/generator/Green Hills MULTI.rst,sha256=xt7jr3gBzHLLYYBenbmqcMGFwul8bqR_yZTiI01xtxk,4933 +cmake/data/share/cmake-3.31/Help/generator/Kate.rst,sha256=J8Su1A07KqgWOetpQspzmXJIxYlHKBD90bFFHueCV7c,1002 +cmake/data/share/cmake-3.31/Help/generator/MSYS Makefiles.rst,sha256=vxBy0r1-Lc9UDDYg5qhfK42sdwwCwn35YOnihPsWfFY,421 +cmake/data/share/cmake-3.31/Help/generator/MinGW Makefiles.rst,sha256=XkKLfxDJJGs0sBM_1WXaXED1A3HPHiXVN30iu7fGMwc,476 +cmake/data/share/cmake-3.31/Help/generator/NMake Makefiles JOM.rst,sha256=ml40Zb4r6G-2I0m-HhSYx_6GrL2fyURAyF2KDGfz_jE,160 +cmake/data/share/cmake-3.31/Help/generator/NMake Makefiles.rst,sha256=lxgXxh--sKxMaamtqGJZXpFtZRWn3-7rjZe6-Txj3Ik,60 +cmake/data/share/cmake-3.31/Help/generator/Ninja Multi-Config.rst,sha256=jf7p_c2HdZmlDLtHsfTfumpQT-dQTozEf68yhXsx-9c,7138 +cmake/data/share/cmake-3.31/Help/generator/Ninja.rst,sha256=rm5r30DAr9ED08Fp9QuGvCv8qYIpjBX8IAg1soCQP7I,1892 +cmake/data/share/cmake-3.31/Help/generator/Sublime Text 2.rst,sha256=8Dg6y4c3Ci-rSM_8qP6F8XF0BnGfGbKi2fwzm_SU5i4,1042 +cmake/data/share/cmake-3.31/Help/generator/Unix Makefiles.rst,sha256=Kdd6-9yXX18TvpPdK6aER48PaXOTP3hY8A9Z4PwYWM8,925 +cmake/data/share/cmake-3.31/Help/generator/VS_TOOLSET_HOST_ARCH.txt,sha256=j-8YPsSONsm6tE_AxoL0O-gIYpsHYWbaOeN8EjYF97Q,453 +cmake/data/share/cmake-3.31/Help/generator/VS_TOOLSET_HOST_ARCH_LEGACY.txt,sha256=jNpMFvmys-yuNVUfCMtuhhJ2t7vp1w6VWdn4hLOViYY,554 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 10 2010.rst,sha256=18q8tslAgr_Oa1MaAop1GOCRfQYAx9A5Pk9ps6d68YU,446 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 11 2012.rst,sha256=6jNjbvUuJEJk2DqdNpekpy-X0zYkwK0xDVBwEYa-qRY,446 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 12 2013.rst,sha256=iTbUGMgXYEJL80zncVbdfZeFfO1RBWxOkvy32pyjzq8,446 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 14 2015.rst,sha256=eRgYuuiT3zd-3mF_nmuMYcLHwTQrtYPeLGM58RB1efY,2290 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 15 2017.rst,sha256=XpFDJQmuOIU6g5JsXA0bVhCTT_AnO3lIa6zOZZoag5w,1713 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 16 2019.rst,sha256=mx5RjfBAqP0oQPl4e4SnCJnu4_Mk2OUEmguNUDeXgIQ,1491 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 17 2022.rst,sha256=J5duWZou4PtcyQ6KWx-WvUaM00A79Yq9vo93eypkw_s,1479 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 6.rst,sha256=imgjtFd51i5PXD0YXOedJWQQGGL7Yf4vv0AZg9kyCqg,243 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 7 .NET 2003.rst,sha256=Tf76h6vKcdFe9Wo5HGs6qJZ4mgXvrR8t43BIZSdFJ-Y,273 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 7.rst,sha256=MWGw-cwbClfe_VTdJC7JHYUrvB_c7EI-TbbQN3TyVoc,253 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 8 2005.rst,sha256=hl95TPz28e3CDluqrSAAVlN9aH6F3M8SvjMvPNqtR0Q,262 +cmake/data/share/cmake-3.31/Help/generator/Visual Studio 9 2008.rst,sha256=N3WdmYFrFU8hDU2xz3XUSf7nIj0jrHt4gGgX4TOF7ec,456 +cmake/data/share/cmake-3.31/Help/generator/Watcom WMake.rst,sha256=-vSGPK9Dbzb85aLc0Br2yYkJmxWc_AUsDtrU0rIb5Hk,61 +cmake/data/share/cmake-3.31/Help/generator/Xcode.rst,sha256=DPQY46e1UTXSHP7E8InXcKIvZcaUu_Ll7OAUlZZCM2U,1614 +cmake/data/share/cmake-3.31/Help/include/COMPILE_DEFINITIONS_DISCLAIMER.txt,sha256=3ZriIs8EnQkjEdqq-OnWBbOoEiZwo-wJfKp6I0NJJQw,906 +cmake/data/share/cmake-3.31/Help/include/INTERFACE_INCLUDE_DIRECTORIES_WARNING.txt,sha256=_POtYoVD92Y-rCgRTqXZ7MIotbKCMhVVj5OZmuNGm4A,967 +cmake/data/share/cmake-3.31/Help/include/INTERFACE_LINK_LIBRARIES_WARNING.txt,sha256=0vcA0oF7MhI3Zmx_CKMR_Rbd_YynxFEkifPXvgT67EA,488 +cmake/data/share/cmake-3.31/Help/index.rst,sha256=Uddke1VRFqHx9Y-cBDURkLsMeCJZUyYekN5kOVP6Wv4,2741 +cmake/data/share/cmake-3.31/Help/manual/CTEST_EXAMPLE_MAKEFILE_JOB_SERVER.make,sha256=DCZXKJ2W94LtJePPKB46tF4bQUYV9CkV2HH-XQy_6VU,19 +cmake/data/share/cmake-3.31/Help/manual/ID_RESERVE.txt,sha256=oDxhhx4_8U9XKY7GnBTOpGyd2fDVf1UAwR9bT2QvFKY,266 +cmake/data/share/cmake-3.31/Help/manual/LINKS.txt,sha256=U-w4ZNxnMwd3KyknmmEmJ6r-ay94UmvZnjHmDF0bAs0,430 +cmake/data/share/cmake-3.31/Help/manual/OPTIONS_BUILD.txt,sha256=zP9ggIQRGHtrerAYaEhxllHKbmwzeuZ4olbyC4hDojw,6314 +cmake/data/share/cmake-3.31/Help/manual/OPTIONS_HELP.txt,sha256=p3HlO-bpMicaxLj3hmcVuid6iCVZ6BzXpHstoQO3PvQ,4196 +cmake/data/share/cmake-3.31/Help/manual/ccmake.1.rst,sha256=JE_fbzGFWCMiNPDLf29pRLSY4Lfb7TzKJFoNh30aofU,974 +cmake/data/share/cmake-3.31/Help/manual/cmake-buildsystem.7.rst,sha256=Q6WfyV6bhTJ9zDJzJmTOPYmeoPc5O3q2p9utY9CReYI,55531 +cmake/data/share/cmake-3.31/Help/manual/cmake-commands.7.rst,sha256=kd8tXlPfVm1zZJcoorxqKuqa52ClRpyUch4mhazh02s,4253 +cmake/data/share/cmake-3.31/Help/manual/cmake-compile-features.7.rst,sha256=lhtPxcIC2MEjCnWx_wf6ckaT2Tgd1ZJE2qciygrbvWU,11756 +cmake/data/share/cmake-3.31/Help/manual/cmake-configure-log.7.rst,sha256=PtoYU5Q8pQlqt7i9hn1GKHCRlAgDSW4euKk-EEW3RZ4,9930 +cmake/data/share/cmake-3.31/Help/manual/cmake-cxxmodules.7.rst,sha256=h97qmgtLqnuivVfwhSOYkwy8-KAhlTd-QTNrqf9p_Dk,5820 +cmake/data/share/cmake-3.31/Help/manual/cmake-developer.7.rst,sha256=BX5zFDv1t0b8JA51yUv3x9uTT6ANWMX7FqTbPD6L42M,22275 +cmake/data/share/cmake-3.31/Help/manual/cmake-env-variables.7.rst,sha256=qV-lwSONR9ede7SKtOi4KI4-kI-_XxZYthlJ6DDr5Wg,3107 +cmake/data/share/cmake-3.31/Help/manual/cmake-file-api.7.rst,sha256=0tvVkH4pQWkjEzbgdDmxWuaLBHP-d2KB3HtTysHQERs,65215 +cmake/data/share/cmake-3.31/Help/manual/cmake-generator-expressions.7.rst,sha256=-ncEkLj3NrFY35DyB7LiUwtbw8TpYbrUl1ifTW1qFgU,91782 +cmake/data/share/cmake-3.31/Help/manual/cmake-generators.7.rst,sha256=CNJojg8DYpNEzgoRxkVL4gVdpRUazMGsT9FuzNXQRLI,3445 +cmake/data/share/cmake-3.31/Help/manual/cmake-gui.1.rst,sha256=qCSABPCMGdyqhA-2do8K37tkVg66b7-5F5mLbVfgiOc,1607 +cmake/data/share/cmake-3.31/Help/manual/cmake-language.7.rst,sha256=YVHBBvGp-QViZ0wIXxeV2Oqq2zZbhkJ0mICGFPM-sd8,22058 +cmake/data/share/cmake-3.31/Help/manual/cmake-modules.7.rst,sha256=RvYEQW3Xt1ZZdIheTowUhGBb2kDqOycJaXacHqIE1vg,7778 +cmake/data/share/cmake-3.31/Help/manual/cmake-packages.7.rst,sha256=NSKq0SM-UmOqHVm271klk50_NxT1VQ9mQE9Yzsp-1QI,27919 +cmake/data/share/cmake-3.31/Help/manual/cmake-policies.7.rst,sha256=aFTR0yXZos9ihfIsx_Zqa3qZXZKsvrHz6cY8nDneqRc,21510 +cmake/data/share/cmake-3.31/Help/manual/cmake-presets.7.rst,sha256=RWoDY5jJ_hqKswH8xbJfwzGFjTLfv0htvA_O9fQPnJI,52593 +cmake/data/share/cmake-3.31/Help/manual/cmake-properties.7.rst,sha256=igftPmJMNNQKqOpnPFcZxL4NRalZtcsj2VC6Lew0MNc,21134 +cmake/data/share/cmake-3.31/Help/manual/cmake-qt.7.rst,sha256=uyr1sfV_mc-ST9Mwu5uGAD507ed9A86DtgRDMglpXbo,11451 +cmake/data/share/cmake-3.31/Help/manual/cmake-server.7.rst,sha256=cIfjQa11zxvVU0DJt6HWenYVdSJPdNY0KReFGLXuBwk,206 +cmake/data/share/cmake-3.31/Help/manual/cmake-toolchains.7.rst,sha256=Xbvn-u5HoUGRl-B_c6NuDD9zGjaYaWoH42atJETuLLk,27374 +cmake/data/share/cmake-3.31/Help/manual/cmake-variables.7.rst,sha256=dll4MqVwqbv3Y1LCfAM_33AfnSD2rzHqj-4VK_9pJ3c,31635 +cmake/data/share/cmake-3.31/Help/manual/cmake.1.rst,sha256=bf37vEwRBJ8DUqdLdikTAVzf5TyMU6MOoK9Gb-xQVSI,45092 +cmake/data/share/cmake-3.31/Help/manual/cpack-generators.7.rst,sha256=u_gydOi7n8VDBq0WPzAF2eG6v0mWEmYzvRm1BqPVgi8,500 +cmake/data/share/cmake-3.31/Help/manual/cpack.1.rst,sha256=tFhPHKxztNOvel58wMq0lvu4LC0IkF0cUbZV4CJY05s,4694 +cmake/data/share/cmake-3.31/Help/manual/ctest.1.rst,sha256=qsSIHzGB9DuevQpppi707MRvRk82bZG1eYvC54S6_EI,69272 +cmake/data/share/cmake-3.31/Help/manual/presets/example.json,sha256=sf2_QoajHdBWfeCjcvB-7SIQP9bGc8MkXNHnWz8p03I,2460 +cmake/data/share/cmake-3.31/Help/manual/presets/schema.json,sha256=IYUm2SAkQGYDbXNH4iwXz4wMVr_j3fb6_0rA4suv9bU,119558 +cmake/data/share/cmake-3.31/Help/module/AddFileDependencies.rst,sha256=n0HvEDYiF9yCX4-10nkc-fVMNZzSYaP-RxcKZLGdu7s,58 +cmake/data/share/cmake-3.31/Help/module/AndroidTestUtilities.rst,sha256=WawtVTEqde_5PVQ8fQOghbz0xQBUXYuEgtfimYPkTcg,59 +cmake/data/share/cmake-3.31/Help/module/BundleUtilities.rst,sha256=OQtzwkNhFc2y9ChHUoE51Df0L90y4oIgKGPUmEQdsbk,54 +cmake/data/share/cmake-3.31/Help/module/CMAKE_REQUIRED_DEFINITIONS.txt,sha256=xGR9M-iAl_BJI3trg2Ed036vOTnBfeWqfK4e6FNRbaw,237 +cmake/data/share/cmake-3.31/Help/module/CMAKE_REQUIRED_FLAGS.txt,sha256=jscWgCivdus9YNoAE8YljPe8C0OpyGGDZkJ2rCRHowk,405 +cmake/data/share/cmake-3.31/Help/module/CMAKE_REQUIRED_INCLUDES.txt,sha256=oVNVe65Bgj34IWFPQ2ygz2I0Mtyo17hPoQbuXh2J9CI,266 +cmake/data/share/cmake-3.31/Help/module/CMAKE_REQUIRED_LIBRARIES.txt,sha256=wOWGnLukvoq2R43HqLbX3UEKNaZ5aZb-GYQUmhUrhn0,277 +cmake/data/share/cmake-3.31/Help/module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt,sha256=Z-TO-guy-XXLV3n0_O3wtYnfl7J0iBh_mIe-Sl0E_p4,211 +cmake/data/share/cmake-3.31/Help/module/CMAKE_REQUIRED_LINK_OPTIONS.txt,sha256=2CitsZjwxIz0wIrhauzyoK7-Kei2TQDwfTsgAgJLJDI,197 +cmake/data/share/cmake-3.31/Help/module/CMAKE_REQUIRED_QUIET.txt,sha256=1oRVxNrb7p7NjEFJ9axp9BEgpj0ZrRthPEh7PXV-ffA,180 +cmake/data/share/cmake-3.31/Help/module/CMakeAddFortranSubdirectory.rst,sha256=z6EzqQ6ofmRdZ1FFZ_pbLRP3MjyDTmePv6xPwcnMJVs,66 +cmake/data/share/cmake-3.31/Help/module/CMakeBackwardCompatibilityCXX.rst,sha256=2KjnYiwHKtUVQyDcbX2eZRhQKrcIfoGdCZogzdevTxs,68 +cmake/data/share/cmake-3.31/Help/module/CMakeDependentOption.rst,sha256=uSpzWUhx1v3guffyTsVSigEQt75TzYOpdJDpAQVvg3Y,59 +cmake/data/share/cmake-3.31/Help/module/CMakeDetermineVSServicePack.rst,sha256=UWKvJ8Zhcn1Mps2kG9ugMJzHybRKvZ6zq00SiyWUc3E,66 +cmake/data/share/cmake-3.31/Help/module/CMakeExpandImportedTargets.rst,sha256=SP26wuOXHBDK4O9bmRidUQoOYCzvfJL0WKhOvxzW6-M,65 +cmake/data/share/cmake-3.31/Help/module/CMakeFindDependencyMacro.rst,sha256=erpZtWpO8VERZTFcTSqMbhslrXVb8-X_na9JGcQbwoU,63 +cmake/data/share/cmake-3.31/Help/module/CMakeFindFrameworks.rst,sha256=kES4FXq9b_9JHN5d11qP_DByR4OLOaHSd86TtjRKMHE,58 +cmake/data/share/cmake-3.31/Help/module/CMakeFindPackageMode.rst,sha256=2TGFIthXSlkV8h1yoyAhNfCGrLy_wEsFdQ9q0qKcjhc,59 +cmake/data/share/cmake-3.31/Help/module/CMakeForceCompiler.rst,sha256=pI1XOih2qqr1BU4mZa-GVnZLvYnirhjvDzolEzWFOTY,57 +cmake/data/share/cmake-3.31/Help/module/CMakeGraphVizOptions.rst,sha256=CVd7g4uWnd72T2weTREUvbtiJQ1lIbn99RESGHtR2_c,59 +cmake/data/share/cmake-3.31/Help/module/CMakePackageConfigHelpers.rst,sha256=GXYUn_MysmkjnW5Q1yto9bA7M4OKZyHmBI1YJAI03S0,64 +cmake/data/share/cmake-3.31/Help/module/CMakeParseArguments.rst,sha256=WBgGxJYCKVJ6sCN-MNDzdDPgy5JvwMBiupq2f-ej7pU,58 +cmake/data/share/cmake-3.31/Help/module/CMakePrintHelpers.rst,sha256=hyF77LtsVoQ9X0NSMoPO2s29FFk9ZWJrZka9zZ3CIfk,56 +cmake/data/share/cmake-3.31/Help/module/CMakePrintSystemInformation.rst,sha256=Wete3fq22IZO804jeDVAW_VVlwFGVB56XaG2PWtX3t4,66 +cmake/data/share/cmake-3.31/Help/module/CMakePushCheckState.rst,sha256=u9feDQkRnyTMlbnNxKMN5aGhtlu7OajKM8lRTfIJfUE,58 +cmake/data/share/cmake-3.31/Help/module/CMakeVerifyManifest.rst,sha256=Nz-nR3c6tJQjzRtxloqdyqfakEFOtf9MO8ZQUUTFQMw,58 +cmake/data/share/cmake-3.31/Help/module/CPack.rst,sha256=x2j0CMHX5lO37L0StjArqGX2b1qhthl51CcbX9wxBYQ,44 +cmake/data/share/cmake-3.31/Help/module/CPackArchive.rst,sha256=uSOlIOwE3get_iUcvkqOvHLOKQGh2nhVC9HqlhIIwcE,153 +cmake/data/share/cmake-3.31/Help/module/CPackBundle.rst,sha256=AQsSZyDhLttQc7dJY4Wulfm9owxIoeWvKLEpQOrKjFs,126 +cmake/data/share/cmake-3.31/Help/module/CPackComponent.rst,sha256=g2uNzsGBtza3WvywtDN28LCsiqfqQhj0qN_EO3Xl-vk,53 +cmake/data/share/cmake-3.31/Help/module/CPackCygwin.rst,sha256=bXNrdlfKjZMIemw7ZqnKeevZbU4ZADigjBDgFTX-B-o,126 +cmake/data/share/cmake-3.31/Help/module/CPackDMG.rst,sha256=0F76AmNKXOCmFjRKmZsV1-kuKCeyrnNyEOso4CuoWlg,126 +cmake/data/share/cmake-3.31/Help/module/CPackDeb.rst,sha256=Xc4a9Nkkt8QJqlQefXqNJuh-zxtk4N4kCbSZZeDm_UQ,114 +cmake/data/share/cmake-3.31/Help/module/CPackFreeBSD.rst,sha256=aWzn--3_ezhffkaJkaARnAdsE2-01TQWgsA0fcuvhfo,154 +cmake/data/share/cmake-3.31/Help/module/CPackIFW.rst,sha256=fCRtZ4EEHEDAOd9aNyYIzEs3eD2fiwGbR2XbuZxDifI,47 +cmake/data/share/cmake-3.31/Help/module/CPackIFWConfigureFile.rst,sha256=Fd7y8TJEGDb9W68kVYCSrJa6jlCC5QDXR8SR_QvBk7I,60 +cmake/data/share/cmake-3.31/Help/module/CPackNSIS.rst,sha256=Je-806d82swzsby4PBy-T9SmaGJqcHgAjVfWEhnYI1c,118 +cmake/data/share/cmake-3.31/Help/module/CPackNuGet.rst,sha256=7KDnRIzaHEk9SAFxyYcTcfqbnLzNQbe6fQZCpTtXMGM,146 +cmake/data/share/cmake-3.31/Help/module/CPackProductBuild.rst,sha256=wXdE0mlBiGAXVWQPV0zVHsohVKO8eYKoeivBU1A9DK8,173 +cmake/data/share/cmake-3.31/Help/module/CPackRPM.rst,sha256=w3iF0wl-RxWaIEzl6PQN1fr5JYR4EkF6aMRKGh_-ieo,114 +cmake/data/share/cmake-3.31/Help/module/CPackWIX.rst,sha256=FbQMSnNhuGjqRN9enOGHqHvChs1KAzVerBhWfqndEq8,114 +cmake/data/share/cmake-3.31/Help/module/CSharpUtilities.rst,sha256=0Ow2nX65OEzRVMZ4YQ9pm6X8DmtcSttbqYZS50P-tSE,54 +cmake/data/share/cmake-3.31/Help/module/CTest.rst,sha256=5Oi0v9ci_Uo15bEKsLg-cwA9DVZARLCnlxG1qrDzVec,44 +cmake/data/share/cmake-3.31/Help/module/CTestCoverageCollectGCOV.rst,sha256=a_vTZcMIfy57zUvFTuKvXiF63jzy5pYVCjYtgIE00J0,63 +cmake/data/share/cmake-3.31/Help/module/CTestScriptMode.rst,sha256=p8SOxCKMva8w4zqUoyKmBSG-OMMz2t4-IMrMsDFsnBE,54 +cmake/data/share/cmake-3.31/Help/module/CTestUseLaunchers.rst,sha256=oIIvTEOsSYsK3okLm3JduZP4PNocUB7OpRACstvp2o8,56 +cmake/data/share/cmake-3.31/Help/module/CheckCCompilerFlag.rst,sha256=WJc0NezpE2excRIXDNnS7B0jrX1GosB205QaYsmIfzc,57 +cmake/data/share/cmake-3.31/Help/module/CheckCSourceCompiles.rst,sha256=KaUAFIyGOLErli9WyHJO5zJMwvqzAgacKT61GqAP_0Q,59 +cmake/data/share/cmake-3.31/Help/module/CheckCSourceRuns.rst,sha256=rLE03N_R8hu4UNxa1yMAISC9IR2RkufMfbj1-ima13Q,55 +cmake/data/share/cmake-3.31/Help/module/CheckCXXCompilerFlag.rst,sha256=prttdsbCQLArDbrZHYPX848ZCdkU1jPpwie60rvWyAM,59 +cmake/data/share/cmake-3.31/Help/module/CheckCXXSourceCompiles.rst,sha256=qcUQGIu0OzTte3P9npHTtQCDbrUM1hAzMS2EbrVMfWg,61 +cmake/data/share/cmake-3.31/Help/module/CheckCXXSourceRuns.rst,sha256=heimGbrdw5ZE4b1mzr8BzymJRYzzH0xCfJa4-YeEYck,57 +cmake/data/share/cmake-3.31/Help/module/CheckCXXSymbolExists.rst,sha256=j-INyouSWEfja3bkRWNdS5FsWSaEYYT101ykInnmxjI,59 +cmake/data/share/cmake-3.31/Help/module/CheckCompilerFlag.rst,sha256=pTOaR5b532RimRFmGiYmNhusEmQ80PRD1djDh_XGvTE,56 +cmake/data/share/cmake-3.31/Help/module/CheckFortranCompilerFlag.rst,sha256=VxVvQ4VXfj6nRyHOYEFebm_H4bwBVuZmoNVttsSxbi4,63 +cmake/data/share/cmake-3.31/Help/module/CheckFortranFunctionExists.rst,sha256=Ml0x3qagjJjdAAtZrRBDxf6J6IWFbXSBTN6z3Hhun3s,65 +cmake/data/share/cmake-3.31/Help/module/CheckFortranSourceCompiles.rst,sha256=ZxBZDIJ8s1Yta5kDZXx7HrITKa8Lp0LgtXWg6fwa1Uo,65 +cmake/data/share/cmake-3.31/Help/module/CheckFortranSourceRuns.rst,sha256=y_wHPi3GVBVbb2IaYSTXRl07OCmuufJT-Lt0nJfq9FI,61 +cmake/data/share/cmake-3.31/Help/module/CheckFunctionExists.rst,sha256=_leTevdXf4eQwAS6uvfBaKbG2Wbh8oujOvymO0y_4eE,58 +cmake/data/share/cmake-3.31/Help/module/CheckIPOSupported.rst,sha256=csE8v_aiLj5vG9EpKVR44jlT60jbidGHINP_g5ClCGc,56 +cmake/data/share/cmake-3.31/Help/module/CheckIncludeFile.rst,sha256=xT7I7uweTGNUMAjwpri3lcZnCwSDlOvVTbJZx0nRHro,55 +cmake/data/share/cmake-3.31/Help/module/CheckIncludeFileCXX.rst,sha256=HTwCnDyfvBygoiXnNZRR62c32rLmDxSdbkv3o70836w,58 +cmake/data/share/cmake-3.31/Help/module/CheckIncludeFiles.rst,sha256=E3i29gHtWijXtiapTDQY1FOmLhvQrLvUMe7mKK2SmHc,56 +cmake/data/share/cmake-3.31/Help/module/CheckLanguage.rst,sha256=y3TKIOXv1UAQpFP9uu5nVdjkcLNy9JkZWhC7Lxlpdp4,52 +cmake/data/share/cmake-3.31/Help/module/CheckLibraryExists.rst,sha256=ZSlfbugrAYGVR2BmXIq5NhsLi48qMAf56dCtSzLZmao,57 +cmake/data/share/cmake-3.31/Help/module/CheckLinkerFlag.rst,sha256=pT77u6KpdocCMju3hUrRWSvHQ-Ds5i4u-EE8vhBxfGI,54 +cmake/data/share/cmake-3.31/Help/module/CheckOBJCCompilerFlag.rst,sha256=77P5HpdM5vXnKPaRkKQ8XTMqZuJM4MzsgVw6HBEA0A4,60 +cmake/data/share/cmake-3.31/Help/module/CheckOBJCSourceCompiles.rst,sha256=hb6E8HYtH6qCHK2L6ati3xPKOptUsYhSx6ZzKx4JZ18,62 +cmake/data/share/cmake-3.31/Help/module/CheckOBJCSourceRuns.rst,sha256=FlU7lfpNrcbWeXpr6qwvEo7Zo6HPCy5uA3Y7YT1w6Zo,58 +cmake/data/share/cmake-3.31/Help/module/CheckOBJCXXCompilerFlag.rst,sha256=gQ9NDPmCMmZ4vkRfHaBQA9ieYhyJg27QOtleUCxKs44,62 +cmake/data/share/cmake-3.31/Help/module/CheckOBJCXXSourceCompiles.rst,sha256=Q6CYNhbfSeuDQswX9eTT0Ieq4-eAfjNp3ymmemtn-Y4,64 +cmake/data/share/cmake-3.31/Help/module/CheckOBJCXXSourceRuns.rst,sha256=nIQUbYJOtXB_iCSOjcpaUVwpcI9KphNWjf5-I7f0mC8,60 +cmake/data/share/cmake-3.31/Help/module/CheckPIESupported.rst,sha256=URm2aMFvkdqm6ETJHTqtqAN3sJgDEJSJhKe0BJ34oIk,56 +cmake/data/share/cmake-3.31/Help/module/CheckPrototypeDefinition.rst,sha256=xS_ihOc-ARzZGxgWFD1ZYRB8eAuo1Lq-nf0FySelRlU,63 +cmake/data/share/cmake-3.31/Help/module/CheckSourceCompiles.rst,sha256=GdausGRbIg6LPHqzBrqt-g3AMvrY6CZby2V5A5ec8bs,58 +cmake/data/share/cmake-3.31/Help/module/CheckSourceRuns.rst,sha256=VAYb5VgVoDN6JPztQAPuFBVs6_5tcbOVm-geMYDfx-w,54 +cmake/data/share/cmake-3.31/Help/module/CheckStructHasMember.rst,sha256=1UVJIduq4rJL6WZC_Om8HS1TQDXGZuNdCsKky1-zxFs,59 +cmake/data/share/cmake-3.31/Help/module/CheckSymbolExists.rst,sha256=EGfNJGfK1rnofSjQDqxAEbwQ27R0RGqNzJWej3ecNcg,56 +cmake/data/share/cmake-3.31/Help/module/CheckTypeSize.rst,sha256=7lPRWrRy1cbqz2bUmhS8cDnoqHUyFyv9SZ3ewC9Lv5E,52 +cmake/data/share/cmake-3.31/Help/module/CheckVariableExists.rst,sha256=LlaPMO6AIprhzsjSkLRbvw8IIzz45cB3JVE4SLZHVZA,58 +cmake/data/share/cmake-3.31/Help/module/Dart.rst,sha256=7_FlCagYlGRKDVu8cZhr0Ly7AWdeOj9bmm8e-GVyywA,43 +cmake/data/share/cmake-3.31/Help/module/DeployQt4.rst,sha256=VfEleW4hc1yOeTeMzc5A49qW4VC-zS2YgQDM50fDq9o,48 +cmake/data/share/cmake-3.31/Help/module/Documentation.rst,sha256=87qYtlcQAqpGMgy5lFzg2iZfgpD-_-d5HBWiJYZNArc,52 +cmake/data/share/cmake-3.31/Help/module/ExternalData.rst,sha256=gjPHHC9NBkw_Z1mk2uqxGdE0qt-Gu47OvXctSFHs4LQ,51 +cmake/data/share/cmake-3.31/Help/module/ExternalProject.rst,sha256=TyJMyLXYSHwDMWjEQn5K78rAIqnYW-Es4dtBn3CYXLA,54 +cmake/data/share/cmake-3.31/Help/module/FeatureSummary.rst,sha256=sSeuG3-UrJ678OrdgGVhAzQ_odFLxU2GJHqQ1kUC0qc,53 +cmake/data/share/cmake-3.31/Help/module/FetchContent.rst,sha256=lbcL0rYVCYOc0NoZs5hWUB49l9rppWOHtkGtoZORUpM,51 +cmake/data/share/cmake-3.31/Help/module/FindALSA.rst,sha256=JgnhSa12DOAS48CWmDQHV3Oe-F-pyJkyiz8qE0ooEuU,47 +cmake/data/share/cmake-3.31/Help/module/FindASPELL.rst,sha256=z2DKmSbdFLUQKNBvDl6cjf5GoH9FTwmzEQV7GwEu5kY,49 +cmake/data/share/cmake-3.31/Help/module/FindAVIFile.rst,sha256=eLKFUsjNeKxpU6-_Gbq32mY2f-ZGqE9zcL7su8LMm94,50 +cmake/data/share/cmake-3.31/Help/module/FindArmadillo.rst,sha256=X3X3ZT5wKGXHBuPPWGTZow5kn-K-p2kYve7kqsbCC08,52 +cmake/data/share/cmake-3.31/Help/module/FindBISON.rst,sha256=cHBQsJ55JS25vafXr757_ORF0VSNlDWYifh09QMXy3U,48 +cmake/data/share/cmake-3.31/Help/module/FindBLAS.rst,sha256=yr3jdWfsMFR_bIxhCsQqvQrQm097c9X4dZQQy29ZPAs,47 +cmake/data/share/cmake-3.31/Help/module/FindBZip2.rst,sha256=ixPTvjh5oYBw5plrl-SweoPZ5Ra4n8oS_V0TrCVo4Pg,48 +cmake/data/share/cmake-3.31/Help/module/FindBacktrace.rst,sha256=WA95gsFoFTjeOjUHmBZ7x6kEDct_w-KK5JsCFpZxMsQ,52 +cmake/data/share/cmake-3.31/Help/module/FindBoost.rst,sha256=LQsv8vOwijphoCA0-xWzHc94ng0I9IG2JKxOzEIln6c,48 +cmake/data/share/cmake-3.31/Help/module/FindBullet.rst,sha256=Bp8chtrSSclYeizTBoB-oVmlrhJkQvS1GkN7Suf0syk,49 +cmake/data/share/cmake-3.31/Help/module/FindCABLE.rst,sha256=SGCy32y4DeK5rIsWZHuS-lpZXzsQ1Zv8jLdxA5UViJc,48 +cmake/data/share/cmake-3.31/Help/module/FindCUDA.rst,sha256=ZD6O7VHtH4PMSv8coEksc2xLwxbkB5SRLFlUqI26wzs,47 +cmake/data/share/cmake-3.31/Help/module/FindCUDAToolkit.rst,sha256=fs3bHdsRcMd9Uowjb5VWfn8b0Id2_2_H6s52F_s_mYg,54 +cmake/data/share/cmake-3.31/Help/module/FindCURL.rst,sha256=Yb7B0WDKsmsugHUsH0A6OA5ivZB46E7P8NJElt9Ooj4,47 +cmake/data/share/cmake-3.31/Help/module/FindCVS.rst,sha256=Ytqyvj-4mripw6RqCym1QccNnJLYrGi8JX6_mf1MNUs,46 +cmake/data/share/cmake-3.31/Help/module/FindCoin3D.rst,sha256=XkFq3QiJLxXqgNRPu9m-gEVM_jYdYepBw3AldaUltYw,49 +cmake/data/share/cmake-3.31/Help/module/FindCups.rst,sha256=9G3Eq2IQTAz3QTQnIQYUeYHQMvm6wEGOvWkMCKQIYY8,47 +cmake/data/share/cmake-3.31/Help/module/FindCurses.rst,sha256=cTHYacE9jI79jZfbmc_AwVdiG1RJ9NxaxxJhlnrj8X0,49 +cmake/data/share/cmake-3.31/Help/module/FindCxxTest.rst,sha256=vdumT5F4CM6sUSMvYdY4RNk5W26Z7oyimnFi3A5LxuQ,50 +cmake/data/share/cmake-3.31/Help/module/FindCygwin.rst,sha256=IVASqg9lWbLYLcfbQ9vDR93XneXbLU7pPhAaxjTqFV0,49 +cmake/data/share/cmake-3.31/Help/module/FindDCMTK.rst,sha256=gR_3nCrHnse_bQ2dgYqyzisWDpE2XOZMQptkcseJ8QY,48 +cmake/data/share/cmake-3.31/Help/module/FindDart.rst,sha256=PNCeWCoUFpsCG9yfgRbkrve3BDtWrqwIV_5KMRB1LCU,47 +cmake/data/share/cmake-3.31/Help/module/FindDevIL.rst,sha256=0bwOSsVsYPdePqDMfS7B17WK4dd4rI7X_uqkih0k8HI,48 +cmake/data/share/cmake-3.31/Help/module/FindDoxygen.rst,sha256=dth3LvgfyAAcisFOrph-MVphwRKcXRsV-ooPoYyt6go,50 +cmake/data/share/cmake-3.31/Help/module/FindEXPAT.rst,sha256=H49Sy31SPtxL8A23BWhMXdSI9LbIEnt34hEJKjGIk64,48 +cmake/data/share/cmake-3.31/Help/module/FindEnvModules.rst,sha256=bVcRidp13PuYLQW5QxnnQeg62p5E5wy24uQkqYfdxb0,53 +cmake/data/share/cmake-3.31/Help/module/FindFLEX.rst,sha256=dMtZXkLPbh1xMRfTJMhurno7b618HfZX_y34t23ytCg,47 +cmake/data/share/cmake-3.31/Help/module/FindFLTK.rst,sha256=nT6jMAhXpaeAEFbyZ1HsvxxfRYPspjf8ptk-qu8UZtI,47 +cmake/data/share/cmake-3.31/Help/module/FindFLTK2.rst,sha256=6nGrg8JU5qno94LlshRbh-ryOglwTPXvZR7vVJe2vwc,48 +cmake/data/share/cmake-3.31/Help/module/FindFontconfig.rst,sha256=MOPA-WsrjZ9ubkVoFITpoLwy4MTbYkAuIUG9-r-30Kw,53 +cmake/data/share/cmake-3.31/Help/module/FindFreetype.rst,sha256=NjOaRSjNWie3u490BV35nwTJKg-Lw5Ec-LgJ9oFEGKI,51 +cmake/data/share/cmake-3.31/Help/module/FindGCCXML.rst,sha256=9rbt9LWwnqgvnDb1-4F6tGPhv9ApSg-vxoQbg4bcWi0,49 +cmake/data/share/cmake-3.31/Help/module/FindGDAL.rst,sha256=owOwesgeA-rHU3rbZ7gPc_LbEjYcuMEduT65EiSC1FM,47 +cmake/data/share/cmake-3.31/Help/module/FindGIF.rst,sha256=iq8u4YxX4YH_mH8Kr30V688i6X2RRBQ7IslkuciskEI,46 +cmake/data/share/cmake-3.31/Help/module/FindGLEW.rst,sha256=dryU9f6eLlpbV14VUbpvFb_4-arUnXSF9Deg0MleXd4,47 +cmake/data/share/cmake-3.31/Help/module/FindGLUT.rst,sha256=vnapbbkZDTv33f-HZMpSFhRbFvwfr7osbTx_4DacVI4,47 +cmake/data/share/cmake-3.31/Help/module/FindGSL.rst,sha256=fkAc5miApl7B41eP0j980xPzvalLrqAFpQEQ3q4AV88,46 +cmake/data/share/cmake-3.31/Help/module/FindGTK.rst,sha256=WfJUgbTpbZKi4bT_teadH_D1VmFuy55Bzz116AOSNlY,46 +cmake/data/share/cmake-3.31/Help/module/FindGTK2.rst,sha256=qgqTlNKrAGEFYf09RmgLFo_oJ7-CFCpOWY9IvKWUKpc,47 +cmake/data/share/cmake-3.31/Help/module/FindGTest.rst,sha256=6IGcil_ICkLObSQ7bEf-5gf2jZOXyWi6diwXe-WDaN0,48 +cmake/data/share/cmake-3.31/Help/module/FindGettext.rst,sha256=ZyRRoqPwa6iPJCLJYD4hSb9luFyM4LU6eDsCSgbKqis,50 +cmake/data/share/cmake-3.31/Help/module/FindGit.rst,sha256=gq8PJmW5pvona3bq63yrrIUD7b3L0bj3efwXhpzWijQ,46 +cmake/data/share/cmake-3.31/Help/module/FindGnuTLS.rst,sha256=Uc5eIqDWJcBaTRDfNeJeC-Sjs3tTtw7ZKcIwq7tUx8g,49 +cmake/data/share/cmake-3.31/Help/module/FindGnuplot.rst,sha256=PoZ03bgjW-MpHXPuxEUsVHqLkpitrSfvqmgccK_x6cQ,50 +cmake/data/share/cmake-3.31/Help/module/FindHDF5.rst,sha256=YV0wwORprweQkwpLAUH9agH2lDBU6SMBcRD2tWQ4HLI,47 +cmake/data/share/cmake-3.31/Help/module/FindHSPELL.rst,sha256=gotAV7qPoQDTxFX13dvFKN97dqgnhIW1-Aqui3hYERQ,49 +cmake/data/share/cmake-3.31/Help/module/FindHTMLHelp.rst,sha256=tvkp_xI8lk1JlYupjwSGFrCQIn5I_x17MlavNxaEhOw,51 +cmake/data/share/cmake-3.31/Help/module/FindHg.rst,sha256=HFgJVyV913qLZitkMG6SwXjXcrfbAYirPLQxLH32gSs,45 +cmake/data/share/cmake-3.31/Help/module/FindICU.rst,sha256=TK3qBMGIOGhcZ2CHbCqIPqTRb3mjwPYACn-cu18GE1c,46 +cmake/data/share/cmake-3.31/Help/module/FindITK.rst,sha256=UhCtr-5QTN9oTu09Zue9N3KLTqQS8Ivwb_jf16x_l88,316 +cmake/data/share/cmake-3.31/Help/module/FindIce.rst,sha256=kkUAH70gCaEkxoUn1rVtBedqkWAGibb7HLzuTMrmBs8,46 +cmake/data/share/cmake-3.31/Help/module/FindIconv.rst,sha256=wdOP4ARSFeS2BV515j4HxdbrJtIut7AvU9h56CZMI7s,48 +cmake/data/share/cmake-3.31/Help/module/FindIcotool.rst,sha256=zA40tRmIqKPjG7awFuu_rEP13W3Sq3h7DY9HxS_oeW8,50 +cmake/data/share/cmake-3.31/Help/module/FindImageMagick.rst,sha256=kbGmms-cCYYzNGyFU2NYc29h8N25M6scOrhkAtOk4hw,54 +cmake/data/share/cmake-3.31/Help/module/FindIntl.rst,sha256=OyGP64o9FTTiw7iE7d7C6d97vECV3kvUmcizj0HlBYA,47 +cmake/data/share/cmake-3.31/Help/module/FindJNI.rst,sha256=FDvcQFGbEr1w0dWhVHp7Q1dESSo6uD8eo5LCaC_oV90,46 +cmake/data/share/cmake-3.31/Help/module/FindJPEG.rst,sha256=6JbWFW1SRcBqWWlsWgf1DMXelwXT_xcTOjl1sC8ctOY,47 +cmake/data/share/cmake-3.31/Help/module/FindJasper.rst,sha256=hwnXB15S5Jlcz05LKZ26r0zjCE1Gt5rJaRaicPkFKoU,49 +cmake/data/share/cmake-3.31/Help/module/FindJava.rst,sha256=_yTxJXaiORCjjLTY7jmDY3Q_0cFIC2ByQoTcG3RVmfM,47 +cmake/data/share/cmake-3.31/Help/module/FindKDE3.rst,sha256=TlVtDPw0mX7kft3w5i6zYbm94ZNkNFIlhGIQDmxsdL0,47 +cmake/data/share/cmake-3.31/Help/module/FindKDE4.rst,sha256=vtMIfhgUr17YJLHWIDvvINY-Ymqo4Qv7RISAHcdySdA,47 +cmake/data/share/cmake-3.31/Help/module/FindLAPACK.rst,sha256=Uc-x3TQh8TukLIQjteMXS6SLT9yNsTiVr5H2_uHdA8s,49 +cmake/data/share/cmake-3.31/Help/module/FindLATEX.rst,sha256=jksqlCUOG5R5wqrWe8mIE16E50L3HzrAccS4ZNAiPi4,48 +cmake/data/share/cmake-3.31/Help/module/FindLTTngUST.rst,sha256=i_9sNZtGQvjjfIi2KCFL0Y0-U-k4HGGwsA14lnW3j8A,51 +cmake/data/share/cmake-3.31/Help/module/FindLibArchive.rst,sha256=QCGIARaP4yR3_3aiprNnFySo8RH5GdECQ2HyhoYwaj0,53 +cmake/data/share/cmake-3.31/Help/module/FindLibLZMA.rst,sha256=RJEb4Bk2rcpRH7dVz0NIPHcVRlc1FY7eGHqqIzOMDDo,50 +cmake/data/share/cmake-3.31/Help/module/FindLibXml2.rst,sha256=41Hyjrvv-BjyeNrcntINQlp0FAZlw6uQh_iTynVlyxk,50 +cmake/data/share/cmake-3.31/Help/module/FindLibXslt.rst,sha256=3vw9mIJbIY9bLvlV7vQuAxo-j73DwKvbXo-M616YaGY,50 +cmake/data/share/cmake-3.31/Help/module/FindLibinput.rst,sha256=77wtje-34ENkW5AuZ4ZwC4yLMcUU7ikz9lxoVT577cI,51 +cmake/data/share/cmake-3.31/Help/module/FindLua.rst,sha256=5yh28OguJoFJARwX106qoSq5BqSbJCQGVHSDtrTKdXQ,46 +cmake/data/share/cmake-3.31/Help/module/FindLua50.rst,sha256=7dcG32OTiU8grwwfBwm_6AcC--nYVUiIFxoE-UY-GiU,48 +cmake/data/share/cmake-3.31/Help/module/FindLua51.rst,sha256=vMRrFUDbnUnECI8t1KmfhbXZsYNS_zbblM4JAJ-lWAE,48 +cmake/data/share/cmake-3.31/Help/module/FindMFC.rst,sha256=IBqxeu4p1lUzy6-Vx8ErF0juZrURRhpdSEvVt4hV7as,46 +cmake/data/share/cmake-3.31/Help/module/FindMPEG.rst,sha256=KYyTkPwmfC-V7l2AgsUaFfjbeeRSJjzmvt9c5CD5oRU,47 +cmake/data/share/cmake-3.31/Help/module/FindMPEG2.rst,sha256=0sAjWxsgZFK0ZSbF7QL5L67KbSoMK1kJ9rq3jpJ-OCA,48 +cmake/data/share/cmake-3.31/Help/module/FindMPI.rst,sha256=dLQIlkc2JSznS0XVokarJh_wIBxGe8a3abz2BlEKJ-Q,46 +cmake/data/share/cmake-3.31/Help/module/FindMatlab.rst,sha256=3rwjRkQ-n304WKVcHvMR90fGlQO9nXmwmEveAtEJaT8,49 +cmake/data/share/cmake-3.31/Help/module/FindMotif.rst,sha256=2ZYfL3Uo8ooWitsqGQYDxchpT2uAuP8yrjXQCQFf5Ko,48 +cmake/data/share/cmake-3.31/Help/module/FindMsys.rst,sha256=NuQtfQGfQySKoGybd86KO0lY_TrVqevHDboP5gjimH4,47 +cmake/data/share/cmake-3.31/Help/module/FindODBC.rst,sha256=Cp7AtnR_ChBiAVBH5j6G73W8r2ezGXvwSL03dU0shhQ,47 +cmake/data/share/cmake-3.31/Help/module/FindOpenACC.rst,sha256=tii6ttgYI46R6pJbavHYnCqKum5i9pCSuvhd72Hpb8U,50 +cmake/data/share/cmake-3.31/Help/module/FindOpenAL.rst,sha256=7ppO6fxg7KEWtmcwlhMi0FXW026l9kPt9Eru2dvWN6U,49 +cmake/data/share/cmake-3.31/Help/module/FindOpenCL.rst,sha256=2agoWwUFFrhx08Fu51zMN6eXLsOrqI52lb-466VbPyU,49 +cmake/data/share/cmake-3.31/Help/module/FindOpenGL.rst,sha256=yI45AXBnNhW40NdW3q4S8hGcTrt6hBWVoaMil5TpmbI,49 +cmake/data/share/cmake-3.31/Help/module/FindOpenMP.rst,sha256=GqGCMGRGb7Fq2dIFYS4Abc2L6flnZxo56IRqm_0A2O0,49 +cmake/data/share/cmake-3.31/Help/module/FindOpenSP.rst,sha256=FiUXheAr8MV_ZmdoGsbQiasVLC6ddluiV2ukd2dZ0NQ,49 +cmake/data/share/cmake-3.31/Help/module/FindOpenSSL.rst,sha256=0LhKIcz99QHveDvi1P6Wq5Onitwnywog4gM-T2eQz8E,50 +cmake/data/share/cmake-3.31/Help/module/FindOpenSceneGraph.rst,sha256=pvR24sQYbYZ3A4n8SraKe7tzFcI8oZsNHWXtP0Pj5FE,57 +cmake/data/share/cmake-3.31/Help/module/FindOpenThreads.rst,sha256=hPA_8X1suaP2oE29WmPqmLJsHvsHiI9UOR_YdWdDCFk,54 +cmake/data/share/cmake-3.31/Help/module/FindPHP4.rst,sha256=3grqvkjUBaCKTrACQUFP11U_faDW-CXnAVvrBbzHCEc,47 +cmake/data/share/cmake-3.31/Help/module/FindPNG.rst,sha256=XGBGh6EFfThKgVNMRegz1bEHWFlIjpg_tg1Qf9tBngQ,46 +cmake/data/share/cmake-3.31/Help/module/FindPackageHandleStandardArgs.rst,sha256=YUcjQj4o5ULXiVZ7BIJgLpMwC5qzopXtxenF9TbS9K0,68 +cmake/data/share/cmake-3.31/Help/module/FindPackageMessage.rst,sha256=na1JdBub_HiM6zuE7r2ozDndAFEkaHF5l5v-UFjheUY,57 +cmake/data/share/cmake-3.31/Help/module/FindPatch.rst,sha256=8Msy9ce9ppCylUPCg_ZjJx7KM_2zK9AeglPBvOeZ0zI,48 +cmake/data/share/cmake-3.31/Help/module/FindPerl.rst,sha256=jUtpWS3yXJFwHtKRo-YuzeH1_w319BidmpqtMyezDpU,47 +cmake/data/share/cmake-3.31/Help/module/FindPerlLibs.rst,sha256=F5w1gg0dc3ipulPgZ5bGb4l4dRbFCq3GCcTN6W7bvJo,51 +cmake/data/share/cmake-3.31/Help/module/FindPhysFS.rst,sha256=IfZvQwgsW2pefvFbhJSpEJ3QYJyc3G5m2Ulzi92M6lg,49 +cmake/data/share/cmake-3.31/Help/module/FindPike.rst,sha256=fKZcFCQg5or8wJih3AHiaj5e5Ne7srBOMaV7mv2VnhY,47 +cmake/data/share/cmake-3.31/Help/module/FindPkgConfig.rst,sha256=axYeJBiTQKW5SPTkGGB1bb6UdPuURQ3OSot_EOWTBxQ,52 +cmake/data/share/cmake-3.31/Help/module/FindPostgreSQL.rst,sha256=CEbAOxDOErCLLFH-ayOrD-kNKtS3-0bZqPBWqQbDCVc,53 +cmake/data/share/cmake-3.31/Help/module/FindProducer.rst,sha256=sroY-_Bs19neC2Pc6rZVbzeJ2sWjtYe9vM-IAqPpA7E,51 +cmake/data/share/cmake-3.31/Help/module/FindProtobuf.rst,sha256=AbWF8qGemQgdlb5yV5D2ufStz3tje11iZ1k3rlzL8Mw,51 +cmake/data/share/cmake-3.31/Help/module/FindPython.rst,sha256=2I7jGq9e3UfexGiaC320bfC8RzUxi8OGnmqOaKR1Lpk,49 +cmake/data/share/cmake-3.31/Help/module/FindPython2.rst,sha256=vWNq9MVofX9kAD0Vl1KuS8nnLTOiBoLPqTeWa0nlPJ8,50 +cmake/data/share/cmake-3.31/Help/module/FindPython3.rst,sha256=-qYP2BjizdjVUHvg73ukbZXEE2EyjclQ0Id97wQ026w,50 +cmake/data/share/cmake-3.31/Help/module/FindPythonInterp.rst,sha256=zaU26LLokxMjjVOy5KAlghIa8tQQc3VLEo76qE1CNOA,55 +cmake/data/share/cmake-3.31/Help/module/FindPythonLibs.rst,sha256=2PohN6_01AOiVNQ65ezYGolglgfwfd3Ey3-l48kmGKA,53 +cmake/data/share/cmake-3.31/Help/module/FindQt.rst,sha256=td_Lexy1HAA8peb1xuTGOrxH22VBgSDtN8BU_Eez0lk,45 +cmake/data/share/cmake-3.31/Help/module/FindQt3.rst,sha256=RRrDb0Vpcq4xQIRPlhkUAdRPV37BdjuuouMctOgKwls,46 +cmake/data/share/cmake-3.31/Help/module/FindQt4.rst,sha256=S3yrqshqcWqZ44edW8IvfKBiYNgxldx-Pc_v54CZKE8,46 +cmake/data/share/cmake-3.31/Help/module/FindQuickTime.rst,sha256=Lgyc6W9UJzP-5pztTpWJ894ruqBLFd48mvjvWtx7JEY,52 +cmake/data/share/cmake-3.31/Help/module/FindRTI.rst,sha256=7y0oRphRTb6KgUNnrJhUscK4bTUBhIMnV_I__mjCDjk,46 +cmake/data/share/cmake-3.31/Help/module/FindRuby.rst,sha256=xF3xsqeZM8V_mz3sWXVtkdq5Tt2Psx284r3EmvpOgF4,47 +cmake/data/share/cmake-3.31/Help/module/FindSDL.rst,sha256=QaispNuLHVD3fMjZQHg0XpkIxhALEhx4mjGVwi3xdDM,46 +cmake/data/share/cmake-3.31/Help/module/FindSDL_gfx.rst,sha256=DFUJh-xOO9AeMPFi0nVWaH-aHgBd6Bhmc-m_C8f1POw,50 +cmake/data/share/cmake-3.31/Help/module/FindSDL_image.rst,sha256=1D36nu-n9QyCbiQlJxA5eGgShSnWqGgx91itoPBqBLc,52 +cmake/data/share/cmake-3.31/Help/module/FindSDL_mixer.rst,sha256=jYPPNArGRhMi6of2ZeVDVFfnfdYxMELliHNc4rU3FUw,52 +cmake/data/share/cmake-3.31/Help/module/FindSDL_net.rst,sha256=ORbNRnsqyiEoNLudvu9M62oyaG-Fze7ZjN9P1Anfd7Y,50 +cmake/data/share/cmake-3.31/Help/module/FindSDL_sound.rst,sha256=vdvZ8gcaeKVwsFeryqz_u9UMdBmxiUj2FtNz8ayycQg,52 +cmake/data/share/cmake-3.31/Help/module/FindSDL_ttf.rst,sha256=gq8zahBf6EmT4DaaA71rNpS-sI21OMEhuYpU8ZfTIAM,50 +cmake/data/share/cmake-3.31/Help/module/FindSQLite3.rst,sha256=3x2s9mWdkEswSJn07AIiYwbpMO_hkVGMQ84cNVtq1Dw,50 +cmake/data/share/cmake-3.31/Help/module/FindSWIG.rst,sha256=NdlxLi6cbDvYZ93hcyg8s_LS1nWbLAXgbNEQbNxS02g,47 +cmake/data/share/cmake-3.31/Help/module/FindSelfPackers.rst,sha256=WwQEk6U2_rs9BUGymSxR3FPXNRkiJecPQtEl6ml6Mws,54 +cmake/data/share/cmake-3.31/Help/module/FindSquish.rst,sha256=igbMDpzliSzSObKrU0RsrrnXtvI0RLGq8SqaPtESEiE,49 +cmake/data/share/cmake-3.31/Help/module/FindSubversion.rst,sha256=3aNRk3Y9z2qtwo8urr1a5BbXJBCtWuOF1pX33RDUJSo,53 +cmake/data/share/cmake-3.31/Help/module/FindTCL.rst,sha256=Z9UKgmDvK_hH7tdItwqB0t8JTgUH2T6iRqr9K1snt00,46 +cmake/data/share/cmake-3.31/Help/module/FindTIFF.rst,sha256=52WmD2trVGTfI-KK1_SohaXW_RVA8ThRhU6zFIABEOs,47 +cmake/data/share/cmake-3.31/Help/module/FindTclStub.rst,sha256=eKI5YqGvk6-CbVV2-FTRbmR87qFSjgkJYfBBpvQaSDY,50 +cmake/data/share/cmake-3.31/Help/module/FindTclsh.rst,sha256=ju9FOUt3tC8505XRT3kzqWcMDmxc4lbwvlHg299xIHY,48 +cmake/data/share/cmake-3.31/Help/module/FindThreads.rst,sha256=ZP_zD_U2jvFlVQmLVJ2v_0YtlztGuzXVhmy6pI7BCXI,50 +cmake/data/share/cmake-3.31/Help/module/FindUnixCommands.rst,sha256=7Yhgwt2T9evdRu7SuLLbc9dWvmw00F6b2SYaEDo1pXw,55 +cmake/data/share/cmake-3.31/Help/module/FindVTK.rst,sha256=yMBxPrXQFQoxlrsMlH_Zme1dQ-yGt-s6C6b8RZ7BS2I,316 +cmake/data/share/cmake-3.31/Help/module/FindVulkan.rst,sha256=-JifxD112HkfDGXSlyBC1VXloLajYqrcyRgVDAqLsQQ,49 +cmake/data/share/cmake-3.31/Help/module/FindWget.rst,sha256=soe_Pmt9_Uc8k8neoetuzBycClqhKdtfMdJ_bpibryI,47 +cmake/data/share/cmake-3.31/Help/module/FindWish.rst,sha256=LKlauPm5oe0GiF8OuL1dyIYzk6GNMoM8KPctSgxA7Ak,47 +cmake/data/share/cmake-3.31/Help/module/FindX11.rst,sha256=xZLIdp7SgN17u5CByMzI_TNuEYSvs3cRYRHOy66nkSY,46 +cmake/data/share/cmake-3.31/Help/module/FindXCTest.rst,sha256=rB6FiSQZ3tA56G9_qr2Cjy3qK3aviM32IDu_7P7-WsM,49 +cmake/data/share/cmake-3.31/Help/module/FindXMLRPC.rst,sha256=ayruo-mtD6Wt1-77PZTqpy4rnv55VbAetZS-XL_CzHE,49 +cmake/data/share/cmake-3.31/Help/module/FindXalanC.rst,sha256=fhnSLyY9QbEQF1m3C9DFJnCCp0i6mzLPR--FNbNOG2o,49 +cmake/data/share/cmake-3.31/Help/module/FindXercesC.rst,sha256=1xIO12If14kMKyinyLbHG7WhUlOjqSqKROwUzmUQ50k,50 +cmake/data/share/cmake-3.31/Help/module/FindZLIB.rst,sha256=oCgh6M1kpNjvsTa17Al1VP8biUjE3JgF-sZxOPjSNhE,47 +cmake/data/share/cmake-3.31/Help/module/Findosg.rst,sha256=owllft6qFxmEZjya_nu7ZRPz3-gQwvbLk8KrGLm0NDY,46 +cmake/data/share/cmake-3.31/Help/module/FindosgAnimation.rst,sha256=cGDC4nxT3cSetymB6GWyFt03jZ8x-irRQXkQrtzvXkc,55 +cmake/data/share/cmake-3.31/Help/module/FindosgDB.rst,sha256=7_S1W8Bjk83nUok5e5DpGrN0Z53LWVQmRlPCfNznIlk,48 +cmake/data/share/cmake-3.31/Help/module/FindosgFX.rst,sha256=b8crYXb08MVQEt_rFYmi9CYEwr0mRtpRSTS1vFbXRn8,48 +cmake/data/share/cmake-3.31/Help/module/FindosgGA.rst,sha256=SYZ6Obm_bb7Kpnrded18W6sqQRv4ZNKV_-4i_0g0ilY,48 +cmake/data/share/cmake-3.31/Help/module/FindosgIntrospection.rst,sha256=e6fwXygagdrCY_hGVj0pEoJG3X1NRKxbYd9i2n6T2tI,59 +cmake/data/share/cmake-3.31/Help/module/FindosgManipulator.rst,sha256=onMlMc77gh2RhY42Gf0Sm66db-TrbtiyiiSeIUF6pt4,57 +cmake/data/share/cmake-3.31/Help/module/FindosgParticle.rst,sha256=dq-ZOty7DHl2e6P-mWBf3Kw8bvTLhQ0-F9Nc_XOfGhQ,54 +cmake/data/share/cmake-3.31/Help/module/FindosgPresentation.rst,sha256=Y4KKEKAi63KZW3n2879bLi8SEajiHtMj6lJM3d0dz84,58 +cmake/data/share/cmake-3.31/Help/module/FindosgProducer.rst,sha256=zNcmzNiyh52JuKLMXQpbs_u_QBsZGDK5ORoJ1-wKBdE,54 +cmake/data/share/cmake-3.31/Help/module/FindosgQt.rst,sha256=slAbcT4eI98WNoPNjvWm3FSic_bJe-CVlHbKDIqnKD0,48 +cmake/data/share/cmake-3.31/Help/module/FindosgShadow.rst,sha256=Njmgu6FoDQNpc1B-gmWTqCe-wnJ-hfWfX4dE9sfGzFU,52 +cmake/data/share/cmake-3.31/Help/module/FindosgSim.rst,sha256=6p1l913KHqo4G9ALwjivnQQDfVtNiNhDvPGMKrnFeTI,49 +cmake/data/share/cmake-3.31/Help/module/FindosgTerrain.rst,sha256=OsnVuaWhGqlsyeIB_rD-gcCw89rbaKHKuBn63VyNgdI,53 +cmake/data/share/cmake-3.31/Help/module/FindosgText.rst,sha256=NuNwYqufflOxcForqO0_Gg01uZUfGfGeABDwEo7W7Pg,50 +cmake/data/share/cmake-3.31/Help/module/FindosgUtil.rst,sha256=E4Vs3jJl7d2iiEqmC6ULr8hj6i5XJI3-MfNzDryUCr8,50 +cmake/data/share/cmake-3.31/Help/module/FindosgViewer.rst,sha256=hFLKBM05qoYKDjNx4q7sYV8dlBEGBmUJSu98Kw8r1Ms,52 +cmake/data/share/cmake-3.31/Help/module/FindosgVolume.rst,sha256=j77An3NxssN02weiINU4LcIglhb1o_5V4RSo90n1XFw,52 +cmake/data/share/cmake-3.31/Help/module/FindosgWidget.rst,sha256=POkwKxaDuQRpSqDFzqdd-AECn6DUF8tyn0Q37Ba8Mfk,52 +cmake/data/share/cmake-3.31/Help/module/Findosg_functions.rst,sha256=KLksNysXZ6RwxP-GjhPQ5mtegX2E37YTLrReyBXWV8Q,56 +cmake/data/share/cmake-3.31/Help/module/FindwxWidgets.rst,sha256=P95Vb7LSBqpsnKyWQ13bFXVS-hc_ZU3TvyC58mACi5I,52 +cmake/data/share/cmake-3.31/Help/module/FindwxWindows.rst,sha256=Q9RfF6LFQttMnA2Xvsqw7ckNak2rZ0RIDHzajWD1hEo,52 +cmake/data/share/cmake-3.31/Help/module/FortranCInterface.rst,sha256=-EWCE45KQTeLHwgTkR7wRliwtVNbuka-hfHrdKVTzfk,56 +cmake/data/share/cmake-3.31/Help/module/GNUInstallDirs.rst,sha256=K_c7gjhFDoZpIvQLqwkASyX5Nfc1NU1_cT3xvhwuEKA,53 +cmake/data/share/cmake-3.31/Help/module/GenerateExportHeader.rst,sha256=s0JxpSzptXkookXG5H-AfvRYt45-Nl8jXK7n7o7XqEw,59 +cmake/data/share/cmake-3.31/Help/module/GetPrerequisites.rst,sha256=D5CGGv20ygp4IiGuhVQuD-_V4M-Xu9hrjju8WCGjbVo,55 +cmake/data/share/cmake-3.31/Help/module/GoogleTest.rst,sha256=TJ5v-izanXwLu3UPXPKIq85G9XclXpZy67slGwvyL6k,49 +cmake/data/share/cmake-3.31/Help/module/InstallRequiredSystemLibraries.rst,sha256=8Iqsr_o6JbzRs59rmpaYLUHPcRyXz0xMp9MxIIJVndk,69 +cmake/data/share/cmake-3.31/Help/module/MacroAddFileDependencies.rst,sha256=y3b4w1mIEhDWRc1fNJxSZcFiNdHqb6snEIpbhjLvn4w,63 +cmake/data/share/cmake-3.31/Help/module/ProcessorCount.rst,sha256=TGbLE2dItJf8VZHkkNN5XGpjgIwBOwJKJ53wVkTAroY,53 +cmake/data/share/cmake-3.31/Help/module/SelectLibraryConfigurations.rst,sha256=7dCUqU7ks7EE6SQ_w7GFnViG-bdprf_VmeOmyLBi-Cw,66 +cmake/data/share/cmake-3.31/Help/module/SquishTestScript.rst,sha256=cUDzfFC3KkVgjYbz8yPBIcrttF5Dt-C7RE9RR75VCUE,55 +cmake/data/share/cmake-3.31/Help/module/TestBigEndian.rst,sha256=DIu9fAeowSlg2M_Lahrw9OgBDxdWiwenhVEHGPierEI,52 +cmake/data/share/cmake-3.31/Help/module/TestCXXAcceptsFlag.rst,sha256=d-kpoGfPmQpg_LiLl4z9AdkyrgIuznvRMZp_MqYb6sg,57 +cmake/data/share/cmake-3.31/Help/module/TestForANSIForScope.rst,sha256=ni1uOKd-Gg5BrAmj14uP2Auf3mx5bZhRKPvsjmOmjiA,58 +cmake/data/share/cmake-3.31/Help/module/TestForANSIStreamHeaders.rst,sha256=fvWuAOzYyKFNmfS6KsZF0Q-7Z5QkvAiBexG7jiFD-50,63 +cmake/data/share/cmake-3.31/Help/module/TestForSSTREAM.rst,sha256=DFe89b9x2ZQn9MfAodL19epKrrh45AxWZE2h5jEP8qQ,53 +cmake/data/share/cmake-3.31/Help/module/TestForSTDNamespace.rst,sha256=T-2ZUUV2QzNv6J4P2OL73PsklqBr1w3z3b5hypjDbb4,58 +cmake/data/share/cmake-3.31/Help/module/UseEcos.rst,sha256=fxIxTTEuZPdUsFKlYLYUDNzR036u8PzIKclawTsW9ps,46 +cmake/data/share/cmake-3.31/Help/module/UseJava.rst,sha256=aUNMfe1A3QTKJ_eRnaD-XVk5V4X6KWTCm_buH7Qiz6E,46 +cmake/data/share/cmake-3.31/Help/module/UseJavaClassFilelist.rst,sha256=vsiqoffKyDJ4Iu--PFFY7wt0iMB6hG9wyUIlj_vB284,214 +cmake/data/share/cmake-3.31/Help/module/UseJavaSymlinks.rst,sha256=SSQXqjEi4UddOoU_if9N737LUDzz97yzKsQjCEgJYWU,204 +cmake/data/share/cmake-3.31/Help/module/UsePkgConfig.rst,sha256=7Ix8AofwF6qn_Z3DFY-e9adQ-rdE6slPpHFg2xEQAwg,51 +cmake/data/share/cmake-3.31/Help/module/UseSWIG.rst,sha256=sZiX60sjBzgutE15IpYveiKLdLuTxKlT8tH-QqktClk,46 +cmake/data/share/cmake-3.31/Help/module/Use_wxWindows.rst,sha256=SYeUnurVPRQpAx9jWuqrcZ17CdJWQzu_F0qhDr4B5oI,52 +cmake/data/share/cmake-3.31/Help/module/UsewxWidgets.rst,sha256=FedCji7Mh97p_GxapbqHCULHuJpp1RXnXRyus1B5kis,51 +cmake/data/share/cmake-3.31/Help/module/WriteBasicConfigVersionFile.rst,sha256=x287fd8Yp6sOSi9jw1Z7LD__wFMC0CYX5Lh8j2JOzxo,66 +cmake/data/share/cmake-3.31/Help/module/WriteCompilerDetectionHeader.rst,sha256=ocxFMDffirbOR5aMfCCr03bTRgRcY8zzJQWQo-gORpQ,67 +cmake/data/share/cmake-3.31/Help/policy/CMP0000.rst,sha256=uy_FD2wnIjduGWbJ8F-vm54VwIJFsCNLIBTMzB9AD10,1429 +cmake/data/share/cmake-3.31/Help/policy/CMP0001.rst,sha256=atd7zRUAyxRgBQwWl7PW4Fqg1ug_ekz5PuovX0p_Jd8,762 +cmake/data/share/cmake-3.31/Help/policy/CMP0002.rst,sha256=WmcxAMDfvwA8m80QgvGuOpE0Qa8yK_YV7eUxasy3CIA,1067 +cmake/data/share/cmake-3.31/Help/policy/CMP0003.rst,sha256=2pXVNseuzB2I-yIfwifuqZdiQrpxFFuoucCQ1bkWKhE,3428 +cmake/data/share/cmake-3.31/Help/policy/CMP0004.rst,sha256=mivhILXEWOx_Ny-6UQ9CJvCwSplkXDeRuDaEpFDpdu0,815 +cmake/data/share/cmake-3.31/Help/policy/CMP0005.rst,sha256=ow2p2fVz_WBSZxJDojOs0Ap0vWCkOR6vkiwfr3HQ9E8,1151 +cmake/data/share/cmake-3.31/Help/policy/CMP0006.rst,sha256=2sWuiwZkiRUEnsxwINzcUOd7QfN_b0yIwYcC2Z_2Jlc,1061 +cmake/data/share/cmake-3.31/Help/policy/CMP0007.rst,sha256=SDZL6zXgdopb2VpbQxhM-efc7jTEIq5SXPxIASTn_Hw,598 +cmake/data/share/cmake-3.31/Help/policy/CMP0008.rst,sha256=kysC7iJleRICbKEdD8j4oHlT8VytoxNfZPSH0SqigJg,1458 +cmake/data/share/cmake-3.31/Help/policy/CMP0009.rst,sha256=_2ccx7RDhMZAnmI1X956omWAU4kVjZpdqinhJGxL1Rc,828 +cmake/data/share/cmake-3.31/Help/policy/CMP0010.rst,sha256=j6ssaJKFDWlteaV_QiWaio3io7F1QbWHt9rDeZOJomk,722 +cmake/data/share/cmake-3.31/Help/policy/CMP0011.rst,sha256=uQIgvtL6BLn7Zpts1W4MawJ0I1CcrRl3HnaqVIFounM,1173 +cmake/data/share/cmake-3.31/Help/policy/CMP0012.rst,sha256=ctwK0myGw0X_bvQnXLrmKDC69VjsMecn9KeVo4dJu60,1259 +cmake/data/share/cmake-3.31/Help/policy/CMP0013.rst,sha256=gUlHD6IiHd4ZitU9RTp3jpKm7RRBaenFiVDckDrlnYY,848 +cmake/data/share/cmake-3.31/Help/policy/CMP0014.rst,sha256=fpybP591yP9kiiXu4ZBPynem___sbA-dMZgFy1vhsms,653 +cmake/data/share/cmake-3.31/Help/policy/CMP0015.rst,sha256=910aHE1VivUu5bYrVA8pa4qURkDcFjbwwnGKJvBBm0U,824 +cmake/data/share/cmake-3.31/Help/policy/CMP0016.rst,sha256=8zcb2jjUdrDU8CdJbWnVO3h9MTy2f2FGL2eapwmNdmA,488 +cmake/data/share/cmake-3.31/Help/policy/CMP0017.rst,sha256=OCdn6mQvd0K5AcWvBLOOXTvl2XE7i-1w5iViZwLaiJY,926 +cmake/data/share/cmake-3.31/Help/policy/CMP0018.rst,sha256=buYu3k4kd0OBPR66Ftj1F4le4LSgXxFUu7W8fyOesjc,1536 +cmake/data/share/cmake-3.31/Help/policy/CMP0019.rst,sha256=eAnY8Fr88gcs5cCB5MGhNdpUnFAKUlWujolBAYEe8jk,825 +cmake/data/share/cmake-3.31/Help/policy/CMP0020.rst,sha256=XKhvpV2xYRNi47a_LKv9PRPTHM_5WphfN-eAKE_EStI,1230 +cmake/data/share/cmake-3.31/Help/policy/CMP0021.rst,sha256=lVOIJVuOKdBx6X_zbYb_fQClSya04UYDqwxMp08wq4w,787 +cmake/data/share/cmake-3.31/Help/policy/CMP0022.rst,sha256=9SAQBxyzU-VjnAkpRq51GQFN4_SXUS2Dr11QDd9OYjM,2049 +cmake/data/share/cmake-3.31/Help/policy/CMP0023.rst,sha256=o3tx2GZmi_Gvz3Vq1Cs149aoSRvtj2cBLvxNVKfj_JM,1432 +cmake/data/share/cmake-3.31/Help/policy/CMP0024.rst,sha256=mlD2D351WpOegHRE83w0gBAhmadWHEGKb0hA2e2zRBs,1016 +cmake/data/share/cmake-3.31/Help/policy/CMP0025.rst,sha256=1MFA70tN8CIeg7xLdJoLNLlpZIamk4iYfCEXdmsvI38,1238 +cmake/data/share/cmake-3.31/Help/policy/CMP0026.rst,sha256=qY4Vf7E2C5wtdjuhZ6COPva5dbbOS2vIpQ-0s3oH0Ro,1248 +cmake/data/share/cmake-3.31/Help/policy/CMP0027.rst,sha256=RkSGFrspre6fl_yoEzT8V5MoRM_uyYKjXMvlpncDZ_k,1204 +cmake/data/share/cmake-3.31/Help/policy/CMP0028.rst,sha256=RCwcFkQxW3m0dFYKCFop7uPUL8sPjaiNfFNgHQcbrHE,1203 +cmake/data/share/cmake-3.31/Help/policy/CMP0029.rst,sha256=5rofV9Nebe8fqLVhIZ75mbMoY6BfZP1yB4Z5_f6nD24,309 +cmake/data/share/cmake-3.31/Help/policy/CMP0030.rst,sha256=TBr3nt0g-JVtrUthX442zAu3g7aLGLfPFZybGMYA_MY,335 +cmake/data/share/cmake-3.31/Help/policy/CMP0031.rst,sha256=Z-2daLZ69YdUVWDxudbHvBqtud3zGXS8C8WNTyYbquI,474 +cmake/data/share/cmake-3.31/Help/policy/CMP0032.rst,sha256=w98wy1mFxUUD8hhyk2EUYiCN69FVv8p2y-V9AgLf58c,528 +cmake/data/share/cmake-3.31/Help/policy/CMP0033.rst,sha256=MCUhVRAQ4ySzJLa6ZanCjoOi6fwrOG8oYjALOUd5Zp8,580 +cmake/data/share/cmake-3.31/Help/policy/CMP0034.rst,sha256=FVeXAMoHB6pbJxjLJenigIM_H_llz_RroKSeWil1mOs,392 +cmake/data/share/cmake-3.31/Help/policy/CMP0035.rst,sha256=g9cwU3b92jO_bLiZ8flC67NPd3JODOiZfsnSaG4ty-Q,322 +cmake/data/share/cmake-3.31/Help/policy/CMP0036.rst,sha256=vePpaiL-froexVxZRPqphRwLKkKUe2X5jrgXi3VCKkg,437 +cmake/data/share/cmake-3.31/Help/policy/CMP0037.rst,sha256=oFNDS2biNb7a3c-jlprb4IxZOK2vXvZKRvdR1BOPA-k,1492 +cmake/data/share/cmake-3.31/Help/policy/CMP0038.rst,sha256=RGQvpzT9rLJt03nV9k6rLIprYre3RW44Ls_IacecWBE,595 +cmake/data/share/cmake-3.31/Help/policy/CMP0039.rst,sha256=ZVhTyWhZb4GkTe79Be-Sk4ia6-m1CtR38ttpuJfGW-w,632 +cmake/data/share/cmake-3.31/Help/policy/CMP0040.rst,sha256=1VUODLO6J7QrCcg9Aw-EhXAoKu9fATJ4324TeCsghZw,763 +cmake/data/share/cmake-3.31/Help/policy/CMP0041.rst,sha256=p2TdiyyKWNAbvd3P0cVjV0QjCN2e1bMKAXeLvs4wU4c,1059 +cmake/data/share/cmake-3.31/Help/policy/CMP0042.rst,sha256=_8Z03nj3cF5lrFp7D6b06vQtGYV14SjP0bg2mvYXkes,761 +cmake/data/share/cmake-3.31/Help/policy/CMP0043.rst,sha256=z4ww7639aZmtrOMi1TRo4bBHNwczy7r39_XdI5EkmiM,1768 +cmake/data/share/cmake-3.31/Help/policy/CMP0044.rst,sha256=jW0OTTGxnno53ZzMCNenPlxoJJIrcP0uiXyhcJlOtFQ,821 +cmake/data/share/cmake-3.31/Help/policy/CMP0045.rst,sha256=8PmT24aAt4qlDX6c2ikE9FsXYSk_ulSelMkpvvzR4s0,663 +cmake/data/share/cmake-3.31/Help/policy/CMP0046.rst,sha256=qzuzlBV5wg-In54aCgzAD7z4bF21LVxyN5-R9UqXsxk,573 +cmake/data/share/cmake-3.31/Help/policy/CMP0047.rst,sha256=7jfWCfvNUeK8U9Ag4Bn-hRq5urGWL7WFK-G9ehO9qwg,1235 +cmake/data/share/cmake-3.31/Help/policy/CMP0048.rst,sha256=KGJtAVA1HdydtjOw2_uuwgOl_NtuItoN84BPr161dvQ,1015 +cmake/data/share/cmake-3.31/Help/policy/CMP0049.rst,sha256=QDhYMPfq1N9F5x3PK4Wtjg5AgtYCskyAyudtjVNm458,683 +cmake/data/share/cmake-3.31/Help/policy/CMP0050.rst,sha256=aGcyZwsYf0_OIn4UejueXAc2iT4GPrGmOSemp5l9gxw,657 +cmake/data/share/cmake-3.31/Help/policy/CMP0051.rst,sha256=JCDyunS_LYFdZbV1G736C1LWLsIbteio0bPkDqrdx3E,1006 +cmake/data/share/cmake-3.31/Help/policy/CMP0052.rst,sha256=CUzAbpRyf6aU9uj_ouTarviEl-wE30ebNa3S48OkZdY,1037 +cmake/data/share/cmake-3.31/Help/policy/CMP0053.rst,sha256=JJC1ge9aVjK63CM9NjCDB3nyskB_3SV_aKsWazDYIQ4,2062 +cmake/data/share/cmake-3.31/Help/policy/CMP0054.rst,sha256=T-Zaaa_YVMNcer2ecz5AEWg5joc2CD061wNGY6l4sHg,1252 +cmake/data/share/cmake-3.31/Help/policy/CMP0055.rst,sha256=wTtdmBsPZLty5mTBdNKrLBgM4iSz6gEupxWD13j1fDc,644 +cmake/data/share/cmake-3.31/Help/policy/CMP0056.rst,sha256=axWYpl2hOTmmv7gP5MNhkFGgZGgAwpBcA-daulCRzog,1606 +cmake/data/share/cmake-3.31/Help/policy/CMP0057.rst,sha256=E4_u7pkGy0ZbhomIXcEMegwoS3NLP5DEyT4sHAb1B88,424 +cmake/data/share/cmake-3.31/Help/policy/CMP0058.rst,sha256=8bytAP36Nwo8KtADCHKChJav6Wjvl_z9IFo_JG2KN4I,4990 +cmake/data/share/cmake-3.31/Help/policy/CMP0059.rst,sha256=N-7icV9WCnFHv7msGREvcPMUAeqrvCNdkebTQOp0uRg,664 +cmake/data/share/cmake-3.31/Help/policy/CMP0060.rst,sha256=TfYTOTFtdZGxuBrni_w-vgMtU5zKhbhRBRfiyGAtkIA,3586 +cmake/data/share/cmake-3.31/Help/policy/CMP0061.rst,sha256=SKWzE9npnqeQWtFP53Y7YNm0vYonhiP4IphBq7oTMuk,1005 +cmake/data/share/cmake-3.31/Help/policy/CMP0062.rst,sha256=5G6_4qX2p3hfkKmmpwNP_sz6_I1FvG0SI-r9Y1AM7Fw,1162 +cmake/data/share/cmake-3.31/Help/policy/CMP0063.rst,sha256=DTADTsYIdc87RG9QO3RLeluoVEwFpuPkvL2RNcnjLAY,1261 +cmake/data/share/cmake-3.31/Help/policy/CMP0064.rst,sha256=xFfLPOZnHFFPVTQ68UAvdSA2BmH_-uRwnvS2yu4PaGs,536 +cmake/data/share/cmake-3.31/Help/policy/CMP0065.rst,sha256=cyDt5xm_T2ZfQULsUN_hs6lekZMvUPYxGvckNvaHBZg,1160 +cmake/data/share/cmake-3.31/Help/policy/CMP0066.rst,sha256=N1cvyTsDhL6960pJ_XT2DOw_Soq9RE9OMfOIuYS8hsQ,1290 +cmake/data/share/cmake-3.31/Help/policy/CMP0067.rst,sha256=fZmM0wfPOjI52dOBDKXEki3UAjed-FKC9DYKfmIwn6g,1536 +cmake/data/share/cmake-3.31/Help/policy/CMP0068.rst,sha256=GEIwPSNBLqMVMgOVQMMNB0zYqCTQROqpu8dxPhYJKMk,1395 +cmake/data/share/cmake-3.31/Help/policy/CMP0069.rst,sha256=zrycGZe83BBip0eu2doFtTxdQDWwWb_VMHy8rYxlXxE,2905 +cmake/data/share/cmake-3.31/Help/policy/CMP0070.rst,sha256=hCad1QMfllOOthXrVJBhah0XEk7M2NtCo3CsjsY9H8I,1045 +cmake/data/share/cmake-3.31/Help/policy/CMP0071.rst,sha256=7xuVnQW1aEh1x0jj5l3qzIJmDZI_m1_U3HDoUMLblcU,1465 +cmake/data/share/cmake-3.31/Help/policy/CMP0072.rst,sha256=gwZesGVEOI69uvyh_D51DgJjOgAKGK1JxTB96kHHazM,1099 +cmake/data/share/cmake-3.31/Help/policy/CMP0073.rst,sha256=GFx3_tbcoE9tPHVo_OEZwh9XnrZpPEH_tmVrtWEr6X0,1006 +cmake/data/share/cmake-3.31/Help/policy/CMP0074.rst,sha256=zNnNDdkXth6-v4tqaHA4wOAca3hvB9YzIocomBuyh_M,949 +cmake/data/share/cmake-3.31/Help/policy/CMP0075.rst,sha256=KyGmO5BfVDH5l_WbF-5AchlHILkvsr-LLGYfzObzd-4,969 +cmake/data/share/cmake-3.31/Help/policy/CMP0076.rst,sha256=DMsBADk1t13DPUJL0WzYYvoBueBEPhZsfs4CEMpJ2Pw,975 +cmake/data/share/cmake-3.31/Help/policy/CMP0077.rst,sha256=gmfxaAMJFwwCMZfUGDGSsR5560rXCkwR-rwG1PPKveA,2723 +cmake/data/share/cmake-3.31/Help/policy/CMP0078.rst,sha256=oZr7Bg8znC60HD-PCuAh5S5SFbhvAcBm-TOdcP6Q4Y8,798 +cmake/data/share/cmake-3.31/Help/policy/CMP0079.rst,sha256=Cfvqhr-F0ORJk8t_U2TpAOB-VPITLGki04stCmueAiE,2008 +cmake/data/share/cmake-3.31/Help/policy/CMP0080.rst,sha256=dXsb6zVNMJLZQ5xaB_ZQWYMzUzHAi-ld4A3k-z9nalE,977 +cmake/data/share/cmake-3.31/Help/policy/CMP0081.rst,sha256=krgn9DneWH-EvcoBLaVTwvyWJVqrw9XkCdlzyxaxQro,903 +cmake/data/share/cmake-3.31/Help/policy/CMP0082.rst,sha256=Pp7a10uJI6JOxwwccaSV6Iu-4QVh_MhWDwEblqjknwo,1120 +cmake/data/share/cmake-3.31/Help/policy/CMP0083.rst,sha256=ryGs3DJU-TpI3bg1C1KqYkrBZGd52bFAOpSL2ImqTak,2117 +cmake/data/share/cmake-3.31/Help/policy/CMP0084.rst,sha256=RwwwR5xZCWB4y4LeMido1eft_rzU05K3stZOL10ln6M,1075 +cmake/data/share/cmake-3.31/Help/policy/CMP0085.rst,sha256=92GbJrCPQ0mQ5cNeHRQM2fyOVFAMQm50EVj4i7RTx3Y,815 +cmake/data/share/cmake-3.31/Help/policy/CMP0086.rst,sha256=QgVNYhIdPwp_8vXQ3HCTj0pyNT1wPu3oUInuYzY5cL4,693 +cmake/data/share/cmake-3.31/Help/policy/CMP0087.rst,sha256=9GvsAOrSzEDUpYAoW5MkMV_LH5FiEPS4g4lp8uDGseA,1213 +cmake/data/share/cmake-3.31/Help/policy/CMP0088.rst,sha256=SHfBmb0hGV55_VGFVZoCcjMTsu7WT0aOPnKNLeXt_Uk,1179 +cmake/data/share/cmake-3.31/Help/policy/CMP0089.rst,sha256=Y7wfRxywXsmrkTeS_whv_Bb14-gKJ0auBfLmexsf7yQ,1332 +cmake/data/share/cmake-3.31/Help/policy/CMP0090.rst,sha256=ec934HvttknbJ03pnQSOk9CJO2zQgUR_Saq5HSGL9jk,1225 +cmake/data/share/cmake-3.31/Help/policy/CMP0091.rst,sha256=7DNuIhckshhKG7M9repYNqj8Z5BvIU1J3ZFne5JWF74,2357 +cmake/data/share/cmake-3.31/Help/policy/CMP0092.rst,sha256=P0phJammX3MfaTdi9Vt9-Q_GQaUmqrfxTAw9z50FzfA,1590 +cmake/data/share/cmake-3.31/Help/policy/CMP0093.rst,sha256=sofXleqMcSpf4A-58ivgLYxh8gwcCRo9CBW0zv8Yio8,986 +cmake/data/share/cmake-3.31/Help/policy/CMP0094.rst,sha256=OQ4hsMQGfKuIvlOVHMLQTIn38X-KIQNqDJdN6y_7u2A,801 +cmake/data/share/cmake-3.31/Help/policy/CMP0095.rst,sha256=JGG2Fe3yPuIpvucZrR4AlYoUy6jdtEAWzkL7BCiL110,1515 +cmake/data/share/cmake-3.31/Help/policy/CMP0096.rst,sha256=yMoM-j6S3mJKLh6WjPgJuKxoHEJlzpWUCLLxEYBUFh8,1091 +cmake/data/share/cmake-3.31/Help/policy/CMP0097.rst,sha256=Yc60VUSoXvkFSjWJRhucMiiyDiLqA6fcrwrQGx9wIK8,1428 +cmake/data/share/cmake-3.31/Help/policy/CMP0098.rst,sha256=nmQIlXIGzulLcCniF7ueDE3dsvbtYKJ9dTl19ilg_Lk,1308 +cmake/data/share/cmake-3.31/Help/policy/CMP0099.rst,sha256=MEzXfHYaFprgFOCZl0k_macKRInrH6Tuu3LONW0fC6o,1265 +cmake/data/share/cmake-3.31/Help/policy/CMP0100.rst,sha256=D6BgV8Kdp0AH4W4PN8hcaQvBMsuU1Ri94xZ4WS2dGMg,1459 +cmake/data/share/cmake-3.31/Help/policy/CMP0101.rst,sha256=levtuHS5xWaig4w_sFOGGVOisumO9XDSQmDbDVTMugI,1162 +cmake/data/share/cmake-3.31/Help/policy/CMP0102.rst,sha256=-QpaqRGotrM-58W3H_uvb5Z1RvYyxmo58hak1yJ41fc,1198 +cmake/data/share/cmake-3.31/Help/policy/CMP0103.rst,sha256=2qclwmPe9cizpdviW0J_aV9n0U4mlpXjw_5g70NivEw,776 +cmake/data/share/cmake-3.31/Help/policy/CMP0104.rst,sha256=oSv73L2L4mqs9yfHSPLsssv5O3_XR2CcE3RFbcC3VpM,1945 +cmake/data/share/cmake-3.31/Help/policy/CMP0105.rst,sha256=H9qZBvSRpISRO55ia_0p7VgyfIiAKGCXUPZw_MBdiVE,594 +cmake/data/share/cmake-3.31/Help/policy/CMP0106.rst,sha256=GM54TTGY1yGyRuemJlp5fmGW6NDYEOb7lvWT9uLjR2E,702 +cmake/data/share/cmake-3.31/Help/policy/CMP0107.rst,sha256=IzPqiSTHsy5pnN0mX7wG99K0U3CNKlvumeSIthUCe80,542 +cmake/data/share/cmake-3.31/Help/policy/CMP0108.rst,sha256=rgPB1AoFmjWlOyN6BvOUJ3lEwihGgb3R7FuwRK5qQx4,562 +cmake/data/share/cmake-3.31/Help/policy/CMP0109.rst,sha256=rpwCdHGmy3VkHIPUwXicd5pflUH8vSIhUBCdx-pJNAI,928 +cmake/data/share/cmake-3.31/Help/policy/CMP0110.rst,sha256=iEFnZmqFJR1rrJbZwS2BbTdJEqtZNGelvbjSB7Ccehg,1236 +cmake/data/share/cmake-3.31/Help/policy/CMP0111.rst,sha256=gYv5wn8_zdTNz0ZdIMP2K_6lQN-iOycN8dxY4HgevYw,1079 +cmake/data/share/cmake-3.31/Help/policy/CMP0112.rst,sha256=sMZEg23YsFdsrmajJoS7WnR8nn8FAjLHRGsJK56tgUY,1650 +cmake/data/share/cmake-3.31/Help/policy/CMP0113.rst,sha256=0chX0WUJY7fKDDeWwQt3Vd1JlxJ5LIcGmLhlegV6G9A,1765 +cmake/data/share/cmake-3.31/Help/policy/CMP0114.rst,sha256=m30jr_PsX6mS1cFkwCmb6_nknBu6aBPFVJla5IL9moU,4345 +cmake/data/share/cmake-3.31/Help/policy/CMP0115.rst,sha256=k0pzc1mE5ZVyDnjVKx_S1bqeXsqZQ4M_lrEcFvoU3J4,976 +cmake/data/share/cmake-3.31/Help/policy/CMP0116.rst,sha256=zj9zvNKs06lEJqzqRG9gRcCLL_-TGiO51sUkgwAap3g,2221 +cmake/data/share/cmake-3.31/Help/policy/CMP0117.rst,sha256=gnreyBF3YWGQUvbZWJ_tZizYKArPlh-klOcFYf7WNWA,1815 +cmake/data/share/cmake-3.31/Help/policy/CMP0118.rst,sha256=RiE05DSLEctd6SASo8BG3Ztm4stqzEdERkm_f59ksFM,1715 +cmake/data/share/cmake-3.31/Help/policy/CMP0119.rst,sha256=zyaWH3I2ptTAb7_HJ_X8mBnHyqlZFyHQh_SJRGpo3JA,1637 +cmake/data/share/cmake-3.31/Help/policy/CMP0120.rst,sha256=Oz7C-Wvhfk8jO0QIhXcVfTOepOnXGmIqX-bu1zZiKdo,2001 +cmake/data/share/cmake-3.31/Help/policy/CMP0121.rst,sha256=GQ34DBihjM8G-XP02loqkHD6WFEbrfXWXcTnn0IK88I,689 +cmake/data/share/cmake-3.31/Help/policy/CMP0122.rst,sha256=c06VvIXIsNs6NSgcZ5bMCSUA9ZExrzT-zXfEaMGTEU8,453 +cmake/data/share/cmake-3.31/Help/policy/CMP0123.rst,sha256=HDLV2I6YUnIvFUCi8lhg7_iZKeOdvGw3CxwLcIuKxnA,1474 +cmake/data/share/cmake-3.31/Help/policy/CMP0124.rst,sha256=Vj_vcMug-mvNFWmj1xkQvJFYfsHrD0OkEMWfbAyMXR4,1383 +cmake/data/share/cmake-3.31/Help/policy/CMP0125.rst,sha256=kAX2giu4f5z3BSrkX8rDAl_vqjYsftNhKXLvO2HpmC4,2059 +cmake/data/share/cmake-3.31/Help/policy/CMP0126.rst,sha256=wQ7FnKSTKEF87uaTY8a3mv7607MBu2QqE2WKYH0BgAs,1590 +cmake/data/share/cmake-3.31/Help/policy/CMP0127.rst,sha256=q9ExRyPhTN8aKZKxr-bcCMGn_9pdSnyzIqh1pV7W78M,986 +cmake/data/share/cmake-3.31/Help/policy/CMP0128.rst,sha256=bmtP8Uq9nhVADFSWTzIGaW8Dx1udWeIbZcs2rZ6D8Jk,2587 +cmake/data/share/cmake-3.31/Help/policy/CMP0129.rst,sha256=PNtsxx5Zdn_o6opgcia8L8lCbhQ9m_5333QcE05YY7A,1468 +cmake/data/share/cmake-3.31/Help/policy/CMP0130.rst,sha256=ofEQrUwLMYFoERH37TI_pYPvwbpPHtiRrYDN10iTQ-s,925 +cmake/data/share/cmake-3.31/Help/policy/CMP0131.rst,sha256=wuE6ZmcwYcBUwP77--f9xzLvcykQQl30QuIev9JfPd0,1205 +cmake/data/share/cmake-3.31/Help/policy/CMP0132.rst,sha256=aXtO5sQ1LNZK-Q1YmVzdyRDcNgLptxnjWAUyoFkCD3E,1137 +cmake/data/share/cmake-3.31/Help/policy/CMP0133.rst,sha256=cJjpfCjic2WISxgT6MyB7a6KPP715YFWaIHN7Qnr3_4,1355 +cmake/data/share/cmake-3.31/Help/policy/CMP0134.rst,sha256=xtSHkWmok2O62aggogCQ_QV73wOmWSYeWP5zldl5BSE,1217 +cmake/data/share/cmake-3.31/Help/policy/CMP0135.rst,sha256=57ocnBTsKZQJNx70zQ4hZ5NztAavvny6xfDNv3GRJgM,1385 +cmake/data/share/cmake-3.31/Help/policy/CMP0136.rst,sha256=E1U8hDpYR7TnHApub4FXStmmA8cHHmfgR7EhvzF6nzw,2281 +cmake/data/share/cmake-3.31/Help/policy/CMP0137.rst,sha256=SMh4Ac0Nj9L7s-NrStBxjHJ3enpYl3xhXxabhXUdl1o,1475 +cmake/data/share/cmake-3.31/Help/policy/CMP0138.rst,sha256=PHuDsYUN0cKjntK3yR4Wj7mVxqS6Y8tjs4MxcDS8Um4,1250 +cmake/data/share/cmake-3.31/Help/policy/CMP0139.rst,sha256=P8MJNWrVm6xFujJQLrIdOUC5cRCrX2gk4S3PVDh6378,425 +cmake/data/share/cmake-3.31/Help/policy/CMP0140.rst,sha256=G81WR4JzSwj4ZMMjAwnNNxmBluV1gc2RNWNP2Exnlq0,402 +cmake/data/share/cmake-3.31/Help/policy/CMP0141.rst,sha256=DLalr08dIsL54F4XBgLTzKkTbmxyaTtCu7aVKU_K1OQ,2508 +cmake/data/share/cmake-3.31/Help/policy/CMP0142.rst,sha256=aNqF_67MF7OU1HiWykDVE-xed6DU8lhtvhM9cSD0tYs,1030 +cmake/data/share/cmake-3.31/Help/policy/CMP0143.rst,sha256=g5S75J1NkGf4RRU2NiwrLMsL3otK3dPLgZBwFrDA9f0,962 +cmake/data/share/cmake-3.31/Help/policy/CMP0144.rst,sha256=VB1TRodA1Vppd9zXiRWYRN9_-lixPHpw9FkIutLRNOo,1015 +cmake/data/share/cmake-3.31/Help/policy/CMP0145.rst,sha256=h6lo4Dfraopl-fjTLJtFbZOANQNA3NOuW8Cuzoz7EsE,1227 +cmake/data/share/cmake-3.31/Help/policy/CMP0146.rst,sha256=kuCCOmr8-GeFo6sYfVk72XW9v7PN79Pnr8kznAHsaX8,996 +cmake/data/share/cmake-3.31/Help/policy/CMP0147.rst,sha256=KmxlqCtxEqpRWAXNS7KKASRwnuKxYMhNGOFys04xafc,839 +cmake/data/share/cmake-3.31/Help/policy/CMP0148.rst,sha256=pEUFN7uJTv9k7_AalwmTPIAsPLNWfPOBwv9Vv-EuvrQ,910 +cmake/data/share/cmake-3.31/Help/policy/CMP0149.rst,sha256=uMlSRe8eXvQ5DHJiD6bFW-SZJdLpu-zt5St0i7dlk54,2225 +cmake/data/share/cmake-3.31/Help/policy/CMP0150.rst,sha256=zQdsOuiQD8Hzfz3i8k3zOP5YVLrEHUtdnqSS1p2T-V0,1610 +cmake/data/share/cmake-3.31/Help/policy/CMP0151.rst,sha256=EqXJx-8L_CFl-JajvFsvY4yWsvgiE_leYPi_XB4f8JM,1028 +cmake/data/share/cmake-3.31/Help/policy/CMP0152.rst,sha256=9qzt44VBpmtZ6gvEpi4p4oFcFiU5geGcmiNWBwJuvKo,675 +cmake/data/share/cmake-3.31/Help/policy/CMP0153.rst,sha256=vttwcR_9IypJOSQcudfrONiH1NPVccIZHMHsXVDML2c,326 +cmake/data/share/cmake-3.31/Help/policy/CMP0154.rst,sha256=wG6QSZgoZno6vTUKmL0EhFaSacGb0r-RP8b4wJBIOuM,2484 +cmake/data/share/cmake-3.31/Help/policy/CMP0155.rst,sha256=7CMYrhnUID5HYx4ExxL8CVoS95RQcBPtbComVLiCZAc,1121 +cmake/data/share/cmake-3.31/Help/policy/CMP0156.rst,sha256=tUqhkb5_E7jgB1UtU7zv4yw3c6FNs_zQy9ZdKV_Uv0A,2448 +cmake/data/share/cmake-3.31/Help/policy/CMP0157.rst,sha256=lhD4tsEqtIPFxoRTqv9n5wstUu0ufHFEy5kTIgr9z1s,2117 +cmake/data/share/cmake-3.31/Help/policy/CMP0158.rst,sha256=KuedS78vewKkjNBv0I6zsFMp7y4jEU_HzqOhjvl6gHA,1200 +cmake/data/share/cmake-3.31/Help/policy/CMP0159.rst,sha256=UGm1U5DCXG92fSFF40T3H-mr_kw2-R8GnsxooLXQ1vg,915 +cmake/data/share/cmake-3.31/Help/policy/CMP0160.rst,sha256=U6Xba-oGmLjo-ipDjRiCflygNELdODyf0AtsGxv6glk,1217 +cmake/data/share/cmake-3.31/Help/policy/CMP0161.rst,sha256=N_DklHOY8bsHAKQ9UP_bIEX7YVHHEPxk0TO1sgqmOeI,1588 +cmake/data/share/cmake-3.31/Help/policy/CMP0162.rst,sha256=DmKEGJqb_k667UrEIem4rxDQdb_jIa7knCngmhPwcUc,2117 +cmake/data/share/cmake-3.31/Help/policy/CMP0163.rst,sha256=rfjBabSU1aLIC1GUM0SHDx4_Np_rE_Xw_lZ-VjLp7ec,1727 +cmake/data/share/cmake-3.31/Help/policy/CMP0164.rst,sha256=oTxHl4p2BpDNi_0X4NDKopgNRHOvdIGeTVC7U9ge8lg,1321 +cmake/data/share/cmake-3.31/Help/policy/CMP0165.rst,sha256=kgnDo6jdZ7v_Y7TjFmc_5MnKimpDCXkuH-gkD9lKLZM,1071 +cmake/data/share/cmake-3.31/Help/policy/CMP0166.rst,sha256=UZvq0B_lqQSSd8T6qHxBns5U83Yekfs1WlBwrjDrTyc,1938 +cmake/data/share/cmake-3.31/Help/policy/CMP0167.rst,sha256=Q_GiVALUxhDCT1QH8IkJlXT7xR6y2st5PdQvdDMJmx4,1079 +cmake/data/share/cmake-3.31/Help/policy/CMP0168.rst,sha256=4CzKIGvnTrgmzeBXjqD-GEJdXRIOGxTQur9_pZKPr98,3895 +cmake/data/share/cmake-3.31/Help/policy/CMP0169.rst,sha256=iW2fHs5vtQTMe_alLr0OScOsDC6w8a52btM39UEe3Rg,1934 +cmake/data/share/cmake-3.31/Help/policy/CMP0170.rst,sha256=3FdYwPZy0klG9tF0DLM1felZxQYkpjP7I-N3L-wbokk,1249 +cmake/data/share/cmake-3.31/Help/policy/CMP0171.rst,sha256=XhsYyuUM-0yjNvy-fO1D016f-_FgHdx85v1L5XOfot8,1090 +cmake/data/share/cmake-3.31/Help/policy/CMP0172.rst,sha256=4xqSu9HLqORZhzMV2jNfj_Mn1j-mwN2Vq1eLM8jKwIA,1726 +cmake/data/share/cmake-3.31/Help/policy/CMP0173.rst,sha256=0Czsu6FPLGwrIoH05eeP31FAHHQ2JN_hY1sh87wFgSw,761 +cmake/data/share/cmake-3.31/Help/policy/CMP0174.rst,sha256=f6PUVjT0I-0rRnK5tGfSH_3rc0pQXaOXRcYEc7Q76d8,1615 +cmake/data/share/cmake-3.31/Help/policy/CMP0175.rst,sha256=o2VimR0B9jDe9SlvZa6z8X9Yikx4wI4xigoeoIp_HXA,1889 +cmake/data/share/cmake-3.31/Help/policy/CMP0176.rst,sha256=UWM-1v7kpIDa4l0IgTuLpY_xKpVU0YznIs2mWcFhd2E,1075 +cmake/data/share/cmake-3.31/Help/policy/CMP0177.rst,sha256=U0529vu572cAcAsRDdGBVttUPuCZjqpnJ5IQ9VLCbNk,1850 +cmake/data/share/cmake-3.31/Help/policy/CMP0178.rst,sha256=I49uNS9wdLR7MJCu3o1wwWZIphjntmI59pSd5fNmhKA,1438 +cmake/data/share/cmake-3.31/Help/policy/CMP0179.rst,sha256=V0CN_9vKABgT5W6p_o68HogZLWd9hyZbcP0tmFpmvJw,1075 +cmake/data/share/cmake-3.31/Help/policy/CMP0180.rst,sha256=-sBudZ_j8s4NdV5vAskiLWuW20Y5M84pRXVJ6wfe_68,1726 +cmake/data/share/cmake-3.31/Help/policy/DEPRECATED.txt,sha256=1Yvlm_TiXpObvKjQn9T8Fczw5i8cEfQa4T9XlB6tSVM,156 +cmake/data/share/cmake-3.31/Help/policy/DISALLOWED_COMMAND.txt,sha256=fECVXdbJB2umYNB06oKdj_ao9Yg66IMoLh8RBW-IHgc,384 +cmake/data/share/cmake-3.31/Help/policy/STANDARD_ADVICE.txt,sha256=90MvLSaqcFxRG1jo8JzQcwBgiHOwc-PiY6pM62b8VbM,231 +cmake/data/share/cmake-3.31/Help/prop_cache/ADVANCED.rst,sha256=rIJI6yZ3FKG8VuIa7QFSGfZUbsZTL6aG_eQgBzgev8o,248 +cmake/data/share/cmake-3.31/Help/prop_cache/HELPSTRING.rst,sha256=jGJEDBj1eQIX5wxuBiGF_9s5k2NX0JAVV1PJEHSXIA4,149 +cmake/data/share/cmake-3.31/Help/prop_cache/MODIFIED.rst,sha256=JU8SWA9ATBGMGg0X-6EKUPK2qmq5ZvwXK_IooXiucNY,191 +cmake/data/share/cmake-3.31/Help/prop_cache/STRINGS.rst,sha256=7iX6SpdzMx7nzSR4l6nAXhxytQtIP1O4rEeD12VZQSw,347 +cmake/data/share/cmake-3.31/Help/prop_cache/TYPE.rst,sha256=dEizbNaCQ8w5p4UH0WoIMiAwS4P6thmGq1_iUEuUR2Y,696 +cmake/data/share/cmake-3.31/Help/prop_cache/VALUE.rst,sha256=r8KvJ13WwHng_UOLePH8O5IkvuRM1r2FCLygYM3wdmk,176 +cmake/data/share/cmake-3.31/Help/prop_dir/ADDITIONAL_CLEAN_FILES.rst,sha256=fgJcce6VjwvUeqlWEe622bXu8ug3XK-8o_Ptt9YAL0o,922 +cmake/data/share/cmake-3.31/Help/prop_dir/ADDITIONAL_MAKE_CLEAN_FILES.rst,sha256=9Dxtnq_7r-CRm8ABzsNBNJZ2DEaXC8LfVDzX8JY3zPw,501 +cmake/data/share/cmake-3.31/Help/prop_dir/BINARY_DIR.rst,sha256=D3GogxOY8LXoLsArzLLV2hJwjO91lCXXHJ_eEdLUk9c,175 +cmake/data/share/cmake-3.31/Help/prop_dir/BUILDSYSTEM_TARGETS.rst,sha256=VMX0VhnwZGznzRS-KDGBBwRyl8WNdGqK7j2GmsrxSHM,640 +cmake/data/share/cmake-3.31/Help/prop_dir/CACHE_VARIABLES.rst,sha256=EdBpOtGOm-ZDULurcmQDc1u4Y6Tfm4h_sUXzmzWhnf4,221 +cmake/data/share/cmake-3.31/Help/prop_dir/CLEAN_NO_CUSTOM.rst,sha256=TBPQTfVGsgCgEL3-jd92F1xT4ZdX6skvQqDusvITKEY,258 +cmake/data/share/cmake-3.31/Help/prop_dir/CMAKE_CONFIGURE_DEPENDS.rst,sha256=9p9wwQlQCKeqKtGkXRN7K1FssVjPxUdTClzyBDX0WTQ,378 +cmake/data/share/cmake-3.31/Help/prop_dir/COMPILE_DEFINITIONS.rst,sha256=NkOK4imOBU2tvMRXh9Uji6ToM0_sMyCyAGD_mXnRGJU,1403 +cmake/data/share/cmake-3.31/Help/prop_dir/COMPILE_DEFINITIONS_CONFIG.rst,sha256=HXHxpAH3N7qsbVxKnVvgCVYLPMSwLP0kuU4Wkt77UjM,774 +cmake/data/share/cmake-3.31/Help/prop_dir/COMPILE_OPTIONS.rst,sha256=NlHbLRYauJZca6aNT2--ntW7q9Sx2BTKBr-swNQkjn4,672 +cmake/data/share/cmake-3.31/Help/prop_dir/DEFINITIONS.rst,sha256=VpF-A0XGlnL_v-H94GYxVUxJeT-Oey8UN95mLINNG9g,419 +cmake/data/share/cmake-3.31/Help/prop_dir/EXCLUDE_FROM_ALL.rst,sha256=1ZcdUI0mKbjZtV8R4bKZuiwvFwxROAgHG7CoZr4wQQ8,1679 +cmake/data/share/cmake-3.31/Help/prop_dir/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst,sha256=Mo_o_Y9yeZdZ9fvLReyRk6ruxMCL9OjsTxU-g9oVcoM,932 +cmake/data/share/cmake-3.31/Help/prop_dir/IMPORTED_TARGETS.rst,sha256=bvi31e4qwcFfHtwg01Z18AWCvuH6225VVAREPJL0JWU,519 +cmake/data/share/cmake-3.31/Help/prop_dir/INCLUDE_DIRECTORIES.rst,sha256=7RbHsRSVsOLc6AiBwb-icoIw9dnvIBVfjVKwjJZ8Owk,1598 +cmake/data/share/cmake-3.31/Help/prop_dir/INCLUDE_REGULAR_EXPRESSION.rst,sha256=x81LCkulllzjUYNLmVTNUbH2QVnXczyoMvnZpoiGxAo,328 +cmake/data/share/cmake-3.31/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION.rst,sha256=B4sd2VTkZMuaVxkmGGGUJkvRWcPO461qLqLXaQFYb1k,182 +cmake/data/share/cmake-3.31/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst,sha256=H4iwzMK4NOuhT8kFWhlR2TZiXrZ0V8rYFHoGwgX6r9s,209 +cmake/data/share/cmake-3.31/Help/prop_dir/LABELS.rst,sha256=HYzCub7-IGM9FUl4wZt91h7fYsmQR9HOCcYB2pOPQX8,508 +cmake/data/share/cmake-3.31/Help/prop_dir/LINK_DIRECTORIES.rst,sha256=e_wTskkc5CrQPRXaiVoN7ztIN98jcLx16wSSAhnwFNQ,798 +cmake/data/share/cmake-3.31/Help/prop_dir/LINK_OPTIONS.rst,sha256=mRXKr3e0hQSMJ5U8Ff1dICwnENIC49Hxj66S8aciRnc,763 +cmake/data/share/cmake-3.31/Help/prop_dir/LISTFILE_STACK.rst,sha256=mfSaPLkxoVXqW5SmOwCtNOqJc7ntEePdyTvZmZLCSC4,367 +cmake/data/share/cmake-3.31/Help/prop_dir/MACROS.rst,sha256=0uymFjXN50-qcd-b5CBPQMxfY7-9_k1vCuTX0uj1Ffw,228 +cmake/data/share/cmake-3.31/Help/prop_dir/PARENT_DIRECTORY.rst,sha256=R8iJEzIbj7GrJA5mt_MXfi6dj1PZPy5F_RPgIxII_nA,272 +cmake/data/share/cmake-3.31/Help/prop_dir/RULE_LAUNCH_COMPILE.rst,sha256=0Q3OhLdM_vXiiYg77bsezSyXWjHLk5Lo_0wMvQdOQ4o,481 +cmake/data/share/cmake-3.31/Help/prop_dir/RULE_LAUNCH_CUSTOM.rst,sha256=3OqwCNNWY09aQraWUaRtvzSccujlKPrGdJZgTJyoQPg,184 +cmake/data/share/cmake-3.31/Help/prop_dir/RULE_LAUNCH_LINK.rst,sha256=RAtXyIZqtQLGuVSldv8jrbyKxMVaSIE-nqcGkKF_5s0,465 +cmake/data/share/cmake-3.31/Help/prop_dir/SOURCE_DIR.rst,sha256=svGzDXk6Xz0X-QJwYGP1swNVlGduoluHWlTKA2BbBUk,147 +cmake/data/share/cmake-3.31/Help/prop_dir/SUBDIRECTORIES.rst,sha256=ZOgG6kDwuK4MUEDVSRtdCaqtXTevMGTXxfjR7Om2MJY,656 +cmake/data/share/cmake-3.31/Help/prop_dir/SYSTEM.rst,sha256=8-OH4GKxexF17AHqnE4B-CnxL_Af0MLo-EXxh9Iy5QM,331 +cmake/data/share/cmake-3.31/Help/prop_dir/TESTS.rst,sha256=FRGbUPT3jmZb4enMW79CQg8TMrj48pqT_lob6ysWaBg,227 +cmake/data/share/cmake-3.31/Help/prop_dir/TEST_INCLUDE_FILE.rst,sha256=4Z7KwGRyTVxH3IAI7mn9CkbGq4dCmZboJ1zjd-Q3d-o,265 +cmake/data/share/cmake-3.31/Help/prop_dir/TEST_INCLUDE_FILES.rst,sha256=_pn1ormIBmHTtlPjU3ZhhCwT7O2ZKJnXUrqQsyte6sc,245 +cmake/data/share/cmake-3.31/Help/prop_dir/VARIABLES.rst,sha256=SuS6ViiBhLbKkP0theCYxV-Ah9one15CXfyzNvs9OWY,195 +cmake/data/share/cmake-3.31/Help/prop_dir/VS_GLOBAL_SECTION_POST_section.rst,sha256=ufi76U9KnSh2a9_P6aCD8ARCR_ojBeMb30rDmGtt30U,1317 +cmake/data/share/cmake-3.31/Help/prop_dir/VS_GLOBAL_SECTION_PRE_section.rst,sha256=-PPBZSqUvVvaWGCnfK6XocNeiuAk19F8UxExvIdMi5g,799 +cmake/data/share/cmake-3.31/Help/prop_dir/VS_STARTUP_PROJECT.rst,sha256=xbDlzWhCl24jfK2I45Y-ul2MaG7p5pJyhVpbDF8Ezxk,804 +cmake/data/share/cmake-3.31/Help/prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS.rst,sha256=v-rWe1AewmdiuDyxZxYGLfQ4ldQJ-i8niKEsAwbaYmU,1015 +cmake/data/share/cmake-3.31/Help/prop_gbl/AUTOGEN_SOURCE_GROUP.rst,sha256=4RJnCQgNyid-CGVidy6EEXfmTFkSn4VdqCgXHE6tDPI,750 +cmake/data/share/cmake-3.31/Help/prop_gbl/AUTOGEN_TARGETS_FOLDER.rst,sha256=dErIRZMiO3Y8N6hs_ysf8rIg8nCWNbKP8P9K-ja6tRA,423 +cmake/data/share/cmake-3.31/Help/prop_gbl/AUTOMOC_SOURCE_GROUP.rst,sha256=C0kMwC73KMngLeY68Iy1i_7A6OO-0G7VBNet7NT1uts,255 +cmake/data/share/cmake-3.31/Help/prop_gbl/AUTOMOC_TARGETS_FOLDER.rst,sha256=6EW7-ich4WxanUe1lGN3cvPwUONHPGFO2qThM95TrNU,500 +cmake/data/share/cmake-3.31/Help/prop_gbl/AUTORCC_SOURCE_GROUP.rst,sha256=Cy4saNBq5V-IGtDjc-LpPH-Ahw3ox06uCGfQtzDpjwU,255 +cmake/data/share/cmake-3.31/Help/prop_gbl/AUTOUIC_SOURCE_GROUP.rst,sha256=jbeFTY5CJqeD4lPTbA--q5FRrXtQTWpVl9w5QehQzvc,256 +cmake/data/share/cmake-3.31/Help/prop_gbl/CMAKE_CUDA_KNOWN_FEATURES.rst,sha256=GJ7AJ-OkY_g_2-pr3YIKpgFM8uq2F6G4-j5kc8F0SXM,1116 +cmake/data/share/cmake-3.31/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst,sha256=VRpNK3uwJRy4_008ivFqbqNJnAdB4vhSzl1qaUV4DQs,11579 +cmake/data/share/cmake-3.31/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst,sha256=B-b87EqjT7tr1tNdgNaKgx07dWitniucUKnam15_Xkg,1473 +cmake/data/share/cmake-3.31/Help/prop_gbl/CMAKE_HIP_KNOWN_FEATURES.rst,sha256=t5b41d1xVC_kWko0btPsMn5YNsZ9t2lUeIrToWarMI8,1071 +cmake/data/share/cmake-3.31/Help/prop_gbl/CMAKE_LANG_STD_FLAGS.txt,sha256=STaMWi0wvyb7BEe5Em_0OlyWrGowvFbUz6ROTwoXfWQ,338 +cmake/data/share/cmake-3.31/Help/prop_gbl/CMAKE_ROLE.rst,sha256=xDGcpyQMCnF0z5h3gU14XlxtSq0p32YUXSTMgYybCy4,383 +cmake/data/share/cmake-3.31/Help/prop_gbl/DEBUG_CONFIGURATIONS.rst,sha256=ip-yjS1CAlRR8Z4H6ecshrfAi1_ZWrZ8owyZ-fkTizI,534 +cmake/data/share/cmake-3.31/Help/prop_gbl/DISABLED_FEATURES.rst,sha256=V9wcwqOOVC0purQagEQEpLyv0T8_s_298OpcuvFoDv8,455 +cmake/data/share/cmake-3.31/Help/prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS.rst,sha256=00p3tCdX_2DfxRzbAWEbTzpTTaSmZP57qDxsEpNckb0,519 +cmake/data/share/cmake-3.31/Help/prop_gbl/ECLIPSE_EXTRA_NATURES.rst,sha256=dN3kiOqF8VPW-uvZ1aJgNfO2L2QsEJmxWQPIkrFw3FA,342 +cmake/data/share/cmake-3.31/Help/prop_gbl/ENABLED_FEATURES.rst,sha256=kpJdaEDcEAj5FqyU0r6pq_c9LtlHjuAzUnz4HxQyY7U,447 +cmake/data/share/cmake-3.31/Help/prop_gbl/ENABLED_LANGUAGES.rst,sha256=n77IxFYiBmvMgEjnTKho-qgjM6ZfqdXI96Q0tGDOFdQ,155 +cmake/data/share/cmake-3.31/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst,sha256=f9DwPXHhRNjW65JLUe7UeoDvrYJKgdZvk_iOqyNm1Gs,482 +cmake/data/share/cmake-3.31/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst,sha256=VMYePchGgYOjtp2kBjPODiXMZ53VbzxM2daMivcIki8,431 +cmake/data/share/cmake-3.31/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst,sha256=a_jQSwLiYzDtuBUIwW9I22dVL-ZpvRzoIDiFGI64yeQ,488 +cmake/data/share/cmake-3.31/Help/prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING.rst,sha256=yJWUkHX6GFyQfhKxrxMRRqn8jFHfYF-BhS-2LyDyR28,394 +cmake/data/share/cmake-3.31/Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst,sha256=Pa61Y3JxLUjcRmy-knFlsKMeXBYvdI_d6vTJVdixZSM,428 +cmake/data/share/cmake-3.31/Help/prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE.rst,sha256=N3DofFAuJRQCDd4EN5CyZPMTvWDR6vu5xMCJR5f_6Ak,297 +cmake/data/share/cmake-3.31/Help/prop_gbl/GLOBAL_DEPENDS_NO_CYCLES.rst,sha256=5wbhnCiPRfaRUSK1XEQc8Le8D1BdF2K_ykiXLQ1dR9Y,428 +cmake/data/share/cmake-3.31/Help/prop_gbl/INSTALL_PARALLEL.rst,sha256=zfYprDX9lzVFvc4OUM8px-m-NuUNm5YvZhIRFIEczEk,1202 +cmake/data/share/cmake-3.31/Help/prop_gbl/IN_TRY_COMPILE.rst,sha256=T9SENY1jImfzCI9KE00Ry9evduaVaex6aWyF3OvRg8k,192 +cmake/data/share/cmake-3.31/Help/prop_gbl/JOB_POOLS.rst,sha256=M3wRG1NE-2fOaqzxPuWpfZnpfhMX2_eub7W1A71qF_g,1146 +cmake/data/share/cmake-3.31/Help/prop_gbl/PACKAGES_FOUND.rst,sha256=WoR0OG-SEjnQSHueSZTonGJy0am1TCk-92DY7_GSULg,226 +cmake/data/share/cmake-3.31/Help/prop_gbl/PACKAGES_NOT_FOUND.rst,sha256=raWgxGJPuiKiclumpXVdNBFec_yvws61-TcozM52zQM,242 +cmake/data/share/cmake-3.31/Help/prop_gbl/PREDEFINED_TARGETS_FOLDER.rst,sha256=Q6opbYi9ZTbeCPjsuW-kObzx2n2gfWZDpE4gluHK6nY,362 +cmake/data/share/cmake-3.31/Help/prop_gbl/PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE.rst,sha256=4d5o76D4bHH2BgQSXe5gl2LV8-XHowVBKYFZsTzcBss,939 +cmake/data/share/cmake-3.31/Help/prop_gbl/REPORT_UNDEFINED_PROPERTIES.rst,sha256=tIuIlOuphyQHOwB-l7wkdUklRnlgvyK6KwluoLsXaEo,295 +cmake/data/share/cmake-3.31/Help/prop_gbl/RULE_LAUNCH_COMPILE.rst,sha256=HczMYEWMimrl4N7vaBAQpKeiFHyJyfo8G5vRSD6xdkk,693 +cmake/data/share/cmake-3.31/Help/prop_gbl/RULE_LAUNCH_CUSTOM.rst,sha256=85_PEOwm05W98RgivrbfwTPUM4Pbw8MXrI1B4kviNWM,428 +cmake/data/share/cmake-3.31/Help/prop_gbl/RULE_LAUNCH_LINK.rst,sha256=cb5aA_Sa1Kuv7Fm5SpS9KNB7KidkE5NSeplJl7Tk_xU,688 +cmake/data/share/cmake-3.31/Help/prop_gbl/RULE_MESSAGES.rst,sha256=YU1gXS5MgGJfqFn2LGsMrXlqE8HsLED96slZHmPypYk,605 +cmake/data/share/cmake-3.31/Help/prop_gbl/TARGET_ARCHIVES_MAY_BE_SHARED_LIBS.rst,sha256=jFT5rGvV40FWrWDGzCA4muGGxpEdkwGSkTheTkPiyhU,225 +cmake/data/share/cmake-3.31/Help/prop_gbl/TARGET_MESSAGES.rst,sha256=jW5DdqfHvL3PaGVnN0CwwGyVc1Qt1G57PGORRGcGT74,768 +cmake/data/share/cmake-3.31/Help/prop_gbl/TARGET_SUPPORTS_SHARED_LIBS.rst,sha256=K2orS9fXXy2OjYgKfSShpE0s2Ye42fzsihM-MuZMPfs,337 +cmake/data/share/cmake-3.31/Help/prop_gbl/USE_FOLDERS.rst,sha256=_NdolKd1Pxhz_VSsW6Zlz7gzEYwM8g0D-iqZ3LbD5nU,688 +cmake/data/share/cmake-3.31/Help/prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME.rst,sha256=6nWwoXyDSEd9W786drzH9UFYIvkyOvjKWFjid8Gy5J0,982 +cmake/data/share/cmake-3.31/Help/prop_inst/CPACK_DESKTOP_SHORTCUTS.rst,sha256=flrmp9949EurabPZdsfzzlz6kiSiEAMyXZ3nf2qhTt0,243 +cmake/data/share/cmake-3.31/Help/prop_inst/CPACK_NEVER_OVERWRITE.rst,sha256=oTUfx7sasjV55IXdQ_o1HM1JXow8xpU-PNkI2j7TuyE,218 +cmake/data/share/cmake-3.31/Help/prop_inst/CPACK_PERMANENT.rst,sha256=QfTNDN5aqrEdgIWZW7MM_LnbnwTSoB1NPqmTwdYbgQM,191 +cmake/data/share/cmake-3.31/Help/prop_inst/CPACK_STARTUP_SHORTCUTS.rst,sha256=DIE4Bh7opfCWiWGfgln3K0FWWITYriBEmGqaKqsMFro,250 +cmake/data/share/cmake-3.31/Help/prop_inst/CPACK_START_MENU_SHORTCUTS.rst,sha256=TVY6DTWKgOBvIc4zrXiRuW4cj5EkgGULeRPh1tBtXsM,254 +cmake/data/share/cmake-3.31/Help/prop_inst/CPACK_WIX_ACL.rst,sha256=SVM53Vj1w7k_LcyWRwt7QaL0CrIxEy-nl5kjSWljyW8,635 +cmake/data/share/cmake-3.31/Help/prop_sf/ABSTRACT.rst,sha256=YK_UD3asivOLq8lkEgjnLE9O23oSatNDTnhZm79n4k8,309 +cmake/data/share/cmake-3.31/Help/prop_sf/AUTORCC_OPTIONS.rst,sha256=sxiFQVxO0CpTlw-22fIzXXs6JJlxjwdl6rbcGXDl37I,611 +cmake/data/share/cmake-3.31/Help/prop_sf/AUTOUIC_OPTIONS.rst,sha256=jPDhdqmVCiPFuLsvHXze7KYdEX7J6g_HTEGwaDxEB_Y,603 +cmake/data/share/cmake-3.31/Help/prop_sf/COMPILE_DEFINITIONS.rst,sha256=aGF2ouM7QLFSWq3hawCeRD3HFzReWOoXSP3lnK-zF04,1404 +cmake/data/share/cmake-3.31/Help/prop_sf/COMPILE_DEFINITIONS_CONFIG.rst,sha256=y49kjHIWzlol7jwrOMiFn3Wfi1Q0O1rbngbzGlKH-Mc,399 +cmake/data/share/cmake-3.31/Help/prop_sf/COMPILE_FLAGS.rst,sha256=F3XTa4w8bK5hhCixlYAC6l89rZeLZwiiJ231NWZOVkg,826 +cmake/data/share/cmake-3.31/Help/prop_sf/COMPILE_OPTIONS.rst,sha256=MSzXDptSa-9CI1y1hprCiYRGRnpwa24lROoiBNShia8,1217 +cmake/data/share/cmake-3.31/Help/prop_sf/CXX_SCAN_FOR_MODULES.rst,sha256=f7k3XvXBe-dE8O29Lt8vb3Y1nz-_VVHWcrnPZ8mBZtY,799 +cmake/data/share/cmake-3.31/Help/prop_sf/EXTERNAL_OBJECT.rst,sha256=Hdker0BrFnHHTmk8No5rxFypPMfJY_y65GDi7-kQkf4,237 +cmake/data/share/cmake-3.31/Help/prop_sf/Fortran_FORMAT.rst,sha256=pSVfw-_xX4gHcJlBnPe3Xy6Iph9ZR3V8_phPCYWTvGc,510 +cmake/data/share/cmake-3.31/Help/prop_sf/Fortran_PREPROCESS.rst,sha256=bStEulaKNju_85JIOS8AQSPeEhGy-QIDldfsTUjVhr4,756 +cmake/data/share/cmake-3.31/Help/prop_sf/GENERATED.rst,sha256=rUfnL3GATeBB_b6RgO8dNW3Jg3uDD1xvMvUmGKQLtP8,2263 +cmake/data/share/cmake-3.31/Help/prop_sf/HEADER_FILE_ONLY.rst,sha256=-RxEUwNZfcEKIod5gM1U5azJ56DbofSRV_IX1xKcI8I,1200 +cmake/data/share/cmake-3.31/Help/prop_sf/INCLUDE_DIRECTORIES.rst,sha256=jRLu5jynX5EGnby7CFGnyp8QU5-ttpqa8i01nJvdlWI,852 +cmake/data/share/cmake-3.31/Help/prop_sf/KEEP_EXTENSION.rst,sha256=3J8uxV6GqUKRRSAFjyLlJPB3cSJPmfD7SOvJANrDmF8,351 +cmake/data/share/cmake-3.31/Help/prop_sf/LABELS.rst,sha256=1FOTP7Bluy27TCzGpIpYVkXAUpYrWBsVlXx7MMWfB_c,235 +cmake/data/share/cmake-3.31/Help/prop_sf/LANGUAGE.rst,sha256=K_lYZ0eLZcHUFeLt4uhGWQJkZikH8STHsGuvZHUfRD0,731 +cmake/data/share/cmake-3.31/Help/prop_sf/LOCATION.rst,sha256=cuAdqmcZhEuKXiJHBS7cZ8eM0Jb3B5yQYjHWYjp6VHE,138 +cmake/data/share/cmake-3.31/Help/prop_sf/MACOSX_PACKAGE_LOCATION.rst,sha256=3CFPy4qcsmylYNkHDNhDsaIok1yTw9hy3HFlFxrfRZM,1697 +cmake/data/share/cmake-3.31/Help/prop_sf/OBJECT_DEPENDS.rst,sha256=HvABd6Niz3wFDBTKdkjh6akyzEncaINkstVrFeUC0TE,1106 +cmake/data/share/cmake-3.31/Help/prop_sf/OBJECT_OUTPUTS.rst,sha256=sKzqKg0yGTw2Gl1bUbi5Pgg6DoYz0SgWByYW9w1MP1I,454 +cmake/data/share/cmake-3.31/Help/prop_sf/SKIP_AUTOGEN.rst,sha256=BQES-E5FBO56W6OwmlTqAN5BBc6EXDVVHr-M_AMnp-Y,397 +cmake/data/share/cmake-3.31/Help/prop_sf/SKIP_AUTOMOC.rst,sha256=uTjh6KOKHrPTU_g4GuKnu25BOy48zzkCvJM8qv4huxk,301 +cmake/data/share/cmake-3.31/Help/prop_sf/SKIP_AUTORCC.rst,sha256=LYOHLphYW2Ff3FwlDGS3WzhdmzhR7tGBf48cbGUnz4w,303 +cmake/data/share/cmake-3.31/Help/prop_sf/SKIP_AUTOUIC.rst,sha256=-Xqj5EqTFaS-HP1_UIcWe5g_BQewWwI7hrSM0gGwvoY,498 +cmake/data/share/cmake-3.31/Help/prop_sf/SKIP_LINTING.rst,sha256=VMchhwPTVBX-tFCbzs-5NxslFxVAceaFcE_7wPPpKCo,1753 +cmake/data/share/cmake-3.31/Help/prop_sf/SKIP_PRECOMPILE_HEADERS.rst,sha256=M96T6ynkL36aclTfoKmV3fF4m32kYTlSUpPBukVkCME,552 +cmake/data/share/cmake-3.31/Help/prop_sf/SKIP_UNITY_BUILD_INCLUSION.rst,sha256=XYadKZI_k2AmYWtR1Lo97cZHQ22O-WmKvnJUnUB3Wv4,700 +cmake/data/share/cmake-3.31/Help/prop_sf/SYMBOLIC.rst,sha256=3DVmQ5k14dP6MZZJ6hXXH-BUdr-AeXhAHm1AbgNgpGw,238 +cmake/data/share/cmake-3.31/Help/prop_sf/Swift_DEPENDENCIES_FILE.rst,sha256=N1nlHmwQwXc1sO9RMtdHrFySJBZKl_X5E7Sdxq6Dd1Q,228 +cmake/data/share/cmake-3.31/Help/prop_sf/Swift_DIAGNOSTICS_FILE.rst,sha256=A0syccVztDgjNhE1ZD4nSnSqjbU6dDwOOIMfhPtzJ4E,138 +cmake/data/share/cmake-3.31/Help/prop_sf/UNITY_GROUP.rst,sha256=AI_9SfyI_ro8V8r6Lk9nnR3v_nRVTjr6mTKxTMiR3hY,173 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_COPY_TO_OUT_DIR.rst,sha256=QlPk4YflmHqwZDFBTWoqnqCDmJNuTUVj-HMQn_DULfI,217 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_CSHARP_tagname.rst,sha256=jinpNe0YPXbRH0k5AF5VCvQeah45Laf-6qA_AiQB80w,650 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_DEPLOYMENT_CONTENT.rst,sha256=MpMj54HwcHdp6wrq1-y-wwo_bvgQQxD_usYoQ_A5LBw,577 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst,sha256=nGRsFRPZka7lQltOxYWuYa7utOt-XrmPazcsO42cuFA,426 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_INCLUDE_IN_VSIX.rst,sha256=TpXunHdt60MN4_ZmF92jUTlErXOFNzMmaJvqJs4mSw8,252 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_RESOURCE_GENERATOR.rst,sha256=zQBWE1mbvQk2jPymGDs-2bWCiGuePv9LonJg7DmLyeI,251 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SETTINGS.rst,sha256=Z2p9sdUuQ9eL1uO3b5XZWlu1mhQf8AIPMhO9SM0OJ-U,636 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS.rst,sha256=yr878ZWa75qn7rSoxN_h9TJuFU68JTig9Oz2GR5ia28,304 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_ENABLE_DEBUG.rst,sha256=TYYa9L7yz433w5yvav0RbeixDuA-MP2-cp-HG2jzLq4,290 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_ENTRYPOINT.rst,sha256=U9rDkDJf3GAsOQNMoW8Hk7579oaVov4yrmtTTDFmjrE,147 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_FLAGS.rst,sha256=SG-hMk2fGuD9ea-P_BM42RGDF3cUGamvgttFyiHP69A,126 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_MODEL.rst,sha256=Lyu7d2HjN3KBaNJw_0FOeLclLWDNuZDKrzP9hvD9lJI,172 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_OBJECT_FILE_NAME.rst,sha256=73n51SQSnGeTwmTcMue9KyUr4DljGvIPBcyb9OWDRRA,240 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_OUTPUT_HEADER_FILE.rst,sha256=Ay5FFPGSwDmnq_PVOKi7GEo2knY5_Ea6XYJBzqjroUs,170 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_TYPE.rst,sha256=uQAiJgC0_utYZEEv7O74Dco0ontRS4SUOOIC7QR7Qao,116 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_SHADER_VARIABLE_NAME.rst,sha256=CzE1uwsZwQJp7jVgA43rIzw20hGG68ZKnh6LFSiSSLU,160 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_TOOL_OVERRIDE.rst,sha256=nxMF0ELSM6GQUswOTRXFQ1BosCVE1eEe--l-k2yMjn8,194 +cmake/data/share/cmake-3.31/Help/prop_sf/VS_XAML_TYPE.rst,sha256=EfD-gQDiDBaNt0qaQRIO7U2n_AcVpsG8-PwVCIt_NDw,260 +cmake/data/share/cmake-3.31/Help/prop_sf/WRAP_EXCLUDE.rst,sha256=gXaAXSvzoBzwDGSVOdQ30T6BC_09Y_uzaH4IWaBqen0,357 +cmake/data/share/cmake-3.31/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst,sha256=UIzV_Wmzbu9ysQvsMTjzc_g4F09Dg3iirWEgWGJuzB8,313 +cmake/data/share/cmake-3.31/Help/prop_sf/XCODE_FILE_ATTRIBUTES.rst,sha256=3N92z8m8ZubaxkddpvpMQBFTof0Ugsl8g2eFw9YLQ_Y,347 +cmake/data/share/cmake-3.31/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst,sha256=GJpd7b36hRjbf-04Ao1r2nzKaLKzLn7gGBqcdYkRN-I,362 +cmake/data/share/cmake-3.31/Help/prop_test/ATTACHED_FILES.rst,sha256=ZIVGakmVGkTw5c8iaVVNV02ck0gK1s83UKuthDz8_Ac,206 +cmake/data/share/cmake-3.31/Help/prop_test/ATTACHED_FILES_ON_FAIL.rst,sha256=W3K5gE1B2z5gxwXfRuwG4kcNi8fK3kltkuJOJPitmKw,218 +cmake/data/share/cmake-3.31/Help/prop_test/COST.rst,sha256=EC_rKVYmMgl4NOUOSiDDLo7MPCqj5RdmHP5rnyX96Yc,621 +cmake/data/share/cmake-3.31/Help/prop_test/DEPENDS.rst,sha256=td6uZFNPcIj_PxNYMcOqz4lqxqZaaGAqyEGB_8sNzEM,759 +cmake/data/share/cmake-3.31/Help/prop_test/DISABLED.rst,sha256=aNPGQYq6T3VlhtcF2uulQUIIa8-LZBR5NovZn-Sqyxo,735 +cmake/data/share/cmake-3.31/Help/prop_test/ENVIRONMENT.rst,sha256=zyxgEG5C252eprovK60VCBuhg-Lpw_Biatbdm08_z-Q,371 +cmake/data/share/cmake-3.31/Help/prop_test/ENVIRONMENT_MODIFICATION.rst,sha256=cSGCanwK_JgVoLKZ1YhpgFuKsOUCS6uNVVmE5vnQduU,2047 +cmake/data/share/cmake-3.31/Help/prop_test/FAIL_REGULAR_EXPRESSION.rst,sha256=BPjSyQeAXNXhY3BGhWVgZXjNgu0TYNsaD3viMwe6BSk,982 +cmake/data/share/cmake-3.31/Help/prop_test/FIXTURES_CLEANUP.rst,sha256=CRhR8t4VMPKW2bA6jQMQfEaIaeS5n7tsOP7d4LQTNcA,1900 +cmake/data/share/cmake-3.31/Help/prop_test/FIXTURES_REQUIRED.rst,sha256=LRJxSQWKIew20fXOrzDsC_QRF6RWNTE5RKIY9DoqwnY,5018 +cmake/data/share/cmake-3.31/Help/prop_test/FIXTURES_SETUP.rst,sha256=6xGlZzqSB3i-GJLxvYMOiUimeUYVSXteduCP88Bh0hk,1958 +cmake/data/share/cmake-3.31/Help/prop_test/GENERATED_RESOURCE_SPEC_FILE.rst,sha256=kBhbXULjeGX3AZkGftW3CCVHWauUws_a9JJRVbq9Ts8,216 +cmake/data/share/cmake-3.31/Help/prop_test/LABELS.rst,sha256=UF9RGBKzemLb26gEKsvEVI76_fRohDGL0PFFyGBWODo,387 +cmake/data/share/cmake-3.31/Help/prop_test/MEASUREMENT.rst,sha256=BUGtdb1cr38frHYzGalYHCEGK8EgEQ-eQnOXhV0cP1g,286 +cmake/data/share/cmake-3.31/Help/prop_test/PASS_REGULAR_EXPRESSION.rst,sha256=_o6YNsfI5Gk7Qtno2QptHbgYoLzUC7--VzyYWvUgm4A,1565 +cmake/data/share/cmake-3.31/Help/prop_test/PROCESSORS.rst,sha256=Uczk6leRXRwCk9bYNAD6znpl_9vCLXuE9M3XNXjbSLc,679 +cmake/data/share/cmake-3.31/Help/prop_test/PROCESSOR_AFFINITY.rst,sha256=1Tz_fyugDZzCmvSKHWJ36TH-QVIhBhCzfzLhTAiunxc,667 +cmake/data/share/cmake-3.31/Help/prop_test/REQUIRED_FILES.rst,sha256=hxedUy8ObxrtHEPog_fMTLDw04OW1hZHGT2Xr0ZVUaE,1203 +cmake/data/share/cmake-3.31/Help/prop_test/RESOURCE_GROUPS.rst,sha256=ocF2UlP0XlMNmzCGmKTuIGo0bFHmkx5PAGHb-dBzwSY,3559 +cmake/data/share/cmake-3.31/Help/prop_test/RESOURCE_LOCK.rst,sha256=lS5Gb_-a31rhiWx0t9TgB8L0aIbXGtnBwgf_qe0Oe7o,805 +cmake/data/share/cmake-3.31/Help/prop_test/RUN_SERIAL.rst,sha256=hbSFFnfROqgkpRP9tGgaNX2dyFj6pl3NknUnyRtuiOs,233 +cmake/data/share/cmake-3.31/Help/prop_test/SKIP_REGULAR_EXPRESSION.rst,sha256=PE15y8LWc67nobG40ankRdk1K80tboWzQGPaaImV6m0,1504 +cmake/data/share/cmake-3.31/Help/prop_test/SKIP_RETURN_CODE.rst,sha256=Y3o44WzhMrwynhfIiTvKD37NEXUQo_ap1QQf1LASkWs,1589 +cmake/data/share/cmake-3.31/Help/prop_test/TIMEOUT.rst,sha256=ieMen60s577St42_oaOYNnTZLHo8MzY1__rvTVChjqg,513 +cmake/data/share/cmake-3.31/Help/prop_test/TIMEOUT_AFTER_MATCH.rst,sha256=0OsPS_Z1xyaaqC0ytWU0oCzb8rxgXlopUdp3UkiIgGw,1462 +cmake/data/share/cmake-3.31/Help/prop_test/TIMEOUT_SIGNAL_GRACE_PERIOD.rst,sha256=HYAlKrlOn6l2wDDKe6LG9IlQ8fZb64RTbafn7d-skFo,553 +cmake/data/share/cmake-3.31/Help/prop_test/TIMEOUT_SIGNAL_NAME.rst,sha256=DmoopzgEfyBLgSG1B-3lIL9xH4Qx4wYe7KMgb3htM9c,1032 +cmake/data/share/cmake-3.31/Help/prop_test/WILL_FAIL.rst,sha256=7GNsMs1cnQAMBrqXqQX-6jYrHYM50rxgIh2nQRp86qc,1207 +cmake/data/share/cmake-3.31/Help/prop_test/WORKING_DIRECTORY.rst,sha256=YTvZtFiNKLlVogZFelTVpkSBpkBR1lNlY_GjGM3rDXI,328 +cmake/data/share/cmake-3.31/Help/prop_tgt/ADDITIONAL_CLEAN_FILES.rst,sha256=wOSh4uFwTu-RDnYv-XkTDTFp3mURM8ELtfossX2FlBk,1068 +cmake/data/share/cmake-3.31/Help/prop_tgt/AIX_EXPORT_ALL_SYMBOLS.rst,sha256=n3kvJkEC5KzBXLQdwLOKFmoV1MUtvfghRVeQ1_HJRv4,550 +cmake/data/share/cmake-3.31/Help/prop_tgt/AIX_SHARED_LIBRARY_ARCHIVE.rst,sha256=BQ_SitLF_QLIjah3h-Ws7SnDSLPRGwJ57-TumOnGJJw,811 +cmake/data/share/cmake-3.31/Help/prop_tgt/ALIASED_TARGET.rst,sha256=GiVy-CAtNObcweG3RvE1JW0jzNTL8T8H2l0QJVANTTg,177 +cmake/data/share/cmake-3.31/Help/prop_tgt/ALIAS_GLOBAL.rst,sha256=3MHyDJyEGEFyY0i2NC0G4VHt8aSOG0BsAURiqisIHJ4,648 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS.rst,sha256=I2P9A2Cqwyq9XH7TGwiGm_7dYnBr9pK8mz6ACKAf19U,367 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_API.rst,sha256=MH0tlwmGvA_FImHjRYcld7wsibZEfsGyWMlUdYVEKqw,384 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_API_MIN.rst,sha256=nMWf7nOQyWAt2DyoRaIBau_izMr2xOaG281x2n_9Sqg,334 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_ARCH.rst,sha256=Oz2RgNIQ1z0EsbAZopW2wtWl_TLOW2ETZhClUCq2c34,593 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_ASSETS_DIRECTORIES.rst,sha256=f4Ta4YJuqHJA82uPOl0kB1kfcCW7_VRjDn05pd1avZA,386 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_GUI.rst,sha256=jgBfx5Am3Uszrz0R62MImU5YnBMP_sx-qNLYb9vMqSY,653 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_JAR_DEPENDENCIES.rst,sha256=GuIKIn-xK9JPi39UslE_9p6eLbUsn0C4DGVjSwNLr7E,305 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_JAR_DIRECTORIES.rst,sha256=DZeEWEjW8kfgzBwqib2Ou3oIVCk4oP9d3mpyWyFAo_4,564 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_JAVA_SOURCE_DIR.rst,sha256=ySPgC3-f1n9O97SnqfNvkE-c17sfYtyjfTtd9FEDwFc,369 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES.rst,sha256=0m9JRLGFPPnZpxFcerN8EwGWAeaNc_1jaaboKt1czfM,517 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES.rst,sha256=4aY0M6R48_ahVlScTPCAigunfJXBiDZDXDyKb5Rtg4A,597 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_PROCESS_MAX.rst,sha256=5KroqO0on57v24Qtb33RzV3aWEiAXmoR3OccLJemfv0,315 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_PROGUARD.rst,sha256=pgX3LBAi9u9qqUsUBGoTIgqdiWXuZmqhw4RNxpxNS5g,398 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_PROGUARD_CONFIG_PATH.rst,sha256=QI9hfN3XxiI60ej2zNxAAB_QCh_3M5-471cK7-VP-7I,415 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_SECURE_PROPS_PATH.rst,sha256=N1aCB91qhZDxgwH86F46TogjpJYCW2Rqqmv_SeGQeck,353 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_SKIP_ANT_STEP.rst,sha256=v08aylZzXtYWYEYNIrKA1p9km0Zrd4wgxKShicL5aLs,296 +cmake/data/share/cmake-3.31/Help/prop_tgt/ANDROID_STL_TYPE.rst,sha256=WWBDxWuQayGbdYcj7pEDprbTSguzOHdSNhG-G3ZKRu8,707 +cmake/data/share/cmake-3.31/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst,sha256=XgQ8Hsgg8uWwos3vhVBeXG_nTg70qIZuW213TZFffX4,418 +cmake/data/share/cmake-3.31/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst,sha256=KXGEoWBZglS4BfPEaWPvmPpmPsXnmSlh6bCizlQ1xi4,659 +cmake/data/share/cmake-3.31/Help/prop_tgt/ARCHIVE_OUTPUT_NAME.rst,sha256=o54m784WdmErp0ndEFZcpxL-vvbEZWlmpdGQT0u9QiI,310 +cmake/data/share/cmake-3.31/Help/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG.rst,sha256=FLUEf55zebGPOgWhI6CgPDK1p-k127HfVGQ0CnAb1UI,249 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOGEN_BETTER_GRAPH_MULTI_CONFIG.rst,sha256=C-h4lCjQF_28CB_YD1mr7lrT5W7ed_-KLpt63Crs4pw,914 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOGEN_BUILD_DIR.rst,sha256=jmPZhdbXuKjPm9kivYpsKSfEVG7LGH53JH7a0k8Scfg,592 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOGEN_COMMAND_LINE_LENGTH_MAX.rst,sha256=83NHTCNoVwlkN5SyDJkEq0KFdgf3LqMaYO55Iq-lAvo,601 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOGEN_ORIGIN_DEPENDS.rst,sha256=z-XXg2phNP_FfrwEPrJEyWWrfkcbYB6Cp8Dx8veYAPQ,1956 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOGEN_PARALLEL.rst,sha256=ErhNDVQhRgdm08QuSRpwCX76mDJfI6SERd9W4-S-YXk,881 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOGEN_TARGET_DEPENDS.rst,sha256=PY2qChkrboeKHrdeJ5ISqsIWfiWcO5mEnhlu5rtGtUw,1843 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOGEN_USE_SYSTEM_INCLUDE.rst,sha256=MIaPcaqieUjg3IVYqn9ptT9TbXAZ4_GiW6iuWF4sQCc,665 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOMOC.rst,sha256=jjoKggfynmigtIOjyXhErEWoRo1N3kjyuoMJXTzqmvU,9419 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOMOC_COMPILER_PREDEFINES.rst,sha256=PKOnSjc6Tv6i6y6zJbzZWDgkHFkauMbHDP4Z48oJK2A,1024 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOMOC_DEPEND_FILTERS.rst,sha256=6cCHWsyzSdy2DH3y1pmepg4vE6zYHy0H3KAeM03ZWD8,3388 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOMOC_EXECUTABLE.rst,sha256=xYAbu-ib6oiwn9TtBMguyFx2K8CeuJBtNbc83e6XVuk,652 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOMOC_MACRO_NAMES.rst,sha256=NHCvImMLAFB8Wui9bGxvpY6ovSxVX5QymC7dUhSEFC4,1205 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst,sha256=7UqO3lhzw7-y2P2PTF_ptOERLbEh9Pc7jEgVo2RhOME,1413 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOMOC_PATH_PREFIX.rst,sha256=mAPiRyShm4MIvHpApgDj0WbGyVCAchMjbqZrRv3k8vM,1272 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTORCC.rst,sha256=IJPriFeBhzp9F0JyH8RF2f-kq5azjYmRrcQCuPuzChg,2469 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTORCC_EXECUTABLE.rst,sha256=b8ysvOuw_IqOhOEVV6TwY2T7qXWOg5jbogzlEdM-IFo,652 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTORCC_OPTIONS.rst,sha256=QMiRTPs53e7nGxJnHpa4TO8wNieAfzV6OtN9mzxRdC4,828 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOUIC.rst,sha256=C8TTksDpfpmTuZOsEVNiWad_SFoyNkilNVJB3uEsCW0,3122 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOUIC_EXECUTABLE.rst,sha256=yIzvVS2C0Namt4aGhfCZ11nN0BLSyEV1wU5JGpRDbr0,652 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOUIC_OPTIONS.rst,sha256=eoigXzMxGqiY-g_HASsuLcnp5W0Aor-z_ieS6c-6sUk,1005 +cmake/data/share/cmake-3.31/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst,sha256=7A2gwttfbkEbQv1k-88E9oSrBY6t70GL8V0g_Crd46g,386 +cmake/data/share/cmake-3.31/Help/prop_tgt/BINARY_DIR.rst,sha256=T6p1Lp4BmMSUjxRzFMeqHD_EbMRdiwxA9lq3S5Bc_mQ,191 +cmake/data/share/cmake-3.31/Help/prop_tgt/BUILD_RPATH.rst,sha256=S_-Ng4D6kmjo0EDH1Szjhb93CMh60Z_1zq6giiYPgds,1479 +cmake/data/share/cmake-3.31/Help/prop_tgt/BUILD_RPATH_USE_ORIGIN.rst,sha256=-1EAFKWeG4U9nqaT3jrIKkvE9PBoUoqOgL4lAp07tX8,1086 +cmake/data/share/cmake-3.31/Help/prop_tgt/BUILD_WITH_INSTALL_NAME_DIR.rst,sha256=USWdGkgTir4MstlVEocWb10R119Xgoxf_WAqNSyQx3M,597 +cmake/data/share/cmake-3.31/Help/prop_tgt/BUILD_WITH_INSTALL_RPATH.rst,sha256=__5iw4_3lKrAfZOZIOTKB5eRrsgg9KjdaFPcFJVrMj0,666 +cmake/data/share/cmake-3.31/Help/prop_tgt/BUNDLE.rst,sha256=oLu78YuPuzPgwJmaawH2qB6wHdJwdWTM9nAmQWt3r4M,334 +cmake/data/share/cmake-3.31/Help/prop_tgt/BUNDLE_EXTENSION.rst,sha256=9UZu0N0XFxaYHsznYvTeTvo-nalx5tMTtjSt1eb8P14,267 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMMON_LANGUAGE_RUNTIME.rst,sha256=8cp-KxAc_u4f1ZLylSrgMuZMy32ochzQUHGk1e8xQHg,894 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPATIBLE_INTERFACE_BOOL.rst,sha256=fq3HQBSDlhnEls57tSAUG3iI-y1SQ86-MMjvvZBFGlw,924 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX.rst,sha256=a8Ykhd85A7U1l1LH2xNsMbsSk06Pv8kZzeUIoknfnwA,912 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN.rst,sha256=8wmq3q4z4YDTRYHZvA9DsNX64yDegafVJFg7axgx7fU,912 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPATIBLE_INTERFACE_STRING.rst,sha256=baLvvKxMdSl81VwGRJ5EtOUsqFWtpxPPyh6g0dpjjRg,792 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_DEFINITIONS.rst,sha256=gmvgPhj8FdgSpOV2SNcDQXUQCkDsMALrSa3qWnNPPF0,1166 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_DEFINITIONS_CONFIG.rst,sha256=m8_O5D4jj-whl9MsIk1QSEwjOplpk2J298KelSJ9wys,678 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_FEATURES.rst,sha256=pJ3oRPxdPCwmv1Iaof3LOWNr8wsVMMGqLd2jll6gaqw,617 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_FLAGS.rst,sha256=v4J3twVzI_zYHtF8U2znByZOLaXon31L_Rx1xgoQxlo,461 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_OPTIONS.rst,sha256=LJACJ8MlPKFuX_hrGE9Ssn-E2ilZiitHHzZfpaLYJpU,1155 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_PDB_NAME.rst,sha256=GoSil7BC7-CbOohyZEm8aIhNt2Ys0UT7IbhCtCrjVjg,349 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_PDB_NAME_CONFIG.rst,sha256=T3INWvuu4CBwbX37zWiBlCT-TTJ9ppEHu-ZoM-gl1xA,364 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_PDB_NOTE.txt,sha256=-OyXErtTlh3g1VJF3iL0nV447UJlpa0MVesYNYht298,256 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.rst,sha256=4toZIYtQjiyfnE6fWoSOnoQqp8fIjmCHJY37_HXe9p8,531 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst,sha256=tKxf9D0Negt0RZ6OrDvKB0umiTLNJ48GqKHKHI59hDA,697 +cmake/data/share/cmake-3.31/Help/prop_tgt/COMPILE_WARNING_AS_ERROR.rst,sha256=Sxn9jhZtIzNGDyAvNPCTo9sv_AY5CZ4-F8NSDF-lq7E,945 +cmake/data/share/cmake-3.31/Help/prop_tgt/CONFIG_OUTPUT_NAME.rst,sha256=4zerU3uqLBLS14fTVlik-3NVNreTXmxTWnNuLDrhFe8,224 +cmake/data/share/cmake-3.31/Help/prop_tgt/CONFIG_POSTFIX.rst,sha256=aaeryUqD7SMaH4N8ZWTL3o5piIRAVNaq5yzr9u7BllE,555 +cmake/data/share/cmake-3.31/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst,sha256=e9KNJJaAAXYwm8-i8PBi30h1Hbt2I_J_nsba1hWEMuo,788 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_ARCHITECTURES.rst,sha256=rX45jGTs9Uny3kr3BBcgT1DTLJbXAMjnIWuTmAedxOk,1775 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_CUBIN_COMPILATION.rst,sha256=WVjbov-bv_V28JO1Ooj52q09gcYG3ok8uVCBPRwCNao,314 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_EXTENSIONS.rst,sha256=GkiIa7LKVFiAqYxwOy75neQjRT8TkQo3ZzX106YcyMI,842 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_FATBIN_COMPILATION.rst,sha256=ALGyNtmmckeCGRTZ6Wi3mzuBAqvunT78KX0P6nBkLFM,318 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_OPTIX_COMPILATION.rst,sha256=TekMxzjuSLF8W56TLviYBhYa4WemtI0iw-uGC2WMdDM,316 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_PTX_COMPILATION.rst,sha256=zkUUBJDjkhahmskfZE2s5nOy93dELxB_W2LfzOjV0ug,301 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS.rst,sha256=3R566CJvG5Q2t1L3O3FehUJP_w7pyDDVjdAyXGQAHy4,1152 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_RUNTIME_LIBRARY-VALUES.txt,sha256=ecDAnGiswQyX3dh3Htw8JTVspm4LlolVGW4PX5PpZC0,325 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_RUNTIME_LIBRARY.rst,sha256=CCh5WPt8Bt5v7VXO_MYdbDlNM2-3zphyvvrfbo_10fQ,727 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_SEPARABLE_COMPILATION.rst,sha256=g45mk6vzwLBztaQxmP2pU6Fm6PN5_dEUSqsFPDDNuh4,471 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_STANDARD.rst,sha256=KChmejxJ5Sos_i-sX05FsbezC7BiTZwlwkzQ_tWPzdc,2090 +cmake/data/share/cmake-3.31/Help/prop_tgt/CUDA_STANDARD_REQUIRED.rst,sha256=gGCaYJiZ6In6JLrHgj6jjcpVRwpIINYgw-VDCh009NA,853 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_EXTENSIONS.rst,sha256=diT_aEuO3SVVL8OlH9Xmm_UtlhVCG7nqrN2rTO1Ela8,832 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_MODULE_DIRS.rst,sha256=23Jm_vxLIlvTRpw0FZXbrUDWrgSr9fduz6nzR6Yl-ew,499 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_MODULE_DIRS_NAME.rst,sha256=IsffsyMs5hbUtNN57jiTztexmJPNyqjBmh9I6_B1DDU,578 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_MODULE_SET.rst,sha256=pfGhitGCbQhLxC5TMbdYUUM6_erfmyW6ZJDRqvh5h1A,570 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_MODULE_SETS.rst,sha256=WJZjC5TJ0mlq0o1GzoTA4L4CrdvzL-xL6TPWNN9c94w,517 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_MODULE_SET_NAME.rst,sha256=EiBRoX5jsnnX64wUMfLbSMtDhCMAnskEgtfGyEBF2No,648 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_MODULE_STD.rst,sha256=HxX_DvfnlJcDKXZsS_oaRKlItdMMA_X2kV_2JMPqnK4,1734 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_SCAN_FOR_MODULES.rst,sha256=CncmeDncplOhifDIdlMo-l9eMCERUXEL3XrPqenVfvk,922 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_STANDARD.rst,sha256=FLi5cIVZVXErFD8h_suyW4KCL8JyfOhYiboZTCWrQ9Y,1707 +cmake/data/share/cmake-3.31/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst,sha256=Lo__0CbZLLp70NfQzoJpxaWnTTth5l-lWKmFClnaBPI,847 +cmake/data/share/cmake-3.31/Help/prop_tgt/C_EXTENSIONS.rst,sha256=Swy3C7hDhP5XCplE-AHu_LBX5mLWT5BIho8lMB0rlag,816 +cmake/data/share/cmake-3.31/Help/prop_tgt/C_STANDARD.rst,sha256=iimHuOZBgZcg31hMlXBEY7yscn6wE_fN4MTNtoCeQZw,1517 +cmake/data/share/cmake-3.31/Help/prop_tgt/C_STANDARD_REQUIRED.rst,sha256=KrWda2JRRQxR3rPN-owWJxUdNdI8rmzUJdaC_e6hvfg,841 +cmake/data/share/cmake-3.31/Help/prop_tgt/DEBUG_POSTFIX.rst,sha256=hlQwBzaMdwWTMZbJ8-xJZPxK-ioZfMw3-vqGB0SIDsc,203 +cmake/data/share/cmake-3.31/Help/prop_tgt/DEFINE_SYMBOL.rst,sha256=z197N86WAoEGhhg8S-fo8lI2R-0gCXUeIS2rS6uHXHQ,676 +cmake/data/share/cmake-3.31/Help/prop_tgt/DEPLOYMENT_ADDITIONAL_FILES.rst,sha256=P_YDqJ7-MpAmisAH9fbvtJdVAFpMWy26TnMRhnM1Izo,675 +cmake/data/share/cmake-3.31/Help/prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY.rst,sha256=fM-p2BFa5XYuoQlcwNVJLWy-sZfcWDg1pKbZ7-UmJr0,588 +cmake/data/share/cmake-3.31/Help/prop_tgt/DEPRECATION.rst,sha256=9waa51wnKNFBsy28iTHPi3UQDR2liNtCx7SxwhGbqs4,394 +cmake/data/share/cmake-3.31/Help/prop_tgt/DISABLE_PRECOMPILE_HEADERS.rst,sha256=qhQfAo5ACSqRNW4Y3uMUNYCdY_zLg02EM2b02yBeCzg,289 +cmake/data/share/cmake-3.31/Help/prop_tgt/DLL_NAME_WITH_SOVERSION.rst,sha256=Ei8DBa97h9Wzf6-o_NabZ0RZkBkGasopHNwKmUaI1bE,588 +cmake/data/share/cmake-3.31/Help/prop_tgt/DOTNET_SDK.rst,sha256=HXcyj6RaxFMk6zu900_5rxE3p2-pi5e_bh25nip0J5g,966 +cmake/data/share/cmake-3.31/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK.rst,sha256=LLS5HbX_qghJeKytWVE_7hHMiSi8YZCZxfjpbiy5D3M,390 +cmake/data/share/cmake-3.31/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION.rst,sha256=mfV3RvRZuLgVts4yvBM1Sqg7R9LrPqFNX8eX6D8uRqg,499 +cmake/data/share/cmake-3.31/Help/prop_tgt/ENABLE_EXPORTS.rst,sha256=yHX3XX_TrCYXxPdI1s1fp8kiTKKSpT5sJWZAyJWCDd8,2906 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXCLUDE_FROM_ALL.rst,sha256=24aMhHZxKCICUNKi_C7JoDq-eJM2jDjTlCtfsGqABEo,1363 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD.rst,sha256=kWgo0-xTFtcGrWa1BtVUI8k-RU2cMAuFWpbvDUXDWCQ,238 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD_CONFIG.rst,sha256=XLWO5MJuhaGoqxeOCTTpSOav49YiR6F6LoVGFHrf570,412 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXPORT_BUILD_DATABASE.rst,sha256=ZIrQmIFE-y0G0XRasH7kWvKKRa-UvlN-UI-nc_fSLhM,439 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXPORT_COMPILE_COMMANDS.rst,sha256=vepD6_cpFCK-UCpGdq7RKBfa21siRlilsyZULEmUMs4,287 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXPORT_FIND_PACKAGE_NAME.rst,sha256=wnp1C-5VlvQiR3tddDbhHVl7mnSDMDe9-RMoDgq-iqs,567 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXPORT_NAME.rst,sha256=y2K8QBpkhguYy2meOdvOvtdW2xWeBET07VVBDgoL9Ns,237 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXPORT_NO_SYSTEM.rst,sha256=AbBRvVedbXTD8r1hJB1fjvGPHF10u23n4nLzym74ED8,514 +cmake/data/share/cmake-3.31/Help/prop_tgt/EXPORT_PROPERTIES.rst,sha256=GMCSGSJpfz5Qlq8uYVo607BkfrLaK13e38vO6Hd9ZJY,870 +cmake/data/share/cmake-3.31/Help/prop_tgt/EchoString.rst,sha256=O8zdEXBFMLNzLobdXX-FwKpI3HqhD3HO4_6_YBU23Ao,179 +cmake/data/share/cmake-3.31/Help/prop_tgt/FOLDER.rst,sha256=Pae66cTpbnrtOd6VFyXWdhoIi972EtNkAQWKzfkvf3Y,865 +cmake/data/share/cmake-3.31/Help/prop_tgt/FRAMEWORK.rst,sha256=hUpWtIgIbVa2t8nA2uae_56VsfzRTLDQRKw5xHjTF4Q,1310 +cmake/data/share/cmake-3.31/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst,sha256=VHKMr7gRzpk_LGky_wdkvZGQXkb8BYPIEw-c7OFB-Nw,1122 +cmake/data/share/cmake-3.31/Help/prop_tgt/FRAMEWORK_VERSION.rst,sha256=-nwatsIEJE0A5QW3SC2Lu_361o6bnVRyJNc-pkKKfJ8,239 +cmake/data/share/cmake-3.31/Help/prop_tgt/Fortran_BUILDING_INSTRINSIC_MODULES.rst,sha256=mtnD-1qmvdZjlNX-NDoZMTAtS67-WUukl-8XuR3qZDY,626 +cmake/data/share/cmake-3.31/Help/prop_tgt/Fortran_FORMAT.rst,sha256=7iCopkdpnHVtKkkye7clg0M68GkKuiKQP5wv7M7qrRM,498 +cmake/data/share/cmake-3.31/Help/prop_tgt/Fortran_MODULE_DIRECTORY.rst,sha256=0b0mw7zxHlxkns7q9P4lI7AGbnmVzsJNz34jAmOt7vc,1314 +cmake/data/share/cmake-3.31/Help/prop_tgt/Fortran_PREPROCESS.rst,sha256=u61Bd2ywJ9jii-xyRR0Y_WZ-Rp0lJKsVnv_put5rUa0,993 +cmake/data/share/cmake-3.31/Help/prop_tgt/GENERATOR_FILE_NAME.rst,sha256=PetSfVo95JMXA6dlcVvSkrBMrOVeIaAJaSK2pYLvclo,314 +cmake/data/share/cmake-3.31/Help/prop_tgt/GHS_INTEGRITY_APP.rst,sha256=pCEnRDoIs40xTsw6zryMGu1QPpg5xxiLDXixHVY31M8,362 +cmake/data/share/cmake-3.31/Help/prop_tgt/GHS_NO_SOURCE_GROUP_FILE.rst,sha256=b46at57G8XnY1zvnZztZXGD9TTftw8Rzfuk_8zuCA90,535 +cmake/data/share/cmake-3.31/Help/prop_tgt/GNUtoMS.rst,sha256=EZptWNMdC3z6JPZl0NQOvJqQeQEd0G5Fm4RBY1l5W8w,860 +cmake/data/share/cmake-3.31/Help/prop_tgt/HAS_CXX.rst,sha256=8K4ew7PP6qRoL9L59qP4oJTa1mcWz4maUyLLjb4tX7g,155 +cmake/data/share/cmake-3.31/Help/prop_tgt/HEADER_DIRS.rst,sha256=mZ4Fl6hVxH0QdMwlBuf5vODd29j9n15KhttOdOug43Q,475 +cmake/data/share/cmake-3.31/Help/prop_tgt/HEADER_DIRS_NAME.rst,sha256=BtYe8YYeHabR-o66sEYWQkUPDD3E4GG8WOMSaUyaclA,546 +cmake/data/share/cmake-3.31/Help/prop_tgt/HEADER_SET.rst,sha256=hQUyT-AOyJ5HkGgMgTMFmIs42bfLJEZ70TBJb9nLgAA,546 +cmake/data/share/cmake-3.31/Help/prop_tgt/HEADER_SETS.rst,sha256=DlDjuLoKU3ifh1c0CxRzUhjC9H79PyXLP_exCzUHd6E,561 +cmake/data/share/cmake-3.31/Help/prop_tgt/HEADER_SET_NAME.rst,sha256=XKgm4iCNqmo_0joVuJjHgvK5v6HopLdMf92BY20NC8c,616 +cmake/data/share/cmake-3.31/Help/prop_tgt/HIP_ARCHITECTURES.rst,sha256=BSEsAgI0lmeDISuCuXvajSxUna6Us4vhlfxqNakpL5w,974 +cmake/data/share/cmake-3.31/Help/prop_tgt/HIP_EXTENSIONS.rst,sha256=EBBcrOFkRQb5kyHjRah4Xy78DTkVDhvlwz7eNNIlSwM,837 +cmake/data/share/cmake-3.31/Help/prop_tgt/HIP_STANDARD.rst,sha256=nBxIEBFJOtmZaa4UzwwoLVJESL0ZFnI6A0bBs2--jDs,1327 +cmake/data/share/cmake-3.31/Help/prop_tgt/HIP_STANDARD_REQUIRED.rst,sha256=9n4_MCxA4nh_Hp4WNCUfF4ZWK_5SZlnnZ5LkMCDyVbY,722 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst,sha256=6guH50VNLw60NwjzhHLAxug_M5te0hhltZfxon2KPs4,836 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED.rst,sha256=9XEAj9RjZ7ONqktoJXETzmajxkdJgqO9dVCxLI2ZQug,284 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME.rst,sha256=CnsWB9zQZGfMaxEM_yjGKnK1nhWvfQWMWe1eBPUaGDk,244 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_CONFIGURATIONS.rst,sha256=zkn77UvLJUcy9Re8rn8RiVcab0c0Z2xcl-cOLmz4GnY,1022 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_CXX_MODULES_COMPILE_DEFINITIONS.rst,sha256=rGoY_Ym3ZChQfjfbIChR0urEbnPgOvhe_mp6KWLbWKM,288 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_CXX_MODULES_COMPILE_FEATURES.rst,sha256=s6y5u_rpOtybZAdlwgqNlMSzgvmnFHJCfDVbdI8vhUE,268 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_CXX_MODULES_COMPILE_OPTIONS.rst,sha256=14Ggjwgw0Wkd2v7kMEjbydFVEkD4YXYY66UoPeXdzoU,226 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_CXX_MODULES_INCLUDE_DIRECTORIES.rst,sha256=Pb9juwJcZ7NqCreqHx8Mr0ax-qZqD0F5TBP3gRLraq0,310 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_CXX_MODULES_LINK_LIBRARIES.rst,sha256=2IdWft8xN58bFXhfuo0jzxgtaDXbIjgTcpiyyAK5Mjc,200 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_GLOBAL.rst,sha256=qS-MSsu2o-CmBA_UflWrw4donJ9FRfg-Szb3OjX977o,1321 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_IMPLIB.rst,sha256=Wti85hbBzslNCrGwzcLMin5W33JUmXCrNq_hVoYqws4,1916 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_IMPLIB_CONFIG.rst,sha256=WqYxk8gqPuUZijJ39ltRA3hPMnY3Rbv890ptPZyXlWQ,218 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LIBNAME.rst,sha256=7lRVUg2SAe0ZtuI6VqQAsIYAHEjr9EQj4Jqni0i4jms,1080 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LIBNAME_CONFIG.rst,sha256=GqbVvtTzr3CKMip821r9Mblt2K3LyUoXQbK3QLC8dmU,244 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES.rst,sha256=s2D4tafZI1jEvJ-NuIY8o3-ApD_k5SQDECHNfr9sNns,734 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES_CONFIG.rst,sha256=2idmCeU_TneD-86TgZ8SY4oSiaOjSRIY5X7gC8I5gwo,357 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES.rst,sha256=pw6orMelSZG-Pe-velD5N-6xa2niGoySVtEH5whUJys,642 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES_CONFIG.rst,sha256=99qsSZVwP8KVhj4A_fEZww28FEzH5qb9zfpgoW3ZgTE,357 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES.rst,sha256=jB14IM8oziyslciXSNQwYFSMLLFepCCA3sWqaxsKxnI,699 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG.rst,sha256=d30M0pcYpELjUaAStYOHamdgSEXivYaN8-nE-6Z_LeU,546 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY.rst,sha256=lnGjB362wbtFSaCerWxKVGEUcEGqfEbwGdwNV6iIXsc,212 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG.rst,sha256=KFu3ZW9Ir6ZGj9JnVCFhi2Cf1y6IQNkOK-XsEEh_WPs,266 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LOCATION.rst,sha256=-6k6u1eH5YYA1qbrIy0OWZL65-DcvcZofYQ5PttWgMA,1939 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_LOCATION_CONFIG.rst,sha256=ianlh5WtPNgNF53o9Z6Z_5t3T1Uym2OUo10_ApixUHs,224 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_NO_SONAME.rst,sha256=gCLpoOdlhYItic1b9Kue7rhCk9bkXFWUobod9RE72Zw,393 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_NO_SONAME_CONFIG.rst,sha256=CchrMJrt8DAdOT5hwzMyumarLpIY3EZnvwJDp19ZNXY,227 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_NO_SYSTEM.rst,sha256=OtM3hIfhufo1Yj96VRc0mxdl98XiJ6swcTdmrPsraZ8,1621 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_OBJECTS.rst,sha256=yuFMIu-bZ_gAXTdXWv72CdilO-KNt6p4aJzmstO5css,4196 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_OBJECTS_CONFIG.rst,sha256=30_h4HgYnXz7ZOxfwRjOf4pGC_1zdpCCexQ6wHS9cAg,706 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_SONAME.rst,sha256=DiDllh-TkaIwB8-ZaUAf_FE7Nq4KeMmkQRa_TlEknM8,263 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORTED_SONAME_CONFIG.rst,sha256=5o01nnTllIHKX9_OfxFVvQnzwInwazoSlfYgirZXyKs,218 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORT_PREFIX.rst,sha256=W0GyI-z6itH-KQ9EPu6KZ2p4DCXfNjg_Ie94IFQV1qM,326 +cmake/data/share/cmake-3.31/Help/prop_tgt/IMPORT_SUFFIX.rst,sha256=j3CROvRxRksKGN6A_PebMN8q2SiYxRvhdDgiK4f0_f8,326 +cmake/data/share/cmake-3.31/Help/prop_tgt/INCLUDE_DIRECTORIES.rst,sha256=HI-BZyeIRk3lcXEFwdddgfs1uHdCPfU-QjHxXY8Sozs,1098 +cmake/data/share/cmake-3.31/Help/prop_tgt/INSTALL_NAME_DIR.rst,sha256=3Umvr8HnGRFo9vUQQwm9bpR41Luw-82n7BTtN4GNb5Q,1063 +cmake/data/share/cmake-3.31/Help/prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH.rst,sha256=JkhdmRLlSyBFKGlHCryJtedH1ICaHv6QRL4Pt4cYLqs,887 +cmake/data/share/cmake-3.31/Help/prop_tgt/INSTALL_RPATH.rst,sha256=7DALavoEzIZ6q2Q-oQpTjKgH0p5dko_4M0PylW4xbuk,1619 +cmake/data/share/cmake-3.31/Help/prop_tgt/INSTALL_RPATH_USE_LINK_PATH.rst,sha256=YuZsydKd3XUv3B_pZw5Jyc3ootSo--RiRw-8D7issSw,588 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_AUTOMOC_MACRO_NAMES.rst,sha256=SdC9uprDO53HjxtqUHtmomt8sUI4mJSp3mTJjJGcTVg,3200 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_AUTOUIC_OPTIONS.rst,sha256=lbIZRbU4UcHBdcLUnfMt5RKwRszJzZtRQu_JgKNRlQo,631 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_BUILD_PROPERTY.txt,sha256=vnoFmImrJMi56iUOSSYt8ZpvWUuIdyIxoi-XqUBmiEU,819 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_COMPILE_DEFINITIONS.rst,sha256=BIacCB77uhfEeriCRhI9mld9qrEHzZg6TfP5VhKTHvo,352 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst,sha256=GzjObrUyKzJN5H3i0gJ4HRUawiyOnV3ckFRRUbHrkKE,480 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_COMPILE_OPTIONS.rst,sha256=8MRoi7_hqz3UhNr5kcO6T55aZKgrSxXkIz7ei-qk_7A,328 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_CXX_MODULE_SETS.rst,sha256=qdgvlqDMMDFS6r5Axy0ufjqO94dnQSUOd25KuMzQeUU,505 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_HEADER_SETS.rst,sha256=DKkjDl8YlXGFpl_8hWlGgfH3BMrPjf8Gd-4aOQn9t1Q,491 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_HEADER_SETS_TO_VERIFY.rst,sha256=RwfQBl86zJbMsLMNIgIRg0YFnMk04fM1tvV-PooO1JA,558 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.rst,sha256=iTbe5xaIv--RjrC0YIrkLzQ9y9OIUr1gL0GpCjf0Qzg,1152 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_LINK_DEPENDS.rst,sha256=ySH4jBEt3rjkCzbeKMrWRbMDogIRi7pSLBema9x1DxY,1411 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_LINK_DIRECTORIES.rst,sha256=cSNp-sxkHJCK7JiQVGM-aWtNECouGRqQojlLrSpWhLw,358 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_LINK_LIBRARIES.rst,sha256=JhGuCKLBrEX-wSvJIfd8XFglHHQtyL9dbWqDaAWkLag,1783 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_LINK_LIBRARIES_DIRECT.rst,sha256=VPHkoWDT0lUh0UPf-rAyxRBPYTLlCedlKPV9Lv356t0,9684 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_LINK_LIBRARIES_DIRECT.txt,sha256=Yguu9qXUZcMHZbWRazL-88vY7Ji9EadQ7ohZIiSiu2U,397 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE.rst,sha256=lgK5fGjOGfkAQNpq2H8BkrT1EAxtf_1SKuhI8gRy-Eg,1634 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_LINK_OPTIONS.rst,sha256=vHSoI4cQEiCoEGUa5KqMQG19Vlo3yoSHqEi25-9tphQ,334 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_POSITION_INDEPENDENT_CODE.rst,sha256=Gwy1IcyrXnrYtZ0HwkUBoFHmP80YFz1qWSLZxoib_54,1153 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_PRECOMPILE_HEADERS.rst,sha256=vNCFzJ5OPUuslJARGqfL7WM16yLCXNs6GvyASqVS34A,870 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_SOURCES.rst,sha256=SzXhXa-eWAR2F554GmUIejXFUzG-9NvL1WVhJx9nYkE,847 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.rst,sha256=TeCrKFHbrR7-QUvq61JiMD-O_pIo6F5aUDPJjn0N0IA,1572 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION.rst,sha256=Irz-G5ocTq5sc2gUnnosczMaqkRzCaqeGie-2iO-F1w,701 +cmake/data/share/cmake-3.31/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst,sha256=DbfotWpm9zN-jdxv5dmWqGwNEOp6YeswrOXIEzEb6-w,443 +cmake/data/share/cmake-3.31/Help/prop_tgt/IOS_INSTALL_COMBINED.rst,sha256=GAXFvmjg758XTt_2AKoEgE1vD6_7TqAm99j8Iwsx3YQ,1166 +cmake/data/share/cmake-3.31/Help/prop_tgt/ISPC_HEADER_DIRECTORY.rst,sha256=UlLBHZbavSFLnKblzT6IWRQIN7_8cEkQ0P_1utMDsK8,587 +cmake/data/share/cmake-3.31/Help/prop_tgt/ISPC_HEADER_SUFFIX.rst,sha256=dvl2mZKsOSPf78eGo7XSDSqyTeCRhbVeBWNLaz8rFWs,434 +cmake/data/share/cmake-3.31/Help/prop_tgt/ISPC_INSTRUCTION_SETS.rst,sha256=zzk5vCmiHKB59O1vCTT8L43Xl_rnskGatCa08qIrN1M,625 +cmake/data/share/cmake-3.31/Help/prop_tgt/JOB_POOL_COMPILE.rst,sha256=4MfD0d9cc3sO_ZmwApvWB0cwvlAe2tqYeKPMf-G3QOM,421 +cmake/data/share/cmake-3.31/Help/prop_tgt/JOB_POOL_LINK.rst,sha256=4XYvgD5io5nUUQVIOnW-HsIWl6JQLJU8EO2F7-6wvbE,404 +cmake/data/share/cmake-3.31/Help/prop_tgt/JOB_POOL_PRECOMPILE_HEADER.rst,sha256=SB-9jFQj6R8Lc8ijgvEaP0fUaUUO1fB3Y84AlUahx6A,669 +cmake/data/share/cmake-3.31/Help/prop_tgt/LABELS.rst,sha256=8ttIHRmuXlezuNdixp_afn61WgoSQRDCm3JB6kn3X3o,122 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_CLANG_TIDY.rst,sha256=x96GmX5E5K6Xf8lkudcHIkrn5hEIngdZiy9RJnt5uJ0,1511 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_CLANG_TIDY_EXPORT_FIXES_DIR.rst,sha256=tFlAhSSADBFAckhJv58ZXKR5QVl6UrctlOziOncKxk4,1478 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst,sha256=ug13AaN7bBDQhbm4Kf7kPFT0bax4HmVU0MGEgtr2-JM,778 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_CPPCHECK.rst,sha256=oPCW935724LaOvoq2Ptg-L264qcv5JFjcpqOEGbwFjM,1164 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_CPPLINT.rst,sha256=udYykDt8WIIdiP0YK-VN13b2IcHh3AhMR2Y02pXdIzI,1026 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_EXTENSIONS.rst,sha256=fAldzUiUUPOcSUjjZJDSki_F1LG55wd0LLlak4lq4Mo,799 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_INCLUDE_WHAT_YOU_USE.rst,sha256=Qr8RNBbGPwc78l73YzTBiH7l0MzrBpiYHAKBYWPE1ek,1099 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst,sha256=VDTJXmNd9cm5L1UsiDuh2cyL-el2zTacJ7AlvtcWLg4,735 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_STANDARD.rst,sha256=BvSWdg4nhCfn1zXV3fYwvZS3ehAKB09Kk6_shdBLTc4,1313 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst,sha256=0k2gJIwXw3ypcmaIGlMIJh0OiB_-1bhLbVoWerBr0Tw,1400 +cmake/data/share/cmake-3.31/Help/prop_tgt/LANG_VISIBILITY_PRESET.rst,sha256=oJ-XehECD3ZmqDoFzGXXirjicn2Lvq-25BL7qfGXIpU,495 +cmake/data/share/cmake-3.31/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst,sha256=FVYE8M0E4rX6-W724I2-Gv6gt1ixmQp94Lso1uzySNA,339 +cmake/data/share/cmake-3.31/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst,sha256=BIEW4NFfVvMPzAbM-kmzikbvFmVL9MEfzpnFIlqHmSY,701 +cmake/data/share/cmake-3.31/Help/prop_tgt/LIBRARY_OUTPUT_NAME.rst,sha256=FYQXuTBOCighxTedn8_8w89Wqo4xeV0k63zh6IqV3Cg,234 +cmake/data/share/cmake-3.31/Help/prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG.rst,sha256=e-cq6Z8ClshstHwU0zzgPcofyu01ABajBt1qk_5uvUs,249 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINKER_LANGUAGE.rst,sha256=fEN36OnNwGsnRhX67YkedCAxqlAMGc-GGyJu96qJbYc,689 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINKER_TYPE.rst,sha256=7Ciek4judJtoY9GEZAemOcxWFTAFMW8h4K4yom1Qyak,961 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_DEPENDS.rst,sha256=86jGDaGTK3cxwiyKR4DwH-wtlhgSmz4agtkAxFlLPKE,722 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_DEPENDS_NO_SHARED.rst,sha256=d-SMUJDgVBU1r9Vvgpu6PWZq3FDjW1-iyGgJzIspnzk,604 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_DIRECTORIES.rst,sha256=10fhjFvQ7u6daEgIKBKR_zvkYslI6BxCZ0fK9kybm2E,824 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_FLAGS.rst,sha256=A6xXkw1Uk4O1bwWQa5lUaWyRy1q2HMah9ooU1Y3i6O4,597 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_FLAGS_CONFIG.rst,sha256=WQ31lWLsYYrvehrzXazkdolwe7_Lou15NAyCbeF962w,292 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_INTERFACE_LIBRARIES.rst,sha256=d5gZjv1Kim20GgnPFZaseihr_kauqnYpViIteaGzrzU,1423 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_INTERFACE_LIBRARIES_CONFIG.rst,sha256=79X8jSZ2RXTbU27ZAWYgyCEM9kHiVx1xTOiVWRBlPPs,716 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY.rst,sha256=6zUULDMK01G3pJb0KuWnDORdqSxFdDTb8JIeVCIKI4s,587 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY_CONFIG.rst,sha256=vpNaaTy9UD56kcr1giChm22rcz-z3rUIG6oukHgTWvY,328 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_LIBRARIES.rst,sha256=Yz-4sI0l8_K3GgH7Qd_EbQIdrDuFqZBLF3JG2m9HsF4,1503 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_LIBRARIES_INDIRECTION.txt,sha256=q26LeO1-uu_zE5Iyzi-gX6YbtXduHpCPmfdXKKTEoZM,640 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_LIBRARIES_ONLY_TARGETS.rst,sha256=-N3ZcelhWO6_7e2TYR3MnpmQUmHB5Vu7jOQl5B9VfnE,2271 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_LIBRARIES_STRATEGY.rst,sha256=w-jhazBAFJvqEJpatdda9v6D26n88_l6uex326LOaac,3668 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_LIBRARY_OVERRIDE.rst,sha256=yLrVqcEvDDYmO_fS732SM4W0rS7ZNPezPiR-hAoUQ6k,2768 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_LIBRARY_OVERRIDE_LIBRARY.rst,sha256=ej-YxHLoNhZC7hMOF5L01haFGIm_WMg3g1iUG00jN8c,2144 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_OPTIONS.rst,sha256=RiubAje7PY-6h3StfOUmjcJflmcf3fbvs6iZEIU2c8U,1384 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_SEARCH_END_STATIC.rst,sha256=VcmOafAxNaCY1QhkOWwEYqgngpFsFOl0omyW_lKLcZ4,838 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_SEARCH_START_STATIC.rst,sha256=VFoR8NCAFSk3VpJ1_K9b96MQskXzUnDRJx8HviSVfpE,868 +cmake/data/share/cmake-3.31/Help/prop_tgt/LINK_WHAT_YOU_USE.rst,sha256=U1SZ7EsHU73RI3IvTxlxSNEwQ2u5PPgJacz1zOp4D9k,950 +cmake/data/share/cmake-3.31/Help/prop_tgt/LOCATION.rst,sha256=O-XbHpmXTIjDYR19wCs2CGBv-JYD3LbKivtV1kz-LS0,1382 +cmake/data/share/cmake-3.31/Help/prop_tgt/LOCATION_CONFIG.rst,sha256=CGkY6s_3ZaEJKjO1MXIZcM70wnWFhemBEZDxZq0WKDQ,940 +cmake/data/share/cmake-3.31/Help/prop_tgt/MACHO_COMPATIBILITY_VERSION.rst,sha256=l4eG630i7VvdlG0ky7OuhkbCHZktGjwltfzYe87-6ZM,1344 +cmake/data/share/cmake-3.31/Help/prop_tgt/MACHO_CURRENT_VERSION.rst,sha256=7sDZmRQR6M4vtXUf5hljQwsNUXmeFhGzfzRDt4APJ1w,1326 +cmake/data/share/cmake-3.31/Help/prop_tgt/MACOSX_BUNDLE.rst,sha256=SJzp90FP_nlL3BC_GVktavKzrEc0RmUi1hulJ5yW6dw,561 +cmake/data/share/cmake-3.31/Help/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.rst,sha256=HHnqeEqgSqdmdGGpUQUjUdGJyXd2CrqfxOpwjiXE-tU,1368 +cmake/data/share/cmake-3.31/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst,sha256=z8o9IqyZjlDAtLs7KWRumj3qPxmVfcc2CSWQ_zmRHsw,1186 +cmake/data/share/cmake-3.31/Help/prop_tgt/MACOSX_RPATH.rst,sha256=jstEMFAaUYrOLtGukY3TrR9ZfvLITJELudFO4vCzn1I,907 +cmake/data/share/cmake-3.31/Help/prop_tgt/MACOS_IMPORT_FILES.txt,sha256=434PlZPRHiKDdoY1jolucqHWSZJ4AIQgGl1j_5bPeDs,459 +cmake/data/share/cmake-3.31/Help/prop_tgt/MANUALLY_ADDED_DEPENDENCIES.rst,sha256=LvJQ3vmmeH_K7U5jGJsA3wfOKPI5Pw1TeD2Gyq123cA,281 +cmake/data/share/cmake-3.31/Help/prop_tgt/MAP_IMPORTED_CONFIG_CONFIG.rst,sha256=iZxeHAT-MthjHRX_aOyHc9HSIu3gkWzw-Js0LsGRSYQ,2160 +cmake/data/share/cmake-3.31/Help/prop_tgt/MSVC_DEBUG_INFORMATION_FORMAT-VALUES.txt,sha256=31hIzgT_oyo29oGogBvMmBAi9Aavzyu3oLtLITMANtQ,714 +cmake/data/share/cmake-3.31/Help/prop_tgt/MSVC_DEBUG_INFORMATION_FORMAT.rst,sha256=gmyko5goZABqOAuC8GJ_GalXwsRB7NBBy2y9BGh6R1w,1247 +cmake/data/share/cmake-3.31/Help/prop_tgt/MSVC_RUNTIME_LIBRARY-VALUES.txt,sha256=SyKW_hzm4CXXSaEcMFGSvXGAvKJ_coZ16aY19lWU000,949 +cmake/data/share/cmake-3.31/Help/prop_tgt/MSVC_RUNTIME_LIBRARY.rst,sha256=pf7A9dNlman8rJ79j5av_6CBqIP8P1p9C3M5TW33Dz8,1147 +cmake/data/share/cmake-3.31/Help/prop_tgt/NAME.rst,sha256=GnZphkooY1-p0nugkcUenjx-yOocdJmDIICBiRKU2ZQ,97 +cmake/data/share/cmake-3.31/Help/prop_tgt/NO_SONAME.rst,sha256=oyhqUBhLg-PTjn_dU1m7R03d4db_27aojXic9kSgQDw,659 +cmake/data/share/cmake-3.31/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst,sha256=LqBik5gtinW9-0WBmMQ49w_gsVVKZDzUi8-fgHIQrPw,1392 +cmake/data/share/cmake-3.31/Help/prop_tgt/OBJCXX_EXTENSIONS.rst,sha256=Y5nYqrOO7T7X7w0FnFJnk-WPuxVgyc4I3KrFITw7XZE,1010 +cmake/data/share/cmake-3.31/Help/prop_tgt/OBJCXX_STANDARD.rst,sha256=ozN9smF9ysIbd082vYL_vJ6CPtHsIpmYbwhcywXzbE0,1777 +cmake/data/share/cmake-3.31/Help/prop_tgt/OBJCXX_STANDARD_REQUIRED.rst,sha256=dtzESZ1-7V2LowCka1kKbW7zLfzDHiF71CHwjVxH-l0,920 +cmake/data/share/cmake-3.31/Help/prop_tgt/OBJC_EXTENSIONS.rst,sha256=az1jQuulJDZC6tZeXm4YS-qXSYSFV09gQuPbg4kIzkA,988 +cmake/data/share/cmake-3.31/Help/prop_tgt/OBJC_STANDARD.rst,sha256=sNL4G_rCb6ttBu8hUauJCcgRgg5fxBQB-5rZQGCMKbo,1607 +cmake/data/share/cmake-3.31/Help/prop_tgt/OBJC_STANDARD_REQUIRED.rst,sha256=6E99iv6-o-daIDYfKDnKRJmW2xjgIXBFGkf3Lcx9sG8,902 +cmake/data/share/cmake-3.31/Help/prop_tgt/OPTIMIZE_DEPENDENCIES.rst,sha256=F3mxofoZ0xqEF_c5Uc2xhaExJBjSGgI0PmM7xZExNto,2263 +cmake/data/share/cmake-3.31/Help/prop_tgt/OSX_ARCHITECTURES.rst,sha256=ONILNOF_urtA4uwOJTp1DHnAI_lDexl4bHQ1EaQR0l8,501 +cmake/data/share/cmake-3.31/Help/prop_tgt/OSX_ARCHITECTURES_CONFIG.rst,sha256=Q0HbxAKYA0uYUfPSREpVyAIPY8ZRA31amQ7MhSBs1G0,209 +cmake/data/share/cmake-3.31/Help/prop_tgt/OUTPUT_NAME.rst,sha256=c7B6OW4im2APjWTYWJesxz67bfEBlfSrnKRUNoNiT54,695 +cmake/data/share/cmake-3.31/Help/prop_tgt/OUTPUT_NAME_CONFIG.rst,sha256=ugY8W_IzqAJyCH8VVwuNcW-mSnK3lYN-YdqMcyeD-Mo,176 +cmake/data/share/cmake-3.31/Help/prop_tgt/PCH_INSTANTIATE_TEMPLATES.rst,sha256=BLqCuL-5nMYk1yMrQHR2IaKUdhUdzn6NBkVbVQwJr4s,532 +cmake/data/share/cmake-3.31/Help/prop_tgt/PCH_WARN_INVALID.rst,sha256=iUy6NicYlin05uZT-Y5b_oycAAGouo0DK-EGP4UoKdE,451 +cmake/data/share/cmake-3.31/Help/prop_tgt/PDB_NAME.rst,sha256=t7BfWHa1Js-PDzdfTCwtMJDmuqiHalol2AfpV66tFKo,396 +cmake/data/share/cmake-3.31/Help/prop_tgt/PDB_NAME_CONFIG.rst,sha256=Qx0ja80EEBrkVbfH4eJcmCNcK4z7ZjTkXrVIDhQAy_U,338 +cmake/data/share/cmake-3.31/Help/prop_tgt/PDB_NOTE.txt,sha256=bmok0q_5ukAbCPgOf-i4RmIYHjCj9G4qBBO2qWnEuJk,441 +cmake/data/share/cmake-3.31/Help/prop_tgt/PDB_OUTPUT_DIRECTORY.rst,sha256=2chB-FLCXrh6ktQ_H5imZMZthFX1pOktGS6A15v-qxA,734 +cmake/data/share/cmake-3.31/Help/prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG.rst,sha256=KiGpQwIaWj-pXnlcisYuqKqO7g9pAx84ZRojHwDxz5c,815 +cmake/data/share/cmake-3.31/Help/prop_tgt/POSITION_INDEPENDENT_CODE.rst,sha256=U3SEQzX-B_qCZbKsZ7opRuUXIwEhxO7t1ndgivNiuxU,630 +cmake/data/share/cmake-3.31/Help/prop_tgt/POST_INSTALL_SCRIPT.rst,sha256=ohKDSYj6nLFrTzvDoJYmov55xFcLA0f8hRFx51pCOeQ,367 +cmake/data/share/cmake-3.31/Help/prop_tgt/PRECOMPILE_HEADERS.rst,sha256=9nv3NFChqymllTDl30wjJ18bRZZOkuLl6NmnjWRboDY,412 +cmake/data/share/cmake-3.31/Help/prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM.rst,sha256=gwt_e2cHu4h8__yFQh449_LdOJjxdAbShou0MZAtw0c,257 +cmake/data/share/cmake-3.31/Help/prop_tgt/PREFIX.rst,sha256=WHIzdfp-Ba50MZ4Jn4kEGwa6wRNvmLzxPn2yIhSZTD4,146 +cmake/data/share/cmake-3.31/Help/prop_tgt/PRE_INSTALL_SCRIPT.rst,sha256=gMpORLQrjZOo4x705x0f9NEHRQEI54ap_u2gEyajwqc,365 +cmake/data/share/cmake-3.31/Help/prop_tgt/PRIVATE_HEADER.rst,sha256=_PCEK92GiDyH41gzRTInBCwuwtsyNnO1Yr4fYFJldg4,523 +cmake/data/share/cmake-3.31/Help/prop_tgt/PROJECT_LABEL.rst,sha256=bWxoUop2sl8i3s9ImtJLtaW2jRxtNXpq8kGsAxQIa5I,144 +cmake/data/share/cmake-3.31/Help/prop_tgt/PUBLIC_HEADER.rst,sha256=0zdOk4id9zWW-OaH3H1rXSuP2t5_AEnoYCxJ5ntu4FI,516 +cmake/data/share/cmake-3.31/Help/prop_tgt/RESOURCE.rst,sha256=bLjNeKP81njYwwrmGUu_O_BvU3oxfWOLsipEkTC7c0I,1514 +cmake/data/share/cmake-3.31/Help/prop_tgt/RULE_LAUNCH_COMPILE.rst,sha256=K95S1th4M1fuBjKuF6eouQSV5ncX3B6chYOgZp-jP0o,492 +cmake/data/share/cmake-3.31/Help/prop_tgt/RULE_LAUNCH_CUSTOM.rst,sha256=RBbdDTf74fQV-Xhzrr0VVgP3OVAd-pw9IK4iUg-jTEw,195 +cmake/data/share/cmake-3.31/Help/prop_tgt/RULE_LAUNCH_LINK.rst,sha256=iPE1FiaUnb6MdmoBJ_jg4nW8HWbAVGc9ALTqPdVRas4,476 +cmake/data/share/cmake-3.31/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst,sha256=8kTE_2MJa8F3VN0slQfpX12wYN6T8fDY60FKNgugRUA,339 +cmake/data/share/cmake-3.31/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst,sha256=EnYwzQ515CbP2jtIfD7t8P2fhmP0ncFR95SlkzsW_dM,701 +cmake/data/share/cmake-3.31/Help/prop_tgt/RUNTIME_OUTPUT_NAME.rst,sha256=B4yKhj-4CTt1D9MNIhTm9EuyjYP_x_zOCs8TyWZ1l3Q,234 +cmake/data/share/cmake-3.31/Help/prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG.rst,sha256=wx7-t6UK0vnpeaECJ9zK_hMeCy7Tfek-GW_aXyfzrhI,249 +cmake/data/share/cmake-3.31/Help/prop_tgt/SKIP_BUILD_RPATH.rst,sha256=UGa16msD4nc6JplLjK6oP4l4z8aVYF6toVbhPyI55g0,406 +cmake/data/share/cmake-3.31/Help/prop_tgt/SOURCES.rst,sha256=IimZ8WuKGF37sJ5-0XURdCJvpa4OfhyWNhtGsC61j6M,1592 +cmake/data/share/cmake-3.31/Help/prop_tgt/SOURCE_DIR.rst,sha256=l5AnudzQDyN5aTN-w08iJubBll07LzMJt2Jqe-9ifII,191 +cmake/data/share/cmake-3.31/Help/prop_tgt/SOVERSION.rst,sha256=YXBwJOFkg_Xk9uLKef_wng6KB-f9aKHqgLg7opEjIT4,1587 +cmake/data/share/cmake-3.31/Help/prop_tgt/STATIC_LIBRARY_FLAGS.rst,sha256=E4uqjE_tz1CzOYt6nGeFjECdc55rzUX6ju5zhEKj9Gw,650 +cmake/data/share/cmake-3.31/Help/prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG.rst,sha256=ilmgJ6pn1bdQrDORE_0lCBFf7sM1x5eGj2fJ74gNQhk,322 +cmake/data/share/cmake-3.31/Help/prop_tgt/STATIC_LIBRARY_OPTIONS.rst,sha256=M2N-iQYj1Bx4TuU7b12Q8sSnG-7PcJb-jyWdLG4MxJc,890 +cmake/data/share/cmake-3.31/Help/prop_tgt/SUFFIX.rst,sha256=h-73BG2YJ9fHtkynxiEremF1UI4r_0wGaQP-OU9P4Wo,185 +cmake/data/share/cmake-3.31/Help/prop_tgt/SYSTEM.rst,sha256=0VrlKFKfPxs0o0dvgiFxxQNOZWdlXaCkH8Il6aD_WpI,1158 +cmake/data/share/cmake-3.31/Help/prop_tgt/Swift_COMPILATION_MODE-VALUES.txt,sha256=1J1Q6RLnIIa4D1HrGkumji0zdUPlBIaLWraOjOJRMbs,1013 +cmake/data/share/cmake-3.31/Help/prop_tgt/Swift_COMPILATION_MODE.rst,sha256=xt9PRHaSJfgK-xvqvD3oHE9E0SQU3AB8K_GLFMhjiw8,1086 +cmake/data/share/cmake-3.31/Help/prop_tgt/Swift_DEPENDENCIES_FILE.rst,sha256=jN1XSofmwbqVDXlsOIouFtUu1I4_PuU-BIzSWbBDJSE,227 +cmake/data/share/cmake-3.31/Help/prop_tgt/Swift_LANGUAGE_VERSION.rst,sha256=yuhgR6uVIvlxXJ1dq1KMCqA0BNoH3Q1txkp4Gk6wF2I,310 +cmake/data/share/cmake-3.31/Help/prop_tgt/Swift_MODULE_DIRECTORY.rst,sha256=LoqgkWJzQp4xVbyWVPxDzDm9iGi0hQKbkeZakYBtr8k,1000 +cmake/data/share/cmake-3.31/Help/prop_tgt/Swift_MODULE_NAME.rst,sha256=aV1BRIMIYe3gnbkTMkVtGZcT8MRlcoI5fHoFmE95LJI,159 +cmake/data/share/cmake-3.31/Help/prop_tgt/TEST_LAUNCHER.rst,sha256=1bH9zj-AXwRGK7fmhrKlKi1ek-Ggd9ko-3PArOA0_c4,780 +cmake/data/share/cmake-3.31/Help/prop_tgt/TRANSITIVE_COMPILE_PROPERTIES.rst,sha256=QEbXAPJDjh0nuZ5p1J36LYreJnrDEZHdtb4XwH-59N0,824 +cmake/data/share/cmake-3.31/Help/prop_tgt/TRANSITIVE_LINK_PROPERTIES.rst,sha256=xz_hB7vnA07FcTprB-dfZ_xQ-UbO-O_nmJLM2qFUwkc,822 +cmake/data/share/cmake-3.31/Help/prop_tgt/TYPE.rst,sha256=LjhrRq7ylb0--o62L2_Y_Nqe_FRVcTtDIANeyUFg_bA,284 +cmake/data/share/cmake-3.31/Help/prop_tgt/UNITY_BUILD.rst,sha256=hy-2pLqOvir6Ua9zvkth6fftpzIxznKJdxKU_no4iyU,4330 +cmake/data/share/cmake-3.31/Help/prop_tgt/UNITY_BUILD_BATCH_SIZE.rst,sha256=3lcDPaCsNj_wE5yNvYjYzzXPwMuhTHKYgYr_SrUyDQg,1255 +cmake/data/share/cmake-3.31/Help/prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE.rst,sha256=i4LsmpqAH7ieTatfpGHq0pCOW3lz-NflrkCWGyXQZto,502 +cmake/data/share/cmake-3.31/Help/prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE.rst,sha256=nhfPOJHPrvgaY2mYEebTHdHua--n4PT_P5V-gTYzorU,509 +cmake/data/share/cmake-3.31/Help/prop_tgt/UNITY_BUILD_MODE.rst,sha256=9XJ5i7w6m7knFCjMlal5T05FkkUFQVpREQlY8RyLKZE,1898 +cmake/data/share/cmake-3.31/Help/prop_tgt/UNITY_BUILD_UNIQUE_ID.rst,sha256=lis5JK_SVw-nuZ3Lyi5J2uD0dSlE504HqGEZiJXTPxE,1699 +cmake/data/share/cmake-3.31/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst,sha256=glm3v9bkoMiOVwa-JVPHiWI9_Unn0QOGTMeeQOFIgh0,2053 +cmake/data/share/cmake-3.31/Help/prop_tgt/VERSION.rst,sha256=c2zveU4PDqR1oe2IOWnGVPWYQ2tjD5fQLPqLQH6vDRg,1680 +cmake/data/share/cmake-3.31/Help/prop_tgt/VERSION_SOVERSION_EXAMPLE.txt,sha256=9pnhADJcggwrjP38oXyaTOVRWYSPJBFMYlTPz-0dLaM,342 +cmake/data/share/cmake-3.31/Help/prop_tgt/VISIBILITY_INLINES_HIDDEN.rst,sha256=RqI4tGssFpH0AKw4jLrdTf5vKKckqj07u9A1gtFip0I,565 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst,sha256=6pZueRDlLMBBOmYeLa4TCn-8v1tf7XmGXawzSUmZqS8,493 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DEBUGGER_COMMAND.rst,sha256=48lU7W_PJlMCLbTUblyDqrj0_u4jrJKQBaRNjV6j6QU,536 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS.rst,sha256=tmIGxZENu-chQjd3cUBoUW73vNO_YNnP_QNHeWduBjc,590 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DEBUGGER_ENVIRONMENT.rst,sha256=RXAu4-CD4c8a1DMbodRCBPqPg3-pYFS6seG6bJzrydk,556 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY.rst,sha256=_NCnypOE_L5LHOUWraA1OnNZMZCmj7nW_9-79fH7nPk,584 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION.rst,sha256=KlF0tKuShhVOLaTzYqzCowsJZP1GCmnFMHDXh1PTVsc,493 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DOTNET_DOCUMENTATION_FILE.rst,sha256=plbsPQ22WsA5c-uE-p6s71fQFBhZG0MibtnDQ4oFVoQ,187 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname.rst,sha256=S2DENZNsq3DR1tBn4j_JKMWPcUnPaqD1GoMXP8Sgr6s,573 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DOTNET_REFERENCES.rst,sha256=3MaB-KvUBMAHEF7wqm24-rBhSc7MbmjkWuS4GxCJEqQ,226 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL.rst,sha256=7HSW-oxtGClTQaLbdkabBUfCHAUAuGZGIxO2sHNtfOg,276 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DOTNET_REFERENCE_refname.rst,sha256=2opGSwE_gS2M_HMejTD45Fl9R20xzbL96Aghvs4ztrU,430 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DOTNET_STARTUP_OBJECT.rst,sha256=7R7Ds3tdjyo6d83PgRz_RBh_-QE-GOVTwFY5L2pqJMU,762 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION.rst,sha256=_0Gd4h8n0_M77J1WqrybFprS2UzW7t2iNFrxvUzC9hE,356 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_DPI_AWARE.rst,sha256=dnTynZZbXM-v5i5_bnKbGuH-hlg2h1zkrD-QpSNLiCQ,360 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_FILTER_PROPS.rst,sha256=3JV0aagnIMs42ZonT_8iB-q7JE5oN9S58b6AY0h1_Ic,257 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst,sha256=1rtGRHSvxJGNis66UQw3Qt4kVOdo_Q6iEDUU2u7rKDM,464 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_GLOBAL_KEYWORD.rst,sha256=4AA1rNNL8xglTUYmKko0jSQ5cV0Ivb3JknGKP2Zc0EI,283 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_GLOBAL_PROJECT_TYPES.rst,sha256=7ZMNhPEi2Ik-PeeYwaUcxRekRixR4hFc760UEOrCNi4,403 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_GLOBAL_ROOTNAMESPACE.rst,sha256=ImLeMOmt9fPBTdj5JmB4yLZzTlzKXXjDRTSRuD9bgKg,216 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_GLOBAL_variable.rst,sha256=33qkGR56IFzOMPHWbfNuZ1djEHJ5iKx3lSFS0MHH-bM,368 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_IOT_EXTENSIONS_VERSION.rst,sha256=jP5gUSx0V-LzLryaWrBd2nLcN7zblHCUBnVKmOYD4qc,473 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_IOT_STARTUP_TASK.rst,sha256=98WoPywfhcnByB1VX-ARStAx0_wuJvPTIK6MteZQBKc,207 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_JUST_MY_CODE_DEBUGGING.rst,sha256=hUCX6fE91z3M4HZxtZoXq0TK0zB6gkXqlIp2G_RPtJs,391 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_KEYWORD.rst,sha256=hdpZAx42HDtcty51ihv3Dny6SiK8ofWAG5fVC_oRNgs,319 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION.rst,sha256=dvKuzvT9fxBNIP2bKjkNBcYDaMhEOM_aRYDWCV85m2Y,488 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_NO_COMPILE_BATCHING.rst,sha256=VEv03AXhbKowbQozND72LPzF3Np63fFeEQdXGp0eXVI,842 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_NO_SOLUTION_DEPLOY.rst,sha256=0u634sbZwLaYBIyud0_SEjuEnmCDxMS7pjBrmR08jNQ,1532 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_PACKAGE_REFERENCES.rst,sha256=jR1OeloAgM2vxqOMsTwUahpFk1wdx5p2EQYVWeWx7KY,419 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_PLATFORM_TOOLSET.rst,sha256=PMOkG3pmO7U04yfPK06CBfYl5FmOpGIXbnJtghjk_Dc,378 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_PROJECT_IMPORT.rst,sha256=xi4DbkrczM_cgmKm04jlZfkBHPFKOsLVPqYxL-vAYPY,325 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_SCC_AUXPATH.rst,sha256=AfI74RSS4qCfcNPXC9i12AjjhzyMqTt2mzclb8JEusM,153 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_SCC_LOCALPATH.rst,sha256=PIQpNKfTmoFNxLm3HmTGoM1Vm_w3mF0O2y03QNb3wYA,162 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_SCC_PROJECTNAME.rst,sha256=3w7V9haxHl8KtvSnXZbyK5a6gDz-RNWswfo1po5q4Vw,165 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_SCC_PROVIDER.rst,sha256=7ASifnn-rVrrKbYYNKNGuV5Gaam4j0niLC8GBoYVpOY,156 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_SDK_REFERENCES.rst,sha256=I2AD-LOCQ_Y60IEKRDRQcp1g-mWBsKWOU9d5MDjWwD8,284 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst,sha256=IfA1NLpWAoDkARIb2TzoiWZW52SxTSVQVBZQDL4uyFg,744 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst,sha256=dvcr8-DjUuzTyCGsn7-9cc44-aqaU_SSIHRW9ruPJdk,617 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_USER_PROPS.rst,sha256=FzJeF9ZXRVMDSSiGBFy6iaL-HJi3MDwXI4VjK87wTIQ,511 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_USE_DEBUG_LIBRARIES-PURPOSE.txt,sha256=nisWpADsarWYVBL8zbB-CXXSYIw0Cc2YgoArbRbo1QE,1177 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_USE_DEBUG_LIBRARIES.rst,sha256=75T2nNkcdnQ8Z-4RaWe7kOBsJB27zCufZMbJn_p6VY0,988 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst,sha256=L1s7aQb3JZYxg0HeSheydHbVbY8rWhOiVDZEEawk354,686 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_WINRT_COMPONENT.rst,sha256=OR24hhOmdn59HKPcsjsChs0uNNQmZSW59UZUv8CK47M,449 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_WINRT_EXTENSIONS.rst,sha256=Muc7BW7ZFbf9FQW3koVTLWLj2qcbWo9rwXLrvdbgp_Y,168 +cmake/data/share/cmake-3.31/Help/prop_tgt/VS_WINRT_REFERENCES.rst,sha256=HP6kCkhjiBPG0t8I-Phh-_BDwdqGsWFMgUjEyftqjkk,233 +cmake/data/share/cmake-3.31/Help/prop_tgt/WATCOM_RUNTIME_LIBRARY-VALUES.txt,sha256=giTRaBZ0NUixcHm20ANzgnTm20OekSK-XHLN-84C0Ug,868 +cmake/data/share/cmake-3.31/Help/prop_tgt/WATCOM_RUNTIME_LIBRARY.rst,sha256=hHEzjHvh-gV0qExolXin-7Xsd_45I2-8HBuYF_H9xIo,990 +cmake/data/share/cmake-3.31/Help/prop_tgt/WIN32_EXECUTABLE.rst,sha256=Q_mU19dAKW-oErpmpmaldqNbO7z_Pxq25I-E7bd9w2Y,719 +cmake/data/share/cmake-3.31/Help/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.rst,sha256=-AWdLAyPEfofPRZSWgPd-kkQ1KNPTtV7HLMbuTjwbwc,1403 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_ATTRIBUTE_an-attribute.rst,sha256=PmF9Z1U-TPaWmqv-y9Xu3doEJ0YknqsSt62fecOHUuc,969 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY.rst,sha256=EzUbCYEh5GyZm533XC-ooWFjLdNxmYarE9RrPepMnU0,470 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY.rst,sha256=Hi7rND9tVoVXUMP-RcUgPIMDEAu6cEAzdSFyzuPZy0Q,466 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_EMBED_type.rst,sha256=T_mbdutSf7YR9SuAsszKKro32l-gQQuH2OfmNRuWsnk,2680 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst,sha256=p4vtW9G_UIbj0J5It9BZxCXzmjzC4_43vUO78WvlBZ8,636 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_EMBED_type_PATH.rst,sha256=IgdcMkmeSOI4Vd1CHyEu-M7X_wI--3OGUveEod-j0sE,713 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst,sha256=_anu06F7oVJFf0UVQD6g208HbjtV7FxgujV6CJA-ZOI,905 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst,sha256=Zkl22yUnhE7tcmPWklAiX7tOW0Ej6EDpbqTnjLEobEk,285 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst,sha256=TzNnTud1Dc98Nr0e3p0AWEgQ_JxfUnbWD2qMMefNLrM,1949 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_LINK_BUILD_PHASE_MODE.rst,sha256=mtgsMrFZLdlkq4Is5HZSLPWY4vF3ij4XRKBxHJAKPWE,2239 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst,sha256=xROBepJ7FEOda1rZuUjxLjaslw0m24SY5Wk4fRsMA9s,274 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst,sha256=3Hgp0moYylubi9GP6EqPOpkYmSU075IBgObSPrw_oT4,461 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst,sha256=xPh2sJhKr0RflGugBafL5UUKb8uwrbvFD5z8hozKY9E,527 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst,sha256=vy7fztrdou3P4gWA6v8d1cnlMyHJ7rpU4vYHS8APEeA,374 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst,sha256=IiT_0v2p8aXfHOlFxFvgno0iYuu85nOgOzSOD-3ggj0,247 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst,sha256=SF5aS_nuw1146joBk6qwOGX48EH7v-h14XmNAOD9PjQ,516 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst,sha256=VXEmptEQavIc1ndEIsCe4CnaSBqOUQJ3VXr7LQUM2qQ,498 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst,sha256=iU5LT2zjd_SPdPrEs13PeRd0L8D7Ywwy_0Vs-ori_bQ,477 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst,sha256=NCNwlTQRY8gmaj1RgJQD5Rf6RXKnSinRf5qfkHfFi7U,489 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ENABLE_GPU_API_VALIDATION.rst,sha256=o_6o5c6AKxf4w9ZzVq0YVx-NVOXE5A73Fea1Ewad26k,486 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE.rst,sha256=JJRXghSUonmG40k3RLpHXd1Ly-R38Pnaq1kZrDRvsJo,537 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION.rst,sha256=FOfY5-ke_xQUd8JLGuTGpOBydfiL-S0uzxQunbaL2yQ,498 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst,sha256=24-ASIbCA9Y7LZFKeLQSJ-891VShMoLBw23DaoDRHm4,450 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst,sha256=4P6BEBCjigw_9qiDyuG4CCpM-e8jQ1F9nBt3lmN_Z4Q,373 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst,sha256=Xsxnror5sS-sAgzFiLMeKue7-W7yISGABHgAyNbxQyw,446 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_LAUNCH_CONFIGURATION.rst,sha256=YXqsIphUxUTeRNEczPv6yfMmW4B32OD32_g-MiI0kvI,419 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_LAUNCH_MODE.rst,sha256=V2bVkFhGN2VRdNrcUPuEL4IwYByf9LLr01utS84jOrM,555 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst,sha256=jbNohTbpLcmzBt6Ve4aYhizqArvqtSscc0GiS9KLit4,515 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst,sha256=MthoEjBCSUWasbGKVEQUta0wwEBu37f6A-NN938HvpM,465 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst,sha256=mZXG0PrCm8ewb6lARTglPk9JRVJrpaF_v7UvY_Jrvg8,455 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst,sha256=WeTeSN6oFICuGEmUhvZggvW2HkRFRfJc0goC-vhXHH0,441 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst,sha256=1XwqxuxbJ1rWniSPzQPNO8-AqHxMh8DlZBHPofLrfdc,457 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst,sha256=w-jQUXJwFdjGXGvZtXi5mk01kTSUcSr7-HvV4vb_e5g,490 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst,sha256=16zkv2k9QRopxNMbk9ChNRmuRrWb6HG_L6TQyZbJhnQ,508 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst,sha256=QPQPg4qnEz4HRQ1wrdvkKrcQNP8Hty3sdNe0rNeb1uw,550 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst,sha256=QV3JZIv1GSXiIMKLYjhs9QluWfVmlP_FWt-FGiGZuw8,533 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst,sha256=fUcmssLDssLL5eKNKsAWUob6xoz685E-REyG5UWk9SI,452 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCODE_XCCONFIG.rst,sha256=1dEIuE0_ygnPtvXFYRPKcrZBmYK6xVrPUOe_S8p6wIo,435 +cmake/data/share/cmake-3.31/Help/prop_tgt/XCTEST.rst,sha256=O71NOFDjIXUb87RYEUuOBa83B3vxj0K4vyEQnop8pow,431 +cmake/data/share/cmake-3.31/Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt,sha256=HqDcWu8d7vRPINpwJh9Toig1YsV6S5vJ3EiYNaI9iy0,602 +cmake/data/share/cmake-3.31/Help/prop_tgt/XXX_OUTPUT_NAME.txt,sha256=j0NtFqeNlcj7NnBQMEtJLfPtx9DACu41fyvmOalAEpI,186 +cmake/data/share/cmake-3.31/Help/release/3.0.rst,sha256=GWVhm2reiRnT15dXhgMha-oHNkVbkcUexFmDoEZA9pI,19945 +cmake/data/share/cmake-3.31/Help/release/3.1.rst,sha256=WpCxXLwX11D-fKxssDg-Ln8hk7a3syUKPQCdm20WWN0,16585 +cmake/data/share/cmake-3.31/Help/release/3.10.rst,sha256=ZSZWnAlnPXJfvDEuBwK3NjkriXTzCEXqKP3W8S8oFLs,11163 +cmake/data/share/cmake-3.31/Help/release/3.11.rst,sha256=WYvs0IFLFAO-vVfqb2aFLB4vQOd_ojxvyR4lN7oDFR8,12817 +cmake/data/share/cmake-3.31/Help/release/3.12.rst,sha256=0XiqOq6GYXx-AZn8XtHvyuuXyySUdiuXmaY6tW5dsG8,11848 +cmake/data/share/cmake-3.31/Help/release/3.13.rst,sha256=9jfNx0kjafC0Rb_aU8qpt5B748FNROJUMic8bPKTiw8,10963 +cmake/data/share/cmake-3.31/Help/release/3.14.rst,sha256=cw2gBKs7CdmNQxOH3v6_929S80DDrU4GuGW_Z-oOynE,18156 +cmake/data/share/cmake-3.31/Help/release/3.15.rst,sha256=8J8ergKexWpAfAsT1twPhW8Apx7kfc0GDTI2WkIEGlo,15209 +cmake/data/share/cmake-3.31/Help/release/3.16.rst,sha256=knvPtETeP8oFmvJb22e1ChRV1_d-2FsTrvhfGrysWis,13406 +cmake/data/share/cmake-3.31/Help/release/3.17.rst,sha256=hSd4uAQwLGMnbjGpd1pT9Pw224Rz6IaDEN1agv5h34k,14154 +cmake/data/share/cmake-3.31/Help/release/3.18.rst,sha256=zbHTNABoPpL85OL5Fw4OsxXFVHDKDa_HgTi5vSnc-NM,14574 +cmake/data/share/cmake-3.31/Help/release/3.19.rst,sha256=h7BQRJUvZ2NMhqt-LIRUH9HTzYTozpCYCTrH4v7Hg7o,16727 +cmake/data/share/cmake-3.31/Help/release/3.2.rst,sha256=OmTgTWVvstAg5KFagUnfyzHOMjq0pZcsl9RN8UHIUqk,11424 +cmake/data/share/cmake-3.31/Help/release/3.20.rst,sha256=kF3Loy93PdhQ5usl2pasU3WixtsvJ4Ihty71ty3Qaws,14680 +cmake/data/share/cmake-3.31/Help/release/3.21.rst,sha256=aqSdquJBjU0w3-q9dbHiDl8R1_s8v-PZIfYQQ8GPAl4,12808 +cmake/data/share/cmake-3.31/Help/release/3.22.rst,sha256=XgKhWfG0K5b3-60PtHSbrzjazPgTqmoYhIahcZC2eVI,6229 +cmake/data/share/cmake-3.31/Help/release/3.23.rst,sha256=wY-r5S4CCZ1wmBEDOwUjlqu6nJ1UFmId8Oo071Jh1GE,13022 +cmake/data/share/cmake-3.31/Help/release/3.24.rst,sha256=ye_Xcrp23vxb9e4oGu8HbMf9bnfFmzPZmGU9eO0WzYs,15484 +cmake/data/share/cmake-3.31/Help/release/3.25.rst,sha256=gMIB1tOyMdcTjVAHYVSaj9OS_KgQvOblhguFXnTUv5M,9840 +cmake/data/share/cmake-3.31/Help/release/3.26.rst,sha256=HuYfXTXSfPUWXsFl5QQd7lJCtUJe2R3QNgU7QaRhSDY,6848 +cmake/data/share/cmake-3.31/Help/release/3.27.rst,sha256=wP5qFRI0kHhV06ZzTeex4d3jKrboXZ7_p-O0UgORyKc,12169 +cmake/data/share/cmake-3.31/Help/release/3.28.rst,sha256=FoPrGrsGQFhoA9C32CM3hcZnfAMDAURkZuNL70xYBag,8266 +cmake/data/share/cmake-3.31/Help/release/3.29.rst,sha256=qCVKkuk8Xb2_8agSEkftf04zkLfJzw7eFUrCiV4wu5Y,9157 +cmake/data/share/cmake-3.31/Help/release/3.3.rst,sha256=2QQm8oFRc1J3BXaxXOO-W8gCoOiDLFKWeSn2nOe2gBw,11425 +cmake/data/share/cmake-3.31/Help/release/3.30.rst,sha256=s75dtGDfG7K_3oz6Mund7OSpP5jdnMS6pVmhouZ31SE,12481 +cmake/data/share/cmake-3.31/Help/release/3.31.rst,sha256=gh1NlXUV0c-fM4h2Ws23rc3sns85xWupOlOKozinCI8,10187 +cmake/data/share/cmake-3.31/Help/release/3.4.rst,sha256=f04Vh9Bq23CJWWGi5vwswe6W9mgTJbcrJx3xWEWhWB4,10703 +cmake/data/share/cmake-3.31/Help/release/3.5.rst,sha256=a5qx6RHKchZNTehtXcyDt70LtkbS6bf-AH0V_Wnfu7I,6896 +cmake/data/share/cmake-3.31/Help/release/3.6.rst,sha256=Qq4YKORrS1-bDII20BSE5FgfZC9Qdl4e6Dy1s3og1k0,13411 +cmake/data/share/cmake-3.31/Help/release/3.7.rst,sha256=tCEEK5YSKa1TxNjHRZ_8qzivtT0_qD2eP9LLAonsFqU,12646 +cmake/data/share/cmake-3.31/Help/release/3.8.rst,sha256=banTm6IrxMDRDw1d3STU0tQuWPLoTG03LmdnSeKHEKo,17931 +cmake/data/share/cmake-3.31/Help/release/3.9.rst,sha256=xNPkpdigWyWfwfcB9Avr97gea8XwLMc-_0kC7RxXOUE,14821 +cmake/data/share/cmake-3.31/Help/release/dev.txt,sha256=JmDBBsxsYmsan9Wwm5LFu7BZDlpt71naQ2thahGDhmc,395 +cmake/data/share/cmake-3.31/Help/release/index.rst,sha256=0r9-QmUCp1N0Hz2dgPk5y74UCFguhuG97N5Vk2l1beE,674 +cmake/data/share/cmake-3.31/Help/variable/ANDROID.rst,sha256=4KEHCCzwd5lUqvyOIBf-1Ej4_pl34gKnz7TOddsAIS8,124 +cmake/data/share/cmake-3.31/Help/variable/APPLE.rst,sha256=qJSM12B95KhwQ6fWUOwiWouuCWYdhBW3aFis7kCDP0Y,114 +cmake/data/share/cmake-3.31/Help/variable/BORLAND.rst,sha256=Z7pGpM1iChiUvGKe9zGb8IWzffblIvKUeMcFzj4rLDk,129 +cmake/data/share/cmake-3.31/Help/variable/BSD.rst,sha256=7VwDyvJODAjXRfPhNLBmPulS_OhQwNDmFvrb7XtjzDA,169 +cmake/data/share/cmake-3.31/Help/variable/BUILD_SHARED_LIBS.rst,sha256=Ncm1gXuBF80g2Nm30tyvlfai23KXfgnkKQILH_oz6ho,1566 +cmake/data/share/cmake-3.31/Help/variable/CACHE.rst,sha256=u8txXhYRRYc9DninYmNh0L1hMOQ2OmiDkxfjsKhbS-E,709 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ABSOLUTE_DESTINATION_FILES.rst,sha256=CDRTmriA-MRGXY_AB_iiyrV0R_3N2Oc5e8mRC_6N0VQ,363 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY.rst,sha256=oUj2Qxh3jfp3sMU7KTOR2t-qHWzmaiRIw9tOxnBrm_s,482 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ADSP_ROOT.rst,sha256=iM5I81zDXzorxV35AWutGFz_3yYdPuiFPwC1XGv5PPU,412 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS.rst,sha256=gaKpspx_bNAxx9af8723F2tvpT3PDLZrow_qidKBfm0,235 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AIX_SHARED_LIBRARY_ARCHIVE.rst,sha256=dARLsUEnou5IEXHIoUyEMYskUvVEUosDo6H3id5GPsM,345 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS.rst,sha256=EYaazxrQ0uuaz3Cd4Sbm_-6vENoKZkrlOJoo_QfAGGk,233 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_API.rst,sha256=ivrhBWBFhJ2jssfc4-u2N-k8vj3KxAcZRMLKPRXQMm4,601 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_API_MIN.rst,sha256=fdzGNEfrMR0rThsPaXf85-T_d_gnjtZWDe09yanY8RQ,188 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_ARCH.rst,sha256=a5Q5xDNQemAT8JEhhkY_ohjplXVuG4Ej07sTwIV7Y8s,608 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_ARCH_ABI.rst,sha256=3phoDMiN1Z1k7sh2-Z7ypHoUuDZn123voBkP6jE7X2k,410 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_ARM_MODE.rst,sha256=GJcBdQTDDj6jBZAks79hATYgvhC0CKEKVr_sVdlOK-Q,363 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_ARM_NEON.rst,sha256=H3zRnOe_NJ_Q4ct8DM5dhYrvImK5C40wsZU5YMXsVmE,244 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_ASSETS_DIRECTORIES.rst,sha256=3A9swvVj5Bwno78skPTS99s_lxd5t9TdYHjwIoXr65I,221 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_EXCEPTIONS.rst,sha256=GIzhi-2mnHe0k9fmbtIVuqubAGPEEQfcslET0oHvT60,197 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_GUI.rst,sha256=FoQt-9xnbgIxJKDTRXrgzDO2GowhGcplfWDZ8K2Xjic,192 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_JAR_DEPENDENCIES.rst,sha256=YzA7l3G9ThSnzXeYhUt3587GCqvd-D_-qL4eW-NxtgE,215 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_JAR_DIRECTORIES.rst,sha256=VmB0KUvjKTGgTMmIs3NxaQT0UEorclqilXiF_zNldbI,212 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_JAVA_SOURCE_DIR.rst,sha256=jkWIQdmwXKYy8qoTG5dRnIMMpOYd9S52mkV3n-MT91Y,212 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES.rst,sha256=hj1KhPbDirivhImQzdmA94eEQhnat0ws3eN5k5SN_og,237 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES.rst,sha256=kV1HpVZGzuvSW1kesn2z59ylXePn9L9Wdvmppq5P2aM,234 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_NDK.rst,sha256=7_WkGvu5hzN7Eyf9DTomPdzoV7uNg878wwm7_Djb8Y8,286 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS.rst,sha256=Kyyptz4gbn4LcnWR7npFN5UQ2YRTWBLfHwG9l_pX1lA,398 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst,sha256=p1829udTzYiTua7u_fBrQtG9PfOgHBZw39MUPuj2F6Y,270 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION.rst,sha256=TY1vNKj45GgQJ__mXNLBph72prUgy_IhtsWHWuZ8Bbw,781 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_NDK_VERSION.rst,sha256=MaipGEyrIiHvZ83AwQmuNAM-gZAeyFXJRf7FOluveP8,246 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_PROCESS_MAX.rst,sha256=iYl8hzGW0smbBiUYqfyLR8mc1PldGWvA5wc1J3-m64k,200 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_PROGUARD.rst,sha256=VmG2zrV6C9g4I-zlQdrY9T9Hqksr2QALh4D3uQVx8EU,191 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH.rst,sha256=oR7CQAqlS155DmcgZQtmVwSaqbjncMoaybxBljWAPPA,227 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_RTTI.rst,sha256=OOZPbR2bNLNOTa_rluryCtMB6EAOYENevhQRrRTSDhg,178 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_SECURE_PROPS_PATH.rst,sha256=BZEBkPGoSw_bqlrHFX9FKgTaxD4-hgT_E1FRd35ypz8,218 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_SKIP_ANT_STEP.rst,sha256=QK3cEE28yF5QDaRT_Du6eCz4OnmPAajrAqtM8FACh-U,206 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN.rst,sha256=xQKzIRlaQh6oHkNL3fyVShekKzCPhE5MXu3BtKpk4-U,306 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ANDROID_STL_TYPE.rst,sha256=m9QD9FATbNRO_wosYFJas_Iue6L8tE9xQZ6suQp26lE,1121 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_APPBUNDLE_PATH.rst,sha256=l8GtzVzLfzTBUqobkbNe8kuALFBReO37ns3QwWYpnbw,373 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_APPLE_SILICON_PROCESSOR.rst,sha256=ZW-8_GtkouFq5bvkx_0hycyLIk_CR5zYUuc4IQg3VmU,534 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AR.rst,sha256=8khDs-tCDW7bZg2DrKUz8O79NLOZerIAP7a1C5SEAnI,146 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY.rst,sha256=qVOp6H6zsE6A8GZkCWtKGzSyMyE5vmEg7UQbLOQzaxQ,312 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst,sha256=Ab-5rz9tDi8t3XVesYoUo_PFXmCrd-D93JlR5BJ5_BA,390 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ARGC.rst,sha256=rf_vqsgmP0LKaAsg0xAsvsdhX7r6NwrNVyu0vhr1aEo,267 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ARGV0.rst,sha256=FI1P0iJ3qKKEg7RsJ5vcWq8ntA1NXYd3G3GqVmRuFRE,353 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG.rst,sha256=ALarjKipr_GNjjKpjbJY05r58vSUdtUD3tmd6MDW4_A,356 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOGEN_COMMAND_LINE_LENGTH_MAX.rst,sha256=i_eQLx8s5mSSoG1xsx8Mr-46Ae8V9lJYhFfBEC91Pew,342 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS.rst,sha256=061binULRsmDZcuN_8hjeyfqUITKp0iVqn3ROHkjIp4,678 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOGEN_PARALLEL.rst,sha256=Bx7A-quN5DkOPuoTXv-A8nuEXxIiyAF9UQdBvOZ_Znw,386 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE.rst,sha256=gD4MlKBgY0Iu9fkY5eS4clmxQQwBAk7laxh_PMBb3Wk,328 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOGEN_VERBOSE.rst,sha256=Kc3T6PG82yW7nQ71YRVOlWT0HREIydSEKbVHrLZVoOQ,553 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC.rst,sha256=5VH63rQ7wYpFmMmxlvyK3gnFZ7gnl72Kbmh4RfZQdwk,229 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES.rst,sha256=7Fx09Prwzw5RhzAyZgkUwFNZmqrASfw0vnnzE5vSLAM,277 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC_DEPEND_FILTERS.rst,sha256=Jq3s1rztWvx2lAm2jLrk03HeJjp-UZqdrwegayGcfbc,406 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC_EXECUTABLE.rst,sha256=PuKMp2yIn8gsE5q2zbSLWg2y9Du4f5ZNVZ6n9J17zes,253 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC_MACRO_NAMES.rst,sha256=11q2OqQ2cGLVM6Z6YBN_FAWccbWUnabW4nduXxMy3zQ,678 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC_MOC_OPTIONS.rst,sha256=AulM6lg2jgXGGREd8whudxEs3-b8uv9fbtZpgYKBBN8,278 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC_PATH_PREFIX.rst,sha256=wES9z4Mt5PvJbprEkBnzUMDit6rEBWo_Yk1wwVer6_U,369 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOMOC_RELAXED_MODE.rst,sha256=XeAX3Ru3lNrHft5lAfbXS3DuEudu5CjkRNoluIGXrOI,592 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTORCC.rst,sha256=-EYgM145NqIrt881dh5VWUnjgbhxQ2PC4cvRkY1nL0A,229 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTORCC_EXECUTABLE.rst,sha256=Liq60cnoCgAm-_Uai0EvJJ7sH85yeiaGrZjips5tcYI,253 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTORCC_OPTIONS.rst,sha256=yWDccsWtWCzk204O4nNsY6I_2xRU97gahSEcU-7dTcM,367 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOUIC.rst,sha256=wl950g_D9OVoD2aO9lO5LpKn8-RPCwn0wKFHnmQZ1mM,229 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOUIC_EXECUTABLE.rst,sha256=Wv_UFxuTIZGXlEbh09Xb2PpDLlUbOilmG8Y4Xqk8oSs,253 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOUIC_OPTIONS.rst,sha256=zk7nXVdfxSPdJB_eRn4bve8Ya6UIQ-TpKVcZrpqNgUo,379 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst,sha256=EZJl_LhjgQBTUWiEVDP1wK3BTSvKbap-EH7EbhBewXw,342 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BACKWARDS_COMPATIBILITY.rst,sha256=gUCEkGV5HTmbhXzKKQtl3YYCOtam7J_D4Oqe5txiw-g,124 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BINARY_DIR.rst,sha256=aC5EI2zrSqBCz1S65LX4LtqE7eqm4PUGTx9dV95tF4M,468 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BUILD_RPATH.rst,sha256=jXOxW4ns4SqN5-u-LEIeAcA8XnBhJDDp0MY-_FOxrPI,447 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BUILD_RPATH_USE_ORIGIN.rst,sha256=ouUxFFHgG1tYFmsG-63DYnGwarWEDavqy0Qlacce4gs,274 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BUILD_TOOL.rst,sha256=eDaBYngJeKpmtme58QQ4xRRpt2qfa5o6wPDhAlg9SDw,179 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BUILD_TYPE.rst,sha256=TEPJDdxeXoV6UpRTnI5ix5C-uEUa8NoV-bFa5lnvBxc,1021 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR.rst,sha256=248dj-mTvtUccRmegAjgm74cc-JrD_lPYM4uGQNf-c8,272 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_BUILD_WITH_INSTALL_RPATH.rst,sha256=dwHhLiQn0f4JAOgHEzg-ej3s1vtKyw7JK4LkcF0L40w,581 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CACHEFILE_DIR.rst,sha256=1F20MFrBR0okLpIjWVpIGoEKVYy_eHYlWr2FVrnJAzM,251 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CACHE_MAJOR_VERSION.rst,sha256=98jhQfkBZ8qhSuMtb4YlVjlE-uBGUnMc7hiisrl7H8o,292 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CACHE_MINOR_VERSION.rst,sha256=vZKkZ38AZFeBsuIpb3ODpePTD2kpGVhIC569MhOyRD0,292 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CACHE_PATCH_VERSION.rst,sha256=51eeHlddZ313cSr8aiddTRgBAC9_FPW-ZCThLxKTniA,292 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CFG_INTDIR.rst,sha256=b7c3HdS1uA8KSidmnuIj0jbnIofN4xx2fffyRecBWSM,1903 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CLANG_VFS_OVERLAY.rst,sha256=nDHgElOIy48zeVYzY0kvBjZEsUMO95WBpB2EXtjzpN0,302 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CL_64.rst,sha256=sFaVatdhO_r9q1FaqbBgBcRa2DvUQ9BV-aCQmmn5CoU,196 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CODEBLOCKS_COMPILER_ID.rst,sha256=jhTm5cEVnlBvo3Ez-mLFib1pXuZj6xNy8U1Q61TUkiU,576 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES.rst,sha256=_zx_0b70tx3gS5QybMk-z0efTJm60EUQsvGW4MqY6x0,304 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CODELITE_USE_TARGETS.rst,sha256=OlWFbzoL_iOP5oAu2-13O4vLzjIZrA9fKGiXOQ0ZCJk,303 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COLOR_DIAGNOSTICS.rst,sha256=1zbz-44vJyYK0YIpBhLqwli-PZLRZyn5UWkWmMChlaE,1231 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COLOR_MAKEFILE.rst,sha256=Ljk7DsIJrsN6l42FJUjEOZ2CjbDjCut3sLAMjl3RR9A,194 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMMAND.rst,sha256=xAGnVWgNtTdq2kFTlcYH4XcUOShCqZQN0cnesgoEcr8,295 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMPILER_2005.rst,sha256=DoqQ4fOlVpklNGKKJTatcJLZy4sNMjR7q0bVGM18MLw,166 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMPILER_IS_GNUCC.rst,sha256=FEdkTbnI_gmFJgGDBWe92V2qDJkDzX_5b7oN-pxzTzw,187 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMPILER_IS_GNUCXX.rst,sha256=1bZ1luYws5_SFRqp8qKu9x4NJ70HSy9lVUh1xtURXQM,199 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMPILER_IS_GNUG77.rst,sha256=4DeUBCVHlCDl3LXoQLqTzfRtm1RktEV0fDDRJygbdqc,201 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY.rst,sha256=-EQBMC1AvU_mKZ5bI08t1e-5X6aGIidJRvf6YQMiYMk,312 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst,sha256=CdywVB5CK5bv0PUWZN09dvP0_SNXS-0ogRx36DtZgDg,444 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_COMPILE_WARNING_AS_ERROR.rst,sha256=y6UV4C1BxNdbYQ-Crc-MdptGuep0pT54qJt5oQ2Hcy0,250 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CONFIGURATION_TYPES.rst,sha256=9epoHJ8V5xBlXBAQkGGWXgSTwEX7r6a8wPxSnoBYGVU,1001 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CONFIG_POSTFIX.rst,sha256=jJ0ySYysU0R54BJMAYe0AMa_lEkXgUlvCl4xemYfhxA,271 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CPACK_COMMAND.rst,sha256=w_wy0_gf_Tnns7oiJey3CIlW7hyiA8JFBm3auijAFR4,265 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CROSSCOMPILING.rst,sha256=N8SFVArvsJUjjyU15k79Q9imuaw2OYIohWSvtT07rGg,1524 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CROSSCOMPILING_EMULATOR.rst,sha256=6AWf6Hixyj5Cu3nkFuWocZzm4Yl9-MwkYNv4D-L934k,1061 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CROSS_CONFIGS.rst,sha256=SFEVXXCLikpMmmNVtqik_1Tf77KrZnr63MBX-B3l0B8,797 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CTEST_ARGUMENTS.rst,sha256=IwWDaXfJe4yJkdNBBlXKq8QwVbqsKoDw_R1IgU8mUCA,291 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CTEST_COMMAND.rst,sha256=4SlGxKum9KuaZg_dQ2DxUNdCwUeWUf4UQH7xhyHpFwE,241 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst,sha256=1S18eXN7WTBSMRj8uHN5OFWxfRnPabEt4AyRpxYmz6g,1003 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_COMPILE_FEATURES.rst,sha256=w1pI6YCbgUf7b9uhUrXSI1RoHS7CA0ujBDlB9F8YTz0,429 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_EXTENSIONS.rst,sha256=0nKJzLQiQPa-pKncYB1mM7gr4ZbZd9gBZWFtsQO6uXs,286 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst,sha256=9oSjdLAJ8_5PZuzaXd5GNI8b6WBQQ-_3a4vddAKt5RQ,214 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS.rst,sha256=Lnntx_jQs8qyfCVzs-H5MSiK8wzdPHfAE-8O8c3Yf_c,305 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_RUNTIME_LIBRARY.rst,sha256=eeIy_Uiky5r0RibRaU4lLmaCCJocYqlotGL7aErMq2Q,984 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_SEPARABLE_COMPILATION.rst,sha256=MRPHK1Ww3Dso_Cx3ylQ271-RO-1JTJVKDQdb4X4QW_4,247 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_STANDARD.rst,sha256=JalY-VUL1uH7x8yea_K4MXbgR1Vxg0s5WIyXBWoazlc,280 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_STANDARD_REQUIRED.rst,sha256=wnhJThPrSCCeBPj2fiRdbT9nk0r6jVpVicyrEhPlnCE,307 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES.rst,sha256=lKTyQezpNcqwWfBC51fEzQBjsFYwAff7n1ZAkaBucCA,342 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_BINARY_DIR.rst,sha256=7IXq8d2JJlwJiu6D-eBI7sup-MxduvKtY3jBez-dCBE,670 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_FUNCTION.rst,sha256=EQE5JHsgElX_S1Ij3qBmD6lD1lMtAwBoeknEsPpuF74,380 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.rst,sha256=rAAtSOgwH0PBqFx7L9Tk03NRPeJ7oUTeaIgXo8xnnnI,1382 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_FILE.rst,sha256=A3mKJQaeRhO7TU8I3Mo0HQzPBgEgfzoVd4xiA_6-fco,369 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_LINE.rst,sha256=iMKvxFAx1TQ-pm3Nhpxmlyuwm-shTZvl2A7_LNUrnGA,376 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_LIST_DIR.rst,sha256=Dp3JIL8jzlZiU6gp9lnk8Kt_HquJ6FqLtn1h70Sk47w,813 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_LIST_FILE.rst,sha256=SYdszcI4jYh47OwAt4Wy_gqEPo5KbmA-s45RJQ3c3ao,677 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_LIST_LINE.rst,sha256=u6trmW2IOv8fyzwUn1tMrzBrkOWFOCsy6IMs7Qtd-eE,358 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CURRENT_SOURCE_DIR.rst,sha256=DbbCYd-IiYuhf-zt1O2BLTxWQ5mggmjqiXH8K6s7CTM,436 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CXX_COMPILER_IMPORT_STD.rst,sha256=ngePi8Xi-185TadgnkJj-D2ABR5OA38hQVkPLBGPnyA,488 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst,sha256=VnD6JzgUgEv9zD8myaDW14qdog4jWRLK_X4YqGnQY6Q,423 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CXX_EXTENSIONS.rst,sha256=LZfiItcFU6OLa_9em6tGHZRGRpdIPdULJO1KRSzRCGs,283 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CXX_MODULE_STD.rst,sha256=KsxWfHkOqIypwGNBLUDM7sBOWyXH0cLVmqEWT5nHBiM,474 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CXX_SCAN_FOR_MODULES.rst,sha256=D7P4MvUf9bQ--Q6o-h9_XgGtb79gPe6fICugzKJoa2w,294 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CXX_STANDARD.rst,sha256=1pA4EK5For3YpgUm9UP4sNBDazn42VAPjU5cIhzefKY,277 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst,sha256=Gj3G_vEGvJbhV-xiRRR6-MfVxZzPVFekh7AvhQj1M9Q,304 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_C_COMPILE_FEATURES.rst,sha256=U0nytObd3QBp_LVgkmsQEqKxvyLpCq6sIZM3xxvaRuU,413 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_C_EXTENSIONS.rst,sha256=_vTjfjodWk84wL0OM7kD1qbMMYB2dK-PWnOXhr3HL3A,277 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_C_STANDARD.rst,sha256=zC2tYK4MrRF0V-_xIQPQc9ZE_1IsUAEqTb2T1PZnWQE,271 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst,sha256=_-jlJFxKsMehx1RHRX12ULfvntW2p5g5OWsjegwFiM4,298 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DEBUG_POSTFIX.rst,sha256=5Vu3xK9HshfoKgLRB26lWipagTwc0apNbpfnrm6XG98,218 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DEBUG_TARGET_PROPERTIES.rst,sha256=MZCHcuL1fIVU699g-7PTvxzXt33Dq_JFTMOAbRfXV70,777 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst,sha256=ON90X9KklgSsPr7ErbRkXNMUctROA13k2Xp5rqbcpF0,567 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DEFAULT_CONFIGS.rst,sha256=_3GpOgwe-oTufsiOUJS72Iyaup5500zgoLTsWGE62wQ,1005 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DEPENDS_IN_PROJECT_ONLY.rst,sha256=kT8yslc4NeWqZpkdGkIncFmlOX2oWdAcYYsPTya9L-M,500 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DEPENDS_USE_COMPILER.rst,sha256=anbpvTSy2SeGj6QmfwfkmKH5WEl2cqKtE6QujxHavPw,339 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DIRECTORY_LABELS.rst,sha256=4mBbXT4ajN3-mGKb-8m5oc6qhvmI5gz2uL2cr_gOCew,185 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.rst,sha256=o92vXKmlc6c80ciRVVT1UmAIpgZHOhLbthmK0HIz0ts,1482 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.rst,sha256=5I7-eypvRk3pWFDLlvIlU3KgVq215x-Fj187Luk5yrM,221 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DLL_NAME_WITH_SOVERSION.rst,sha256=_1hRXztUD6uyUdDanig-Yngq3rC6TJPD8sfqKRAbv_A,503 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DL_LIBS.rst,sha256=81qgwJ4cDfh9mWEPUaL6wa97nVNj5LjkR3uqkfdsff4,192 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DOTNET_SDK.rst,sha256=MCT2s7VUcEO2AaKN4FuEQbd3GL94aUmQY0IWgjWJJko,263 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK.rst,sha256=GUcJ7hGCQFYgEmo0T1rqBBfqkWBlAAMDB3V-FAoq2Eg,587 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION.rst,sha256=H3IQtkmUdc05eRjUn5LMCR3jIxZ7H1VAE3rOZOalp5k,833 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES.rst,sha256=qq6qM4yCMnWQz1aYVvk2_TZQM8I3mPIxAFfDPRryd-g,413 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT.rst,sha256=O-26p03DkRXmOCGqqZ0IKY-S8LIVlePFbLZbU6mY00c,528 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS.rst,sha256=aEn-WTfNPWydvcVJZUNRVLrc2Zn9zmhu3VFpTxWXj8k,353 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ECLIPSE_RESOURCE_ENCODING.rst,sha256=voKA9qOhac1G0b_ZX0CVFaMW-tDVaYPLmkgSRNqkg4I,286 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ECLIPSE_VERSION.rst,sha256=r8xyv42FuKMR7QP2nv0gxS5yGbK21sHmvnGWEfFBDRA,452 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EDIT_COMMAND.rst,sha256=8W6wXXUQGozn_tMXfxeSWP0lmHN0pwLXTBksn6xXgvg,361 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ENABLE_EXPORTS.rst,sha256=Eaz-jsO46XLQPN7np_d2mfsvaSeH4FIJa_fvjRTrV5Y,558 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ERROR_DEPRECATED.rst,sha256=ACkiSlDzymPS2H1959PutKhCDRGGnFOEj-kOAibpVwg,247 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst,sha256=XwdifRyHCcjfwyhoQ1qOwUeL1ISKjcOiPgHcjFrKo2c,483 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXECUTABLE_ENABLE_EXPORTS.rst,sha256=55MmPiTmZROJ2bWmtA2TOIZawbn-yfCGXK0rtEJDl5M,451 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXECUTABLE_SUFFIX.rst,sha256=MvakRKGpcV9DBiLOBYXmBXAGP-4hpIqwWadUzfbRpAo,378 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXECUTABLE_SUFFIX_LANG.rst,sha256=2Tvns1xmpEPZlNhOWJV0AgGVO-q6_3Cyr3z9uaQOsjQ,246 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.rst,sha256=Ny9aDK0gpylnxYUKpWTz_vQiU96SZgtlWVP7GksM0DQ,265 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXE_LINKER_FLAGS.rst,sha256=6QsAuA64IUifeHpVH2uHBOmCC--Pxr0U0MqQGzU03k4,163 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG.rst,sha256=1UhQmrx6cQK5dPkhj-q1-jFR9DmUvaZVRfGN954GRV8,189 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT.rst,sha256=qp4BqRRlR9Uf0ORsRDJrb6PXZPlUdV6750zoAU-e8IA,462 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXE_LINKER_FLAGS_INIT.rst,sha256=FavcqrVdxPFwa6wwZBqW5IIKZdSrIu5-_S_Ljh9CnEc,480 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXPORT_BUILD_DATABASE.rst,sha256=aZTSZxXxH_F3khSWGyQwJC2DM5M-RKwwa-hw7NuPO84,2799 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXPORT_COMPILE_COMMANDS.rst,sha256=SYQ4EM_pp_CXv8Rszco0b9natkK9yXDJoLCCTLMhRxg,1249 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXPORT_FIND_PACKAGE_NAME.rst,sha256=61-37nzBDB3-n6SdFTb7p9JPeLjLWSS35PVXNy5C3iA,215 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.rst,sha256=4yACgh_3GKboV3e2fR9kNiDCKSK1ofuU6-7uWEY7kFc,644 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXPORT_PACKAGE_REGISTRY.rst,sha256=abRBXPSYaIsZ2M5ce3GPLYSlOnE5HiPJv22mYYY0_JM,600 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXTRA_GENERATOR.rst,sha256=ehzj65311XElFAeJdcK5ADDDgBu4boUG5jO60ESNi-s,634 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES.rst,sha256=0pB9QNeRAWBAlHD8rKnxqEhxizqwzFsUtPzrk-h377E,335 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_APPBUNDLE.rst,sha256=I3_MX4XOzeuiOZUwcRyFvCM4QonL7n8sRTbRaq2hr9M,606 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_DEBUG_MODE.rst,sha256=DYJ-H2we2ipPvziuGZP3rOYS6MA8gQx78rfRoredZTs,615 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_FRAMEWORK.rst,sha256=ZmcqLJ2OVxUibNN5TSSuI4lSU6Gf46hbf3KqvqwOpIg,576 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst,sha256=zbmLBm0F9lhexUAZRXEU-fjXKPUaQJGaZ2MYvPkQyYQ,459 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_LIBRARY_PREFIXES.rst,sha256=Aq-lZyqYfoPlibgLJV33PAgJIa7F_Kc9BCIZm2-ZUb0,347 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_LIBRARY_SUFFIXES.rst,sha256=w4l8TErpLGdvSC4qX4z0FasctnFsiKs0WJ_szUHHw5w,596 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_NO_INSTALL_PREFIX.rst,sha256=r2YdIWekpBmu4SmrEByPI1svJ8XGx8hUWbYzKk6cVzo,963 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_NAME.rst,sha256=WuXc0y1Lnht1H7cQJtz7ksRZm6VqmIAPE-C26v6WIAQ,233 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY.rst,sha256=j8a4og5sbtdcLoelpxVoAGsPhRXBgUA_1iO3MKsndVY,1024 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst,sha256=JRqtIdjcLk-n7xknAvBjm1e8mArROG1aqvJBq8fBv9I,1046 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG.rst,sha256=IbbRfJZyn7FZZ_jP7v-OVpzOZtAfZyDYQTzZtpwV7GE,1270 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_REDIRECTS_DIR.rst,sha256=c9XIxCkFax40wWzla6OY6GjLB27W0hHPHWyAH9GrEJ8,1411 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS.rst,sha256=_SAPz3NHUeU36obDLBYnHRXEQqbQr37K7LsqjYf6C5w,474 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst,sha256=LcslMzQE9Q6QejWFhI60c4VtTKyFAnJa_jbqW7JzRXs,518 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst,sha256=yL_x_eivvOWv0Sgi2MuzPTlg7uLR2sEqRwie-CwEdM0,1346 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_TARGETS_GLOBAL.rst,sha256=HJJeusBUxTQ9yOct3W2k6dhYK49X6aHn1qbqg1p6z7E,345 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE.rst,sha256=b4XBdnwU0yJaOFwVcp5EJcLkOZgyfHY7SYn0WIspDnY,1109 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_ROOT_PATH.rst,sha256=S5P0EEYgiLYAxNkXH5eM8Rzbodhgcpk2Qrcl2OmcAZM,332 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE.rst,sha256=vW_6dO1NC7vdgT7fyA7-C0-DJ_zSq1-Ytu3zQjcYaBA,187 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY.rst,sha256=3M6t22VQ_UJfZ9vpmPjpU9DoZunhlI5uylQVgoVAI7I,165 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE.rst,sha256=aFS_K_VoigbGsXqMwysNxawBFzjgo7xE4Urw1E1NKw8,165 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM.rst,sha256=KQ40jlLzpA3hjufwwPRCdXSY2eHm8dHnI_k-1mIXEEM,165 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_XXX.txt,sha256=bdNQWDBZGXLwVtINT8ZY8IbcnSgvz7XKc70tnmN6QlU,464 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst,sha256=bxzcanOTdAl5OkIBNPrfY1hUoWix4jpCuVxTTBcAowQ,941 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst,sha256=YeDzWzAIxEUhg7hicUDz34OgdADzQZH0xD2Iz6mJ4bk,880 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst,sha256=ygeE5eSkSFC5wmXkltjISQzj9QNfbgE6oRfIi1d8qtE,933 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_INSTALL_PREFIX.rst,sha256=3F0iQ88RoEugele_W5aNB3GjM62mAAYlk7obRQpjXYc,1720 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_PACKAGE_REGISTRY.rst,sha256=49XFolDmZZ10nSwTKI9kGt9b_I0NEOOdsJHC_mVyADo,1452 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH.rst,sha256=4bNOHt0AhudlWYdK0-lKRu22-qX1nTdbvNSOxzSuS5M,891 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst,sha256=qMiPus5XEfU9h34QT7TvW99Kvl2vlJYE-Tf1-ilQb2w,943 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY.rst,sha256=iN9mq6UezIcRY8rGWARCjSqlRj08jKKNRSBjq433b8Q,1453 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FOLDER.rst,sha256=jkaiqQZDlejZK0UwflEATz05pApTSSICxnS2xQZo_nE,250 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FRAMEWORK.rst,sha256=xZqcPRMaJVdnXsBdoB3pIZEfDh-0NbhKznkrStV28yM,255 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst,sha256=p82WIQ80wUKd3Gje__jGO9DChgLC1ZsRbOlNdlm1gW0,391 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_FRAMEWORK_PATH.rst,sha256=qqF67hp9BxQYFruCITfkMjvbyN7fb0_XHu-wD-xNoBM,408 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Fortran_FORMAT.rst,sha256=9bmwtsoLtSmKLiDSx1yaTJrPbNw6IXPAIXe_4zvr-3g,262 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Fortran_MODDIR_DEFAULT.rst,sha256=1AySyJPdP4hzrTS4bX667T1q5RREumYfcIDygklDxJc,307 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Fortran_MODDIR_FLAG.rst,sha256=jlmWlnGpUEEZRmMWlTMG85yNZc_YzBDrICdy4UICPtQ,219 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Fortran_MODOUT_FLAG.rst,sha256=_J0o9t7aaIotf8HiGK1PMyqusNvqUL0bQLC1NMg4Xt4,218 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Fortran_MODULE_DIRECTORY.rst,sha256=k0MfSu1npE3-4uRYKV-Z27B0lHXIphoKKkGHgJoaGOc,257 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Fortran_PREPROCESS.rst,sha256=s_oEAEmsyqgY_nYv8AoXAzgZd4AJLSJhYWXy72h4lzY,291 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GENERATOR.rst,sha256=bDeBZdn3QG-kY9-RMuiUzU0IE04nCkh3QXbC55MXC-Q,463 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GENERATOR_INSTANCE.rst,sha256=MB_MVD-oucRplYS832pjzIql9SRkm7fJh4uhVZa4ql0,2611 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GENERATOR_PLATFORM.rst,sha256=rC4HmpylCh_MUNu3g82Tp9q_g9mdg_QirP_B0lI3ESo,2789 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GENERATOR_TOOLSET.rst,sha256=ipysSS8UIp-58Fkv6zGvAan0U7lYKRi2WnhpYu0uVNg,3977 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE.rst,sha256=XkXL7Oej1446-M3XyBeaGSQPu5SjfK4jGGvTiose8G4,269 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET.rst,sha256=Jd-7_B1bK4QzV-A9o0TcTJCFu6ira6hWT_nVGSMMEV0,1066 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME.rst,sha256=eWj26WqrgLDeuK6Z4qM3hvtMY_w-CDdmiz98W6t2-Hw,480 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET.rst,sha256=WTnsYCUCE63v9rVv3OVzon4sAznkO752Y0_YEE_HXms,697 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME.rst,sha256=pRjvK_Zn5_IkawPKKq5NOBaaoBcjAOsdWveLfSkNmic,480 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_GNUtoMS.rst,sha256=JUj-O9OeuZGiAsWomOclr2pIDe_HrQwh283s045I0Fc,254 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HIP_ARCHITECTURES.rst,sha256=IoqWoHwbGfPTdUqDV-YBlbOyjYKE1pXo-mvGB14-fTg,572 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HIP_COMPILE_FEATURES.rst,sha256=ajpppBLmbslwqvsELGy5hLkKa8O2PWNnQYtaB4rYj9w,424 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HIP_EXTENSIONS.rst,sha256=PQaDqgvSVgD0T1uGr7jTRAKRT6uEo9yPO09dyHBB9yc,284 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HIP_PLATFORM.rst,sha256=gGcdNMQ_ZtDq1GDalp285zB0Ktldp4HJf8RfjZ-oqH4,466 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HIP_STANDARD.rst,sha256=ChZEz7accaXRkQt-pxbUzrpXIZw59lRtr_emTdBosuY,278 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HIP_STANDARD_REQUIRED.rst,sha256=16Zx3czeYG1v7jSS1GV-aaY5OA31WW_g08KtpgrVMQc,305 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOME_DIRECTORY.rst,sha256=UfswJ3zVCfDWVac2izU2YZBv0q4AAUp9k4Kw42FFV34,358 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_APPLE.rst,sha256=CY5t6TLHwpD0211_qPw5B6PumlFS6Qgv-Zu3og4xmtg,133 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_BSD.rst,sha256=qPfr9oNK4UW3B9o1OmICfEx32OL3nntJIWgfr5Zyr4Y,189 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_EXECUTABLE_SUFFIX.rst,sha256=jqP2H105jNz71KygCBz3dhR7E0pRGyI7yrHndXmKDMw,360 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_LINUX.rst,sha256=aZ0Iz68wvQJW-E6iZAoem_XBr_NMrW_pYY7R36wCJ6c,102 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_SOLARIS.rst,sha256=S1tTg1h0XoikLFI5Di_jlUrGvm-cPHPfCB0f7vJX_iE,166 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_SYSTEM.rst,sha256=_0Gwh9IgaHw02nOqonXGP7TAlVQUpJp00EKa_zjnnN0,383 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_SYSTEM_NAME.rst,sha256=4fBL_5wYiMUks1K8IPRSIPuY9ktRV4rFp460gi3CoQc,350 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_SYSTEM_PROCESSOR.rst,sha256=5rMOO74mRYAwU-AIIYB698ZVds3WypNEKP_MAV_tXRY,1220 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_SYSTEM_VERSION.rst,sha256=jPnO5D7haH-TWNO-R72XuxZtU-x5DZ1lgkNDaIi50uU,280 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_UNIX.rst,sha256=rccsAuri-n9H0JGtL1Ajdq0SM7zQKW-lRS6mqH3bObQ,169 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_HOST_WIN32.rst,sha256=_8ZTH-_xpw0Qpsjq4yZuzJC43Y5kt41ESY0tM0Gp0Z0,147 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_IGNORE_PATH.rst,sha256=E-W63ITrk5_Bsa_iJmvpebXJMPNM6wlUc9YQ8_KryYE,531 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_IGNORE_PREFIX_PATH.rst,sha256=qz9IpBpRiiUSft7Dfyn6J2Vb-B-uV-hmHqKBb1-CL2w,574 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_IMPORT_LIBRARY_PREFIX.rst,sha256=9SM8EJaFU_rID0If1vZsh2M7UUsvM_YzrT1mLW357ck,266 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_IMPORT_LIBRARY_SUFFIX.rst,sha256=d_VuVELF2SFGGsN1vCLqaafiKOOHHlmbvQ_t4dXBP6o,274 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INCLUDE_CURRENT_DIR.rst,sha256=o_UgftrcxB6nsqktfD6NOX6MuGUnrFoQMjsba2NxHaM,580 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE.rst,sha256=-kw4OEG4PF2A7qi45vEvYrZDvWhDqVzMYj5LKEQUY3k,562 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE.rst,sha256=LvAw70-MvNJWOu8pJovcQ6ye5SbRnPm-K2fkEyX-wfE,352 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE.rst,sha256=3kt9WO3j0GAEOWXHQR7P73Tb1RDXj1mbFHNAUvvMqHw,352 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INCLUDE_PATH.rst,sha256=YB6dQITZqBcYWXxihbgvjd9980WHpd8wdAapQkM24nM,476 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME.rst,sha256=4ns-1JELF6XfAPCY2BGdAWTLkANF-ZKVSYrytVAxz0g,373 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst,sha256=QITIckeskn6zUIgx5myJBZFmf8EdNHPrj30gTzSdbII,1068 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_MESSAGE.rst,sha256=NAy9G0RTAOKDAliJIPKxR5ppdWkXyx0UI2WKWHkM_xo,871 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_NAME_DIR.rst,sha256=bY6PZeOPANXDRUIU10smumC_yU1rf9O5w1IR2NNaz1c,260 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_PREFIX.rst,sha256=JDMqGru-AksTXBDdkqAKvpUcLdSYYOEMXlWFvK6d_Nk,1686 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.rst,sha256=zeW_TCo7JgjqFDCohK4c1JF4PZSpllmI-CsgQBMMlkw,662 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH.rst,sha256=80puhvbMjLaKTmqcE4i6dbuh1st2ObiKPo_C4ai1UL0,384 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_RPATH.rst,sha256=l5ori1CgnmQjRfxXnqpnC7NwvUC8sR3tcDLnU8Qzms4,282 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH.rst,sha256=VBDy5relTA97N5He5fkBolfvtrzu4Q5VGlp5zpUQwWE,576 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INTERNAL_PLATFORM_ABI.rst,sha256=NeBPiXWMHOi7DWTu65AkZPnwc1ksnCe5sdDKRmQlppc,169 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.rst,sha256=CnYRbTsBcAQK6QN6zAUngjuC-jEMpz8BuOi6T2qFA84,330 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst,sha256=RqKh2SerkIpMTJXjlp9-i95KwhB428uXdt0ByFhGq48,366 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_IOS_INSTALL_COMBINED.rst,sha256=aJjLvy_UavNLLtSKX3cVcBP5wYYxpSoPKz8l0Y0TSg4,397 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ISPC_HEADER_DIRECTORY.rst,sha256=VvrzeuTLhSR1ZrStTJ8ht4ruLxDHBPxIsneVvZ84cuI,279 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ISPC_HEADER_SUFFIX.rst,sha256=-czY055TwnctOmZDQBg0kIjdMt8IeAzisZJYLmvq_dk,284 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ISPC_INSTRUCTION_SETS.rst,sha256=dYjLB3kE4OggR996pYOT3qqb3R-6dkyOpDA9WWtiGs0,306 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_JOB_POOLS.rst,sha256=S-nvZqI0Uottxx8OIghay3JBVbZPf3y9Vs8mMh9TQV0,218 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_JOB_POOL_COMPILE.rst,sha256=aBUPcZj21W8Jtlo1dEd26i281yGsksubezSs40mUaJk,206 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_JOB_POOL_LINK.rst,sha256=ZNgmRYEiGKNfilWQdhrb7HYCGqeeFXOQ5l-ylorrbP0,194 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER.rst,sha256=-JP0OyO4SxJHyWAaAkzQNYhCl86564Rkdt8S3uM7Zao,270 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_KATE_FILES_MODE.rst,sha256=Q0HdWF2FyEemN96GnLFTF524AeiGRggbq6pQb0KDXnw,845 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_KATE_MAKE_ARGUMENTS.rst,sha256=qrQ_wvZKEVwqOGVycD33srIp-7LbNxGpgUYApguIlIQ,341 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst,sha256=NxmP5UKsW13H8-NQp_vqHyr7_-h8SiOB648bDYybsDw,415 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst,sha256=hjV-mYyQK91OqrqPffxT_iv-fUkkMHR4iLLuiTc0Ot8,474 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst,sha256=cN4ksH7tjUfk7cGU0UAGU4menRDUDoOCnOvtV3javsE,352 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_ARCHIVE_APPEND.rst,sha256=xqm9mDGXCR0jdHEjfBavlEbaGegiXHgGSWKcx_X_0Qw,404 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_ARCHIVE_CREATE.rst,sha256=aYyu2GzJ1s9jh7OKtj7ZIoPD2wo1S5N65npcCfQhZ8A,402 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_ARCHIVE_FINISH.rst,sha256=CR1ed50LfsE6fJG4ZELt6Mdjm0TMkUxDqhu_vDGcSZs,408 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_BYTE_ORDER.rst,sha256=58DkFGgCIzTUir0rIM4YNLWS39_zy0TCuGsSP34Isgs,569 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CLANG_TIDY.rst,sha256=JdNMPdLIx9a40Ba1cEsG9QQQPVYGRBXSMssATh-O2Dk,410 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CLANG_TIDY_EXPORT_FIXES_DIR.rst,sha256=9tzVRH15NCm-pujUhhEbf_nYSjiYrW37F5503fdcSWI,460 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER.rst,sha256=UrGaeK4O22_oc23af1oJUTPSMZQ-DVsj84AKDewaOt4,852 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_ABI.rst,sha256=5rx2HSLGmn8hOPhz1S5SuUXPEBf5ISBTZTQsT64ihu0,165 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_AR.rst,sha256=6bYFkw-RcK38hirEifO7DhK1g6Y0-kuko-QCHKFDVMI,191 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst,sha256=yoGePze4ABa-MptfSDE8y-qkOGO3cC81kv2lgopNQT4,294 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_EXTERNAL_TOOLCHAIN.rst,sha256=xWA8hNXiFmMyTR5Ybw2A-uw7F1_NfQNnbeGgHyaBUMc,595 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_FRONTEND_VARIANT.rst,sha256=dK726iQI9-5HHGcQN5_pPZvbVn563BNciSn8ZNTd6AU,886 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_ID.rst,sha256=KM7TTwKDJ_UBiD1aImO_mQwMRvChKBP6QYykV8hsAko,3760 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst,sha256=bizO_wMFJuO_vepucOwPAqXnT0AnspC0Ay82BarhmVE,474 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_LINKER.rst,sha256=ddP7HDpvlMIs-ZV---5TX2JQNwPbk212x0uY-59rVmA,468 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_LINKER_FRONTEND_VARIANT.rst,sha256=Q0Pg_3bsaEqe-IEeaPbSUBR97ZTWdmr9d2Pk1ufCEts,762 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst,sha256=yY4E-ou757urddpsOnx25D1BfmzodQgGPTraozW3mOQ,1429 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_LINKER_VERSION.rst,sha256=y39eaL5ghHWD4uiBVvVM1vmFVSXLRCn29a04mTeGMKU,256 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_LOADED.rst,sha256=ScZvjbLnoIiV77TKH2ogGdTO-HR6kb9LPrvV140SSyI,227 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND.rst,sha256=E49ZdGuiR7rAlenoWQ-sms_7-HYMwJ7gBi0i9nfFSJo,344 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_RANLIB.rst,sha256=piegMop2Z4_rml79Tsy1FLeSSfKssPCzjluXUWATxb4,207 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_TARGET.rst,sha256=2kwfq5KYEcBJayEQ_LOPHqVkrA0KJzIoHm7B3I4Ptic,397 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_VERSION.rst,sha256=o4bPnnKXb4t4V6LlQwNjsUkeLRm-JXK-fTPlaOhIhuo,359 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst,sha256=gCrtAC3NqAB-dKW2fZfi7sKpX3QmjKD-kZE9-QEvw_g,299 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_COMPILE_OBJECT.rst,sha256=-dX_Vu1qsAiKgFTCnvK7dBjUheJeNf4GIl8WB8VGU9Y,211 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CPPCHECK.rst,sha256=taUKL3WB4PmZGE9fjAkuWaM7kPchlT5ibJdR7hpinKA,270 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CPPLINT.rst,sha256=DFyIrzHmG6rfF8YH6uxFyiMULXBVqIqzF3EGzf9X620,266 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY.rst,sha256=zbGho4jqzVu1mkZg0X-u4tblpG-tF6eYCFY3OldJH7o,309 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY_ARCHIVE.rst,sha256=gtIMR5-Oa5LOsef5FmliV5DXrndK9sL1zPjmrdQCXog,370 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CREATE_SHARED_MODULE.rst,sha256=gWRTvL-tWvTrQs6HN_b14tEDkhaygOg88PIfjsXanS0,278 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_CREATE_STATIC_LIBRARY.rst,sha256=_A5L56J9TR1jVHU3ApPJmJcxI0ly-ntWEcDxAlgHBqY,215 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_EXTENSIONS.rst,sha256=gJLQ-kRp8S5M6zfv1tvWaoHvck1Fs2kzvSC9Aa0PoHk,648 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_EXTENSIONS_DEFAULT.rst,sha256=u2vlhVwGex8Vs_Mx4DBXA2JQHwxlbbjEGnutLJYU6Cc,342 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS.rst,sha256=TKv0Dm8oDYOaX9LY0mKpqXPKFwrxJoQfrRB2Bc35d6E,1863 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_CONFIG.rst,sha256=GxZw7YidDLxoZyFrYZo70X86FUSDz1g8UNqwVf-iex4,775 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_CONFIG_INIT.rst,sha256=_pTzArkBeJArmfbniQ3A62h0CZdZJuUGbU-7rctpntA,471 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_DEBUG.rst,sha256=m7iPxoJCp_Stm19w52aFzMFRsECgk6gc3TTbNc9AKCg,147 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_DEBUG_INIT.rst,sha256=uMqADkIrBPWmssgUbv54XazgxEycsA8ymj9ZOe7HZBA,185 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_INIT.rst,sha256=aMfBkOM6frbsluw-MVO7In6m8ANtFezjPSCAr-IJEzI,887 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL.rst,sha256=AyydU5z_hC3w5fGKrq1dUEqB6JDmbJIqNRqdloEfqHs,162 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT.rst,sha256=HafydIE2ntFtVZEyOThiizW6XATO5e34CEOf0VDGpWE,200 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_RELEASE.rst,sha256=lW_Dv5pexNnnkirKuSCX29_eoYbxipj0TztpVB_fVGI,153 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_RELEASE_INIT.rst,sha256=jeqvnxz3vu9cDKFnbtlc_Cv6T3lT4HLNZi5rAe-HGcw,191 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO.rst,sha256=K2nUTtDAZh44tspgoLlkxI6poD9q22j_kTIR7alAxR4,174 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT.rst,sha256=KhJ5ceM2hz5sJ6-fssY8H1GExbvorKR5Z4VDi9w6oF0,212 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_HOST_COMPILER.rst,sha256=GgyffdwZ7cjSE4d7HgMZ5thcepT2aCHkIV4PzOAXREA,1859 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_HOST_COMPILER_ID.rst,sha256=D1bENA4jhMH1rkRuWnKEEvxyuO9mf_5bCJHsL-6SJFU,423 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_HOST_COMPILER_VERSION.rst,sha256=YAmhEzujGY_eF9uxaRg1zAK0H-eoyGeeS51Q5GoZhNs,425 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_IGNORE_EXTENSIONS.rst,sha256=B32Rc6EhbxVuiNRA3wGW29hyUmm8LVe3K3ClmED_q9w,224 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES.rst,sha256=PFGuiMQ6gRiMiz1JLQUkaCKLCTXs6oT4V0EP-nSZKXk,639 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst,sha256=XGJYmAl70kmVn_s120yjev2e2azmqM3ViH6PnprG6pU,2023 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES.rst,sha256=KpMGrp5wTzCF3HN-TDeULGEnWlvfXZFLHAxw6q01Bp8,369 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES.rst,sha256=EOg05mCpwGbe7NXlTu3J5IlyMy5AIX3piReIe3XQ0rs,1314 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE.rst,sha256=yRcLBbqSKsAgU6mE6I4UAiyV1muj8vqYyVeX5RzWA-A,305 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LIBRARY_ARCHITECTURE.rst,sha256=NKex9AhgBXOjQOs_Y2WBT2-h_tDeSOtX7YEavrPUe50,343 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst,sha256=w5J4r7WkZso0iGh-KgaQJAo6pscBZDOcQfGlTcykDlk,424 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINKER_PREFERENCE.rst,sha256=1f6weZpObjvDAGflIQ7cNLOHYfmW00haTB6_4siNDNM,571 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES.rst,sha256=t7J_Hsx7LSpy908CMQQyiZe8l27_JnqPSLg-tF31lBE,440 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG.rst,sha256=atM_bBxSci4AYNl0dSI9sieBJ6AleKMcdCwv9qglJq4,1292 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP.rst,sha256=5cdy3sOtBNA5VrGIn6wGmIXGvL_s5SuqW_6Yr_wt4c4,404 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_EXECUTABLE.rst,sha256=34pKEnBKtVhq7kIXD2xaz3pz7Dw8UxtXZ9i8ON7zl_k,157 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_GROUP_USING_FEATURE.rst,sha256=XrB71KeMV2xKULr-mNUn7KhJZ4RaIPDdjtPPy800wlE,635 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_GROUP_USING_FEATURE_SUPPORTED.rst,sha256=5bR9Od9stxkCYWqe668UmdwQV12kwPnbsewSDcEFKo8,712 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_LIBRARY_FEATURE_ATTRIBUTES.rst,sha256=NRODvuJHKV3Z-7VC2c0vg5SbbKOZ2lm47e_6H2pRVwA,497 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst,sha256=FeNITGpZbim39xan-e6xGwmJ1lSUaLDNQkxeg1y9lks,300 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_LIBRARY_FLAG.rst,sha256=dL8mXcaeuZ-7psk0pFBLHT_25XeDmxuMGCBu--bNzvo,310 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst,sha256=v2HLhIko4RnLcEw8n8Qlz7Of63XSk2ahGx5Rm3k1LME,223 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_LIBRARY_USING_FEATURE.rst,sha256=olT0b6Lw15bM7kMjBz_xFyJO0184SAzj7PXLhaOZuhw,649 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_LIBRARY_USING_FEATURE_SUPPORTED.rst,sha256=jbDtxnxoP9lMT18CibW7oMx3lqKgwpvR7VVg5s74Ol8,428 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_LINK_WHAT_YOU_USE_FLAG.rst,sha256=diDnJx-SHYTYg0QV0F1sdQH4R_1qCUjShkcbd3rO6cU,286 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_OUTPUT_EXTENSION.rst,sha256=K7tYWixOtUAR-Z7jOElCNMrWBXpVmxQZ2yLl584BalQ,226 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_PLATFORM_ID.rst,sha256=ZFlxm2KDN0PJFxCzl-mNWIycKA8tm3LD0aH14E7iHtk,159 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_SIMULATE_ID.rst,sha256=bVpdFVbNszt4S7gXzzhyXFz-zAfZjOy0ip1ZosV3KUM,428 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_SIMULATE_VERSION.rst,sha256=ISkVPRe3PL3eydLN0lWD81Jj2m4tknDa6XBbKoEaVTE,332 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_SIZEOF_DATA_PTR.rst,sha256=2C9bPiZgJ6CjUOXJqRKRU4wt3hj8WckFxBoNokxS_XA,253 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS.rst,sha256=r0eYAsaTmQuq3rlxZf3Zeubjs1Cf03U2nolEkQx6wCk,193 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_STANDARD.rst,sha256=m0N9Ahxbb0UVBL7nDjanXix9kELnR80oJgZOsOOd1QU,545 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_STANDARD_DEFAULT.rst,sha256=iuJVpWdMrlRmIPZeb8pylvJ87lAYUyLO_4qBkaGKtXg,205 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES.rst,sha256=1qRrqzt4z0S3J2PveqqOCaSNADDWN4t2vslrtRcXSMk,664 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_STANDARD_LATEST.rst,sha256=6moTO9OcaasBrwEUQsGqKZomUWjDbJHKU_E2unWopcY,2515 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_STANDARD_LIBRARIES.rst,sha256=zWPdVXIEVh2p7D0fT7XJuovXvPHbQL6Qjaqf96BAjbM,557 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_STANDARD_LINK_DIRECTORIES.rst,sha256=14a1eJ5_goBnZ1xSc9D2dNo4N2T194PlYDhUg0yaWRg,571 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_STANDARD_REQUIRED.rst,sha256=ad6Nk0PRkaCq1mQhxKlj90nh2Spt5HC19OHOsENmey0,626 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_USING_LINKER_MODE.rst,sha256=MFMjEV0mH9Tyj_YZewIHSsX3d99B6H4cUZCKznV7yLw,590 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_USING_LINKER_TYPE.rst,sha256=H27uYnELbrKXHwaRx0vGa2W0qsBfNsZQyNVDS-Rik8U,1373 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LANG_VISIBILITY_PRESET.rst,sha256=kLOsz1Uiz6k4aczLAIlpWUxXL5S-PQGXlWSPtjZ4Lm4,164 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LIBRARY_ARCHITECTURE.rst,sha256=RBXrgmjaheVVi_Ch5G436q0ExBjaNlXZmmpnJkmCLHo,226 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LIBRARY_ARCHITECTURE_REGEX.rst,sha256=y9yAii2Wrk0cPjhlQltRzUiEzdtvsA8lPIkKj2dKfRY,276 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY.rst,sha256=6SARb3jRl4U_JzQF27G9EaWHMls77jKHjB4W-VgkhBc,312 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst,sha256=c9E03PWUcfUgPq4rwX8SOMLAbdgc1G0aUMOcrhkbYf0,390 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LIBRARY_PATH.rst,sha256=L4qbRTayn7RlBg68xoRl6GHymrwthOVPrNvfbrjwHdE,452 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LIBRARY_PATH_FLAG.rst,sha256=0BfmcpGQwDGr5qz3hu8ThxYjM-Q_GXVQ0IST7KEcir4,218 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINKER_TYPE.rst,sha256=qpfhRA_qDi-5zQf4qBzA3hwUsJ3UJen-i7phIhhOHW0,445 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_DEF_FILE_FLAG.rst,sha256=U4wFmzMvZYxUzSeGG-uB5H0cwVRqXxcgy5TcUYxBuqY,230 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_DEPENDS_NO_SHARED.rst,sha256=LHbJrDMT9Z_KDCDHReCmjT4vIUY7dSYUnJYPL8fn7oQ,281 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_DEPENDS_USE_LINKER.rst,sha256=PJB522Uy8GcU0GypGqrCl-6zttjzhnM-aTTGuqp_V-c,842 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_DIRECTORIES_BEFORE.rst,sha256=uF-02USBOJSWmxFDlhFJxU_8dW1a0H8ZR6rDxxAATq8,364 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_GROUP_USING_FEATURE.rst,sha256=kM0C3po7ALv7Cb-xHRJxpumzPewbGD8LMwDLLlO4xws,894 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_GROUP_USING_FEATURE.txt,sha256=x5AgM8dIEh9rVtAHhhPkkejTy2sl86EBkanRebN7Ts4,2657 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_GROUP_USING_FEATURE_SUPPORTED.rst,sha256=AwGT8hxM_h7c1ex9s9YlNOXy2HcAKgRm1urZ6nLe_3s,471 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_INTERFACE_LIBRARIES.rst,sha256=plw059PlucKzk4ousRDbtNvGFoR7b-l5d8dDhiluXTI,291 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARIES_ONLY_TARGETS.rst,sha256=ZejiuXWsIn3ZFoGHW5-Ec5wHchGeQAuXwoCwCH_kEPA,447 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARIES_STRATEGY.rst,sha256=8tG5C8EHKum7yU3LJUeMMePRimM_S7V2Kg6w2H6VgZQ,381 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARY_FEATURE_ATTRIBUTES.rst,sha256=DWbIgZhBAjlXudos1dPe0NDJMphP9LTHZrjAiJiIdYc,4189 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARY_FILE_FLAG.rst,sha256=tBnS1qFnXC1JR_0ap-PPuCKC6pVKfjAVPBn8yKWOXQ0,244 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARY_FLAG.rst,sha256=J_01jOLw6jOB97u8D7LX_uSuY3QwH9TB3vumxLmu9fI,207 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARY_SUFFIX.rst,sha256=I4DcKZz7j-jg3GeQjWV-N2zLwjG0vJ1tV1JOgLGiS64,171 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARY_USING_FEATURE.rst,sha256=K8yIYhtANy-Q3whG6lw00T-85HqMbeHhDGX_XElvUMA,764 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARY_USING_FEATURE.txt,sha256=Zo2_xfO38DB2_DCzVT7n_soR9n7bDuNdWeAldiLJujs,6180 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_LIBRARY_USING_FEATURE_SUPPORTED.rst,sha256=pol0dSnTCH9Egmme6ca_SAUkcWIi-5TLiYz9kL56tj8,424 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_SEARCH_END_STATIC.rst,sha256=zaYXxqFjfYws9zqxxZN1VOZtV3GpjK0ZLdRwuLpZl9M,919 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_SEARCH_START_STATIC.rst,sha256=F9qWrzVgRrw1Ht2hJHQFQ7MSEDALGrHJCH334vAzDWc,949 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_WHAT_YOU_USE.rst,sha256=RsN6PonKBwXZ1y8dxw8dVpkQE2fK9pgor4LV21p41W4,219 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_LINK_WHAT_YOU_USE_CHECK.rst,sha256=zerf8SqItD9Rp_GO878mFmygF3uvKYoCoNJRaCIkDvQ,313 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MACOSX_BUNDLE.rst,sha256=o1zk_5yF3m6zxwIjAfzsFJN4mE_4E13Hu-f9U9yQBbQ,426 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MACOSX_RPATH.rst,sha256=jYdgNZPrIwzHa9iOLJEidX2kMQa6n7xfunsHOkRbn0E,171 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MAJOR_VERSION.rst,sha256=rZgW2Hnb6mW3gNhx0yvKi0mloEduYKbzKXymtJciYz4,115 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MAKE_PROGRAM.rst,sha256=JoViHIPwRukI4L53TJ5WUiULZLtYnGTaAee6qjSbKkg,2608 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MAP_IMPORTED_CONFIG_CONFIG.rst,sha256=s4lGU27ahegDT31IuvY-kZsPZ1KgNhink48aiz_HOK0,307 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MATCH_COUNT.rst,sha256=mGy61LQ8xCu_nCyxm_WFymHGf0VUjeNXzSeJU5Qg52M,332 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MATCH_n.rst,sha256=KLmuBJw6Yngi5gYo97ujB-yHajcR0lI_Xee8yzM1u9g,436 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MAXIMUM_RECURSION_DEPTH.rst,sha256=wwoRCHSeo2g7xWy62i3-pab62jvaXyy8dq5xP7AU0zA,1334 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MESSAGE_CONTEXT.rst,sha256=Ojs0vBuknJ7n6tm7vZeD1aLAzvLIYafSAZCpEt44Pak,1811 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MESSAGE_CONTEXT_SHOW.rst,sha256=AtZtXq4bwKCAg2Yjjgml-g-Q6_cy9JOUPFxtUZOefIA,773 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MESSAGE_INDENT.rst,sha256=4YZeRbFaPuJLXZ4NHSlyeZmVIZ2Kd1OdAKCEB07zwoY,717 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MESSAGE_LOG_LEVEL.rst,sha256=hdcAd5AUUQ1CKi-znTlhPn1pUuMZ8bvoQ6PFgQYhbAQ,969 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MFC_FLAG.rst,sha256=opTBrwxwhe5ohtrEHncjEVD8LW4S4rB1kZOYwZsuXUU,517 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MINIMUM_REQUIRED_VERSION.rst,sha256=it20wUJA6rimP6ZjjZjpJDD5iik3qowfGH5_ptxLEX4,242 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MINOR_VERSION.rst,sha256=VM8oLD4gElfrxeWWh_-HWeLSBNRog4_5BdG0cg39xlc,116 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MODULE_LINKER_FLAGS.rst,sha256=3ZME9-bFDtCQ6xbybk-ItMbZNE5-GsgcRvr8R96IHys,160 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG.rst,sha256=QGhUHB-ZIEZ007kaaekbLs5RgwaBEo4kkqHOfv6fnGE,186 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT.rst,sha256=1pQKt8jxYodCdxfVaHUy99B5xe4flfcjrLivuoLaBEA,474 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MODULE_LINKER_FLAGS_INIT.rst,sha256=1HENCOWvhGh88hMsMlxrMiBqo6taSZvaGa7xIX00Psg,492 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MODULE_PATH.rst,sha256=CPNGYso1dtB76BaqIICtPvFWNXI7GJDlmIIqnw3qvzU,894 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MSVCIDE_RUN_PATH.rst,sha256=epO0z4Q7PcV_StBk-rTqO8Z0Q2Sf2kqh-pkTymgcBK4,463 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MSVC_DEBUG_INFORMATION_FORMAT.rst,sha256=V5oAy5EutuPM8cLLLa-niz4Ne-vhF5p0OUrqTFc1wnE,1443 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_MSVC_RUNTIME_LIBRARY.rst,sha256=Sqn4il7BzOLw8KfV0VCSLDek99G6p6IBQ5R_QGb_FjU,1335 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_NETRC.rst,sha256=AQUGiRoe0QvQ6FG5yF8_y8hkeIVzyIYSxwse6_3BFnQ,425 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_NETRC_FILE.rst,sha256=Q5AEe2KXJU8S-sUmSxKWH9SuHUmG8HcDuqYEHYBVPqA,440 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX.rst,sha256=6vFZVyLNqPerBcA-TiLC0Wupy5Djm3EzVVe-GpSXbpc,1531 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_NOT_USING_CONFIG_FLAGS.rst,sha256=R877Rk4UdqpARWFoKPJT8TR1liST_a0CYOX_-q25Mys,202 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_NO_BUILTIN_CHRPATH.rst,sha256=Tpg8V3im91ZPKy_5W0e3VS_VtJ6mPjcWxaCM52Fp9SA,807 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_NO_SYSTEM_FROM_IMPORTED.rst,sha256=Bq1oly7oPZRpLuEp-_oqb4KIdZUYmS5p4kAX0LGeMik,287 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OBJCXX_EXTENSIONS.rst,sha256=OvtBn_psf73euwynP6LVYL8xrW6Ij_REt63x7F4WePg,293 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OBJCXX_STANDARD.rst,sha256=UesFfhrtZFAuOascL0nhhXZmyuRahuOKOtNugrkA0Mg,287 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OBJCXX_STANDARD_REQUIRED.rst,sha256=1n8eRsGkM1WWZjhFp7YUculaMQje6eUYHZlR7KZrGnE,314 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OBJC_EXTENSIONS.rst,sha256=IMecB2WX8H5zQ0NsYiLZgNGImZeTVr6q0YfTJb_a5W0,287 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OBJC_STANDARD.rst,sha256=0MPqdi0A0N41O7tclcdvdLIrkw4kDD9QbS1cNgyAvxQ,281 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OBJC_STANDARD_REQUIRED.rst,sha256=dE14OebcS0pWYy9Y-YIqRGQbbZMGkMLnUGHivoyIYl8,308 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OBJECT_PATH_MAX.rst,sha256=BRvFDjDU6YQ5PJpf7UdV-IQh-sVALVRKqucJ_pdt7IQ,826 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OPTIMIZE_DEPENDENCIES.rst,sha256=Nn2RfaF-Z5GDF29MFHUVCYzRdpPdtxU7nS1N0Jgy-Ss,148 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OSX_ARCHITECTURES.rst,sha256=AKhxEOJjCFjXkOi9c8EPW8CIDp3vcrCBFSXStkYni0c,302 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OSX_DEPLOYMENT_TARGET.rst,sha256=otBxAZUKJPwR8L0h701TYi1mcflsS6v7N9ajfWndjWY,648 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OSX_SYSROOT.rst,sha256=Qrz3giCbRcaVtscanPMuoP-1HiFPe9lVpVJKKf1b3tw,480 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_OSX_VARIABLE.txt,sha256=C_4FYhVjBIvm6IrLy0uwR5J76WuMkXAj0IsyH-NeIzk,629 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PARENT_LIST_FILE.rst,sha256=GK9BsAZD5_eSmntiX6YHc4Mjv5sqVUtUTPMUK2-jhE4,393 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PATCH_VERSION.rst,sha256=IEDPPkbsGlc7F_I9MvozMKgkfIbtBN8tbw3cq9_lYB4,115 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PCH_INSTANTIATE_TEMPLATES.rst,sha256=-osXp4kah82yraVVftiws5n7cs_MlFgJ8LJ7h0FJoEU,210 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PCH_WARN_INVALID.rst,sha256=9u0NOg0NIAJ9sJDVc7MSHSgJW8FJ72s9_Ty93DVEMPs,183 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY.rst,sha256=_5GEQBi92HF44GBwT2Fd7Uk-ldGPMs0JBzVNl49nbAU,331 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG.rst,sha256=tK_05sL5eJQUnBXYCBBUw1U7ooSyND9ak_D4CXLnLDo,455 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PLATFORM_NO_VERSIONED_SONAME.rst,sha256=RYshHKiohiD3Rqnug0jjvAXK4Um6FaNNOqWZhusMjpA,502 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.rst,sha256=fZHguFjtl9v1esAqWoEBMFk4fbt-PdB4YtD61JV_kiw,1109 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_POLICY_WARNING_CMPNNNN.rst,sha256=YqIVvB6ZUVgzjB_CJ4fhS85SB6R29KcYTQgPFbzmJqE,2235 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_POSITION_INDEPENDENT_CODE.rst,sha256=ObVl6oWxjBIPieVLe-axcZPNDh0QzeM7hiNkwWyk1mk,365 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PREFIX_PATH.rst,sha256=odSxylj1RFYBnAWyV4YGqw4SvlDreseqP-QFxhVgaiY,797 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROGRAM_PATH.rst,sha256=AN23f717s4zuJhvyVTdmJH8AuiGUVAKL7ql60lXRTS8,452 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_DESCRIPTION.rst,sha256=TpJWaumVsU4rVwCmsHEqD0anFIZz9VjzdojsBFRVXI8,1302 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_HOMEPAGE_URL.rst,sha256=7BKlBWbRFqb7kVX4DUj165d56geC4drKTGJZHBVNITU,1392 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_INCLUDE.rst,sha256=TBIGxVp3xsU76r3dtYTu2YGJu7JgBgtRRhT3Q9praYM,881 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst,sha256=HuuvLToFA8ZaIHcPB5pgriXSOmjyqBYx60lGfpy1_6w,889 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_NAME.rst,sha256=MTIg52xnvAWeZ66OgijypoLuaKTiz4meixCkL_3iezI,1096 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE.rst,sha256=SyBgvJd17QZnnK0Nyf5zQjvkV2nlUMlnmO-LHh0qkoo,924 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst,sha256=xTOgnQ9OuW9WTqNMS6O4mMxr4gBd5Y3UQZwm-qD1sHk,956 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_TOP_LEVEL_INCLUDES.rst,sha256=yHEOuwWTko_IRwFDf9IbF14n46BZe14AWNhJtkoopfY,1563 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_VERSION.rst,sha256=18Re2ooNCJKuKJVMAwCZ2-pjJMw91yyKiY-NRXuCA7Y,1206 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_VERSION_MAJOR.rst,sha256=oPN6V9zboVsXxgVpUuD6LqOd9Rak5Q56IOPk-v9N210,405 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_VERSION_MINOR.rst,sha256=regejEP3QvrwvnnLIT4Mj4pWOHmWTpcarPgZbPyqsLM,405 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_VERSION_PATCH.rst,sha256=lu6Ttqatsa7PeVcfIExow5MD8W00ioDrfadnz-3RDCo,405 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_PROJECT_VERSION_TWEAK.rst,sha256=8NrZo1vIqC4_gAVvhpM93oRW8mUd2Pya9nkvTLzd1kk,405 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_RANLIB.rst,sha256=_VqnrO8sW4EhqtUk5JoM4YqUvejWZ3tyH2T_GKklRa8,186 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_REQUIRE_FIND_PACKAGE_PackageName.rst,sha256=6_dZ04hlbC9WevMPFVowBB7Lf8lu739eNN45HcY82rM,1775 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_ROOT.rst,sha256=XHwbZac4T5IPt42aowNAqqo0fcaUoa-d5cMgI2gcYNM,222 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_RULE_MESSAGES.rst,sha256=jZlmdTmdzsaZzCQ_w2VrY369Q0oY9MvcWsIUZ46BZ1s,365 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY.rst,sha256=QIU1PfDbhiH5z9ybwGr0xwlNSsuRUFYjTo20ZRhFjRk,312 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst,sha256=etmARZEtFHg2whS2ejm8wO1_wFUdC6CAYGV_kMAUp-I,390 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SCRIPT_MODE_FILE.rst,sha256=Wf8CAUYKUqw5dA8FBi29XiyAHciVwtzWrG5uA9ByfdY,305 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LIBRARY_ARCHIVE_SUFFIX.rst,sha256=a0h1SqJhg9Dt6Syf8VayxK9FuszkEKWNgZs-SzXDZR0,244 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS.rst,sha256=kiudQHWpYyZIMCAOSR5gV0pCO0Zk_kUZI2rSKGpvuB4,380 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LIBRARY_PREFIX.rst,sha256=E1vXV7WT-m3zzjfUDioFpJFgGlxXyGz-n8sMh6NxgC4,257 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LIBRARY_SUFFIX.rst,sha256=CnGHrDykSZdIknBHKdRCDRDgMtGOva4X-F-jd1BhbtQ,269 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LINKER_FLAGS.rst,sha256=Mpr8hgaVj1J31biz5OYMBRbJFvdRsRzcA2F2e3PyUrM,177 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG.rst,sha256=qqun5O-ZYfX8LCbitb0K89Bko0x6EeC8i-JbQLwvcNI,203 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT.rst,sha256=cmIkuj2M7yjMlpkWq1g58j28M-maf74RUBtxbb6K-0c,474 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_LINKER_FLAGS_INIT.rst,sha256=1Jbxl1DibF-S-zieogsZvJqj87zqSCe1ROCUWLE3rlU,492 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_MODULE_PREFIX.rst,sha256=F4hbZzNt2jlamhJuIx9GW7pdbcxDxeXveK-rJAM-nZI,255 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SHARED_MODULE_SUFFIX.rst,sha256=2CuW6Ty0gt4r8rQqzLRE-3KYl-ep_NLX0EaPMMejnJA,262 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SIZEOF_VOID_P.rst,sha256=TbgGXtocRwioPRVGno4LOiQcEyO8AtL1FJ29shSIvVk,290 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SKIP_BUILD_RPATH.rst,sha256=hQA4G0dMqupUvSulLv3cJk3YRWyl31WfDeAm_Holo1Q,750 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY.rst,sha256=um4aQ-BM4eOGBD0CkLEMGD5V--9akgL1ln_Bv2RAzVs,620 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SKIP_INSTALL_RPATH.rst,sha256=GaeOCIN9MRc0JTIpgLwMH7akQ8bc3hyI6WfJS93I_YM,830 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SKIP_INSTALL_RULES.rst,sha256=zPkVHIv7NxyvTxKLjw0m6XYhnCk06lRPfMkcfNPFOcI,256 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SKIP_RPATH.rst,sha256=5VzIR5hi5zcAZ-w_L_H1EjlJU8spcXDxzYnScvzxIug,601 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SKIP_TEST_ALL_DEPENDENCY.rst,sha256=Eas47TcWFQ2cj_MNxG_zpS3lou4du8TqTQB4SEv2oqs,801 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SOURCE_DIR.rst,sha256=erzKCaEe35Nz7yG-05ZA79odaGZuQ67fOp3igLWxXq8,470 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_STAGING_PREFIX.rst,sha256=yyflkXRxveM3oQG10BInCHnlnDhlxEukFPgEt6hvOVQ,594 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_STATIC_LIBRARY_PREFIX.rst,sha256=0lhCvbChrGv8FpNyRo0NCyV_Yoxn_Zs-hU3XdbgdIL0,257 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_STATIC_LIBRARY_SUFFIX.rst,sha256=Rb1f9s-WvTPI-TZ13WG0LRNjeZfVrQ0OBWqIezkzzH0,269 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_STATIC_LINKER_FLAGS.rst,sha256=UIDdDcTrIub6uRIdlJqrQp9dM2hrAl7Fr4-RR3ze6iw,422 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG.rst,sha256=0xCBAobH90QoPGHdQ1F4NlN3lsLKXpyeBEBO2PDWS-4,465 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT.rst,sha256=rGROsOSf6djzE5hQZ765SUgK2Y4BYlj7Io5RB7DUfIc,474 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_STATIC_LINKER_FLAGS_INIT.rst,sha256=wzQvM3EqXECW-M72L2iAh9DM-21jH2s6Ea573mv7NEs,492 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS.rst,sha256=yD5QOGG-7sSyJDcxMuuyt75Vu-5H28qkWXM1Rt0Dwa8,551 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE.rst,sha256=DWbI_x3oC-VfWy55AAN1lp9h1p_A9vD6DpmUTmdxCUA,329 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SUPPRESS_REGENERATION.rst,sha256=1QmhRumAruc2insvMstl00oZR5K-itG6W9la-pyXhSs,538 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSROOT.rst,sha256=XPizNSQoTctW-1w5IunUra3zQEsfAGfaSuo0mZHhR_4,565 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSROOT_COMPILE.rst,sha256=hiGdrTGfft4hZXZG1sfz3YflBHGuTUeZ9dE2MnD-6B8,366 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSROOT_LINK.rst,sha256=2h2SZY3hWHNf635KSfCd_FMQoAjNOYu_M4YkzM1Zk54,345 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM.rst,sha256=xjKyFqnMTpHXFy8VkSXgqhn-snnor2VUtRpXkMOLk7E,358 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_APPBUNDLE_PATH.rst,sha256=U7nsOCnmkP3ZT-jQW_-xFBsUfVifzB3es7VqwZjThHU,370 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_FRAMEWORK_PATH.rst,sha256=7crC0ogUEiHqf0nvm0ElDQFC7stuFbHBzWbB0qJBdO4,405 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_IGNORE_PATH.rst,sha256=1YRo0tbe96XGQqnaoQde0TCfUi0-KJMW5YvShVJB_n4,624 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_IGNORE_PREFIX_PATH.rst,sha256=-E3zHiC-c_HBz9tXIeXUd9zrV5sB0dca0jmr4aUuZNU,667 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_INCLUDE_PATH.rst,sha256=2zwHh6sjX9nLCZVhizjiyHRM_23AL6DrDkuh449l7rU,433 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_LIBRARY_PATH.rst,sha256=cPnSTYujCTxKJCcfQ39myji0xjcbgSRv0lr4AXZdD28,409 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_NAME.rst,sha256=7FE3AMyuZlvVtkyOhk73UtCLuA78Vuof7-j64ZPxumk,5549 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst,sha256=nO9O1-a4aZEO4GmQwlCtoQbhWEKI0Hht9ldx_iwZeuw,2250 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_PROCESSOR.rst,sha256=li0WgIf_q9he_YrBG4TW5DioYGPFQlRnVItL-kCvEVQ,627 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_PROGRAM_PATH.rst,sha256=rwAFtrCC7Uo-xwW9enGNnMe0T4PWYdvld8ngx4RPFbY,409 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_SYSTEM_VERSION.rst,sha256=YW1W-7Qp6XrKALctYDhYNvbRDrl8p_skvYwwRIT1bKg,1176 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Swift_COMPILATION_MODE.rst,sha256=kytZJSMwmI07G8jmlcJJFlWTig-wxudG_OTgvhhZZSg,1159 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst,sha256=DfsiLMwI5PpTLTEulJYlGYXfIpQfZLX_n6QkMxGATRo,348 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Swift_MODULE_DIRECTORY.rst,sha256=LYsS9r0DAbqBJr9tpGdpsIh-93F2GTMlyIJd2caz3Fk,272 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_Swift_NUM_THREADS.rst,sha256=AFwxZ1ZjhDshm5zpp92bR73Kz6TJOUF9btgzdTWH7eg,319 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TASKING_TOOLSET.rst,sha256=3HBi30xGSTCel2fhgP70sBOyeVXNMzwxzOy_2h_m_r0,1169 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TEST_LAUNCHER.rst,sha256=QDqk7RJvZ8ZeOG94i31TJYJBOG0iUyO_yvy8bSVuJfs,570 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TLS_CAINFO.rst,sha256=lSbEQx5noK1-7Jklp84a_VHwEqpMrdFQiJxa_r3AS2g,326 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TLS_VERIFY.rst,sha256=AxJOPJ0brvqzrrXIBB0q4FTKE-jhs6nEMsW--BFq1UY,855 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TLS_VERSION-VALUES.txt,sha256=4WulyjnMN70nzZDscWm6YYYlbkzrGRa1DSL8yEpUpdc,43 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TLS_VERSION.rst,sha256=CbAhjMubyR9v6qwIWxuvvNFi4GY6qPkGLX8t2usd4g8,670 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TOOLCHAIN_FILE.rst,sha256=Vc7eYShIymARqBH_O3YLi6Qlq33-1KVkI8loUR11sAo,772 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TRY_COMPILE_CONFIGURATION.rst,sha256=5v5gKM8eEVFWtDMmb4kf2zTu1_-1ILehb-9_0jX4aqE,402 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES.rst,sha256=iHg52YWP4QXG-0OCxbyXmFHPRS9n0ej8mRxmbYmDQLA,457 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst,sha256=DfIIBcq0JEiAxLWHNtoCXVQEP2JptWbqebMVqMIfHQA,1495 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst,sha256=b7TaMmRjcaRYh-HhtXu5hVnG0VMqZm2BGNfFnqUd88w,614 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_TWEAK_VERSION.rst,sha256=ai13IY8Ss5AXwb8Vzs75iBbdRTPU-QvA-S9KaMxn5g8,313 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_UNITY_BUILD.rst,sha256=XsuSeU7FXkFzSZR8KA_UxgLW4KCJIpEx-z-iKrmr74M,820 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_UNITY_BUILD_BATCH_SIZE.rst,sha256=WnE16Ak4hi9jPyLzocEkVGR9E2AqD1ZayIBeaC2Ytr0,363 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_UNITY_BUILD_UNIQUE_ID.rst,sha256=hN-d6r4cfdGWzQhNCHce_YG_RJlokK1LMyhFnkzMeLk,283 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.rst,sha256=Am805RBePGbAAoIPCi2swJaD8Au73OeILfpV_DWSF6I,1476 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG.rst,sha256=ZRjI_8sV-0QkdonXPxDsFq-RVhMX0ZnX2m5fS2emZWU,280 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_USE_RELATIVE_PATHS.rst,sha256=ztxxC3St3FPibZSntsHi1-zvg7Y7Pt5xJqGSo2t4ODA,168 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VERBOSE_MAKEFILE.rst,sha256=-m6Xp7gBqcZ-ksELGIpJsoGQrUhwY49fIpIBeA2_xfE,334 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VERIFY_INTERFACE_HEADER_SETS.rst,sha256=ko-0xcv44gtaeMzCNTAkjCtDzkr6GlHsO9iB-ugm5FA,1720 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VERSION.rst,sha256=ncCGjo_AyJDgE9mW8QbBOs3ptRZu2yqaanZfeYDG1pg,2169 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VISIBILITY_INLINES_HIDDEN.rst,sha256=y7R2FN6wLO-c2vbYkmo6r3mFO-OOAwccWgUBAVX5yME,167 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_DEBUGGER_COMMAND.rst,sha256=ShLB3t80kREfccg2WB-gq7P-KO3cNbSKKEVhzg7sQdo,245 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_DEBUGGER_COMMAND_ARGUMENTS.rst,sha256=hcUvC6DzZ-l6CRuQp30O1flRLxa_MpgVCzO5fxYjlMs,275 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_DEBUGGER_ENVIRONMENT.rst,sha256=4rT74vTn49SGeeLlegkKTnKJfNMMKXcvavpiSUkOkMw,257 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_DEBUGGER_WORKING_DIRECTORY.rst,sha256=kdm5J7BFFXdaiAFPUBiVwhrLJOTwcasrUgQ4lSEEGcE,275 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst,sha256=X1fI8f_6ffyEbtrKkVtbDKlnnTpGnyN3WKGKwazzRf0,389 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_GLOBALS.rst,sha256=ReAlQdLngmh_BgeP7kkfrI_ahFPSoxCSf0WSrtM8TKk,605 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD.rst,sha256=KBfx_HoLHS7_h8JLYbD2u2birYLrd25X7oEvQeC1gYw,344 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD.rst,sha256=g_VRmMMlxYhRNHMGF7wNnEGy2E0GjoM4Q2dy6zOKrcY,344 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION.rst,sha256=07p_rLx_9SKyLscvQ3PO5wC0ugwdAMKCqk0uLBaBYA0,330 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING.rst,sha256=mi7ja--z7WS33WEDOHEEgVJfXtD7B4X0j9qrxdiV19Q,318 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst,sha256=LIKtk1zwvUKPIdFh3FCAnurP-4Esaj3MtSzybD9Xk4c,392 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_NO_COMPILE_BATCHING.rst,sha256=h9F05ouYo99l6wOBTdlzBRZ1W9PsTWq7PTVqXXr2z2M,520 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_NUGET_PACKAGE_RESTORE.rst,sha256=4Lev_uomy-UHZnze3FWViMhw0eJc-JaRYCLqzfUDlRU,921 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_NsightTegra_VERSION.rst,sha256=hWwgiMmoHF8PSxQzEt1-84RY_QnSV1GyVaRdZzzJsjY,289 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_NAME.rst,sha256=j5_aWymBvFStp9a2fH3g5SsnznFiQq-79UPlYJnFJ7g,401 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_NAME_DEFAULT.rst,sha256=lZpfPrzODUKooJcMid2Mmkj2gXO3-TY2c7fQRu_f_1M,453 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_TOOLSET.rst,sha256=TsIJB1eOi54sx8eoHdxcP8h3ZVRG-CQQ7Ml8iUjGSYs,434 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA.rst,sha256=siy8AIpNPkIOPLlIvoUitzgpRNd6BzvkqUfABxT0CzM,723 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR.rst,sha256=26nLLui9xXqUXhkazSZn0jqDvWFEHJevYbe7iZ5pVtA,849 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_FORTRAN.rst,sha256=3paBZtnATVrjS_hqCcBvTGJkn2VZa0eKwrIZIAGaFNs,519 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE.rst,sha256=xj_euC8pkbTKzQFglEM5RvTYBrAo5ffhDQaFwpkOkh8,493 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION.rst,sha256=MHRLoD6XepXGsgR51mmxL4KSiLNRDJCxGfcsxacaHp0,1278 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES.rst,sha256=2ghn-AdvlDCkVcEzeWJJqhviLHoBPu21gm8Jr-T2V7I,167 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES.rst,sha256=5NziB_Q_cyKD__8Caw2INwEh2wD6C71qpUWORjEoZyg,176 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES.rst,sha256=5FV7VTijV8XMYYG-jAoyYDvpia-ixxN_r4nmBLgmePs,167 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES.rst,sha256=2NtZp1bcqx7bV-7SNsEj1K-8FBTOhJMCwmqXj7t8iGE,167 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES.rst,sha256=9_L2Dy_-WC13RxrCbAPKIhJ7K9O8wl2uQOc3DpD82qw,185 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES.rst,sha256=7leKJUCpBccZ2SlrdVGumNMajmT6TwydKSR2BazXfqY,173 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES.rst,sha256=kSrwkp2lI9Y86mLiK5STvCV_nYnmu_4ejJMiy1cFC5E,164 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER.rst,sha256=dn62Tgtv5bO-st963-GThe0gfpkF5TQGpLJUGmBqDfE,461 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION.rst,sha256=HMDWcmCZCqZH0OfvlJRDZNAFv7EMIlXf_Lrg4iC1CxE,475 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_VERSION.rst,sha256=mmMKbM2_zkd3Y3zNkO70OIRL725BYYKWnDiZZCg7ou0,657 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_USE_DEBUG_LIBRARIES.rst,sha256=B1tIBRTPiFTCl1yy4aV_WEXVhbs1av5gQU1PEDSWSNE,1193 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_VERSION_BUILD_NUMBER.rst,sha256=fS_h5DG8JT325LVzxNPFqs8pICaOmbxvJtM6n9yQ7-k,393 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_VERSION_BUILD_NUMBER_COMPONENTS.txt,sha256=Y5_L-TavREpX0G_gWCJoBqkMqQ3FM-4adg0xfiDO1JE,496 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst,sha256=hjUza-A1u0dNltDJrOY0IdhfAA6ncU6ktKs3MdoDg78,403 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst,sha256=x6Cj_m_CWIQ6FaI1RHpfxjr8IFpI3edvemhRvivfKQw,1488 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM.rst,sha256=H14Zt-5wOGoltpk6UW4EuXw4b84GS3MyL0VuMDpkr7o,625 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_VS_WINRT_BY_DEFAULT.rst,sha256=Z7ZpWQ7zm1KBiUEP4ZfpEaqH8ZWpXXL5_bdu-4xbYKg,812 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_WARN_DEPRECATED.rst,sha256=FpCnmuYSy-dS_UOPPTMTclyKn8rOhlP3-1WI5K8jlcA,448 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst,sha256=tfJDTqXBYuW2gVtYLlLvwOiwXvzjDFuL3lnJF-VyMF4,383 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_WATCOM_RUNTIME_LIBRARY.rst,sha256=-dfPaOUypo57lB7O0CMV9GIXhQ5aAT8AYAkIKOYlCeE,1295 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_WIN32_EXECUTABLE.rst,sha256=BhDeaEpp63tt3pYDumDwN7zdiFlW88ceP6fkYl3VsVo,259 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.rst,sha256=NZWd8bWx57GPtDSNqgNo9H7azcbwMnBf3n_BKHWyzbU,246 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_WINDOWS_KMDF_VERSION.rst,sha256=BlAehmpVoVJD0CQeePQw4emp54XjtQuGayrzeqi1mnI,463 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst,sha256=pNkMaca47k2wzlV9QxuBi2FVtmJt-8cBghlac1RjuJk,997 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst,sha256=PiIK6qwnUn_rRm4GFKEjaR_Va5C4iX9oTlSmJgqpgQ4,880 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst,sha256=AynzoYVMebGezd-tRec0XZ_7uuPtg1hga97gurSybZc,354 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY.rst,sha256=u7t0P9WpBIuaYd3xjTJqIaMVaOytwGU15PqRX3RQ_74,442 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_LINK_BUILD_PHASE_MODE.rst,sha256=eH68NeLdpwBWX0Lely5mwh1BQsVZxktjXUfW2nOqkqE,330 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_PLATFORM_TOOLSET.rst,sha256=hec43Ar90PtCeh-HLk9MZnl9Uuc_Wv7aZfR4ZVrtSPc,312 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst,sha256=5hDeyYKTWA3DCRw6hRm5mC19p9KW4tSyYY3W0AEv8CE,425 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst,sha256=YbqN5yhmMs4hmw796lspC9Pkgt17_CJx2nUuc0zKxlY,491 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst,sha256=vN_ePTio0HVA_hei4xhmx9V5zg6xhHaMduGTn2dCXJI,480 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst,sha256=Xa_khCnvzPs_aUYI22tVq2WImPsXBSl4p56FItD_B8o,462 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst,sha256=cZ1J6rIcZ8LpeivB1A_MBmROhZrrC5Mi-yy31KRyx8I,441 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst,sha256=8AxjzUjUJfdkqs6-zAx-V3Qp8guBg8cQqxlf7OxBuVY,453 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION.rst,sha256=IG63tdOk7fZ00LORHpmVP_s-TRKUrs4Y_JKbxk54x4Q,450 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE.rst,sha256=6d1gtBHecr7uNOnyEcf653VaxaRpfqcnxXdkWG4BXtA,501 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION.rst,sha256=EGQMrOjNKhNpELyT2vPldCqnGOz1sMC_eaxTptBimIA,462 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_ENVIRONMENT.rst,sha256=BxYVt60Mptm-eo2bZbbKuBsseDEyYJFdIaIYwFjBFtg,555 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst,sha256=vKkc3s-AEgQGxHnB67v8T6b_C2gW1BtdsoVJ8ZtptyQ,405 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION.rst,sha256=8GXc1FDkCuvHdXTNv997VL9O4d6EZcIAESn9RVV_CUo,383 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_LAUNCH_MODE.rst,sha256=NNdm4JeMLLChkLeHfQQgiTrBliUVq_gYT4gi0Me4RZg,390 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst,sha256=PCTFl2vK8v89muDKWwWjug3AVKpxL25O4uOpLMxwsI4,479 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst,sha256=bP-0TAhm8FNApIkyBk9O7qvc3ElHpDvZ0G-l2I5sij4,429 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst,sha256=yFDiTuc2PkVVum0aT0VJ3LZ63MiICDmfvFxU6o-pdfo,417 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst,sha256=hr5AQ2KpV3H1lIonzR1GWkFxP04T38EVTiG7CZ9n7s8,405 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst,sha256=LKlK3AA93lvXkZdT4D0_JTFDge7UVLM0kwfvPUsK-KU,421 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst,sha256=w9Ido7SslzV2rAQc-_oNEA-CrS_TRAMi0Yns04KmU_c,454 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst,sha256=eRCHSJj1m7cF8beS4I9QJHIyOzeu_0BH8wR53xj_snE,472 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst,sha256=7qvXdXa14ESrF0gBmF_rL9Awh9Z9wKHHd3f3g62OObM,514 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst,sha256=QO5AnX-WHfiPT-rv0zUDrv-r-IWvK5M3LflmYweqoIU,427 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst,sha256=PiFhYKBoxwCw9mzuDMPoDU1iDEclV2nMDpjLXHSUSIQ,413 +cmake/data/share/cmake-3.31/Help/variable/CMAKE_XCODE_XCCONFIG.rst,sha256=twl92j4AFwUvqfYMVqiHIu6oiZSV6V2A9rE7YQZK8aM,454 +cmake/data/share/cmake-3.31/Help/variable/CPACK_ABSOLUTE_DESTINATION_FILES.rst,sha256=X7sen0brUnFD5jbZjHywTe5QSrQuoY00awH-yJ-SawY,475 +cmake/data/share/cmake-3.31/Help/variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY.rst,sha256=H3fEG_C_3T1aCBTA3tl6LNDg0DGJZo775xVqXT9QC_A,330 +cmake/data/share/cmake-3.31/Help/variable/CPACK_CUSTOM_INSTALL_VARIABLES.rst,sha256=HxqPKTQNm8IqXvcyIVpjSe-QHGbQwQzANe39kHV0ZBI,1630 +cmake/data/share/cmake-3.31/Help/variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst,sha256=ME5BYzZb2xzCoNgg3LOPcSR6wDj20O_wD7yQSkrku_Q,450 +cmake/data/share/cmake-3.31/Help/variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY.rst,sha256=fRxhW2FYh-3J8Sg-cR3PnyiHgH1qBF3HTI9aJ345TcE,844 +cmake/data/share/cmake-3.31/Help/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst,sha256=LjbtbTqGrDUABdjQznhVqdHm6M991oaC95dQYOm_4DU,507 +cmake/data/share/cmake-3.31/Help/variable/CPACK_PACKAGING_INSTALL_PREFIX.rst,sha256=-hm0qrDP6Sps-nt8JfBJXfF3NuEm8yCYNv5i1LnIhJA,503 +cmake/data/share/cmake-3.31/Help/variable/CPACK_SET_DESTDIR.rst,sha256=nh0MrpmoxEyrHUk5NhJP-zvUZwNlM5jwrFAZhgnyw2s,1449 +cmake/data/share/cmake-3.31/Help/variable/CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst,sha256=Gu00EKNX5NEJ2N-DRSBpTfUFGtK9WgzzPfpsZI8ZKrA,322 +cmake/data/share/cmake-3.31/Help/variable/CTEST_BINARY_DIRECTORY.rst,sha256=kLIxntERjJvTCi4EDVLLnR2GNdTevFL2ptRkBAy48xg,164 +cmake/data/share/cmake-3.31/Help/variable/CTEST_BUILD_COMMAND.rst,sha256=feeAKhYzq1c6X-4jLsK8okb6TxxpM3Wlc5PJs8LUPhE,155 +cmake/data/share/cmake-3.31/Help/variable/CTEST_BUILD_NAME.rst,sha256=g_Bxwhz7PwurmWvZWs0AzAE8oufFW21eQXHAYfvACM8,147 +cmake/data/share/cmake-3.31/Help/variable/CTEST_BZR_COMMAND.rst,sha256=nRWR4x-PH_hS3XaxVLLAP2DDM_Zm1plO7y1SxUQJ1Nc,150 +cmake/data/share/cmake-3.31/Help/variable/CTEST_BZR_UPDATE_OPTIONS.rst,sha256=BcXBXHgZTS6YRurriBLcEwdwEhWdc0nk67nWf9vwZlc,170 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CHANGE_ID.rst,sha256=TM3IRfnRwUpi_a5LsvBR0mf7jhNG_2ugvL-TCKDa1AQ,352 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CHECKOUT_COMMAND.rst,sha256=dGXA3sVKlaJKfUFAReQUo8zatIsNL0LPSY83b-KtpCI,210 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CONFIGURATION_TYPE.rst,sha256=NIklyQAE7GdZ7uD9rFdgOVkD8hF31pTdNr-GvoKiWvQ,320 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CONFIGURE_COMMAND.rst,sha256=8MgmrWc3IppOPo03AestKXfMrDHTvr99WaolN20iuuk,168 +cmake/data/share/cmake-3.31/Help/variable/CTEST_COVERAGE_COMMAND.rst,sha256=FbI_wKnr41284SI52BuW8wqDKKcOWJFIqzAi2ehZL_c,2377 +cmake/data/share/cmake-3.31/Help/variable/CTEST_COVERAGE_EXTRA_FLAGS.rst,sha256=UGzK1zex8yP69yCJjIPO22U9GLKIN3mq5ShMhm8bNy4,176 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CURL_OPTIONS.rst,sha256=4MAtSLVroaLJ2ewhzEdAFG3ewCHXD_Toqbxy23F5MAc,233 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_COVERAGE_EXCLUDE.rst,sha256=EwlECMNLyzXvrE3g-UO2ISddU24s5KFxRXeJIkQscjE,239 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_ERROR_EXCEPTION.rst,sha256=vnTNrDK_RBzY6E-vKvuqzGX0nQalm97zsDl6dzdMyvY,240 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_ERROR_MATCH.rst,sha256=ymWty_fou4i9gU3ys5uD_c0230MyVnqxPRr_xEpGe_g,216 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_ERROR_POST_CONTEXT.rst,sha256=GAgHUabjpP9RbAAre7qO0lAZFsjHE3eVyvKqHKX2XLU,230 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_ERROR_PRE_CONTEXT.rst,sha256=_C2KJKzF7SGyDQjulbCXojkju23-oXm3nSLJLUPusM4,229 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE.rst,sha256=Le3QyTuddQ74RPRdj0jk_TZM_771-mZsVE6UFtUzyz0,627 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS.rst,sha256=ErqsmON9khg7XLqopmk372IvBIjYZx_jiQeacIVCV9c,276 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS.rst,sha256=bNMARSPTU1UIteorrcELxI4-94nMLJSeIVrgHLlFDU8,282 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE.rst,sha256=m5Ch6usrWqkwGCA5zpxbU0zI7gk8toCNZUQKQiiEzfo,623 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_MEMCHECK_IGNORE.rst,sha256=T3pImtUg1iRrqh2fGYlObp7c_GwutHoH3YZYkOQW7Ig,194 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_POST_MEMCHECK.rst,sha256=_bxip_rVqGuxeuIxLB__XkN5yA8a-9xYMIqUMSzBQpU,169 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_POST_TEST.rst,sha256=gTnZI9fDVu4YlcvyphhH9XlWlhmsPjjtZrV2m9tBbQc,157 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_PRE_MEMCHECK.rst,sha256=7ySGsyK0ECIkBgDGYMV_lEIa329i1O1ITB3DzakDTMQ,169 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_PRE_TEST.rst,sha256=ob3ry3B_2Zn5I3fF0XCjVn-SlkQGcu_nPBSuLIjsDmc,158 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_TESTS_IGNORE.rst,sha256=lVs4EXC7hZKMKLgppHtRfESuDouKUd0CPVQ_SBVUcTU,188 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION.rst,sha256=B4WqTefLhxYM9l_Sd4_7QBXxzBbS30zYUnBLNhCUCMg,449 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_WARNING_EXCEPTION.rst,sha256=xyh4_bCH0DtO-jbcg5ehDWorDZKBkRuqrLBE54lz-pk,246 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_WARNING_MATCH.rst,sha256=8PF7Vz-mq2aledN5DIbBbH8leiCu7QSjmwgJqGmp-UE,222 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CUSTOM_XXX.txt,sha256=1yT-BxJeAEEVQnVIKNCzTX6t_WEAtZwywXkb7R2hQfA,140 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CVS_CHECKOUT.rst,sha256=e6dpdEGKuet0dG2JMwjeUs_BjFADtuQkSD4fgNFvKH0,123 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CVS_COMMAND.rst,sha256=EDtE_jIUGI8y9OK5Sf52bOG-cbo_7ulkQzctAZKT14g,150 +cmake/data/share/cmake-3.31/Help/variable/CTEST_CVS_UPDATE_OPTIONS.rst,sha256=ZPfzDScxiMwAp3ahPrOfHnwH6g7KkeeQ8PDkNfCYe2I,170 +cmake/data/share/cmake-3.31/Help/variable/CTEST_DROP_LOCATION.rst,sha256=v02ufWtO6VBsXqoqB8bFo7RFN-TemkFHZNObxilNDeo,156 +cmake/data/share/cmake-3.31/Help/variable/CTEST_DROP_METHOD.rst,sha256=WkIAINr7QumoohO8-2c3DuJKadmAX_r0KEJr-LE_C-M,150 +cmake/data/share/cmake-3.31/Help/variable/CTEST_DROP_SITE.rst,sha256=E2OtZAq_aJWJIUg_SplbTqqjxngvilqEW0rL_QSiMvg,144 +cmake/data/share/cmake-3.31/Help/variable/CTEST_DROP_SITE_CDASH.rst,sha256=DLcAzVBazeIBXuOTQwf-VWmLGQjB493tcpz8UlDczJo,155 +cmake/data/share/cmake-3.31/Help/variable/CTEST_DROP_SITE_PASSWORD.rst,sha256=uPs_MAnO66jPyV5VSBPJjJ0tjVmJ423zjn9Ri-U4Nvk,170 +cmake/data/share/cmake-3.31/Help/variable/CTEST_DROP_SITE_USER.rst,sha256=S1syeHi8OTHpbbVVr8L8mTCclATKYSeXiV69i51yMZI,158 +cmake/data/share/cmake-3.31/Help/variable/CTEST_EXTRA_COVERAGE_GLOB.rst,sha256=WKbfiV9tQPPvlHhjBDGNmL2Gj8RDDI4hFzUoAn9tTzg,240 +cmake/data/share/cmake-3.31/Help/variable/CTEST_GIT_COMMAND.rst,sha256=6Ik6YhCnz2NM1rQbHT5aSrqgkH6-3CwObACsknBFjVY,150 +cmake/data/share/cmake-3.31/Help/variable/CTEST_GIT_INIT_SUBMODULES.rst,sha256=EIdonwlD-NJyRlwBkf4iBL4AgYd7UH0PQRf8RqWEzAo,173 +cmake/data/share/cmake-3.31/Help/variable/CTEST_GIT_UPDATE_CUSTOM.rst,sha256=xheEmJLhJjYVPVLk8dbGyhog4Lh6_Ho1kpEGfASPDh0,167 +cmake/data/share/cmake-3.31/Help/variable/CTEST_GIT_UPDATE_OPTIONS.rst,sha256=qIWxsVp4-segv7yzNzhHZ7-bHyDW7aocWZvhOROGNR4,170 +cmake/data/share/cmake-3.31/Help/variable/CTEST_HG_COMMAND.rst,sha256=HJS_-ll6jaFOJM1byqNDXDenisHBm5_eMCuuMUkh-K4,147 +cmake/data/share/cmake-3.31/Help/variable/CTEST_HG_UPDATE_OPTIONS.rst,sha256=kpD2CxI5zlIqMMkCBb0v0gn6Z1MkjRgS74pRUUzDqik,167 +cmake/data/share/cmake-3.31/Help/variable/CTEST_LABELS_FOR_SUBPROJECTS.rst,sha256=WFM3KIcDRiWjuApO7E6tEllufQdqz_e_U7UQ5q3twKo,183 +cmake/data/share/cmake-3.31/Help/variable/CTEST_MEMORYCHECK_COMMAND.rst,sha256=QU5YtzO287rfSNY1O5kIxxjDHDNyJ73Q0g12AwqzWBg,174 +cmake/data/share/cmake-3.31/Help/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS.rst,sha256=hrl2l1QlLwMEDFMtvPoB1A7ZH8bm0eRJUC8h6eXJEEc,197 +cmake/data/share/cmake-3.31/Help/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS.rst,sha256=q1K7lLYUKTptjOJu6XakQDNcm8MH-kQANOX4U4oPhGE,393 +cmake/data/share/cmake-3.31/Help/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE.rst,sha256=IGNIf0uY55dp3H913P3-mKEoSG2H05z1KTeIJ9DF0VY,202 +cmake/data/share/cmake-3.31/Help/variable/CTEST_MEMORYCHECK_TYPE.rst,sha256=vS3d73l9Lv5HOceXWyfPv1lgK1fEhEAl5wYsf9rAYGk,378 +cmake/data/share/cmake-3.31/Help/variable/CTEST_NIGHTLY_START_TIME.rst,sha256=DtrD5A4FBYwSNcH85igyJM4kQ5Tji_jAd-Ja3jNgDWM,336 +cmake/data/share/cmake-3.31/Help/variable/CTEST_P4_CLIENT.rst,sha256=0i-xlUVMTHR-PoEvl5lupr0JeulAxbIMZhaLRuhJbdU,144 +cmake/data/share/cmake-3.31/Help/variable/CTEST_P4_COMMAND.rst,sha256=XavBLDPDxvxLb44bdmsuHzFL7unM9_5yhGgC5mfjOKM,147 +cmake/data/share/cmake-3.31/Help/variable/CTEST_P4_OPTIONS.rst,sha256=ZnYaRlh65VoPRNsfqDIWdN_iIAIt_MMszzt8yokfA14,147 +cmake/data/share/cmake-3.31/Help/variable/CTEST_P4_UPDATE_OPTIONS.rst,sha256=D7qSFho-zughO_kjpYwdELm_8sZwzvL-VRBlHVW4EcI,167 +cmake/data/share/cmake-3.31/Help/variable/CTEST_RESOURCE_SPEC_FILE.rst,sha256=O9NewOmra0z_zC_QTwwNtPUXV2JOqDrqz1-e43hJj4o,439 +cmake/data/share/cmake-3.31/Help/variable/CTEST_RUN_CURRENT_SCRIPT.rst,sha256=vOZQ27X-ojd2Sz8huETD_06CR902GBxL2Vbj1fayfx0,213 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SCP_COMMAND.rst,sha256=bQGr6Dk5wFup9abgiTU-IMjtFq9j7TpcrNnPNWM30Kg,86 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SCRIPT_DIRECTORY.rst,sha256=HGvGlAlIHK4xMNOnkADr_ZHUPrDSdUv3Gu6r_0L4f6U,156 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SITE.rst,sha256=BikPJe65J0-S6vJkdi3MP6oEBItePzcSoH8QCJ8MEVI,130 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SOURCE_DIRECTORY.rst,sha256=niTybHaGIN8mTo09uaOAopl9ydEXKyZVKOjKNi6zOHg,165 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SUBMIT_INACTIVITY_TIMEOUT.rst,sha256=KzUuv9WoZ1QlTavkmW21UZqe3B5Rgr_rxur6frmsixU,192 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SUBMIT_URL.rst,sha256=XTDfRqEkMKc3zQ1M3dXLICPzcU4-M1vrcFwllxCr8bo,148 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SVN_COMMAND.rst,sha256=CNR06m66CbcuzPdOOAbaFDqywupJzrO6bG9DKvPbxeA,150 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SVN_OPTIONS.rst,sha256=ww03BY393vT3tv9zdz0Hcm7QYx9myNM38cZ5Vheo3tY,150 +cmake/data/share/cmake-3.31/Help/variable/CTEST_SVN_UPDATE_OPTIONS.rst,sha256=s22adbImeId7YaDWTX55-uM95nkqwci73F9vCUzcrsI,170 +cmake/data/share/cmake-3.31/Help/variable/CTEST_TEST_LOAD.rst,sha256=-eYaCahp9BDszds6V-U5SoKGmFOMQq_oP2Gn2OD5K80,264 +cmake/data/share/cmake-3.31/Help/variable/CTEST_TEST_TIMEOUT.rst,sha256=Yh6uW_speJT9S4wkqQ4k5RgVN4K9dd4avEpqVeFvg3g,149 +cmake/data/share/cmake-3.31/Help/variable/CTEST_TLS_VERIFY.rst,sha256=H3gqX2bDlhxRsEQB1-PTzRPGDnxOkkLDy3X_H0gW7lk,743 +cmake/data/share/cmake-3.31/Help/variable/CTEST_TLS_VERSION.rst,sha256=Whe_qpi1RTIqkRov-k2R2HkMnYj25UVIkbUF0QJJkwk,557 +cmake/data/share/cmake-3.31/Help/variable/CTEST_TRIGGER_SITE.rst,sha256=1U8fA4iY_bbu-W7x6BUVeSH7omDSr9Ei62ClBWhDK0U,88 +cmake/data/share/cmake-3.31/Help/variable/CTEST_UPDATE_COMMAND.rst,sha256=-KKxiXdWx0B6WRQI-orhz9wWArST_AXioAGvY0inZc0,159 +cmake/data/share/cmake-3.31/Help/variable/CTEST_UPDATE_OPTIONS.rst,sha256=-wtlogmY1smfxWrB0s94roIiwvZZV4kWw21FOEmsoBg,159 +cmake/data/share/cmake-3.31/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst,sha256=2TkRY4-LYhbRa2Bd19WosD2ju-p-GsjgplUmDekm0vc,196 +cmake/data/share/cmake-3.31/Help/variable/CTEST_UPDATE_VERSION_OVERRIDE.rst,sha256=xKxnQj5Ge78OrbLB4Z8CeiJv-rfGOp7FoxIFf3h-bqc,213 +cmake/data/share/cmake-3.31/Help/variable/CTEST_USE_LAUNCHERS.rst,sha256=iTUupnxAMa5hOVU1YXIXWU8NYKKX561spucKdTAxdG0,156 +cmake/data/share/cmake-3.31/Help/variable/CYGWIN.rst,sha256=nkWDcc14aub-QqLUnEm-qwaplZR-r_WNSineMrHES7Q,72 +cmake/data/share/cmake-3.31/Help/variable/ENV.rst,sha256=xnvGD8XEEXuKclytyJYTmxxXHhbG58rkGXUdOTttORA,768 +cmake/data/share/cmake-3.31/Help/variable/EXECUTABLE_OUTPUT_PATH.rst,sha256=mVKyV7d_WuSlAIPcUZ3_H_-mGyMk_Stn8iDZWw4sahU,251 +cmake/data/share/cmake-3.31/Help/variable/GHSMULTI.rst,sha256=dqK5dPXLwURqFhRxsgOsEtnIpcJKkpHkwvPlKR3joZE,230 +cmake/data/share/cmake-3.31/Help/variable/IGNORE_SEARCH_LOCATIONS.txt,sha256=Q9pzN169y938i5XWMJhNWXr9RYYX-d1kryfEjAUjtnk,304 +cmake/data/share/cmake-3.31/Help/variable/IGNORE_SEARCH_NONSYSTEM.txt,sha256=hEeheCdiX55MHcz_js8GAU4uOkyFkR-kf1bbqWAS8gw,98 +cmake/data/share/cmake-3.31/Help/variable/IGNORE_SEARCH_PATH.txt,sha256=HhmAsaKjoEsm1lj7TSXPXDVUM3tpo28qoCTRyay-1T8,1171 +cmake/data/share/cmake-3.31/Help/variable/IGNORE_SEARCH_PREFIX.txt,sha256=1PhMGVOI9dE4Icm32gjzGA6ppsunQIBwJDq0bMuGYO8,399 +cmake/data/share/cmake-3.31/Help/variable/IGNORE_SEARCH_SYSTEM.txt,sha256=kbs_YOL27ap19X-VeoumfQhLV-9iyGEpLQkMum4Ew2g,317 +cmake/data/share/cmake-3.31/Help/variable/IOS.rst,sha256=JzKYH7r_rBdV96IEWeYwoTKnBygmqxkuqidQz1pMDcQ,113 +cmake/data/share/cmake-3.31/Help/variable/LIBRARY_OUTPUT_PATH.rst,sha256=C0VQxRY6QZo1w8lIe6Ar4sb0XXVYQoZbpPcnBEZCAp0,323 +cmake/data/share/cmake-3.31/Help/variable/LINKER_PREDEFINED_TYPES.txt,sha256=f-g51ri-ELf-n7om0n1m3Z6qBk0BRG5nqVyPVggmkPE,2711 +cmake/data/share/cmake-3.31/Help/variable/LINK_GROUP_PREDEFINED_FEATURES.txt,sha256=bAts6VDx-L7A-tnYSm-MhE2k5-6Bz79Ug9m1HckVD70,1231 +cmake/data/share/cmake-3.31/Help/variable/LINK_LIBRARY_PREDEFINED_FEATURES.txt,sha256=Vuy-tOOanxS65dbfXAhC4cSVEWYZsWXgusP8kKMX2S0,4678 +cmake/data/share/cmake-3.31/Help/variable/LINUX.rst,sha256=aA5ISyBoG6bYoEf2Z0SYi6-ZZQ99Yo7_gox0e61J_iw,82 +cmake/data/share/cmake-3.31/Help/variable/MINGW.rst,sha256=9GgLv-e-JHtZ0c2Hxf__y9Q0o8qc01nwe1Qe9wZHUY0,199 +cmake/data/share/cmake-3.31/Help/variable/MSVC.rst,sha256=TrDJTUJvaPxuQ0319w6eqWftM4r0spw7GKNzAO4K6-Y,208 +cmake/data/share/cmake-3.31/Help/variable/MSVC10.rst,sha256=YpwOoQJtYDibxwOmqax0F7mgQM4NnuOz-z3P-rEOEyw,205 +cmake/data/share/cmake-3.31/Help/variable/MSVC11.rst,sha256=Nn8Ia3t1qMrY1cLq_L3stZWnVm3J4oi7yAoM3sxclrs,205 +cmake/data/share/cmake-3.31/Help/variable/MSVC12.rst,sha256=uSIZGLyqy84gYceZxiJ7lKZxGtoL_odkrGaq_--5LUE,205 +cmake/data/share/cmake-3.31/Help/variable/MSVC14.rst,sha256=ElZ-zlF3UBzw_kbDUcwikfz-vFBZx5qWsHmbjwhV_LM,240 +cmake/data/share/cmake-3.31/Help/variable/MSVC60.rst,sha256=jmAf0QqeVz4gjM4c4Tl90Nr0hVlu50FYdGmcDfZJVjI,202 +cmake/data/share/cmake-3.31/Help/variable/MSVC70.rst,sha256=kff27JkeCjJbzKZnmXWS6eqmY1bVGHZ4_Mgx9PX_Svo,202 +cmake/data/share/cmake-3.31/Help/variable/MSVC71.rst,sha256=QzHoUiAuOSayNCWkNfSFiHBFx9nu2JrO5GaPxH-zcqo,202 +cmake/data/share/cmake-3.31/Help/variable/MSVC80.rst,sha256=gl7lbh9MdfYleUaIcRl5SIWk4oW1wOGbGsjfODePNgY,204 +cmake/data/share/cmake-3.31/Help/variable/MSVC90.rst,sha256=KN8OtXBr3bwcNu-Pl-9cXTSt4FYYfNje9JGxSJK_ZDw,204 +cmake/data/share/cmake-3.31/Help/variable/MSVC_IDE.rst,sha256=vxAbDdPPXKatv5jitMoOo3BXV5CKbJfgQ8IWMqfyElc,432 +cmake/data/share/cmake-3.31/Help/variable/MSVC_TOOLSET_VERSION.rst,sha256=N-QK4BnJP6gDWDcIhcq_b5PGcvfS7idwqS_AT2WU5dw,720 +cmake/data/share/cmake-3.31/Help/variable/MSVC_VERSION.rst,sha256=l33GHDtqAlzGNEpUXvD-KTytgBg6yDaIssqtQ94usUo,774 +cmake/data/share/cmake-3.31/Help/variable/MSYS.rst,sha256=tNRvrE5DSY3WCaf7Xi92-HX2fO1qBmSl9PsjSIvoQ8o,98 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_BINARY_DIR.rst,sha256=3CRrx4hAl25bm4-KE3lkJBM7cYPEU7eZSSJv1GeXtXo,315 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_DESCRIPTION.rst,sha256=clPtb5qjy-TJS5zsgQFBH0V-jmSkqb-spQxh0e_CKqo,225 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_HOMEPAGE_URL.rst,sha256=pgrUgW_3X9OxYnUaeU8JAbOhy6rQztfHsRXw6CUODgs,228 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_IS_TOP_LEVEL.rst,sha256=pec9zcJG1iEVCzsZg2wdE-pyqtO7aT0NCIGxl7kzFDs,1009 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_SOURCE_DIR.rst,sha256=273F2gi16yew0NXangFIvjb0wpzOZ6IxdCGVlNV9thM,315 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_VERSION.rst,sha256=X4ZCcLdBcHNjYaQpmvvj6rqwDc6ejiSCG1GtMeEY6SA,408 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_VERSION_MAJOR.rst,sha256=p1_FJiHJ1X-CI6L93_yDXkbi4syF4irvzvikdOW40no,183 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_VERSION_MINOR.rst,sha256=S8SJW-b6RurSJe9AJ4_PDL6MC-pDJy6NTXJNEkw6HM4,184 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_VERSION_PATCH.rst,sha256=baflF_37-s--2-IUOEdoPZljpbWvC_3qozJ9eyNO8rE,183 +cmake/data/share/cmake-3.31/Help/variable/PROJECT-NAME_VERSION_TWEAK.rst,sha256=InpyNx_uDpSsO_eI7GnIQT7fTOEo4AbJZj5394YIrhM,184 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_BINARY_DIR.rst,sha256=lAMGoNZx-vfHqqSHWeoAYvU9X3tSRUyKfCh7Ix8xwsg,158 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_DESCRIPTION.rst,sha256=fe0zB65tQmMCZpmTVwN7zJeBq1EZvDx0vZDCeImASqY,356 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_HOMEPAGE_URL.rst,sha256=OzmrcZshriq4jFUeTYamTWwrfUoPq2hcq3puF99s5x4,339 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_IS_TOP_LEVEL.rst,sha256=yOHTe9IQUzkzDUd8aBySn_kesb2jyz6QImes3-gbAGM,1294 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_NAME.rst,sha256=-HYIhxVrtKAUrxjyHbHlYT8EExMyIAr9w7XSt2rTM8w,292 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_SOURCE_DIR.rst,sha256=ZvHRX8zqJwcsQ-evPVrTgIHsaRryna5reB-QmzlhBUM,351 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_VERSION.rst,sha256=ptMvS_W9zcqVEe5nk1KQgGA7Kg27-OSWHUP8575Doe0,329 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_VERSION_MAJOR.rst,sha256=FlWbxkcjtjcCRdKKy57SAoglTG0m0Ei8FFM03p5qXHk,162 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_VERSION_MINOR.rst,sha256=VGZwXHHldJCcLH4HmBCwR7QPBglYV0KymakojP7Omzc,163 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_VERSION_PATCH.rst,sha256=WvVmt17rRbY73iIbXC8QumkBZ9DAIrULyHqw4xWvkxQ,162 +cmake/data/share/cmake-3.31/Help/variable/PROJECT_VERSION_TWEAK.rst,sha256=yWQET--iXuIGkofhdyRKYZRFhF3BMc5jLLyiHLYOTZI,163 +cmake/data/share/cmake-3.31/Help/variable/PackageName_ROOT.rst,sha256=nEUUTsrCGWy4QceSkeaIIpZRvLpEgiZYIk2mcSo3xl8,883 +cmake/data/share/cmake-3.31/Help/variable/UNIX.rst,sha256=ZRfZnj7n05-ArnWLyuWaLL20f9QdQ6GkxmiGYI7xZZA,249 +cmake/data/share/cmake-3.31/Help/variable/WASI.rst,sha256=QAiaTy_rd0JIb_-dbe7AXiM3ob2M5EWCB3K4fjzwd3A,148 +cmake/data/share/cmake-3.31/Help/variable/WIN32.rst,sha256=ZxDHwxq-PjrE8HYTHxr9U8yCTY0Abo-ztoPibDFHIlI,81 +cmake/data/share/cmake-3.31/Help/variable/WINCE.rst,sha256=n-SxaQq4UkWHHIBLdcjX1haEFj-jQrGveUdmBNDNOmc,114 +cmake/data/share/cmake-3.31/Help/variable/WINDOWS_PHONE.rst,sha256=Y3HBoHzMo0hL2xn9rTTDuM4YmMS8wyWjzaZS5sz78Uw,133 +cmake/data/share/cmake-3.31/Help/variable/WINDOWS_STORE.rst,sha256=UpnUO23qOrsqadIYh1tkrnMIpU4Y4mE7_pK5sFFjzxc,133 +cmake/data/share/cmake-3.31/Help/variable/XCODE.rst,sha256=nbDSAcNdFHYAKyuTReoNwPTllOCSuXmTvSkHy414ESs,86 +cmake/data/share/cmake-3.31/Help/variable/XCODE_VERSION.rst,sha256=7ZfxIFrlm3Wt5eqWSO3_IoxywnoB5xeUX-u6c1yDGsM,227 +cmake/data/share/cmake-3.31/Modules/AddFileDependencies.cmake,sha256=_WTFaXVjKDnBNxew7u-_Uyxrprij6tSQDMNPK8ztubs,955 +cmake/data/share/cmake-3.31/Modules/AndroidTestUtilities.cmake,sha256=AMJjpVB5_07K0eVy-l_PfPWaYp-CjF-9tzuRh7Ft8LA,6429 +cmake/data/share/cmake-3.31/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake,sha256=zKrLBewKdYrp1ia0pgec3kHVzQ1StQ-c3g-bYgDzrac,7478 +cmake/data/share/cmake-3.31/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in,sha256=ZDDdSSA5NWVB05mjflQF2Z6sq0Ml4gHGt2nX_bKi9og,1438 +cmake/data/share/cmake-3.31/Modules/BasicConfigVersion-ExactVersion.cmake.in,sha256=RdkKlgaNxVPYwPVZwB5s6Mshb30yQD-DZoPvuBSowp4,2842 +cmake/data/share/cmake-3.31/Modules/BasicConfigVersion-SameMajorVersion.cmake.in,sha256=__v99Or7Gjeo-Ulrg-7kt2ahWap_wfNN69oyvJUzJy0,2355 +cmake/data/share/cmake-3.31/Modules/BasicConfigVersion-SameMinorVersion.cmake.in,sha256=07qQ3W5s1g6zdqovxaf9U1kovDDpy30MegGjFyYA4Q4,3268 +cmake/data/share/cmake-3.31/Modules/BundleUtilities.cmake,sha256=UquyZH1F6kidpBTsI0QltIBFjNw0Le4Ls2R-OLoBuD4,41906 +cmake/data/share/cmake-3.31/Modules/CMake.cmake,sha256=k5XRM4J0A3hx4rWBiMjViWCNlU-7M-koXw8F7nS1a5Y,307 +cmake/data/share/cmake-3.31/Modules/CMakeASM-ATTInformation.cmake,sha256=8b6NQgThpixOitkH5ddrZAFx6RXrXowrFPpb0aDOnqA,566 +cmake/data/share/cmake-3.31/Modules/CMakeASMCompiler.cmake.in,sha256=h_mS7KLPvU64BN5_6lY75596zWkLQ0GBiXYFwpGcw8Y,1499 +cmake/data/share/cmake-3.31/Modules/CMakeASMInformation.cmake,sha256=6sbZqqZ_oBVM40oVkKl8o2rwV-OMVJJDh6ceF2hhrFI,4084 +cmake/data/share/cmake-3.31/Modules/CMakeASM_MARMASMInformation.cmake,sha256=1WaOvsje2kdAQbHXyqcOqYrdfFy4PNbXKxPKqyTkhxU,1307 +cmake/data/share/cmake-3.31/Modules/CMakeASM_MASMInformation.cmake,sha256=OQ0570OEgzHJdZHiIolTIiF19r0TFhTxRLUqDYma5cM,1306 +cmake/data/share/cmake-3.31/Modules/CMakeASM_NASMInformation.cmake,sha256=SQ1Z6-MaavO7FxDavovHFyV3z7uTuXV_HwkNVhxly7Y,2497 +cmake/data/share/cmake-3.31/Modules/CMakeAddFortranSubdirectory.cmake,sha256=xO8sZehVesrShpUT67ia8Wm0GGtCIcNKPkvSMsxrtLY,7306 +cmake/data/share/cmake-3.31/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in,sha256=O4wYulMGI-d04hmlHHLklNAzWWhDp5tFv7hxht-y_sY,96 +cmake/data/share/cmake-3.31/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in,sha256=2GOnX9kqkETDEXA6BR5cKqtanwUtZNXb8KqHxVBmqA0,296 +cmake/data/share/cmake-3.31/Modules/CMakeAddNewLanguage.txt,sha256=JySQ103nAar_FqShU9X9XQ8DKPGx-1v2GRBHhr9_yBc,1773 +cmake/data/share/cmake-3.31/Modules/CMakeBackwardCompatibilityC.cmake,sha256=GGhK6aVSJWhc01H9vaeOHdkSW04SyLQTr0ZSBJreuyw,2596 +cmake/data/share/cmake-3.31/Modules/CMakeBackwardCompatibilityCXX.cmake,sha256=saGcvaa25R9JypDWCPmcBNckudfdkxn7hc5ub0dRao4,1816 +cmake/data/share/cmake-3.31/Modules/CMakeBorlandFindMake.cmake,sha256=dZcqJnu1E-rXl9xsX7w24So4N_2pgiJC0G6U8qZqsPM,271 +cmake/data/share/cmake-3.31/Modules/CMakeBuildSettings.cmake.in,sha256=9u_Q4XdgTC5fXRsDI9XdDtcMB5rbWSVKJmw23ogQE4Y,681 +cmake/data/share/cmake-3.31/Modules/CMakeCCompiler.cmake.in,sha256=P-jFTpvWgCmDBDO1yt1Gc0Q8fyFAn-rNEE-POsMYZ2k,3555 +cmake/data/share/cmake-3.31/Modules/CMakeCCompilerABI.c,sha256=y_2OitKkyA_ymezalTgI4107ylYuIq3-MyMUco5RQOs,511 +cmake/data/share/cmake-3.31/Modules/CMakeCCompilerId.c.in,sha256=NKAMalQKissBUpuRBkhcZCYOhAVPQAST0nmgKI9Pj40,2953 +cmake/data/share/cmake-3.31/Modules/CMakeCInformation.cmake,sha256=S5EbN7ouQIHUe6AgYTYC30goP8qfCGKkJOPetiOfppE,5959 +cmake/data/share/cmake-3.31/Modules/CMakeCSharpCompiler.cmake.in,sha256=T78P0OQmBqnqRUekjZ8LxwRcuexHNFDhSEF0yiyxULc,477 +cmake/data/share/cmake-3.31/Modules/CMakeCSharpCompilerId.cs.in,sha256=LfOWYw0Q0sGtjdxp-ArmkRW48tMG9grIWdjlViZW6WE,1627 +cmake/data/share/cmake-3.31/Modules/CMakeCSharpInformation.cmake,sha256=sgQhyui2d5VkDttNBuXipMSG2_NcHiiENc1wMunsAv8,3063 +cmake/data/share/cmake-3.31/Modules/CMakeCUDACompiler.cmake.in,sha256=UFaC8jxZANWtwXQ8iZlHyFJeKDJcOuXnfXARuQHdZDs,4428 +cmake/data/share/cmake-3.31/Modules/CMakeCUDACompilerABI.cu,sha256=DTeJpz1hSJ4s19qNIYPqzgBpEaE6gi-FicXL_ow1DLU,631 +cmake/data/share/cmake-3.31/Modules/CMakeCUDACompilerId.cu.in,sha256=k0EE9SF9a4qZ_sQZm56OvL41vofBwNl6jP1sKG1oevQ,2954 +cmake/data/share/cmake-3.31/Modules/CMakeCUDAInformation.cmake,sha256=weD0nawadjVll40AJ50log3v8dNy5EY09pf1Zc4eAn8,6383 +cmake/data/share/cmake-3.31/Modules/CMakeCXXCompiler.cmake.in,sha256=n2UwXQQ2K_FzgTKkCheymJTDcyjVGIkoQoBxIWXoZ_s,4392 +cmake/data/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp,sha256=wKdHPwyvDalzXnCK-RV7uOaGzk35HZ_y0a6qvnl8LDI,388 +cmake/data/share/cmake-3.31/Modules/CMakeCXXCompilerId.cpp.in,sha256=2iqV5WrYXGGNcImYYWNIr1b-QUsKiSURcSLDBrfrc_Q,4217 +cmake/data/share/cmake-3.31/Modules/CMakeCXXInformation.cmake,sha256=OfBz6l6vxZpIegfhzi3aVKj-a2ORrVp5twwUFRUiY4k,6423 +cmake/data/share/cmake-3.31/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake,sha256=g1WM0h0Rpcm-s5vEyh_txRvK5d2pEIOYYUtE_bfY8iw,2147 +cmake/data/share/cmake-3.31/Modules/CMakeCommonLanguageInclude.cmake,sha256=FlJzmHNOjklTqIPZeXwfFW5SX2wyjNKHyxhhNrCXuvY,5173 +cmake/data/share/cmake-3.31/Modules/CMakeCompilerABI.h,sha256=YrRvkvyXYdZEr3Y5EMKbLMv7v7vvy8El7tdYXQNvU0U,1581 +cmake/data/share/cmake-3.31/Modules/CMakeCompilerCUDAArch.h,sha256=VSC9a1SsL3eBcJJlZPWWKHLEf4tj9XHu5eTA6zrzuTs,651 +cmake/data/share/cmake-3.31/Modules/CMakeCompilerIdDetection.cmake,sha256=_FBznDGpbzbXnUmoUg5IutEsM1kfZxqH2xBWhQnKsg0,4898 +cmake/data/share/cmake-3.31/Modules/CMakeConfigurableFile.in,sha256=FfOc13Cd-6f0y8Cc-DCUamPJbGF4VIb2y6kwsmxtTCg,34 +cmake/data/share/cmake-3.31/Modules/CMakeDependentOption.cmake,sha256=eZ4ILolDDxS9Qs4OT2NRVpCkTUAt_qcPxyQinizOVlY,3156 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineASM-ATTCompiler.cmake,sha256=LYn8Ik-FELNiLQfuQadSQVsgCKSLDVEYJEqPxm8bu_4,394 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineASMCompiler.cmake,sha256=9x1PlpsTLNQHn4JeERsU89wAPD1uIflXMJBCjJomFeE,12113 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineASM_MARMASMCompiler.cmake,sha256=hlqBGeGx8Z_-bvwP54h9lnmn9OgP2LLLDML1bZtjFLY,612 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineASM_MASMCompiler.cmake,sha256=Oa3CRnArgPjMdKvRxy2hNpdC13ulti0gEk_G45If0RE,586 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineASM_NASMCompiler.cmake,sha256=Bj_Bn0F8wgEuIdA9qMy4pGWuIfCn6lwM_Swwpd0Q1Io,937 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake,sha256=VwEOMHlSV3ofsMU7ZgJWFefAi9pkWihyE4aMumKpbvg,8822 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCSharpCompiler.cmake,sha256=Q5VPXRIwskBvWO0GVh0De2PIe1MVth-NkxlTp0vRW6s,1641 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCUDACompiler.cmake,sha256=RFLvQhw0iBrN930l5BgXaoI4fUfcxJHwdhya8EUowHg,12407 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake,sha256=KlNZ6g6uPR2uy_BZo-ZxRL4ToRb1Taf8jxxI8ybJVfg,9203 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCompiler.cmake,sha256=yFBG2jQZE3itMixfdTIsxSFH2a82S3tbdZa6xadPtpQ,7496 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake,sha256=Rxqco8dy0Nmc6FEVrktL4bZnKWXz2mEpX-hEmlhMsKs,12669 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake,sha256=TU104bOvedQ2kYv8WYy9x6vhGHUxqX41FnbT6SZ_594,56765 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineCompilerSupport.cmake,sha256=SgmOhxEWVyDxc4OVajoPFFOmgSABTop2E6rNU2dOQRY,10978 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineFortranCompiler.cmake,sha256=1tZF5CaEfGz5jEakhDwGJJh0pBR9GSDGh3S2b-dMfkQ,14330 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineHIPCompiler.cmake,sha256=i3NAqDV92VE789bhH_qvtzgbveL2klGC0wdBo70vOPE,14040 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineISPCCompiler.cmake,sha256=YXZng08ebqfDhxX9SBQP7jzDIUtKbvMoHxKP_zm1hSU,3045 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineJavaCompiler.cmake,sha256=qHAzB9a0WRv4pvSwMNkwltCmqJZjYMRp8teS5rHS8e8,3762 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineOBJCCompiler.cmake,sha256=FgTzekA4eFiu_JLse_qRIIrZWVFlKTsSwHD3cUlMvos,7457 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineOBJCXXCompiler.cmake,sha256=aKRR6nZU3ZujZ55En6lG9tHEWuj24_DLhftWiPS_xQI,7831 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineRCCompiler.cmake,sha256=LiI6M11Xy37nvQcLR2_6ghkeA09FQVqcPGvVaP5susE,2281 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineSwiftCompiler.cmake,sha256=wwMQH1Al_9vGASfkVO6Xqu16unlC1wu2X_pT94iKTtw,5856 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake,sha256=a46TfGE9vttk_TrLyDBd6GHlf4qfewMLZ2K5MFtXEUo,9367 +cmake/data/share/cmake-3.31/Modules/CMakeDetermineVSServicePack.cmake,sha256=DYrqOhQhXTaot6ZpnTST5uGEU7cYjgE8C1EmJRRQOKU,5992 +cmake/data/share/cmake-3.31/Modules/CMakeExpandImportedTargets.cmake,sha256=io6Dt9SElBQ00t3E0TrGBL8IMaLNG9XQPjMkwrXIUyA,6093 +cmake/data/share/cmake-3.31/Modules/CMakeExportBuildSettings.cmake,sha256=WQeuVg9QdliKG4HEILUSpVi6214WFPX8bumWOlRSqQg,1234 +cmake/data/share/cmake-3.31/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake,sha256=Roesszg-SwPlOELKkrq3Xwt8LFhdiu-ECudQ33p5pug,5323 +cmake/data/share/cmake-3.31/Modules/CMakeFindBinUtils.cmake,sha256=_cRm8s-OWwwsOFIvmJ4gtEDx-lqJDsUy4BZVuMV3MU4,10724 +cmake/data/share/cmake-3.31/Modules/CMakeFindCodeBlocks.cmake,sha256=ccVGZDxYNbJ5XQpFeEm4qWy2oqTOY6q6c-qV64cTrZI,1759 +cmake/data/share/cmake-3.31/Modules/CMakeFindDependencyMacro.cmake,sha256=B5Tg9bt5hFdYWZkN5CXy4PO3ojJM_kS-yZhYFSlUCyg,3849 +cmake/data/share/cmake-3.31/Modules/CMakeFindEclipseCDT4.cmake,sha256=4SI3H5Yvko5kq2pLg2bb2d0EOBERvldvCGOrpX3PlJE,4954 +cmake/data/share/cmake-3.31/Modules/CMakeFindFrameworks.cmake,sha256=KvsRLl_xuycPh4nievN5H22SFgITtI2kBp9nOiN-Xbk,2765 +cmake/data/share/cmake-3.31/Modules/CMakeFindJavaCommon.cmake,sha256=A_B0mbqq-XI2zVNPTyqHW5Fur61ucrVmNtaz8bsMxJA,1063 +cmake/data/share/cmake-3.31/Modules/CMakeFindKate.cmake,sha256=2_tFCaqXo0LkevEEbTX4YFJq9WKBdDQf5Ghr5S22flY,1253 +cmake/data/share/cmake-3.31/Modules/CMakeFindPackageMode.cmake,sha256=jjmtCB0es85dixr31VGJiH4KisJveMZHFu3FfaAT-Nw,6284 +cmake/data/share/cmake-3.31/Modules/CMakeFindSublimeText2.cmake,sha256=a92KePl3CgvpkIdJ33uv9CtEe5WKyMeczgl6v7xg-iQ,1033 +cmake/data/share/cmake-3.31/Modules/CMakeFindWMake.cmake,sha256=iLTa_AuzGlyCYtBd7Xq0t8JyTtkB1rn8nrEMAYUgDZI,272 +cmake/data/share/cmake-3.31/Modules/CMakeFindXCode.cmake,sha256=wM3T0EGsfeQbbKrQaGX0U09aoD5psDWvSaQi7Qjp6r4,250 +cmake/data/share/cmake-3.31/Modules/CMakeForceCompiler.cmake,sha256=5-ac9UaHefycMb6d4somJe_J5Tl8JgjoBWjV9xCKsig,4209 +cmake/data/share/cmake-3.31/Modules/CMakeFortranCompiler.cmake.in,sha256=jwTFuAR28lVcg5O6bo2mueDBoXs7Hb9hYIj-Wb3hBqo,3274 +cmake/data/share/cmake-3.31/Modules/CMakeFortranCompilerABI.F,sha256=bzb-bCF7zcnXWIO2Rm0iIIRWx4U4sB1tpD7pqEAVdDY,1115 +cmake/data/share/cmake-3.31/Modules/CMakeFortranCompilerABI.F90,sha256=tfBkyzznwbqVzJSUBAyeSzOBy6sbxUZdVB0Paykp2-E,1109 +cmake/data/share/cmake-3.31/Modules/CMakeFortranCompilerId.F.in,sha256=kPSMOdbaAaYQIM6nq5JpTz7E4eX6vNV7kEVYJ1BQ1fc,10894 +cmake/data/share/cmake-3.31/Modules/CMakeFortranInformation.cmake,sha256=gy46ke60REwOHScfqM48bO3qEHwVHKDCq1fSpFXUvZQ,5399 +cmake/data/share/cmake-3.31/Modules/CMakeGenericSystem.cmake,sha256=nrJPItj7WjuhzMhDy-20gwGDxsKGhJtjh6kYiK1S3wU,8101 +cmake/data/share/cmake-3.31/Modules/CMakeGraphVizOptions.cmake,sha256=pDyMQUoc4nx8-7-5GgFJb3zT9s6NGWVHfyf_Gw7xVB8,3822 +cmake/data/share/cmake-3.31/Modules/CMakeHIPCompiler.cmake.in,sha256=1XtAUgAMT180pCP0Z3GYz21NHFrAPRLs-nJNl4KJLAo,4471 +cmake/data/share/cmake-3.31/Modules/CMakeHIPCompilerABI.hip,sha256=D_6ulGoUsahIlJ6X5ZJvw_CuCqId_JhxbQWB8jrzUAA,642 +cmake/data/share/cmake-3.31/Modules/CMakeHIPCompilerId.hip.in,sha256=XfJrGW3ICG6Sd60KvXnKnf43m2DMhOHR7fWMJDifazU,2799 +cmake/data/share/cmake-3.31/Modules/CMakeHIPInformation.cmake,sha256=gfs-YQOOgLDnQQwNK-k9uqDmrRHCUsLsXdHOBTu6XT4,4250 +cmake/data/share/cmake-3.31/Modules/CMakeIOSInstallCombined.cmake,sha256=912ASk1bjuXVdyUxUme0W5Gm7SMUqO36DWIqPNtW1_Y,10440 +cmake/data/share/cmake-3.31/Modules/CMakeISPCCompiler.cmake.in,sha256=-tqklKRyawTtfsB7AS3c3xuUo0ogqaFyKiYIhGl2XgU,1177 +cmake/data/share/cmake-3.31/Modules/CMakeISPCCompilerABI.ispc,sha256=Ehy3aodKJiwPibigRt8q-WktWi1gO1VMSNXrBZfvwsQ,545 +cmake/data/share/cmake-3.31/Modules/CMakeISPCCompilerId.ispc.in,sha256=8_9hJ63u_lED7XKVIUkn48rD11GDvbAO3HmtTfQqTWI,2142 +cmake/data/share/cmake-3.31/Modules/CMakeISPCInformation.cmake,sha256=QiaWMN1W2IOzhzkyGg23erpsprkNq_msQJ-pvo6xQ1k,2457 +cmake/data/share/cmake-3.31/Modules/CMakeImportBuildSettings.cmake,sha256=SMmSEa1zFKzFkYWsSMhUB2C8luubE4w5NzHfXvCd-Hg,535 +cmake/data/share/cmake-3.31/Modules/CMakeInitializeConfigs.cmake,sha256=QN9yUnC3DBpbhdxGKVzRTXjaNiwHBa5MAfbTquymHn4,1574 +cmake/data/share/cmake-3.31/Modules/CMakeJOMFindMake.cmake,sha256=32Ms81RHmLw51rRw-q4FSAd4epLSY_QtHKSOAAn2nb8,270 +cmake/data/share/cmake-3.31/Modules/CMakeJavaCompiler.cmake.in,sha256=8SICjC0aFQ59BqtnCkb9bloY1zT8YN1w8lz_0oq5lAw,538 +cmake/data/share/cmake-3.31/Modules/CMakeJavaInformation.cmake,sha256=p_MwEfoHO7q7M6FQSs5LqYuYm3MJ_PM5hPnrgg_3dGw,1827 +cmake/data/share/cmake-3.31/Modules/CMakeLanguageInformation.cmake,sha256=RSC2qsm6TMSzoFD_uvqe2sC7cMQF8-P6LtIDknHAPa8,1263 +cmake/data/share/cmake-3.31/Modules/CMakeMSYSFindMake.cmake,sha256=ec13wcb81a14zbob4JiVVpkt7z3oLtLTRtBH4zy7rWA,608 +cmake/data/share/cmake-3.31/Modules/CMakeMinGWFindMake.cmake,sha256=pvw9vuwSreWAhvuFSsvhqHUmK2VuWZVtiU5wAZY0nBs,437 +cmake/data/share/cmake-3.31/Modules/CMakeNMakeFindMake.cmake,sha256=eqwpPv6nWjjO30QKQtYBZOhPL8qsfVUetp74jeYqkhs,272 +cmake/data/share/cmake-3.31/Modules/CMakeNinjaFindMake.cmake,sha256=_dqT987JRO8Y986Ji4rnnAERoc1yo546LLmKDeqHWOE,315 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCCompiler.cmake.in,sha256=DpdQImZ3Pna57bQebApsdra6F9XvFsxaoOhp8xbDl3U,3798 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCCompilerABI.m,sha256=CkyDO66oszSWdPCBimafRy9We6j5fBiLMRL4_6xV_EA,556 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCCompilerId.m.in,sha256=JXlYeZ03rNbGB1IyhiLYZNWZvHw4fgeJSIw4DFdxE10,2177 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCInformation.cmake,sha256=caCmVPKCRDRFBRTcFWpMdEftmkmdBo7eqSFrlLbm9a4,6722 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCXXCompiler.cmake.in,sha256=WXICS5QQUx6pGdwLKue_Dz7R7OsRPd5oAV5OXNbtfIE,4321 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCXXCompilerABI.mm,sha256=mJTyC1JaSkdvVf4q8-Ve2hW_RSo4hnvshrjNolOgcS8,557 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCXXCompilerId.mm.in,sha256=ZDPhdq6BYPkwxPx2k0jUXxg0lKWnMjDbQamQeJzIgmg,2201 +cmake/data/share/cmake-3.31/Modules/CMakeOBJCXXInformation.cmake,sha256=rcC_x2tAWvpS6pxz7xL77BLuXvie7DQlScHudT8lVVg,6660 +cmake/data/share/cmake-3.31/Modules/CMakePackageConfigHelpers.cmake,sha256=hQqxFKKsMF4q4tMrScCBPVKVZQpIfdY_-YeEe9yKl0o,26891 +cmake/data/share/cmake-3.31/Modules/CMakeParseArguments.cmake,sha256=z9s7E6UHwiYfWoi8KHiYn8pkY1fbwvqmYXz6vLSCDW8,581 +cmake/data/share/cmake-3.31/Modules/CMakeParseImplicitIncludeInfo.cmake,sha256=qOmPkRn9ooIpNViZSvy3P4mHk3w0f_0YiAVbkemF40w,9807 +cmake/data/share/cmake-3.31/Modules/CMakeParseImplicitLinkInfo.cmake,sha256=tTLMm17BARk3Pm-4G-a9juX0V85mgo_jglbQ7hZn2n4,17307 +cmake/data/share/cmake-3.31/Modules/CMakeParseLibraryArchitecture.cmake,sha256=fG2DGcRo9boLjZlRemkGNkPhfkX38E7sqbE2Y4bt6jY,1728 +cmake/data/share/cmake-3.31/Modules/CMakePlatformId.h.in,sha256=w449QAgzmUdgDj2mdz0exAah-ecE4Y_Wrrr89ZGZQmA,8949 +cmake/data/share/cmake-3.31/Modules/CMakePrintHelpers.cmake,sha256=qmLXzh0t8U5kBhm8xwBbDWfiDFwC7t_-5QPfRVuFU_o,4814 +cmake/data/share/cmake-3.31/Modules/CMakePrintSystemInformation.cmake,sha256=4qGYtA41xs2VRId258W--hlR1Xd_lntBXriAMFD5TR8,2191 +cmake/data/share/cmake-3.31/Modules/CMakePushCheckState.cmake,sha256=qjsq5xluwCBxitUIz6UVMjMxk0wbAYHLBYui9qM6mHI,4298 +cmake/data/share/cmake-3.31/Modules/CMakeRCCompiler.cmake.in,sha256=K7O8GeBI5Yj88u5uRaDdavXxs5wXDDQYuhJvMNcG8s8,270 +cmake/data/share/cmake-3.31/Modules/CMakeRCInformation.cmake,sha256=LaeRaldYIPW2sfMT6X98AOCe33qGhsaMzJGrcb_U4ZI,2032 +cmake/data/share/cmake-3.31/Modules/CMakeSwiftCompiler.cmake.in,sha256=sDkP5bsdTBTheahHzJw6dNeGMj9wJAwKaDlOqUMFcPY,717 +cmake/data/share/cmake-3.31/Modules/CMakeSwiftInformation.cmake,sha256=CQY1_w1qlaPCdt7l42fdb3SzOey0cXlqqW4El51UIRg,9144 +cmake/data/share/cmake-3.31/Modules/CMakeSystem.cmake.in,sha256=YLUWeHXWoB3k-5bHhKTgHVbzZfCW-polfGtrbZZp5Jo,563 +cmake/data/share/cmake-3.31/Modules/CMakeSystemSpecificInformation.cmake,sha256=ljKcOFMTYc9weUqg8yVTM3MG31jepbkMjNGd64Btsf8,2688 +cmake/data/share/cmake-3.31/Modules/CMakeSystemSpecificInitialize.cmake,sha256=Bf9IukAZYh9hiLzifVY2lMVrnBOgUhKkbIWx0Yp3_KM,1456 +cmake/data/share/cmake-3.31/Modules/CMakeTestASM-ATTCompiler.cmake,sha256=3aTP0FkWjHQOS__e64WhME7xRxxpQfz8R3fzyI8cxls,527 +cmake/data/share/cmake-3.31/Modules/CMakeTestASMCompiler.cmake,sha256=O5tzUtClDqGFekx_uupOyW1n9thWMi7haYuVt5B_80Y,865 +cmake/data/share/cmake-3.31/Modules/CMakeTestASM_MARMASMCompiler.cmake,sha256=P9O-uA7qhZlgSVgE1QY-xw0Tde4Xs2I1wx1KDpuWDzM,568 +cmake/data/share/cmake-3.31/Modules/CMakeTestASM_MASMCompiler.cmake,sha256=Ev_uS6GtYN_8jRiMgSkcMpm9vx9Ztah7qvFg7nP4Eyw,556 +cmake/data/share/cmake-3.31/Modules/CMakeTestASM_NASMCompiler.cmake,sha256=LcWnYMCZCcneqDeuBTL4aLlIFgQOFSGuf0dFrM7gOt4,529 +cmake/data/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake,sha256=hAURG231y_aMLTSE1DE8kEsb_hzGOv6_WMnZmCmqh98,3597 +cmake/data/share/cmake-3.31/Modules/CMakeTestCSharpCompiler.cmake,sha256=4GEpAO9iVHLSUVuaGpk-Kx9VLjoZGsPsw7SREoZMEaQ,2478 +cmake/data/share/cmake-3.31/Modules/CMakeTestCUDACompiler.cmake,sha256=t6NAQOzk7sHZPaczPvvDIYt42uBOK2x2ouTXqRjLalU,3731 +cmake/data/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake,sha256=fEHYDSxFJTtCAbf5Wgw4C-Y1MxYnx2rrvEyXbZxEmyw,4004 +cmake/data/share/cmake-3.31/Modules/CMakeTestCompilerCommon.cmake,sha256=vu0qgkmyd8mQUsko5_zOThu1IMJvV8Unkw7xGd8tBmY,1328 +cmake/data/share/cmake-3.31/Modules/CMakeTestFortranCompiler.cmake,sha256=D5ARWuN235FzpD2Mg6IZ6tcDE4vh2lgqtOviLu31lYM,4018 +cmake/data/share/cmake-3.31/Modules/CMakeTestGNU.c,sha256=IS8zkJVo56n4xgWEvEGoJJy0bgPZgpoxWI-xxsyzd9E,268 +cmake/data/share/cmake-3.31/Modules/CMakeTestHIPCompiler.cmake,sha256=Rw6jPpF6l-78D7ztyhVRSE-w7qdjMdhF8YOP7vkdnhI,4405 +cmake/data/share/cmake-3.31/Modules/CMakeTestISPCCompiler.cmake,sha256=f717elnuhosl4oOg9YNqWVoEg2dRlfN7Ax-XhkPNMDI,1451 +cmake/data/share/cmake-3.31/Modules/CMakeTestJavaCompiler.cmake,sha256=X-kJmo-2DCyM1n-8ThD6rR9u-KtBpRMf62n4dtUdVt0,484 +cmake/data/share/cmake-3.31/Modules/CMakeTestOBJCCompiler.cmake,sha256=E3tEAjzFck_x3t52_gVe7xfxgc4MFxnN5G2JrDbsuCE,3697 +cmake/data/share/cmake-3.31/Modules/CMakeTestOBJCXXCompiler.cmake,sha256=9G-ElvVfkSOcXTmBqcYcEOEVUKiS42FEVDksPSvP6Rc,3729 +cmake/data/share/cmake-3.31/Modules/CMakeTestRCCompiler.cmake,sha256=P266UVQld42Pph25jKqahpMWI8vFJHW15zD38NslhWA,573 +cmake/data/share/cmake-3.31/Modules/CMakeTestSwiftCompiler.cmake,sha256=Oum9IazfsjaW37KcN22R8M6rmeLX7OFegsGB__cd5eE,2604 +cmake/data/share/cmake-3.31/Modules/CMakeUnixFindMake.cmake,sha256=9Q2U7dJjbeKOq_1AYNiMtWJLCKkk04TKIpwX3nYb4kM,575 +cmake/data/share/cmake-3.31/Modules/CMakeVerifyManifest.cmake,sha256=MhALnYjBz0wBIXILkTwDxDmIv6-9y62x3Ze958yp3kE,4101 +cmake/data/share/cmake-3.31/Modules/CPack.cmake,sha256=l61Y7_QI5JqVpTut4aJPa_aw2lTxmPhwjz2duTFkY44,39833 +cmake/data/share/cmake-3.31/Modules/CPackComponent.cmake,sha256=cq4o_oXyUrHHxGTFotz9pdJkW_B3mXOfD5G7waLuUd0,20855 +cmake/data/share/cmake-3.31/Modules/CPackIFW.cmake,sha256=EFqXecorTn-fYOk5eiQoXIXa5NLhuCdyxFLWGdk6Esc,26650 +cmake/data/share/cmake-3.31/Modules/CPackIFWConfigureFile.cmake,sha256=Gfy_o5QoMTWZdjzXQLl3SG2_WIvXKhGNe88i8YUvBRk,2268 +cmake/data/share/cmake-3.31/Modules/CSharpUtilities.cmake,sha256=1PFXGhtrBwywfQapan6JwgHCNdcxIxEo3qsQ3amWlDU,10982 +cmake/data/share/cmake-3.31/Modules/CTest.cmake,sha256=6OeH_vlxwbtH00pOVv6COk_GxMF2xNaL9vMApv1v68E,9219 +cmake/data/share/cmake-3.31/Modules/CTestCoverageCollectGCOV.cmake,sha256=Qx1glegyT_RTkT2_yDN1kqrxe3JL11cW7cwDBlbxLYA,12266 +cmake/data/share/cmake-3.31/Modules/CTestScriptMode.cmake,sha256=oDthMcGPAGCcGm5LWBT26-XiMAmVTCbswgBaCjuHi9E,662 +cmake/data/share/cmake-3.31/Modules/CTestTargets.cmake,sha256=Wv6vO1Ov-K785T3RHuWOR-4DbpY7XaoB-UTJSA37xbo,3694 +cmake/data/share/cmake-3.31/Modules/CTestUseLaunchers.cmake,sha256=YgNXVsgijhHRpQvgbuLK-8SGWNLHUov2KkauYrRHCDg,3038 +cmake/data/share/cmake-3.31/Modules/CXX-DetectStdlib.h,sha256=hpDaOJ0qYdiI7Cp4OHOax9hCZ5Z-PKt8tu4B5f5mxDA,219 +cmake/data/share/cmake-3.31/Modules/CheckCCompilerFlag.cmake,sha256=1oJ-tDRiWDQ3_ye-l2FemKUPotqUFmT-EJK-OkcvP7I,2157 +cmake/data/share/cmake-3.31/Modules/CheckCSourceCompiles.cmake,sha256=FrEw7qXyejysGfWMoFJymQb0iydPysdy6jBIlsGY7wI,2108 +cmake/data/share/cmake-3.31/Modules/CheckCSourceRuns.cmake,sha256=pUfPs2wU_uQxNbNolaoJdJTIxX9AnzjxZOfqHYXQztM,1775 +cmake/data/share/cmake-3.31/Modules/CheckCXXCompilerFlag.cmake,sha256=SzSPlQuxawMsOG2KbuYWEBIEHBhEoyiUwqncr0hpMwo,2172 +cmake/data/share/cmake-3.31/Modules/CheckCXXSourceCompiles.cmake,sha256=wBoitwsjFBn6ULnSjQf-d2KAnbzdLkY7TsczV14noBk,2126 +cmake/data/share/cmake-3.31/Modules/CheckCXXSourceRuns.cmake,sha256=2C9sXz2LeJC2uEZBG1OvvHyFgr3JtYiP3KVnNjg9xn8,1791 +cmake/data/share/cmake-3.31/Modules/CheckCXXSymbolExists.cmake,sha256=4byJnCog5LUQYVVgs1eTcY-cVoi4CQg7rMkSSSnBUGo,2797 +cmake/data/share/cmake-3.31/Modules/CheckCompilerFlag.cmake,sha256=JImO8iFahScvoosEREjhvrleC6HGltmR7Q4AS9qUeRo,1959 +cmake/data/share/cmake-3.31/Modules/CheckForPthreads.c,sha256=hrvCNXBiPX6ARbCmIR7yc-SHBDBNde8cjA4T7ZvtkUk,280 +cmake/data/share/cmake-3.31/Modules/CheckFortranCompilerFlag.cmake,sha256=0nVLzNQxYDHw2SZRc6sjtgV9fitpw6mtnxCDVU_2ImI,2234 +cmake/data/share/cmake-3.31/Modules/CheckFortranFunctionExists.cmake,sha256=vYFnNEy2dj8KwQieghTeA3m57M-N0OpdoRly9HzFbBQ,2748 +cmake/data/share/cmake-3.31/Modules/CheckFortranSourceCompiles.cmake,sha256=oruC_OyIOKkLITIAB27Rh_2TE0w2UWTTb3e5pDpX5xk,2506 +cmake/data/share/cmake-3.31/Modules/CheckFortranSourceRuns.cmake,sha256=kpHXsuMqHkav1emsf4OL9pf22QJSfirtBqtDWQK0d-Q,2222 +cmake/data/share/cmake-3.31/Modules/CheckFunctionExists.c,sha256=4dFMbAVHJ0wVMe9_NHLAawug7FHOBDQSyJ-p2kDfQC0,433 +cmake/data/share/cmake-3.31/Modules/CheckFunctionExists.cmake,sha256=LdLGTXDwh1iAoDqFJHCQtH60NAuFYczkSs-Kmm__6nQ,3962 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported.cmake,sha256=jGuoPmBVoSMYdPRH-CaR49xWMYINf1IKRpgaS8w6u2U,7407 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/CMakeLists-C.txt.in,sha256=AQJZRwMl_CgGOTDDfWix7P9ZbgpPB6EzoazyMAKTJNM,220 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/CMakeLists-CXX.txt.in,sha256=FaVloUJqP8vRbkrUwMmUE3acJvDjh2z9DwNwm73gSxo,226 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/CMakeLists-Fortran.txt.in,sha256=kO453LKX83FMeWCLLtS6WvHE6e_ugu3nLynNTtYNgQw,226 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/foo.c,sha256=1D6ZIAH0ctpUxUSDM5a1BCIwKirfRItFozWXpVmqtQE,33 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/foo.cpp,sha256=yM30UxRtKKzuHk8hcu3Z_AVH-s2XuhufPFF5NUOrLQ8,29 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/foo.f,sha256=KEUK81tkAC1dRY9901YDuUa5Is5HYyPQ0kFs_IruN0Q,21 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/main.c,sha256=-ovP7-ZyisLQy-9qc6FJJcHCLvoSaCJJIywD4_f19Rg,51 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/main.cpp,sha256=WSv81rbXZyGLHZ8Bl6BXEEfDBgzK99RfJRkczTAyd7M,43 +cmake/data/share/cmake-3.31/Modules/CheckIPOSupported/main.f,sha256=a5G9yByuotcicRlY1EUmJEoVvW4VG3Qla0Ndbsdo8X4,30 +cmake/data/share/cmake-3.31/Modules/CheckIncludeFile.c.in,sha256=SFBodUIk1aC8BKfJIQlpY3Zoq-K4ShQvkNiZOERYtyQ,130 +cmake/data/share/cmake-3.31/Modules/CheckIncludeFile.cmake,sha256=0CfQy5AHGhDoN9Oshd4ckNwsXljxFmm0_WDbz6M4DM8,4451 +cmake/data/share/cmake-3.31/Modules/CheckIncludeFile.cxx.in,sha256=6cJYyGw9LNq3DEsyQykPqOYI98PO7cAilGe6WhaR0qk,65 +cmake/data/share/cmake-3.31/Modules/CheckIncludeFileCXX.cmake,sha256=2u9aQhM8yda3RZPYglHm_znh2STG2NWiKU1fx0zV1ZU,4484 +cmake/data/share/cmake-3.31/Modules/CheckIncludeFiles.cmake,sha256=GzA2dShl_RYqQ7MJupQgtpPkbEbLwDj55Ame3AoRVwc,5907 +cmake/data/share/cmake-3.31/Modules/CheckLanguage.cmake,sha256=4M1gX3BtlanRd1kdWKpctkivzASs0j32VXFYjLyNuYc,6152 +cmake/data/share/cmake-3.31/Modules/CheckLibraryExists.cmake,sha256=KPxti1QFxXzyVeVj4_dY6Eiui68gy_kqjQBKcL55ZTQ,3424 +cmake/data/share/cmake-3.31/Modules/CheckLinkerFlag.cmake,sha256=EIB86diKXKO4iUa7QAksCjuU4lqU4xBF9AV8D1qI41w,1748 +cmake/data/share/cmake-3.31/Modules/CheckOBJCCompilerFlag.cmake,sha256=XkMkdpbxqMSsl_CyLaMILRUmOpkfhQ8Bwax8MLDkxIg,2215 +cmake/data/share/cmake-3.31/Modules/CheckOBJCSourceCompiles.cmake,sha256=_6NEhTT-R_k4V4a9ng_aKYIRv17owLlz5cNX3wk9g6w,2160 +cmake/data/share/cmake-3.31/Modules/CheckOBJCSourceRuns.cmake,sha256=eIxajLrdaqujgYQg1Fb4ZbueoCNcKYz0KRp6ejEuiMU,1829 +cmake/data/share/cmake-3.31/Modules/CheckOBJCXXCompilerFlag.cmake,sha256=30uGWEMC6HYHhH8Ng5T-TWSXmOl2bQgTNNwcqDuc3mg,2233 +cmake/data/share/cmake-3.31/Modules/CheckOBJCXXSourceCompiles.cmake,sha256=yiUhtJLMyUgipuMoUwJufqdfv_ePM47GPcsh83_3KGI,2178 +cmake/data/share/cmake-3.31/Modules/CheckOBJCXXSourceRuns.cmake,sha256=gAqBMNbHWd7XPkBqi02sHIqDy-cgcTyoEysYpbsgHY8,1845 +cmake/data/share/cmake-3.31/Modules/CheckPIESupported.cmake,sha256=sZ6qEQBryBph4asyPAkPvxbN023dWe7-AJGqCN56WXQ,5162 +cmake/data/share/cmake-3.31/Modules/CheckPrototypeDefinition.c.in,sha256=nr79hBDMacUuL15FChMmkwdWfwtaW1sCaUsYDf-zAWc,514 +cmake/data/share/cmake-3.31/Modules/CheckPrototypeDefinition.cmake,sha256=nD7ynFXQXbg6cGglYDPSNTkM0f7-6y9hCgP0T6S3B80,4080 +cmake/data/share/cmake-3.31/Modules/CheckSizeOf.cmake,sha256=qgvMzDn-caAWvajdPkcXx3f3jpPUb699c4ozQi7KoV4,348 +cmake/data/share/cmake-3.31/Modules/CheckSourceCompiles.cmake,sha256=v-jp63nVdfoWM--36fyap8mWLn98lfE0Hj2eYrg28Aw,2927 +cmake/data/share/cmake-3.31/Modules/CheckSourceRuns.cmake,sha256=FcZuXbqmjmlWPZ1YI90NA7xjEtKkEq2Pf3BIL0asyPc,2317 +cmake/data/share/cmake-3.31/Modules/CheckStructHasMember.cmake,sha256=h3nGzj3PxrEMw2uIxHnfUnj9dLAY6OJ6vn2eWh1jEys,2655 +cmake/data/share/cmake-3.31/Modules/CheckSymbolExists.cmake,sha256=hpwgEVN2woviVFv91H4FvlqzvoZaeHc0m2Zw_UWQMCw,6234 +cmake/data/share/cmake-3.31/Modules/CheckTypeSize.c.in,sha256=gEgfqbI7KghhHzVc0HX71g8JWeLnbwpfUwLR8cul24w,1238 +cmake/data/share/cmake-3.31/Modules/CheckTypeSize.cmake,sha256=nCIDwyta6mhexGYrSos_J39CYPIsmQxxkJAtEgHDZMg,10087 +cmake/data/share/cmake-3.31/Modules/CheckTypeSizeMap.cmake.in,sha256=JVG-HMS0679BxJ8tB7fRTsBL9zASj2QJTjBuJZSk6iI,31 +cmake/data/share/cmake-3.31/Modules/CheckVariableExists.c,sha256=4WV-J-Ui7ZmYmAq4sA2BrN7R1JIrcZbLrVPt5_Qiqr4,382 +cmake/data/share/cmake-3.31/Modules/CheckVariableExists.cmake,sha256=dvZqbBZlhuwgLz13leVchHSBVGagLV9ebIC0aa-jv9M,2687 +cmake/data/share/cmake-3.31/Modules/Compiler/ADSP-ASM.cmake,sha256=fUuVMfq2LQt960MxzxJM2DxtxzrZw1OhWD9RbeVLP_Y,91 +cmake/data/share/cmake-3.31/Modules/Compiler/ADSP-C.cmake,sha256=qlEP22-f5idlCWWKaLuFnxqaHU55lCoCusuZghIL3Uw,314 +cmake/data/share/cmake-3.31/Modules/Compiler/ADSP-CXX.cmake,sha256=CMMotbIio1WTEwVJxmbRR9Q-CZHab2Y5uZJVt2e-sFQ,585 +cmake/data/share/cmake-3.31/Modules/Compiler/ADSP-DetermineCompiler.cmake,sha256=OoPikpzWbsgLV-WvY3AcryaLxy6b1vsdXieZOrer-PE,482 +cmake/data/share/cmake-3.31/Modules/Compiler/ADSP.cmake,sha256=klHuH4PG9XkRP4mLlUSWNjK75iymOFyOLwINm0c6x2E,992 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMCC-ASM.cmake,sha256=PkNX-3NpyTStFFeuJGRngid-1sqRQDXmqE3Rvw5sx9s,254 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMCC-C.cmake,sha256=FGL_n7k_EmEgzLlyw5cMWKWuR2Zf_UElJXxUrPa8FLA,44 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMCC-CXX.cmake,sha256=T9je-iuR3DnWLPRFPAv8D9oJVcSTT5BeZD3sZUtiH9A,46 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMCC-DetermineCompiler.cmake,sha256=Fw5oydaTLHKHwn5_v3fktyGfa4w5Wy8LEiO2csWyxWg,731 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMCC.cmake,sha256=TwJwsHVogp98nvOy6KLZKT1JNVom6eGBQ82kfVTg3rI,1770 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMClang-ASM.cmake,sha256=3ocFIx6c6JwvrcN_v8f1uv0zDf1t0JQ_HPpYzmTiK3Y,296 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMClang-C-FeatureTests.cmake,sha256=EjRRfPA6hcJNLulMkfYojRghg-EOFOq822jX-cZd0CA,39 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMClang-C.cmake,sha256=LkCotAkLUGwkzsApi8C1vx84A6xHzYH0QZmZdKhgNcg,1220 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake,sha256=3QBjEUalfLjHNpaS2fFSujkuiTqEoBXrYrENwnCGfRQ,41 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMClang-CXX.cmake,sha256=nGNYUDiywNB9npFNSbpwsnuNZgxKzGDKIaBrGLUljgM,378 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMClang-DetermineCompiler.cmake,sha256=bQeGslVEZUaHDkqrD_uoR5a1BuUMIB3wYh2UPOsfiqs,529 +cmake/data/share/cmake-3.31/Modules/Compiler/ARMClang.cmake,sha256=YYINjjPovPdm7FKvOD2iYrNaRvxjC6zYHcNcqaf28Zg,6283 +cmake/data/share/cmake-3.31/Modules/Compiler/Absoft-Fortran.cmake,sha256=aCVjqhamvQAvv_nT_Tn6s8Uf3cePqJVtmgm1fcS5e8c,645 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-ASM.cmake,sha256=eqMGWp-cgcnRJd1fp6YNpOEfevgixqevve_c7ekfxCY,28 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-C-FeatureTests.cmake,sha256=ChdI7eyNO1F9ob-Qz7qtM6bItCeAGohJEhvkm52uqOw,595 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-C.cmake,sha256=lynto1SOgRAloDpZVDRU8KkdIu7yQvpKPg3lfSqwjks,1500 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-CXX-FeatureTests.cmake,sha256=bDypza6FnF5JXPXvacMGjomUcbxs8VSr_8aLv2a5DXo,3039 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-CXX.cmake,sha256=MNTWlEML3f9PL6I_b1wpBcJo-4_D42I9qChW3VVkjXw,2777 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-DetermineCompiler.cmake,sha256=EsL1FrI2WasNjmYk9eZOWZX1cRYTexj-otgtQbdixrg,285 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-OBJC.cmake,sha256=3AoV9ry9s6ZOpiMv2P8I1zHiAKQxGSDpcMAEiUmNBws,1663 +cmake/data/share/cmake-3.31/Modules/Compiler/AppleClang-OBJCXX.cmake,sha256=qo3oIVLW_OGQasN6JEJncPylqGi5dcDwdylT7lI-xt4,2315 +cmake/data/share/cmake-3.31/Modules/Compiler/Borland-DetermineCompiler.cmake,sha256=NUkZbSLJY_FgsHb4B51IT7UfGj21MJX2L2PeM5HUi24,260 +cmake/data/share/cmake-3.31/Modules/Compiler/Bruce-C-DetermineCompiler.cmake,sha256=JXQkbFPnn3HXWC6f954tvn7D-LzrYay9zNNmraZhiIc,45 +cmake/data/share/cmake-3.31/Modules/Compiler/Bruce-C.cmake,sha256=y8zFj2cbYapN3PljG4tbEEppVrG5WUj005QASs3a0HE,434 +cmake/data/share/cmake-3.31/Modules/Compiler/CCur-Fortran.cmake,sha256=t8f0a7joEk4KwK7VfFHyMd3mR0Q5eN-pz-LmdVImdAw,30 +cmake/data/share/cmake-3.31/Modules/Compiler/CMakeCommonCompilerMacros.cmake,sha256=8pfd1TScjpamUbiVmOOQkpVbCdYyjA_MIEE0KYnu_gk,10295 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-ASM.cmake,sha256=htOVe03TutrGrhGhU7EVsuCBhMFSRfPcKUxiMLF6SsQ,94 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-C-FeatureTests.cmake,sha256=yqjQug3je9jP_CixzWUpTI5Ho0lGL9C9cJZWlK9bERk,560 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-C.cmake,sha256=2BXgqsFH93TLPU40kIKnzGIcfXsDgIwOauWtbpv7xtQ,3513 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-CUDA.cmake,sha256=F9ZWHZDh6KEGm7ttbsMEI5rEScTnqFGyfqWvgFulYdA,2260 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-CXX-CXXImportStd.cmake,sha256=F-A8_8VufFliBSKJkHuC7lp1TqSrEDtis0ziLFc5QCo,7826 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-CXX-FeatureTests.cmake,sha256=FMZ3Ct8lb4_W4oRKoHQb-5OjPdTXU7pXBYe8SroeisU,1727 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-CXX-TestableFeatures.cmake,sha256=qRYPftxsegJm0VEqYh2KZ4NuWM4cY9mR19-gVFN6Nk8,2033 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-CXX.cmake,sha256=fV7puuMix74r_pqkhsQI63jO5yMQfU6JZdLg6M49448,2772 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompiler.cmake,sha256=nCRmF_sIbE7eExzPSuwsApaD8tP_HFwy_wRbb0CdHNY,124 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompilerInternal.cmake,sha256=tW2113TSc9aW34MCzjzTQhBHGQGI3nlvqjunuyTzGvk,545 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-FindBinUtils.cmake,sha256=zu0N_dEap4Frr85HWdKqnrmmrCwC962drSt-RkJyP8A,2497 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-HIP.cmake,sha256=pr_hlEytT0siMbuB08T-SUJYGOyhTdmk1hoq_ov60Bk,651 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-OBJC.cmake,sha256=1VMRTET5qq77iIJ2wtwyK_7PrcupzBGFoNofKbmQVlo,1530 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang-OBJCXX.cmake,sha256=AJWgVQhUbhoEBbjTAY4fLb6wGyjO8u75GDb4EbeNLbM,395 +cmake/data/share/cmake-3.31/Modules/Compiler/Clang.cmake,sha256=OGJ3mkeaBF6ImuKgHMob6Jwx0g7zUPWP7n-5Yum8XxY,13487 +cmake/data/share/cmake-3.31/Modules/Compiler/Compaq-C-DetermineCompiler.cmake,sha256=hjrH5yU2BuvKMvRbX4c0e-Zgsq0wP7JBxGKzoElKBR8,345 +cmake/data/share/cmake-3.31/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake,sha256=2TV9AmT83OQF9jOQH216OUQz2LdaawU7wbopSwkzkZ4,355 +cmake/data/share/cmake-3.31/Modules/Compiler/Cray-C.cmake,sha256=_zqZwxnO8rchHcJQRRyiVjcrBvvdoHlpdafSmUV_8PY,1045 +cmake/data/share/cmake-3.31/Modules/Compiler/Cray-CXX.cmake,sha256=l2U3t2s8l-rGY1L19mzC-PJhhbKjjH9iuBJxubYxsW0,1170 +cmake/data/share/cmake-3.31/Modules/Compiler/Cray-DetermineCompiler.cmake,sha256=T1kA-1qz1UCxNTrF6tiqu57vigLq_rco5BmDx4vUJVM,219 +cmake/data/share/cmake-3.31/Modules/Compiler/Cray-Fortran.cmake,sha256=53I2QPp2G5NpapliRguCMMbqVng_jWqqJeWK5y7pt3U,970 +cmake/data/share/cmake-3.31/Modules/Compiler/Cray.cmake,sha256=685jl9HaXatPT3ITbshLoXm4O250fc6IyoGDPTv6AVA,544 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayClang-C.cmake,sha256=E68Z874Zrz-mijiI1kJfZvOp2NfPoBu_qnTfwOKgM2U,1091 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayClang-CXX.cmake,sha256=zN7zd5vsx0oeAkoy7hPB-jlKR9dxBIxYaPyzpxjr2Sc,1348 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayClang-DetermineCompiler.cmake,sha256=CtkngEhUZkOpczNjEE8mLrPFx41Xniz_E7VmGr91c-A,381 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayClang.cmake,sha256=y7aUVbjBVGg4I-QhXF1Xb-1IM1CyXwaZMWXBNhFZuhg,589 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayPrgEnv-C.cmake,sha256=Q8kINSAv0RCIwx8UHwtrs4hFfo1Yiafq7TvHiC4X3po,132 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayPrgEnv-CXX.cmake,sha256=3YXtkxiW26uraYHFJjB_0UyJIJ_GbMv18wa9RNYMnPw,138 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayPrgEnv-Fortran.cmake,sha256=sKpkFaA1otZKGMfLygR7U1mIEbLaJWIcpkTNYfIZtcs,150 +cmake/data/share/cmake-3.31/Modules/Compiler/CrayPrgEnv.cmake,sha256=2RVSv9WYqXJ-D4KdC9aQG85k4eG3vzf8vut9Tvfojyg,5621 +cmake/data/share/cmake-3.31/Modules/Compiler/Embarcadero-DetermineCompiler.cmake,sha256=ldukHG2K2bI8pbDoLkDBjEWF48bOSqyJ9Se2-R-TRhA,387 +cmake/data/share/cmake-3.31/Modules/Compiler/Flang-FindBinUtils.cmake,sha256=uwxW48VE6v2tiFgiAe6OkUEAobSMqqGlwXq5_oYKl1w,37 +cmake/data/share/cmake-3.31/Modules/Compiler/Flang-Fortran.cmake,sha256=LvB5080N7j2JiCWfKECjs21gllJYCkPOrDznuFHP25k,523 +cmake/data/share/cmake-3.31/Modules/Compiler/Fujitsu-C.cmake,sha256=LzyxzdwL6Ff8Btts5RvgXvQESlq3vQbKzjk25CUl91I,794 +cmake/data/share/cmake-3.31/Modules/Compiler/Fujitsu-CXX.cmake,sha256=mc6EyMxCd2NWoFH2c08E9w7acA7xPDsn7MASeBGvn7Y,2137 +cmake/data/share/cmake-3.31/Modules/Compiler/Fujitsu-DetermineCompiler.cmake,sha256=PxJszriLozUis1rUIbs9ufMY8X-hyjP4RG9LTzhDXKs,629 +cmake/data/share/cmake-3.31/Modules/Compiler/Fujitsu-Fortran.cmake,sha256=TLUnG1WYfDeJdoWtUyD7Kw5-F8DfZXcIkhMlS3cEVkA,506 +cmake/data/share/cmake-3.31/Modules/Compiler/Fujitsu.cmake,sha256=FGGAKArz__WX3B4G8Le9BBUqoBnei2HMyWOncGwy-qs,1682 +cmake/data/share/cmake-3.31/Modules/Compiler/FujitsuClang-C.cmake,sha256=xOpCfG0r6QmbmyIqd74GtZngggTUol5CWEMOzO7xinA,232 +cmake/data/share/cmake-3.31/Modules/Compiler/FujitsuClang-CXX.cmake,sha256=m736MuV2bqPQSWvJ86mnA5k7cmdsfpdPqtQYsJBjebM,242 +cmake/data/share/cmake-3.31/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake,sha256=0nemAqqYKD_NWHrA1X0fy3jKLQx6AXiUDHgzt1hocTU,364 +cmake/data/share/cmake-3.31/Modules/Compiler/FujitsuClang-FindBinUtils.cmake,sha256=3PaFSABhgaXJ1nJMByuP3-FZAxrC0eIuhIycM6o5vi4,293 +cmake/data/share/cmake-3.31/Modules/Compiler/FujitsuClang.cmake,sha256=SBLagybHno6Vefn19ds_bwV-b-HmK_9NvlbfdfFctEk,315 +cmake/data/share/cmake-3.31/Modules/Compiler/G95-Fortran.cmake,sha256=3BZ33zwxRTYgLXNv9qJDH8crxL8QVCGX3kmU9phOweg,662 +cmake/data/share/cmake-3.31/Modules/Compiler/GHS-C.cmake,sha256=Woygh7VHJJk43PCoZbKe38Go89l1m9LGD--INhc1CA4,344 +cmake/data/share/cmake-3.31/Modules/Compiler/GHS-CXX.cmake,sha256=aQrlEZ8IX3dyHBmpiWEaPNsV5hPt0a038c9jLdFq8jY,358 +cmake/data/share/cmake-3.31/Modules/Compiler/GHS-DetermineCompiler.cmake,sha256=GPi1CCEh_GkAXqLzJBEfqmu-diWkMpaft3yQZD8GcEU,404 +cmake/data/share/cmake-3.31/Modules/Compiler/GHS.cmake,sha256=oZ9yYZgPARIRPCBD3vLlKAqHsuaXdJjANIMtMViiKsQ,163 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-ASM.cmake,sha256=7v3zCymTVoUOtPBGRZXJBsXEWCjoX-0lwqm5K2Fp_sE,536 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-C-DetermineCompiler.cmake,sha256=sBA9Vr0qs64_o0BZ1Q3D901jnW6JT8NZ8sUqBLp2F8o,369 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-C-FeatureTests.cmake,sha256=HRW7q6t7ERJpzlBXB0nNBh4WaLQEWEseSblxHF4SCc0,981 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-C.cmake,sha256=PaAaH7HiCdSfILDUt2TfCDvdWyh0i_i6j8lECvpx_hQ,484 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake,sha256=VNQ6AJH3xZmCzKInnVXVCrwveSEeHnlZ4hfPKSEm-NE,492 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-CXX-FeatureTests.cmake,sha256=PrhKhPMFdBWhREoQbaw3X9LQCGMnTFreViMZZ0lLe9Q,7035 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-CXX.cmake,sha256=qZP2SJs0ru_fTtym8uLRQtIhxbiUgVmrV4hZpXPq77Y,1667 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-FindBinUtils.cmake,sha256=VGqVhxV_yK1AwABYBlj5QtE3BJ5pSR1tiehWezZRjuI,1828 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-Fortran.cmake,sha256=FKFsDTLYP_7mw0iEAscClWS-qVIj8DBfQmzAS5Z2NTg,779 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-OBJC.cmake,sha256=U59Ff74N_E2PPXY_AM_KYspjElwEL3WNFhLo70mE24w,378 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU-OBJCXX.cmake,sha256=u_VcZfk8vYi4CsoIJlQfbd5Pq6wOSFy96USKFWhKMCQ,628 +cmake/data/share/cmake-3.31/Modules/Compiler/GNU.cmake,sha256=QkuFCvrRB8fSwRQvE1OLEu6x8TuBm3m1T6VLlZDDZYM,11657 +cmake/data/share/cmake-3.31/Modules/Compiler/HP-ASM.cmake,sha256=290SK89GOS1lZuhfsTgd_NdIO9vEU5Y-f_AXa1Hh7Nk,75 +cmake/data/share/cmake-3.31/Modules/Compiler/HP-C-DetermineCompiler.cmake,sha256=kmso7FtO1sLMRgiAUS-jxjfBhKhDvrchNCcKzVCJYE8,318 +cmake/data/share/cmake-3.31/Modules/Compiler/HP-C.cmake,sha256=PQaup3wlyfDUm3Dr5J84xb7hHNrV5uLRcpOVvCgMUN8,359 +cmake/data/share/cmake-3.31/Modules/Compiler/HP-CXX-DetermineCompiler.cmake,sha256=6_6laecA3FcYa9phMBATpoi0VPilBvBGuTayHOD8rBM,323 +cmake/data/share/cmake-3.31/Modules/Compiler/HP-CXX.cmake,sha256=NXdXC3nwO4FH2ANRAP5dqsafpcP4jN8cn4hUf_kE3Oc,782 +cmake/data/share/cmake-3.31/Modules/Compiler/HP-Fortran.cmake,sha256=4XE3UUhqhvZ9LsXsYg9DVKM5VxNvHcxw_WwTYcXogek,622 +cmake/data/share/cmake-3.31/Modules/Compiler/IAR-ASM.cmake,sha256=oEiJRe_wcNTpK3uFcF5k77Stq_vVitCIMBtdKDT2Ij0,3128 +cmake/data/share/cmake-3.31/Modules/Compiler/IAR-C.cmake,sha256=Lgxsxe4VwEJPHyaPQd5LygoBtvI_u11gLsBpUsv4Mqk,3536 +cmake/data/share/cmake-3.31/Modules/Compiler/IAR-CXX.cmake,sha256=UtGKByznUtdGvFm4EzDdBBalqQ3lKl0bBJ9NaPLoMrY,3914 +cmake/data/share/cmake-3.31/Modules/Compiler/IAR-DetermineCompiler.cmake,sha256=KpTDNLO5BfpuhPS5E1ecehrZvnFp4NQrsMW2tJldJ2A,2121 +cmake/data/share/cmake-3.31/Modules/Compiler/IAR.cmake,sha256=o7kgOGxlvHRY3LioOGHcnyPlOVi28EQEbS3if8TxQxA,2931 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake,sha256=YbfnejMiHcGpbjjnjZTR5yHllqbqRWLl9zv1SIpVvj4,267 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake,sha256=CJbwa0GUolVWpEPxAU8SyQn5ePt9x1KcSW20JSucuYQ,275 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMClang-ASM.cmake,sha256=efVcl-uewoHUu1cTchc8FKHVDHIq9BfKeJXa7zW7CKA,100 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake,sha256=W39GsRgMFq13WSe1tVXNCzVLS8xz9HWamXdRbh72qMs,413 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMClang-C.cmake,sha256=p_FZVpLZurr-lIb8cZ-tMrXZHNsE2Nyl6Bmvqk62keI,1142 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake,sha256=W39GsRgMFq13WSe1tVXNCzVLS8xz9HWamXdRbh72qMs,413 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMClang-CXX.cmake,sha256=v4j9v32p_jYtSXCkIuN9lB5ARF1AMH_Ghb0mClJVcKc,1723 +cmake/data/share/cmake-3.31/Modules/Compiler/IBMClang.cmake,sha256=EFQ5CpO7XwqHAmjsEMZrDC3k1Aka_uTg9t28o0a6CMM,2711 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-ASM.cmake,sha256=LWrwqeogiutuV5AWxJPYgH3Mj35OsZn0L0GQLxGJtBs,338 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-C-FeatureTests.cmake,sha256=CJlSV7Msl8Efcy4Kru-KEgQ5xDCbwmdOBA_WF3G2lmA,1042 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-C.cmake,sha256=E_w_R30adL6Cr1BRVSvNVrzcObDvjUuQIEyz2btmg8c,2493 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-CXX-FeatureTests.cmake,sha256=YazI3EgoPBnF0XWNVWOQCuOVfpA63vA1B-5Uk0KVsW0,6985 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-CXX.cmake,sha256=i4Y8mqWO4aoiyVh13NAmvU46e4QZSI801lOwtVQF3Cg,4357 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-DetermineCompiler.cmake,sha256=zldbudEmWQOGAEEHVMhCmgKW2DLXiODRn7iEP8g7ghc,1998 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-Fortran.cmake,sha256=gzh7BQx7faegpGbeJ44MbnTbEd838oMSEJkvIIvYsmY,1037 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel-ISPC.cmake,sha256=5RpICQfDfxi5ElWXHDje-kjuqkJBMRor-ufPhXigAk4,1014 +cmake/data/share/cmake-3.31/Modules/Compiler/Intel.cmake,sha256=r26Xb4JXoYQurnQTRwXTzchkV-wAqANInM_vKUfOjV4,2200 +cmake/data/share/cmake-3.31/Modules/Compiler/IntelLLVM-ASM.cmake,sha256=JJkaeZ0Nf_Y2TSjsMKjNU9GiitusFF-0AxdIfM58HFY,347 +cmake/data/share/cmake-3.31/Modules/Compiler/IntelLLVM-C.cmake,sha256=EVL3wrUD9uhj188d7801EtQaIYB-_VyS3Uuj_cXPHwQ,2661 +cmake/data/share/cmake-3.31/Modules/Compiler/IntelLLVM-CXX.cmake,sha256=XdS6qpP4vzdzg3SsWYeKeF-DkQWMhayVj2TvtVK7b4k,4002 +cmake/data/share/cmake-3.31/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake,sha256=b-4VcFvxbcf1e4BtnnYwM9W00kmuN-S5JuRZHrBJiPs,1679 +cmake/data/share/cmake-3.31/Modules/Compiler/IntelLLVM-FindBinUtils.cmake,sha256=kPoy74yGRNKi9g9mycNH81aFN4MWhV97nsqD7eVimiQ,2122 +cmake/data/share/cmake-3.31/Modules/Compiler/IntelLLVM-Fortran.cmake,sha256=YVqJ9Fp2D5s60OTiSCSsajEIrJXcYLf9qAOQxPX4PrE,1046 +cmake/data/share/cmake-3.31/Modules/Compiler/IntelLLVM.cmake,sha256=eGC3QhbUpzLilRugInBkJXZpuXrObJu0XZ39lVUMbUk,5625 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-C-DetermineCompiler.cmake,sha256=r8o8qkX9wZR_JrwYHD4o4IPwvUaoqciOZsXzX20_C9o,734 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-C-FeatureTests.cmake,sha256=HRW7q6t7ERJpzlBXB0nNBh4WaLQEWEseSblxHF4SCc0,981 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-C.cmake,sha256=ALZZfiMWH5O39jcL3p0tBk3GvHGZlbpAFPzxzJIDEpE,1317 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake,sha256=r8o8qkX9wZR_JrwYHD4o4IPwvUaoqciOZsXzX20_C9o,734 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-CXX-FeatureTests.cmake,sha256=PrhKhPMFdBWhREoQbaw3X9LQCGMnTFreViMZZ0lLe9Q,7035 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-CXX.cmake,sha256=VxaeWFtjPs9vK__N82PoIZUqb9H6gVwSa02eB2w_iSc,1739 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-FindBinUtils.cmake,sha256=khE78qM2S1oiaNjaRs4vJTRm8V9WRJ7P2vWd0VtQj6I,1718 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC-Fortran.cmake,sha256=sLu3nRvGtm4DyD8vVTvP22EWes65nJ1c55B6cE6qvRE,980 +cmake/data/share/cmake-3.31/Modules/Compiler/LCC.cmake,sha256=_6R3MTaaZ6fjWc4sS-kgwTXhM_UtDosjwOgLtQCBrhw,4381 +cmake/data/share/cmake-3.31/Modules/Compiler/LFortran-Fortran.cmake,sha256=AUcKg5UUBu_Koj05CvPN94Wg8oFxBGlwiyiXzbVg1zg,932 +cmake/data/share/cmake-3.31/Modules/Compiler/LLVMFlang-Fortran.cmake,sha256=OnhPpB_fvq7gUmp7fEkI9Mwo_4gpk28bsKU92GmEvhE,979 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC-ASM.cmake,sha256=05j7r3ywqUcK-qcqTTT-9ofZlu4S36c4SHcR1XTFhyk,71 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC-C-FeatureTests.cmake,sha256=6baK57YrH_GmHw-WfRZDGp7rW0bJJuBgN4nw39ouvCM,310 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC-C.cmake,sha256=eP0zchK0Pps1ItvxRSCCB7sXDVcLvp_Tsv2hWV8zJVg,2891 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC-CXX-CXXImportStd.cmake,sha256=o7KTHezSh_SK5cOVIIvw9pVt05dperEwyYbfgb3R0vI,4599 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC-CXX-FeatureTests.cmake,sha256=27Xj6LhYsbpugYYR8FP7nY63I-zykA9dT_4FVbSY47c,6017 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC-CXX.cmake,sha256=SCqVF_N0eh8g8ubY7GMEtK_1ZT5ea4Z1VLTnCV2aF4U,4085 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC-DetermineCompiler.cmake,sha256=snIgS50F6Ei_XAI9gFKBro7bqBs_XgNF8YATPForGPY,645 +cmake/data/share/cmake-3.31/Modules/Compiler/MSVC.cmake,sha256=RfbFO6bnAqs4f98PAtuZyvXqRcQ9gW4w09WDYIuCW38,953 +cmake/data/share/cmake-3.31/Modules/Compiler/NAG-Fortran.cmake,sha256=lWiGd0DNrH_gUhsM5Oe6TufjmHD1WJKCD8CgcXhCCJY,2206 +cmake/data/share/cmake-3.31/Modules/Compiler/NVHPC-C.cmake,sha256=czClYVNI7DDya_WY5m78UodZZ00TrEKUwCy-oCmSlEk,888 +cmake/data/share/cmake-3.31/Modules/Compiler/NVHPC-CXX.cmake,sha256=8Ic6rbvtY-c2drZEEhqmDhT6OUIoyVAqzhD2o8A2Glg,1160 +cmake/data/share/cmake-3.31/Modules/Compiler/NVHPC-DetermineCompiler.cmake,sha256=YMr53B8cHT10tApopUO1uoZBrUbx8UcjYUfnMdhFmv4,365 +cmake/data/share/cmake-3.31/Modules/Compiler/NVHPC-Fortran.cmake,sha256=0yQoukzOLJXQ7JBm1JHi0MdVOk104v4SceQ8qZclXSU,239 +cmake/data/share/cmake-3.31/Modules/Compiler/NVHPC.cmake,sha256=DwOMPssxd8q17K0cKmsMWOicI3r9koolV0lO_flXJ9I,486 +cmake/data/share/cmake-3.31/Modules/Compiler/NVIDIA-CUDA.cmake,sha256=iqMGGh9xWbbsVWUyT334VyUQLaq5BDEH_7OYYJ-BAfI,783 +cmake/data/share/cmake-3.31/Modules/Compiler/NVIDIA-DetermineCompiler.cmake,sha256=CHiJc8dS5Pjd2jHGPb04OD_v1OsdHMFCEYYiQGlUQFw,1100 +cmake/data/share/cmake-3.31/Modules/Compiler/NVIDIA-HIP.cmake,sha256=bGpD50DYpe10Dy6st_2OZ-l6gWfGsNThH3cjeRzIxWA,771 +cmake/data/share/cmake-3.31/Modules/Compiler/NVIDIA.cmake,sha256=SVn6OykP6e03eBEoApS-ND3ZM03VRq6YZJhTP6UjFlQ,7392 +cmake/data/share/cmake-3.31/Modules/Compiler/OpenWatcom-C.cmake,sha256=fhJORLo9ocFpDhWVAIxQbDdkQ78bnSDHqCMlg7NTAu0,29 +cmake/data/share/cmake-3.31/Modules/Compiler/OpenWatcom-CXX.cmake,sha256=fhJORLo9ocFpDhWVAIxQbDdkQ78bnSDHqCMlg7NTAu0,29 +cmake/data/share/cmake-3.31/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake,sha256=Cv71lOIFnkVLOJaUaRFuQfYbR0w6NyORy5zWX8Dy7zY,387 +cmake/data/share/cmake-3.31/Modules/Compiler/OpenWatcom.cmake,sha256=v9hhr0FpzI6ZKh8S9teTTjOyXDmiZsRGbJ_ANHRdNEY,4398 +cmake/data/share/cmake-3.31/Modules/Compiler/OrangeC-ASM.cmake,sha256=cwXJzafg41JhWwj4CsACR03YYAK9UUq4ZVCsY0DSjgE,176 +cmake/data/share/cmake-3.31/Modules/Compiler/OrangeC-C.cmake,sha256=yf3HQ8HPQN6pxRmlLrHeRqoqPI3Sdi62gVaZ9cUhysM,814 +cmake/data/share/cmake-3.31/Modules/Compiler/OrangeC-CXX.cmake,sha256=mZqtjxQ9Z_yT0mReCXV7sV0HMgInN554lpYMYCZUHjs,931 +cmake/data/share/cmake-3.31/Modules/Compiler/OrangeC-DetermineCompiler.cmake,sha256=V3Ut_k_sbv2SdPkIhPLaJSSBSdLQ_Pc-rVGcmDcO65k,306 +cmake/data/share/cmake-3.31/Modules/Compiler/OrangeC.cmake,sha256=feDENLjGbRSbiX9i54IcmcawCQGg1TWkeKP_l-f5bfk,1971 +cmake/data/share/cmake-3.31/Modules/Compiler/PGI-C.cmake,sha256=eHK6UjMx2qQtvDRBa_pLBCIkL6syDkg91p1Y7IAlzD0,842 +cmake/data/share/cmake-3.31/Modules/Compiler/PGI-CXX.cmake,sha256=FWqr0Bm2FqWsEJqyYVDqK99wBmp9VgYiirjgJDQuWCc,1433 +cmake/data/share/cmake-3.31/Modules/Compiler/PGI-DetermineCompiler.cmake,sha256=TXf1o1j0jxxdFHUHI7NdxPRjXZ3_6a6quhZIQabkda8,328 +cmake/data/share/cmake-3.31/Modules/Compiler/PGI-Fortran.cmake,sha256=kJRFfV8D0GzjCZFQ_dS986_YM6aWJf_uy9FKAjY-9w8,537 +cmake/data/share/cmake-3.31/Modules/Compiler/PGI.cmake,sha256=GYy7iOvwyvbfzxS_EOyhvA200E4hqdy11ZKTiGjlsTs,1684 +cmake/data/share/cmake-3.31/Modules/Compiler/PathScale-C.cmake,sha256=nxG9Kcbm9CsInIQW8ZeRBxfc2WIL9SNBbBEEwAQ4UAU,163 +cmake/data/share/cmake-3.31/Modules/Compiler/PathScale-CXX.cmake,sha256=6I9b3U7OCt-BwTGrwcLdDvKbWOvvsFWU23gocjpm4AE,169 +cmake/data/share/cmake-3.31/Modules/Compiler/PathScale-DetermineCompiler.cmake,sha256=wLXtqPk2wXzMEdvzmz5ZWKwdjdtNRVoq1H2JR43adjc,341 +cmake/data/share/cmake-3.31/Modules/Compiler/PathScale-Fortran.cmake,sha256=z-qVEwT4sxJGjZN3AtWgRHWi6tboCftPLLG5YFNtHLU,315 +cmake/data/share/cmake-3.31/Modules/Compiler/PathScale.cmake,sha256=9LRaLS8D6VzNKZQrh63FzFTqE10tWclV8lVnCVozvZ4,709 +cmake/data/share/cmake-3.31/Modules/Compiler/QCC-ASM.cmake,sha256=QId5kkmsvh0Isea8zVZm6hgqLe52Bxx34xGuIx9in8E,42 +cmake/data/share/cmake-3.31/Modules/Compiler/QCC-C-FeatureTests.cmake,sha256=UUM0VFkwMto7ftF-XhAorsdQpmVdghB8a6BVlWzzMkg,37 +cmake/data/share/cmake-3.31/Modules/Compiler/QCC-C.cmake,sha256=RYwS1IaUtQQYaMC-jXLTvpEjisjqqDXTWjzS8i7jEd0,105 +cmake/data/share/cmake-3.31/Modules/Compiler/QCC-CXX-FeatureTests.cmake,sha256=Ws8mpSSKGHMEJvsbbzowvtYTuaB047eSToCGOFoXqOk,39 +cmake/data/share/cmake-3.31/Modules/Compiler/QCC-CXX.cmake,sha256=py40L_VeOowsnrlqZv_07_Psw02scBBHM6crCkgETmQ,574 +cmake/data/share/cmake-3.31/Modules/Compiler/QCC.cmake,sha256=s-OWathGRtzOjT9eFjrqBIKLB6oKsHDp-LMArD4d6jM,1218 +cmake/data/share/cmake-3.31/Modules/Compiler/SCO-C.cmake,sha256=kvlLnv1klIdjirb0J3GITFWX303UdO4JwsCa46WbXmA,40 +cmake/data/share/cmake-3.31/Modules/Compiler/SCO-CXX.cmake,sha256=3WhPlDyhYd5yJSLsiyx0EdDCKWLh2jDk8Jgmi4RfO0k,42 +cmake/data/share/cmake-3.31/Modules/Compiler/SCO-DetermineCompiler.cmake,sha256=s8oUM2dg7uhJwyX1Rm7cFVVdCIOw1YwqPRB_y85iPok,54 +cmake/data/share/cmake-3.31/Modules/Compiler/SCO.cmake,sha256=5w8Ybx_RJWdMonV8u37rF1IqYT_LFaWMlidwJDhVhn4,695 +cmake/data/share/cmake-3.31/Modules/Compiler/SDCC-C-DetermineCompiler.cmake,sha256=Ccm4emPw9klbBkEqC57OC1aJq-nCTAPvuWZHUFjiOng,652 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-ASM.cmake,sha256=R9MJ5hcHYsW9GTTcfNyiOVUeGyrxwPS20y5-bUPUstk,1063 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-C-DetermineCompiler.cmake,sha256=U9-wkxetGDgNFnJZuw9k_KWwCJT4PFzgFr7-tVAYrfs,620 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-C-FeatureTests.cmake,sha256=r00qEQCuo9KJ75mBM2KpLCR4-5lDQzlQ5sgCVJXDWNo,652 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-C.cmake,sha256=J9gNwh_adUxhiDv9xc9lzunbLkPgDpp3OD-UkhMzhkY,2909 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake,sha256=jfAAKdMMcJpi-V8qalfekJcIkC04YMCDuQI5YRx3dks,629 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-CXX-FeatureTests.cmake,sha256=vAACR1fplOOlPiEpXV4dCfLgI5jOLsWngkxMNhafc2Q,4481 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-CXX.cmake,sha256=gy2NDwfwCIq-zaTI0Apn-O2tQ8jes-AsQxlM1OLBecE,3074 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro-Fortran.cmake,sha256=HO2Je1ZyAmP3MXl1iXuhB1SG9NC-u5tGaoi3QqZaDYM,1681 +cmake/data/share/cmake-3.31/Modules/Compiler/SunPro.cmake,sha256=oqm4ym4TYATVP2u5z4XdBc5k2wiD_HZintjMoxGmDXc,434 +cmake/data/share/cmake-3.31/Modules/Compiler/TI-ASM.cmake,sha256=oP_9Zy6lARCmTCqrX1CxXxAQsb63-TVB0v8JmvVSc54,89 +cmake/data/share/cmake-3.31/Modules/Compiler/TI-C.cmake,sha256=aFIm3Lr8VPpzsJWs2ouHt2M_fR6ryczaWYd0PE0h1LE,2273 +cmake/data/share/cmake-3.31/Modules/Compiler/TI-CXX.cmake,sha256=UCH-ChE3wtkUbbmSuRKoYKlYqjkilhV26Vp9ig8ApiM,2450 +cmake/data/share/cmake-3.31/Modules/Compiler/TI-DetermineCompiler.cmake,sha256=pdO0dxQh9ChU57z7_N3ibNuwHZ_YXww_efF-dbBoD7U,411 +cmake/data/share/cmake-3.31/Modules/Compiler/TI.cmake,sha256=fNlUDah9bcIob39KTPbVoPIZ7HQBy-GBXYftsUdxpQc,2118 +cmake/data/share/cmake-3.31/Modules/Compiler/TIClang-ASM.cmake,sha256=jUlGRXVtkobT2PfSe10qyjjq9Or9VGCorrjl2eyoK1M,294 +cmake/data/share/cmake-3.31/Modules/Compiler/TIClang-C-FeatureTests.cmake,sha256=EjRRfPA6hcJNLulMkfYojRghg-EOFOq822jX-cZd0CA,39 +cmake/data/share/cmake-3.31/Modules/Compiler/TIClang-C.cmake,sha256=RbzAUztfyOmegYnIMQktFLzWPQIrKoYmHbWxPjf63Zo,1218 +cmake/data/share/cmake-3.31/Modules/Compiler/TIClang-CXX-FeatureTests.cmake,sha256=3QBjEUalfLjHNpaS2fFSujkuiTqEoBXrYrENwnCGfRQ,41 +cmake/data/share/cmake-3.31/Modules/Compiler/TIClang-CXX.cmake,sha256=oxpbrcpX5Fpa0t7hOdx1lHupr19a1EXT85EHHOenWcE,1423 +cmake/data/share/cmake-3.31/Modules/Compiler/TIClang-DetermineCompiler.cmake,sha256=saASDIA11EOdHUo2xqExzMF5FgQmhq-yiZKcKkD-_NU,460 +cmake/data/share/cmake-3.31/Modules/Compiler/TIClang.cmake,sha256=dVy7zA4sp6PmwrEmaoIqC23SraAcCBPl8lE5J1PCPVs,1291 +cmake/data/share/cmake-3.31/Modules/Compiler/Tasking-ASM.cmake,sha256=rgBWrZRfCepves1MMXxwLlqfehvX7ycHEtDt8ezSkNU,256 +cmake/data/share/cmake-3.31/Modules/Compiler/Tasking-C.cmake,sha256=wFT7epzpGBdneX4LBa7Y8z1tK5zEQRhTx8Ig8wFxByc,1933 +cmake/data/share/cmake-3.31/Modules/Compiler/Tasking-CXX.cmake,sha256=VnajGMz-r65DEyfcFie5Cvxa1YxHkuGGxCgwb0po9mk,1301 +cmake/data/share/cmake-3.31/Modules/Compiler/Tasking-DetermineCompiler.cmake,sha256=Q6fyd-QWxeJaOJ3Z_O_hR1TEfh2O1R9mw-zuDdYnYzY,490 +cmake/data/share/cmake-3.31/Modules/Compiler/Tasking-FindBinUtils.cmake,sha256=Iq7NqaA8DI5zPSRs7hTvtDywcMXfFmunJJY8Y799cb0,790 +cmake/data/share/cmake-3.31/Modules/Compiler/Tasking.cmake,sha256=2MiKdDMbRXn3SpZda0uBjqEbKYOGscpQ3fqzPbkdKPU,2403 +cmake/data/share/cmake-3.31/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake,sha256=HSwAzNtataBnT8GnlSDgZIR1D9kFCoBQVv72m0muyEc,48 +cmake/data/share/cmake-3.31/Modules/Compiler/TinyCC-C.cmake,sha256=-pVOBRJO0mjPCkV7o6kditkJe-jDjRPwdtAONrw0vks,419 +cmake/data/share/cmake-3.31/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake,sha256=ds9_7xO1fZlNXIEJuy2CLdNj1IWeHRb_KVe7E-OU52Q,173 +cmake/data/share/cmake-3.31/Modules/Compiler/VisualAge-C.cmake,sha256=NT4oJAnCs4cnYelMfTKU-7_RZnEZNh49FvfTpAb2Lmg,23 +cmake/data/share/cmake-3.31/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake,sha256=MDAFpyNHnYoBJrrfvE-aNamdFAzP95bADOE518c9EtU,179 +cmake/data/share/cmake-3.31/Modules/Compiler/VisualAge-CXX.cmake,sha256=GXM--uOihWWxQMe2sVL1eMpcADjyNiB2zwnl0pGcmL8,25 +cmake/data/share/cmake-3.31/Modules/Compiler/VisualAge-Fortran.cmake,sha256=Z4cNauyKW-zk9SDn0UElPEcBOYoMCNEU4HAtP9jUfOY,29 +cmake/data/share/cmake-3.31/Modules/Compiler/Watcom-DetermineCompiler.cmake,sha256=pqaVGDG1lzOTpqMYs1J9PWgzDwK0NPi10xAOnf4rdYw,393 +cmake/data/share/cmake-3.31/Modules/Compiler/XL-ASM.cmake,sha256=AiqF1LqlSiHcMfRsdjL8-LBXChr3hf0HtvUaciXnI_0,539 +cmake/data/share/cmake-3.31/Modules/Compiler/XL-C-DetermineCompiler.cmake,sha256=sRcVTPo8C5PrzoIfAn6Trzb3xTyf3ZXxPNr6cmg8hho,174 +cmake/data/share/cmake-3.31/Modules/Compiler/XL-C.cmake,sha256=vt7jwGMS1qoq8rCJD8rQZojITrAsbjnObFRNCsd8GUw,1044 +cmake/data/share/cmake-3.31/Modules/Compiler/XL-CXX-DetermineCompiler.cmake,sha256=xnTnC9I2AGWmSxLUfsWdwRV4aJ2nrEYqPHjQuvqcuYI,180 +cmake/data/share/cmake-3.31/Modules/Compiler/XL-CXX.cmake,sha256=JeS1iAItNSTJQfoG_WiyFelVp9absB4wTciUS-0xN7k,1677 +cmake/data/share/cmake-3.31/Modules/Compiler/XL-Fortran.cmake,sha256=vDIodqHYUWnM9aynUsatuZScE2n2qn7_x3Sdv7frPAQ,1258 +cmake/data/share/cmake-3.31/Modules/Compiler/XL-Fortran/cpp,sha256=VzTK1pDyBBQgFUcSPOOzzgjk4LRwhx0mDKzBSA41Q2U,633 +cmake/data/share/cmake-3.31/Modules/Compiler/XL.cmake,sha256=_LJdK7GwgObnYORi5jPjz5gBqDOXXeJy8TpGetVYPa0,1423 +cmake/data/share/cmake-3.31/Modules/Compiler/XLClang-C-DetermineCompiler.cmake,sha256=4AcvPjxi87_wrr4I2ymJzVcE6tM9snnJC8y7lCavFAU,403 +cmake/data/share/cmake-3.31/Modules/Compiler/XLClang-C.cmake,sha256=_nSx7S6qAbCHP7iRaZgl97c24RHiAkX3NJd3Ps-Oko0,927 +cmake/data/share/cmake-3.31/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake,sha256=4AcvPjxi87_wrr4I2ymJzVcE6tM9snnJC8y7lCavFAU,403 +cmake/data/share/cmake-3.31/Modules/Compiler/XLClang-CXX.cmake,sha256=U96Mt3rj5u7HzNHRktCPLGfq1kpcuxT5NwQzZMbkzWg,1313 +cmake/data/share/cmake-3.31/Modules/Compiler/XLClang.cmake,sha256=QpO2Cfr_GjfRxxy0eoRzei9ig2aqcKO514_m32yMImM,684 +cmake/data/share/cmake-3.31/Modules/Compiler/zOS-C-DetermineCompiler.cmake,sha256=IYTBVha6UIxTRSFNlAZLrYm__ALhj6ta1w98Tr8KeW8,154 +cmake/data/share/cmake-3.31/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake,sha256=GFiKOJQ4tVOJpSYVQU6wK8hT9wJ-aTTA5NMVFPqv-dE,158 +cmake/data/share/cmake-3.31/Modules/CompilerId/GHS_default.gpj.in,sha256=WU0bWuEH1zW5ncjQmPVA9AD98Lq9JkDG6h0b1g9Itps,177 +cmake/data/share/cmake-3.31/Modules/CompilerId/GHS_lib.gpj.in,sha256=WZ_1ePnmrG_lOfGad35TahIHX_VhBUamYq28mwfefI4,28 +cmake/data/share/cmake-3.31/Modules/CompilerId/VS-10.csproj.in,sha256=HRyLAVUOjKNp-2o6SC4C7pgos5FOXxQudhPOxvV80I0,2567 +cmake/data/share/cmake-3.31/Modules/CompilerId/VS-10.vcxproj.in,sha256=DGP2hXODLhhNxm6fEReGs_N5_fRczFM2LXPn5vvJWwY,2946 +cmake/data/share/cmake-3.31/Modules/CompilerId/VS-7.vcproj.in,sha256=7T2QzffokojMCq0W_lgapo0bEBYff-PjJls6w7Nn-sw,1370 +cmake/data/share/cmake-3.31/Modules/CompilerId/VS-Intel.vfproj.in,sha256=CX2-aXMn1u4bLuhUYERp7QagxGuybEQ3Eg0dYmp5M1s,1115 +cmake/data/share/cmake-3.31/Modules/CompilerId/VS-NsightTegra.vcxproj.in,sha256=Ou-YUFQzPRfMIHLgH2aN0V0M_OZaoSKG0eGa-HVNAjc,2210 +cmake/data/share/cmake-3.31/Modules/CompilerId/Xcode-3.pbxproj.in,sha256=nDdC_a1bQXNwNNi2m6ZlzfCg8AMoZ_jq7hmmXbCgVTQ,2833 +cmake/data/share/cmake-3.31/Modules/CompilerId/main.swift.in,sha256=xbRzIgo4iXux_50MiC_eBOF_bj3PYQIfDsoTbIDS7bY,30 +cmake/data/share/cmake-3.31/Modules/Dart.cmake,sha256=K_FYt9QcMS0ligAdsEIePrqCZNRvVzkcNcPqR-nGd5k,4561 +cmake/data/share/cmake-3.31/Modules/DartConfiguration.tcl.in,sha256=MEY_8HKH7-K902tXsfMDGFH-OJSXF-SXkR3qX43C80I,3360 +cmake/data/share/cmake-3.31/Modules/DeployQt4.cmake,sha256=UZZI5hzh3wNsmMagERGXX_pjTIwrmE-A48x2S5QFXlc,12936 +cmake/data/share/cmake-3.31/Modules/Documentation.cmake,sha256=f43iZMOcAZRMoTHHbWmMyRg2_G4-50uTpVjqnvapG7I,2289 +cmake/data/share/cmake-3.31/Modules/DummyCXXFile.cxx,sha256=8GohAmsLPsfUmxd5li1f1VJ7MZY7GGiF59NTrXQv_rU,27 +cmake/data/share/cmake-3.31/Modules/ExternalData.cmake,sha256=nDniGGZCcLeXR_eiB1h9tuoeaaG7djXSu3UZyk28gI8,46177 +cmake/data/share/cmake-3.31/Modules/ExternalData_config.cmake.in,sha256=6nOA7iokc-k5VNFJSMXyNGSrPFK5n98h3lAqUJdQ-fo,355 +cmake/data/share/cmake-3.31/Modules/ExternalProject.cmake,sha256=MD0iIrOznfXpSZfsZKB_aHe79Sl5eL8xNDRziSANppU,106670 +cmake/data/share/cmake-3.31/Modules/ExternalProject/PatchInfo.txt.in,sha256=1aMSuEzJuoru3HJ79ilMdW20hyHXxtwSY6PMXlbHn6Q,243 +cmake/data/share/cmake-3.31/Modules/ExternalProject/RepositoryInfo.txt.in,sha256=IyE0N4gx5FS_BcXo0nBxZuxB6jHGxMMnunaxtniYYcY,303 +cmake/data/share/cmake-3.31/Modules/ExternalProject/UpdateInfo.txt.in,sha256=c9qvW_xYIBMwuyzCRqe4ofKwiklMtVsiRWUbrBJbeCA,296 +cmake/data/share/cmake-3.31/Modules/ExternalProject/cfgcmd.txt.in,sha256=U7NFm785fSoRSEIyP0m86VyaYNAjkdtVFRSKPvn8x0g,12 +cmake/data/share/cmake-3.31/Modules/ExternalProject/download.cmake.in,sha256=kAaclc6_yGHEBkRTfT1RtlanFVA7Ti7XLKROEkXVFR0,4101 +cmake/data/share/cmake-3.31/Modules/ExternalProject/extractfile.cmake.in,sha256=tM4ifipgVuWMc4d6XYFTqf10_7BbZt1_P1JxcEnCkMI,1765 +cmake/data/share/cmake-3.31/Modules/ExternalProject/gitclone.cmake.in,sha256=QyhKYktdqnkojyeIvwfBAK7Xj7IZg5grOcN9iclCXxc,2741 +cmake/data/share/cmake-3.31/Modules/ExternalProject/gitupdate.cmake.in,sha256=IghPIvnrZk7s7zf8XOtC5rlDo4nP6cAWmYyN8GkiB8o,11352 +cmake/data/share/cmake-3.31/Modules/ExternalProject/hgclone.cmake.in,sha256=7Ki3YS4mbENzv17peQGHxTLMcDOf9Th1qJiFUgBbAeY,1874 +cmake/data/share/cmake-3.31/Modules/ExternalProject/mkdirs.cmake.in,sha256=wq8KLmQNKhBAGNxaoiAWgLfZ6_opRYInfdhFIlrOQno,877 +cmake/data/share/cmake-3.31/Modules/ExternalProject/shared_internal_commands.cmake,sha256=38E3CZQi0aJ4UldTSxAEYauQZPV0ZN4_cZMCHsnZPlY,59117 +cmake/data/share/cmake-3.31/Modules/ExternalProject/stepscript.cmake.in,sha256=WSUnQiOJhVJBqeNK-YuLarlk-45pm4EfXkWeCfBsVjw,200 +cmake/data/share/cmake-3.31/Modules/ExternalProject/verify.cmake.in,sha256=bdBUHoutmQWYK8xFmW2k9LVSA2fDPwUtEs8hbahsM9c,946 +cmake/data/share/cmake-3.31/Modules/FLTKCompatibility.cmake,sha256=opU8QeoLI8YB00S7Dust_-rtb6nar9kAryZEmfqp9XE,170 +cmake/data/share/cmake-3.31/Modules/FeatureSummary.cmake,sha256=4JbVkh7TGWCP_o3ESwgcdZnkcbf41Zc4Xktw6xVDn_M,28647 +cmake/data/share/cmake-3.31/Modules/FetchContent.cmake,sha256=6qVMMdyFzL_AqKtmOlKMKq68bEyXrjRNRKwPmZGSdcs,103675 +cmake/data/share/cmake-3.31/Modules/FetchContent/CMakeLists.cmake.in,sha256=5piCUikOYd2s9aPsUjY3-M5Px9iExqJzavrNc884MIg,1318 +cmake/data/share/cmake-3.31/Modules/FetchContent/package-config-version.cmake.in,sha256=ym3GjeBttUGu9JpZ4BhBQKaGdVS3wprGZvADh4V0lk0,369 +cmake/data/share/cmake-3.31/Modules/FetchContent/package-config.cmake.in,sha256=otM4SWsNbeFHsgeZGrDgXDvK8Mig0MqL9WaUvOFsR4M,677 +cmake/data/share/cmake-3.31/Modules/FindALSA.cmake,sha256=gxpP5rZXpVyW375ERcmYeuUAn5beCFcrr9VQ1kP7ubU,2349 +cmake/data/share/cmake-3.31/Modules/FindASPELL.cmake,sha256=J2dOOJDqvLmJty636SPJ5QfjDzccv4zQqencqx3cTI4,1048 +cmake/data/share/cmake-3.31/Modules/FindAVIFile.cmake,sha256=f5D9Mi77zu8hGMfly-I3GD7DQgV2gDfpacU5nY3aAGg,1390 +cmake/data/share/cmake-3.31/Modules/FindArmadillo.cmake,sha256=iQUZ5JdQXapEp3SXv6_WKvOkOdger4GwQzAgL_Bya7I,5219 +cmake/data/share/cmake-3.31/Modules/FindBISON.cmake,sha256=Paz9AKLK37W8aoHtWxohm0KeWPugPhc9QkV_nJGpDZk,11006 +cmake/data/share/cmake-3.31/Modules/FindBLAS.cmake,sha256=EmZfPuQhs3D631Nz-W6hWms5PpXzITxdpD5FFuYkFf0,38638 +cmake/data/share/cmake-3.31/Modules/FindBZip2.cmake,sha256=DQlVlcl9Ju-lMu-y6yX0hkxpjRxRvYUjGBW3JcesAIk,4227 +cmake/data/share/cmake-3.31/Modules/FindBacktrace.cmake,sha256=oHlL1_ovb-37uC7eFjgsBXRyU50qhP9Mj8Fy_V6lKzA,4240 +cmake/data/share/cmake-3.31/Modules/FindBoost.cmake,sha256=BRFmubv70DS9wSuPAS66Nuna9LFrSVRmmSBG2G5Valk,118374 +cmake/data/share/cmake-3.31/Modules/FindBullet.cmake,sha256=uYf42nEP7qIlXxA_WgwQMpR5BE6jCLkCU2_v3fekD1Q,2818 +cmake/data/share/cmake-3.31/Modules/FindCABLE.cmake,sha256=SlUwPDC6YGsOcJrg5PuI7alMp3CUH-AjWyp2AjGJCo4,2606 +cmake/data/share/cmake-3.31/Modules/FindCUDA.cmake,sha256=WDRrEOjWGIBpRisysg3qjh3t9nC6rOvG-RyXCkNGbFA,88786 +cmake/data/share/cmake-3.31/Modules/FindCUDA/make2cmake.cmake,sha256=_KLZxL3AhZehZKubThy4o2C_gEH5mm4h3kMpxLHgajU,3925 +cmake/data/share/cmake-3.31/Modules/FindCUDA/parse_cubin.cmake,sha256=Rt89jkdI8IcUkEOw_-FPcmMT8I5EHm8xwrxtvvoxNNE,3441 +cmake/data/share/cmake-3.31/Modules/FindCUDA/run_nvcc.cmake,sha256=eMw4Rt4j9u11mQIxElWrDLfgtHOazrY9w2YR5hhzlWY,11927 +cmake/data/share/cmake-3.31/Modules/FindCUDA/select_compute_arch.cmake,sha256=HcmeuDl8HRrx4pqeL-U7qjtWPBFGuehdIQH_9JfRFbg,11583 +cmake/data/share/cmake-3.31/Modules/FindCUDAToolkit.cmake,sha256=1NK3KxsgdPU9xgw8a_EhnsMzaFfuCEXroZqlvoBwn9M,52877 +cmake/data/share/cmake-3.31/Modules/FindCURL.cmake,sha256=WBI0Kv1VKvNQhjRi61mPKxnoBx0tMeCLd6c9g1Gp7GI,8409 +cmake/data/share/cmake-3.31/Modules/FindCVS.cmake,sha256=asclHDcd9jJ95JBQhjy2w67akXQILxykFkjyxrgXhwo,1989 +cmake/data/share/cmake-3.31/Modules/FindCoin3D.cmake,sha256=NIlcipd-Y8tHziQgsZsw0VarfjOssYFeVwqJSD4qiVk,2328 +cmake/data/share/cmake-3.31/Modules/FindCups.cmake,sha256=GoOPwLJe_hiOfBZSj2kLEKKUWtFMqCeRfcejUorqP3Q,3573 +cmake/data/share/cmake-3.31/Modules/FindCurses.cmake,sha256=qnZW_sMxQVV_HIgqEETKAvXl6w7ryltqqe3wf9OOIas,9423 +cmake/data/share/cmake-3.31/Modules/FindCxxTest.cmake,sha256=uU1ZZr7MMFvoG-_iQc92tWU_FHjSNf4khxq-tTfBB5A,7456 +cmake/data/share/cmake-3.31/Modules/FindCygwin.cmake,sha256=XUeHUzJzQFaj2GN0Lwa1vFX8pjSH1oWCPKLIky96fTA,870 +cmake/data/share/cmake-3.31/Modules/FindDCMTK.cmake,sha256=K_3WLAnnmIAMDZR-GOkMr_cN_Bma8DXeJOTguzfDsgQ,10504 +cmake/data/share/cmake-3.31/Modules/FindDart.cmake,sha256=fprNe7IeSv7e5f-7fNQlfysObBJi8OeDdBfHcVonZK4,1127 +cmake/data/share/cmake-3.31/Modules/FindDevIL.cmake,sha256=YMlR4sTGLvs2NCDkAZBD7q4QWM9_M3Jhg_r2WVZTiCI,3877 +cmake/data/share/cmake-3.31/Modules/FindDoxygen.cmake,sha256=-N3HW1JcQJDg3u-j4vnICZIjvjbPq6Appvmqe0iRWeI,44088 +cmake/data/share/cmake-3.31/Modules/FindEXPAT.cmake,sha256=MS9NMg_E8_77ylrLnM1fuy0DiTtbTt0Bgla05ws5lv0,5692 +cmake/data/share/cmake-3.31/Modules/FindEnvModules.cmake,sha256=ppBvRk0C62X3heGvFkzXfPWPlV4Qn5tEwzqe9YSVEXQ,9966 +cmake/data/share/cmake-3.31/Modules/FindFLEX.cmake,sha256=A5XPZIBjvQCLtoCJ2ess3idPYwfMRzWGxB7fPV8KtpM,8661 +cmake/data/share/cmake-3.31/Modules/FindFLTK.cmake,sha256=UfYBB3MYyL58N2KiRwZs9ydCu05o2QSgD_wQ764e_60,11087 +cmake/data/share/cmake-3.31/Modules/FindFLTK2.cmake,sha256=eDUXJzuXYUxswExAGcsTpwUzQ8_fbbbdySujs4iWgnU,7690 +cmake/data/share/cmake-3.31/Modules/FindFontconfig.cmake,sha256=vfIYVd_fzEW3uzCbDvnG1fgD_SU_jYi-Y1c1-IbkI5I,3114 +cmake/data/share/cmake-3.31/Modules/FindFreetype.cmake,sha256=CSTmqh96IhhIIFwGnklu20nRtYGpknlVFQn8mOy9D6U,6230 +cmake/data/share/cmake-3.31/Modules/FindGCCXML.cmake,sha256=-S2Onr0v5REi7egFiHLaJeHTJA6tcVi4c-lWooCDHak,672 +cmake/data/share/cmake-3.31/Modules/FindGDAL.cmake,sha256=KD9SqiXXEnXmDHl_WRBX0yiyG2D6adhklUGdSzcknDI,6740 +cmake/data/share/cmake-3.31/Modules/FindGIF.cmake,sha256=PtkTy8i4Ynw6TDYwmEJJ0eoaXy7Hj27Tyezi2gZeb6U,3999 +cmake/data/share/cmake-3.31/Modules/FindGLEW.cmake,sha256=h5F_pyIsjpv4ZPSL66VWKsT0HGH3Pv0qa2kNI0vGCWc,12551 +cmake/data/share/cmake-3.31/Modules/FindGLU.cmake,sha256=Exiqwz846vHFgRKzjNPbb7-pGwBG3x52C-ukyr6XI8M,554 +cmake/data/share/cmake-3.31/Modules/FindGLUT.cmake,sha256=WfagWD7ZMduhwPbqPFLZ345VGr55AfyjYrg6UbTlV1A,6389 +cmake/data/share/cmake-3.31/Modules/FindGSL.cmake,sha256=yQnAX0AZPpsVnMFj--MAjiscv4CIV2eGSCWax_oY9C4,9253 +cmake/data/share/cmake-3.31/Modules/FindGTK.cmake,sha256=tcOK8UcxABf-ObnPrpfEyqQQWyknHB7tsTX4uPiDXTQ,3880 +cmake/data/share/cmake-3.31/Modules/FindGTK2.cmake,sha256=9ZWDVkW10BmSLuXKTPs09AwwoYoZgn_TehbuFnbige8,38834 +cmake/data/share/cmake-3.31/Modules/FindGTest.cmake,sha256=kDhSllAFKmS9dzLqOYjLaGDL6UY0Vd1cXoOzEHmkwUY,12198 +cmake/data/share/cmake-3.31/Modules/FindGettext.cmake,sha256=NKAGM0jndVHATzUFLf0FvjyoL_ADhaFBh_GIGv-4opM,7997 +cmake/data/share/cmake-3.31/Modules/FindGit.cmake,sha256=x9HEQ4UQp6koEpWeMML1-uAjcAOPu7SlTlKh5dKiWJc,4153 +cmake/data/share/cmake-3.31/Modules/FindGnuTLS.cmake,sha256=_LGLfa4n0wORekpNcDnbtJpWa3sBsmGTsl-4jdWggp4,2535 +cmake/data/share/cmake-3.31/Modules/FindGnuplot.cmake,sha256=JbZwyL24hhryGVaM2Z0z2i4kkXNnLQjYVF8DT_lNn4U,1690 +cmake/data/share/cmake-3.31/Modules/FindHDF5.cmake,sha256=g85FdZlcgJd8dhhzppopSJSHUXx7czmT8FpnZEE3orc,50973 +cmake/data/share/cmake-3.31/Modules/FindHSPELL.cmake,sha256=v06RICWdxkg50xKhmomTH9icoExo1ULmBRBfBJZygaM,1796 +cmake/data/share/cmake-3.31/Modules/FindHTMLHelp.cmake,sha256=m_pB747LPuVNXxCfCMc_GBvfB03j1suEyw-BBGWUcrM,1460 +cmake/data/share/cmake-3.31/Modules/FindHg.cmake,sha256=ZZSFhWq6uwfMZDmYYfFW9EE7Y07rAXGRTvaAyqFoMX4,3075 +cmake/data/share/cmake-3.31/Modules/FindICU.cmake,sha256=Fivgjq1zJfjc-LGdDWNzI1kfpy5qC3xZ40Nlk2uHN-U,13058 +cmake/data/share/cmake-3.31/Modules/FindIce.cmake,sha256=iUwLnCV14Ia6L_O2dv9Lv0lM3zku0UA5zxWCzSgl3Ig,24389 +cmake/data/share/cmake-3.31/Modules/FindIconv.cmake,sha256=vV-rqjSs69t3PKlHeNbqWB0KHfKtPggL7RXt99t_yjg,6147 +cmake/data/share/cmake-3.31/Modules/FindIcotool.cmake,sha256=uRxmtldMz6lyMXT5YWbPIu8ByMKOXX-5LN1PO-McqZg,1327 +cmake/data/share/cmake-3.31/Modules/FindImageMagick.cmake,sha256=adl_E2PMnEwB1zAh_64zWeqUPmQDXXzID7Ve7f4l4Co,13011 +cmake/data/share/cmake-3.31/Modules/FindIntl.cmake,sha256=wxVj8MEOgEfs9KcUPXj8q_lj5dKqiLUUASonoDbiGC8,5625 +cmake/data/share/cmake-3.31/Modules/FindJNI.cmake,sha256=muq76Ke-tnOM04LCGLheoRI9Plgwn1kY_qfS4fXreOU,22436 +cmake/data/share/cmake-3.31/Modules/FindJPEG.cmake,sha256=M8XfKMHuYpYmcqmVJLjGfJTgyKrE31XAynDfZeZQcww,4352 +cmake/data/share/cmake-3.31/Modules/FindJasper.cmake,sha256=1q1BLQeMNQigXJ-qbKzHFn_DtOLjSRGzvZs5DEM2wmA,3155 +cmake/data/share/cmake-3.31/Modules/FindJava.cmake,sha256=Vk9Gq8jgdPUje2XH0VEnlmKjSNfNuWX7fEvqTbKUTt0,12060 +cmake/data/share/cmake-3.31/Modules/FindKDE3.cmake,sha256=Q1bcqz5jJXfSKKpUiMkO8iJMICvCdLi_sCkFhQlzjdc,10149 +cmake/data/share/cmake-3.31/Modules/FindKDE4.cmake,sha256=NW6oWsF-emHQsvLcmBJQnTc30NPpl-GQn949JEDxJiU,3193 +cmake/data/share/cmake-3.31/Modules/FindLAPACK.cmake,sha256=1R6Y33TNmj931JlnecCnJRDCXYrPGEg2WLFtupDa0YE,23275 +cmake/data/share/cmake-3.31/Modules/FindLATEX.cmake,sha256=lWumWA9P8l29l8eE2OIYGo9OZS3rW89Apj91ngsPIv4,6652 +cmake/data/share/cmake-3.31/Modules/FindLTTngUST.cmake,sha256=ns9TANZnArOSpGjVyIJQj_oo0kvyHkxc4rbdjUJGXGw,3821 +cmake/data/share/cmake-3.31/Modules/FindLibArchive.cmake,sha256=PpBuSsxl2bBtLzj65yCFWy_nI2sM4j2elI-280Yd3Es,3109 +cmake/data/share/cmake-3.31/Modules/FindLibLZMA.cmake,sha256=sEHisUVKItpCungSFRCtNoIXnw0xv05Tfp0DmJEZSGU,5835 +cmake/data/share/cmake-3.31/Modules/FindLibXml2.cmake,sha256=DTJtnX1rn6IU5Q2pV-GF379fGw7LQgnKKNGBeGz95ts,4369 +cmake/data/share/cmake-3.31/Modules/FindLibXslt.cmake,sha256=9h1kxID7mc2p_TD6gwA3E-Th7l8Fyq-NqBA8Z_L2WnE,5082 +cmake/data/share/cmake-3.31/Modules/FindLibinput.cmake,sha256=PsGBdQuxyrQZ33O1XECjparLlfxWTSMyb1jSiszodzc,2207 +cmake/data/share/cmake-3.31/Modules/FindLua.cmake,sha256=XxuEZTVM9QLyVNJccUBIpqgGUDAg43aQ1s7rPRnpl14,8515 +cmake/data/share/cmake-3.31/Modules/FindLua50.cmake,sha256=FIVpcD2X6taYj-ei0ggC_bG9EqKi4mW_T3z0w3djwE0,2389 +cmake/data/share/cmake-3.31/Modules/FindLua51.cmake,sha256=QIiTdrM3iaAnmbrioWz6zWZmrHqbnyrw9gxhxsptoXI,2391 +cmake/data/share/cmake-3.31/Modules/FindMFC.cmake,sha256=5-_qj0likreGhDFNKBgLCf3lisGDhkvZnZLjXxsSBNI,1904 +cmake/data/share/cmake-3.31/Modules/FindMPEG.cmake,sha256=qxtVKZ7Z2ywDLFkjhuPWiBPb21QeKAJnlaprp6xdKgQ,1235 +cmake/data/share/cmake-3.31/Modules/FindMPEG2.cmake,sha256=wTmctxMCHaOEKRrtbPRtDxDFCzi6xRMLaQB_pzx6Atg,1422 +cmake/data/share/cmake-3.31/Modules/FindMPI.cmake,sha256=YRIQJK48yPGGrOP_NGLdKaCVzqKNqwVMqAHQys2pCsY,94125 +cmake/data/share/cmake-3.31/Modules/FindMPI/fortranparam_mpi.f90.in,sha256=U9aCD00IVPFNedxmUspMmMtmUbcQVQ7_YoeLLz7Z9No,192 +cmake/data/share/cmake-3.31/Modules/FindMPI/libver_mpi.c,sha256=2lnD48dS2VE9STNZtBrdvG1kXDTioWwhcxBvShEfoiQ,357 +cmake/data/share/cmake-3.31/Modules/FindMPI/libver_mpi.f90.in,sha256=XM4Tqb_37plbzzuGD3nJRS4L5UXhWInSW4igjtg-WD4,300 +cmake/data/share/cmake-3.31/Modules/FindMPI/mpiver.f90.in,sha256=c_p6FZDp_HyEeyrGpme8Sa81pjQAod05F64E0MC_eRQ,407 +cmake/data/share/cmake-3.31/Modules/FindMPI/test_mpi.c,sha256=8D7mPdY5agQFvHISniumZ6ZTy-i9q6VZQRs_Puqxy24,920 +cmake/data/share/cmake-3.31/Modules/FindMPI/test_mpi.f90.in,sha256=UhZ8b2imSd5fyuQP07Vo1LTAx8-Q1v7FldlVAQd4_sI,178 +cmake/data/share/cmake-3.31/Modules/FindMatlab.cmake,sha256=Nackd5ZfGL0ry4MUIKiHiEICO6XTtI4pCXyGV5RMM_A,76730 +cmake/data/share/cmake-3.31/Modules/FindMotif.cmake,sha256=myXd7zcw2G1C9z2p-ONZE0_0XPspXJLvFJUTNZKcQmU,917 +cmake/data/share/cmake-3.31/Modules/FindMsys.cmake,sha256=6QnxHZ1m636h4vWIXsByCn-6x78MZ7Oun9lD2BZgQTc,1051 +cmake/data/share/cmake-3.31/Modules/FindODBC.cmake,sha256=QBKfTj5S4JDOchIbk7rdtt2jA4sH1z8fd5LA0w6XjFE,7176 +cmake/data/share/cmake-3.31/Modules/FindOpenACC.cmake,sha256=GKCsy6U49tWbdtXjFGQzBdF_6ywJGvOCoubtQQhNQi0,10398 +cmake/data/share/cmake-3.31/Modules/FindOpenAL.cmake,sha256=EAwoOmAb7GVqWd1mepqpQCW7tqPMc1rDP5JDCsDZVuw,3758 +cmake/data/share/cmake-3.31/Modules/FindOpenCL.cmake,sha256=oCMAlAUfapJfZoI4w5TOgTawBLPhbBSqE5QKqVG8BrY,5446 +cmake/data/share/cmake-3.31/Modules/FindOpenGL.cmake,sha256=m2TIskC-ncUHPRrmZ-xjX_pzXAPgUEimzBSlxs5lQNE,26185 +cmake/data/share/cmake-3.31/Modules/FindOpenMP.cmake,sha256=jfSxfzzKdbXbsWhGkSXqU4OShnT2UfWCbssLVQsoCLQ,29189 +cmake/data/share/cmake-3.31/Modules/FindOpenSP.cmake,sha256=HErEnjE2SEhnJs44XmDQSknuiSn2StzG65tRyrJuwDI,4782 +cmake/data/share/cmake-3.31/Modules/FindOpenSSL.cmake,sha256=Y7EiXmE-BEC03Ar7o0mZBN2oSt5pDNOUes2irsC1RIw,28529 +cmake/data/share/cmake-3.31/Modules/FindOpenSceneGraph.cmake,sha256=oRIMuQam3gG1EBS4yG9KBijAyBbBLIbwkobZFEe3UYg,7527 +cmake/data/share/cmake-3.31/Modules/FindOpenThreads.cmake,sha256=QF1XS8bxCpnbS5i1oeq30kEgVb373Bj5xBa3lLaGSp0,3501 +cmake/data/share/cmake-3.31/Modules/FindPHP4.cmake,sha256=d3Z_Ll0m3rGK0-vY9WboZ-ToXFUidpYWNvTUCmCqtDQ,2156 +cmake/data/share/cmake-3.31/Modules/FindPNG.cmake,sha256=jaJHvc3K07G5XPutdrurC84HTewoOoYt8EJ9ygrY9iw,6686 +cmake/data/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake,sha256=rBru7c8tHP2Q_vqLu3dIS6Q0JdpnR7i4Fhz3Apa5fiM,23335 +cmake/data/share/cmake-3.31/Modules/FindPackageMessage.cmake,sha256=zdPkdjENFUWcHYRlMERDUT1N17Fex-4TTQQNzFBkTwU,1744 +cmake/data/share/cmake-3.31/Modules/FindPatch.cmake,sha256=e_o94wAMjDZiV9fd56J2f-ANwfGCgcY__T4QXsHMKww,1810 +cmake/data/share/cmake-3.31/Modules/FindPerl.cmake,sha256=DB92gFolAk7g2SbTa43S6AVcWp8loTpjO7s19MvYn4M,3038 +cmake/data/share/cmake-3.31/Modules/FindPerlLibs.cmake,sha256=a0VlmiI-RKAMVLm-tlKSJSU_bqSJ0omKI5Tb5OIStkU,5272 +cmake/data/share/cmake-3.31/Modules/FindPhysFS.cmake,sha256=L9CdQACdubIfmUt-ThPw3a4KGyHUsKsjmfpkBo7-JH8,1141 +cmake/data/share/cmake-3.31/Modules/FindPike.cmake,sha256=wrWJmf3k08UCs8BPw9fQ2EGTEQNSpJEDRAUPnICZ-rs,922 +cmake/data/share/cmake-3.31/Modules/FindPkgConfig.cmake,sha256=7E8-xbitnuugJyNGl36I30-u4QPVvlNQdoP-F1GP6HI,39894 +cmake/data/share/cmake-3.31/Modules/FindPostgreSQL.cmake,sha256=jTetAmploF23Uxvr0bIwRqYRSOd75uBs4dS-j3SZM1I,12742 +cmake/data/share/cmake-3.31/Modules/FindProducer.cmake,sha256=lNF9F-8UYBycDD8au5YoSp9OzensuHP8kTlW_CCQ6co,2301 +cmake/data/share/cmake-3.31/Modules/FindProtobuf.cmake,sha256=-ch0_SEjzDh9QdTQEeECr3rUVW7cecuAQU8xY-Qs-AQ,28595 +cmake/data/share/cmake-3.31/Modules/FindPython.cmake,sha256=_LZkxy2W2SsMUCM4E27O5c40Wx5Gyh9A-tp7osrIh50,24087 +cmake/data/share/cmake-3.31/Modules/FindPython/Support.cmake,sha256=WEtzswEIHirSuKwgWQDRq0wSkJyn5bHmjAXc4CGJJUI,210767 +cmake/data/share/cmake-3.31/Modules/FindPython2.cmake,sha256=_ODgraMf0P3I2YX37Bito6RnYYIEM86sjFGoEsAOMMo,15922 +cmake/data/share/cmake-3.31/Modules/FindPython3.cmake,sha256=3XtotC73TFZQWyn0cIpNheVLeuVn4GJjkU2jYY2zxto,20604 +cmake/data/share/cmake-3.31/Modules/FindPythonInterp.cmake,sha256=CiN1uIcG034ckrX494yZtDBT2nLvflZaqbku1wiMwqo,7735 +cmake/data/share/cmake-3.31/Modules/FindPythonLibs.cmake,sha256=-vbwaNzhCze4_Rqhe8gUvMcNcWZb8Ao6u7i--9VhCK8,16840 +cmake/data/share/cmake-3.31/Modules/FindQt.cmake,sha256=RNPKjMvTP8PbhEypPMELf5iqNF2O-vWq26BxEGWxRcE,6465 +cmake/data/share/cmake-3.31/Modules/FindQt3.cmake,sha256=mu5TzzYacqlBU5fVQcvxcPb0_oa7fL0-cv6Mb8EVqE0,9824 +cmake/data/share/cmake-3.31/Modules/FindQt4.cmake,sha256=CmkOYhseto0CNUMitre14n88ZCt5SNKbe-G9QU3qwB8,53674 +cmake/data/share/cmake-3.31/Modules/FindQuickTime.cmake,sha256=Q_6vH3Fy9P6dEzdEosfRWS2P3FPlkEnWq943M6Kc2uQ,1008 +cmake/data/share/cmake-3.31/Modules/FindRTI.cmake,sha256=X5aAg3h96YUQD3Md3-801ahtN2D-8X9niY74UCs5DyA,3297 +cmake/data/share/cmake-3.31/Modules/FindRuby.cmake,sha256=yCkeiHeDTWxgOGvtCF0FKKAfq_rr_KqvhDstDCDfE6c,18118 +cmake/data/share/cmake-3.31/Modules/FindSDL.cmake,sha256=EDEyKbaGs0L-UHKFaBwc5Vu-t_SVA6MeTlyK5RKuHS0,8226 +cmake/data/share/cmake-3.31/Modules/FindSDL_gfx.cmake,sha256=5FoWP2FuJAMxQxBxt4kAqpov0pQebyRlPmx6Ig9OQls,3383 +cmake/data/share/cmake-3.31/Modules/FindSDL_image.cmake,sha256=_wXGYmI2qL39i5XWMLO6qdfoCGAhRDIGdQpEZMpJOWA,3854 +cmake/data/share/cmake-3.31/Modules/FindSDL_mixer.cmake,sha256=3A_WkAgptohl_3TLoz14MoD2RGkQKXfKTQwZLFLT4ec,3854 +cmake/data/share/cmake-3.31/Modules/FindSDL_net.cmake,sha256=hIqFXHn_ZuGKw0i1dIEjTgTwog-ds1t45Rr3_ZfuK0A,3669 +cmake/data/share/cmake-3.31/Modules/FindSDL_sound.cmake,sha256=Ik_n8YWjIJ6aRCE8Z6p2Pysyrx3nu9kiUt87VlqfyqQ,12763 +cmake/data/share/cmake-3.31/Modules/FindSDL_ttf.cmake,sha256=9etv1aIu6HWGrcsxwbGKChzlzTEy0syXcqvzqg6DxTE,3669 +cmake/data/share/cmake-3.31/Modules/FindSQLite3.cmake,sha256=5x0bOBveaAx4N3J6aBP9mOT72kXct2g7iSFTxx1BTIU,2352 +cmake/data/share/cmake-3.31/Modules/FindSWIG.cmake,sha256=Vg3YEx8gM8PcbXvcZMKIRRpl3kNQgNb1QtaTQD0WVy4,6903 +cmake/data/share/cmake-3.31/Modules/FindSelfPackers.cmake,sha256=Hj893bqoXLq-An_g8OaSE6hh2JBcbWhhanymjsQ7jjk,1629 +cmake/data/share/cmake-3.31/Modules/FindSquish.cmake,sha256=lUk4lSaADM0N_2ertL5IRy8I89Z9Ni9ebTIxB4P_H0M,9677 +cmake/data/share/cmake-3.31/Modules/FindSubversion.cmake,sha256=89f6BS9_hXj2ow3uBG1lUs2_bAG_jfAB1OhonNNUY_s,6386 +cmake/data/share/cmake-3.31/Modules/FindTCL.cmake,sha256=OWJa_wQY1iTdmD5bWPCXF5u3XO2KvC7XtEmx_EnOIVE,8318 +cmake/data/share/cmake-3.31/Modules/FindTIFF.cmake,sha256=cwfiA8L82bA6tjI4vlIHs2xlHlOyLDqTu3GmkTlV7aQ,12734 +cmake/data/share/cmake-3.31/Modules/FindTclStub.cmake,sha256=ChrHFXg5yX11dUrVeuNkLLWXyFtmHrDiVjdop66qrIk,4572 +cmake/data/share/cmake-3.31/Modules/FindTclsh.cmake,sha256=Z_fN_9ZVDwSLEG0qFVMuoQsyH17khv1skZsx6Bpxnbw,3685 +cmake/data/share/cmake-3.31/Modules/FindThreads.cmake,sha256=5mEhQ4Y9a3JtV5cJXhyMwyFtERop-eRWP2ZEE7CFBqc,7580 +cmake/data/share/cmake-3.31/Modules/FindUnixCommands.cmake,sha256=WnwT6I19LrhL3HHaLP1XkdrTEi4RrUWFmOqcLDbLaWE,1622 +cmake/data/share/cmake-3.31/Modules/FindVulkan.cmake,sha256=LZv9iTvSoDaWWsTraefnl3SHsxdW-U_TcqULxnmWR_E,29042 +cmake/data/share/cmake-3.31/Modules/FindWget.cmake,sha256=kog0fvpCFfmXoaV5DISVqN6s3zovHAtfhQ845wZe8LA,968 +cmake/data/share/cmake-3.31/Modules/FindWish.cmake,sha256=RbUIkx2L6NDoa0CA4kq8ISx9Jk-iQ41N8_i1YGf93EI,2789 +cmake/data/share/cmake-3.31/Modules/FindX11.cmake,sha256=l2jV6XHzsatC2LkgI-QYsEtacVpir-vf_5OpRGbveag,56891 +cmake/data/share/cmake-3.31/Modules/FindXCTest.cmake,sha256=2Ocms2uv-iytjXviw_imDDwAHWTx3tpYd8U7H1o9WWE,7465 +cmake/data/share/cmake-3.31/Modules/FindXMLRPC.cmake,sha256=jtLAkX2RUJ9JmcqIleiKpzdPfPiO4DMt1PqY4k9Vjf8,4072 +cmake/data/share/cmake-3.31/Modules/FindXalanC.cmake,sha256=yHim9btVuyC4LZUWnsBKvJIRQaTGr55TzfpYGPMxN_g,6113 +cmake/data/share/cmake-3.31/Modules/FindXercesC.cmake,sha256=ZssHvRN_zvvZawb0nKhgTWV8g8tlHqJimMpmBGHT-1o,5842 +cmake/data/share/cmake-3.31/Modules/FindZLIB.cmake,sha256=FUrw8XcrLOEOR9r0cBf3YMzCT-df0B7aXwOIdik3AiE,7396 +cmake/data/share/cmake-3.31/Modules/Findosg.cmake,sha256=hVbBOzWt_NAQWekMODQJawu6TA0tie6rabO_HQ8EZ6k,1975 +cmake/data/share/cmake-3.31/Modules/FindosgAnimation.cmake,sha256=QJD_eHLT0Kj-DCiIuLmFiYtG03K-aqGok9K4dD1w6TY,1951 +cmake/data/share/cmake-3.31/Modules/FindosgDB.cmake,sha256=dKUEZ8LnjPmEMltlYWSjfw47bKC4mWPvSCVMynWbTdE,1818 +cmake/data/share/cmake-3.31/Modules/FindosgFX.cmake,sha256=KNl3rbFqxuhT5MI903iUytQbs3xsKNEavEAuFihQiQo,1843 +cmake/data/share/cmake-3.31/Modules/FindosgGA.cmake,sha256=GNOTvwJzs8K7fl8pAQS2VlNOAS-q62_brLwzmsPlj64,1855 +cmake/data/share/cmake-3.31/Modules/FindosgIntrospection.cmake,sha256=ICgeYRe5ORI-uPWcuQjdt2otWeJXiH0QNiip55JvM60,2049 +cmake/data/share/cmake-3.31/Modules/FindosgManipulator.cmake,sha256=Dp2mfnFi4hmexCF95yAukmwM2Ndaf15JIcBnRFv18vs,2021 +cmake/data/share/cmake-3.31/Modules/FindosgParticle.cmake,sha256=lHA1z9N_mtwvlfrFv0Yj0N-_5NIBfKlvortVrngA-5A,1949 +cmake/data/share/cmake-3.31/Modules/FindosgPresentation.cmake,sha256=VzEtrDzFIh1W9ydBicrctxlqL-8zhngaNWzdX9dBAYw,2114 +cmake/data/share/cmake-3.31/Modules/FindosgProducer.cmake,sha256=hmrO9uQhzuJudHrc2mlQ8ErBH1SgkR-bvrHwujP8gCg,1959 +cmake/data/share/cmake-3.31/Modules/FindosgQt.cmake,sha256=XNY3IW9lHdZvGyaJJo0sa-QvDWdUQm2CNPLcbT4f_lo,1903 +cmake/data/share/cmake-3.31/Modules/FindosgShadow.cmake,sha256=oWfsE6_NLMXZU3VlrLSvBaw0c_IxxduvxMUBwyzSqx0,1915 +cmake/data/share/cmake-3.31/Modules/FindosgSim.cmake,sha256=lQ24wl1n7zzeWfZw4j6Ako2oGRcLhgMPSJ9DVpSzpOg,1857 +cmake/data/share/cmake-3.31/Modules/FindosgTerrain.cmake,sha256=IbCjl_PTET4I9D0Pi_9A9rMBaFIM8oLZBUe5WRvneoA,1923 +cmake/data/share/cmake-3.31/Modules/FindosgText.cmake,sha256=-4xmreur84dYrOFp8ZdZ3GWnhLKONkoKqYI9t48GXEs,1857 +cmake/data/share/cmake-3.31/Modules/FindosgUtil.cmake,sha256=sft3tFNV25wT_RvFlR07HSBrx_bx78FZB4mOYwQTMI8,1867 +cmake/data/share/cmake-3.31/Modules/FindosgViewer.cmake,sha256=Pf9XlyEtkdFJ_ds9SeVCb1nh0mUS8jAWuPhPFJ9gsoM,1901 +cmake/data/share/cmake-3.31/Modules/FindosgVolume.cmake,sha256=Wz1IuYrrfkniYxno6MxSj10VrRGPQsztC0QzkfSRp0w,1901 +cmake/data/share/cmake-3.31/Modules/FindosgWidget.cmake,sha256=LDRKQVhcMRizSzU_Ns1wXcRMc-p9aQ1kfi_rCke_KVg,1952 +cmake/data/share/cmake-3.31/Modules/Findosg_functions.cmake,sha256=MGTTjlMP6ZY5POOgHgr1AECjEuicjLleuuZ61tkiE6I,2129 +cmake/data/share/cmake-3.31/Modules/FindwxWidgets.cmake,sha256=nCK-rMJ6jj83IBWLuvyJl-W6sctp10BSiDO0CuACZFc,44799 +cmake/data/share/cmake-3.31/Modules/FindwxWindows.cmake,sha256=YKEqvaIsUJhAcvzk_fILDgU6TbWk_8LuH0ONmLqDmEQ,24427 +cmake/data/share/cmake-3.31/Modules/FortranCInterface.cmake,sha256=2PnTOK5hvVhxnrm0NJJ1bFNVQuQjDrzE8ESXrcNCIAg,14776 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/CMakeLists.txt,sha256=UQoqxQDo20YxreSeQg8XmSCts80PuYkxk8KoFcMZdCE,4782 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Detect.cmake,sha256=7eu3NSgn0XCcqvc3vgAQVYZRSwUEXEmee66yJqOQCpo,7129 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Input.cmake.in,sha256=s-LN4kbBZUE9FQLDKztcHJIGQIHDRbTAcvMRZbMZ0UY,211 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/MYMODULE.c,sha256=N9SdGrkTPZNVQv4kLElIoQjOKNIkXOtdwjPoMcYUt-o,24 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/MY_MODULE.c,sha256=0R7O2ZIDrdSgjjrd3y05-qC97Bvh-7DGuJQhrE0c1aI,25 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Macro.h.in,sha256=YGwgY4zhwO6peySX8Awel42duMkxSXbiVJEIjzyRgiY,106 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Output.cmake.in,sha256=VZLr-r2xh2xgP7a-VaU_M0sbTh8oCOuoLUKS3HrGK2A,1935 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Verify/CMakeLists.txt,sha256=WAFis0zO_-vfUK-gwkkVpUgquJy9gGGR7gdUozPGbA0,865 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Verify/VerifyC.c,sha256=ZErErVRLVM88CzoJEe2ruv7P44xwzas5IV9TpjTDk4M,65 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Verify/VerifyCXX.cxx,sha256=LYy9gMMu8F4d5TUe0YJbzlWlo4yE8CjJA1sCLYCvIt4,54 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Verify/VerifyFortran.f,sha256=t_AblQy43wsDhWk-SgViDdIeQxKXnb_92g68BeznGig,74 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/Verify/main.c,sha256=INPae5YULXIFRnwqmtlk5Ac183N7K-Di2LVHIFFZgTs,245 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/call_mod.f90,sha256=zxGfgZkXErRYxgNfyUWyZhWCfrAm6FRirCZOF7MywTI,106 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/call_sub.f,sha256=z-PCH35JopS0NdiW6QkcS-XDmuXCoIfGxovOMWvQ_IY,87 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/main.F,sha256=wGHhdeGB0b2NMLIhiLmWFJeieiMkzlZr6gyYDBzyIPE,108 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/my_module.f90,sha256=Tw_e48_HPKM_XH2Iahv6Cz25wJseUUKMBQkBJI25K30,161 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/my_module_.c,sha256=TzGXX2wyQ1W2RCKycW56ZkJeKReC-41E6AJqmXlk1Ik,26 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/my_sub.f,sha256=NsZr5UiCSSwYFbkNZ2bUrGv4c-CrfW3jhvtVlvUQCE4,34 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/mymodule.f90,sha256=OEOYecUdj7o0PJLZ80jYos2vr611bWwAm1Dj8lHVDx4,155 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/mymodule_.c,sha256=CyFIcSO23na-kkVUy9evPRSNDyki1jPk8XjmnqjcsEw,25 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/mysub.f,sha256=nP2RUtuavXtKCzdzy51HNVPaTwDk0iesgKGSkW-MUrI,33 +cmake/data/share/cmake-3.31/Modules/FortranCInterface/symbol.c.in,sha256=gMF5rQM3UqsE7J93Y9D2RXu8plhAtjdDQitYjHovshc,65 +cmake/data/share/cmake-3.31/Modules/GNUInstallDirs.cmake,sha256=yufNwsdaeZNi8YVBNyeuJ8NcEAk-maegktKmccBfCsA,17882 +cmake/data/share/cmake-3.31/Modules/GenerateExportHeader.cmake,sha256=8wEIjB7mvPzJurqzHeOa_y0iA8f5YMOIhONmyQz6IBc,15842 +cmake/data/share/cmake-3.31/Modules/GetPrerequisites.cmake,sha256=jO2RncrlTJ2YOKjpOpryMxj2HpN9Hq6GaD0Tm7hoSRA,34160 +cmake/data/share/cmake-3.31/Modules/GoogleTest.cmake,sha256=taJUbIzqHV-aNmxpgyYcYhwLNKQNhJTK79wPpMeIYsQ,31251 +cmake/data/share/cmake-3.31/Modules/GoogleTestAddTests.cmake,sha256=GcHnx8XSDWWK9mdfZL27G4KEWANOwOgO4BCfSFTcAME,10507 +cmake/data/share/cmake-3.31/Modules/ITKCompatibility.cmake,sha256=0ElWRFhdDM31_pBXEWgW2TeUPMsQpvNKhjI86oN0wDo,224 +cmake/data/share/cmake-3.31/Modules/InstallRequiredSystemLibraries.cmake,sha256=UH6RSfyz04R5jm4eznOFpeGHqgMdyDZ3gFTyVt5mHb8,31246 +cmake/data/share/cmake-3.31/Modules/IntelVSImplicitPath/CMakeLists.txt,sha256=8ubpXTIKAu5BlSZzXji9_TyddTzN_k5ohnSXL0jbSw8,256 +cmake/data/share/cmake-3.31/Modules/IntelVSImplicitPath/detect.cmake,sha256=nSutaM1Krk3q5lhR2kScv9Qv4bg6NyUAibDUGlqCinQ,266 +cmake/data/share/cmake-3.31/Modules/IntelVSImplicitPath/hello.f,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +cmake/data/share/cmake-3.31/Modules/Internal/AppleArchitectureSelection.cmake.in,sha256=8-GnMpKfNffLlkRol61lu7r31WUtnlRBTAORBZfEY3A,810 +cmake/data/share/cmake-3.31/Modules/Internal/ApplePlatformSelection.cmake.in,sha256=iPrXdJJ3hNTFKH7rfCLFY6AB82Bo9FoCwl6PJ4IOiHE,1876 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeASM-ATTLinkerInformation.cmake,sha256=mQqd4A9LaSefJG5bxTat_pp8JAJk60d8luMWTPCP2YI,320 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeASMLinkerInformation.cmake,sha256=UBpJBN0UedUf90UGLMQfvrYRHBKAeS4f-wXf7eWJAvY,1507 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeASM_MARMASMLinkerInformation.cmake,sha256=Hsb--7uo2kNyIK9tzmOJVh-UaF_I07C-8xN1PUIAKOg,319 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeASM_MASMLinkerInformation.cmake,sha256=Hsb--7uo2kNyIK9tzmOJVh-UaF_I07C-8xN1PUIAKOg,319 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeASM_NASMLinkerInformation.cmake,sha256=DImxT7kpDtwV8a4dAgWvAo7eElS5ArirySLCCqkwxBA,304 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCLinkerInformation.cmake,sha256=p5mOk6Acvb7v4foR9ythvVRspr8s1sxSwUqPCdk8ECE,1419 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCUDAArchitecturesAll.cmake,sha256=WFStEw2kxg5B89zPDe9VzHZV8p4EGoDBYFdxAUOHLSQ,3740 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCUDAArchitecturesNative.cmake,sha256=YQVTWcuT-pFz_gueys_d8NeZ6ndbMQ3qGSUbMs3tU8k,1897 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCUDAArchitecturesValidate.cmake,sha256=zdHDinXCbeQLiC9PDnoWYlCg5Gzs3bfVH8ybDgqdxOI,910 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCUDAFilterImplicitLibs.cmake,sha256=1AqDeFLLBMmIvKAihhjz5QRRJaKloWIe9A1X_QItWnQ,876 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCUDAFindToolkit.cmake,sha256=R3O6YrNtgUm4QDon9voyiio6qcjv3gOHaov-gkxzffo,7649 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCUDALinkerInformation.cmake,sha256=6d4CiObUaK3ih3ZAu0r3GW2iYRGAtPaHhDTP09bt-BU,1455 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCXXLinkerInformation.cmake,sha256=nSzKCo6do9IAe8440C5d_HZTjYLFF3yQtKl1G1wLvQ8,1445 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeCommonLinkerInformation.cmake,sha256=FapEy1t1yL-RdGGkgZhCc1Zd2FiTi5hSYTFA3nKf6rc,652 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake,sha256=CQPQXTchkHPUQcl9HUb5h8CaNJpqqUS1fTdlocL7b1M,3867 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeFortranLinkerInformation.cmake,sha256=9_9rvksKT55KLZ6247XPA9pqNgyn_qTf5L7uslHCb9Y,1491 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeHIPLinkerInformation.cmake,sha256=GgXjLZk-pBu6fNePoVsLDrNZTEUXF2bjXxA87HLrRnA,1443 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeNVCCFilterImplicitInfo.cmake,sha256=Xxy1Q7wRH4xt919vj_6aDXb-bmIFoqzNbIlBsb9l9YQ,721 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeNVCCParseImplicitInfo.cmake,sha256=xD8kuz8dTJ-W3Tk0Q15Q5cOzPd-9UMca_UbTCtnvhtA,7581 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeOBJCLinkerInformation.cmake,sha256=j_cEaYF13GrYqy3YE3E2leSRxstU5VawzEklwY8NXrk,1465 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeOBJCXXLinkerInformation.cmake,sha256=FAkKr8OJ_zeXBpynFqY3b0uACOooy6_bG85iQakAMkc,1481 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeSwiftLinkerInformation.cmake,sha256=0R9OMDgeb_O97JhUlYP9gp7Klxbvw--Mql-kg-ZZi5k,1467 +cmake/data/share/cmake-3.31/Modules/Internal/CMakeTryCompilerOrLinkerFlag.cmake,sha256=7LnIfs3EP-ynAF9I2vhAMumHjIFP1Poj2umk_PYffZk,6079 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.DS_Store.in,sha256=FpzuVR_fhaxysS0XbZwoJ4_0nAcqUwtbT8YV7401R4w,12292 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.Description.plist.in,sha256=f10x-UIsQ_zrAFxrotR4MFfxZgM94eiJFr6lolOFnHg,438 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.Info.plist.in,sha256=a-qcYeqNC8ROhnU76Cr6t9WIpe_N1R2dQxbbq_77HbI,1131 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.NuGet.nuspec.in,sha256=891pIJL6m_1EXsThq4GY95HyHJWblhc98reaZDkj21I,1072 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.OSXX11.Info.plist.in,sha256=D6MjKlHMS2UyrzPwXuYN5O1HrqxQtT_7lqoBsGnObO0,1565 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.OSXX11.main.scpt.in,sha256=1JBwCbPoOWkz0MuM5rIgM_pO-NMdyKPJS1YovXex8EY,1870 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.RuntimeScript.in,sha256=Rt7NmQSh5chel1Gz83Q9Z1tJFWc4b--zrQK6d57iyWQ,1896 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.STGZ_Header.sh.in,sha256=oTfSKvi3JLiZrAKAn-WbQxhGpug0l-Qg9rg7tCrcYZg,4140 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.VolumeIcon.icns.in,sha256=MRwobWxsCRXL6DD_mztHhQx9SBICzCLFoQtLW-V9cCE,45739 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.background.png.in,sha256=D47FJru2AX8xki7iamrquA1b4IOSBbe2FdaRUcG_qYc,44108 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPack.distribution.dist.in,sha256=OK5aVBWQqtG2chCs6IKreor2OCwzyT3KxjrVmue_yU4,346 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPackDeb.cmake,sha256=VFLDLf3rEgEEM7UCaD1_q84VGSyREjiuKfTieB667LA,39836 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPackExternal.cmake,sha256=hxjZXxbpGA4VS4nVGn3dqvd8uyVcuRaTqj2FhlwezaA,1687 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPackFreeBSD.cmake,sha256=Rs50r6UwOxHKPqiz_DdRp1BYCHBziJlfnTQoAhgSW0c,3255 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPackNuGet.cmake,sha256=coPHuuYqYZQNdSnLnLjJaA0ZLgRWYGeTYtt37d3-xQY,23695 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPackRPM.cmake,sha256=G1UZpjOwfJb3PrhfxKMLxI_Z4BTk5MA8ecDSxBUmXkY,82355 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPackWIX.cmake,sha256=feteOKv-c7bo4WSww4d9lkvA8zNzSGm1-h41f9i8e0Q,1117 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/CPackZIP.cmake,sha256=hRMU_ZWSLG4wSrWektjzu2LGKjUxP-MDQ8MvhWthaVk,986 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/ISComponents.pas,sha256=QwKSgDgjavPJdMZy29qptH8zMd_iJ3gNzUCVa4GGAqc,2689 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/ISScript.template.in,sha256=A6fVOWiFlq4vv2M6g7AC7PKj4Tm-ZdDcpJRVI0kHDLY,594 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/NSIS.InstallOptions.ini.in,sha256=iHXbTlv3gVzqJnvOh8uUeZSi5V4J4O3w9yiHG7XP_X4,678 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/NSIS.template.in,sha256=B9q656Cj_liMK1Md1SRFFw5XAxf_L0ar-z6lEdfQVq0,29925 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/WIX-v3/WIX.template.in,sha256=l6i7yq1oax2Xz5twMfm8gI7KJ9pfUhIRAYL9tOCmtwU,1866 +cmake/data/share/cmake-3.31/Modules/Internal/CPack/WIX.template.in,sha256=FATpBhPl2WMRPdlfV1Ds8j4t8Wy_Qq1tgvw1IUmp39M,1739 +cmake/data/share/cmake-3.31/Modules/Internal/CheckCompilerFlag.cmake,sha256=CJlG-5EJ8Yn-8wGIY9FnhvBwrysssuxwv3ZLhIz5yoc,973 +cmake/data/share/cmake-3.31/Modules/Internal/CheckFlagCommonConfig.cmake,sha256=IL6Y7sb2lj8uU9YEhomJ3_X0xqj7PjJiORCjKHxKjT8,3450 +cmake/data/share/cmake-3.31/Modules/Internal/CheckLinkerFlag.cmake,sha256=SKPjUpK907dY2Yk0tbI-DlyxMD1aIIvhlNKSwGKDLj8,1590 +cmake/data/share/cmake-3.31/Modules/Internal/CheckSourceCompiles.cmake,sha256=aMm1lpL6kt3LwG_e1HlymUVrvWIka4B0w597kQGh0i0,4500 +cmake/data/share/cmake-3.31/Modules/Internal/CheckSourceRuns.cmake,sha256=cjleKJHjQD_uWxW3ozsuyctz5XrB5Ne3d1lZB9ExDlA,4387 +cmake/data/share/cmake-3.31/Modules/Internal/FeatureTesting.cmake,sha256=_u2sQfysX63XcEEbWMgji33626rQnIczZ97vaYa7UZk,5220 +cmake/data/share/cmake-3.31/Modules/Internal/HeaderpadWorkaround.cmake,sha256=YwZDIbUwZ6o12Ho7raJ6gUOXoU0uRk893MnzDtW2opo,2643 +cmake/data/share/cmake-3.31/Modules/Internal/OSRelease/010-TryOldCentOS.cmake,sha256=uv1Owd3SdT4XQS5Z1sUih2Q_cRcBtl3OnjfQ1XmDSFQ,1345 +cmake/data/share/cmake-3.31/Modules/Internal/OSRelease/020-TryDebianVersion.cmake,sha256=y_eo6QDHb38BhBhtpUeu7KU9-_--lejvVIYtEka3C2M,1150 +cmake/data/share/cmake-3.31/Modules/KDE3Macros.cmake,sha256=kwrXgg1IPO0zYwqcNQwST1MivqvfSsnWjd6IGRGjuFQ,12824 +cmake/data/share/cmake-3.31/Modules/Linker/AIX-ASM.cmake,sha256=gZA2iomNG6dNUO-YyF7w7ziIf7LYVtwvqZk8mxZdevE,182 +cmake/data/share/cmake-3.31/Modules/Linker/AIX-C.cmake,sha256=UI6DsqSF6gboXrpRdkd5RNOd-JxFtEF1j5iNPN37JGo,180 +cmake/data/share/cmake-3.31/Modules/Linker/AIX-CXX.cmake,sha256=ta7D5vUySLdSmeS-yU1Y54EpJ2DxbTCHn5Ao9xr-Gls,182 +cmake/data/share/cmake-3.31/Modules/Linker/AIX-Fortran.cmake,sha256=M8noE2x5o8T-EOlQQ7Lt1_V4N_zB2t66-DFA6ebOPOQ,186 +cmake/data/share/cmake-3.31/Modules/Linker/AIX.cmake,sha256=ve-pe5GSTMsPYBKizQ-FO9lSQJzga6a17iJpvLhIfWA,263 +cmake/data/share/cmake-3.31/Modules/Linker/AppleClang-ASM.cmake,sha256=CTvGGZCJeVPPLOh6p8CBFaEeCfwus5jLGNpg32WKx1E,53 +cmake/data/share/cmake-3.31/Modules/Linker/AppleClang-C.cmake,sha256=BQq0MV5ksGhxCx0L4YTCgVMt9LtsXSS5HkKhx8lwuKY,51 +cmake/data/share/cmake-3.31/Modules/Linker/AppleClang-CXX.cmake,sha256=4tvkWjRNRLawyuJOfQoFe1U0idcvviJqOwMIRAUxvy8,53 +cmake/data/share/cmake-3.31/Modules/Linker/AppleClang-OBJC.cmake,sha256=QGezNUoythT4lDZLlUfR22_NkMZDCLsd2_S9KZ03Rmc,54 +cmake/data/share/cmake-3.31/Modules/Linker/AppleClang-OBJCXX.cmake,sha256=QRxo0x0H7NZKqSdw7BJQIOI31Ogc1fufiTostxGdhK8,56 +cmake/data/share/cmake-3.31/Modules/Linker/AppleClang.cmake,sha256=lyMfOyq-pRccUigt_LLsweaJHPaLYH4vkdqss713RRg,271 +cmake/data/share/cmake-3.31/Modules/Linker/GNU-ASM.cmake,sha256=2lpbhmSkzbqBlmHM4QBLT-l6CP5KR0s0_2zm3tTJDik,182 +cmake/data/share/cmake-3.31/Modules/Linker/GNU-C.cmake,sha256=R8u0_KoHBUADmEpquqhSbiQvwazexs0N4AGf9E3vGfc,180 +cmake/data/share/cmake-3.31/Modules/Linker/GNU-CUDA.cmake,sha256=57uA0ryWBdDTTRYzI7f53uYuNoSZB5VnnoTEmqvCCrA,183 +cmake/data/share/cmake-3.31/Modules/Linker/GNU-CXX.cmake,sha256=wBsWF5DmamyeXHMe1okQrKt4sZl-4Hv-uK5ZR546TE0,182 +cmake/data/share/cmake-3.31/Modules/Linker/GNU-Fortran.cmake,sha256=cCbWZP6EqNsuXOhuk2exTWWGg3zqP2xQGz75rojqtrE,186 +cmake/data/share/cmake-3.31/Modules/Linker/GNU-HIP.cmake,sha256=lDyOEw3knUVmDSPN0IjuoWKu_hP4-9GKQo_t4JCrGAA,182 +cmake/data/share/cmake-3.31/Modules/Linker/GNU.cmake,sha256=BndzxYXEEtAJecxbDJDi4hIGeGIA4G5DqOX3NkMjbg4,2790 +cmake/data/share/cmake-3.31/Modules/Linker/GNUgold-ASM.cmake,sha256=jWNmRARjKnAgQneSvskotHIXqCe5Iu4FyPKU4OBpqkw,190 +cmake/data/share/cmake-3.31/Modules/Linker/GNUgold-C.cmake,sha256=IPxwxZpj2cbHreVEdYUa2jmhf86FcN8kKtkuiTvQ_lQ,188 +cmake/data/share/cmake-3.31/Modules/Linker/GNUgold-CUDA.cmake,sha256=lWyPTYRlrm0naOtZFlqkzxJz5OR1mDGmOWYm2l7mnQs,191 +cmake/data/share/cmake-3.31/Modules/Linker/GNUgold-CXX.cmake,sha256=NBSd_s6BtlRbXbt2GXhWqD1e82BEFFGA2gmQG2P2GRY,190 +cmake/data/share/cmake-3.31/Modules/Linker/GNUgold-Fortran.cmake,sha256=qLygoG4HJVj0N-jxFr7YmSR4sQVcFJoecR9hqhvVDso,194 +cmake/data/share/cmake-3.31/Modules/Linker/GNUgold-HIP.cmake,sha256=GLYB6pyGo0Z6yS7-bvBIh5piYx4f3UrYwiR4G858bh4,190 +cmake/data/share/cmake-3.31/Modules/Linker/GNUgold.cmake,sha256=8XesU64bTY6trVtdgPjC8-6SuuhFQgZ_IXF-XKwr8ik,588 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-ASM.cmake,sha256=ZeBQlXLcOsK8bUZFncFQMYn4WBY6vu79EuL97fXvrp4,182 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-C.cmake,sha256=0z4ZtvpJAhnihNAfd4hhSzTvQPrIuU1k4l6ld8z2Ztk,180 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-CUDA.cmake,sha256=vbqWxt-bFf_fsX5cettrnm9ryJH-M137DyzbWsEDY7I,183 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-CXX.cmake,sha256=jur9tje3poVSWagbbRR4xz68vqAz0H921nUnUUGz-30,182 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-Fortran.cmake,sha256=G9gJ5jaVKWMyriIMcHSLeXLhpgi5o4dW4GvjHH2IAAo,186 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-HIP.cmake,sha256=k9IKEDUz_k7Gwrbv_Ypbz0zZtXe1V4ANwKRuRqJl01M,182 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-OBJC.cmake,sha256=fMDQJ-WjthOgYEY45iIna2UZ9-gJCoIpB2m9oywlGAs,183 +cmake/data/share/cmake-3.31/Modules/Linker/LLD-OBJCXX.cmake,sha256=X2nL-DHQwFUs4l0pq_VQC-AfagmAq4oXe32sbBjWLJE,185 +cmake/data/share/cmake-3.31/Modules/Linker/LLD.cmake,sha256=ORFLOh2jQ-07fQkCJRkvrSDHiRVdVhAfkpgn5m4gfzU,241 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-ASM.cmake,sha256=2lpbhmSkzbqBlmHM4QBLT-l6CP5KR0s0_2zm3tTJDik,182 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-C.cmake,sha256=R8u0_KoHBUADmEpquqhSbiQvwazexs0N4AGf9E3vGfc,180 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-CUDA.cmake,sha256=57uA0ryWBdDTTRYzI7f53uYuNoSZB5VnnoTEmqvCCrA,183 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-CXX.cmake,sha256=wBsWF5DmamyeXHMe1okQrKt4sZl-4Hv-uK5ZR546TE0,182 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-Fortran.cmake,sha256=cCbWZP6EqNsuXOhuk2exTWWGg3zqP2xQGz75rojqtrE,186 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-HIP.cmake,sha256=lDyOEw3knUVmDSPN0IjuoWKu_hP4-9GKQo_t4JCrGAA,182 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-OBJC.cmake,sha256=7sY_aIwB7XICklEAXYtP0nfJb89JbwJC9DrWh87CUqg,183 +cmake/data/share/cmake-3.31/Modules/Linker/MOLD-OBJCXX.cmake,sha256=TXoadAhmHJHrgwDNIK9cOBQCj14ULLfyqKqQlJ8LU_E,185 +cmake/data/share/cmake-3.31/Modules/Linker/Solaris-ASM.cmake,sha256=brb-YzZrM_Ss2sp5WECxNNqNfXpcm3fK3MOn2Wj1JfA,190 +cmake/data/share/cmake-3.31/Modules/Linker/Solaris-C.cmake,sha256=nmbJMMFTCNwbAW9alCpX74xV0mnJwzgI6zd5aE3Tas4,188 +cmake/data/share/cmake-3.31/Modules/Linker/Solaris-CXX.cmake,sha256=2FzvFewBOQ3e9i4pkz88FtUaRK01ht5-PjCn4gH5snI,190 +cmake/data/share/cmake-3.31/Modules/Linker/Solaris-Fortran.cmake,sha256=T89gZKgg5l-EKZyWl75F2SRyvPOBK5-y-ZqoNssxShA,194 +cmake/data/share/cmake-3.31/Modules/Linker/Solaris.cmake,sha256=coIs51HqfWCsoL_B2aF42dSqDoCkIhpstrmClGM5uq0,267 +cmake/data/share/cmake-3.31/Modules/MacOSXBundleInfo.plist.in,sha256=e5p3o-QnaQZdlhzwF0uFyPB2Xki-iWHoOl1T7YFhkww,1214 +cmake/data/share/cmake-3.31/Modules/MacOSXFrameworkInfo.plist.in,sha256=Pbkjma83QKmuteA5UJpmTR3P3B-v3uUMNwQ0n53usOE,961 +cmake/data/share/cmake-3.31/Modules/MacroAddFileDependencies.cmake,sha256=HnubvkmPNbF2nHIRGoyN1f_0aN-XreteXq_kSE96otQ,848 +cmake/data/share/cmake-3.31/Modules/MatlabTestsRedirect.cmake,sha256=metlaLRIoKbTzoSrZ-E3hOs5POIdHNzyG8JllAvBT6k,3544 +cmake/data/share/cmake-3.31/Modules/Platform/ADSP-C.cmake,sha256=I_uko4Heu41FFyP4oPVzSEy4pbJm5goqMOaiFHHOKt4,49 +cmake/data/share/cmake-3.31/Modules/Platform/ADSP-CXX.cmake,sha256=8g5eXzeQ6TuFRp2MIOwewjCIryG6ODmzShNjQbr6FtU,51 +cmake/data/share/cmake-3.31/Modules/Platform/ADSP-Common.cmake,sha256=_3RgTsXVZZ4i7_1Iv1SPdFqI0Aio1FLN-9aE-D3hMkM,1188 +cmake/data/share/cmake-3.31/Modules/Platform/ADSP-Determine.cmake,sha256=c9jaJ5OWXEBPcVp6FdyxymM7eqjM4iDUbpdN63ghiBM,901 +cmake/data/share/cmake-3.31/Modules/Platform/ADSP.cmake,sha256=V4dWcEUQNT870RMe7xXhXIr7-5l9-C6RBStjDk65CWQ,118 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-Clang-C.cmake,sha256=krm00VzdZjziD9Os_CNlXU03TGvLo0AeQTFAav9IpJc,28 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-Clang-CXX.cmake,sha256=BXrPS2x1AB4GgAv027JeIcyzjiqPDSuwXGplndRtLIA,30 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-GNU-ASM.cmake,sha256=eEoBVmjg7oFL-8cqz3hq10ExFQYoo4mMaeukgZ8yUQw,50 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-GNU-C.cmake,sha256=euDye8dGDu3hHqtIUSkO6QZN47IFjgaGJgV3Rjb62gM,48 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-GNU-CXX.cmake,sha256=UQGyfBNymVZvTr7YehTHDRr1vEEJwjWOlAr1altEnWU,109 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-GNU-Fortran.cmake,sha256=AySlhVh7LhIQxy4s7kmRBhMm_EU0dK2M1MBm4LqCJME,54 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-GNU.cmake,sha256=EtsPLsKyE9UYeVtBYsr7iFCNEi8gn4aS4XHVNTWtyK8,2248 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-IBMClang-C.cmake,sha256=pZDK3R-q-ledXwb0xsPq33w3vEW7klMOnv6loOj5IE4,58 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-IBMClang-CXX.cmake,sha256=zrpW_DJhnVtNZJgtCfGTvuhAesdhLJaDdZrI_OJAjHQ,119 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-IBMClang.cmake,sha256=fRtFgm8UjUhzpeBGtEApeLR-PXEE4qucpi5g3790ka8,445 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-LLVMFlang-Fortran.cmake,sha256=AySlhVh7LhIQxy4s7kmRBhMm_EU0dK2M1MBm4LqCJME,54 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-VisualAge-C.cmake,sha256=K8u0BFxWC24JxLUNqbOSBooNKQzIHVFPVkw6vlFmXSw,27 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-VisualAge-CXX.cmake,sha256=noqAzWusL0ftc0I2TVkPW3WPjfnSIcHukjfdsQjith0,29 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-VisualAge-Fortran.cmake,sha256=OQojOWIGpXGH8XvpUCagB7rNUVM4bW4Us-QZ-JkUwGw,33 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XL-ASM.cmake,sha256=y2HBGulYQrAisqGE2-xyv-nREOSg3e1mIf0QE036oHQ,48 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XL-C.cmake,sha256=L2M5rfWC78saDVbYrEHH_CfGfqS8hrTd2rcx7KtOiiU,168 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XL-CXX.cmake,sha256=dmOEtL0gMHEEiw-Ak42bjMqY29bbRU7tshNuAKgaQs0,146 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XL-Fortran.cmake,sha256=pSb3yNGi7_axfRBW61TxEMROVOs2VAMO2id-GkfBcsE,52 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XL.cmake,sha256=FdXVDkzueIwyP9tRVgLg1W731CqoW67a6hs4YH05f0Q,2509 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XLClang-C.cmake,sha256=9yvEMYbaWZLCM4Ljl--FywIyn4yQU7_RU8iJzo4z7-Y,56 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XLClang-CXX.cmake,sha256=YdqbY25apJ8T9lm9tXzvwW15jFkHEjh_vaRZwmssZ04,58 +cmake/data/share/cmake-3.31/Modules/Platform/AIX-XLClang.cmake,sha256=-GCfXblMQTKlxP0lyyAR71zg_9kKeQWm-tAMM7Iu9ZU,390 +cmake/data/share/cmake-3.31/Modules/Platform/AIX.cmake,sha256=sByFoM-y-QiLxpWtFlbQp2gV8YCwLggkS2SfN9wu9E8,1496 +cmake/data/share/cmake-3.31/Modules/Platform/AIX/ExportImportList,sha256=w5QvXaHKqvMASHCgWjvlr7DAvdU4B2QTg2BnSIhVF1Y,2530 +cmake/data/share/cmake-3.31/Modules/Platform/ARTOS-GNU-C.cmake,sha256=He2u91nE0-oDNumrC4M-uPglxmeO3Hm-GwdZzxnAwcE,591 +cmake/data/share/cmake-3.31/Modules/Platform/ARTOS.cmake,sha256=23eVdLNGJ47_adXUA5pngEzBE09Ib1U0CfebBktDwj8,532 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Clang-ASM.cmake,sha256=stTFRiv8E_j-zDMm47hexY4SDKro8E4Zkcv_v1btjtw,62 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Clang-C.cmake,sha256=kVGeCYyw4GIFY2wkrgqwfWrf1Kppy2SCo0R5EkcLjVs,60 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Clang-CXX.cmake,sha256=9aWOFg0-Hyx2Z9HhIxJKlvDYmdsNkHHRlH89FOGBbb8,322 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Clang.cmake,sha256=0XvUX3y_QY34RLXYGwULXmz3kE61SDeXObhRoAFOvaY,3279 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Common.cmake,sha256=TJL5K3TYk0gpQJ9z996_VS-wS0XtOsKEBfNqtVYMf9I,8228 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Determine-C.cmake,sha256=PicSNtFsjCFFzILLJ6CXWdVAWxlnm3ao5L3mh2F1c-U,77 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Determine-CXX.cmake,sha256=o8s4xtinh7218bxvQJrh3ttmtWeamvscVqCYOdOTjxY,79 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Determine.cmake,sha256=otmOaizmRd2kSS_sxmPkD2HrKLI_BAcd-tix6XZaTxs,25062 +cmake/data/share/cmake-3.31/Modules/Platform/Android-GNU-C.cmake,sha256=NA-qJEklW48Ipwy0DPN4Y2AidyhWDGNgeE0WLVuTUPI,56 +cmake/data/share/cmake-3.31/Modules/Platform/Android-GNU-CXX.cmake,sha256=Hqpnmotzbk5Mwx1wBkQjmldSK7B8eQZItOVT75DGKeA,177 +cmake/data/share/cmake-3.31/Modules/Platform/Android-GNU.cmake,sha256=Hn5Mj88xSd1Zg5dyjcalXxeFouFMImpkhA07GqgiVC0,1039 +cmake/data/share/cmake-3.31/Modules/Platform/Android-Initialize.cmake,sha256=86T7gTuGOHgUrYloKkvYsAdqJQgHkTLuh1az6VIrp-s,4180 +cmake/data/share/cmake-3.31/Modules/Platform/Android.cmake,sha256=le2s1lSF8zg-_EjoylbO9uMSZYUal6SVp_qj8MUll5c,1758 +cmake/data/share/cmake-3.31/Modules/Platform/Android/Determine-Compiler-NDK.cmake,sha256=BYcBH0WF3K6dPLHK-wWnHuSHRFukcVES9IPrMztDh30,13629 +cmake/data/share/cmake-3.31/Modules/Platform/Android/Determine-Compiler-Standalone.cmake,sha256=44QT_TFegR_73wXwflUYdPLQVb7MESzVULqlXKMb1lg,2920 +cmake/data/share/cmake-3.31/Modules/Platform/Android/Determine-Compiler.cmake,sha256=-xRIWLsUYaghMGB92JMUiVSUHqpSSaSJfDFNCVinFoI,3744 +cmake/data/share/cmake-3.31/Modules/Platform/Android/VCXProjInspect.vcxproj.in,sha256=DirVFzhNBp64MrzQ4kTBUVGXQe6eFgceyEnXyxZ6qkQ,1767 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-arm64-v8a-Clang.cmake,sha256=hOTVoSG96x00z4AKa5TpJ1i6MoW1PV6hYu_iEL2To2w,144 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-arm64-v8a-GNU.cmake,sha256=H4RJKMKBgQo9K-2hovgyXUo3Rm-teO2I50TgWVDBu8U,208 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-armeabi-Clang.cmake,sha256=tRh-gINXP7Z6OHBxSEVCmT81HsloxIVOlZOg6Ve81CU,335 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-armeabi-GNU.cmake,sha256=D-iCfa24b9Z-z-HR1E9VqWubOfCupoLq5_YXiTeL4Hc,398 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-armeabi-v6-Clang.cmake,sha256=HdMF4_iUhAmcRQ4l-H2cJlBthJWhx89u1mUQc6hX2XA,320 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-armeabi-v6-GNU.cmake,sha256=VVOGOKR0tsMRqeN_qOPeaolrGbnqjN_ybz239AEM5T8,383 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-armeabi-v7a-Clang.cmake,sha256=odaYNisPLWQFODrwvoWxdnb8N6PqTEUHF8DtXKynxN0,552 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-armeabi-v7a-GNU.cmake,sha256=tsHcNStv_r8FBSFoywvvWihGv2zQwntT9-QBBOm8roM,615 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-common-Clang.cmake,sha256=nci843X3CtOlyOdEu_7eS8Eq1_kv-6JwCoFFKDENh4g,162 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-common-GNU.cmake,sha256=Y5YiNsbTZc6D2cI9NhPqqvW86LmBIq9jobV4Snq_VVk,37 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-common.cmake,sha256=nuz9BsHZWMoC8C6Y7oQHXWn6R9l88DVvKj_c6tSr1_M,1415 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-mips-Clang.cmake,sha256=ZHsfyf_hLnlptXrc2AyOnRqUr9q5mtq7tjvJpSzbfjQ,43 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-mips-GNU.cmake,sha256=viymc4od5mRpxhG2CMtCeRPjIizbQDbes131P9ghKNo,106 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-mips64-Clang.cmake,sha256=ZHsfyf_hLnlptXrc2AyOnRqUr9q5mtq7tjvJpSzbfjQ,43 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-mips64-GNU.cmake,sha256=SXE9lZu1CPuObsrh8tpfInqISmaYZiZ0VUPYFH16TDs,108 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-x86-Clang.cmake,sha256=ZHsfyf_hLnlptXrc2AyOnRqUr9q5mtq7tjvJpSzbfjQ,43 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-x86-GNU.cmake,sha256=q8olwO_q9VJvoti-G2NIGP0LgTPb6LNeIj3LKpkdirw,88 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-x86_64-Clang.cmake,sha256=ZHsfyf_hLnlptXrc2AyOnRqUr9q5mtq7tjvJpSzbfjQ,43 +cmake/data/share/cmake-3.31/Modules/Platform/Android/abi-x86_64-GNU.cmake,sha256=ZDUmyKgbaoPWxZ740yVMZmstIzd4aPh2BXTcwhEIX34,91 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-c++.cmake,sha256=IookeZMHRUV7iaJre8LAAgeW08m5Un9pZj82HVs_eO0,1080 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-c++_shared.cmake,sha256=5yrobMVXp0x_GAa6hcF4enT2u-XbYcDUOc6p-h1QEwg,255 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-c++_static.cmake,sha256=8gju87jTMecrDPNsGHiM_752Wo3akvdhT8vnxov2FS4,590 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-gabi++.cmake,sha256=tcFkd229Cru7Ez4pEWnl6gK10IQ19TgvwBuc80i_itI,387 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-gabi++_shared.cmake,sha256=bjHnz2PVQIGwArOnLvmPiAOTNVkk-WaCw3QbhDVfRpg,130 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-gabi++_static.cmake,sha256=AgU6kBgzq6uEl5Ls3lwyCgQyba-uw2ROP1MP7HrmQLU,129 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-gnustl.cmake,sha256=DqsPghXXZ3p120oxvrPvyqma6JInnpCo-NyINdImChU,804 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-gnustl_shared.cmake,sha256=FeDw2PHQXZWaahF9DVkQj1AU79eETgo-CkLdfxv2psg,130 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-gnustl_static.cmake,sha256=2m6FhSW_EEj6ZyEwl4VmoPletCZATo3tzOTK4xhWhkY,129 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-none.cmake,sha256=TNizMroGzbBXvyFMGTSE5aTWI-UXOmpYG9_1sm6NhPk,68 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-stlport.cmake,sha256=glC5oVJLHCmaRatpFFlJD1tIvjdLUjt_QjT00yZxGsE,391 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-stlport_shared.cmake,sha256=6jwfiWflVPBumXE6SEH96eQW2OJ2s-ZXaVLwbbS7WVE,133 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-stlport_static.cmake,sha256=APr8D_v5eV1agIge9va_11nSB9rYgNvwGLFid0HKlZ8,132 +cmake/data/share/cmake-3.31/Modules/Platform/Android/ndk-stl-system.cmake,sha256=lIF0Trbur75XsfRDg5AqodXe-8ywk0iSWRXoVogMTeE,268 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Absoft-Fortran.cmake,sha256=TtM6qEUXf2fkVQDK02f07VbC4BqQh5orbNd406FWDYw,351 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Apple-Swift.cmake,sha256=V9df0SjNRfpzqK5ljUQpub0JtcgJhrGyoF0criJAgos,828 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-AppleClang-ASM.cmake,sha256=OqpZWUtPu9y9nDE8GzzDEhJ-FNQ6Z56hOfUlGEgwh-U,34 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-AppleClang-C.cmake,sha256=kvYzgw1BT1L80eLtmmFeWmxwKD47Bra6POmBLFs7xcI,202 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-AppleClang-CXX.cmake,sha256=mAHPCnzRJ42DcCUzYhXUzvsEQ8uL5yPHJl1CmLyMF4k,210 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-AppleClang-OBJC.cmake,sha256=oUu8w0r9TvKirjnwoKLTlPGSWZ3CeWzDEIm8wNXX0ko,214 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-AppleClang-OBJCXX.cmake,sha256=IFdymKS-sh-7NHe2HZEDBcpP-P0ezu3c65XMZqfB52g,222 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Clang-ASM.cmake,sha256=kRgtnVRsiiOd_wu5gVOTeUGegvRQ_zZRlQ9eJ4vlY-0,58 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Clang-C.cmake,sha256=xlpRyK_LidxHV-oeGwfpfUZs483IVjw8jCcZ-tyd3Qk,56 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Clang-CXX.cmake,sha256=EubNjApZzXFKlQdYj1JRc4MzGjuXLW_9AZk3mubNZjg,58 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Clang-OBJC.cmake,sha256=Bn1zWSxPsTSW9mM4D3voJ3c1_MTf8kcGbD5zsUPJ230,59 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Clang-OBJCXX.cmake,sha256=3DMJ3CknxFt8LYTl7KGnTYsH3Pbr9vIi9l_zFaGKHCs,61 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Clang.cmake,sha256=jVPyd-wvZpqED-bV-QnVPP6oqq6JMV3FX5qjwPXtqKU,2781 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-GNU-C.cmake,sha256=SSJyXNKnZ6ZC2mywZftdC4LaCUtExy_-2B2qGWUw-zM,126 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-GNU-CXX.cmake,sha256=t97dxsZ6xF1IOToAftlpF1aOlcc9idwFr_IX0F9mDPk,132 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-GNU-Fortran.cmake,sha256=vWC_QtleUH95h44JQB0h-Q7Y1Jp7isyNY3A8-kZPVtE,428 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-GNU-OBJC.cmake,sha256=Ed_recR3IO3wWWiOLtVoJR6XWEiG1Im9gxA9ESJYP98,135 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-GNU-OBJCXX.cmake,sha256=9YTa9WxHqBMKfrgXS0X95virlZFM0npQCyI2zGP9kDI,141 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-GNU.cmake,sha256=njBEFXBP514G_WL0pgTytmzuA_fAmHoN9Llxpbl9GGs,2589 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Intel-C.cmake,sha256=istKm5Xdksv91UQy2lyiKA5DGP59jcDuSzrE6YKV0Rs,56 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Intel-CXX.cmake,sha256=xhXM3HwX0WCMtFBaYFANW__kEVhB1gE0FB5o_t8Nv_Y,58 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Intel-Fortran.cmake,sha256=ddeB6zT3BjsxICubgqLjE_kyI4PgfDooFGyxQJGy2_c,346 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-Intel.cmake,sha256=o0DYUNLjrSSyYa3DCqsQstAmpJFUVaOYCahzE-syRlo,785 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-IntelLLVM-C.cmake,sha256=N0QQsmoevH1oX4_61moImgsuXapq10cFXd7zS63hvCc,65 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-IntelLLVM-CXX.cmake,sha256=JqyejsBDRS01SblA1ou15EDYAgXHy8nLC5wobzD53Zg,67 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-IntelLLVM-Fortran.cmake,sha256=59hJnupo0rbtZUwFJYOFHQeuFvRt4GTBYmAGxDweZHE,355 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-IntelLLVM.cmake,sha256=MVXNSy0I_saxVXiJYHqMJZeoR86U16phOM-X7RR7gaM,719 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-NAG-Fortran.cmake,sha256=DXLLYlN2Mj3u57XwlwMLpbV3oFCSr50ks0lr8Z6AFNo,1153 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-NVIDIA-CUDA.cmake,sha256=ATHdMqek7kq0DerwL9FNqzfTOKa_knwfCljlp6Z8qvE,1044 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-PGI-C.cmake,sha256=cV_fLbcleqJlvCthXPovTaUIKejKTb0s9MUn9yNTxSA,52 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-PGI-CXX.cmake,sha256=M8fLdbjkQqm1M0YT9D1zOzG_gmI_BmzrHRsuiEFAQSM,54 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-PGI-Fortran.cmake,sha256=AwAW2IL1Hxch_0Dzkc1qGPp50XrEoC1Vi1z2eSYpBAI,58 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-PGI.cmake,sha256=vbtKfAe2b1IitWT5db4Q9Pa4zdUJRT9SdO7HdQw73o0,492 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-VisualAge-C.cmake,sha256=l5mCOY0Xjvw_tFng68quPJSwfP9KeC7ut-YnXZNb0U0,29 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-VisualAge-CXX.cmake,sha256=naFJu8G3gfKRe0_mD2T71Z-SpxAL1pd2QpSOw4XVTBU,31 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-XL-C.cmake,sha256=KT4dByZCl1yRCeBDJhjjf52JqR8AXVt9coq3coInl2I,269 +cmake/data/share/cmake-3.31/Modules/Platform/Apple-XL-CXX.cmake,sha256=vqJ3JR_BM5aCSuWo1-RXObvADwwoc9RtJLmTT_cPyYo,273 +cmake/data/share/cmake-3.31/Modules/Platform/BSDOS-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/BSDOS.cmake,sha256=aafSZ2MKL1ZlPe28Kr7ozZ2Zzy2X01VSVNuqW2M7ID8,29 +cmake/data/share/cmake-3.31/Modules/Platform/BeOS-Initialize.cmake,sha256=XkQfIVyU4HqyuZG3hxkw2y3AXQIEypfxNIIFXEkldHc,24 +cmake/data/share/cmake-3.31/Modules/Platform/BeOS.cmake,sha256=t-DtWEQE646yGyS4TSyAroEUf2gOiFREzGubV9TH6vA,391 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneL-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneL.cmake,sha256=zbEWpioCbak_tQ6IkPqTUEGXxY0C3G7kFqNVEt7M8OY,1860 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-base.cmake,sha256=oUGgUJhucVJqVGFnRe2QdkZUn1iMPptI2ZRYYtCcHLE,5205 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake,sha256=hXQ0HP-GPesN4H-tV4K6PTdtWjApY5hZzSbkKJ0ze60,181 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake,sha256=f561_WYF9AoRT_udv6eYKSyBbJOcJSo9xpd3-zwiMPc,183 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake,sha256=KEb9wXolC4TKMpS2hNIOTwya6qrmkS6T_6A4Z5GSJYI,187 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake,sha256=0e_zGwnveMF1m6UNXATElJkjnImIFzrZ3YpZmU9zpsI,302 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake,sha256=d1qB_ntfZlpsvMcGLKpIf57GB_ryvY4yxdvLJcx702Q,280 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake,sha256=93sqFB7fNz7RfQ0TpQvYcsJV5YHioaGgM19n5uVLITI,186 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-dynamic.cmake,sha256=0PQIkjuZ_CrZLLLRzro4RxCcVXGUIjTgCTeSzIf18wo,323 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static-GNU-C.cmake,sha256=Fg9UF0mZh_0brCw6iR9ui_u1TtdwXnoQ-9btXdA20Xc,180 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake,sha256=e9klRqZNUsQSIFfhZA6J6skGoECyP7R89LJS9JAJmi4,182 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake,sha256=Q0DgiI1pxcxhQLI2hZCDczVMw4YTTnTQv8imBCQ4sIU,186 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static-XL-C.cmake,sha256=n3l0Uw7UzxaMz8NIBJMZ3ylmy4oNDgEwdmXeK7gTBvw,301 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static-XL-CXX.cmake,sha256=fUlWl3H4IRmVQUO-obipST0AuTJk87xXdKteWqk2UNA,279 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake,sha256=EngdF2K1V4zMU8Eehz6q8lTN7_1_E1C8H5uZ4i_ae18,185 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneP-static.cmake,sha256=7Z2A-3fcK2qI1wX0zIjdw8XtWcXYMiuRxtLGCXmb_jM,318 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-base.cmake,sha256=8D3AgsuvVKsjMSMU7qzCgNNorZ1Kbj_yf798u9UcKVc,7002 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic-GNU-C.cmake,sha256=VA2s08JjqcAQB_Zf1BK1WqG5iOOrUpD7terDo9nfdDE,177 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic-GNU-CXX.cmake,sha256=4Ht6rkVsYfmq8NbQHgW9i9IPS2f7rMk8--rnPBUvL_w,179 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic-GNU-Fortran.cmake,sha256=tIWUI_oO7YlDk903RONt6fuEUPkAIGrusQSttToXvuI,183 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic-XL-C.cmake,sha256=QurGYwcW6IwiKgwM1GTp-XSlg7bS8iJkG1a1GnjF7hY,298 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic-XL-CXX.cmake,sha256=WxFzKeQ8VU9NkSjlOo-zhGsFs73t4kd214Q6-P13CRY,276 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic-XL-Fortran.cmake,sha256=9fqMA84Lz01R6U6vcGq2n_QKyVL1-2VL1vsEKntQfp4,182 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-dynamic.cmake,sha256=xmjNSiLyq8gs5l7wovnJk8PbFE8XOeZ1p4nhDI_OwmU,221 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static-GNU-C.cmake,sha256=dowcJ2Eh7H-Qn21R4KyecouYXPmqMRxtdx4VodezWa4,176 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static-GNU-CXX.cmake,sha256=MLVsOj4cVowoWpiRn-3MY3b11DQmumkm2puj3-tUljk,178 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static-GNU-Fortran.cmake,sha256=ilP8AD2xZd-b6TY9rcy-9gHsoeCbKWcXXUap1Bj__hU,182 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static-XL-C.cmake,sha256=hkERSiSmTR8hxkhUn4hrZuQku_An3D8NX_iliqqDZiM,297 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static-XL-CXX.cmake,sha256=U0ZADKUJ3Ekf7hZe06OJWq8SxCWTTk_TMttGMaxLHIE,275 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static-XL-Fortran.cmake,sha256=R6584Kn4z24TqwO8wRg_C999MbFJfcwasQDrNaYUQ5A,181 +cmake/data/share/cmake-3.31/Modules/Platform/BlueGeneQ-static.cmake,sha256=CU3gder5hPJBQCFmXl8ZkmSgosgjimQmG90dy818Fe8,215 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-Clang-C.cmake,sha256=bSD8n30Yyhdp0BpuYDfXzq95onSs7FS0FBFOWw-2x8o,31 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-Clang-CXX.cmake,sha256=fdgbDMiMZxA0bCv5IpIm9J0TAYRFbuaw2Td3xmpgDsg,33 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-Determine-CXX.cmake,sha256=afN4_sHtwiwc2Fa7kjcOtAtTtFMn1i-qhwa4d2vF0ns,248 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-GNU-C.cmake,sha256=mkeAhwqrb-5xlZcxwjp9GfxXBAq1xo56Y7HrI1zDiNI,54 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-GNU-CXX.cmake,sha256=49Cc_YX2S5UpF3K5EcE99Vlclp-9Bsq57Bar9fyt_dM,56 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-GNU-Fortran.cmake,sha256=r6AtELLR1_2b5aM4RY8Zhs7q1uPInlzMrdGnS_KDVcs,60 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-GNU.cmake,sha256=n-1-RBdXMTGbwRJvh_pcS7y3d0XblLenIDdGwtWhu5o,2663 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-Initialize.cmake,sha256=4FcRLBXYSA6hk3NxIz5MxEYdhyr-jXCHYWlIAcmVL2Y,26 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN-windres.cmake,sha256=xz5zGDl64vcNNnyljTSwL0f3zymVr7lu8NNEVGj7V60,106 +cmake/data/share/cmake-3.31/Modules/Platform/CYGWIN.cmake,sha256=-MgqSYyQaE7owyDIwbARIiSJDuSodKxDPqF4XgUzfI8,782 +cmake/data/share/cmake-3.31/Modules/Platform/Catamount-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/Catamount.cmake,sha256=W-uoSst0p_9FxKzA6o2FUZttejFRgM-cjdntF00vrN8,1033 +cmake/data/share/cmake-3.31/Modules/Platform/CrayLinuxEnvironment-Initialize.cmake,sha256=JOn8EaQ90WRMhhzv0OSwNWD0ubi-f2gcudY1D_qWOhk,162 +cmake/data/share/cmake-3.31/Modules/Platform/CrayLinuxEnvironment.cmake,sha256=aGH7BUgA2Y_hjYhVgmdvihJvJuO75TcaeBXcWtIWDUY,3323 +cmake/data/share/cmake-3.31/Modules/Platform/DOS-Initialize.cmake,sha256=Q66k12MA4z15BJ3ZDHKh6Y292dQ4QPS8hqFUE254UZE,11 +cmake/data/share/cmake-3.31/Modules/Platform/DOS-OpenWatcom-C.cmake,sha256=uG3gVAkaAOBKy3eTpJjMCxaE_VVYqY59__duF3Hqz-M,54 +cmake/data/share/cmake-3.31/Modules/Platform/DOS-OpenWatcom-CXX.cmake,sha256=oVfNYgOxsc8e10UOYyXVJbbMlaBJRCdNkQKhxC7iH4s,56 +cmake/data/share/cmake-3.31/Modules/Platform/DOS-OpenWatcom.cmake,sha256=Gy4GJYqkcGHuKoGx9JpWHdmc0omda_89b7DGwjJM-2I,1025 +cmake/data/share/cmake-3.31/Modules/Platform/DOS.cmake,sha256=nt5Ag6UZ88cuy0iaWIGsGWy7KygDtMNV6CPs_1NM-5I,401 +cmake/data/share/cmake-3.31/Modules/Platform/Darwin-Determine-CXX.cmake,sha256=afN4_sHtwiwc2Fa7kjcOtAtTtFMn1i-qhwa4d2vF0ns,248 +cmake/data/share/cmake-3.31/Modules/Platform/Darwin-Initialize.cmake,sha256=TMBsr6EJRmhCWrj6YckX9Kyg0gMJ3bAhtVSv-HDLJZs,12842 +cmake/data/share/cmake-3.31/Modules/Platform/Darwin.cmake,sha256=Qi8ArsDmabfl3GH4VI7YRZTpKfj1TL_wHWJo101sDFw,11594 +cmake/data/share/cmake-3.31/Modules/Platform/DragonFly-Initialize.cmake,sha256=G3ikvEaQPTARh7-Ny0tqPNrtLxWyU0PCb4GR78UafvA,61 +cmake/data/share/cmake-3.31/Modules/Platform/DragonFly.cmake,sha256=F9ElwMuVwoqZUFfixrR6c-2P2Hc3XXtiQkWrKRFsnmM,388 +cmake/data/share/cmake-3.31/Modules/Platform/Euros.cmake,sha256=N44AK9VzmZg81YHF4C2W1DMap5Zrf9v5-QZ5gb87O5w,615 +cmake/data/share/cmake-3.31/Modules/Platform/FreeBSD-Determine-CXX.cmake,sha256=tuXByCYWDBHE81um8O6xxiZlpR2JTCNT2AifieBgnwU,77 +cmake/data/share/cmake-3.31/Modules/Platform/FreeBSD-Initialize.cmake,sha256=9jVCIxDYX_dvibbayCtAHC2b0eXtUH_lstPxSoRUQDs,31 +cmake/data/share/cmake-3.31/Modules/Platform/FreeBSD.cmake,sha256=9H5BkCy3BJVdmPbsddgmRGv60sYdyOKMERJdP3elYhA,1664 +cmake/data/share/cmake-3.31/Modules/Platform/Fuchsia-Initialize.cmake,sha256=qkYzSCV7fU2z58-spdBQ5nRMZ4mWryNJTyAHwxXN5iI,15 +cmake/data/share/cmake-3.31/Modules/Platform/Fuchsia.cmake,sha256=FPn5AHD6f1n3GoNj0flv9E6etI40gfGkDNuoZWjRXV8,1187 +cmake/data/share/cmake-3.31/Modules/Platform/GHS-MULTI-Determine.cmake,sha256=MIQ8tUMhCM2URi4tRGFtUFvk9_uimOLmV3VkFMDbtXE,4565 +cmake/data/share/cmake-3.31/Modules/Platform/GHS-MULTI.cmake,sha256=pLOGWp2CqLCuDweVw2iIx3cTwfxPpMRD8hM-FkvLJdY,357 +cmake/data/share/cmake-3.31/Modules/Platform/GNU-Initialize.cmake,sha256=Hu3rxsk8wo7CzRBRrvF6jyx1CtMEWubqIQbJW0B_AXc,92 +cmake/data/share/cmake-3.31/Modules/Platform/GNU.cmake,sha256=gQYgadYYclGHKs-l4LPnOZrQoGltc4-IIF3FC18baeI,1831 +cmake/data/share/cmake-3.31/Modules/Platform/GNUtoMS_lib.bat.in,sha256=-e6RlPxOK6-qV6j2qFjESZm_ZvdkmhEXOxML9-JPGrg,102 +cmake/data/share/cmake-3.31/Modules/Platform/GNUtoMS_lib.cmake,sha256=t7t8yMswxWgAiFEBnoD3KyHo7ud8XOSVxzhL9JsxP70,383 +cmake/data/share/cmake-3.31/Modules/Platform/Generic-ADSP-ASM.cmake,sha256=v53IwO7JD0NitHbCAVuvbbjCBs7KDSZTy2oAhTtdHAE,292 +cmake/data/share/cmake-3.31/Modules/Platform/Generic-ADSP-C.cmake,sha256=GfLKDdEFQzh64bsZ3IRc656N4a8Q8iVMF4TpP07_r-s,761 +cmake/data/share/cmake-3.31/Modules/Platform/Generic-ADSP-CXX.cmake,sha256=KATFfNeiTV6jS4mZF39jlZ8RcV435J6lyerIQF61v64,791 +cmake/data/share/cmake-3.31/Modules/Platform/Generic-ADSP-Common.cmake,sha256=1dOtmY5Xj1YIjPECrEE9w9G7wDMx2plGS5Sn0Tjtff4,4141 +cmake/data/share/cmake-3.31/Modules/Platform/Generic-ELF.cmake,sha256=WAQ310_UbUZD6qr5GtXGLCh2sPnBUiQSYeqnQ35-16Y,236 +cmake/data/share/cmake-3.31/Modules/Platform/Generic-SDCC-C.cmake,sha256=guxlezdPcsIFwP7okKUnzxnmm1VZyzvOP5rzzv_kgoM,2375 +cmake/data/share/cmake-3.31/Modules/Platform/Generic.cmake,sha256=GWU4K-yKRadDXirVPF1C9Hu4Nq9EgSbGpM6nwDIPkPo,827 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-GNU-ASM.cmake,sha256=rhWUSBO--SVZFvwlvcHRECfbX1ZMamO5fCSUTpgo9xA,53 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-GNU-C.cmake,sha256=kJ1IdQQ7-fq-TISFlxOghFF-T5IE0mXTGGBRB2xvW9c,51 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-GNU-CXX.cmake,sha256=B4wJMm_d5PHR2o4RR0gm1W_7aqPwsii8-R_ECCd1FvE,112 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-GNU-Fortran.cmake,sha256=Cq6r5_bKFi00XwI5A3hIX3KljwxlY_41LAv6a129KbU,57 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-GNU.cmake,sha256=kurc_LqGC6N-VtXnS7ZJk38s9rRIQRxzoTt9CQV8_sU,750 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-HP-ASM.cmake,sha256=ihpLb32645EkSMOEBZVf7gYjpkJHx6X7OVQGdqVqf2o,51 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-HP-C.cmake,sha256=ru55YVG3wRKtMVxs1MVKKoeoPfvFt4s5_yy8LtVPkTU,405 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-HP-CXX.cmake,sha256=eJQQldiyhxt1a-fWDATevQae7QQi3Jr80vcZLg32M0g,653 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-HP-Fortran.cmake,sha256=yZ4hJcxbH7KIr2iG_BYUC45Wp5HEWLyFYUlRhKxsoSE,325 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-HP.cmake,sha256=aMfjhRjAkHZBilFSYhZAdI8wor00lxMPAF-7e-kHlXI,837 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/HP-UX.cmake,sha256=tqKQQHSc7izckrVdiYvFMnoOJBTzKUMKrO8dLce6V1Q,1976 +cmake/data/share/cmake-3.31/Modules/Platform/Haiku-Initialize.cmake,sha256=m4HFT3a0gpqIwkhrJcaPGrcQ24NqgxesubGqj00dy1Y,25 +cmake/data/share/cmake-3.31/Modules/Platform/Haiku.cmake,sha256=i8d8fIy9D9YTI0aTQaCgzVhfrH6m0zHgJ6roaYZ75Ec,5000 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-AIX-ASM.cmake,sha256=D6Uj9dfrGzDDMLp8-Rxrue_aHOZxzbJBvQl4dPgnlaI,199 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-AIX-C.cmake,sha256=1Xkd1_2RQDCxfoejAIUJHOzzDccsd2YyK1NsaKjsWZk,197 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-AIX-CXX.cmake,sha256=66f_EwRix6rO_2RbHTJtw37S_rcbtCsjcHC7nWYjntU,199 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-AIX-Fortran.cmake,sha256=fJy2_O4jCRLY4rLNtNXAjimyH-wjeDigQglCU7VpVcE,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-AIX.cmake,sha256=qC8b4_fpE8aLIrIMWjS7iitMj8m3j4IljIYq5ThiDHI,392 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-ASM.cmake,sha256=VAGrojrs9ouBy8WQdJSdFzoVkO6w6XJe6HEXQG2pJe0,208 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-C.cmake,sha256=TGQHDie-3t0YV70No6tTvcwX09b_UpA_HtXqZk0tOic,206 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-CXX.cmake,sha256=9m-ztOFmeVR2JiIFrlU7ranDy1sVURxeU7SQ-P7WKOQ,208 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/AIX-Fortran.cmake,sha256=jJnPNcgvh938zGmumQM0GWd85Y2rZDDHwNZP2d-OgJA,212 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-ASM.cmake,sha256=3zy-Y-Mfl5lGrrjSJ7xfIvUPiORwYDofUzZ8gzBuxSE,212 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-C.cmake,sha256=G4YcfJrs-_3aKhP4kiPGZPdCoVvMyJ5WcBSYPvrN9jo,210 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-CXX.cmake,sha256=QK7PHHXAVguHh0VjHi-_SIrgFX0e6WVMPO7GwSEQ6v8,212 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-GNU-ASM.cmake,sha256=LYweOvdoDebnInVhqXRR_5rQjE39d-NB1lwjw-plnf8,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-GNU-C.cmake,sha256=kglsyUshnVahmvCpuU-7yGuCrtdPyrsdGFmU6tOgUio,180 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-GNU-CXX.cmake,sha256=Va7VpVK0DWbPalQfSmAWcqePcJM1FxJNUTfM_1bqfD0,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-LLD-ASM.cmake,sha256=NHBvHo1Anxvuu8KDbXM_omyIAgnZ9fUkqGjaqZPMcEw,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-LLD-C.cmake,sha256=iKerY3JACs8wQuBlpl2ybp4ybPH-0GqD0rZ8AHzUsxI,180 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Android-LLD-CXX.cmake,sha256=hK5xL7RoiFAOyL1PAp6eBZ44ElYIUHocQ9j5P5j-CfA,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-ASM.cmake,sha256=yzcRjA1uOVPnvHybCDFtYuBeJZHllkKm90NVf6NpoSQ,224 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang-ASM.cmake,sha256=Eui-8ZuaeRGGJF9tnM75fb63JLncHPsI0JDUjQt4cBw,217 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang-C.cmake,sha256=aXc-0OKsVl3fH40vVNGxMHN6rCjxOCNQ5BPRRueWDE8,215 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang-CUDA.cmake,sha256=yb28pCN07TVXMuu9_z1s8I_Wz0Ni6HHnMX5eQrjeaKo,218 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang-CXX.cmake,sha256=pww2D4BjinmykulOzuCsyn7DXodPqrpwuAfQo3tisso,217 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang-Fortran.cmake,sha256=5V7QIfwlOSQo46izXdhFm96oL-s6w4aDcbNqVzr8llE,221 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang-OBJC.cmake,sha256=RGhJf67YImunhYachSw2yQ5XwQWQt3FyGsEq3bY7Q2E,218 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang-OBJCXX.cmake,sha256=LaxwV8EBVacU85mW5yG_SPkTPYMVVfQcTSazAsaaRUA,220 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-AppleClang.cmake,sha256=VVwP3ZxzqcLYjaPCexsmayNNpt5E9b94cygxf-M8S10,789 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-C.cmake,sha256=TW9bE_w-_mzhsA8OUfekmRum93IR19lftCGwaXuYodE,222 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-CUDA.cmake,sha256=lVTCnn2QrnnR9Ku8zK87bkwVUL2wSDngI8SMdgEwdRI,225 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-CXX.cmake,sha256=6s3EgtQMIi2L0zuHoIISuVJRMD3loaznsUnoda7uL9w,224 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-Fortran.cmake,sha256=GhG6PYvwcdC4mRD0-09WCmdErX6Ed0n8Cr7KqHGyCZk,228 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-LLD-C.cmake,sha256=qonhYve0-hh0UmnS9-kf7iiWUK_h4RXwY4uYbgMkbfE,224 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-LLD-CXX.cmake,sha256=VPJ5zdAMzymkm9eW0wv_5oBEon4U7I91NukPAmBdoI4,228 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-LLD-OBJC.cmake,sha256=VmSE5bs8sl1Mfh2B3An20hqj2AkwyAqBYTHvxzwTmf0,230 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-LLD-OBJCXX.cmake,sha256=NpMwQ17ounsW4nZQpQE9-vpjtaP7dIKD9Z6bLns4WZM,234 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-MOLD-C.cmake,sha256=E3K5J_J3TRk1Hgt9-kb12SKKPTmq8MmRK2Edp5FrYrk,225 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-MOLD-CXX.cmake,sha256=5-bdABrXRXniBbBdu5sWOCr8Ddl_CBsketZyWQtv-Ys,229 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-MOLD-OBJC.cmake,sha256=OkNf6IOGmLWeRgTJkDy-0SelxcLUE1GOlCMx4iaB840,231 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-MOLD-OBJCXX.cmake,sha256=eQLQV1r1vWD2NPI6NJPW13HTTppSyvDHQ73jcuw1Wng,235 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-OBJC.cmake,sha256=hU2-wnJkt4vM8FrTdIp7H4Ht4FxRmltZ1kw5wsytF8M,225 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Apple-OBJCXX.cmake,sha256=TZxzY8_L9Krot07oE3MMm4Jc3xU_AhSJ4E_9b2QmgN0,227 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/BSD-Linker-Initialize.cmake,sha256=GayN0_acXPmJAsLBUNl1lIJIiu_unv0Ha8TPolBhlpA,738 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-ASM.cmake,sha256=P3Ipb5oYkKKyzmHKQZwtLaZEi7Daq_XqovOnxGbU4NU,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-C.cmake,sha256=DCZRXcTPC-JiJM27FVGtS3XfJc8X0zFja8Vf-F1CATA,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-CXX.cmake,sha256=hQ7tAsP9ST7bhOqFTCBCjM3XfrG5DlL3v08xd2xu36M,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-Fortran.cmake,sha256=wrkU0AEQtdcwj1mZXCATgCFbTyZhMsPKBgCXF9gKCVs,215 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-GNU-ASM.cmake,sha256=1uhwCbVW2GN7A12J6i2GWz1YDJtjxMTaWuzWKnuU6Sw,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-GNU-C.cmake,sha256=llnYPg3ZL3uoLfNTj3AyFIJ6eh0PMGP2rffkqueKej8,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-GNU-CXX.cmake,sha256=SfLTTssecNd_cwAXP3UjwbYGoBzBE0_XcxIxeMv6Qhs,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-GNU-Fortran.cmake,sha256=cNVVOcDQLEkv51MbNFnd2vfTwxoYwpjJj0jwtYxXt0s,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-GNU.cmake,sha256=aNxkHH9IjtyafcG2nT8uMNCtWkVKQLEdOPD1dZ3yLq8,476 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-LLD-ASM.cmake,sha256=4Ib6k_odmWzz2JrTFfbGQ5UocvdwTP6588sbey2y5hY,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-LLD-C.cmake,sha256=sXwyZyouc719hKl8hl29dqEiMkVq0McoIHgl0Ru_50Q,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-LLD-CXX.cmake,sha256=nQrKBVwalGgx-oRECEzcCecZOOocvvN_ExR952fNqdk,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-LLD-Fortran.cmake,sha256=tP4ZN_IZ80DSK6Zhuv47mQfP5DUHLBmI7GALL0rf0-o,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/CYGWIN-LLD.cmake,sha256=D3LExZgMmBDp6v5fXQbafOZh4baKFs4-Gq2TGpkE9aI,466 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-ASM.cmake,sha256=7dCPM1uuqgDwfEpEtFVX3C1V7WPd2Cysr1mDRdaGfyU,180 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-C.cmake,sha256=LdFha6D-s4KfpEXcQEXBpWnWP8Jn7w1ggyQk1g1uD9o,178 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-CXX.cmake,sha256=fjtqVIzgYFVOilrd1mFUXBk3p25-X-ArbteSpx3G-BQ,180 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-Fortran.cmake,sha256=xda0RVVYmhjaXZq6ft3Kch670LywNoknMsTlNBJEetk,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-GNU-ASM.cmake,sha256=0j6YgdjvbrKUDlVjikbDcSZ3Xs0Lth2cCrXi2LScviw,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-GNU-C.cmake,sha256=jun2G9NLvslNLkZtXUIofY_4R1O_asVh079_uS3Jaro,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-GNU-CXX.cmake,sha256=qh7EYNb2OvapwO6RGDJp_gooMY_YBLb4gduvWaf12zE,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-GNU-Fortran.cmake,sha256=I408p4KI9NIGMigSK_87AmNKBB7ViT6HlX4PUJxMPFc,188 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-LLD-ASM.cmake,sha256=kCtr42A_Z8f-SjHp3Tz2l-XZzGbs_k3BZdgqwDhVulc,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-LLD-C.cmake,sha256=ApJCgqR0bZ2y92oYrWnCWIyTAHTyFBuOO202AZBIyEY,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-LLD-CXX.cmake,sha256=T7fyRI_d00cB_K8mce-ToFC3Y9LCc-ClRgr-jsRbUuQ,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/DragonFly-LLD-Fortran.cmake,sha256=auJ4-Kp7HazqpwDch3ZeQDcwu3zrr2PpVE8R-k2YXh4,188 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-ASM.cmake,sha256=byOyXFHtDyUdvvgyx2R9k4G62D-ctqDWHst-ljUSc1g,406 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-C.cmake,sha256=F3YClYqjjfLVwHLteTaemNf6sEbVR4JCHGGAT8d1ujQ,402 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-CXX.cmake,sha256=k54WAhBi2GuyJjoiJ3Y_vHUsLXqyr9ELrtB9RYXD6Es,406 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-Fortran.cmake,sha256=kdu1bkDRmnl-Y61P0g6oLuyZyV4UI4dpWrI6PcwKidw,414 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-GNU-ASM.cmake,sha256=pUWJIxQfko2L6SQX5s4Cz9ypCJEXhFIVZRbAvffiDL4,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-GNU-C.cmake,sha256=H7KloNkNzwhiOWww1AJzYVqIPdRipE0kiHXgL7FcoUY,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-GNU-CXX.cmake,sha256=jRLiHOT8RYUMMJRDR5aTqRhKsIPZ9rACwOgrau5pKC4,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-GNU-Fortran.cmake,sha256=u-MG7IViS2m6J6Y6vEgSjxG4oD3TCNcrkNAXIFFT0_U,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-GNU.cmake,sha256=1yC5kUx7KA-hhIBLgh5GD7F8pbWTj3g2A9RUZEuAlPY,477 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-LLD-ASM.cmake,sha256=ij_ra0VAPQ7ZG-QL3CD-P4w9gmQMUMeL18jwn3FoGAc,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-LLD-C.cmake,sha256=P-Fh28L342qcscV4AWPFi-gvkeHdZEfPVGKspRSwPZg,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-LLD-CXX.cmake,sha256=geuckYtly_X3N56ukPIfZFydnhn7rB3vG3VZveSxmec,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-LLD-Fortran.cmake,sha256=Xx2n7DSbrtwzCTd4ooAEeQjBVLaCuAH70WYpfctvrcY,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/FreeBSD-LLD.cmake,sha256=tPsyDNwsyYrKlGruFDd66gvS86R1FegDpTFNuTx4yTw,469 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-ASM.cmake,sha256=EoFdweQ7wl6TC9mfeTpgB3wBhlR0rRQ3EoP2jAjiPUE,208 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-C.cmake,sha256=LCDE3UhpiKGeeqCiAoIZ3LpH8-lQUNV5dvEZrYkg94Q,206 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-CXX.cmake,sha256=LeHUpOf8xAYUmbz_IdA5grW-md_j6txNkx9kweAJyMo,208 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-Fortran.cmake,sha256=sUioLcrUH_bwdY40U9wftEusiCMiksY6OjnVC-1P414,212 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-GNU-ASM.cmake,sha256=NRMEU9vJU9ZXZsrtGv091OyuiZy_dEBK_RqR3ftYRfQ,199 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-GNU-C.cmake,sha256=8vGaGAZMokeRNIJgNfjg70JUJd9oyYQo3d3IUN_ogmQ,197 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-GNU-CXX.cmake,sha256=krk2FNI3v4IRi1cqnrq6uWKbsPNX6DVe2rMwzKRXcy0,199 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-GNU-Fortran.cmake,sha256=zXs0fetXP5lOv4gTEXwBBtEjR4AWnztbBU9_cgF0hZ0,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU-GNU.cmake,sha256=DTLWT_4oq7S6myqkHBZtGxkSdzYJA-_FI3XDAkPjE7U,473 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/GNU.cmake,sha256=hk4RIrWm6Qdeiz6_g8wwcjQoBOR2vMMQcxNUjWQR4lI,2156 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-ASM.cmake,sha256=V4EdJXkmKo8s6gg9pWj8YIBbIO7lRykJr48sULYpLwI,210 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-C.cmake,sha256=XrQ-rFMbdy6tB3OUsfBdDeR2ObATvQ7_XJLPWGFNBlI,208 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-CUDA.cmake,sha256=cYSO4oA0APos_Lxl_aGClad5Jhx4J9TfKW0-NIJsPbU,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-CXX.cmake,sha256=fhSZjPcTa1NNc6Duu_FNKLOKFCHlm-Zd3FAK3-51prw,210 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-Fortran.cmake,sha256=-vR8LAraHg2qDATzVrxUTf1ya0FIlb3waRLnpTfCrlk,214 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-ASM.cmake,sha256=k6eMgkF6gOtvum8xnNRLaYn5X43Ol4H9M08hZxdU97Q,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-C.cmake,sha256=exvEI8_BojdHLw6syLIaP4qGo43EJEKvc4gZcU6_fPk,201 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-CUDA.cmake,sha256=BmQPzjJQR1kPIId61PfnsZD0A0j0PBIQUgwJnrrUlMM,204 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-CXX.cmake,sha256=q7AIe54MT27m4j5X0Z55RKZtZX0VZc-2__EcmguRFd0,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-Fortran.cmake,sha256=byKqCmP49Mq3-MTSCoeLzzZ_jvUgDb1Mq2fbGtlpc80,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-HIP.cmake,sha256=3R0v957NT31Q9-K8aTcm1X-RlMAup9MCWhAC1_Yj1nM,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU.cmake,sha256=8tqYh-NYcv-2j_lXbYQ3jYo9V3i6CJnmFRZqlIA5PFk,475 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNUgold-ASM.cmake,sha256=gCmnTK2N70SsKgyw6suWMnqAu3XEA0YF3SCzSRyCWfo,225 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNUgold-C.cmake,sha256=ePGgZzJV9K0bg4y6wEspSqlN1REKGmvj1AVY4pexCsw,221 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNUgold-CUDA.cmake,sha256=DlzFHpF2ACPI5ZQqfR7OX9y5TgluJglqwikVENZ9yBI,227 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNUgold-CXX.cmake,sha256=6VEOob7yptv99z7NRMWajYMn2DTrUXpma6XAtHGPDEE,225 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNUgold-Fortran.cmake,sha256=GKXAYp4yPtfgwn98B0cwwpDxfy41mOs2MvSILmx7Q9s,233 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-GNUgold-HIP.cmake,sha256=ENgRcIDe7clbFk9dsGmRFPsJCZ2De6BIDk7yv5tY7XI,225 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-HIP.cmake,sha256=ewxAn0UFsYy6n3EFTz-8fcj9rxxn0Mc55Vkv6c2yhhw,210 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-LLD-ASM.cmake,sha256=w3LEKN-gdBTG79XrycnKPdpBOGWCseLyx65sIrnjoG0,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-LLD-C.cmake,sha256=IoCKRsxSIFpNgM9E7vktb0MkBWBPoSJ6su4C5EJxdnA,201 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-LLD-CUDA.cmake,sha256=nwfDYad8ObOLE7d6YNvBIpNIS9L4PINhvZaCdymLzQ0,204 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-LLD-CXX.cmake,sha256=EkT76g5MYTZnI0GXzz_yWcL6_BDn0RKOzzOx1SL9gf0,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-LLD-Fortran.cmake,sha256=l-zp6trgj11kjb1qAGg0R19L5suX2pX8mUTj8tHWLZc,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-LLD-HIP.cmake,sha256=lCU6DswL4cQmny_H2oYY3MV-FOukfcLZcVeYRdbPpz0,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-LLD.cmake,sha256=agITK0lvxgnZ-z4IXF5RKzh7KSIj9lbZf9cqD2qw348,463 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-MOLD-ASM.cmake,sha256=PTL4qpqMjJX0mVY9PizAeuLdxOsPbBB_9LUxutHqqBw,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-MOLD-C.cmake,sha256=oU41L7-HP_zz7UbVV12IvuLnpfyv8dcUMuiA8qwDQaA,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-MOLD-CUDA.cmake,sha256=YanbwWLWpUes_1H9mMeFifViulVty3A52l-xrbpGs4w,206 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-MOLD-CXX.cmake,sha256=4eBAxl7DyVKG0z3Xj0HGKCPoZBVQ6LJBGVk2xKPoXlQ,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-MOLD-Fortran.cmake,sha256=26MdSm4OMUeOm5k1-GOfQrzckOi2oOy69wHRwA8OgOU,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-MOLD-HIP.cmake,sha256=NUDMZhvEjGpDl5wSgpOChjg5SLtyLKxgZ0EmMtj56Uo,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Linux-MOLD.cmake,sha256=NlkTHCBJvcbkcvze1sBvRyjen5f9rmfCbpRwIrQQxH0,460 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-ASM.cmake,sha256=TdOP40C_x1WBf9Bf09qKuA8VZuxfE9nWGUln4Q9ryVE,179 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-C.cmake,sha256=JYekOyL2Z8ovj6gAIaXy6-N42Mk24RqYmJAyjML3dlc,177 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-CXX.cmake,sha256=R28MrcTk1NRsbf1chVPdKEALqWF3SRKe22XHJpD3rME,179 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-Fortran.cmake,sha256=CSKlGPQEKjAGD_LRDx1hajEmlpr3qopkeqMaERspo10,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-GNU-ASM.cmake,sha256=urVvSzroBd75RKYCtv5TxAmC2TCQpTv4j8uCQ7Ho6oY,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-GNU-C.cmake,sha256=A_ytMjvlDTDcUogzihTVD357s9aQcKL4o40S79u_iNs,181 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-GNU-CXX.cmake,sha256=fPqNadap0QQX3JqBN8fMeM62KD2akVGzzrdP_74URa0,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-GNU-Fortran.cmake,sha256=aYWoHB3P9ry1WotAfJn5SgIesA0rH8QN5HidbXA9FO0,187 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-LLD-ASM.cmake,sha256=WiMcdhklxW-KJ8eUeyCC48bIf-ljO2RN7sJ3GLza2cw,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-LLD-C.cmake,sha256=l4BLg6dHKHAzrahHllgUQv6tltPc6Q_xQe0jXCm4TWo,181 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-LLD-CXX.cmake,sha256=UgyhNvWuwPN5_313HBOVr80ACo1mBcqZOywnxXdaqa0,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MSYS-LLD-Fortran.cmake,sha256=7Cnot7cVn6AH5ztrOdZKtXJj8mz19GWy3ST5_xarcy8,187 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-ASM.cmake,sha256=2jQMQiWTiHnPtZBNSOiSbaFuzHeNJY95EUTeHSZzLgI,180 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-C.cmake,sha256=VcSvpjaIq66xE9lLF2rnZluYMbIQBI0owYrA_pb52I4,178 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-CXX.cmake,sha256=d-nfgDQGhKU7Q4DH_6m6AW1f559wu47uQgxLkKK5sdk,180 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-Fortran.cmake,sha256=zo3C6RM2WOye3pmOOciiKkhCoEglHyGf-37RbsiwsXw,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-GNU-ASM.cmake,sha256=mJwEq7PNVm5II7t0ma3uqvCLj6D8pWtKHrZOof4MSA8,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-GNU-C.cmake,sha256=jjtRIc3NmVhwylKnyK8o2pIGgze2X5q_5TxHUmy6mPs,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-GNU-CXX.cmake,sha256=327MygzciP6bkL8R6l_1UbrONJLnbWJM9x4FB5hz_38,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/MirBSD-GNU-Fortran.cmake,sha256=F8CxaqPiUetdZVJjwGA_UQTKBzLpkeRHSFTkfgeE4oA,188 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-ASM.cmake,sha256=TmEhRKOT7mt9h_IL-ZqY_Gvu8CYmekVBAx_QEvsp5kk,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-C.cmake,sha256=pRbbojDnWx4vM4TEwD9LA_to68yTeM8YSN3J3wWOQgE,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-CXX.cmake,sha256=vj-gHRv8t3sLa8QA2J5jGHgmnK1R0D5_J877wmxc93M,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-Fortran.cmake,sha256=bquU5m526Nv_dSxNSGYZ17IY_8s0hDW1jbeoiVHV1LE,215 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-GNU-ASM.cmake,sha256=jKzuQfNxfsg6uwcVXB93EXAoTnqNLvcUv5OPKOks3s8,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-GNU-C.cmake,sha256=y3JpYVqNtAY-z4q4xPqaw_k1nB1Y-qovOkD7_BiJx-M,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-GNU-CXX.cmake,sha256=4-UfyRvF5eP0gDMwQufB10MwWaXt2mn8tSDnd07cjas,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-GNU-Fortran.cmake,sha256=TyJA0cfCUfnfGoNw3uHDLkfN8nHzSVnqPvSK34J7IJM,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/NetBSD-GNU.cmake,sha256=nE0E5tHvPTGsuteevAoFLVgFLUwMRIfcJhfjfy52mao,476 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-ASM.cmake,sha256=MvvhGAD1SNqAZUy_jQ4roIrNOkemvvO-6Or3rKn8udM,406 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-C.cmake,sha256=_yVZK5yzY3iijVSyidZyABTJbwkKSRyUcxvmvvRFtRk,402 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-CXX.cmake,sha256=zrmObXFedAstW_dRXVn5XLqExw0GLarzIv7br2E79WY,406 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-Fortran.cmake,sha256=4EDIxxdmOs6EcOq7s4l3rL-mBN7zviodsv3Z4AVgEGg,414 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-GNU-ASM.cmake,sha256=og7MUgfGwPiXXcpbVrXdZvG2B1WLrcWeTMto7S33G8E,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-GNU-C.cmake,sha256=g6gbeCe2_12BXUcUgGGy6yxwPUoaom-FbcxWUSYLp6Y,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-GNU-CXX.cmake,sha256=alhMmATIz9TBhYyL9UzcD7r-nbsUbUTNoy6m2GkD_2E,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-GNU-Fortran.cmake,sha256=a0sQFO32J8hl_JBGKmuF-TQ9F4QskVZM6_PNtublQYs,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-GNU.cmake,sha256=QVzO0sgZiMKSnojOZ_wPsOHFvEbkaXe5hUzQRXHNgYU,477 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-LLD-ASM.cmake,sha256=zSIG0mdSu65d1nzo0u6yx3kM4QVZh1U1GZynygGTD5c,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-LLD-C.cmake,sha256=Y69pxh0_SBmQNvnq09icT2hVJops6e0rNAH8JZsJoOA,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-LLD-CXX.cmake,sha256=ZsN1sboJzrY48jbWxx2eygltcQPnvsTj9ghsp-uDX60,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-LLD-Fortran.cmake,sha256=KW3ifL_F5hSwSxw9IxA3FpalMGEYpa-KqQndZVZRF6A,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/OpenBSD-LLD.cmake,sha256=ee5kHIzNcdLRimJuqiP5q8rYhXW4jm0-qLoOLBxzPpc,469 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-ASM.cmake,sha256=CMA7IlCJELueMTDAPcFKy4DXT4bZ59qY8G7qqeUt-I0,215 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-C.cmake,sha256=vAEj7ttIiTN0IdvdP4aX-A8DlrmnXXc6Vl-ApCV6ruk,213 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-CXX.cmake,sha256=VSDKbz9BusM9oNpJe4-KLpwbFCZskALw43RFKf6CFbs,215 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-GNU-ASM.cmake,sha256=_AIfOYr65HJoDeWXd5rQ-Gwt9ePL_DRgCIkpuT-slU0,213 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-GNU-C.cmake,sha256=sbfnfp_SUtgAqd24CjM0k8ugy3Zfu3BOcKg2oLAGwLM,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-GNU-CXX.cmake,sha256=ze_prg9qQCsO_4ie6aFC-7tm9f6ujhAh3S2xaH948g0,213 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-GNU.cmake,sha256=66U2ppiNBpeotnSs2JedrajSO85AYZcFYF_2fmSw2dw,480 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-LLD-ASM.cmake,sha256=HwDyINx5VQvHpnQC6occWxFG-lHlQGqvYEp4Y8VJjD8,213 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-LLD-C.cmake,sha256=d8QoVYu1o-UT9pKiUZXw6xkIiwqu9hPEQrYrZbY9fIY,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-LLD-CXX.cmake,sha256=N_IceM-TFireyDYQ27S6KHc7lZvOAi97ZmVso-GqIhY,213 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SerenityOS-LLD.cmake,sha256=_5HQVfqw9P6AixZz47PBKAhYKTIixapjnqLNd7ZTqSg,478 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-ASM.cmake,sha256=YwulWMZARawhroinSzyoIUurTjwXhOrw93d5c5QlbQo,218 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-C.cmake,sha256=t9x578_6_o7ML-MMQgJUbmwJKIb3Myk0EzQHOdRuQJQ,216 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-CXX.cmake,sha256=WJzQyZy2B5Rd0TQSsPPzWqH7SgQWZXL5f2D9AIPFhFs,218 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-Fortran.cmake,sha256=ZzkZ2BC4M5TzbiMBfH9npcgWe0hHEQ4ysuwAxlZy3QE,222 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-GNU-ASM.cmake,sha256=CTtSX7yiseATFklv3KHuo_H9kjl19GPqq63oHXX80H8,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-GNU-C.cmake,sha256=0_sMY61GB0J1W0JFME4bDM-fPqUFb4--XnqhkJEUKd4,201 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-GNU-CXX.cmake,sha256=QVvbtxEZusjUcVWAjWqcXejkUisJpozkWjf14AjBWeE,203 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-GNU-Fortran.cmake,sha256=Ss2N0UjQAhWr-3at_c_Gqgc_XaSXpoMms89c-EnWI8Q,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-GNU.cmake,sha256=85fiqn6ezMA2wkH1tjnPi8llzxIrC79Tk8uHlYo3g-0,475 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-Solaris-ASM.cmake,sha256=tVJy1bQZvTIDSDURh5uQ5HwVnZzqXwTTfc6O1sh4ehg,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-Solaris-C.cmake,sha256=RDJVgRe6gzgkYOJX3yq1Gk3y2q63ehbnmctSyTkJ4Rk,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-Solaris-CXX.cmake,sha256=a30d0mi8UpQf4UEwnCFVt4Lw-P10tzr1Sh6S2VTRaKY,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-Solaris-Fortran.cmake,sha256=1DbMAE2LIchJHfuqxtpgVnLtX7_vcINm0C2HpafmZkg,215 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/SunOS-Solaris.cmake,sha256=jtygMpYiPzWfqjKmqNV2xASebv41lwfeKzWB0FFdpWU,1219 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-ASM.cmake,sha256=HlWOeOtiWyR-mpQhyPjdwaI59BI6Lxfzp0XAm7T9pq4,419 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-C.cmake,sha256=AYbKyhFJyp-KFSyxptcTFBiHiCv-qqyqiLhhfmZrXtA,413 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-CUDA.cmake,sha256=I_TNBt0akq7e2snqFvvsBeoHLGCHkROQnAwNiplFtNA,215 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-CXX.cmake,sha256=0HagiIeK-baxMnczAAKELKS7vOKe8FeMQRNi2MfcsnU,419 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-Fortran.cmake,sha256=ZozFGj-CT6_B0PXUSV40lZShLcAFlzVKNHZJVV7PlAA,431 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-GNU-ASM.cmake,sha256=7b1bTyyhb1B8fgm11IE5he7wuIDApkvyzmbuBWoVZsY,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-GNU-C.cmake,sha256=g-19fZR9QOwdyjoIZHDY-aVd9fxX6VNhba4RdYde3EA,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-GNU-CXX.cmake,sha256=1tdvxJpAWdsaMnpKIhj9KE4Q-vTw1l0dg2SRvSDDiKU,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-GNU-Fortran.cmake,sha256=2nwfYEJbLuRLUm4S73zjvJy4qW8av5nMNUcZIRi5HIk,211 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-GNU-HIP.cmake,sha256=2tBOh0ZQXNyOwWZoKDpGeKqpf2fno10rJA-5qyI4XxA,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-GNU.cmake,sha256=LrLrEkV4A-2tFPjLFwJBl3N25iWqQ3MVPIykF8F32J8,477 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-HIP.cmake,sha256=FSjTy6_wnWM06ZTgJI2V-H_qupQm5ZSU-ZThes2uOdQ,419 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-LLD-ASM.cmake,sha256=_fh3cLNHwWto2MjMC12IbtVKCW3B_7TXrODBoeIg2iY,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-LLD-C.cmake,sha256=ylBH228bVw2LgfDCuf9RxMR7vvXJx-8Ck5_mGYa2HTw,205 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-LLD-CXX.cmake,sha256=l9sOmckUAe9hD2z85ZG-JifpyOgKEYWzKXDt8ZDauTA,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-LLD-HIP.cmake,sha256=reWeF6IeUgGUyN5AmtQ1r1frwi_PtfByJwpqi2nAf3w,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-LLD.cmake,sha256=FVAYEzGh7olffElWyZ82vwVwm6uObiU80Rf7afhnq78,758 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-MSVC-ASM.cmake,sha256=AlDBe3j9RKv0yXwKfTDAkSahRYVlwb-1O90liTgx0Ok,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-MSVC-C.cmake,sha256=dhwIl9rGrMKWubiXHn7J18Vbha1N-n8c7B-w9k-qEMU,207 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-MSVC-CUDA.cmake,sha256=0bqj3OfXNPdAH7JRaGbbaYTiNqgI22Hh1SBkFno0ck8,210 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-MSVC-CXX.cmake,sha256=GYBJ831GMVufhnl8yUYNVxcXFsV75dKVEUrTvrt8cNI,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-MSVC-Fortran.cmake,sha256=TOZV8Ezl2dN0ioByE0yJA4ZUy4zPP3uHAS9qY354W44,213 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-MSVC-HIP.cmake,sha256=WpUmKtKigMKTIYPj2qYnPgDWu8iGScwXk-K0Sj0fB8U,209 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/Windows-MSVC.cmake,sha256=d7VfqnB5ju_es0phhl1R0EpdQJi7udMca1QZo6QkicE,1489 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsCE-C.cmake,sha256=qIJGllRh3L0L1V1TvuI0-EMP2UwdvEPVk13yeDoQ4Fw,214 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsCE-CXX.cmake,sha256=Cof9TELvMWRDS13rXDGJiRULYygIgTIHMlNaurVAm9E,216 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsCE-MSVC-C.cmake,sha256=lJ7CAKs6yh4IxXBHkry6mRVjJfqGm7yawZrLzCN-0Ew,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsCE-MSVC-CXX.cmake,sha256=w70aEP_faEPVaYkARdw9SR7iJqqXwClwamZbQ3YfIHk,185 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsKernelModeDriver-C.cmake,sha256=7WZTqd0K9yyVZrrCcOGkMSMtp7Dmzrpyv7y_m5xagmY,228 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsKernelModeDriver-CXX.cmake,sha256=ibR-goFxMrp45VjwwAwxiPR8Lb85nPv6se3fzwEAlJM,230 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsKernelModeDriver-MSVC-C.cmake,sha256=lJ7CAKs6yh4IxXBHkry6mRVjJfqGm7yawZrLzCN-0Ew,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsKernelModeDriver-MSVC-CXX.cmake,sha256=w70aEP_faEPVaYkARdw9SR7iJqqXwClwamZbQ3YfIHk,185 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-ASM.cmake,sha256=hTktXgQ-VMQBMmQMJmpgmB-k3c9SqXhBOUeYD60PsWA,429 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-C.cmake,sha256=q0VY14wiUyTU8YsJ1nnsEsDLemcV-OQYFlH-Fa8Debw,423 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-CXX.cmake,sha256=UhSXLYQPqN7uC_dSfyg6HXzRgXBJ_xL0KcYFUjLK3yw,429 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-GNU-ASM.cmake,sha256=6zn-t_Tw_sZ1N9T1cOS-Ot-r53rlbV7o3hZUkv5ZH4E,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-GNU-C.cmake,sha256=fsLgWFvVnORMbAlR2XwPETVAUAOED9cViX_aWAJb0rs,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-GNU-CXX.cmake,sha256=PzTytA6eLiDrQl9gAUp8AeQz6H0gWyxnEUPwIoiwFBc,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-LLD-ASM.cmake,sha256=JhzuDJ1oKgAK90z3jpCp5yXlscZfIn2jKT3c7yKxn_Y,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-LLD-C.cmake,sha256=GzlzlEs-gdnwa15o2cJ6nK2hdI18QsFuTyHTf2q5IKI,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-LLD-CXX.cmake,sha256=y7QD8nN9_NmdyisMuLryvbVD6ioIsijgYE1xcKUuOAk,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-MSVC-ASM.cmake,sha256=M-vMdAr9Eaxn-Qw5yMqbm-gP0YYq1eyXGy-Hj7t5XJI,185 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-MSVC-C.cmake,sha256=lJ7CAKs6yh4IxXBHkry6mRVjJfqGm7yawZrLzCN-0Ew,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsPhone-MSVC-CXX.cmake,sha256=w70aEP_faEPVaYkARdw9SR7iJqqXwClwamZbQ3YfIHk,185 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-ASM.cmake,sha256=1CPdSg-OEjpqJNstXtFw61AP-LzL_lTE_6aRBb-eTvY,429 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-C.cmake,sha256=P5ujehV1E_5l6KfB_jXN8gy0msCu-1E048qBGHqQvfg,423 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-CXX.cmake,sha256=4zMunWIiX94lLN6F05c5ykpoOtrHLnQdBNYRVb2o-Zk,429 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-GNU-ASM.cmake,sha256=6zn-t_Tw_sZ1N9T1cOS-Ot-r53rlbV7o3hZUkv5ZH4E,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-GNU-C.cmake,sha256=fsLgWFvVnORMbAlR2XwPETVAUAOED9cViX_aWAJb0rs,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-GNU-CXX.cmake,sha256=PzTytA6eLiDrQl9gAUp8AeQz6H0gWyxnEUPwIoiwFBc,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-LLD-ASM.cmake,sha256=JhzuDJ1oKgAK90z3jpCp5yXlscZfIn2jKT3c7yKxn_Y,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-LLD-C.cmake,sha256=GzlzlEs-gdnwa15o2cJ6nK2hdI18QsFuTyHTf2q5IKI,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-LLD-CXX.cmake,sha256=y7QD8nN9_NmdyisMuLryvbVD6ioIsijgYE1xcKUuOAk,184 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-MSVC-ASM.cmake,sha256=M-vMdAr9Eaxn-Qw5yMqbm-gP0YYq1eyXGy-Hj7t5XJI,185 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-MSVC-C.cmake,sha256=lJ7CAKs6yh4IxXBHkry6mRVjJfqGm7yawZrLzCN-0Ew,183 +cmake/data/share/cmake-3.31/Modules/Platform/Linker/WindowsStore-MSVC-CXX.cmake,sha256=w70aEP_faEPVaYkARdw9SR7iJqqXwClwamZbQ3YfIHk,185 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Absoft-Fortran.cmake,sha256=KDKSxKVmhGd8eapHKGN03FJuwBtj57qHuQpXUdT25_w,67 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Apple-Swift.cmake,sha256=TkPwkxufbLNj9tX91TGIygH2PdmJBzlQUkQxeqAJeFA,301 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-CCur-Fortran.cmake,sha256=vKxXtO5eAv9F6thecDSTM23JCAPzbC8g7aGuUniBzBA,36 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Clang-C.cmake,sha256=YfydiWPV7NzAHpE_czdcGsAG8qB8of5UBOVwX-x1Xzc,30 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Clang-CUDA.cmake,sha256=A74_JzdBE9GiREZYKINf_LyEJBPOhnQLOWS4BDMWKUQ,55 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Clang-CXX.cmake,sha256=9Q6bcEqEnDBQoydIuj_HPRpHE_WfTXV-twS1Mab-EO4,32 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Determine-CXX.cmake,sha256=tuXByCYWDBHE81um8O6xxiZlpR2JTCNT2AifieBgnwU,77 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Fujitsu-C.cmake,sha256=5cAuT7N6kWp2XE5oeptxk8CDniEKnBzC226TIFewJqw,32 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Fujitsu-CXX.cmake,sha256=twZbo_AIRLmFLCLtLOoUzxvO4nOvUFAL8Ef3RIKFVVw,34 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Fujitsu.cmake,sha256=wmZOPjxvFryYYBndixEsA-1e9an8vst_Z1lKZrmo6Xs,612 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-GNU-C.cmake,sha256=mEVFa7UFncKv9r-zPh1R1jYfrevmLXzs49d9a7Oyfl8,52 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-GNU-CXX.cmake,sha256=a_ZyfJowzIT9Jqm18jaLHTdPU3CLFlNc6ryBiVPCv9g,54 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-GNU-Fortran.cmake,sha256=tQYWf3byAfsG2v9fX6sNVxXp2fJMEGDTH5ZsvhRT9UM,106 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-GNU.cmake,sha256=nF2XqvfLq4JV-T2jQgWiUEARtiK0EDs0kkF1B3tS5rI,974 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Initialize.cmake,sha256=uJ4aMj13ygqfDFQJ8UysWTr0suvt6AoxRhEJXvUUD9E,151 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Intel-C.cmake,sha256=eHlCRmL8gGmb8B6iIeK3Ny7DrgPEojN50wTOyWLdslc,101 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Intel-CXX.cmake,sha256=WiQ1SrysLgLPwoLRyw5CKobWTt_-Skc-M5BeRWxApGw,105 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Intel-Fortran.cmake,sha256=1MRvccY3Epr873cukzuW6xddVK6LEhac5RJMPyucn2o,182 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-Intel.cmake,sha256=7Wxr3zrXqyuRzuDXQZbrYwAG0AYyp8xhFbJWPjALv90,2444 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-IntelLLVM-C.cmake,sha256=9xL9Dv89SYcMuRmWbhb_v7tpJCXmUmKZmL-WVA8pnj0,110 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-IntelLLVM-CXX.cmake,sha256=uFiaj6um9B_oaLmEUxBYhhyz5Un6__1YvJOd8OX8Hms,114 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-IntelLLVM-Fortran.cmake,sha256=pq1_Z2-DxYHyGcSlB8CPhP3qeY2P1bPY71GlHTRhpSk,191 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-IntelLLVM.cmake,sha256=Twk3FIAhrgHNteB8Ys1vf1z54FIGEjlCkU1Dp_OFhOk,1149 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-LCC-C.cmake,sha256=BeB5dbEIalxPulqu073cuXRFjQ1L8472dw5aKeGlIts,52 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-LCC-CXX.cmake,sha256=iXtXzRswG1iUpA-PmUEi3e2WlyhK93jRauytlW8mIJQ,54 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-LCC-Fortran.cmake,sha256=FcgiWf9dGiNeM39MioY0IouKeoipDxpoa61zlRpv4a8,383 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-LCC.cmake,sha256=mGaNsPu-83Bwqf1ENYDTbI0qXR8xR8O-zGx7BQcyJBk,511 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-LLVMFlang-Fortran.cmake,sha256=vKxXtO5eAv9F6thecDSTM23JCAPzbC8g7aGuUniBzBA,36 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-NAG-Fortran.cmake,sha256=wsyKEHvG2RuOR_uDJjaiz527l6pD-QtLszraRSjToHA,596 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-NVHPC-C.cmake,sha256=uJiy52FPbAV_KEng8TwKMeGv3yfSOWW7YQE7VKm12Dc,56 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-NVHPC-CXX.cmake,sha256=LYklGwnoKr6_G4qwCr_wYq1zJKuC1h0JZuvaNqyoRpk,58 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-NVHPC-Fortran.cmake,sha256=U4hLyqSFcFDkftRo2i5-vjSq5BMpNCIdlEjwnDAYYqo,62 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-NVHPC.cmake,sha256=y5qxzpGcChjlXunEVXOV8UpG16vlA8SQivCXOrQZwRg,679 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-NVIDIA-CUDA.cmake,sha256=5xH-go1LKfBOLqlI8uHbOW7AzqB9qj7d-kI3ru7yaFs,299 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-OpenWatcom-C.cmake,sha256=tX43pzppNWoRdHnRHJHRPmhqdowEkiRcopYPURcT1T4,58 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-OpenWatcom-CXX.cmake,sha256=hLe3JqGDeuO8HegHNPAQ_53LaLVUPPg4ZFGZHtSNsOM,60 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-OpenWatcom.cmake,sha256=FIAwSIbwd7MBcySJOVACB8gNBmaGQ5NzUcspT2NXHoI,1292 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PGI-C.cmake,sha256=H8bt8um-t5im8XQDSVWhaLDH_7k2Fd7oInoJTetXeJk,52 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PGI-CXX.cmake,sha256=84Zd-SpSdH3RBv_TOZtFDfMwhR-6XQZfDLNM185eiaA,54 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PGI-Fortran.cmake,sha256=q-yLlGTsChLWQiuM-HsOl2UxsxoUZj19ynGKm1SC-sQ,58 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PGI.cmake,sha256=0YOlf_vr7TdwztDLp79zvhf4leeiZXvEripy3I7oGDI,766 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PathScale-C.cmake,sha256=2Jv-p5JPFJ7u-AiDhurb5pdWkP6xvBASDF6yEZvYuOo,64 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PathScale-CXX.cmake,sha256=taK6m0NlP5bnPWSkUc2a6inqobJRPFiLmT1KkPq81Jk,66 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PathScale-Fortran.cmake,sha256=m48lAdz-Hpf84ZgM_x3MgQuEouzXMi0UCGfD7kwplzk,70 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-PathScale.cmake,sha256=eqqZ_BgW8n4dy7IvmxWBb1TUf8ktWHwEn60ji3pk3As,597 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-SunPro-CXX.cmake,sha256=Nn-D9q8-FhFGcFH_bkTn4npxpxAZZjCPHQwDolp30Jc,489 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-TinyCC-C.cmake,sha256=EVC8aQtUwRRAvYZlh70_gFc68aJkHqn61p7N4SN9ouc,233 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-VisualAge-C.cmake,sha256=ZppmNGpnGbemLmiUEPTFvvvCvRz_cYU9LYvWQ3P1Qkc,29 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-VisualAge-CXX.cmake,sha256=lDn3yPt07EHGql46LbZUQl3QI37F51QwU2K2voaw2Ww,31 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-VisualAge-Fortran.cmake,sha256=lwK-aIRmVHZ8CYLQDT0ISjXNsJz-Z3gox1i-sdNCw9c,35 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-XL-C.cmake,sha256=LEkaUe_YcQgCm-33JsmSgdhp3Q6iaAC8h0OaFEEqdhc,61 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-XL-CXX.cmake,sha256=9_mcyYbuXrk46T1vcYC7pbyIWA168_tpZXTcq6upltw,63 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-XL-Fortran.cmake,sha256=ngdV-FVYFSVIRn2qhd4EbcprqkF4ibZjm1Ce6BYkWF4,67 +cmake/data/share/cmake-3.31/Modules/Platform/Linux-como.cmake,sha256=yHQHoQqUDwQ0xFV-LC7UB7aOrflQYb7Ertd_Ux6C_nY,727 +cmake/data/share/cmake-3.31/Modules/Platform/Linux.cmake,sha256=pWM53R0VIwXogAikgiMgvn5L7FPHPfXJorNk4hUbEhU,3047 +cmake/data/share/cmake-3.31/Modules/Platform/MP-RAS-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/MP-RAS.cmake,sha256=Z10CL7lLzCv5F5dYiOi9oHueRepe70zCFlTdtCyQucI,399 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-Clang-C.cmake,sha256=wOMnEtAAO196feoyIMRjcGr2bKJ0rt4nJ7PaV6puK3M,33 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-Clang-CXX.cmake,sha256=vDZYMvFIH-KsRp6eXSmVGxy4dX8aKWDC5mGQT73ECTs,35 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-Determine-CXX.cmake,sha256=Z5KwpYWDDVuvRC5jrK9lKqlrLpsgfm9baSTm2tJUHdM,39 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-GNU-C.cmake,sha256=bSD8n30Yyhdp0BpuYDfXzq95onSs7FS0FBFOWw-2x8o,31 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-GNU-CXX.cmake,sha256=fdgbDMiMZxA0bCv5IpIm9J0TAYRFbuaw2Td3xmpgDsg,33 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-GNU-Fortran.cmake,sha256=mnk0lWu0mK21bFAEUms4Wf33EzsER6fTPms7NqQLtbI,37 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-GNU.cmake,sha256=Iz9miEmg0zHCV-Npx_cdqKJz1spP8_rqjJ8dzYzMR_s,29 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-Initialize.cmake,sha256=blmIH2FovW4fo-NXTIOLi8zYW4vMvZ8liYf9AElwZx0,48 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS-windres.cmake,sha256=NcIpNJvNGlRQvAxKPW1X7-Cz9Qpn8fHw4pN4hQsVm-w,33 +cmake/data/share/cmake-3.31/Modules/Platform/MSYS.cmake,sha256=4TS6XhGBFo_Qaf1kKhmMee59tojsQlg7nGk5F7jCcuk,106 +cmake/data/share/cmake-3.31/Modules/Platform/Midipix-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/Midipix.cmake,sha256=MEckE1FoIfysPQlCXiAHZUlMQAqwUsDjHkVGyC7vsyE,28 +cmake/data/share/cmake-3.31/Modules/Platform/MirBSD.cmake,sha256=-_LGY5LBgbjtFxDX_hq1tqd6JXJQbUPFUiuVscarkm4,26 +cmake/data/share/cmake-3.31/Modules/Platform/NetBSD-Initialize.cmake,sha256=Aa3ElJ9lprw82CNZxWaN3LqBEeoil-YLSCMAEwCpwiY,30 +cmake/data/share/cmake-3.31/Modules/Platform/NetBSD.cmake,sha256=sAi91RYYenkBH3nOSBH11vKpIri92WA3OzP9DOpeH_o,1061 +cmake/data/share/cmake-3.31/Modules/Platform/OHOS.cmake,sha256=tisBqYFfwQLnZdD25V2gXAzKIfdr5dwHUviKRx3YRs8,69 +cmake/data/share/cmake-3.31/Modules/Platform/OS2-OpenWatcom-C.cmake,sha256=-CkMu5Xm6D9j-gO1ZaJo_4RKGBlR9A2_gUYs0TMD2hQ,54 +cmake/data/share/cmake-3.31/Modules/Platform/OS2-OpenWatcom-CXX.cmake,sha256=r0u9a3RaicvktUdacyZgA63l3W77blnnx8kje_ZdnE4,56 +cmake/data/share/cmake-3.31/Modules/Platform/OS2-OpenWatcom.cmake,sha256=jgySsZL2VV3_4ROoalcPvuOPtrrEUsdy5DyJya6quPQ,1845 +cmake/data/share/cmake-3.31/Modules/Platform/OS2.cmake,sha256=o7q1dLCU0i2sDN_cNveGy2G-wL7APnZ8P8sCEPuwbFM,413 +cmake/data/share/cmake-3.31/Modules/Platform/OSF1-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/OSF1.cmake,sha256=PE1DkkvU_NJlXgUvfdn6Zpl1e6zIm2EAnw-5DYVRBo4,1551 +cmake/data/share/cmake-3.31/Modules/Platform/OpenBSD-Initialize.cmake,sha256=SSTjd_FbTNazj_GIkW1ak9GzC0ZOF6QdHo-HgAK2LUc,55 +cmake/data/share/cmake-3.31/Modules/Platform/OpenBSD.cmake,sha256=R6lVFi4wx76Ic3IVnlArn-IGyA8l92swNr-6PSClebo,1442 +cmake/data/share/cmake-3.31/Modules/Platform/OpenVMS-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/OpenVMS.cmake,sha256=u0B5qCCpeklUuRA6AbQEOZoGdCeVLlCBeooLbSFtZGI,267 +cmake/data/share/cmake-3.31/Modules/Platform/QNX-Initialize.cmake,sha256=T46QDH6nl0kIn1LCEnLwDl3Rl89ymtF-Sn5CpfOSFPU,87 +cmake/data/share/cmake-3.31/Modules/Platform/QNX.cmake,sha256=AILowpgx0_ITPPk_EtiU38pQmYfD72SrNVsH2ISZxXw,600 +cmake/data/share/cmake-3.31/Modules/Platform/RISCos-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/RISCos.cmake,sha256=_AzGZOWIjb7TtHtsqZFEngH-lcTxyVFdSAvEct1ajQY,188 +cmake/data/share/cmake-3.31/Modules/Platform/SCO_SV-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/SCO_SV.cmake,sha256=fpxf6aq8wbAzZ6NAkgVzdaLnuSUZSjKTnw3osTanpEE,96 +cmake/data/share/cmake-3.31/Modules/Platform/SINIX-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/SINIX.cmake,sha256=j06FeU-Zy9VXIRUVzwkIsocitShtUnQ2cFOQ2XhEgag,264 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-Clang-ASM.cmake,sha256=BNbiC_mlsPvbWX4hPZSsZtotjgQGpGjZe-t9HifcObU,62 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-Clang-C.cmake,sha256=6W8X1NwUSRbkMCqHUcuDzxWbqA0dYmHHNhG751EG0jw,60 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-Clang-CXX.cmake,sha256=0NaKuPeoONLcbwGFXflxu4lvzJq0d9vwERDc5JnBzOU,62 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-GNU-ASM.cmake,sha256=BNbiC_mlsPvbWX4hPZSsZtotjgQGpGjZe-t9HifcObU,62 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-GNU-C.cmake,sha256=6W8X1NwUSRbkMCqHUcuDzxWbqA0dYmHHNhG751EG0jw,60 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-GNU-CXX.cmake,sha256=0NaKuPeoONLcbwGFXflxu4lvzJq0d9vwERDc5JnBzOU,62 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-GNU.cmake,sha256=zsEo2qoorS05snstsha1nGMr329UMK6jtpR9wquWrt4,1141 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS-Initialize.cmake,sha256=4T9EuLOSJFgpvXkI6Sglh6WDDW3uw7HLmf3Z-kqe2d0,30 +cmake/data/share/cmake-3.31/Modules/Platform/SerenityOS.cmake,sha256=aUg0XPkiMnE3pNHbxLe0vDzxpv8SanYLy8qmz39RM4Q,292 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-Clang-C.cmake,sha256=kszH70LbpPyckAxVI30Z-oZC89yZHUxNU2QNl_HWBsk,30 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-Clang-CXX.cmake,sha256=ZTg9DhsmyGUiJNedRudXLV7q8oN-Oz9z7krJ33weKtE,32 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-GNU-C.cmake,sha256=tIAR7p6lIoFfCfm9XZyv9oFrqcDoJvEe2cSbX_miUTw,52 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-GNU-CXX.cmake,sha256=fRTsd_6Ep2icV_PW4LYtVuU_GzPt8Skb6N-QCQKglvQ,54 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-GNU-Fortran.cmake,sha256=1acE84bN0_Ot9Pw52YB0uI73r4xdxRg5vO4VH9SpzkA,58 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-GNU.cmake,sha256=mmXWMcw8hXCCDZQT5uYKK1fHlV3ZsZXUgJvjghNw9R8,996 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-PathScale-C.cmake,sha256=K3-WguOaTCfc3jWIn5s7aPg5yiYT9aLESE-Vx-nntxk,64 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-PathScale-CXX.cmake,sha256=OjZ1a9Q7IhnTd5F7Jgwd6ZSkhFrN2sFPUDasj_33Ndc,66 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-PathScale-Fortran.cmake,sha256=pZOsT3IAGsYw5au6b0iE_45oBjfHuKNTquzZck6zUnQ,70 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS-PathScale.cmake,sha256=HP4fThr-HzoJYneYK3BlItxyMXQCYnpCkov_F9-f-8g,770 +cmake/data/share/cmake-3.31/Modules/Platform/SunOS.cmake,sha256=mHOZY-jOjmoEycxlHq7Os0KlueeHTV5QNv527SLLb2E,1057 +cmake/data/share/cmake-3.31/Modules/Platform/Tru64-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/Tru64.cmake,sha256=aafSZ2MKL1ZlPe28Kr7ozZ2Zzy2X01VSVNuqW2M7ID8,29 +cmake/data/share/cmake-3.31/Modules/Platform/ULTRIX-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/ULTRIX.cmake,sha256=8MsrmPsyVfj3dGupIuHjWkmWXWnIkN2XjpfIDyS94aY,187 +cmake/data/share/cmake-3.31/Modules/Platform/UNIX_SV-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/UNIX_SV.cmake,sha256=2jWikuxKXJKGEoDoJcLYypDTTkqWSM0sD2T8nBfb5Q0,318 +cmake/data/share/cmake-3.31/Modules/Platform/UnixPaths.cmake,sha256=npkagrKASUi0LjNc6kvRm7EhLm7qxaLhKshaDu0Cjjw,3599 +cmake/data/share/cmake-3.31/Modules/Platform/UnixWare-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/UnixWare.cmake,sha256=YhyChYdn0rTiWsKaqE92Q7vhSiUgG6rGO-iSSDqCclY,320 +cmake/data/share/cmake-3.31/Modules/Platform/WASI-Initialize.cmake,sha256=6eh9R4HWqZnuc6HiwZdU3gFBUSTQzZdGiY9e53JtweE,12 +cmake/data/share/cmake-3.31/Modules/Platform/WASI.cmake,sha256=Qof_E65zWBwD9tXpzt9-P6tj6lLNMlC39dihJskFm0g,16 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Apple-Swift.cmake,sha256=rE0ftfSqueaq0Q617mEINWAHa1e9RJgzaTa8AfgIEQw,371 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Borland-C.cmake,sha256=2mw80LPVXg8UVF3kVWqSBzk0Qtp_pdaSFNh6LB0Y_2E,40 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Borland-CXX.cmake,sha256=QzsulNvaOZf0z7bvAnXKCP5r-Izr4AhzTP5E4GEShXs,42 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang-ASM.cmake,sha256=Gu-jU5-iGuCJePMS36V7OIB4OQxg4A3WZqYezXR4pp8,371 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang-C.cmake,sha256=cRn7s5nqk0-oX03gaW8sEPdKvCGcxTd95sgALPWtgwA,713 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang-CUDA.cmake,sha256=LUwtG61UlkEjofV0PFoqK1IAvDAUmrBXuOggKQhJo8k,708 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang-CXX.cmake,sha256=ird9_hcbuQVqhCHqyCY0fg0_5DTH6ELYpt4rY30y-7U,759 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang-HIP.cmake,sha256=fDWYccPrSd54Nj3NPbH4rj2owC8nGcPoO4l2DdXtwDg,759 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang-OBJC.cmake,sha256=jcyT5Oqb09krmIH-7_GeAsXTlL4GkUDEsqqwrxxeFBE,737 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang-OBJCXX.cmake,sha256=eyrfu89veO2MLKiJCrI6wpsco2soE095w4kgkWr2BXw,753 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Clang.cmake,sha256=IZ1PzJBDBPuGeU39ZOEhFLPluamxpEIX-tL1gC6OaYw,12108 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Determine-CXX.cmake,sha256=afN4_sHtwiwc2Fa7kjcOtAtTtFMn1i-qhwa4d2vF0ns,248 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Embarcadero-C.cmake,sha256=CqueQuPl_S8G_fmcNsZ2uWF4E-Z--dAsOdk65f23e0g,77 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Embarcadero-CXX.cmake,sha256=BCkGD_lsY32WWzPFXg-_b8Tri8e5wAYCFfnxrC4UwU8,81 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Embarcadero.cmake,sha256=KzpNLxUEXMjOvEvE7lEP_EbS4jMUvjMv1abhv0-auLk,5520 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Flang-Fortran.cmake,sha256=h6MTqJPvUTche8UxSjuBdkSlwUz9G53KBZQxRT0QKeA,637 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-G95-Fortran.cmake,sha256=FkymAi8UUwvB-0EE2W7avTVv2n2ROTcV06Dp93Q9SNo,38 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-ASM.cmake,sha256=tx5IPkssvp0u0kcFN98wfOeJojg5HAvQdGLF0zwmsyY,58 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-C-ABI.cmake,sha256=rmHaLrctn868zpyd5DrOa9c_T4lT4py4Yg56m2pohuA,30 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-C.cmake,sha256=LdwewrNN0Avbm93H9KxM4tphoOfbFX67Ck6F4dwwuo4,56 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-CXX-ABI.cmake,sha256=aDE3NqB8VTQTB26Jkfe3U_RP47P8oYCMVMLfWzC85ak,32 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-CXX.cmake,sha256=bEKqFQmmgElcHTGdBNAZjVX032QYWkSGojyczAh9tYI,58 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-Fortran-ABI.cmake,sha256=WMfFGSQqVyCknAJCKrifht8cO2EDceMO3RRsJ_otp8s,36 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-Fortran.cmake,sha256=UJoB9YmBunLho2gOGEvPNcHoIN6qPke8HRJLOy0SYGo,162 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-OBJC-ABI.cmake,sha256=TWbbPmFeB-C3Ibt1gBYkXJu3qSX-MUiIcmcUVQHOWiU,33 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-OBJC.cmake,sha256=FLC0kpGDf8UyCtOiFEIbb5pJiR7Qf_MjJCLNFpIvT0k,59 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-OBJCXX-ABI.cmake,sha256=enHzrUXycTH0lmvsKswEp56UlOlXN6YbR08VSNyfCS0,35 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU-OBJCXX.cmake,sha256=3dCw-mzTzoVOFkjruOsulCPNysQNvSyi1tUfXro-qzc,61 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-GNU.cmake,sha256=obmaoR54aFPhd-n_UJs360_XF5LK51as_Uyf54h3-Xc,10981 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Initialize.cmake,sha256=-Fy6KopKN1yEyLIqT4VskWzrmeZ_vG3lwxOFfE9cjj0,13 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Intel-ASM.cmake,sha256=Ikzu5j55-7FVo7t1Hk2Pde4GPdpxRcChdSztaGo0HyE,62 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Intel-C.cmake,sha256=RiopwODZ0nVJMYXh2gFQUpzLDg9fVaF46oZU3FvLMEs,995 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Intel-CXX.cmake,sha256=Ezk5qCTRwWZM_UKBb8wfNrMgAXzPar2fIUPYxgH15uA,1035 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Intel-Fortran.cmake,sha256=3jhzYHZPYDMwHeK78A7W2rf7ZCfM9c7ITO-Phu208Cw,2166 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Intel-ISPC.cmake,sha256=S_vMUq2FaKNuT6XKAPmS_37n9NIujJmbPBljSOESCXw,209 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Intel.cmake,sha256=VWBmHlb4bVfti_xx_URJZ431bvPMvJ95mHdJyS1-Brg,888 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-IntelLLVM-ASM.cmake,sha256=7rYXuc7wbkRAyax3hi8WmAfvJsmTdlRBzOXMI-0VgwA,66 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-IntelLLVM-C.cmake,sha256=AtIKQ0QO4NDPkjtszRWSFyjkj7JAonTaNHrT91NcUiE,64 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-IntelLLVM-CXX.cmake,sha256=SU_e_5q7Xcewwas01gYm6K2AFAZBv6-e-ggNIEzb7iI,91 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-IntelLLVM-Fortran.cmake,sha256=-JwbeZ9fnG0tuRhFRBnaC_wP2pKYjL4M-O8d6kNojk4,2170 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-IntelLLVM.cmake,sha256=8xBWiGA5hQjfU0HlPKajRuhUPjJ3C4eS3z0dh1lRQz4,2742 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-LLVMFlang-Fortran.cmake,sha256=2WSnsSnvjR8zLbHk1g8uqAPhpRBBSUOjnIctU-kBGgU,3427 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-MSVC-C.cmake,sha256=sK_yoT8owmlhBjrqyXYl5hqTlTseVg5Ee_pjxMj4vHw,395 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-MSVC-CXX.cmake,sha256=5jEvggnsrVerAZvfGL1uLrZdnnBs22Fk7vsvJaP7_7k,430 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-MSVC.cmake,sha256=LAqnMdKCK_RJxgXWSP-HC7z4iSUHuVRkUZv-oeJX6qo,22247 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-NVIDIA-CUDA.cmake,sha256=2VZ-XK4VVAR-LKLGLw1sRLgoavlsdo9aUOdgGlx2e8Q,5114 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-OpenWatcom-C.cmake,sha256=ZXSdkFQV1VNZpObj8YrM5TskXSFFEEPgH7f0f03F0RU,62 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-OpenWatcom-CXX.cmake,sha256=yhlTOQcJJRHdrZEMvcA2Rd_O4KK-IzFQ5uR_1-cWTw4,64 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-OpenWatcom.cmake,sha256=m6RN_b1mGrlAtyUcCifc5mp43hR2Npv8KiODsnWgUJ0,1725 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-OrangeC-C.cmake,sha256=PRfrCHd8ozhJs34KK5uLf8WNVde3amwuiNhknLFTARs,64 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-OrangeC-CXX.cmake,sha256=3lVkdefBBQoBpxvsJklUR0SEuemX-AtZa0cPdUM2GM4,66 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-OrangeC.cmake,sha256=fiswdnYco15tcuEaAMCDyjtlUuj6ZSDqlJbKxuIl7GY,325 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-PGI-C.cmake,sha256=jCzvyML9EdspxmCh35KNsQIShLKk_eh_aqIFSYokg5w,56 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-PGI-Fortran.cmake,sha256=gARlX2xw9BilCfs5KPpiDlW15qLCi8P2hecUpuuLMT0,62 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-PGI.cmake,sha256=7Yb6MRBIDpIjo9qaEc9d0Qc3eriEP_X7U7jslYWmKVM,2360 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Watcom-C.cmake,sha256=hpjcWpBAlAuOqe0hqMcYCNPJ4hMHZw0F0CIgXclLqT0,39 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-Watcom-CXX.cmake,sha256=zwnogzPxpIIQGm-dcIbR2WuL_HwaILrqVQncCwerXWU,41 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-df.cmake,sha256=F1KEL7xej9D9l6KSy1ZljdLt-pv-NCiQHPG5yC7YI_s,2633 +cmake/data/share/cmake-3.31/Modules/Platform/Windows-windres.cmake,sha256=xz5zGDl64vcNNnyljTSwL0f3zymVr7lu8NNEVGj7V60,106 +cmake/data/share/cmake-3.31/Modules/Platform/Windows.cmake,sha256=qCFFo1V4zCEzyp2mM4G2KgWT2N0QCnHPsfNpyKDHT6Y,1556 +cmake/data/share/cmake-3.31/Modules/Platform/Windows3x-OpenWatcom-C.cmake,sha256=BlVXQM6YaB15T1bNFG9P5cVh4qq49-Y10HQWG0xew-0,66 +cmake/data/share/cmake-3.31/Modules/Platform/Windows3x-OpenWatcom-CXX.cmake,sha256=teJy-MXIFHITEUMuRDqwIxtnOAjg-aUB41TcFfemPfk,68 +cmake/data/share/cmake-3.31/Modules/Platform/Windows3x-OpenWatcom.cmake,sha256=39n1UxgDwZTMFs4aZokZIjuFSy7k3GLgqrAguQIgDic,1298 +cmake/data/share/cmake-3.31/Modules/Platform/Windows3x.cmake,sha256=nt5Ag6UZ88cuy0iaWIGsGWy7KygDtMNV6CPs_1NM-5I,401 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsCE-Initialize.cmake,sha256=DSd2LwyPZ40x0NmPL4vSAXL3bWVa9-L8WHpSxjKgu9A,50 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsCE-MSVC-C.cmake,sha256=gSL8tB4WfTVlwrJHtUTONU7_P7TrA4xNzZUjqrWcFUc,33 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsCE-MSVC-CXX.cmake,sha256=7EexEjHEriqGZF-2nMlK2bQuBkrkTRaDxioaeSpvq3U,35 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsCE.cmake,sha256=D5lW4yol1-IMxkllOzI2em8zAKIo5ombi5x_m456KDs,26 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsKernelModeDriver-Initialize.cmake,sha256=EfuW6UMe57v2y2IRI9D_ziB6jwY549KaGAqz29k4aus,531 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsKernelModeDriver-MSVC-C.cmake,sha256=PV0OLJTsLhL590MNwgRab_n0HQJDuWhflG3CaxD1b-o,58 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsKernelModeDriver-MSVC-CXX.cmake,sha256=4Wi4BrEdzzUQh6A2gAkxGvVN8res4kt03uMGIh2Qqxs,62 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsKernelModeDriver.cmake,sha256=yWlPdimwnhpjXzc9N4R6k0LrdWT8_AKj4Nvbn_2mSCQ,2306 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPaths.cmake,sha256=J4VBTpm26AFUN2zaSQ66g4sM1Ms7W4VqoX_ZmeiMxfo,3090 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-Clang-ASM.cmake,sha256=j505aT3gp65KRa9Up6dL-U6-tWuYXk6qy2LK223BhY0,36 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-Clang-C.cmake,sha256=Xwot_JbMk_CvQvSGB7TPLliVUo8WZe-jYXaAGDw3Qns,34 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-Clang-CXX.cmake,sha256=ULeaS-OI7BvUh_E4kaxwBT2dPBAn81qjh92om8PiBtA,36 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-GNU-ASM.cmake,sha256=pJGqU50vsux84Djvf2dEyyhOlPzjHcHWVDv68rWOqiM,34 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-GNU-C.cmake,sha256=gVYRfL8wunxumLwPREnEWLIVsbQ6ojbvSuBBj13aNnc,32 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-GNU-CXX.cmake,sha256=TbljueaPCWblbtdgy_hoYu8kchGHSnKBKUG6M8ixwBk,34 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-Initialize.cmake,sha256=o795HaRsQRwKzF_RsKrOmq24C-09_WPHWN3j3a8nMqk,58 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-MSVC-C.cmake,sha256=gSL8tB4WfTVlwrJHtUTONU7_P7TrA4xNzZUjqrWcFUc,33 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone-MSVC-CXX.cmake,sha256=7EexEjHEriqGZF-2nMlK2bQuBkrkTRaDxioaeSpvq3U,35 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsPhone.cmake,sha256=D5lW4yol1-IMxkllOzI2em8zAKIo5ombi5x_m456KDs,26 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-Clang-ASM.cmake,sha256=j505aT3gp65KRa9Up6dL-U6-tWuYXk6qy2LK223BhY0,36 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-Clang-C.cmake,sha256=Xwot_JbMk_CvQvSGB7TPLliVUo8WZe-jYXaAGDw3Qns,34 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-Clang-CXX.cmake,sha256=ULeaS-OI7BvUh_E4kaxwBT2dPBAn81qjh92om8PiBtA,36 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-GNU-ASM.cmake,sha256=pJGqU50vsux84Djvf2dEyyhOlPzjHcHWVDv68rWOqiM,34 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-GNU-C.cmake,sha256=gVYRfL8wunxumLwPREnEWLIVsbQ6ojbvSuBBj13aNnc,32 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-GNU-CXX.cmake,sha256=TbljueaPCWblbtdgy_hoYu8kchGHSnKBKUG6M8ixwBk,34 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-Initialize.cmake,sha256=o0qxxtuTTl_GQNddbL07l_Rq1xtx4YbGzaSOldUm6IM,58 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-MSVC-C.cmake,sha256=gSL8tB4WfTVlwrJHtUTONU7_P7TrA4xNzZUjqrWcFUc,33 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore-MSVC-CXX.cmake,sha256=7EexEjHEriqGZF-2nMlK2bQuBkrkTRaDxioaeSpvq3U,35 +cmake/data/share/cmake-3.31/Modules/Platform/WindowsStore.cmake,sha256=D5lW4yol1-IMxkllOzI2em8zAKIo5ombi5x_m456KDs,26 +cmake/data/share/cmake-3.31/Modules/Platform/Xenix-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/Xenix.cmake,sha256=aafSZ2MKL1ZlPe28Kr7ozZ2Zzy2X01VSVNuqW2M7ID8,29 +cmake/data/share/cmake-3.31/Modules/Platform/eCos-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/eCos.cmake,sha256=S0b3mEbVikD4LIeMLsj-pnPlS9-vuIRraZS99yzf270,2736 +cmake/data/share/cmake-3.31/Modules/Platform/gas.cmake,sha256=U36Pkg5xUmGSiclmttcNpqdielX6OWZpNdVgBOXHkJY,670 +cmake/data/share/cmake-3.31/Modules/Platform/iOS-Determine-CXX.cmake,sha256=mtf3zmRnF12IVzWrSVDYi8_svZnVuj8Q25lGDMjNNOc,39 +cmake/data/share/cmake-3.31/Modules/Platform/iOS-Initialize.cmake,sha256=UGUfXtwhK6QjscyJUlwMj0Ob7CAdj56Vr5RVn6SlVj8,256 +cmake/data/share/cmake-3.31/Modules/Platform/iOS.cmake,sha256=Vn7W6_3RjbCfchzNO3zGcJQLKao-eo22WvJIoFTwPv8,25 +cmake/data/share/cmake-3.31/Modules/Platform/kFreeBSD-Initialize.cmake,sha256=Yw1b2iQsa6v7I3aeit36u89_9DnvXJC8bI5-TEkF2Ck,224 +cmake/data/share/cmake-3.31/Modules/Platform/kFreeBSD.cmake,sha256=RDS6LYkDgtUskbZd6XEC5l7nCBYBy3LNwGbfdOoMbNc,92 +cmake/data/share/cmake-3.31/Modules/Platform/syllable-Initialize.cmake,sha256=a-IlUWoFF09DMro_1hkQb-x3zyTrSrcvNfsACZQpM2A,12 +cmake/data/share/cmake-3.31/Modules/Platform/syllable.cmake,sha256=jCXu5nrdFQfcJxEImFnWze_W4GRiscOo-jMMlRt0pJ0,1508 +cmake/data/share/cmake-3.31/Modules/Platform/tvOS-Determine-CXX.cmake,sha256=mtf3zmRnF12IVzWrSVDYi8_svZnVuj8Q25lGDMjNNOc,39 +cmake/data/share/cmake-3.31/Modules/Platform/tvOS-Initialize.cmake,sha256=x6xGzhdQyXYRXa5qvUW-OGeeEnJXSQkQ9EK23P2oo1Q,233 +cmake/data/share/cmake-3.31/Modules/Platform/tvOS.cmake,sha256=Vn7W6_3RjbCfchzNO3zGcJQLKao-eo22WvJIoFTwPv8,25 +cmake/data/share/cmake-3.31/Modules/Platform/visionOS-Determine-CXX.cmake,sha256=mtf3zmRnF12IVzWrSVDYi8_svZnVuj8Q25lGDMjNNOc,39 +cmake/data/share/cmake-3.31/Modules/Platform/visionOS-Initialize.cmake,sha256=GI9f3k9gyOA6ppehJDXbasNWEgYZJACSVCWQAU5dKRo,232 +cmake/data/share/cmake-3.31/Modules/Platform/visionOS.cmake,sha256=Vn7W6_3RjbCfchzNO3zGcJQLKao-eo22WvJIoFTwPv8,25 +cmake/data/share/cmake-3.31/Modules/Platform/watchOS-Determine-CXX.cmake,sha256=mtf3zmRnF12IVzWrSVDYi8_svZnVuj8Q25lGDMjNNOc,39 +cmake/data/share/cmake-3.31/Modules/Platform/watchOS-Initialize.cmake,sha256=G5il2HXsCnsWs1dIbvwDoxb17-IrYJkUEP60NVj9rDc,234 +cmake/data/share/cmake-3.31/Modules/Platform/watchOS.cmake,sha256=Vn7W6_3RjbCfchzNO3zGcJQLKao-eo22WvJIoFTwPv8,25 +cmake/data/share/cmake-3.31/Modules/ProcessorCount.cmake,sha256=SAHowCNNBZR5Uos_tVD3xOpnG7mRMo3qtZ0iyyZXNfA,9129 +cmake/data/share/cmake-3.31/Modules/Qt4ConfigDependentSettings.cmake,sha256=Jzk0lEuW_Hy1r9AbViMtS3akg5Ap-ZeXLPRF33y2Jso,7797 +cmake/data/share/cmake-3.31/Modules/Qt4Macros.cmake,sha256=MUUZERFlXgQaYnBN9Jcw4kIZF2Knt1ni1C_HkVtS0p8,19241 +cmake/data/share/cmake-3.31/Modules/SelectLibraryConfigurations.cmake,sha256=41wzWHlMofQGvRSYPckTS6qmXdWn5v7yMm5eLkjbvDk,3290 +cmake/data/share/cmake-3.31/Modules/Squish4RunTestCase.bat,sha256=kExbaD1hSAGh8r18eVW2VC7DtSIB4DyprUHFyjDgUjo,648 +cmake/data/share/cmake-3.31/Modules/Squish4RunTestCase.sh,sha256=vsfsJjBdTLp6rncb5miRMvr4EDqy8QcC3yeCn3VnDUY,631 +cmake/data/share/cmake-3.31/Modules/SquishRunTestCase.bat,sha256=CEvHxIzNrZSmgQHoQ63gwtTwvTXU9ovHBnVNWkmFgdA,219 +cmake/data/share/cmake-3.31/Modules/SquishRunTestCase.sh,sha256=secFfzz_ar7r7M8RhkHlELwQMysPU2SjHi3YyKw77Sg,272 +cmake/data/share/cmake-3.31/Modules/SquishTestScript.cmake,sha256=ykH2Ti60D5wTZwQ3WG3jLhStVBxxqoLQzA2w-Su8p3U,3489 +cmake/data/share/cmake-3.31/Modules/SystemInformation.cmake,sha256=I4OPMssH_HGy3zB7ZDN0nhNkl70JKAL4hr2bHtJKFxc,3110 +cmake/data/share/cmake-3.31/Modules/SystemInformation.in,sha256=OWhw7nys9X-kic-gejxsQjMVTvSwtl552cwgP5dGgZM,4783 +cmake/data/share/cmake-3.31/Modules/TestBigEndian.cmake,sha256=CsdQ6T8ozF8_4-1PF3hzxKlgBhywc2PHVlQK3qcudNU,4953 +cmake/data/share/cmake-3.31/Modules/TestCXXAcceptsFlag.cmake,sha256=DixA4wXt6fTwEQsBZwZXikDbLA39SHD19sKLJ0V9UAA,1013 +cmake/data/share/cmake-3.31/Modules/TestEndianess.c.in,sha256=9jA-zw6bvRwJCgJvwFycxfaVx9_idcJCZEXKC2EDRJo,871 +cmake/data/share/cmake-3.31/Modules/TestForANSIForScope.cmake,sha256=eF5DnJWgBpbOe3vTxP_L2x29sD8DWYsk9aA9jhCwu44,1040 +cmake/data/share/cmake-3.31/Modules/TestForANSIStreamHeaders.cmake,sha256=Qv3JGJtnSgdydcwu-S-wEpGCBoUfjUPIAJ2V2SaCgCE,1062 +cmake/data/share/cmake-3.31/Modules/TestForANSIStreamHeaders.cxx,sha256=RZVqZPzGdCc8eCcZbBVmRBHqR3ub_RpsUws_7jVreV0,60 +cmake/data/share/cmake-3.31/Modules/TestForAnsiForScope.cxx,sha256=jEj_EGd3bXw1Nz77ka-IZj_VmQRG-Ug5dW4Kk2rDPZc,95 +cmake/data/share/cmake-3.31/Modules/TestForSSTREAM.cmake,sha256=5pJRFovi2B3OfxJh2YrodDF4rnPo3gVj3PAoh92mAoA,1029 +cmake/data/share/cmake-3.31/Modules/TestForSSTREAM.cxx,sha256=HbGBGFQTY72VaxP_Rmz3iCrGbsMwRCdlLkaKxNnLMtQ,149 +cmake/data/share/cmake-3.31/Modules/TestForSTDNamespace.cmake,sha256=52C6kekMnhkQ_SVtB0fkbxjYE2FqniOMWGHoOqBpYpw,978 +cmake/data/share/cmake-3.31/Modules/TestForSTDNamespace.cxx,sha256=5U2kyBKDx6OJAWC_0E0uiyY9GDJL-kqhBH4syCY-kkk,75 +cmake/data/share/cmake-3.31/Modules/UseEcos.cmake,sha256=5PWd2QpYuHt5N5DBf7JgtV2r_VUQZtdId8cL0-S57Ds,9975 +cmake/data/share/cmake-3.31/Modules/UseJava.cmake,sha256=p33ClB7pgt0yYdWdzSrVvtCObvU1FJauYMjsVR29Aes,63443 +cmake/data/share/cmake-3.31/Modules/UseJava/ClassFilelist.cmake,sha256=dpmuMnjeydr1RGBKXAFg865877iTfmMAPkRKNuataUg,1696 +cmake/data/share/cmake-3.31/Modules/UseJava/ClearClassFiles.cmake,sha256=iJWpzEcXNp9_pDsU2VxOBnzm_7QJTBGgtxqVlfhnYR0,775 +cmake/data/share/cmake-3.31/Modules/UseJava/Symlinks.cmake,sha256=kus3mzifMLGQ8tLQGa-FD3cszN25Onue9i3bsUg-JQo,627 +cmake/data/share/cmake-3.31/Modules/UseJava/javaTargets.cmake.in,sha256=dp_pGJ3F-pwAGH1lcix2bvSTHXNrlX8xSRHvRTu56nM,1198 +cmake/data/share/cmake-3.31/Modules/UsePkgConfig.cmake,sha256=ElufFzdR_Tb_WZr-NaRwwcZ-yxfscBDtWRXlJQoOdDI,2879 +cmake/data/share/cmake-3.31/Modules/UseQt4.cmake,sha256=BRqedKN1QdynPX8rOl876K2p2s0zDMOyoWG0ByAjmWw,3704 +cmake/data/share/cmake-3.31/Modules/UseSWIG.cmake,sha256=WM0zJiyrW0Ty3FfLrsyv3g2gpqvMiVZVkSoQeVwdPQ0,42903 +cmake/data/share/cmake-3.31/Modules/UseSWIG/ManageSupportFiles.cmake,sha256=Xoc8Bg1twlj1PqiPgFCZY5DSm3gVpUkhXb7Zt1IJ8xU,1060 +cmake/data/share/cmake-3.31/Modules/Use_wxWindows.cmake,sha256=hz-AVapdi_bIl9W4jlsJTWosfdFZgPsDonVZIxMKB1s,2151 +cmake/data/share/cmake-3.31/Modules/UsewxWidgets.cmake,sha256=xiWHYyDbJkkGORXsfGKacW3HbYDdtHcmfv4v2IKQuho,1923 +cmake/data/share/cmake-3.31/Modules/VTKCompatibility.cmake,sha256=fxUOY7URW1IrrWYrOxFsdoqjO2kLqSJISaZDXDTWsMI,1818 +cmake/data/share/cmake-3.31/Modules/WriteBasicConfigVersionFile.cmake,sha256=hCEXTT5EMNNpszCzsAfFDAGSPuyC88B9psgWEhrvajg,2313 +cmake/data/share/cmake-3.31/Modules/WriteCompilerDetectionHeader.cmake,sha256=43LKDGKRgFZca4mLNhDv8fj6y4yjKTB_ezEZRC-R4hs,31717 +cmake/data/share/cmake-3.31/Modules/ecos_clean.cmake,sha256=e6ChmJv8MzlJo4_ZYb29ZhNAEHTI4VRcQuIAEDgMzbk,492 +cmake/data/share/cmake-3.31/Modules/exportheader.cmake.in,sha256=_VOJ14y8B6V_UP-9MgNQJMMEOIuCBILdBKj4pDJDyLk,1171 +cmake/data/share/cmake-3.31/Modules/kde3init_dummy.cpp.in,sha256=Lz69ALPL0RZzxeHSEbx-KpNV_Y3eR46OomsJyQUSy6U,227 +cmake/data/share/cmake-3.31/Modules/kde3uic.cmake,sha256=OUDIJ_gptL73kEjTU6C0ywX5uOAgcl-uzUQArzINofw,723 +cmake/data/share/cmake-3.31/Modules/readme.txt,sha256=v79h-5nuTZ3q0foW9oKfUnWhODyojiBzaKEnzyc9OlQ,233 +cmake/data/share/cmake-3.31/Templates/AppleInfo.plist,sha256=Zn21DxQ6qROpwYXBZJyl3z7jM0fx90TOqdRIAh6RSYQ,1164 +cmake/data/share/cmake-3.31/Templates/CMakeVSMacros1.vsmacros,sha256=1oEDHck8iYndDabwH8CtVzx-vWOz4CDn8TtbqdI3BJ8,88064 +cmake/data/share/cmake-3.31/Templates/CMakeVSMacros2.vsmacros,sha256=xg2TGA0ncmjQQpiSR3Gt8xmEDdYdZgelM6huLjgBm8Y,63488 +cmake/data/share/cmake-3.31/Templates/CPack.GenericDescription.txt,sha256=9Z-o4mKpb9AbbB8PopSVltF3QqWfj98HeXBe9SPqFJQ,138 +cmake/data/share/cmake-3.31/Templates/CPack.GenericLicense.txt,sha256=91meuFd6SYuoWVR8j1rBwzAqSxy5KaPuYbxelI2Ko9Y,101 +cmake/data/share/cmake-3.31/Templates/CPack.GenericWelcome.txt,sha256=1DZB8fES3kS11Sd1e-c9q-hLf3jUt1SV_DllZtRXVCU,96 +cmake/data/share/cmake-3.31/Templates/CPackConfig.cmake.in,sha256=C2T1nudVRnAlxkYXFP94GntvKlrw9K-OGw5izjU4fyY,751 +cmake/data/share/cmake-3.31/Templates/MSBuild/CustomBuildDepFile.targets,sha256=Q_XEzVP4HEAviAJcmQBgJzg7rR_S7sY6-znw8oaJAA8,3010 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_CL.json,sha256=76qWiMG7_5VJui21-OIPCEX7Mu_3HmsfP46lpUVBQP8,20030 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_CSharp.json,sha256=V4mEmf52NO6QqBWKpmOHvzHW-vRU413jJINgT2wxWak,9404 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_Cuda.json,sha256=xMKTgp0jkm7W1wurReBpO7BXPfUvmuc3NA43HsrQp2Q,2447 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_CudaHost.json,sha256=owyccxCHb9aovhmUDNMKHC2_b6W59e_kfZ51f5pyyRc,2599 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_LIB.json,sha256=pD69G-cQt2TI2QFQz4nU3lR2xwYM5PIK1Qt4rYWDjz0,6006 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_Link.json,sha256=x3HRQAxdo31XRF8yknVImdYb0NfGuFz0USiTKhvjWDA,23080 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_MARMASM.json,sha256=hd1w5c9NxNkmFV2rrglD703xrPANr6e3bzzEJZt4gfo,3128 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_MASM.json,sha256=rOZRcAJsYSbXVavWTCyOjoAcCOlnWea9_-b7onvxS0Y,6130 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_NASM.json,sha256=F-YMII12h75p3HUaqCCttTjcnHQBNBztcsYoOH7aXI4,4003 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v10_RC.json,sha256=2aXsTrT10r2tn2yklSZhCiBKZ5WkJpqfsiSLGMC7Do8,1346 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v11_CL.json,sha256=a-V90iD7mGICERwQJrhW4JG_JTe-dWut_FyfbKuz-NM,21719 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v11_CSharp.json,sha256=V4mEmf52NO6QqBWKpmOHvzHW-vRU413jJINgT2wxWak,9404 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v11_LIB.json,sha256=pD69G-cQt2TI2QFQz4nU3lR2xwYM5PIK1Qt4rYWDjz0,6006 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v11_Link.json,sha256=lHdcJ_kEtWkmhQg-U3t_Sxa1hco7YZmTjD8NTfskoK0,25804 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v11_MASM.json,sha256=rOZRcAJsYSbXVavWTCyOjoAcCOlnWea9_-b7onvxS0Y,6130 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v11_RC.json,sha256=2aXsTrT10r2tn2yklSZhCiBKZ5WkJpqfsiSLGMC7Do8,1346 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v12_CL.json,sha256=YYREZvXQuxdm2eEFEvYxVzjdHadf_OAwzPQ7BZbdb-c,22023 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v12_CSharp.json,sha256=V4mEmf52NO6QqBWKpmOHvzHW-vRU413jJINgT2wxWak,9404 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v12_LIB.json,sha256=pD69G-cQt2TI2QFQz4nU3lR2xwYM5PIK1Qt4rYWDjz0,6006 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v12_Link.json,sha256=lHdcJ_kEtWkmhQg-U3t_Sxa1hco7YZmTjD8NTfskoK0,25804 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v12_MASM.json,sha256=rOZRcAJsYSbXVavWTCyOjoAcCOlnWea9_-b7onvxS0Y,6130 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v12_RC.json,sha256=2aXsTrT10r2tn2yklSZhCiBKZ5WkJpqfsiSLGMC7Do8,1346 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v140_CL.json,sha256=A_dZ7rtedzT9EMRp6Hm5jvTJpKLZC_niZ7BCShA2zr8,24189 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v140_CSharp.json,sha256=V4mEmf52NO6QqBWKpmOHvzHW-vRU413jJINgT2wxWak,9404 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v140_Link.json,sha256=ff90jgDqLyPtQwhBxJqmvneVyNPDm3BD57TJ-GPcv-0,26757 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v141_CL.json,sha256=A95E_spneaYahQOpjNlxyEkkOgRz9OSZipRvbCZtKwk,26398 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v141_CSharp.json,sha256=V4mEmf52NO6QqBWKpmOHvzHW-vRU413jJINgT2wxWak,9404 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v141_Link.json,sha256=yZ3Ns7am0fp1st11YKyP1G0kaRhIKuVpHGsrISbKY2A,26978 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v142_CL.json,sha256=MLs_DbY5pyTUGpEQQ1s0ECDMenzJhLlQaNb_KbEWBbQ,30863 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v142_CSharp.json,sha256=cyscLfnuP2lZtf6xeJcJLw68HvDKXmMLSJgcLuQhisQ,9725 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v142_Link.json,sha256=qJQQuevfjFP9uvvoEEm3sJ6PeRTtDvEdzZ-_0aCZ1y0,27129 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v143_CL.json,sha256=epSaktomU7dPTeDzinZBm-KMangvyYQIzqGIDjewJOE,31341 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v143_CSharp.json,sha256=cyscLfnuP2lZtf6xeJcJLw68HvDKXmMLSJgcLuQhisQ,9725 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v143_Link.json,sha256=y76zV-R2beTZTPjYu2iVbIOJ_a_DhE0sAFFj7UqrfZI,28744 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v14_LIB.json,sha256=a7DQcqCL9Fi5iutfu-2sCW5gWymEhA-TMuQi5w86Aog,6299 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v14_MASM.json,sha256=rOZRcAJsYSbXVavWTCyOjoAcCOlnWea9_-b7onvxS0Y,6130 +cmake/data/share/cmake-3.31/Templates/MSBuild/FlagTables/v14_RC.json,sha256=2aXsTrT10r2tn2yklSZhCiBKZ5WkJpqfsiSLGMC7Do8,1346 +cmake/data/share/cmake-3.31/Templates/MSBuild/nasm.props.in,sha256=DY8kN2xPJPNiMyF2MjhFLbeRIOh-tqawPyRMjVXCaBI,857 +cmake/data/share/cmake-3.31/Templates/MSBuild/nasm.targets,sha256=okmEOM7W7MT0-t3win_NVF3kyc2libFEGr4df0jOXls,3184 +cmake/data/share/cmake-3.31/Templates/MSBuild/nasm.xml,sha256=BelZ2zUJ4LGXHVFQ5ojAKNP3ks7WkG5E0JlMGCpgZ8M,9209 +cmake/data/share/cmake-3.31/Templates/TestDriver.cxx.in,sha256=4ZQACGlXXU3-7bQI1EVf4ZjkjFhbLQj1jlvAlKF48yI,5199 +cmake/data/share/cmake-3.31/Templates/Windows/ApplicationIcon.png,sha256=k6OaJOJf-deqLZFUgHNYRb7Ov30h6wtzJC0nT18jGAQ,2335 +cmake/data/share/cmake-3.31/Templates/Windows/Logo.png,sha256=ilVWJg1hdJ6SDrtRcmgI9KI16TVVnqLXogwbkiiNoHg,488 +cmake/data/share/cmake-3.31/Templates/Windows/SmallLogo.png,sha256=8vIQ8K_lf8J8V5dFjtEZEhaQcE-f-hYJK-2uoNpaTWo,167 +cmake/data/share/cmake-3.31/Templates/Windows/SmallLogo44x44.png,sha256=8lnM5VOgqhBRFd3T1j0ABlYZ3gzoraT2sH1voWSYpCs,265 +cmake/data/share/cmake-3.31/Templates/Windows/SplashScreen.png,sha256=ECxNUWENW5zrmgF0H9E0FBfemz7A-LGSUgIr4NTfSmo,909 +cmake/data/share/cmake-3.31/Templates/Windows/StoreLogo.png,sha256=jYpEXHOKEohgWHZlqQCSEybCrqwdZlqkd88a5x9f5hs,227 +cmake/data/share/cmake-3.31/Templates/Windows/Windows_TemporaryKey.pfx,sha256=qVf7jIo-PnsbjSxY6X4CdZthzXy-zKQJwHY8jW2WkfQ,2560 +cmake/data/share/cmake-3.31/include/cmCPluginAPI.h,sha256=KViGoiBiO0Tdea10bDzTWqPzaJJMsl_oqS_uegU4cMM,11641 +cmake/data/share/emacs/site-lisp/cmake-mode.el,sha256=vrv04BFixZEVeDJWO21OxQvHEYhSWDsYNQTOoBlbybA,19413 +cmake/data/share/vim/vimfiles/indent/cmake.vim,sha256=ZYoJan_ENQCQCkThavHmcLoulFzwxlDyGmCIofzoA80,3049 +cmake/data/share/vim/vimfiles/syntax/cmake.vim,sha256=-P42VZ9ym4ZXAGzGcIHqMm4RoyB7mBaykqY-HAJSJow,165302 +cmake/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/REQUESTED b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/WHEEL b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/WHEEL new file mode 100644 index 0000000..d75ec54 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: scikit-build-core 0.10.7 +Root-Is-Purelib: false +Tag: py3-none-manylinux_2_17_x86_64 +Tag: py3-none-manylinux2014_x86_64 + diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/entry_points.txt b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/entry_points.txt new file mode 100644 index 0000000..afb6b51 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/entry_points.txt @@ -0,0 +1,6 @@ +[console_scripts] +ccmake = cmake:ccmake +cmake = cmake:cmake +cpack = cmake:cpack +ctest = cmake:ctest + diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/AUTHORS.rst b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/AUTHORS.rst new file mode 100644 index 0000000..696e631 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/AUTHORS.rst @@ -0,0 +1,5 @@ +======= +Credits +======= + +Please see the GitHub project page at https://github.com/scikit-build/cmake-python-distributions/graphs/contributors diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/LICENSE_Apache_20 b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/LICENSE_Apache_20 new file mode 100644 index 0000000..37ec93a --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/LICENSE_Apache_20 @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/LICENSE_BSD_3 b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/LICENSE_BSD_3 new file mode 100644 index 0000000..17820f3 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake-3.31.1.dist-info/licenses/LICENSE_BSD_3 @@ -0,0 +1,34 @@ +CMake is distributed under the OSI-approved BSD 3-clause License: + +CMake - Cross Platform Makefile Generator +Copyright 2000-2014 Kitware, Inc. +Copyright 2000-2011 Insight Software Consortium +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +* Neither the names of Kitware, Inc., the Insight Software Consortium, +nor the names of their contributors may be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.venv/lib/python3.12/site-packages/cmake/__init__.py b/.venv/lib/python3.12/site-packages/cmake/__init__.py new file mode 100644 index 0000000..80ccf9e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/__init__.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +import os +import subprocess +import sys +from pathlib import Path + +if sys.version_info < (3, 8): + from importlib_metadata import distribution +else: + from importlib.metadata import distribution + +from ._version import version as __version__ + +TYPE_CHECKING = False + +if TYPE_CHECKING: + from typing import Iterable, NoReturn + + +__all__ = ["__version__", "CMAKE_DATA", "CMAKE_BIN_DIR", "CMAKE_DOC_DIR", "CMAKE_SHARE_DIR", "cmake", "cpack", "ctest"] + + +def __dir__() -> list[str]: + return __all__ + + +cmake_executable_path = None +cmake_files = distribution("cmake").files +assert cmake_files is not None, "This is the cmake package so it must be installed and have files" +for script in cmake_files: + if str(script).startswith("cmake/data/bin/cmake"): + resolved_script = Path(script.locate()).resolve(strict=True) + cmake_executable_path = resolved_script.parents[1] + break +CMAKE_DATA = str(cmake_executable_path) if cmake_executable_path else None + +assert CMAKE_DATA is not None +assert os.path.exists(CMAKE_DATA) + +CMAKE_BIN_DIR = os.path.join(CMAKE_DATA, 'bin') +CMAKE_DOC_DIR = os.path.join(CMAKE_DATA, 'doc') +CMAKE_SHARE_DIR = os.path.join(CMAKE_DATA, 'share') + + +def _program(name: str, args: Iterable[str]) -> int: + return subprocess.call([os.path.join(CMAKE_BIN_DIR, name), *args], close_fds=False) + +def _program_exit(name: str, *args: str) -> NoReturn: + if sys.platform.startswith("win"): + raise SystemExit(_program(name, args)) + cmake_exe = os.path.join(CMAKE_BIN_DIR, name) + os.execl(cmake_exe, cmake_exe, *args) + + +def ccmake() -> NoReturn: + _program_exit('ccmake', *sys.argv[1:]) + + +def cmake() -> NoReturn: + _program_exit('cmake', *sys.argv[1:]) + + +def cpack() -> NoReturn: + _program_exit('cpack', *sys.argv[1:]) + + +def ctest() -> NoReturn: + _program_exit('ctest', *sys.argv[1:]) diff --git a/.venv/lib/python3.12/site-packages/cmake/__main__.py b/.venv/lib/python3.12/site-packages/cmake/__main__.py new file mode 100644 index 0000000..23d232d --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/__main__.py @@ -0,0 +1,4 @@ +from cmake import cmake + +if __name__ == "__main__": + cmake() diff --git a/.venv/lib/python3.12/site-packages/cmake/_version.py b/.venv/lib/python3.12/site-packages/cmake/_version.py new file mode 100644 index 0000000..a742f47 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/_version.py @@ -0,0 +1 @@ +version = "3.31.1" diff --git a/.venv/lib/python3.12/site-packages/cmake/_version.pyi b/.venv/lib/python3.12/site-packages/cmake/_version.pyi new file mode 100644 index 0000000..c2ee2ca --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/_version.pyi @@ -0,0 +1 @@ +version: str diff --git a/.venv/lib/python3.12/site-packages/cmake/data/bin/cmake b/.venv/lib/python3.12/site-packages/cmake/data/bin/cmake new file mode 100755 index 0000000..f4575ac Binary files /dev/null and b/.venv/lib/python3.12/site-packages/cmake/data/bin/cmake differ diff --git a/.venv/lib/python3.12/site-packages/cmake/data/bin/cpack b/.venv/lib/python3.12/site-packages/cmake/data/bin/cpack new file mode 100755 index 0000000..615d729 Binary files /dev/null and b/.venv/lib/python3.12/site-packages/cmake/data/bin/cpack differ diff --git a/.venv/lib/python3.12/site-packages/cmake/data/bin/ctest b/.venv/lib/python3.12/site-packages/cmake/data/bin/ctest new file mode 100755 index 0000000..19e0b29 Binary files /dev/null and b/.venv/lib/python3.12/site-packages/cmake/data/bin/ctest differ diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/Copyright.txt b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/Copyright.txt new file mode 100644 index 0000000..2074109 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/Copyright.txt @@ -0,0 +1,136 @@ +CMake - Cross Platform Makefile Generator +Copyright 2000-2024 Kitware, Inc. and Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of Kitware, Inc. nor the names of Contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------ + +The following individuals and institutions are among the Contributors: + +* Aaron C. Meadows +* Adriaan de Groot +* Aleksey Avdeev +* Alexander Neundorf +* Alexander Smorkalov +* Alexey Sokolov +* Alex Merry +* Alex Turbov +* Andreas Pakulat +* Andreas Schneider +* André Rigland Brodtkorb +* Axel Huebl, Helmholtz-Zentrum Dresden - Rossendorf +* Benjamin Eikel +* Bjoern Ricks +* Brad Hards +* Christopher Harvey +* Christoph Grüninger +* Clement Creusot +* Daniel Blezek +* Daniel Pfeifer +* Dawid Wróbel +* Enrico Scholz +* Eran Ifrah +* Esben Mose Hansen, Ange Optimization ApS +* Geoffrey Viola +* Google Inc +* Gregor Jasny +* Helio Chissini de Castro +* Ilya Lavrenov +* Insight Software Consortium +* Intel Corporation +* Jan Woetzel +* Jordan Williams +* Julien Schueller +* Kelly Thompson +* Konstantin Podsvirov +* Laurent Montel +* Mario Bensi +* Martin Gräßlin +* Mathieu Malaterre +* Matthaeus G. Chajdas +* Matthias Kretz +* Matthias Maennich +* Michael Hirsch, Ph.D. +* Michael Stürmer +* Miguel A. Figueroa-Villanueva +* Mike Durso +* Mike Jackson +* Mike McQuaid +* Nicolas Bock +* Nicolas Despres +* Nikita Krupen'ko +* NVIDIA Corporation +* OpenGamma Ltd. +* Patrick Stotko +* Per Øyvind Karlsen +* Peter Collingbourne +* Petr Gotthard +* Philip Lowman +* Philippe Proulx +* Raffi Enficiaud, Max Planck Society +* Raumfeld +* Roger Leigh +* Rolf Eike Beer +* Roman Donchenko +* Roman Kharitonov +* Ruslan Baratov +* Sebastian Holtermann +* Stephen Kelly +* Sylvain Joubert +* The Qt Company Ltd. +* Thomas Sondergaard +* Tobias Hunger +* Todd Gamblin +* Tristan Carel +* University of Dundee +* Vadim Zhukov +* Will Dicharry + +See version control history for details of individual contributions. + +The above copyright and license notice applies to distributions of +CMake in source and binary form. Third-party software packages supplied +with CMake under compatible licenses provide their own copyright notices +documented in corresponding subdirectories or source files. + +------------------------------------------------------------------------------ + +CMake was initially developed by Kitware with the following sponsorship: + + * National Library of Medicine at the National Institutes of Health + as part of the Insight Segmentation and Registration Toolkit (ITK). + + * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel + Visualization Initiative. + + * National Alliance for Medical Image Computing (NAMIC) is funded by the + National Institutes of Health through the NIH Roadmap for Medical Research, + Grant U54 EB005149. + + * Kitware, Inc. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmcppdap/NOTICE b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmcppdap/NOTICE new file mode 100644 index 0000000..5ad206c --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmcppdap/NOTICE @@ -0,0 +1,5 @@ +'cppdap' is a C++11 library implementation of the Debug Adapter Protocol. +Version as of 2023-01-06 +Copyright Google LLC + +This product includes software developed at Google. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmcurl/COPYING b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmcurl/COPYING new file mode 100644 index 0000000..d9e7e0b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmcurl/COPYING @@ -0,0 +1,22 @@ +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2024, Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibarchive/COPYING b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibarchive/COPYING new file mode 100644 index 0000000..1b97235 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibarchive/COPYING @@ -0,0 +1,65 @@ +The libarchive distribution as a whole is Copyright by Tim Kientzle +and is subject to the copyright notice reproduced at the bottom of +this file. + +Each individual file in this distribution should have a clear +copyright/licensing statement at the beginning of the file. If any do +not, please let me know and I will rectify it. The following is +intended to summarize the copyright status of the individual files; +the actual statements in the files are controlling. + +* Except as listed below, all C sources (including .c and .h files) + and documentation files are subject to the copyright notice reproduced + at the bottom of this file. + +* The following source files are also subject in whole or in part to + a 3-clause UC Regents copyright; please read the individual source + files for details: + libarchive/archive_read_support_filter_compress.c + libarchive/archive_write_add_filter_compress.c + libarchive/mtree.5 + +* The following source files are in the public domain: + libarchive/archive_getdate.c + +* The following source files are triple-licensed with the ability to choose + from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses: + libarchive/archive_blake2.h + libarchive/archive_blake2_impl.h + libarchive/archive_blake2s_ref.c + libarchive/archive_blake2sp_ref.c + +* The build files---including Makefiles, configure scripts, + and auxiliary scripts used as part of the compile process---have + widely varying licensing terms. Please check individual files before + distributing them to see if those restrictions apply to you. + +I intend for all new source code to use the license below and hope over +time to replace code with other licenses with new implementations that +do use the license below. The varying licensing of the build scripts +seems to be an unavoidable mess. + + +Copyright (c) 2003-2018 +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer + in this position and unchanged. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmliblzma/COPYING b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmliblzma/COPYING new file mode 100644 index 0000000..20e60d5 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmliblzma/COPYING @@ -0,0 +1,65 @@ + +XZ Utils Licensing +================== + + Different licenses apply to different files in this package. Here + is a rough summary of which licenses apply to which parts of this + package (but check the individual files to be sure!): + + - liblzma is in the public domain. + + - xz, xzdec, and lzmadec command line tools are in the public + domain unless GNU getopt_long had to be compiled and linked + in from the lib directory. The getopt_long code is under + GNU LGPLv2.1+. + + - The scripts to grep, diff, and view compressed files have been + adapted from gzip. These scripts and their documentation are + under GNU GPLv2+. + + - All the documentation in the doc directory and most of the + XZ Utils specific documentation files in other directories + are in the public domain. + + - Translated messages are in the public domain. + + - The build system contains public domain files, and files that + are under GNU GPLv2+ or GNU GPLv3+. None of these files end up + in the binaries being built. + + - Test files and test code in the tests directory, and debugging + utilities in the debug directory are in the public domain. + + - The extra directory may contain public domain files, and files + that are under various free software licenses. + + You can do whatever you want with the files that have been put into + the public domain. If you find public domain legally problematic, + take the previous sentence as a license grant. If you still find + the lack of copyright legally problematic, you have too many + lawyers. + + As usual, this software is provided "as is", without any warranty. + + If you copy significant amounts of public domain code from XZ Utils + into your project, acknowledging this somewhere in your software is + polite (especially if it is proprietary, non-free software), but + naturally it is not legally required. Here is an example of a good + notice to put into "about box" or into documentation: + + This software includes code from XZ Utils . + + The following license texts are included in the following files: + - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1 + - COPYING.GPLv2: GNU General Public License version 2 + - COPYING.GPLv3: GNU General Public License version 3 + + Note that the toolchain (compiler, linker etc.) may add some code + pieces that are copyrighted. Thus, it is possible that e.g. liblzma + binary wouldn't actually be in the public domain in its entirety + even though it contains no copyrighted code from the XZ Utils source + package. + + If you have questions, don't hesitate to ask the author(s) for more + information. + diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibrhash/COPYING b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibrhash/COPYING new file mode 100644 index 0000000..be7d4a9 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibrhash/COPYING @@ -0,0 +1,15 @@ + + BSD Zero Clause License + +Copyright (c) 2005, Aleksey Kravchenko + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibuv/LICENSE b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibuv/LICENSE new file mode 100644 index 0000000..eb126da --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmlibuv/LICENSE @@ -0,0 +1,66 @@ +libuv is licensed for use as follows: + +==== +Copyright (c) 2015-present libuv project contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +==== + +This license applies to parts of libuv originating from the +https://github.com/joyent/libuv repository: + +==== + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +==== + +This license applies to all parts of libuv that are not externally +maintained libraries. + +The externally maintained libraries used by libuv are: + + - tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. + + - inet_pton and inet_ntop implementations, contained in src/inet.c, are + copyright the Internet Systems Consortium, Inc., and licensed under the ISC + license. + + - stdint-msvc2008.h (from msinttypes), copyright Alexander Chemeris. Three + clause BSD license. + + - pthread-fixes.c, copyright Google Inc. and Sony Mobile Communications AB. + Three clause BSD license. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmnghttp2/COPYING b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmnghttp2/COPYING new file mode 100644 index 0000000..8020179 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmnghttp2/COPYING @@ -0,0 +1,23 @@ +The MIT License + +Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa +Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmsys/Copyright.txt b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmsys/Copyright.txt new file mode 100644 index 0000000..33d7fb4 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmsys/Copyright.txt @@ -0,0 +1,38 @@ +KWSys - Kitware System Library +Copyright 2000-2016 Kitware, Inc. and Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of Kitware, Inc. nor the names of Contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------ + +The following individuals and institutions are among the Contributors: + +* Insight Software Consortium + +See version control history for details of individual contributions. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmzlib/Copyright.txt b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmzlib/Copyright.txt new file mode 100644 index 0000000..7df3d0a --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmzlib/Copyright.txt @@ -0,0 +1,23 @@ +'zlib' general purpose compression library +version 1.3.1, January 22nd, 2024 + +Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu diff --git a/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmzstd/LICENSE b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmzstd/LICENSE new file mode 100644 index 0000000..7580028 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/doc/cmake-3.31/cmzstd/LICENSE @@ -0,0 +1,30 @@ +BSD License + +For Zstandard software + +Copyright (c) Meta Platforms, Inc. and affiliates. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook, nor Meta, nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/aclocal/cmake.m4 b/.venv/lib/python3.12/site-packages/cmake/data/share/aclocal/cmake.m4 new file mode 100644 index 0000000..39826bc --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/aclocal/cmake.m4 @@ -0,0 +1,44 @@ +dnl Distributed under the OSI-approved BSD 3-Clause License. See accompanying +dnl file Copyright.txt or https://cmake.org/licensing for details. + +AC_DEFUN([CMAKE_FIND_BINARY], +[AC_ARG_VAR([CMAKE_BINARY], [path to the cmake binary])dnl + +if test "x$ac_cv_env_CMAKE_BINARY_set" != "xset"; then + AC_PATH_TOOL([CMAKE_BINARY], [cmake])dnl +fi +])dnl + +# $1: package name +# $2: language (e.g. C/CXX/Fortran) +# $3: The compiler ID, defaults to GNU. +# Possible values are: GNU, Intel, Clang, SunPro, HP, XL, VisualAge, PGI, +# PathScale, Cray, SCO, MSVC, LCC +# $4: optional extra arguments to cmake, e.g. "-DCMAKE_SIZEOF_VOID_P=8" +# $5: optional path to cmake binary +AC_DEFUN([CMAKE_FIND_PACKAGE], [ +AC_REQUIRE([CMAKE_FIND_BINARY])dnl + +AC_ARG_VAR([$1][_][$2][FLAGS], [$2 compiler flags for $1. This overrides the cmake output])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1. This overrides the cmake output])dnl + +failed=false +AC_MSG_CHECKING([for $1]) +if test -z "${$1[]_$2[]FLAGS}"; then + $1[]_$2[]FLAGS=`$CMAKE_BINARY --find-package "-DNAME=$1" "-DCOMPILER_ID=m4_default([$3], [GNU])" "-DLANGUAGE=$2" -DMODE=COMPILE $4` || failed=true +fi +if test -z "${$1[]_LIBS}"; then + $1[]_LIBS=`$CMAKE_BINARY --find-package "-DNAME=$1" "-DCOMPILER_ID=m4_default([$3], [GNU])" "-DLANGUAGE=$2" -DMODE=LINK $4` || failed=true +fi + +if $failed; then + unset $1[]_$2[]FLAGS + unset $1[]_LIBS + + AC_MSG_RESULT([no]) + $6 +else + AC_MSG_RESULT([yes]) + $5 +fi[]dnl +]) diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/cmake b/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/cmake new file mode 100644 index 0000000..3c30d34 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/cmake @@ -0,0 +1,242 @@ +# bash completion for cmake(1) -*- shell-script -*- + +_cmake() +{ + local is_old_completion=false + local is_init_completion=false + + local cur prev words cword split was_split + if type -t _comp_initialize >/dev/null; then + _comp_initialize -s || return + elif type -t _init_completion >/dev/null; then + _init_completion -s || return + is_init_completion=true + else + # manual initialization for older bash completion versions + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + is_old_completion=true + split=false + fi + + # Workaround for options like -DCMAKE_BUILD_TYPE=Release + local prefix= + if [[ $cur == -D* ]]; then + prev=-D + prefix=-D + cur="${cur#-D}" + elif [[ $cur == -U* ]]; then + prev=-U + prefix=-U + cur="${cur#-U}" + fi + + case "$prev" in + -D) + if [[ $cur == *=* ]]; then + # complete values for variables + local var type value + var="${cur%%[:=]*}" + value="${cur#*=}" + + if [[ $cur == CMAKE_BUILD_TYPE* ]]; then # most widely used case + COMPREPLY=( $( compgen -W 'Debug Release RelWithDebInfo + MinSizeRel' -- "$value" ) ) + return + fi + + if [[ $cur == *:* ]]; then + type="${cur#*:}" + type="${type%%=*}" + else # get type from cache if it's not set explicitly + type=$( cmake -LA -N 2>/dev/null | grep "$var:" \ + 2>/dev/null ) + type="${type#*:}" + type="${type%%=*}" + fi + case "$type" in + FILEPATH) + cur="$value" + _filedir + return + ;; + PATH) + cur="$value" + _filedir -d + return + ;; + BOOL) + COMPREPLY=( $( compgen -W 'ON OFF TRUE FALSE' -- \ + "$value" ) ) + return + ;; + STRING|INTERNAL) + # no completion available + return + ;; + esac + elif [[ $cur == *:* ]]; then + # complete types + local type="${cur#*:}" + COMPREPLY=( $( compgen -W 'FILEPATH PATH STRING BOOL INTERNAL'\ + -S = -- "$type" ) ) + compopt -o nospace + else + # complete variable names + COMPREPLY=( $( compgen -W '$( cmake -LA -N 2>/dev/null | + tail -n +2 | cut -f1 -d: )' -P "$prefix" -- "$cur" ) ) + compopt -o nospace + fi + return + ;; + -U) + COMPREPLY=( $( compgen -W '$( cmake -LA -N | tail -n +2 | + cut -f1 -d: )' -P "$prefix" -- "$cur" ) ) + return + ;; + esac + + if $is_old_completion; then + _split_longopt && split=true + fi + + case "$prev" in + -C|-P|--graphviz|--system-information) + _filedir + return + ;; + --build) + # Seed the reply with non-directory arguments that we know are + # allowed to follow --build. _filedir will then prepend any valid + # directory matches to these. + COMPREPLY=( $( compgen -W "--preset --list-presets" -- "$cur" ) ) + _filedir -d + return + ;; + --install|--open) + _filedir -d + return + ;; + -E) + COMPREPLY=( $( compgen -W "$( cmake -E help |& sed -n \ + '/^ [^ ]/{s|^ \([^ ]\{1,\}\) .*$|\1|;p}' 2>/dev/null )" \ + -- "$cur" ) ) + return + ;; + -G) + local IFS=$'\n' + local quoted + printf -v quoted %q "$cur" + COMPREPLY=( $( compgen -W '$( cmake --help 2>/dev/null | sed -n \ + -e "1,/^Generators/d" \ + -e "/^ *[^ =]/{s|^ *\([^=]*[^ =]\).*$|\1|;s| |\\\\ |g;p}" \ + 2>/dev/null )' -- "$quoted" ) ) + return + ;; + --loglevel) + COMPREPLY=( $(compgen -W 'error warning notice status verbose debug trace' -- $cur ) ) + ;; + --help-command) + COMPREPLY=( $( compgen -W '$( cmake --help-command-list 2>/dev/null| + grep -v "^cmake version " )' -- "$cur" ) ) + return + ;; + --help-manual) + COMPREPLY=( $( compgen -W '$( cmake --help-manual-list 2>/dev/null| + grep -v "^cmake version " | sed -e "s/([0-9])$//" )' -- "$cur" ) ) + return + ;; + --help-module) + COMPREPLY=( $( compgen -W '$( cmake --help-module-list 2>/dev/null| + grep -v "^cmake version " )' -- "$cur" ) ) + return + ;; + --help-policy) + COMPREPLY=( $( compgen -W '$( cmake --help-policy-list 2>/dev/null | + grep -v "^cmake version " )' -- "$cur" ) ) + return + ;; + --help-property) + COMPREPLY=( $( compgen -W '$( cmake --help-property-list \ + 2>/dev/null | grep -v "^cmake version " )' -- "$cur" ) ) + return + ;; + --help-variable) + COMPREPLY=( $( compgen -W '$( cmake --help-variable-list \ + 2>/dev/null | grep -v "^cmake version " )' -- "$cur" ) ) + return + ;; + --list-presets) + local IFS=$'\n' + local quoted + printf -v quoted %q "$cur" + + if [[ ! "${IFS}${COMP_WORDS[*]}${IFS}" =~ "${IFS}--build${IFS}" ]]; then + COMPREPLY=( + $( compgen -W "configure${IFS}build${IFS}package${IFS}test${IFS}workflow${IFS}all" -- "$quoted" ) + ) + fi + return + ;; + --preset) + local IFS=$'\n' + local quoted + printf -v quoted %q "$cur" + + local preset_type + if [[ "${IFS}${COMP_WORDS[*]}${IFS}" =~ "${IFS}--workflow${IFS}" ]]; then + preset_type="workflow" + elif [[ "${IFS}${COMP_WORDS[*]}${IFS}" =~ "${IFS}--build${IFS}" ]]; then + preset_type="build" + else + preset_type="configure" + fi + + local presets=$( cmake --list-presets="$preset_type" 2>/dev/null | + grep -o "^ \".*\"" | sed \ + -e "s/^ //g" \ + -e "s/\"//g" \ + -e 's/ /\\\\ /g' ) + COMPREPLY=( $( compgen -W "$presets" -- "$quoted" ) ) + return + ;; + --workflow) + local quoted + printf -v quoted %q "$cur" + # Options allowed right after `--workflow` + local workflow_options='--preset --list-presets --fresh' + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$workflow_options" -- "$quoted" ) ) + else + local presets=$( cmake --list-presets=workflow 2>/dev/null | + grep -o "^ \".*\"" | sed \ + -e "s/^ //g" \ + -e "s/\"//g" \ + -e 's/ /\\\\ /g' ) + COMPREPLY=( $( compgen -W "$presets $workflow_options" -- "$quoted" ) ) + fi + return + ;; + esac + + if ($is_old_completion || $is_init_completion); then + $split && return + else + [[ $was_split ]] && return + fi + + if [[ "$cur" == -* ]]; then + # FIXME(#26100): `cmake --help` is missing some options and does not + # have any mode-specific options like `cmake --build`'s `--config`. + COMPREPLY=( $(compgen -W '$( _parse_help "$1" --help )' -- ${cur}) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + [[ $COMPREPLY ]] && return + fi + + _filedir +} && +complete -F _cmake cmake + +# ex: ts=4 sw=4 et filetype=sh diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/cpack b/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/cpack new file mode 100644 index 0000000..5fc47ab --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/cpack @@ -0,0 +1,90 @@ +# bash completion for cpack(1) -*- shell-script -*- + +_cpack() +{ + local cur prev words cword + if type -t _comp_initialize >/dev/null; then + _comp_initialize -n = || return + elif type -t _init_completion >/dev/null; then + _init_completion -n = || return + else + # manual initialization for older bash completion versions + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + fi + + case "$prev" in + -G) + COMPREPLY=( $( compgen -W '$( cpack --help 2>/dev/null | + sed -e "1,/^Generators/d" -e "s|^ *\([^ ]*\) .*$|\1|" \ + 2>/dev/null )' -- "$cur" ) ) + return + ;; + -C) + COMPREPLY=( $( compgen -W 'Debug Release RelWithDebInfo + MinSizeRel' -- "$cur" ) ) + return + ;; + -D) + [[ $cur == *=* ]] && return # no completion for values + COMPREPLY=( $( compgen -W '$( cpack --help-variable-list \ + 2>/dev/null | grep -v "^cpack version " )' -S = -- "$cur" ) ) + compopt -o nospace + return + ;; + -P|-R|--vendor) + # argument required but no completions available + return + ;; + -B) + _filedir -d + return + ;; + --config) + _filedir + return + ;; + --help-command) + COMPREPLY=( $( compgen -W '$( cpack --help-command-list 2>/dev/null| + grep -v "^cpack version " )' -- "$cur" ) ) + return + ;; + --help-manual) + COMPREPLY=( $( compgen -W '$( cpack --help-manual-list 2>/dev/null| + grep -v "^cpack version " | sed -e "s/([0-9])$//" )' -- "$cur" ) ) + return + ;; + --help-module) + COMPREPLY=( $( compgen -W '$( cpack --help-module-list 2>/dev/null| + grep -v "^cpack version " )' -- "$cur" ) ) + return + ;; + --help-policy) + COMPREPLY=( $( compgen -W '$( cpack --help-policy-list 2>/dev/null | + grep -v "^cpack version " )' -- "$cur" ) ) + return + ;; + --help-property) + COMPREPLY=( $( compgen -W '$( cpack --help-property-list \ + 2>/dev/null | grep -v "^cpack version " )' -- "$cur" ) ) + return + ;; + --help-variable) + COMPREPLY=( $( compgen -W '$( cpack --help-variable-list \ + 2>/dev/null | grep -v "^cpack version " )' -- "$cur" ) ) + return + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $(compgen -W '$( _parse_help "$1" --help )' -- ${cur}) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + [[ $COMPREPLY ]] && return + fi + + _filedir +} && +complete -F _cpack cpack + +# ex: ts=4 sw=4 et filetype=sh diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/ctest b/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/ctest new file mode 100644 index 0000000..51cc682 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/bash-completion/completions/ctest @@ -0,0 +1,131 @@ +# bash completion for ctest(1) -*- shell-script -*- + +_ctest() +{ + local cur prev words cword + if type -t _comp_initialize >/dev/null; then + _comp_initialize -n = || return + elif type -t _init_completion >/dev/null; then + _init_completion -n = || return + else + # manual initialization for older bash completion versions + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + fi + + case "$prev" in + -C|--build-config) + COMPREPLY=( $( compgen -W 'Debug Release RelWithDebInfo + MinSizeRel' -- "$cur" ) ) + return + ;; + -j|--parallel) + COMPREPLY=( $( compgen -W "{1..$(( $(_ncpus)*2 ))}" -- "$cur" ) ) + return + ;; + -O|--output-log|-A|--add-notes|--extra-submit) + _filedir + return + ;; + -L|--label-regex|-LE|--label-exclude) + COMPREPLY=( $( compgen -W '$( ctest --print-labels 2>/dev/null | + grep "^ " 2>/dev/null | cut -d" " -f 3 )' -- "$cur" ) ) + return + ;; + --track|-I|--tests-information|--max-width|--timeout|--stop-time) + # argument required but no completions available + return + ;; + -R|--tests-regex|-E|--exclude-regex) + COMPREPLY=( $( compgen -W '$( ctest -N 2>/dev/null | + grep "^ Test" 2>/dev/null | cut -d: -f 2 )' -- "$cur" ) ) + return + ;; + -D|--dashboard) + if [[ $cur == @(Experimental|Nightly|Continuous)* ]]; then + local model action + action=${cur#@(Experimental|Nightly|Continuous)} + model=${cur%"$action"} + COMPREPLY=( $( compgen -W 'Start Update Configure Build Test + Coverage Submit MemCheck' -P "$model" -- "$action" ) ) + else + COMPREPLY=( $( compgen -W 'Experimental Nightly Continuous' \ + -- "$cur" ) ) + compopt -o nospace + fi + return + ;; + -M|--test-model) + COMPREPLY=( $( compgen -W 'Experimental Nightly Continuous' -- \ + "$cur" ) ) + return + ;; + -T|--test-action) + COMPREPLY=( $( compgen -W 'Start Update Configure Build Test + Coverage Submit MemCheck' -- "$cur" ) ) + return + ;; + -S|--script|-SP|--script-new-process) + _filedir '@(cmake|ctest)' + return + ;; + --interactive-debug-mode) + COMPREPLY=( $( compgen -W '0 1' -- "$cur" ) ) + return + ;; + + --help-command) + COMPREPLY=( $( compgen -W '$( ctest --help-command-list 2>/dev/null| + grep -v "^ctest version " )' -- "$cur" ) ) + return + ;; + --help-manual) + COMPREPLY=( $( compgen -W '$( ctest --help-manual-list 2>/dev/null| + grep -v "^ctest version " | sed -e "s/([0-9])$//" )' -- "$cur" ) ) + return + ;; + --help-module) + COMPREPLY=( $( compgen -W '$( ctest --help-module-list 2>/dev/null| + grep -v "^ctest version " )' -- "$cur" ) ) + return + ;; + --help-policy) + COMPREPLY=( $( compgen -W '$( ctest --help-policy-list 2>/dev/null | + grep -v "^ctest version " )' -- "$cur" ) ) + return + ;; + --help-property) + COMPREPLY=( $( compgen -W '$( ctest --help-property-list \ + 2>/dev/null | grep -v "^ctest version " )' -- "$cur" ) ) + return + ;; + --help-variable) + COMPREPLY=( $( compgen -W '$( ctest --help-variable-list \ + 2>/dev/null | grep -v "^ctest version " )' -- "$cur" ) ) + return + ;; + --preset) + local IFS=$'\n' + local quoted + printf -v quoted %q "$cur" + COMPREPLY=( $( compgen -W '$( ctest --list-presets 2>/dev/null | + grep -o "^ \".*\"" | sed \ + -e "s/^ //g" \ + -e "s/\"//g" \ + -e "s/ /\\\\ /g" )' -- "$quoted" ) ) + return + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $(compgen -W '$( _parse_help "$1" --help )' -- ${cur}) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + [[ $COMPREPLY ]] && return + fi + + _filedir +} && +complete -F _ctest ctest + +# ex: ts=4 sw=4 et filetype=sh diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/DEPRECATED_POLICY_VERSIONS.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/DEPRECATED_POLICY_VERSIONS.txt new file mode 100644 index 0000000..f5104d3 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/DEPRECATED_POLICY_VERSIONS.txt @@ -0,0 +1,23 @@ +.. versionchanged:: 3.31 + + Compatibility with versions of CMake older than 3.10 is deprecated. + Calls to :command:`cmake_minimum_required(VERSION)` or + :command:`cmake_policy(VERSION)` that do not specify at least + 3.10 as their policy version (optionally via ``...``) + will produce a deprecation warning in CMake 3.31 and above. + +.. versionchanged:: 3.27 + + Compatibility with versions of CMake older than 3.5 is deprecated. + Calls to :command:`cmake_minimum_required(VERSION)` or + :command:`cmake_policy(VERSION)` that do not specify at least + 3.5 as their policy version (optionally via ``...``) + will produce a deprecation warning in CMake 3.27 and above. + +.. versionchanged:: 3.19 + + Compatibility with versions of CMake older than 2.8.12 is deprecated. + Calls to :command:`cmake_minimum_required(VERSION)` or + :command:`cmake_policy(VERSION)` that do not specify at least + 2.8.12 as their policy version (optionally via ``...``) + will produce a deprecation warning in CMake 3.19 and above. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/DEVICE_LINK_OPTIONS.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/DEVICE_LINK_OPTIONS.txt new file mode 100644 index 0000000..878754d --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/DEVICE_LINK_OPTIONS.txt @@ -0,0 +1,12 @@ +Host And Device Specific Link Options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.18 + When a device link step is involved, which is controlled by + :prop_tgt:`CUDA_SEPARABLE_COMPILATION` and + :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties and policy :policy:`CMP0105`, + the raw options will be delivered to the host and device link steps (wrapped in + ``-Xcompiler`` or equivalent for device link). Options wrapped with + :genex:`$` generator expression will be used + only for the device link step. Options wrapped with :genex:`$` + generator expression will be used only for the host link step. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX.txt new file mode 100644 index 0000000..56c77c1 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX.txt @@ -0,0 +1,253 @@ +A short-hand signature is: + +.. parsed-literal:: + + |FIND_XXX| ( name1 [path1 path2 ...]) + +The general signature is: + +.. parsed-literal:: + + |FIND_XXX| ( + + name | |NAMES| + [HINTS [path | ENV var]... ] + [PATHS [path | ENV var]... ] + [REGISTRY_VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)] + [PATH_SUFFIXES suffix1 [suffix2 ...]] + [VALIDATOR function] + [DOC "cache documentation string"] + [NO_CACHE] + [REQUIRED] + [NO_DEFAULT_PATH] + [NO_PACKAGE_ROOT_PATH] + [NO_CMAKE_PATH] + [NO_CMAKE_ENVIRONMENT_PATH] + [NO_SYSTEM_ENVIRONMENT_PATH] + [NO_CMAKE_SYSTEM_PATH] + [NO_CMAKE_INSTALL_PREFIX] + [CMAKE_FIND_ROOT_PATH_BOTH | + ONLY_CMAKE_FIND_ROOT_PATH | + NO_CMAKE_FIND_ROOT_PATH] + ) + +This command is used to find a |SEARCH_XXX_DESC|. +A cache entry, or a normal variable if ``NO_CACHE`` is specified, +named by ```` is created to store the result of this command. +If the |SEARCH_XXX| is found the result is stored in the variable +and the search will not be repeated unless the variable is cleared. +If nothing is found, the result will be ``-NOTFOUND``. + +Options include: + +``NAMES`` + Specify one or more possible names for the |SEARCH_XXX|. + + When using this to specify names with and without a version + suffix, we recommend specifying the unversioned name first + so that locally-built packages can be found before those + provided by distributions. + +``HINTS``, ``PATHS`` + Specify directories to search in addition to the default locations. + The ``ENV var`` sub-option reads paths from a system environment + variable. + + .. versionchanged:: 3.24 + On ``Windows`` platform, it is possible to include registry queries as part + of the directories, using a :ref:`dedicated syntax `. + Such specifications will be ignored on all other platforms. + +``REGISTRY_VIEW`` + .. versionadded:: 3.24 + + .. include:: FIND_XXX_REGISTRY_VIEW.txt + +``PATH_SUFFIXES`` + Specify additional subdirectories to check below each directory + location otherwise considered. + +``VALIDATOR`` + .. versionadded:: 3.25 + + Specify a :command:`function` to be called for each candidate item found + (a :command:`macro` cannot be provided, that will result in an error). + Two arguments will be passed to the validator function: the name of a + result variable, and the absolute path to the candidate item. The item + will be accepted and the search will end unless the function sets the + value in the result variable to false in the calling scope. The result + variable will hold a true value when the validator function is entered. + + .. parsed-literal:: + + function(my_check validator_result_var item) + if(NOT item MATCHES ...) + set(${validator_result_var} FALSE PARENT_SCOPE) + endif() + endfunction() + + |FIND_XXX| (result NAMES ... VALIDATOR my_check) + + Note that if a cached result is used, the search is skipped and any + ``VALIDATOR`` is ignored. The cached result is not required to pass the + validation function. + +``DOC`` + Specify the documentation string for the ```` cache entry. + +``NO_CACHE`` + .. versionadded:: 3.21 + + The result of the search will be stored in a normal variable rather than + a cache entry. + + .. note:: + + If the variable is already set before the call (as a normal or cache + variable) then the search will not occur. + + .. warning:: + + This option should be used with caution because it can greatly increase + the cost of repeated configure steps. + +``REQUIRED`` + .. versionadded:: 3.18 + + Stop processing with an error message if nothing is found, otherwise + the search will be attempted again the next time |FIND_XXX| is invoked + with the same variable. + +If ``NO_DEFAULT_PATH`` is specified, then no additional paths are +added to the search. +If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows: + +.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR| replace:: + |prefix_XXX_SUBDIR| for each ```` in the + :variable:`_ROOT` CMake variable and the + :envvar:`_ROOT` environment variable if + called from within a find module loaded by + :command:`find_package()` + +.. |CMAKE_PREFIX_PATH_XXX_SUBDIR| replace:: + |prefix_XXX_SUBDIR| for each ```` in :variable:`CMAKE_PREFIX_PATH` + +.. |ENV_CMAKE_PREFIX_PATH_XXX_SUBDIR| replace:: + |prefix_XXX_SUBDIR| for each ```` in :envvar:`CMAKE_PREFIX_PATH` + +.. |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR| replace:: + |prefix_XXX_SUBDIR| for each ``/[s]bin`` in ``PATH``, and + |entry_XXX_SUBDIR| for other entries in ``PATH`` + +.. |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR| replace:: + |prefix_XXX_SUBDIR| for each ```` in + :variable:`CMAKE_SYSTEM_PREFIX_PATH` + +1. If called from within a find module or any other script loaded by a call to + :command:`find_package()`, search prefixes unique to the + current package being found. See policy :policy:`CMP0074`. + + .. versionadded:: 3.12 + + Specifically, search paths specified by the following variables, in order: + + a. :variable:`_ROOT` CMake variable, + where ```` is the case-preserved package name. + + b. :variable:`_ROOT` CMake variable, + where ```` is the upper-cased package name. + See policy :policy:`CMP0144`. + + .. versionadded:: 3.27 + + c. :envvar:`_ROOT` environment variable, + where ```` is the case-preserved package name. + + d. :envvar:`_ROOT` environment variable, + where ```` is the upper-cased package name. + See policy :policy:`CMP0144`. + + .. versionadded:: 3.27 + + The package root variables are maintained as a stack, so if called from + nested find modules or config packages, root paths from the parent's find + module or config package will be searched after paths from the current + module or package. In other words, the search order would be + ``_ROOT``, ``ENV{_ROOT}``, + ``_ROOT``, ``ENV{_ROOT}``, etc. + This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed or by setting + the :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` to ``FALSE``. + + * |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| + +2. Search paths specified in cmake-specific cache variables. + These are intended to be used on the command line with a ``-DVAR=value``. + The values are interpreted as :ref:`semicolon-separated lists `. + This can be skipped if ``NO_CMAKE_PATH`` is passed or by setting the + :variable:`CMAKE_FIND_USE_CMAKE_PATH` to ``FALSE``. + + * |CMAKE_PREFIX_PATH_XXX| + * |CMAKE_XXX_PATH| + * |CMAKE_XXX_MAC_PATH| + +3. Search paths specified in cmake-specific environment variables. + These are intended to be set in the user's shell configuration, + and therefore use the host's native path separator + (``;`` on Windows and ``:`` on UNIX). + This can be skipped if ``NO_CMAKE_ENVIRONMENT_PATH`` is passed or + by setting the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` to ``FALSE``. + + * |ENV_CMAKE_PREFIX_PATH_XXX| + * |ENV_CMAKE_XXX_PATH| + * |ENV_CMAKE_XXX_MAC_PATH| + +4. Search the paths specified by the ``HINTS`` option. + These should be paths computed by system introspection, such as a + hint provided by the location of another item already found. + Hard-coded guesses should be specified with the ``PATHS`` option. + +5. Search the standard system environment variables. + This can be skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed or by + setting the :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` to ``FALSE``. + + * |SYSTEM_ENVIRONMENT_PATH_XXX| + + |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| + +6. Search cmake variables defined in the Platform files + for the current system. The searching of ``CMAKE_INSTALL_PREFIX`` and + ``CMAKE_STAGING_PREFIX`` can be + skipped if ``NO_CMAKE_INSTALL_PREFIX`` is passed or by setting the + :variable:`CMAKE_FIND_USE_INSTALL_PREFIX` to ``FALSE``. All these locations + can be skipped if ``NO_CMAKE_SYSTEM_PATH`` is passed or by setting the + :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH` to ``FALSE``. + + * |CMAKE_SYSTEM_PREFIX_PATH_XXX| + * |CMAKE_SYSTEM_XXX_PATH| + * |CMAKE_SYSTEM_XXX_MAC_PATH| + + The platform paths that these variables contain are locations that + typically include installed software. An example being ``/usr/local`` for + UNIX based platforms. + +7. Search the paths specified by the PATHS option + or in the short-hand version of the command. + These are typically hard-coded guesses. + +The :variable:`CMAKE_IGNORE_PATH`, :variable:`CMAKE_IGNORE_PREFIX_PATH`, +:variable:`CMAKE_SYSTEM_IGNORE_PATH` and +:variable:`CMAKE_SYSTEM_IGNORE_PREFIX_PATH` variables can also cause some +of the above locations to be ignored. + +.. versionadded:: 3.16 + Added ``CMAKE_FIND_USE__PATH`` variables to globally disable + various search locations. + +.. |FIND_ARGS_XXX| replace:: NAMES name + +On macOS the :variable:`CMAKE_FIND_FRAMEWORK` and +:variable:`CMAKE_FIND_APPBUNDLE` variables determine the order of +preference between Apple-style and unix-style package components. + +.. include:: FIND_XXX_ROOT.txt +.. include:: FIND_XXX_ORDER.txt diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ORDER.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ORDER.txt new file mode 100644 index 0000000..bac2419 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ORDER.txt @@ -0,0 +1,12 @@ +The default search order is designed to be most-specific to +least-specific for common use cases. +Projects may override the order by simply calling the command +multiple times and using the ``NO_*`` options: + +.. parsed-literal:: + + |FIND_XXX| (|FIND_ARGS_XXX| PATHS paths... NO_DEFAULT_PATH) + |FIND_XXX| (|FIND_ARGS_XXX|) + +Once one of the calls succeeds the result variable will be set +and stored in the cache so that no call will search again. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_REGISTRY_VIEW.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_REGISTRY_VIEW.txt new file mode 100644 index 0000000..6cab1d1 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_REGISTRY_VIEW.txt @@ -0,0 +1,41 @@ +Specify which registry views must be queried. This option is only meaningful +on ``Windows`` platforms and will be ignored on other ones. When not +specified, the |FIND_XXX_REGISTRY_VIEW_DEFAULT| view is used when the +:policy:`CMP0134` policy is ``NEW``. Refer to :policy:`CMP0134` for the +default view when the policy is ``OLD``. + +``64`` + Query the 64-bit registry. On 32-bit Windows, it always returns the string + ``/REGISTRY-NOTFOUND``. + +``32`` + Query the 32-bit registry. + +``64_32`` + Query both views (``64`` and ``32``) and generate a path for each. + +``32_64`` + Query both views (``32`` and ``64``) and generate a path for each. + +``HOST`` + Query the registry matching the architecture of the host: ``64`` on 64-bit + Windows and ``32`` on 32-bit Windows. + +``TARGET`` + Query the registry matching the architecture specified by the + :variable:`CMAKE_SIZEOF_VOID_P` variable. If not defined, fall back to + ``HOST`` view. + +``BOTH`` + Query both views (``32`` and ``64``). The order depends on the following + rules: If the :variable:`CMAKE_SIZEOF_VOID_P` variable is defined, use the + following view depending on the content of this variable: + + * ``8``: ``64_32`` + * ``4``: ``32_64`` + + If the :variable:`CMAKE_SIZEOF_VOID_P` variable is not defined, rely on the + architecture of the host: + + * 64-bit: ``64_32`` + * 32-bit: ``32`` diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ROOT.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ROOT.txt new file mode 100644 index 0000000..fab2303 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/FIND_XXX_ROOT.txt @@ -0,0 +1,29 @@ +The CMake variable :variable:`CMAKE_FIND_ROOT_PATH` specifies one or more +directories to be prepended to all other search directories. This +effectively "re-roots" the entire search under given locations. +Paths which are descendants of the :variable:`CMAKE_STAGING_PREFIX` are excluded +from this re-rooting, because that variable is always a path on the host system. +By default the :variable:`CMAKE_FIND_ROOT_PATH` is empty. + +The :variable:`CMAKE_SYSROOT` variable can also be used to specify exactly one +directory to use as a prefix. Setting :variable:`CMAKE_SYSROOT` also has other +effects. See the documentation for that variable for more. + +These variables are especially useful when cross-compiling to +point to the root directory of the target environment and CMake will +search there too. By default at first the directories listed in +:variable:`CMAKE_FIND_ROOT_PATH` are searched, then the :variable:`CMAKE_SYSROOT` +directory is searched, and then the non-rooted directories will be +searched. The default behavior can be adjusted by setting +|CMAKE_FIND_ROOT_PATH_MODE_XXX|. This behavior can be manually +overridden on a per-call basis using options: + +``CMAKE_FIND_ROOT_PATH_BOTH`` + Search in the order described above. + +``NO_CMAKE_FIND_ROOT_PATH`` + Do not use the :variable:`CMAKE_FIND_ROOT_PATH` variable. + +``ONLY_CMAKE_FIND_ROOT_PATH`` + Search only the re-rooted directories and directories below + :variable:`CMAKE_STAGING_PREFIX`. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/GENEX_NOTE.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/GENEX_NOTE.txt new file mode 100644 index 0000000..4a7906c --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/GENEX_NOTE.txt @@ -0,0 +1,6 @@ +.. |more_see_also| replace:: See the :manual:`cmake-buildsystem(7)` manual + for more on defining buildsystem properties. + +Arguments to |command_name| may use generator expressions +with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)` +manual for available expressions. |more_see_also| diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/LINK_OPTIONS_LINKER.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/LINK_OPTIONS_LINKER.txt new file mode 100644 index 0000000..e71e5ea --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/LINK_OPTIONS_LINKER.txt @@ -0,0 +1,25 @@ +Handling Compiler Driver Differences +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To pass options to the linker tool, each compiler driver has its own syntax. +The ``LINKER:`` prefix and ``,`` separator can be used to specify, in a portable +way, options to pass to the linker tool. ``LINKER:`` is replaced by the +appropriate driver option and ``,`` by the appropriate driver separator. +The driver prefix and driver separator are given by the values of the +:variable:`CMAKE__LINKER_WRAPPER_FLAG` and +:variable:`CMAKE__LINKER_WRAPPER_FLAG_SEP` variables. + +For example, ``"LINKER:-z,defs"`` becomes ``-Xlinker -z -Xlinker defs`` for +``Clang`` and ``-Wl,-z,defs`` for ``GNU GCC``. + +The ``LINKER:`` prefix can be specified as part of a ``SHELL:`` prefix +expression. + +The ``LINKER:`` prefix supports, as an alternative syntax, specification of +arguments using the ``SHELL:`` prefix and space as separator. The previous +example then becomes ``"LINKER:SHELL:-z defs"``. + +.. note:: + + Specifying the ``SHELL:`` prefix anywhere other than at the beginning of the + ``LINKER:`` prefix is not supported. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/OPTIONS_SHELL.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/OPTIONS_SHELL.txt new file mode 100644 index 0000000..4171f01 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/OPTIONS_SHELL.txt @@ -0,0 +1,15 @@ +Option De-duplication +^^^^^^^^^^^^^^^^^^^^^ + +The final set of options used for a target is constructed by +accumulating options from the current target and the usage requirements of +its dependencies. The set of options is de-duplicated to avoid repetition. + +.. versionadded:: 3.12 + While beneficial for individual options, the de-duplication step can break + up option groups. For example, ``-option A -option B`` becomes + ``-option A B``. One may specify a group of options using shell-like + quoting along with a ``SHELL:`` prefix. The ``SHELL:`` prefix is dropped, + and the rest of the option string is parsed using the + :command:`separate_arguments` ``UNIX_COMMAND`` mode. For example, + ``"SHELL:-option A" "SHELL:-option B"`` becomes ``-option A -option B``. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/SUPPORTED_LANGUAGES.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/SUPPORTED_LANGUAGES.txt new file mode 100644 index 0000000..a98c07a --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/SUPPORTED_LANGUAGES.txt @@ -0,0 +1,25 @@ + +Supported languages are ``C``, ``CXX`` (i.e. C++), ``CSharp`` (i.e. C#), ``CUDA``, +``OBJC`` (i.e. Objective-C), ``OBJCXX`` (i.e. Objective-C++), ``Fortran``, ``HIP``, +``ISPC``, ``Swift``, ``ASM``, ``ASM_NASM``, ``ASM_MARMASM``, ``ASM_MASM``, and ``ASM-ATT``. + + .. versionadded:: 3.8 + Added ``CSharp`` and ``CUDA`` support. + + .. versionadded:: 3.15 + Added ``Swift`` support. + + .. versionadded:: 3.16 + Added ``OBJC`` and ``OBJCXX`` support. + + .. versionadded:: 3.18 + Added ``ISPC`` support. + + .. versionadded:: 3.21 + Added ``HIP`` support. + + .. versionadded:: 3.26 + Added ``ASM_MARMASM`` support. + +If enabling ``ASM``, list it last so that CMake can check whether +compilers for other languages like ``C`` work for assembly too. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/UNSET_NOTE.txt b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/UNSET_NOTE.txt new file mode 100644 index 0000000..8dc9125 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/UNSET_NOTE.txt @@ -0,0 +1,9 @@ +.. note:: + + When evaluating :ref:`Variable References` of the form ``${VAR}``, CMake + first searches for a normal variable with that name. If no such normal + variable exists, CMake will then search for a cache entry with that name. + Because of this, **unsetting a normal variable can expose a cache variable + that was previously hidden**. To force a variable reference of the form + ``${VAR}`` to return an empty string, use ``set( "")``, which + clears the normal variable but leaves it defined. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/add_compile_definitions.rst b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/add_compile_definitions.rst new file mode 100644 index 0000000..b2eb2af --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/add_compile_definitions.rst @@ -0,0 +1,33 @@ +add_compile_definitions +----------------------- + +.. versionadded:: 3.12 + +Add preprocessor definitions to the compilation of source files. + +.. code-block:: cmake + + add_compile_definitions( ...) + +Adds preprocessor definitions to the compiler command line. + +The preprocessor definitions are added to the :prop_dir:`COMPILE_DEFINITIONS` +directory property for the current ``CMakeLists`` file. They are also added to +the :prop_tgt:`COMPILE_DEFINITIONS` target property for each target in the +current ``CMakeLists`` file. + +Definitions are specified using the syntax ``VAR`` or ``VAR=value``. +Function-style definitions are not supported. CMake will automatically +escape the value correctly for the native build system (note that CMake +language syntax may require escapes to specify some values). + +.. versionadded:: 3.26 + Any leading ``-D`` on an item will be removed. + +.. |command_name| replace:: ``add_compile_definitions`` +.. include:: GENEX_NOTE.txt + +See Also +^^^^^^^^ + +* The command :command:`target_compile_definitions` adds target-specific definitions. diff --git a/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/add_compile_options.rst b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/add_compile_options.rst new file mode 100644 index 0000000..869d0c2 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/cmake/data/share/cmake-3.31/Help/command/add_compile_options.rst @@ -0,0 +1,67 @@ +add_compile_options +------------------- + +Add options to the compilation of source files. + +.. code-block:: cmake + + add_compile_options(