From 76614bb012dafc5bc7c01917b5d766a693b933cc Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:06:28 +0200 Subject: [PATCH 01/23] Add DOI and pypi info to docs --- CHANGELOG | 9 +++++++++ README.md | 7 +++++++ docs/source/acknowledge.rst | 5 +++-- docs/source/index.rst | 7 +------ docs/source/installation.rst | 10 +++------- docs/source/substitutions.rst | 3 +++ setup.py | 11 ++++++++--- 7 files changed, 34 insertions(+), 18 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2265248c..de0006b2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -12,6 +12,15 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Removed: ### Security: +## [v1.0.1] +### Added: + - [fpavogt, 24.07.2023] Add DOI & pypi info to docs following first public release +### Fixed: +### Changed: +### Deprecated: +### Removed: +### Security: + ## [v1.0.0] ### Added: - [fpavogt, 24.07.2023] Add new pypi CI action for automated release diff --git a/README.md b/README.md index e2f93c98..4589254e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +[![copyright](https://img.shields.io/badge/MeteoSwiss-%C2%A9_2020--2023-black?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiICAgd2lkdGg9Ijc3LjI2Njk5OHB0IiAgIGhlaWdodD0iODUuNTQ1NDcxcHQiICAgdmlld0JveD0iMCAwIDc3LjI2Njk5NCA4NS41NDU0NzMiICAgdmVyc2lvbj0iMS4yIiAgIGlkPSJzdmcyODciICAgc29kaXBvZGk6ZG9jbmFtZT0iU2hpZWxkX3JnYl9wb3NfRU4uc3ZnIiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMiA1YzNlODBkLCAyMDE3LTA4LTA2IiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL1VzZXJzL2Z2b2d0L1Byb2plY3RzL2N1cnJlbnQvTUNIL1NFVC9TaGllbGRfcmdiX3Bvc19FTi5wbmciICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjI5OTkuNjY3NyIgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMjk5OS42Njc3Ij4gIDxtZXRhZGF0YSAgICAgaWQ9Im1ldGFkYXRhMjkxIj4gICAgPHJkZjpSREY+ICAgICAgPGNjOldvcmsgICAgICAgICByZGY6YWJvdXQ9IiI+ICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4gICAgICAgIDxkYzp0eXBlICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+ICAgICAgPC9jYzpXb3JrPiAgICA8L3JkZjpSREY+ICA8L21ldGFkYXRhPiAgPHNvZGlwb2RpOm5hbWVkdmlldyAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiICAgICBib3JkZXJvcGFjaXR5PSIxIiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIgICAgIGdyaWR0b2xlcmFuY2U9IjEwIiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzMyIiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzkwIiAgICAgaWQ9Im5hbWVkdmlldzI4OSIgICAgIHNob3dncmlkPSJmYWxzZSIgICAgIGZpdC1tYXJnaW4tdG9wPSIwIiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIgICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAgICAgaW5rc2NhcGU6em9vbT0iMi4yMDMwNTA3IiAgICAgaW5rc2NhcGU6Y3g9IjEzNS42OTUzMyIgICAgIGlua3NjYXBlOmN5PSIyNi4yMjE0NDQiICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNDkiICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMTIiICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMjg3IiAgICAgaW5rc2NhcGU6bWVhc3VyZS1zdGFydD0iMCwwIiAgICAgaW5rc2NhcGU6bWVhc3VyZS1lbmQ9IjAsMCIgLz4gIDxkZWZzICAgICBpZD0iZGVmczM4Ij4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMSI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDE1MywyIGggMi45ODgyOCBWIDggSCAxNTMgWiBtIDAsMCIgICAgICAgICBpZD0icGF0aDIiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMiI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDI5LDUzIGggNCB2IDYuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDUiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMyI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDQyLDU1IGggNCB2IDQuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDgiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwNCI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDQ2LDU1IGggMyB2IDQuMDUwNzgxIGggLTMgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDExIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDUiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA1Miw1MyBoIDUgdiA2LjA1MDc4MSBoIC01IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgxNCIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXA2Ij4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gNTcsNTUgaCA1IHYgNC4wNTA3ODEgaCAtNSB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMTciICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwNyI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDcwLDU1IGggNCB2IDQuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDIwIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDgiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA3NCw1MyBoIDUgdiA2LjA1MDc4MSBoIC01IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgyMyIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXA5Ij4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gNzksNTUgaCA0IHYgNC4wNTA3ODEgaCAtNCB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMjYiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMTAiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA4Nyw1NSBoIDQgdiA0LjA1MDc4MSBoIC00IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgyOSIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXAxMSI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDkxLDU0IGggMyB2IDUuMDUwNzgxIGggLTMgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDMyIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDEyIj4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gOTYsNTUgaCA1IHYgNC4wNTA3ODEgaCAtNSB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMzUiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gIDwvZGVmcz4gIDxnICAgICBpZD0iZzQzNyIgICAgIHRyYW5zZm9ybT0ic2NhbGUoMy42MjY5NjkzKSI+ICAgIDxwYXRoICAgICAgIHN0eWxlPSJmaWxsOiNlYjIxMmI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiICAgICAgIGQ9Ik0gMjEuMjY2OTY1LDEuNzM4MjgxOCBDIDIxLjI2Njk2NSwxLjczODI4MTggMTcuMjk4MjE1LDAgMTAuNjUzNjg0LDAgNC4wMDkxNTE5LDAgMC4wMzY0OTYwNywxLjczODI4MTggMC4wMzY0OTYwNywxLjczODI4MTggYyAwLDAgLTAuMzU1NDY4Miw3LjY5NTMxMiAxLjE1MjM0MzgzLDEyLjA0Njg3NDIgMi42NjAxNTYsNy42NTIzNDQgOS40NjA5MzgxLDkuODAwNzgyIDkuNDYwOTM4MSw5LjgwMDc4MiBoIDAuMDAzOSBjIDAsMCA2LjgwMDc4MSwtMi4xNDg0MzggOS40NjA5MzcsLTkuODAwNzgyIDEuNTA3ODE5LC00LjM1MTU2MjIgMS4xNTIzNSwtMTIuMDQ2ODc0MyAxLjE1MjM1LC0xMi4wNDY4NzQzIiAgICAgICBpZD0icGF0aDI4MiIgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPHBhdGggICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgICAgICAgZD0iTSAxNy43MDgzNzEsOC4zNzQ5OTk4IFYgMTIuNjEzMjgyIEggMTIuNzU5MTUyIFYgMTcuNTYyNSBIIDguNTIwODcwOSBWIDEyLjYxMzI4MiBIIDMuNTcxNjUxOSBWIDguMzc0OTk5OCBoIDQuOTQ5MjE5IHYgLTQuOTQ5MjE4IGggNC4yMzgyODExIHYgNC45NDkyMTggaCA0Ljk0OTIxOSIgICAgICAgaWQ9InBhdGgyODQiICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICA8L2c+PC9zdmc+)](https://www.meteoswiss.admin.ch) + +[![license](https://img.shields.io/badge/License-GPL%20(%3E%3D3)-black)](https://www.gnu.org/licenses/gpl-3.0.en.html) + +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8177528.svg)](https://doi.org/10.5281/zenodo.8177528) + +[![pypi](https://img.shields.io/pypi/v/dvas.svg?colorB=)](https://pypi.python.org/pypi/dvas/) # dvas: Data Visualization and Analysis Software diff --git a/docs/source/acknowledge.rst b/docs/source/acknowledge.rst index 155d14f9..81bc6a73 100644 --- a/docs/source/acknowledge.rst +++ b/docs/source/acknowledge.rst @@ -1,3 +1,4 @@ +.. include:: ./substitutions.rst Acknowledging dvas ================== @@ -6,9 +7,9 @@ Acknowledging dvas Ideally, you should also include the Digital Object Identifier (DOI) associated to the specific release you have been using: - dvas |version| (DOI:) + dvas |version| |doi| -2. If dvas was useful for your research, please cite the UAII FInal Report: +2. If dvas was useful for your research, please cite the UAII 2022 Final Report: .. todo:: diff --git a/docs/source/index.rst b/docs/source/index.rst index f71e2528..716d6a63 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -4,12 +4,7 @@ dvas |version| |stars| |watch| ============================== -|copyright| |license| |github| |pypi| |last-commit| |issues| - -.. todo:: - - Tags for the latest pypi release and associated DOI should be added when releasing the code - for the first time. These should also be added to the :ref:`acknowledge:Acknowledging dvas` page. +|copyright| |license| |github| |doi| |pypi| |last-commit| |issues| **Welcome to the dvas documentation !** diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 3aeaa969..429380c4 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -5,11 +5,7 @@ Installation ============ -.. todo:: - - Include a link to the pypi page in the very next sentence. - -dvas is available on pypi, which should make its installation straightforward. +dvas is available on |pypi|, which should make its installation straightforward. In a terminal, type: .. code-block:: python @@ -34,14 +30,14 @@ dvas is compatible with the following python versions: .. literalinclude:: ../../setup.py :language: python - :lines: 38 + :lines: 43 Furthermore, dvas relies on a few external modules, which will be automatically installed by ``pip`` if required: .. literalinclude:: ../../setup.py :language: python - :lines: 39-54 + :lines: 44-59 Testing the installation ------------------------ diff --git a/docs/source/substitutions.rst b/docs/source/substitutions.rst index 5dc6569c..0685695e 100644 --- a/docs/source/substitutions.rst +++ b/docs/source/substitutions.rst @@ -22,3 +22,6 @@ .. |copyright| image:: https://img.shields.io/badge/MeteoSwiss-%C2%A9_2020--2023-black?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiICAgd2lkdGg9Ijc3LjI2Njk5OHB0IiAgIGhlaWdodD0iODUuNTQ1NDcxcHQiICAgdmlld0JveD0iMCAwIDc3LjI2Njk5NCA4NS41NDU0NzMiICAgdmVyc2lvbj0iMS4yIiAgIGlkPSJzdmcyODciICAgc29kaXBvZGk6ZG9jbmFtZT0iU2hpZWxkX3JnYl9wb3NfRU4uc3ZnIiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMiA1YzNlODBkLCAyMDE3LTA4LTA2IiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL1VzZXJzL2Z2b2d0L1Byb2plY3RzL2N1cnJlbnQvTUNIL1NFVC9TaGllbGRfcmdiX3Bvc19FTi5wbmciICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjI5OTkuNjY3NyIgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMjk5OS42Njc3Ij4gIDxtZXRhZGF0YSAgICAgaWQ9Im1ldGFkYXRhMjkxIj4gICAgPHJkZjpSREY+ICAgICAgPGNjOldvcmsgICAgICAgICByZGY6YWJvdXQ9IiI+ICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4gICAgICAgIDxkYzp0eXBlICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+ICAgICAgPC9jYzpXb3JrPiAgICA8L3JkZjpSREY+ICA8L21ldGFkYXRhPiAgPHNvZGlwb2RpOm5hbWVkdmlldyAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiICAgICBib3JkZXJvcGFjaXR5PSIxIiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIgICAgIGdyaWR0b2xlcmFuY2U9IjEwIiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzMyIiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzkwIiAgICAgaWQ9Im5hbWVkdmlldzI4OSIgICAgIHNob3dncmlkPSJmYWxzZSIgICAgIGZpdC1tYXJnaW4tdG9wPSIwIiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIgICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAgICAgaW5rc2NhcGU6em9vbT0iMi4yMDMwNTA3IiAgICAgaW5rc2NhcGU6Y3g9IjEzNS42OTUzMyIgICAgIGlua3NjYXBlOmN5PSIyNi4yMjE0NDQiICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNDkiICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMTIiICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMjg3IiAgICAgaW5rc2NhcGU6bWVhc3VyZS1zdGFydD0iMCwwIiAgICAgaW5rc2NhcGU6bWVhc3VyZS1lbmQ9IjAsMCIgLz4gIDxkZWZzICAgICBpZD0iZGVmczM4Ij4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMSI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDE1MywyIGggMi45ODgyOCBWIDggSCAxNTMgWiBtIDAsMCIgICAgICAgICBpZD0icGF0aDIiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMiI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDI5LDUzIGggNCB2IDYuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDUiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMyI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDQyLDU1IGggNCB2IDQuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDgiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwNCI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDQ2LDU1IGggMyB2IDQuMDUwNzgxIGggLTMgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDExIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDUiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA1Miw1MyBoIDUgdiA2LjA1MDc4MSBoIC01IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgxNCIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXA2Ij4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gNTcsNTUgaCA1IHYgNC4wNTA3ODEgaCAtNSB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMTciICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwNyI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDcwLDU1IGggNCB2IDQuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDIwIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDgiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA3NCw1MyBoIDUgdiA2LjA1MDc4MSBoIC01IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgyMyIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXA5Ij4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gNzksNTUgaCA0IHYgNC4wNTA3ODEgaCAtNCB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMjYiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMTAiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA4Nyw1NSBoIDQgdiA0LjA1MDc4MSBoIC00IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgyOSIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXAxMSI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDkxLDU0IGggMyB2IDUuMDUwNzgxIGggLTMgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDMyIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDEyIj4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gOTYsNTUgaCA1IHYgNC4wNTA3ODEgaCAtNSB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMzUiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gIDwvZGVmcz4gIDxnICAgICBpZD0iZzQzNyIgICAgIHRyYW5zZm9ybT0ic2NhbGUoMy42MjY5NjkzKSI+ICAgIDxwYXRoICAgICAgIHN0eWxlPSJmaWxsOiNlYjIxMmI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiICAgICAgIGQ9Ik0gMjEuMjY2OTY1LDEuNzM4MjgxOCBDIDIxLjI2Njk2NSwxLjczODI4MTggMTcuMjk4MjE1LDAgMTAuNjUzNjg0LDAgNC4wMDkxNTE5LDAgMC4wMzY0OTYwNywxLjczODI4MTggMC4wMzY0OTYwNywxLjczODI4MTggYyAwLDAgLTAuMzU1NDY4Miw3LjY5NTMxMiAxLjE1MjM0MzgzLDEyLjA0Njg3NDIgMi42NjAxNTYsNy42NTIzNDQgOS40NjA5MzgxLDkuODAwNzgyIDkuNDYwOTM4MSw5LjgwMDc4MiBoIDAuMDAzOSBjIDAsMCA2LjgwMDc4MSwtMi4xNDg0MzggOS40NjA5MzcsLTkuODAwNzgyIDEuNTA3ODE5LC00LjM1MTU2MjIgMS4xNTIzNSwtMTIuMDQ2ODc0MyAxLjE1MjM1LC0xMi4wNDY4NzQzIiAgICAgICBpZD0icGF0aDI4MiIgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPHBhdGggICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgICAgICAgZD0iTSAxNy43MDgzNzEsOC4zNzQ5OTk4IFYgMTIuNjEzMjgyIEggMTIuNzU5MTUyIFYgMTcuNTYyNSBIIDguNTIwODcwOSBWIDEyLjYxMzI4MiBIIDMuNTcxNjUxOSBWIDguMzc0OTk5OCBoIDQuOTQ5MjE5IHYgLTQuOTQ5MjE4IGggNC4yMzgyODExIHYgNC45NDkyMTggaCA0Ljk0OTIxOSIgICAgICAgaWQ9InBhdGgyODQiICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICA8L2c+PC9zdmc+ :target: https://www.meteoswiss.admin.ch + +.. |doi| image:: https://zenodo.org/badge/260424764.svg + :target: https://zenodo.org/badge/latestdoi/260424764 diff --git a/setup.py b/setup.py index 618470d7..50d23812 100644 --- a/setup.py +++ b/setup.py @@ -29,10 +29,15 @@ # Tell setuptools packages are under src package_dir={"": "src"}, - url="https://github.com/MeteoSwiss/dvas", + url="https://meteoswiss.github.io/dvas", + project_urls={ + 'Source': 'https://github.com/MeteoSwiss/dvas/', + 'Changelog': 'https://meteoswiss.github.io/dvas/changelog.html', + 'Issues': 'https://github.com/MeteoSwiss/dvas/issues' + }, author="MeteoSwiss", author_email="", - description="Data Visualisation and Analysis Software for meteorological radiosounding", + description="Data Visualisation and Analysis Software for the UAII 2022 field campaign", long_description=long_description, long_description_content_type="text/markdown", python_requires='>=3.10.0', @@ -63,7 +68,7 @@ # 3 - Alpha # 4 - Beta # 5 - Production/Stable - 'Development Status :: 3 - Alpha', + 'Development Status :: 4 - Beta', # Indicate who your project is intended for 'Intended Audience :: Science/Research', 'Topic :: Scientific/Engineering :: Atmospheric Science', From b482de391aded0a8f49e5b2ac4ef7117a6ecd6a9 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:10:55 +0200 Subject: [PATCH 02/23] Cleanup README and boost version --- README.md | 11 +++-------- src/dvas/version.py | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 4589254e..6c86743c 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,13 @@ -[![copyright](https://img.shields.io/badge/MeteoSwiss-%C2%A9_2020--2023-black?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiICAgd2lkdGg9Ijc3LjI2Njk5OHB0IiAgIGhlaWdodD0iODUuNTQ1NDcxcHQiICAgdmlld0JveD0iMCAwIDc3LjI2Njk5NCA4NS41NDU0NzMiICAgdmVyc2lvbj0iMS4yIiAgIGlkPSJzdmcyODciICAgc29kaXBvZGk6ZG9jbmFtZT0iU2hpZWxkX3JnYl9wb3NfRU4uc3ZnIiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMiA1YzNlODBkLCAyMDE3LTA4LTA2IiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL1VzZXJzL2Z2b2d0L1Byb2plY3RzL2N1cnJlbnQvTUNIL1NFVC9TaGllbGRfcmdiX3Bvc19FTi5wbmciICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjI5OTkuNjY3NyIgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMjk5OS42Njc3Ij4gIDxtZXRhZGF0YSAgICAgaWQ9Im1ldGFkYXRhMjkxIj4gICAgPHJkZjpSREY+ICAgICAgPGNjOldvcmsgICAgICAgICByZGY6YWJvdXQ9IiI+ICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4gICAgICAgIDxkYzp0eXBlICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+ICAgICAgPC9jYzpXb3JrPiAgICA8L3JkZjpSREY+ICA8L21ldGFkYXRhPiAgPHNvZGlwb2RpOm5hbWVkdmlldyAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiICAgICBib3JkZXJvcGFjaXR5PSIxIiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIgICAgIGdyaWR0b2xlcmFuY2U9IjEwIiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzMyIiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzkwIiAgICAgaWQ9Im5hbWVkdmlldzI4OSIgICAgIHNob3dncmlkPSJmYWxzZSIgICAgIGZpdC1tYXJnaW4tdG9wPSIwIiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIgICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAgICAgaW5rc2NhcGU6em9vbT0iMi4yMDMwNTA3IiAgICAgaW5rc2NhcGU6Y3g9IjEzNS42OTUzMyIgICAgIGlua3NjYXBlOmN5PSIyNi4yMjE0NDQiICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNDkiICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMTIiICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMjg3IiAgICAgaW5rc2NhcGU6bWVhc3VyZS1zdGFydD0iMCwwIiAgICAgaW5rc2NhcGU6bWVhc3VyZS1lbmQ9IjAsMCIgLz4gIDxkZWZzICAgICBpZD0iZGVmczM4Ij4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMSI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDE1MywyIGggMi45ODgyOCBWIDggSCAxNTMgWiBtIDAsMCIgICAgICAgICBpZD0icGF0aDIiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMiI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDI5LDUzIGggNCB2IDYuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDUiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMyI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDQyLDU1IGggNCB2IDQuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDgiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwNCI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDQ2LDU1IGggMyB2IDQuMDUwNzgxIGggLTMgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDExIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDUiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA1Miw1MyBoIDUgdiA2LjA1MDc4MSBoIC01IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgxNCIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXA2Ij4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gNTcsNTUgaCA1IHYgNC4wNTA3ODEgaCAtNSB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMTciICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwNyI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDcwLDU1IGggNCB2IDQuMDUwNzgxIGggLTQgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDIwIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDgiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA3NCw1MyBoIDUgdiA2LjA1MDc4MSBoIC01IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgyMyIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXA5Ij4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gNzksNTUgaCA0IHYgNC4wNTA3ODEgaCAtNCB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMjYiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gICAgPGNsaXBQYXRoICAgICAgIGlkPSJjbGlwMTAiPiAgICAgIDxwYXRoICAgICAgICAgZD0ibSA4Nyw1NSBoIDQgdiA0LjA1MDc4MSBoIC00IHogbSAwLDAiICAgICAgICAgaWQ9InBhdGgyOSIgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPiAgICA8L2NsaXBQYXRoPiAgICA8Y2xpcFBhdGggICAgICAgaWQ9ImNsaXAxMSI+ICAgICAgPHBhdGggICAgICAgICBkPSJtIDkxLDU0IGggMyB2IDUuMDUwNzgxIGggLTMgeiBtIDAsMCIgICAgICAgICBpZD0icGF0aDMyIiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICAgIDwvY2xpcFBhdGg+ICAgIDxjbGlwUGF0aCAgICAgICBpZD0iY2xpcDEyIj4gICAgICA8cGF0aCAgICAgICAgIGQ9Im0gOTYsNTUgaCA1IHYgNC4wNTA3ODEgaCAtNSB6IG0gMCwwIiAgICAgICAgIGlkPSJwYXRoMzUiICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPC9jbGlwUGF0aD4gIDwvZGVmcz4gIDxnICAgICBpZD0iZzQzNyIgICAgIHRyYW5zZm9ybT0ic2NhbGUoMy42MjY5NjkzKSI+ICAgIDxwYXRoICAgICAgIHN0eWxlPSJmaWxsOiNlYjIxMmI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiICAgICAgIGQ9Ik0gMjEuMjY2OTY1LDEuNzM4MjgxOCBDIDIxLjI2Njk2NSwxLjczODI4MTggMTcuMjk4MjE1LDAgMTAuNjUzNjg0LDAgNC4wMDkxNTE5LDAgMC4wMzY0OTYwNywxLjczODI4MTggMC4wMzY0OTYwNywxLjczODI4MTggYyAwLDAgLTAuMzU1NDY4Miw3LjY5NTMxMiAxLjE1MjM0MzgzLDEyLjA0Njg3NDIgMi42NjAxNTYsNy42NTIzNDQgOS40NjA5MzgxLDkuODAwNzgyIDkuNDYwOTM4MSw5LjgwMDc4MiBoIDAuMDAzOSBjIDAsMCA2LjgwMDc4MSwtMi4xNDg0MzggOS40NjA5MzcsLTkuODAwNzgyIDEuNTA3ODE5LC00LjM1MTU2MjIgMS4xNTIzNSwtMTIuMDQ2ODc0MyAxLjE1MjM1LC0xMi4wNDY4NzQzIiAgICAgICBpZD0icGF0aDI4MiIgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4gICAgPHBhdGggICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgICAgICAgZD0iTSAxNy43MDgzNzEsOC4zNzQ5OTk4IFYgMTIuNjEzMjgyIEggMTIuNzU5MTUyIFYgMTcuNTYyNSBIIDguNTIwODcwOSBWIDEyLjYxMzI4MiBIIDMuNTcxNjUxOSBWIDguMzc0OTk5OCBoIDQuOTQ5MjE5IHYgLTQuOTQ5MjE4IGggNC4yMzgyODExIHYgNC45NDkyMTggaCA0Ljk0OTIxOSIgICAgICAgaWQ9InBhdGgyODQiICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+ICA8L2c+PC9zdmc+)](https://www.meteoswiss.admin.ch) -[![license](https://img.shields.io/badge/License-GPL%20(%3E%3D3)-black)](https://www.gnu.org/licenses/gpl-3.0.en.html) +# dvas: Data Visualization and Analysis Software +[![github](https://img.shields.io/github/release/MeteoSwiss-MDA/dvas.svg)](https://github.com/MeteoSwiss/dvas/releases) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8177528.svg)](https://doi.org/10.5281/zenodo.8177528) - [![pypi](https://img.shields.io/pypi/v/dvas.svg?colorB=)](https://pypi.python.org/pypi/dvas/) -# dvas: Data Visualization and Analysis Software - -The compiled code documentation [lives here](https://meteoswiss.github.io/dvas). +The official code documentation [lives here](https://meteoswiss.github.io/dvas). The contributing guidelines are [here](CONTRIBUTING.md). -Although the code documentation is already public, the dvas repository will remain private until we reach v1.0. This will happen, at the latest, when the dvas outcomes will be shared beyond the UAII 2022 project team. - ## License & Copyright dvas is distributed under the terms of the GNU General Public License v3.0 or later. The dvas copyright belongs to MeteoSwiss. See [here](https://meteoswiss.github.io/dvas/license.html) for details. diff --git a/src/dvas/version.py b/src/dvas/version.py index 666ea722..6261c91e 100644 --- a/src/dvas/version.py +++ b/src/dvas/version.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. Distributed under the terms of the GNU General Public License v3.0 or later. @@ -9,4 +9,4 @@ """ -VERSION = '1.0.0' +VERSION = '1.0.1' From 5e957934351714ad49b5b79aa07a5a3ea34aef51 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:12:24 +0200 Subject: [PATCH 03/23] Cleanup README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c86743c..126ad4fb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# dvas: Data Visualization and Analysis Software +# dvas: Data Visualization and Analysis Software (for the UAII 2022 field campaign) [![github](https://img.shields.io/github/release/MeteoSwiss-MDA/dvas.svg)](https://github.com/MeteoSwiss/dvas/releases) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8177528.svg)](https://doi.org/10.5281/zenodo.8177528) From 7ddfed3499a94af38dae4f5c9d3a19ac37e11c92 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:40:28 +0200 Subject: [PATCH 04/23] Cleanup Github Issues --- .github/ISSUE_TEMPLATE/bug_report.md | 30 ------------- .github/ISSUE_TEMPLATE/bug_report.yml | 63 +++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/ISSUE_TEMPLATE/todo.md | 17 -------- .github/ISSUE_TEMPLATE/todo.yml | 21 +++++++++ 5 files changed, 85 insertions(+), 48 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/todo.md create mode 100644 .github/ISSUE_TEMPLATE/todo.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 9e4cad1b..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: Bug report -about: Create a bug report to help us improve dvas -title: '' -labels: 'bug' -assignees: '' ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Setup '...' -3. Execute '...' - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. OS 10.15] - - dvas version [e.g. 0.0.1] - - python version [e.g. 3.7.5] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..1ba36fc9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,63 @@ +name: Bug Report +description: Create a bug report to help us improve dvas +title: "[Bug]: " +labels: ["triage"] +assignees: +body: +- type: checkboxes + attributes: + label: Is there already an issue for this? + description: Look at the [open](https://github.com/MeteoSwiss/dvas/issues) and [closed](https://github.com/MeteoSwiss/dvas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aclosed+) issues. + options: + - label: I found no existing issue for this bug. + required: true + - type: textarea + id: description + attributes: + label: Describe the bug + description: Tell us what happened and (if applicable) what you expected. + placeholder: Describe the bug + value: "A clear and concise description of what happened." + validations: + required: true +- type: textarea + attributes: + label: Steps to reproduce + description: Steps to reproduce the bug. + placeholder: | + 1. In this environment... + 2. With this config... + 3. Run '...' + 4. See error... + validations: + required: false + - type: textarea + id: logs + attributes: + label: Relevant log output + description: | + Copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell +- type: textarea + attributes: + label: Environment + description: | + examples: + - **OS**: Ubuntu 20.04 + - **Python**: 3.11.1 + - **dvas**: 1.0.0 + value: | + - OS: + - Python: + - dvas: + render: markdown + validations: + required: false + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/MeteoSwiss/dvas/blob/develop/CODE_OF_CONDUCT.md). + options: + - label: I agree to follow the dvas Code of Conduct. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 9c24fefc..f131786b 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: true contact_links: - name: Questions - Comments - Suggestions - url: https://github.com/MCH-MDA/dvas/discussions + url: https://github.com/MeteoSwiss/dvas/discussions about: Please ask questions, make comments, and submit suggestions here. diff --git a/.github/ISSUE_TEMPLATE/todo.md b/.github/ISSUE_TEMPLATE/todo.md deleted file mode 100644 index 28b4b7d2..00000000 --- a/.github/ISSUE_TEMPLATE/todo.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: New Feature -about: Keep track of an (approved) new feature of dvas -title: '' -labels: 'todo' -assignees: '' ---- - -**Describe the change** -A clear and concise description of what should be added to || modified in || removed from dvas. - - diff --git a/.github/ISSUE_TEMPLATE/todo.yml b/.github/ISSUE_TEMPLATE/todo.yml new file mode 100644 index 00000000..53298b42 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/todo.yml @@ -0,0 +1,21 @@ +name: New Feature +description: Keep track of an (approved) new feature of dvas +title: "[New Feature]: " +labels: ["todo"] +assignees: +body: +- type: markdown + attributes: + value: | + This is to keep track of **dev-approved** changes. + + To **suggest** a new feature instead, head over to the [dvas Github Discussion page](https://github.com/MeteoSwiss/dvas/discussions). + + - type: textarea + id: description + attributes: + label: Describe the new feature + placeholder: Describe the feature + value: "A clear and concise description of what should be added to || modified in || removed from dvas." + validations: + required: true From c6b52ad3c1bd62fbd5e22936ca3d6b393184191f Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:45:01 +0200 Subject: [PATCH 05/23] Update CHANGELOG --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index de0006b2..8b85be37 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - [fpavogt, 24.07.2023] Add DOI & pypi info to docs following first public release ### Fixed: ### Changed: + - [fpavogt, 24.07.2023] Change Github Issues to use the new format ### Deprecated: ### Removed: ### Security: From ad5315b8a18cb0526386152e7f977a002f9b427b Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:05:58 +0200 Subject: [PATCH 06/23] Fix issue templates --- .github/ISSUE_TEMPLATE/bug_report.yml | 23 ++++++++++++----------- .github/ISSUE_TEMPLATE/todo.yml | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 1ba36fc9..9ec20938 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -4,12 +4,13 @@ title: "[Bug]: " labels: ["triage"] assignees: body: -- type: checkboxes - attributes: + - type: checkboxes + attributes: label: Is there already an issue for this? description: Look at the [open](https://github.com/MeteoSwiss/dvas/issues) and [closed](https://github.com/MeteoSwiss/dvas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aclosed+) issues. options: - - label: I found no existing issue for this bug. + - label: I found no existing issue for this bug. + validations: required: true - type: textarea id: description @@ -20,8 +21,8 @@ body: value: "A clear and concise description of what happened." validations: required: true -- type: textarea - attributes: + - type: textarea + attributes: label: Steps to reproduce description: Steps to reproduce the bug. placeholder: | @@ -29,8 +30,8 @@ body: 2. With this config... 3. Run '...' 4. See error... - validations: - required: false + validations: + required: false - type: textarea id: logs attributes: @@ -38,8 +39,8 @@ body: description: | Copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. render: shell -- type: textarea - attributes: + - type: textarea + attributes: label: Environment description: | examples: @@ -51,8 +52,8 @@ body: - Python: - dvas: render: markdown - validations: - required: false + validations: + required: false - type: checkboxes id: terms attributes: diff --git a/.github/ISSUE_TEMPLATE/todo.yml b/.github/ISSUE_TEMPLATE/todo.yml index 53298b42..e9c05a8e 100644 --- a/.github/ISSUE_TEMPLATE/todo.yml +++ b/.github/ISSUE_TEMPLATE/todo.yml @@ -4,7 +4,7 @@ title: "[New Feature]: " labels: ["todo"] assignees: body: -- type: markdown + - type: markdown attributes: value: | This is to keep track of **dev-approved** changes. From b1f60b486c23862ff3f23c64a782947591965fcb Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:13:24 +0200 Subject: [PATCH 07/23] Fix typos --- .github/ISSUE_TEMPLATE/bug_report.yml | 44 +++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9ec20938..6bcf0095 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,10 +6,10 @@ assignees: body: - type: checkboxes attributes: - label: Is there already an issue for this? - description: Look at the [open](https://github.com/MeteoSwiss/dvas/issues) and [closed](https://github.com/MeteoSwiss/dvas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aclosed+) issues. - options: - - label: I found no existing issue for this bug. + label: Is there already an issue for this? + description: Look at the [open](https://github.com/MeteoSwiss/dvas/issues) and [closed](https://github.com/MeteoSwiss/dvas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aclosed+) issues. + options: + - label: I found no existing issue for this bug. validations: required: true - type: textarea @@ -23,13 +23,13 @@ body: required: true - type: textarea attributes: - label: Steps to reproduce - description: Steps to reproduce the bug. - placeholder: | - 1. In this environment... - 2. With this config... - 3. Run '...' - 4. See error... + label: Steps to reproduce + description: Steps to reproduce the bug. + placeholder: | + 1. In this environment... + 2. With this config... + 3. Run '...' + 4. See error... validations: required: false - type: textarea @@ -41,17 +41,17 @@ body: render: shell - type: textarea attributes: - label: Environment - description: | - examples: - - **OS**: Ubuntu 20.04 - - **Python**: 3.11.1 - - **dvas**: 1.0.0 - value: | - - OS: - - Python: - - dvas: - render: markdown + label: Environment + description: | + examples: + - **OS**: Ubuntu 20.04 + - **Python**: 3.11.1 + - **dvas**: 1.0.0 + value: | + - OS: + - Python: + - dvas: + render: markdown validations: required: false - type: checkboxes From db06e0b7ea1f0dd9bcc5d5ad6a5ee2e7569ef9fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=2EA=2E=20Vogt?= <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:16:50 +0200 Subject: [PATCH 08/23] Fix issue template --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 6bcf0095..284fb57d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,7 +2,6 @@ name: Bug Report description: Create a bug report to help us improve dvas title: "[Bug]: " labels: ["triage"] -assignees: body: - type: checkboxes attributes: From d8feb24ea80f4acdedca8dc04e557e542efcaad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=2EA=2E=20Vogt?= <13974615+fpavogt@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:17:34 +0200 Subject: [PATCH 09/23] Fix typo in issue template --- .github/ISSUE_TEMPLATE/todo.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/todo.yml b/.github/ISSUE_TEMPLATE/todo.yml index e9c05a8e..a46c13f2 100644 --- a/.github/ISSUE_TEMPLATE/todo.yml +++ b/.github/ISSUE_TEMPLATE/todo.yml @@ -2,7 +2,6 @@ name: New Feature description: Keep track of an (approved) new feature of dvas title: "[New Feature]: " labels: ["todo"] -assignees: body: - type: markdown attributes: From b2b071f05a574ab468537baca6d312e717845ee3 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Fri, 11 Aug 2023 13:39:51 +0200 Subject: [PATCH 10/23] Request Python 3.11 and pandas 2.x --- .github/workflows/CI_check_version.yml | 4 ++-- .github/workflows/CI_docs_build_and_check.yml | 4 ++-- .github/workflows/CI_docs_build_and_publish.yml | 4 ++-- .github/workflows/CI_pylinter.yml | 4 ++-- .github/workflows/CI_pypi.yml | 2 +- .github/workflows/CI_pytest.yml | 4 ++-- .github/workflows/CI_run_demo-script.yml | 4 ++-- CHANGELOG | 5 +++-- setup.py | 8 ++++---- src/dvas/version.py | 2 +- 10 files changed, 21 insertions(+), 20 deletions(-) diff --git a/.github/workflows/CI_check_version.yml b/.github/workflows/CI_check_version.yml index 693707f1..a358f05b 100644 --- a/.github/workflows/CI_check_version.yml +++ b/.github/workflows/CI_check_version.yml @@ -6,7 +6,7 @@ # 10.0.1, 10.0.2.dev0 is valid # 10.0, 10, is NOT valid ! # -# Copyright (c) 2022 fpavogt; frederic.vogt@meteoswiss.ch +# Copyright (c) 2022-2023 fpavogt; frederic.vogt@meteoswiss.ch name: CI_check_version @@ -26,7 +26,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: '3.10' + python-version: '3.11' - name: Install dependancies run: | diff --git a/.github/workflows/CI_docs_build_and_check.yml b/.github/workflows/CI_docs_build_and_check.yml index 1bd22fba..85b660f9 100644 --- a/.github/workflows/CI_docs_build_and_check.yml +++ b/.github/workflows/CI_docs_build_and_check.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2022 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch +# Copyright (c) 2020-2023 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch name: CI_docs_check @@ -16,7 +16,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ['3.10'] + python-version: ['3.11'] steps: # Checkout our repository diff --git a/.github/workflows/CI_docs_build_and_publish.yml b/.github/workflows/CI_docs_build_and_publish.yml index ca818f35..874d200c 100644 --- a/.github/workflows/CI_docs_build_and_publish.yml +++ b/.github/workflows/CI_docs_build_and_publish.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2022 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch +# Copyright (c) 2020-2023 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch # # This will build the docs and push them to the gh-pages branch of the repo # Assumes a few things: 1) docs live in ./docs; 2) there is a doc_build.sh bash script that takes @@ -28,7 +28,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ['3.10'] + python-version: ['3.11'] steps: # Checkout our repository diff --git a/.github/workflows/CI_pylinter.yml b/.github/workflows/CI_pylinter.yml index 8e5abb36..b9d6b059 100644 --- a/.github/workflows/CI_pylinter.yml +++ b/.github/workflows/CI_pylinter.yml @@ -1,6 +1,6 @@ # Inspired from: https://github.com/PyCQA/pylint/pull/2758#issuecomment-561164761 # -# Copyright (c) 2020-2022 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch +# Copyright (c) 2020-2023 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch name: CI_pylinter @@ -18,7 +18,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ['3.10'] + python-version: ['3.11'] steps: # Checkout our repository diff --git a/.github/workflows/CI_pypi.yml b/.github/workflows/CI_pypi.yml index d1c7271e..d8268782 100644 --- a/.github/workflows/CI_pypi.yml +++ b/.github/workflows/CI_pypi.yml @@ -24,7 +24,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: '3.10' + python-version: '3.11' - name: Install dependancies run: | diff --git a/.github/workflows/CI_pytest.yml b/.github/workflows/CI_pytest.yml index c9f6cf32..9a5c1377 100644 --- a/.github/workflows/CI_pytest.yml +++ b/.github/workflows/CI_pytest.yml @@ -3,7 +3,7 @@ # https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions # Adapted from: https://github.com/actions/starter-workflows/blob/master/ci/python-package.yml # -# Copyright (c) 2020-2022 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch +# Copyright (c) 2020-2023 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch name: CI_pytest @@ -21,7 +21,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ['3.10'] + python-version: ['3.11'] steps: # Checkout the repository diff --git a/.github/workflows/CI_run_demo-script.yml b/.github/workflows/CI_run_demo-script.yml index 0d2b7b0f..f83e1559 100644 --- a/.github/workflows/CI_run_demo-script.yml +++ b/.github/workflows/CI_run_demo-script.yml @@ -1,6 +1,6 @@ # This workflow will install Python dependencies and run the dvas demon script. # -# Copyright (c) 2020-2022 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch +# Copyright (c) 2020-2023 MeteoSwiss, created by F.P.A. Vogt; frederic.vogt@meteoswiss.ch name: CI_run_demo-script @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.10'] + python-version: ['3.11'] steps: # Checkout the repository diff --git a/CHANGELOG b/CHANGELOG index 8b85be37..5d4a3722 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,7 +4,7 @@ The format is inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0 This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [v1.x.y] +## [vX.Y.Z] ### Added: ### Fixed: ### Changed: @@ -12,11 +12,12 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Removed: ### Security: -## [v1.0.1] +## [v1.1.0] ### Added: - [fpavogt, 24.07.2023] Add DOI & pypi info to docs following first public release ### Fixed: ### Changed: + - [fpavogt, 11.08.2023] Request python>=3.11 and pandas>=2.0 - [fpavogt, 24.07.2023] Change Github Issues to use the new format ### Deprecated: ### Removed: diff --git a/setup.py b/setup.py index 50d23812..8fe8a6a3 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. Distributed under the terms of the GNU General Public License v3.0 or later. @@ -12,10 +12,10 @@ from setuptools import setup, find_packages # Always prefer setuptools over distutils # Run the version file -with open(Path('.') / 'src' / 'dvas' / 'version.py') as fid: +with open(Path('.') / 'src' / 'dvas' / 'version.py', encoding='utf-8') as fid: version = next(line.split("'")[1] for line in fid.readlines() if 'VERSION' in line) -with open("README.md", "r") as fh: +with open("README.md", "r", encoding='utf-8') as fh: long_description = fh.read() setup( @@ -47,7 +47,7 @@ "matplotlib", "netcdf4", 'numpy', - "pandas>=1.3.0", + "pandas>=2.0.0", "peewee", "pytz", "ruamel-yaml", diff --git a/src/dvas/version.py b/src/dvas/version.py index 6261c91e..553ceb6a 100644 --- a/src/dvas/version.py +++ b/src/dvas/version.py @@ -9,4 +9,4 @@ """ -VERSION = '1.0.1' +VERSION = '1.1.0' From 18b01f6f8fde6b5f69da062b620c8627f751661c Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Fri, 11 Aug 2023 14:12:35 +0200 Subject: [PATCH 11/23] Fix #288 --- CHANGELOG | 1 + src/dvas_demo/config/data_config/RS41_origdata.yml | 4 ++++ src/dvas_demo/config/data_config/iMS-100_origdata.yml | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 5d4a3722..970e5686 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -16,6 +16,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Added: - [fpavogt, 24.07.2023] Add DOI & pypi info to docs following first public release ### Fixed: + - [fpavogt, 11.08.2023] Fixes #288 [GDP SHC info is now extracted by dvas] ### Changed: - [fpavogt, 11.08.2023] Request python>=3.11 and pandas>=2.0 - [fpavogt, 24.07.2023] Change Github Issues to use the new format diff --git a/src/dvas_demo/config/data_config/RS41_origdata.yml b/src/dvas_demo/config/data_config/RS41_origdata.yml index 219a671c..00d6c64e 100644 --- a/src/dvas_demo/config/data_config/RS41_origdata.yml +++ b/src/dvas_demo/config/data_config/RS41_origdata.yml @@ -184,6 +184,10 @@ _RS41-GDP_001: burst_timestamp: "to_datetime(get('g.Measurement.BurstpointDatetime'))" gruan_tropopause: "get('g.Measurement.TropopauseGeopotHeight')" synop_clouds: "get('g.SurfaceObs.SynopClouds')" + preflight_shc_rh_sonde: "get('g.GroundCheck.SHC.SensorRelativeHumidity')" + preflight_shc_rh_ref: "get('g.GroundCheck.SHC.RefRelativeHumidity')" + preflight_shc_temp_sonde: "get('g.GroundCheck.SHC.SensorTemperature')" + preflight_shc_temp_ref: "get('g.GroundCheck.SHC.RefTemperature')" # -- ORIG DATA ---------------------------------- _time: diff --git a/src/dvas_demo/config/data_config/iMS-100_origdata.yml b/src/dvas_demo/config/data_config/iMS-100_origdata.yml index a115218a..205e83a6 100644 --- a/src/dvas_demo/config/data_config/iMS-100_origdata.yml +++ b/src/dvas_demo/config/data_config/iMS-100_origdata.yml @@ -81,6 +81,10 @@ _IMS-100-BETA_002: launch_timestamp: "to_datetime(get('g.Measurement.StartTime'))" burst_timestamp: "to_datetime(get('g.Measurement.BurstpointDatetime'))" gruan_tropopause: "get('g.Measurement.TropopauseGeopotHeight')" + preflight_shc_rh_sonde: "get('g.GroundCheck.UAII2022-SHC05_001.SensorRelativeHumidity')" + preflight_shc_rh_ref: "get('g.GroundCheck.UAII2022-SHC05_001.RefRelativeHumidity')" + preflight_shc_temp_sonde: "get('g.GroundCheck.UAII2022-SHC05_001.SensorTemperature')" + preflight_shc_temp_ref: "get('g.GroundCheck.UAII2022-SHC05_001.RefTemperature')" # -- ORIG DATA ---------------------------------- _time: From f8595b9d667b0c9e107d0fa5240fd17b6858e8e9 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:15:16 +0200 Subject: [PATCH 12/23] pandas 2.x codefix --- src/dvas/data/linker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dvas/data/linker.py b/src/dvas/data/linker.py index ae882eab..7858f46e 100644 --- a/src/dvas/data/linker.py +++ b/src/dvas/data/linker.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. Distributed under the terms of the GNU General Public License v3.0 or later. @@ -738,10 +738,10 @@ def get_data(self, field_id, data_file_path, mdl_name, prm_name): # Set read_csv arguments # (Add usecols, squeeze and engine arguments) - original_csv_read_args.update({'usecols': [field_id], 'squeeze': True, 'engine': 'python'}) + original_csv_read_args.update({'usecols': [field_id], 'engine': 'python'}) # Read original csv - data = pd.read_csv(data_file_path, **original_csv_read_args) + data = pd.read_csv(data_file_path, **original_csv_read_args).squeeze("columns") return data From cc7c8ecd4a82065b26fdbcd843185b64e301c10d Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:17:32 +0200 Subject: [PATCH 13/23] Adjsut level of log message --- src/dvas/config/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dvas/config/config.py b/src/dvas/config/config.py index 12385411..1df313fd 100644 --- a/src/dvas/config/config.py +++ b/src/dvas/config/config.py @@ -270,7 +270,7 @@ def _get_document(self, doc_in=None): else: if len(doc_in) == 0: logger.debug('No parameter file found for CLASS_KEY: %s', self.CLASS_KEY) - #raise Exception() + # raise Exception() for filepath in doc_in: try: @@ -1029,7 +1029,7 @@ def fct(self, a): # Force the timezone to UTC by default if out.tzinfo is None: out = out.replace(tzinfo=pytz.UTC) - logger.error('Setting undefined timezone to UTC for "%s"', out) + logger.warning('Setting undefined timezone to UTC for "%s"', out) return out From fa68f2acb2608f9f3635c2b72d127829370422a0 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:19:31 +0200 Subject: [PATCH 14/23] Minor code cleanup --- src/dvas_recipes/dynamic.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/dvas_recipes/dynamic.py b/src/dvas_recipes/dynamic.py index c40b0332..6011cef5 100644 --- a/src/dvas_recipes/dynamic.py +++ b/src/dvas_recipes/dynamic.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. Distributed under the terms of the GNU General Public License v3.0 or later. @@ -40,6 +40,3 @@ #: int: number of cpus to use to run the dvas recipe N_CPUS = 1 - -#: list: flags to drop during the analysis -DROP_FLGS = [] From 9f502e98acd77a663cba37f74513f4ea81afb2ec Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:22:07 +0200 Subject: [PATCH 15/23] Enable the ingestion of manual flag files, and the ability to crop flagged values --- .../config/data_config/RS41_origdata.yml | 3 +- src/dvas_demo/config/flg_config.yml | 7 +- ...RS41-GDP_001_20170712T000000_1-002-001.flg | 5847 ++++++++++++++++- .../data/rs/mdps/RS92.PAY_20171024T120000.flg | 2832 +++++++- src/dvas_demo/demo_script.py | 13 +- src/dvas_recipes/recipe.py | 17 +- src/dvas_recipes/recipes/uaii2022.rcp | 4 +- src/dvas_recipes/uaii2022/basic.py | 25 +- 8 files changed, 8722 insertions(+), 26 deletions(-) diff --git a/src/dvas_demo/config/data_config/RS41_origdata.yml b/src/dvas_demo/config/data_config/RS41_origdata.yml index 00d6c64e..14d60524 100644 --- a/src/dvas_demo/config/data_config/RS41_origdata.yml +++ b/src/dvas_demo/config/data_config/RS41_origdata.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +# Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. # # Distributed under the terms of the GNU General Public License v3.0 or later. # @@ -211,6 +211,7 @@ _RS41-GDP_001: value: get('temp_uc_tcor', 'div2') # Go from K=2 to K=1 _temp_ucu: value: get('temp_uc_ucor', 'div2') # Go from K=2 to K=1 + # What follows illustrates how one could feed manual flags via a .flg CSV file. #_temp_flag: # value: get(0) # csv_use_default: True diff --git a/src/dvas_demo/config/flg_config.yml b/src/dvas_demo/config/flg_config.yml index 5fe8b4c2..0d3d7f6e 100644 --- a/src/dvas_demo/config/flg_config.yml +++ b/src/dvas_demo/config/flg_config.yml @@ -1,11 +1,10 @@ -# Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +# Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. # # Distributed under the terms of the GNU General Public License v3.0 or later. # # SPDX-License-Identifier: GPL-3.0-or-later # # This file contains the list of flags defined manually by the user. -# It must absolutely have the string 'flg' in its name, to match the dvas class names. # -------------------------------------------------------------------------------------------------- # Legend: @@ -13,6 +12,10 @@ # flg_name: short-and-sweet flag name for use in dvas # flg_desc: long(er) free text description of the flag +- bit_pos: 16 + flg_name: op_error + flg_desc: data affected by operational errors (e.g. wrong surface data) + - bit_pos: 62 flg_name: the_last_flag flg_desc: The last possible flag diff --git a/src/dvas_demo/data/rs/gdps/PAY-RS-01_2_RS41-GDP_001_20170712T000000_1-002-001.flg b/src/dvas_demo/data/rs/gdps/PAY-RS-01_2_RS41-GDP_001_20170712T000000_1-002-001.flg index 6acd55d7..63458ec2 100644 --- a/src/dvas_demo/data/rs/gdps/PAY-RS-01_2_RS41-GDP_001_20170712T000000_1-002-001.flg +++ b/src/dvas_demo/data/rs/gdps/PAY-RS-01_2_RS41-GDP_001_20170712T000000_1-002-001.flg @@ -1 +1,5846 @@ -temperature_flag 0 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 0 \ No newline at end of file +temp_flag +65536 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +0 diff --git a/src/dvas_demo/data/rs/mdps/RS92.PAY_20171024T120000.flg b/src/dvas_demo/data/rs/mdps/RS92.PAY_20171024T120000.flg index 630ac569..43cb3a5c 100644 --- a/src/dvas_demo/data/rs/mdps/RS92.PAY_20171024T120000.flg +++ b/src/dvas_demo/data/rs/mdps/RS92.PAY_20171024T120000.flg @@ -1 +1,2831 @@ -temperature_flag 0 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 0 \ No newline at end of file +temp_flag +65536 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +1024 +0 diff --git a/src/dvas_demo/demo_script.py b/src/dvas_demo/demo_script.py index 574a2966..c5a46f09 100644 --- a/src/dvas_demo/demo_script.py +++ b/src/dvas_demo/demo_script.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. Distributed under the terms of the GNU General Public License v3.0 or later. @@ -72,7 +72,7 @@ DB.fetch_original_data( [ 'time', 'gph', 'gph_uct', 'gph_ucu', - 'temp', 'temp_flg', 'temp_ucs', 'temp_uct' + 'temp', 'temp_flag', 'temp_ucs', 'temp_uct' ], strict=True ) @@ -156,9 +156,9 @@ # Flags can be used to mark specific profile elements. The possible flags, for a given # Profile, are accessed as follows: - print('\nFlag ids and associated meaning:') + print('\nFlag names and associated bit position and meaning:') for (flg_name, item) in prfs[0].flg_names.items(): - print(f" {flg_name}: {item['flg_desc']}") + print(f" {flg_name}: {item['bit_pos']} - {item['flg_desc']}") # To flag specific elements of a given profile, use the internal methods: prfs[0].set_flg(FLG_FT, True, index=pd.Index([0, 1, 2])) @@ -167,6 +167,11 @@ print(f'\nDid I flag only the first three steps with a "{FLG_FT}" flag ?') print(prfs[0].has_flg(FLG_FT)) + # What about the flags fed manually via a CSV file (... .flg) ? + print( + '\nIs the user-set "op_error" flag set correctly for the first point (via the .flg file) ?') + print(prfs[11].has_flg('op_error')) + # FLags are used to characterize individual measurments. Tags, on the other hand, are used to # characterize entire Profiles. They are useful, for example, to identify if a Profile has been # synchronized (tags: TAG_SYNC), if the data is still original (tag: TAG_ORIGINAL), diff --git a/src/dvas_recipes/recipe.py b/src/dvas_recipes/recipe.py index c088b1c7..10652612 100644 --- a/src/dvas_recipes/recipe.py +++ b/src/dvas_recipes/recipe.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. Distributed under the terms of the GNU General Public License v3.0 or later. @@ -21,7 +21,7 @@ from dvas.environ import path_var from dvas.dvas import Log from dvas.dvas import Database as DB -from dvas.hardcoded import PRF_TDT, PRF_ALT +from dvas.hardcoded import PRF_TDT, PRF_ALT, FLG_PRM_NAME_SUFFIX import dvas.plots.utils as dpu from dvas import dynamic as dyn @@ -309,9 +309,6 @@ def __init__(self, rcp_fn, eids_to_treat=None, debug=False): if rcp_dyn.N_CPUS is None or rcp_dyn.N_CPUS > cpu_count(): rcp_dyn.N_CPUS = cpu_count() - # Store the list of flags to be dropped during analysis - rcp_dyn.DROP_FLGS = rcp_data['rcp_params']['general']['drop_flgs'] - # Store the index names rcp_dyn.INDEXES = rcp_data['rcp_params']['index'] @@ -367,10 +364,14 @@ def init_db(reset: bool = True, data_in_db: bool = True): DB.init() # Fetch the original data - DB.fetch_original_data([rcp_dyn.INDEXES[PRF_TDT]] + [rcp_dyn.INDEXES[PRF_ALT]] + - list(rcp_dyn.ALL_VARS) + + DB.fetch_original_data([rcp_dyn.INDEXES[PRF_TDT]] + # The reference times + [rcp_dyn.INDEXES[PRF_ALT]] + # The reference altitudes + list(rcp_dyn.ALL_VARS) + # All the primary variables + # All the flags associated to the primary variables + [f'{item}{FLG_PRM_NAME_SUFFIX}' for item in rcp_dyn.ALL_VARS] + + # All the necessary uncertainties [rcp_dyn.ALL_VARS[var][uc] for var in rcp_dyn.ALL_VARS - for uc in rcp_dyn.ALL_VARS[var]], strict=True) + for uc in rcp_dyn.ALL_VARS[var]], strict=True) @staticmethod def get_all_flights_from_db(): diff --git a/src/dvas_recipes/recipes/uaii2022.rcp b/src/dvas_recipes/recipes/uaii2022.rcp index cc22953c..6a8b2dc9 100644 --- a/src/dvas_recipes/recipes/uaii2022.rcp +++ b/src/dvas_recipes/recipes/uaii2022.rcp @@ -42,8 +42,6 @@ rcp_params: plot_show: False chunk_size: 200 n_cpus: # If set, will cap the number of cpus used to run the dvas recipe - drop_flgs: # List of flags to drop from the analysis - - descent # Variables to process using the recipe, and associated uncertainties. index: @@ -108,6 +106,8 @@ rcp_steps: resampling_freq: '1s' # Time step to resample onto, with format 'Xs' interp_dist: 1 # Distance to the nearest measurement, in s, from which a resampled point is forced to NaN crop_descent: True # If True, descent data will be cropped for good. Else, it is simply flagged. + # crop_flgs: # List of flag bit ids (set in flg_config.yml) to crop from the profiles + # - op_error # data affected by operational errors (e.g. wrong surface data) # Profile synchronization on a flight-per-flight basis. - fct: uaii2022.sync.sync_flight diff --git a/src/dvas_recipes/uaii2022/basic.py b/src/dvas_recipes/uaii2022/basic.py index 135380ff..443eefd7 100644 --- a/src/dvas_recipes/uaii2022/basic.py +++ b/src/dvas_recipes/uaii2022/basic.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2020-2022 MeteoSwiss, contributors listed in AUTHORS. +Copyright (c) 2020-2023 MeteoSwiss, contributors listed in AUTHORS. Distributed under the terms of the GNU General Public License v3.0 or later. @@ -51,7 +51,7 @@ def prf_summary(): @log_func_call(logger, time_it=False) def flag_phases(prfs): - """ Flag the different profile phases, i.e. prelaunch, ascent, and descent. + """ Flag the different profile phases, i.e. prelaunch, ascent, and descent. Args: prfs (MultiRSProfile|MultiGDPProfile): the profiles to flag (individually). @@ -126,7 +126,8 @@ def flag_phases(prfs): @log_func_call(logger, time_it=False) -def cleanup_steps(prfs, resampling_freq, interp_dist, crop_descent, timeofday=None, fid=None): +def cleanup_steps(prfs, resampling_freq, interp_dist, crop_descent, crop_flgs, + timeofday=None, fid=None): """ Execute a series of cleanup-steps common to GDP and non-GDP profiles. This function is here to avoid duplicating code. The cleanup-up profiles are directly saved to the DB with the tag: TAG_CLN @@ -138,6 +139,8 @@ def cleanup_steps(prfs, resampling_freq, interp_dist, crop_descent, timeofday=No interp_dist (float|int): distance to the nearest real measurement, in s, beyond which a resampled point is forced to NaN (i.e. "dvas does not interpolate !") crop_descent (bool): if True, and data with the flag "descent" will be cropped out for good. + crop_flgs (list): any data flagged with any one of these flag names will be cropped out for + good. timeofday (str): if set, will tag the Profile with this time of day. Defaults to None. fid (str): if set, will add the flight id to the profile metadata. Defaults to None. @@ -153,10 +156,18 @@ def cleanup_steps(prfs, resampling_freq, interp_dist, crop_descent, timeofday=No for (ind, prf) in enumerate(prfs): prfs[ind].data = prf.data.loc[~prf.has_flg(FLG_PRELAUNCH)] - # Crop the descent data if warranted - if crop_descent: + # Basic sanity check of the input + if crop_flgs is None: + crop_flgs = [] + # Fail early if I need to ... + assert isinstance(crop_flgs, list) + # Include the descent flag is warranted + if crop_descent and FLG_DESCENT not in crop_flgs: + crop_flgs += [FLG_DESCENT] + # Crop the requested flag names + for flg_name in crop_flgs: for (ind, prf) in enumerate(prfs): - prfs[ind].data = prf.data.loc[~prf.has_flg(FLG_DESCENT)] + prfs[ind].data = prf.data.loc[~prf.has_flg(flg_name)] # Add the TimeOfDay tag, if warranted if timeofday is not None: @@ -246,7 +257,7 @@ def cleanup(start_with_tags, fix_gph_uct=None, check_tropopause=False, **args): if dynamic.CURRENT_VAR == 'gph' and fix_gph_uct is not None: # Safety check if not isinstance(fix_gph_uct, list): - raise DvasRecipesError(f'Ouch ! fix_gph_uct should be a list, not: {fix_gph_uct}') + raise DvasRecipesError(f'fix_gph_uct should be a list, not: {fix_gph_uct}') # Start looping through the profiles, to identify the ones I need. for gdp in gdp_prfs: From 500dcc960f6ecbb451a7ef1366e05e604e6d09dc Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:39:04 +0200 Subject: [PATCH 16/23] Add some additional explanations --- CHANGELOG | 1 + src/dvas_recipes/recipes/uaii2022.rcp | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 970e5686..79b43bf5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -14,6 +14,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [v1.1.0] ### Added: + - [fpavogt, 17.08.2023] Enable the ingestion of manual flag files by the uaii2022 recipe - [fpavogt, 24.07.2023] Add DOI & pypi info to docs following first public release ### Fixed: - [fpavogt, 11.08.2023] Fixes #288 [GDP SHC info is now extracted by dvas] diff --git a/src/dvas_recipes/recipes/uaii2022.rcp b/src/dvas_recipes/recipes/uaii2022.rcp index 6a8b2dc9..7e9beeba 100644 --- a/src/dvas_recipes/recipes/uaii2022.rcp +++ b/src/dvas_recipes/recipes/uaii2022.rcp @@ -106,6 +106,12 @@ rcp_steps: resampling_freq: '1s' # Time step to resample onto, with format 'Xs' interp_dist: 1 # Distance to the nearest measurement, in s, from which a resampled point is forced to NaN crop_descent: True # If True, descent data will be cropped for good. Else, it is simply flagged. + # The following option can be used - but it is not recommended. + # As long as one uses the gph to synchronize profiles, we need all the variables + # to have the same aray length so that the sync is applicable to all. This implies that they + # should all be flagged in the same way, so that the cropping is identical for all. + # It can absolutely be done, but it is *a lot* easier to simply preface specific lines with + # a '#' in the original MDP files to crop them from the analysis without issues. # crop_flgs: # List of flag bit ids (set in flg_config.yml) to crop from the profiles # - op_error # data affected by operational errors (e.g. wrong surface data) From 978018d0ad9a1649cba620f8c198ae4bfbc2c74a Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Tue, 29 Aug 2023 17:45:24 +0200 Subject: [PATCH 17/23] Enable option to sync wrt time and manual tweaks --- src/dvas/tools/sync.py | 11 ++-- src/dvas_recipes/recipes/uaii2022.rcp | 8 ++- src/dvas_recipes/uaii2022/sync.py | 94 +++++++++++++++++++++++++-- 3 files changed, 101 insertions(+), 12 deletions(-) diff --git a/src/dvas/tools/sync.py b/src/dvas/tools/sync.py index 7db8cb9c..4ef87a64 100644 --- a/src/dvas/tools/sync.py +++ b/src/dvas/tools/sync.py @@ -26,9 +26,9 @@ @log_func_call(logger) -def get_sync_shifts_from_starttime(prfs): +def get_sync_shifts_from_time(prfs): """ A routine that estimates the necessary synchronization shifts between profiles based on the - GNSS start time value. + measurement times. Args: prfs (dvas.data.data.MultiRSProfiles): list of Profiles to sync. @@ -42,9 +42,10 @@ def get_sync_shifts_from_starttime(prfs): if MTDTA_FIRST not in prf.info.metadata.keys(): raise DvasError(f"'{MTDTA_FIRST}' not found in metadata for: {prf.info.src}") - # Extract all the start times, not forgetting to account for any data cropping that may - # have taken place since it was loaded (i.e. get the FIRST DATETIME from the metadata, - # and add the first time delta - which should be 0 unless descent data was cropped). + # Extract all the measurement times of the first profile points, not forgetting to account for + # any data cropping that may have taken place since it was loaded (i.e. get the MTDTA_FIRST + # from the metadata, and add the first time delta - which should be 0 unless descent data was + # cropped). start_times = [None if prf.info.metadata[MTDTA_FIRST] is None else prf.info.metadata[MTDTA_FIRST] + prf.data.index.get_level_values(PRF_TDT)[0] for prf in prfs] diff --git a/src/dvas_recipes/recipes/uaii2022.rcp b/src/dvas_recipes/recipes/uaii2022.rcp index 7e9beeba..e231a116 100644 --- a/src/dvas_recipes/recipes/uaii2022.rcp +++ b/src/dvas_recipes/recipes/uaii2022.rcp @@ -108,11 +108,11 @@ rcp_steps: crop_descent: True # If True, descent data will be cropped for good. Else, it is simply flagged. # The following option can be used - but it is not recommended. # As long as one uses the gph to synchronize profiles, we need all the variables - # to have the same aray length so that the sync is applicable to all. This implies that they + # to have the same array length so that the sync is applicable to all. This implies that they # should all be flagged in the same way, so that the cropping is identical for all. # It can absolutely be done, but it is *a lot* easier to simply preface specific lines with # a '#' in the original MDP files to crop them from the analysis without issues. - # crop_flgs: # List of flag bit ids (set in flg_config.yml) to crop from the profiles + crop_flgs: # List of flag bit ids (set in flg_config.yml) to crop from the profiles # - op_error # data affected by operational errors (e.g. wrong surface data) # Profile synchronization on a flight-per-flight basis. @@ -125,6 +125,10 @@ rcp_steps: global_match_var: 'gph' # Variable to match globally valid_value_range: [4000, 6000] # If a len(2) list is set, global_match_var values outside the range will be ignored. sync_wrt_mid: (gdp)RS41 # Radiosonde model id against which to synchronize all other profiles. + use_time_for_mids: ['iMet-54'] # mids in this list will ignore gph sync values, and use measurement times instead ... + use_time_wrt_mid: '(gdp)iMS-100' # ... with respect to this reference. + manual_tweaks: # List of individual cases for which to apply an (additive) correction to the sync shifts derived automatically (via gph or time) + - ['F64', 'DFM-17#1', -12] # [fid, 'mid#pid', correction] crop_pre_gdp: True # It True, profiles will be cropped at the first GDP point. # Simple plotting step of the complete profiles for all the variables. diff --git a/src/dvas_recipes/uaii2022/sync.py b/src/dvas_recipes/uaii2022/sync.py index cf95120a..bc199085 100644 --- a/src/dvas_recipes/uaii2022/sync.py +++ b/src/dvas_recipes/uaii2022/sync.py @@ -19,6 +19,7 @@ from dvas.data.data import MultiRSProfile, MultiGDPProfile from dvas.tools import sync as dts from dvas.errors import DvasError +from dvas.dvas import Database as DB # Import from dvas_recipes from ..errors import DvasRecipesError @@ -131,7 +132,7 @@ def apply_sync_shifts(var_name, filt, sync_length, sync_shifts, is_gdp): @for_each_flight @log_func_call(logger, time_it=False) def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range, sync_wrt_mid, - crop_pre_gdp): + use_time_for_mids, use_time_wrt_mid, manual_tweaks, crop_pre_gdp): """ Highest-level function responsible for synchronizing all the profile from a specific RS flight. @@ -148,6 +149,13 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range valid_value_range (list|None): if a len(2) list is provided, values of the global_match_var outside this range will be ignored when deriving the global-match synch shifts. sync_wrt_mid (str): radiosonde model-id against which to synchronize profiles. + use_time_for_mids (list): radiosonde model ids that should ignore the global_match_var and + get sync shifts based on their measurement times instead. + use_time_wrt_mid (str): radiosonde model-id to be used as a reference to compute time + offsets. + manual_tweaks (list): list of [fid, 'mid#pid', correction] lists, describing manual sync + offset tweaks to apply (in an additive way) to the offsets derived automatically, + either via gph or time. crop_pre_gdp (bool): if True, any data taken before gdp values excists will be cropped. @@ -157,7 +165,10 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range tags = dru.format_tags(start_with_tags) # Extract the flight info - (_, eid, rid) = dynamic.CURRENT_FLIGHT + (fid, eid, rid) = dynamic.CURRENT_FLIGHT + + # Also get the global db view, so I can fetch the pids later on ... + db_view = DB.extract_global_view() # What search query will let me access the data I need ? filt = tools.get_query_filter(tags_in=tags+[eid, rid], tags_out=None) @@ -173,6 +184,7 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range # Get the Object IDs, so I can keep track of the different profiles and don't mess things up. oids = prfs.get_info(prm='oid') + mids = prfs.get_info(prm='mid') # Verify that that event datetime is actually the same for all the profiles. I should only # synchronize profiles that have flown together. @@ -196,14 +208,86 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range # Get shifts from the GNSS times try: - shifts_gnss = dts.get_sync_shifts_from_starttime(prfs) - logger.info('Sync. shifts from GNSS starttime: %s', shifts_gnss) + shifts_gnss = dts.get_sync_shifts_from_time(prfs) + logger.info('Sync. shifts from measurement time: %s', shifts_gnss) except DvasError as err: logger.critical(err) + shifts_gnss = None # GNSS times have many issues ... let's use gph sync shifts instead. sync_shifts = shifts_val + # In certain situations, the user may want to use the time to sync profiles instead. + for mid in use_time_for_mids: + # Check if this mid is on this flight - remembering the brackets around. + if [mid] not in mids: + continue + if [use_time_wrt_mid] not in mids: + # The reference does not exist - log a critical error and move on + logger.critical('Time sync not possible, reference mid not found: %s', + use_time_wrt_mid) + continue + if len([item for item in mids if item == [use_time_wrt_mid]]) > 1: + logger.critical('Time sync not possible, non-unique reference mid: %s', + use_time_wrt_mid) + continue + if shifts_gnss is None: + logger.critical('Time sync not possible for mid %s: gnss_shifts could not be computed.', + mid) + continue + + # There can be more than one occurence of the mid in mids. Let's use the oids instead + # to identify which sync shift to overwrite + inds_to_replace = [ind for (ind, item) in enumerate(mids) if item == [mid]] + # One-by-one, replace the gph-derived sync shift with a time-base one, given a certain + # reference. + for ind in inds_to_replace: + + new_shift = sync_shifts[mids.index([use_time_wrt_mid])] + \ + shifts_gnss[ind] - shifts_gnss[mids.index([use_time_wrt_mid])] + + if np.abs(new_shift - sync_shifts[ind]) > 10: + loglvl = logger.warning + else: + loglvl = logger.info + + loglvl('%s (#%s) sync "time" vs "gph" shift offset: %i', + mid, db_view[db_view.oid == oids[ind][0]].pid.values[0], + new_shift-sync_shifts[ind]) + + # Actually update the shifts + sync_shifts[ind] = new_shift + + # Finally, check those cases where a manual correction is fed to us by the user. This should be + # used as a last-resort solution to synchronize profiles. + if manual_tweaks is not None: + for manual_tweak in manual_tweaks: + + # Check if the flight matches + if (tweak_fid := manual_tweak[0]) != fid: + continue + [tweak_mid, tweak_pid] = manual_tweak[1].split('#') + tweak_oid = db_view[(db_view.mid == tweak_mid) & (db_view.pid == tweak_pid)].oid + + # Does the profile parameters correspond to something in the DB ? + if len(tweak_oid) == 0: + logger.error('%s (%s) not found for %s: manual sync tweaks impossible.', + tweak_mid, tweak_pid, tweak_fid) + continue + tweak_oid = tweak_oid.values[0] + + # If the flight matches and the oid is in the DB, then we would expect to have it in + # oids of the current flight ... + if [tweak_oid] not in oids: + logger.error('oid %s not found in current list. Manual sync tweak impossible.', + tweak_oid) + continue + + logger.info('Manual sync tweak for %s %s (#%s): %i %+i', + tweak_fid, tweak_mid, tweak_pid, + sync_shifts[oids.index([tweak_oid])], manual_tweak[2]) + sync_shifts[oids.index([tweak_oid])] += manual_tweak[2] + # Now, let's reset the shift depening on whether we want to crop pre-GDP data, or not if crop_pre_gdp: shift_min = np.min([s_val for (s_ind, s_val) in enumerate(sync_shifts) if is_gdp[s_ind]]) @@ -218,7 +302,7 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range # Keep track of the important info logger.info('oids: %s', oids) - logger.info('mids: %s', prfs.get_info(prm='mid')) + logger.info('mids: %s', mids) logger.info('is_gdp: %s', is_gdp) logger.info('crop_pre_gdp: %s', crop_pre_gdp) logger.info('sync_shifts: %s', sync_shifts) From 0622be48e0ae98f4d32946baf76b48c15573101f Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Thu, 7 Sep 2023 16:19:15 +0200 Subject: [PATCH 18/23] Fix #295 --- CHANGELOG | 1 + src/dvas_recipes/uaii2022/basic.py | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 79b43bf5..232a04c0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - [fpavogt, 17.08.2023] Enable the ingestion of manual flag files by the uaii2022 recipe - [fpavogt, 24.07.2023] Add DOI & pypi info to docs following first public release ### Fixed: + - [fpavogt, 07.09.2023] Fix #295 - [fpavogt, 11.08.2023] Fixes #288 [GDP SHC info is now extracted by dvas] ### Changed: - [fpavogt, 11.08.2023] Request python>=3.11 and pandas>=2.0 diff --git a/src/dvas_recipes/uaii2022/basic.py b/src/dvas_recipes/uaii2022/basic.py index 443eefd7..6a6bae94 100644 --- a/src/dvas_recipes/uaii2022/basic.py +++ b/src/dvas_recipes/uaii2022/basic.py @@ -154,7 +154,16 @@ def cleanup_steps(prfs, resampling_freq, interp_dist, crop_descent, crop_flgs, # Crop any prelaunch data for (ind, prf) in enumerate(prfs): - prfs[ind].data = prf.data.loc[~prf.has_flg(FLG_PRELAUNCH)] + + # Crop pre-flight points, if warranted + if prf.has_flg(FLG_PRELAUNCH).any(): + logger.info('Cropping pre-launch datapoints (%s)', prf.info.src) + prfs[ind].data = prf.data.loc[~prf.has_flg(FLG_PRELAUNCH)] + # Update the metadata (fixes #295) + # Note that we are here BEFORE the resampling takes place. This implies that the + # new value of MTDTA_FIRST cannot be computed by counting the number of cropped + # time steps. It must be set to have the same value as MTDTA_LAUNCH + prfs[ind].info.add_metadata(MTDTA_FIRST, prf.info.metadata[MTDTA_LAUNCH]) # Basic sanity check of the input if crop_flgs is None: From 386e347b3649acaeab04ef522339aedbb6d8baf1 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Fri, 22 Sep 2023 09:54:21 +0200 Subject: [PATCH 19/23] Minor log tweaks --- src/dvas_recipes/recipe.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dvas_recipes/recipe.py b/src/dvas_recipes/recipe.py index 10652612..778c71f9 100644 --- a/src/dvas_recipes/recipe.py +++ b/src/dvas_recipes/recipe.py @@ -19,6 +19,7 @@ # Import from dvas from dvas.environ import path_var +from dvas import __version__ as dvas_version from dvas.dvas import Log from dvas.dvas import Database as DB from dvas.hardcoded import PRF_TDT, PRF_ALT, FLG_PRM_NAME_SUFFIX @@ -286,7 +287,7 @@ def __init__(self, rcp_fn, eids_to_treat=None, debug=False): Log.start_log(rcp_data['rcp_params']['general']['log_mode'], level=loglvl) - logger.info('Launching the %s recipe.', self._name) + logger.info('Launching the %s recipe with dvas %s.', self._name, dvas_version) logger.info('orig_data_path was set to: %s', path_var.orig_data_path) logger.info('output_path was set to: %s', path_var.output_path) @@ -428,7 +429,7 @@ def execute(self, from_step_id=None, until_step_id=None): # Raise an error if no flights were specified/foudn in the DB if len(rcp_dyn.ALL_FLIGHTS) == 0: - raise DvasRecipesError('Ouch ! No flights to process !') + raise DvasRecipesError('No flights to process !') # Now that everything is in place, all that is required at this point is to launch each step # one after the other. If warranted, lock the execution of steps until a certain one is From d18cb0762ab6d875a9b817fddc4d0ffa1d52e380 Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Fri, 22 Sep 2023 09:58:25 +0200 Subject: [PATCH 20/23] Minor log tweaks --- src/dvas_recipes/recipe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dvas_recipes/recipe.py b/src/dvas_recipes/recipe.py index 778c71f9..b8a17eb9 100644 --- a/src/dvas_recipes/recipe.py +++ b/src/dvas_recipes/recipe.py @@ -287,7 +287,7 @@ def __init__(self, rcp_fn, eids_to_treat=None, debug=False): Log.start_log(rcp_data['rcp_params']['general']['log_mode'], level=loglvl) - logger.info('Launching the %s recipe with dvas %s.', self._name, dvas_version) + logger.info('Launching the %s recipe with dvas v%s', self._name, dvas_version) logger.info('orig_data_path was set to: %s', path_var.orig_data_path) logger.info('output_path was set to: %s', path_var.output_path) From 95d7d826d5f819280abf37fe928b20997853155e Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:41:05 +0200 Subject: [PATCH 21/23] bugfix for manual sync tweaks --- src/dvas_recipes/uaii2022/sync.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/dvas_recipes/uaii2022/sync.py b/src/dvas_recipes/uaii2022/sync.py index bc199085..883e8285 100644 --- a/src/dvas_recipes/uaii2022/sync.py +++ b/src/dvas_recipes/uaii2022/sync.py @@ -267,13 +267,19 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range if (tweak_fid := manual_tweak[0]) != fid: continue [tweak_mid, tweak_pid] = manual_tweak[1].split('#') - tweak_oid = db_view[(db_view.mid == tweak_mid) & (db_view.pid == tweak_pid)].oid + tweak_oid = db_view[(db_view.mid == tweak_mid) & + (db_view.pid == tweak_pid) & + (db_view.eid == eid)].oid # Does the profile parameters correspond to something in the DB ? if len(tweak_oid) == 0: - logger.error('%s (%s) not found for %s: manual sync tweaks impossible.', + logger.error('%s (%s) not found for %s: manual sync tweak impossible.', tweak_mid, tweak_pid, tweak_fid) continue + if len(tweak_oid) > 0: + logger.error('Multiple oids found !? %s', tweak_oid) + logger.error('Manual sync tweak impossible.') + continue tweak_oid = tweak_oid.values[0] # If the flight matches and the oid is in the DB, then we would expect to have it in From f4954dd8438f04e29bb11cfa867f93132739c45a Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:43:49 +0200 Subject: [PATCH 22/23] Correct bad typo --- src/dvas_recipes/uaii2022/sync.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dvas_recipes/uaii2022/sync.py b/src/dvas_recipes/uaii2022/sync.py index 883e8285..95ed29c4 100644 --- a/src/dvas_recipes/uaii2022/sync.py +++ b/src/dvas_recipes/uaii2022/sync.py @@ -276,7 +276,7 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range logger.error('%s (%s) not found for %s: manual sync tweak impossible.', tweak_mid, tweak_pid, tweak_fid) continue - if len(tweak_oid) > 0: + if len(tweak_oid) > 2: logger.error('Multiple oids found !? %s', tweak_oid) logger.error('Manual sync tweak impossible.') continue From e3fd5ac3ffcaed1ebeb4122457dad8daf8dc5d4b Mon Sep 17 00:00:00 2001 From: 13974615+fpavogt <13974615+fpavogt@users.noreply.github.com> Date: Mon, 9 Oct 2023 14:48:40 +0200 Subject: [PATCH 23/23] Minor typo fix --- src/dvas_recipes/uaii2022/sync.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dvas_recipes/uaii2022/sync.py b/src/dvas_recipes/uaii2022/sync.py index 95ed29c4..6764d51b 100644 --- a/src/dvas_recipes/uaii2022/sync.py +++ b/src/dvas_recipes/uaii2022/sync.py @@ -276,7 +276,7 @@ def sync_flight(start_with_tags, anchor_alt, global_match_var, valid_value_range logger.error('%s (%s) not found for %s: manual sync tweak impossible.', tweak_mid, tweak_pid, tweak_fid) continue - if len(tweak_oid) > 2: + if len(tweak_oid) > 1: logger.error('Multiple oids found !? %s', tweak_oid) logger.error('Manual sync tweak impossible.') continue