[
  {
    "path": ".editorconfig",
    "content": "# editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = tab\ntrim_trailing_whitespace = true\nend_of_line = lf\ninsert_final_newline = true\n\n[*.md]\nindent_style = space\nindent_size = 4\n"
  },
  {
    "path": ".gitignore",
    "content": "# IntelliJ\n.idea/\n\n# Composer\nvendor/\ncomposer.phar\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) delight.im (https://www.delight.im/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Migration.md",
    "content": "# Migration\n\n * [General](#general)\n * [From `v1.x.x` to `v2.x.x`](#from-v1xx-to-v2xx)\n\n## General\n\nUpdate your version of this library using Composer and its `composer update` or `composer require` commands [[?]](https://github.com/delight-im/Knowledge/blob/master/Composer%20(PHP).md#how-do-i-update-libraries-or-modules-within-my-application).\n\n## From `v1.x.x` to `v2.x.x`\n\n * The Internationalization extension (`intl`) for PHP is now required.\n * The method `setLastUpdated` from class `PrivacyPolicy` has been renamed to `setPublishedAt`.\n * The method `hasLastUpdated` from class `PrivacyPolicy` has been removed.\n * The method `setExpiration` from class `PrivacyPolicy` has been renamed to `setExpiresAt`.\n * The method `hasExpiration` from class `PrivacyPolicy` has been removed.\n * For method `addDataGroup` from class `PrivacyPolicy`, between the second parameter (named “description”) and the former third parameter (named “purposes”), two new parameters (named “bases” and “specialConditions”) have been added.\n * For the constructor of class `DataGroup`, between the second parameter (named “description”) and the former third parameter (named “purposes”), two new parameters (named “bases” and “specialConditions”) have been added.\n * For method `addElement` from class `DataGroup`, the fourth parameter (named “viewable”) and the fifth parameter (named “deletable”) have been removed.\n * For the constructor of class `DataElement`, the fourth parameter (named “viewable”) and the fifth parameter (named “deletable”) have been removed.\n * The methods `isViewable` and `isDeletable` from class `DataElement` have been removed.\n * The method `setRightToInformation` from class `PrivacyPolicy` has been replaced by the five separate methods `setRightOfAccess`, `setRightToRectification`, `setRightToErasure`, `setRightToRestrictProcessing` and `setRightToObject`.\n * The method `hasRightToInformation` from class `PrivacyPolicy` has been removed.\n * The key `meta.updated` in the JSON output has been renamed to `meta.published`.\n * The attributes `viewable` and `deletable` in `data[*].elements[*]` in the JSON output have been removed.\n * For `data[*].requirement` and `data[*].elements[*].requirement` in the JSON output, all occurrences of the value `opt_in` have been replaced with `optIn`, and all occurrences of `opt_out` have been replaced with `optOut`.\n * The key `choices.information.request` in the JSON output has been renamed to `choices.data.access`.\n * The key `choices.information.update` in the JSON output has been renamed to `choices.data.rectification`.\n * The key `choices.information.delete` in the JSON output has been renamed to `choices.data.erasure`.\n"
  },
  {
    "path": "README.md",
    "content": "# PHP-PrivacyPolicy\n\nProgrammatically composable privacy policies for [humans](../../tree/examples/Humans) and [machines](../../tree/examples/Machines)\n\n## Requirements\n\n * PHP 5.6.0+\n   * Internationalization extension (`intl`)\n\n## Installation\n\n 1. Include the library via Composer [[?]](https://github.com/delight-im/Knowledge/blob/master/Composer%20(PHP).md):\n\n    ```\n    $ composer require delight-im/privacy-policy\n    ```\n\n 1. Include the Composer autoloader:\n\n    ```php\n    require __DIR__ . '/vendor/autoload.php';\n    ```\n\n## Upgrading\n\nMigrating from an earlier version of this project? See our [upgrade guide](Migration.md) for help.\n\n## Usage\n\n* [Creating an instance](#creating-an-instance)\n  * [Privacy policies for humans in natural language](#privacy-policies-for-humans-in-natural-language)\n  * [Privacy policies for machines in formal language](#privacy-policies-for-machines-in-formal-language)\n* [Displaying or printing an instance](#displaying-or-printing-an-instance)\n  * [Privacy policies for humans in natural language](#privacy-policies-for-humans-in-natural-language-1)\n  * [Privacy policies for machines in formal language](#privacy-policies-for-machines-in-formal-language-1)\n* [Defining metadata](#defining-metadata)\n* [Describing your privacy practices](#describing-your-privacy-practices)\n* [Explaining the amount, type and purpose of the data you collect](#explaining-the-amount-type-and-purpose-of-the-data-you-collect)\n  * [Lawful bases](#lawful-bases)\n  * [Special conditions](#special-conditions)\n  * [Data purposes](#data-purposes)\n  * [Data requirements](#data-requirements)\n  * [Data types](#data-types)\n    * [Primary](#primary)\n    * [Secondary](#secondary)\n    * [Tertiary](#tertiary)\n* [Specifying the scope of your policy](#specifying-the-scope-of-your-policy)\n* [Configuring an instance](#configuring-an-instance)\n  * [Privacy policies for machines in formal language](#privacy-policies-for-machines-in-formal-language-2)\n\n### Creating an instance\n\n#### Privacy policies for humans in natural language\n\n```php\n$policy = new \\Delight\\PrivacyPolicy\\Language\\EnglishPrivacyPolicy();\n\n// or\n\n$policy = new \\Delight\\PrivacyPolicy\\Language\\GermanFormalPrivacyPolicy();\n// or\n$policy = new \\Delight\\PrivacyPolicy\\Language\\GermanInformalPrivacyPolicy();\n```\n\n#### Privacy policies for machines in formal language\n\n```php\n$policy = new \\Delight\\PrivacyPolicy\\Language\\JsonPrivacyPolicy();\n```\n\n### Displaying or printing an instance\n\n#### Privacy policies for humans in natural language\n\n```php\n$policy->toHtml();\n// or\n$policy->toPlainText();\n// or\n$policy->toMarkdown();\n```\n\n#### Privacy policies for machines in formal language\n\n```php\n$policy->toJson();\n```\n\n### Defining metadata\n\n```php\n$policy->setPublishedAt(1393372800);\n$policy->setTakesEffectAt(1394582400);\n$policy->setExpiresAt(1395792000);\n$policy->setVersionName('v3.1.4');\n$policy->setCanonicalUrl('https://www.example.com/privacy.html');\n$policy->setContactEmail('privacy@example.com');\n$policy->setContactUrl('https://www.example.com/contact.html');\n// $policy->setContactImage('https://www.example.com/images/contact.png', 'Jane Doe, 123 Main Street, Anytown, USA', 420, 360);\n```\n\n### Describing your privacy practices\n\n```php\n$policy->setUserDataTraded(false);\n$policy->setDataMinimizationGoal(true);\n$policy->setChildrenMinimumAge(16);\n$policy->setPromotionalEmailOptOut(true);\n$policy->setFirstPartyCookies(true);\n$policy->setThirdPartyCookies(true);\n$policy->setAccountDeletable(true);\n$policy->setPreservationInBackups(true);\n$policy->setThirdPartyServiceProviders(true);\n$policy->setInternationalTransfers(true);\n$policy->setTransferUponMergerOrAcquisition(true);\n$policy->setTlsEverywhere(true);\n$policy->setCompetentSupervisoryAuthority('Estonian Data Protection Inspectorate', 'http://www.aki.ee/en');\n$policy->setNotificationPeriod(30);\n$policy->setRightOfAccess(true);\n$policy->setRightToRectification(true);\n$policy->setRightToErasure(true);\n$policy->setRightToRestrictProcessing(true);\n$policy->setRightToDataPortability(true);\n$policy->setRightToObject(true);\n$policy->setRightsRelatedToAutomatedDecisions(true);\n```\n\n### Explaining the amount, type and purpose of the data you collect\n\n```php\n$policy->addDataGroup(\n    'Server logs',\n    'Whenever you access our services, ...',\n    [ \\Delight\\PrivacyPolicy\\Data\\DataBasis::LEGITIMATE_INTERESTS ],\n    null, // [ \\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::EXPLICIT_CONSENT ]\n    [ \\Delight\\PrivacyPolicy\\Data\\DataPurpose::ADMINISTRATION ],\n    \\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\n    function (\\Delight\\PrivacyPolicy\\Data\\DataGroup $group) {\n        $group->addElement(\n            \\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_IP_ADDRESS,\n            \\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n            24 * 7\n        );\n    }\n);\n```\n\n#### Lawful bases\n\n```php\n\\Delight\\PrivacyPolicy\\Data\\DataBasis::CONSENT;\n\\Delight\\PrivacyPolicy\\Data\\DataBasis::CONTRACT;\n\\Delight\\PrivacyPolicy\\Data\\DataBasis::LEGAL_OBLIGATION;\n\\Delight\\PrivacyPolicy\\Data\\DataBasis::LEGITIMATE_INTERESTS;\n\\Delight\\PrivacyPolicy\\Data\\DataBasis::PUBLIC_INTEREST;\n\\Delight\\PrivacyPolicy\\Data\\DataBasis::VITAL_INTERESTS;\n```\n\n#### Special conditions\n\n```php\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::ARCHIVING_OR_RESEARCH;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::EMPLOYMENT_AND_SOCIAL_SECURITY;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::EXPLICIT_CONSENT;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::FOUNDATION_ASSOCIATION_OR_NON_PROFIT;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::HEALTH_AND_SOCIAL_CARE;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::LEGAL_CLAIMS_OR_JUDICIAL_CAPACITY;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::PUBLIC_DATA;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::PUBLIC_HEALTH;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::SUBSTANTIAL_PUBLIC_INTEREST;\n\\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::VITAL_INTERESTS;\n```\n\n#### Data purposes\n\n```php\n\\Delight\\PrivacyPolicy\\Data\\DataPurpose::ADMINISTRATION;\n\\Delight\\PrivacyPolicy\\Data\\DataPurpose::ADVERTISING;\n\\Delight\\PrivacyPolicy\\Data\\DataPurpose::CUSTOMER_SUPPORT;\n\\Delight\\PrivacyPolicy\\Data\\DataPurpose::FULFILLMENT;\n\\Delight\\PrivacyPolicy\\Data\\DataPurpose::MARKETING;\n\\Delight\\PrivacyPolicy\\Data\\DataPurpose::PERSONALIZATION;\n\\Delight\\PrivacyPolicy\\Data\\DataPurpose::RESEARCH;\n```\n\n#### Data requirements\n\n```php\n\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS;\n\\Delight\\PrivacyPolicy\\Data\\DataRequirement::OPT_IN;\n\\Delight\\PrivacyPolicy\\Data\\DataRequirement::OPT_OUT;\n```\n\n#### Data types\n\n##### Primary\n\n```php\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_DATETIME_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_DATETIME_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_HTTP_METHOD;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_HTTP_STATUS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_IP_ADDRESS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_IP_ADDRESS_25_PERCENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_IP_ADDRESS_50_PERCENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_IP_ADDRESS_75_PERCENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_REFERER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_SIZE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_URL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_USERAGENT_STRING;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_CANCELLATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_END_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_FREE_TRIAL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_MODIFICATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_NEXT_PAYMENT_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_PAST_DUE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_PLAN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_START_TIME;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::CUSTOMER_NUMBER;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_BROWSER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_BROWSER_BRAND;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_BROWSER_VERSION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_DATETIME_TIME_ZONE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_ID;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_ID_IMEI;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_ID_MAC_ADDRESS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_ID_PERMANENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_ID_RESETTABLE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_LANGUAGE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_LOCATION_APPROXIMATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_LOCATION_PRECISE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_MANUFACTURER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_MODEL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_OS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_OS_BRAND;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_OS_VERSION;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_ACCESS_PRIVILEGES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_ADDRESS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_ADDRESS_COUNTRY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_ADDRESS_LOCALITY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_ADDRESS_PLACE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_ADDRESS_POSTAL_CODE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_ADDRESS_REGION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_BIRTH_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_BIRTH_DATE_MONTH_DAY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_BIRTH_DATE_YEAR;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_BIRTH_DATE_YEAR_MONTH;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_BIRTH_PLACE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_BLOOD_GROUP;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_DEPARTMENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_LOGO;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COUNTRY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_EMAIL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_EMAIL_VERIFIED;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FAX;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_BANK_ACCOUNT_ID;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_BANK_ID;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_BANK_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_CREDIT_CARD_BRAND;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_CREDIT_CARD_CVC;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_CREDIT_CARD_EXPIRATION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_CREDIT_CARD_NUMBER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_GENDER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_GEO_COORDINATES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_HEIGHT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IDENTIFIERS_DEU_ST_IDNR;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IDENTIFIERS_DEU_ST_NR;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IDENTIFIERS_EU_VAT_IN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IDENTIFIERS_USA_SSN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IP_ADDRESS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IP_ADDRESS_25_PERCENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IP_ADDRESS_50_PERCENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IP_ADDRESS_75_PERCENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_LOGIN_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_LOGIN_DATETIME_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_LOGIN_DATETIME_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_NAME_ALIAS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_NAME_FAMILY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_NAME_GIVEN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_NOTES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_OCCUPATION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_OCCUPATION_CURRENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_OCCUPATION_PREFERRED;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PASSWORD_CLEARTEXT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PASSWORD_HASHED;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PASSWORD_HASHED_STRONG;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PASSWORD_RESETTABLE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PHONE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PHONE_HOME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PHONE_MOBILE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PICTURE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_REGISTRATION_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_REGISTRATION_DATETIME_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_REGISTRATION_DATETIME_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_SIGNATURE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_SIGNATURE_DRAWN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_SIGNATURE_HANDWRITTEN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_WEBSITE_URL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_WEIGHT;\n```\n\n##### Secondary\n\n```php\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_APP_VERSION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_FIRST_TIME;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::BILLING_ID_PAYMENT_SERVICE_PROVIDER;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::CALENDAR_EVENT_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CALENDAR_EVENT_DATETIME_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CALENDAR_EVENT_DATETIME_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CALENDAR_EVENT_TITLE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CALENDAR_EVENT_TYPE;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_DIAGNOSTICS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_DIAGNOSTICS_ENERGY_USAGE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_DIAGNOSTICS_ERRORS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_DIAGNOSTICS_ERRORS_LOGS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_DIAGNOSTICS_ERRORS_RATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_DIAGNOSTICS_FRAME_RATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_DIAGNOSTICS_TIMING;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_INTERACTIONS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_INTERACTIONS_CLICKS_OR_TAPS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_INTERACTIONS_SESSIONS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_INTERACTIONS_VIEWS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CLIENT_INTERACTIONS_VISITS;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_ADDRESS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_ADDRESS_COUNTRY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_ADDRESS_LOCALITY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_ADDRESS_PLACE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_ADDRESS_POSTAL_CODE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_ADDRESS_REGION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_BIRTH_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_BIRTH_DATE_MONTH_DAY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_BIRTH_DATE_YEAR;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_BIRTH_DATE_YEAR_MONTH;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_COMPANY_DEPARTMENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_COMPANY_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_CREATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_EMAIL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_FAX;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_FINANCIAL_BANK_ACCOUNT_ID;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_FINANCIAL_BANK_ID;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_FINANCIAL_BANK_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_GENDER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_IDENTIFIERS_EU_VAT_IN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_MODIFICATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_NAME_ALIAS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_NAME_FAMILY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_NAME_GIVEN;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_ORIGINAL_MESSAGE_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_PHONE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_PHONE_HOME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_PHONE_MOBILE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_REFERENCE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTACT_WEBSITE_URL;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_BCC;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_BODY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_CC;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_DATETIME_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_DATETIME_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_FROM;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_REPLY_TO;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_RETURN_PATH;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_SUBJECT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::EMAIL_TO;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::FILE_CONTENTS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::FILE_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::FILE_SIZE;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_AMOUNT_GROSS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_AMOUNT_NET;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_CUSTOMER_NUMBER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_DATETIME_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_FULFILLMENT_PERIOD;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_NUMBER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_RECIPIENT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_TAXES;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_REFERENCE;\n```\n\n##### Tertiary\n\n```php\n\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_DEVICE_FEATURES_FILE_UPLOAD;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_BILLING_AMOUNT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_BILLING_CYCLE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_CANCELLATION_PERIOD;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_CANCELLATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_CREATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_MODIFICATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_NOTES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_PARTNER;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_PERIOD_END;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_PERIOD_EXTENSION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::CONTRACT_PERIOD_START;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_DIAGNOSTICS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_DIAGNOSTICS_ENERGY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_DIAGNOSTICS_ENERGY_LEVEL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::DEVICE_DIAGNOSTICS_ENERGY_SOURCE;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_CREATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_DISCOUNT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_ITEM_DESCRIPTION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_ITEM_DISCOUNT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_ITEM_PRICE_GROSS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_ITEM_PRICE_NET;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_ITEM_QUANTITY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_ITEM_TAXES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_MESSAGE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_MODIFICATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_NOTES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_PAYMENT_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_PAYMENT_TERMS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_REFUND_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::INVOICE_REMINDER_DATETIME;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_BODY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_CC;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_CREATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_DATETIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_DATETIME_DATE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_DATETIME_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_ENCLOSURES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_HEADLINE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_IS_FIRST;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_MATTER_PERSONAL_OR_BUSINESS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_MODIFICATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_PS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_SALUTATION;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_SUBJECT;\n\\Delight\\PrivacyPolicy\\Data\\DataType::LETTER_VALEDICTION;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_COMMERCIAL_REGISTER_ENTRY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_EXECUTIVE_BOARD_MEMBERS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_LOGO_CREATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_LOGO_LABEL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_LOGO_MODIFICATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_MANAGEMENT_MEMBERS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_COMPANY_SUPERVISORY_BOARD_MEMBERS;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_FINANCIAL_PURCHASE_HISTORY;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IDENTIFIERS_ACCOUNT_ID;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IDENTIFIERS_ACCOUNT_NAME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_IDENTIFIERS_ACCOUNT_TYPE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_SIGNATURE_CREATION_TIME;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_SIGNATURE_LABEL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::USER_SIGNATURE_MODIFICATION_TIME;\n\n\\Delight\\PrivacyPolicy\\Data\\DataType::VEHICLE_COLOR;\n\\Delight\\PrivacyPolicy\\Data\\DataType::VEHICLE_CONSTRUCTION_PLACE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::VEHICLE_CONSTRUCTION_YEAR;\n\\Delight\\PrivacyPolicy\\Data\\DataType::VEHICLE_MAKE;\n\\Delight\\PrivacyPolicy\\Data\\DataType::VEHICLE_MODEL;\n\\Delight\\PrivacyPolicy\\Data\\DataType::VEHICLE_NOTES;\n\\Delight\\PrivacyPolicy\\Data\\DataType::VEHICLE_REGISTRATION_PLATE_NUMBER;\n```\n\n### Specifying the scope of your policy\n\n```php\n$policy->addScope(\n    new \\Delight\\PrivacyPolicy\\Scope\\WebsiteScope('https://www.example.com/', 'example.com')\n);\n\n// and/or\n\n$policy->addScope(\n    new \\Delight\\PrivacyPolicy\\Scope\\PlayStoreAndroidAppScope('com.example.app', 'Example for Android')\n);\n\n// and/or\n\n$policy->addScope(\n    new \\Delight\\PrivacyPolicy\\Scope\\AppStoreIosAppScope('54614917093', 'Example for iOS')\n);\n```\n\n### Configuring an instance\n\n#### Privacy policies for machines in formal language\n\n```php\n$policy->setMinified(true);\n```\n\n## Frequently asked questions\n\n### How can I help translate the policy to my language?\n\nIf there's a class for your language in the [`src/Language/`](src/Language/) directory already, you can just start working on that file.\n\nIf there's no such class yet, simply create a new file for your language:\n\n 1. Copy the [template](../../blob/templates/src/Language/MyLanguagePrivacyPolicy.php) class that extends `HumanPrivacyPolicy`\n 1. Rename the class and file to specify the name of your language (following the common naming scheme)\n 1. Update the documentation comment for the class\n 1. Replace all occurrences of\n\n    ```php\n    throw new TranslationNotFoundError();\n    ```\n\n    (except for that in the `default` case of the `switch` block) with a `return` statement specifying the translated string\n\n### Why is the HTML output not displayed correctly when using the “Bootstrap” framework?\n\nThe “Bootstrap” front-end framework overwrites some of the default CSS properties for definition/description lists. In order to fix how the policy is displayed, you have to reset those properties to their default values or improve them further. Usually, you may want to restrict these resets to the container element of your policy.\n\n#### Bootstrap 3\n\n```css\ndl {\n    margin-top: 0;\n    margin-bottom: 16px;\n}\ndl dl {\n    margin-left: 24px;\n}\ndd {\n    margin-bottom: 8px;\n    margin-left: 0;\n}\ndl dl dl dd {\n    margin-bottom: 0;\n}\n```\n\n#### Bootstrap 4\n\n```css\ndl {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\ndl dl {\n    margin-left: 1.5rem;\n}\ndd {\n    margin-bottom: 0.5rem;\n    margin-left: 0;\n}\ndl dl dl dd {\n    margin-bottom: 0;\n}\n```\n\n## Disclaimer\n\nThis project does not constitute legal advice and is not to be relied upon or acted on as such. Any material presented here is for general information purposes only and may be out of date, incomplete or not suitable for your jurisdiction. You should seek independent legal advice from a qualified professional to guide your decisions around a valid and complete privacy policy.\n\n## Contributing\n\nAll contributions are welcome! If you wish to contribute, please create an issue first so that your feature, problem or question can be discussed.\n\n## License\n\nThis project is licensed under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n"
  },
  {
    "path": "Sorting.md",
    "content": "# Sorting\n\n## Blocks of text\n\n### Single-line blocks\n\n```bash\n$ cat unsorted.txt | sed 's/^[ \\t]*//' | LC_ALL=C sort -f > sorted.txt\n```\n\n## Constants\n\n### Single-line constants with preceding single-line documentation comments\n\n```bash\n$ cat unsorted.txt | sed 's/^[ \\t]*//' | awk '{getline x;print x;}1' | paste -d \"\\t\" - - | LC_ALL=C sort -f | tr '\\t' '\\n' | awk '{getline x;print x;}1' > sorted.txt\n```\n\n## Cases in switch statements\n\n### Keywords `case` and `return` on two separate single lines\n\n```bash\n$ cat unsorted.txt | sed 's/^[ \\t]*//' | paste -d \"\\t\" - - | LC_ALL=C sort -f | tr '\\t' '\\n' > sorted.txt\n```\n\n### Keywords `case` and `return` on same single line\n\n```bash\n$ cat unsorted.txt | sed 's/^[ \\t]*//' | LC_ALL=C sort -f > sorted.txt\n```\n"
  },
  {
    "path": "composer.json",
    "content": "{\n\t\"name\": \"delight-im/privacy-policy\",\n\t\"description\": \"Programmatically composable privacy policies for humans and machines\",\n\t\"require\": {\n\t\t\"php\": \">=5.6.0\",\n\t\t\"ext-intl\": \"*\"\n\t},\n\t\"type\": \"library\",\n\t\"keywords\": [ \"privacy-policy\", \"privacy\", \"policy\", \"legal\", \"data-protection\", \"user-data\" ],\n\t\"homepage\": \"https://github.com/delight-im/PHP-PrivacyPolicy\",\n\t\"license\": \"MIT\",\n\t\"autoload\": {\n\t\t\"psr-4\": {\n\t\t\t\"Delight\\\\PrivacyPolicy\\\\\": \"src/\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/Data/DataBasis.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Data;\n\nuse Delight\\PrivacyPolicy\\Throwable\\UnexpectedDataBasisError;\n\n/** Lawful bases for data processing */\nfinal class DataBasis {\n\n\t/** @var string the lawful basis of consent */\n\tconst CONSENT = 'consent';\n\t/** @var string the lawful basis of a contract */\n\tconst CONTRACT = 'contract';\n\t/** @var string the lawful basis of a legal obligation */\n\tconst LEGAL_OBLIGATION = 'legalObligation';\n\t/** @var string the lawful basis of legitimate interests */\n\tconst LEGITIMATE_INTERESTS = 'legitimateInterests';\n\t/** @var string the lawful basis of public interest */\n\tconst PUBLIC_INTEREST = 'publicInterest';\n\t/** @var string the lawful basis of vital interests */\n\tconst VITAL_INTERESTS = 'vitalInterests';\n\n\t/**\n\t * Converts an identifier to a human-readable description in natural language\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return string the description in natural language\n\t * @throws UnexpectedDataBasisError\n\t */\n\tpublic static function toNaturalLanguage($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::CONSENT:\n\t\t\t\treturn 'consent';\n\t\t\tcase self::CONTRACT:\n\t\t\t\treturn 'contract';\n\t\t\tcase self::LEGAL_OBLIGATION:\n\t\t\t\treturn 'legal obligation';\n\t\t\tcase self::LEGITIMATE_INTERESTS:\n\t\t\t\treturn 'legitimate interests';\n\t\t\tcase self::PUBLIC_INTEREST:\n\t\t\t\treturn 'public interest';\n\t\t\tcase self::VITAL_INTERESTS:\n\t\t\t\treturn 'vital interests';\n\t\t\tdefault:\n\t\t\t\tthrow new UnexpectedDataBasisError($identifier);\n\t\t}\n\t}\n\n\t/**\n\t * Converts an identifier to a legal reference in natural language\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return string the legal reference in natural language\n\t * @throws UnexpectedDataBasisError\n\t */\n\tpublic static function toLegalReference($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::CONSENT:\n\t\t\t\treturn 'You have given consent to the processing of your personal data for one or more specific purposes (EU, General Data Protection Regulation (GDPR), Article 6(1)(a)).';\n\t\t\tcase self::CONTRACT:\n\t\t\t\treturn 'Processing is necessary for the performance of a contract to which you are party or in order to take steps at your request prior to entering into a contract (EU, General Data Protection Regulation (GDPR), Article 6(1)(b)).';\n\t\t\tcase self::LEGAL_OBLIGATION:\n\t\t\t\treturn 'Processing is necessary for compliance with a legal obligation to which we are subject (EU, General Data Protection Regulation (GDPR), Article 6(1)(c)).';\n\t\t\tcase self::LEGITIMATE_INTERESTS:\n\t\t\t\treturn 'Processing is necessary for the purposes of legitimate interests pursued by us or by a third party (EU, General Data Protection Regulation (GDPR), Article 6(1)(f)).';\n\t\t\tcase self::PUBLIC_INTEREST:\n\t\t\t\treturn 'Processing is necessary for the performance of a task carried out in the public interest or in the exercise of official authority vested in us (EU, General Data Protection Regulation (GDPR), Article 6(1)(e)).';\n\t\t\tcase self::VITAL_INTERESTS:\n\t\t\t\treturn 'Processing is necessary in order to protect your vital interests or those of another natural person (EU, General Data Protection Regulation (GDPR), Article 6(1)(d)).';\n\t\t\tdefault:\n\t\t\t\tthrow new UnexpectedDataBasisError($identifier);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Data/DataElement.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Data;\n\n/** Individual data element that is collected from the user */\nfinal class DataElement {\n\n\t/** @var string one of the constants from the {@see DataType} class */\n\tprivate $type;\n\t/** @var string one of the constants from the {@see DataRequirement} class */\n\tprivate $requirement;\n\t/** @var int|null the maximum retention time of the information in hours */\n\tprivate $maxRetention;\n\n\t/**\n\t * Returns one of the constants from the {@see DataType} class\n\t *\n\t * @return string\n\t */\n\tpublic function getType() {\n\t\treturn $this->type;\n\t}\n\n\t/**\n\t * Returns one of the constants from the {@see DataRequirement} class\n\t *\n\t * @return string\n\t */\n\tpublic function getRequirement() {\n\t\treturn $this->requirement;\n\t}\n\n\t/**\n\t * Returns whether a maximum retention time of the information has been defined\n\t *\n\t * @return bool\n\t */\n\tpublic function hasMaxRetention() {\n\t\treturn $this->maxRetention !== null;\n\t}\n\n\t/**\n\t * Returns the maximum retention time of the information in hours\n\t *\n\t * @return int|null\n\t */\n\tpublic function getMaxRetention() {\n\t\treturn $this->maxRetention;\n\t}\n\n\t/**\n\t * Creates a new individual data element\n\t *\n\t * @param string $type one of the constants from the {@see DataType} class\n\t * @param string|null $requirement (optional) one of the constants from the {@see DataRequirement} class\n\t * @param int|null $maxRetention (optional) the maximum retention time of the information in hours\n\t */\n\tpublic function __construct($type, $requirement = null, $maxRetention = null) {\n\t\t$this->type = (string) $type;\n\t\t$this->requirement = $requirement !== null ? ((string) $requirement) : DataRequirement::ALWAYS;\n\t\t$this->maxRetention = $maxRetention !== null ? ((int) $maxRetention) : null;\n\t}\n\n}\n"
  },
  {
    "path": "src/Data/DataGroup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Data;\n\n/** Group of data elements that are collected from the user */\nfinal class DataGroup {\n\n\t/** @var string the title of the group in natural language */\n\tprivate $title;\n\t/** @var string|null the description of the group and of the circumstances of collection in natural language */\n\tprivate $description;\n\t/** @var string[] any number of constants from the {@see DataBasis} class */\n\tprivate $bases;\n\t/** @var string[] any number of constants from the {@see DataSpecialCondition} class */\n\tprivate $specialConditions;\n\t/** @var string[] any number of constants from the {@see DataPurpose} class */\n\tprivate $purposes;\n\t/** @var string one of the constants from the {@see DataRequirement} class */\n\tprivate $requirement;\n\t/** @var DataElement[] any number of {@see DataElement} instances */\n\tprivate $dataElements;\n\n\t/**\n\t * Returns the title of the group in natural language\n\t *\n\t * @return string\n\t */\n\tpublic function getTitle() {\n\t\treturn $this->title;\n\t}\n\n\t/**\n\t * Returns whether a description of the group and of the circumstances of collection in natural language has been defined\n\t *\n\t * @return bool\n\t */\n\tpublic function hasDescription() {\n\t\treturn $this->description !== null;\n\t}\n\n\t/**\n\t * Returns the description of the group and of the circumstances of collection in natural language\n\t *\n\t * @return string|null\n\t */\n\tpublic function getDescription() {\n\t\treturn $this->description;\n\t}\n\n\t/**\n\t * Returns whether any constants from the {@see DataBasis} class have been added\n\t *\n\t * @return bool\n\t */\n\tpublic function hasBases() {\n\t\treturn !empty($this->bases);\n\t}\n\n\t/**\n\t * Returns any number of constants from the {@see DataBasis} class\n\t *\n\t * @return string[]\n\t */\n\tpublic function getBases() {\n\t\treturn $this->bases;\n\t}\n\n\t/**\n\t * Returns whether any constants from the {@see DataSpecialCondition} class have been added\n\t *\n\t * @return bool\n\t */\n\tpublic function hasSpecialConditions() {\n\t\treturn !empty($this->specialConditions);\n\t}\n\n\t/**\n\t * Returns any number of constants from the {@see DataSpecialCondition} class\n\t *\n\t * @return string[]\n\t */\n\tpublic function getSpecialConditions() {\n\t\treturn $this->specialConditions;\n\t}\n\n\t/**\n\t * Returns whether any constants from the {@see DataPurpose} class have been added\n\t *\n\t * @return bool\n\t */\n\tpublic function hasPurposes() {\n\t\treturn !empty($this->purposes);\n\t}\n\n\t/**\n\t * Returns any number of constants from the {@see DataPurpose} class\n\t *\n\t * @return string[]\n\t */\n\tpublic function getPurposes() {\n\t\treturn $this->purposes;\n\t}\n\n\t/**\n\t * Returns one of the constants from the {@see DataRequirement} class\n\t *\n\t * @return string\n\t */\n\tpublic function getRequirement() {\n\t\treturn $this->requirement;\n\t}\n\n\t/**\n\t * Returns whether any {@see DataElement} instances have been added\n\t *\n\t * @return bool\n\t */\n\tpublic function hasElements() {\n\t\treturn !empty($this->dataElements);\n\t}\n\n\t/**\n\t * Returns any number of {@see DataElement} instances\n\t *\n\t * @return DataElement[]\n\t */\n\tpublic function getElements() {\n\t\treturn $this->dataElements;\n\t}\n\n\t/**\n\t * Adds a new data element to the group\n\t *\n\t * @param string $type one of the constants from the {@see DataType} class\n\t * @param string|null $requirement (optional) one of the constants from the {@see DataRequirement} class\n\t * @param int|null $maxRetention (optional) the maximum retention time of the information in hours\n\t */\n\tpublic function addElement($type, $requirement = null, $maxRetention = null) {\n\t\t$this->dataElements[] = new DataElement($type, $requirement, $maxRetention);\n\t}\n\n\t/**\n\t * Creates a new group of data elements\n\t *\n\t * @param string $title the title of the group in natural language, e.g. `Registration data` or `Access logs`\n\t * @param string|null $description (optional) the description of the group and of the circumstances of collection in natural language\n\t * @param string[]|null $bases (optional) any number of constants from the {@see DataBasis} class\n\t * @param string[]|null $specialConditions (optional) any number of constants from the {@see DataSpecialCondition} class\n\t * @param string[]|null $purposes (optional) any number of constants from the {@see DataPurpose} class\n\t * @param string|null $requirement (optional) one of the constants from the {@see DataRequirement} class\n\t * @param callable|null $init (optional) a callback that receives the new instance and may initialize it\n\t */\n\tpublic function __construct($title, $description = null, array $bases = null, array $specialConditions = null, array $purposes = null, $requirement = null, callable $init = null) {\n\t\t$this->title = (string) $title;\n\t\t$this->description = ($description !== null) ? ((string) $description) : null;\n\t\t$this->bases = ($bases !== null) ? ((array) $bases) : [];\n\t\t$this->specialConditions = ($specialConditions !== null) ? ((array) $specialConditions) : [];\n\t\t$this->purposes = ($purposes !== null) ? ((array) $purposes) : [];\n\t\t$this->requirement = ($requirement !== null) ? ((string) $requirement) : DataRequirement::ALWAYS;\n\t\t$this->dataElements = [];\n\n\t\tif (\\is_callable($init)) {\n\t\t\t$init($this);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Data/DataPurpose.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Data;\n\nuse Delight\\PrivacyPolicy\\Throwable\\UnexpectedDataPurposeError;\n\n/** Purposes of data collection */\nfinal class DataPurpose {\n\n\t/**\n\t * Information is collected for the technical administration, maintenance and support of the provided\n\t * services and the overall information system\n\t *\n\t * Communication with the user via external channels outside of the provided services (e.g. via\n\t * email, text message or phone call) is only covered if such communication is essential for the\n\t * administration and security of the service\n\t *\n\t * Examples: authentication, logging, password reset email, two-factor authentication\n\t *\n\t * @var string\n\t */\n\tconst ADMINISTRATION = 'administration';\n\n\t/**\n\t * Information is collected to provide or enhance advertising that is displayed, rendered, played\n\t * back or otherwise conveyed within the services\n\t *\n\t * Examples: Google AdSense, Facebook Ads, AdMob\n\t *\n\t * @var string\n\t */\n\tconst ADVERTISING = 'advertising';\n\n\t/**\n\t * Information is collected for the provision of customer service via direct replies to inquiries or\n\t * questions by the user or via transactional information given to the user in connection with a\n\t * specific order, request or other activity\n\t *\n\t * Examples: Contact form, order confirmation, email response\n\t *\n\t * @var string\n\t */\n\tconst CUSTOMER_SUPPORT = 'customer_support';\n\n\t/**\n\t * Information is collected for the fulfillment and support of the tasks or activities explicitly\n\t * requested by the user, which may either be one-time procedures, recurring tasks or ongoing activities\n\t *\n\t * The user should have been informed in a clear and concise way about the nature and duration of the task\n\t *\n\t * Once the task has been completed, the data should be deleted by the service provider, unless other\n\t * purposes have been claimed and explained to the user as such\n\t *\n\t * Examples: Shopping cart, order placement, product search, private messaging, public posts\n\t *\n\t * @var string\n\t */\n\tconst FULFILLMENT = 'fulfillment';\n\n\t/**\n\t * Information is collected to contact users for marketing or promotional purposes\n\t *\n\t * Examples: newsletters, notifications about new features or site updates, information about related products\n\t *\n\t * @var string\n\t */\n\tconst MARKETING = 'marketing';\n\n\t/**\n\t * Information is collected in order to personalize or tailor the content or the design of services\n\t * to the (perceived) preferences of the user\n\t *\n\t * Personalization of advertising, especially when data is transmitted to third parties, is not covered\n\t *\n\t * Examples: selection of topics, related products, adjustments to user interface\n\t *\n\t * @var string\n\t */\n\tconst PERSONALIZATION = 'personalization';\n\n\t/**\n\t * Information is collected for research and analysis aimed at making general improvements to the services\n\t * for all users through evaluations and reviews based on average results or average usage statistics\n\t *\n\t * Tracking, targeting or profiling individual users is not covered and should be regarded as marketing\n\t * or personalization instead, whichever applies\n\t *\n\t * Examples: A/B testing, heat maps, traffic sources, analysis of demographics, bounce rates\n\t *\n\t * @var string\n\t */\n\tconst RESEARCH = 'research';\n\n\t/**\n\t * Converts an identifier to a human-readable description in natural language\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return string the description in natural language\n\t * @throws UnexpectedDataPurposeError\n\t */\n\tpublic static function toNaturalLanguage($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::ADMINISTRATION:\n\t\t\t\treturn 'We use this information for the provision, maintenance and administration of our services and to monitor and protect the security of our services.';\n\t\t\tcase self::ADVERTISING:\n\t\t\t\treturn 'We use this information to provide meaningful and unobtrusive advertising to you.';\n\t\t\tcase self::CUSTOMER_SUPPORT:\n\t\t\t\treturn 'We use this information to provide customer service to you, to answer your questions and to communicate with you about your use of our services.';\n\t\t\tcase self::FULFILLMENT:\n\t\t\t\treturn 'We use this information to provide and fulfill the specific services that you explicitly request.';\n\t\t\tcase self::MARKETING:\n\t\t\t\treturn 'We use this information for marketing and promotional purposes.';\n\t\t\tcase self::PERSONALIZATION:\n\t\t\t\treturn 'We use this information to personalize our services for you and to adjust them to your preferences.';\n\t\t\tcase self::RESEARCH:\n\t\t\t\treturn 'We use this information to improve our services through research and analysis and to better understand how our services are used.';\n\t\t\tdefault:\n\t\t\t\tthrow new UnexpectedDataPurposeError($identifier);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Data/DataRequirement.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Data;\n\nuse Delight\\PrivacyPolicy\\Throwable\\UnexpectedDataRequirementError;\n\n/** Specification of whether information is required and whether consent is needed */\nfinal class DataRequirement {\n\n\t/**\n\t * Specifies that a service cannot be used without the collection of certain information\n\t *\n\t * @var string\n\t */\n\tconst ALWAYS = 'always';\n\n\t/**\n\t * Specifies that a service may be used without the collection of certain information\n\t *\n\t * The user must explicitly consent to the collection of the information in advance\n\t *\n\t * @var string\n\t */\n\tconst OPT_IN = 'optIn';\n\n\t/**\n\t * Specifies that a service may be used without the collection of certain information\n\t *\n\t * The user may withdraw their consent to the collection of the information retroactively\n\t *\n\t * @var string\n\t */\n\tconst OPT_OUT = 'optOut';\n\n\t/**\n\t * Converts an identifier to a boolean value indicating whether there is a requirement\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return bool\n\t * @throws UnexpectedDataRequirementError\n\t */\n\tpublic static function toBool($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::ALWAYS:\n\t\t\t\treturn true;\n\t\t\tcase self::OPT_IN:\n\t\t\t\treturn false;\n\t\t\tcase self::OPT_OUT:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\tthrow new UnexpectedDataRequirementError($identifier);\n\t\t}\n\t}\n\n\t/**\n\t * Converts an identifier to a human-readable description in natural language\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return string the description in natural language\n\t * @throws UnexpectedDataRequirementError\n\t */\n\tpublic static function toNaturalLanguage($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::ALWAYS:\n\t\t\t\treturn 'This information is required for the operation of our services and its collection is therefore a condition for your use of our services.';\n\t\t\tcase self::OPT_IN:\n\t\t\t\treturn 'This information is not required and you can use parts of our services without this information. You have to give your consent before we collect this data, but some features may not be available without.';\n\t\t\tcase self::OPT_OUT:\n\t\t\t\treturn 'This information is not required and you can use parts of our services without this information. You may withdraw your consent for our collection of this data, but some features may not be available without.';\n\t\t\tdefault:\n\t\t\t\tthrow new UnexpectedDataRequirementError($identifier);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Data/DataSpecialCondition.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Data;\n\nuse Delight\\PrivacyPolicy\\Throwable\\UnexpectedDataSpecialConditionError;\n\n/** Conditions for the processing of special categories of personal data */\nfinal class DataSpecialCondition {\n\n\t/** @var string the special condition of archiving or research */\n\tconst ARCHIVING_OR_RESEARCH = 'archivingOrResearch';\n\t/** @var string the special condition of employment and social security */\n\tconst EMPLOYMENT_AND_SOCIAL_SECURITY = 'employmentAndSocialSecurity';\n\t/** @var string the special condition of explicit consent */\n\tconst EXPLICIT_CONSENT = 'explicitConsent';\n\t/** @var string the special condition of a foundation, association or non-profit */\n\tconst FOUNDATION_ASSOCIATION_OR_NON_PROFIT = 'foundationAssociationOrNonProfit';\n\t/** @var string the special condition of health and social care */\n\tconst HEALTH_AND_SOCIAL_CARE = 'healthAndSocialCare';\n\t/** @var string the special condition of legal claims or judicial capacity */\n\tconst LEGAL_CLAIMS_OR_JUDICIAL_CAPACITY = 'legalClaimsOrJudicialCapacity';\n\t/** @var string the special condition of public data */\n\tconst PUBLIC_DATA = 'publicData';\n\t/** @var string the special condition of public health */\n\tconst PUBLIC_HEALTH = 'publicHealth';\n\t/** @var string the special condition of substantial public interest */\n\tconst SUBSTANTIAL_PUBLIC_INTEREST = 'substantialPublicInterest';\n\t/** @var string the special condition of vital interests */\n\tconst VITAL_INTERESTS = 'vitalInterests';\n\n\t/**\n\t * Converts an identifier to a human-readable description in natural language\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return string the description in natural language\n\t * @throws UnexpectedDataSpecialConditionError\n\t */\n\tpublic static function toNaturalLanguage($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::ARCHIVING_OR_RESEARCH:\n\t\t\t\treturn 'archiving or research';\n\t\t\tcase self::EMPLOYMENT_AND_SOCIAL_SECURITY:\n\t\t\t\treturn 'employment and social security';\n\t\t\tcase self::EXPLICIT_CONSENT:\n\t\t\t\treturn 'explicit consent';\n\t\t\tcase self::FOUNDATION_ASSOCIATION_OR_NON_PROFIT:\n\t\t\t\treturn 'foundation, association or non-profit';\n\t\t\tcase self::HEALTH_AND_SOCIAL_CARE:\n\t\t\t\treturn 'health and social care';\n\t\t\tcase self::LEGAL_CLAIMS_OR_JUDICIAL_CAPACITY:\n\t\t\t\treturn 'legal claims or judicial capacity';\n\t\t\tcase self::PUBLIC_DATA:\n\t\t\t\treturn 'public data';\n\t\t\tcase self::PUBLIC_HEALTH:\n\t\t\t\treturn 'public health';\n\t\t\tcase self::SUBSTANTIAL_PUBLIC_INTEREST:\n\t\t\t\treturn 'substantial public interest';\n\t\t\tcase self::VITAL_INTERESTS:\n\t\t\t\treturn 'vital interests';\n\t\t\tdefault:\n\t\t\t\tthrow new UnexpectedDataSpecialConditionError($identifier);\n\t\t}\n\t}\n\n\t/**\n\t * Converts an identifier to a legal reference in natural language\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return string the legal reference in natural language\n\t * @throws UnexpectedDataSpecialConditionError\n\t */\n\tpublic static function toLegalReference($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::ARCHIVING_OR_RESEARCH:\n\t\t\t\treturn 'Processing is necessary for archiving purposes in the public interest, scientific or historical research purposes or statistical purposes (EU, General Data Protection Regulation (GDPR), Article 9(2)(j)).';\n\t\t\tcase self::EMPLOYMENT_AND_SOCIAL_SECURITY:\n\t\t\t\treturn 'Processing is necessary for the purposes of carrying out obligations and exercising specific rights in the field of employment and social security and social protection law (EU, General Data Protection Regulation (GDPR), Article 9(2)(b)).';\n\t\t\tcase self::EXPLICIT_CONSENT:\n\t\t\t\treturn 'You have given explicit consent to the processing of your personal data for one or more specified purposes (EU, General Data Protection Regulation (GDPR), Article 9(2)(a)).';\n\t\t\tcase self::FOUNDATION_ASSOCIATION_OR_NON_PROFIT:\n\t\t\t\treturn 'Processing is carried out by a foundation, association or any other not-for-profit body with a political, philosophical, religious or trade union aim and on condition that the processing relates solely to the members or to former members of the body or to persons who have regular contact with it (EU, General Data Protection Regulation (GDPR), Article 9(2)(d)).';\n\t\t\tcase self::HEALTH_AND_SOCIAL_CARE:\n\t\t\t\treturn 'Processing is necessary for the purposes of preventive or occupational medicine, for the assessment of the working capacity of the employee, medical diagnosis, the provision of health or social care or treatment or the management of health or social care systems and services (EU, General Data Protection Regulation (GDPR), Article 9(2)(h)).';\n\t\t\tcase self::LEGAL_CLAIMS_OR_JUDICIAL_CAPACITY:\n\t\t\t\treturn 'Processing is necessary for the establishment, exercise or defence of legal claims or for a court acting in its judicial capacity (EU, General Data Protection Regulation (GDPR), Article 9(2)(f)).';\n\t\t\tcase self::PUBLIC_DATA:\n\t\t\t\treturn 'Processing relates to personal data that you manifestly make public (EU, General Data Protection Regulation (GDPR), Article 9(2)(e)).';\n\t\t\tcase self::PUBLIC_HEALTH:\n\t\t\t\treturn 'Processing is necessary for reasons of public interest in the area of public health, such as protecting against serious cross-border threats to health or ensuring high standards of quality and safety of health care and of medicinal products or medical devices (EU, General Data Protection Regulation (GDPR), Article 9(2)(i)).';\n\t\t\tcase self::SUBSTANTIAL_PUBLIC_INTEREST:\n\t\t\t\treturn 'Processing is necessary for reasons of substantial public interest (EU, General Data Protection Regulation (GDPR), Article 9(2)(g)).';\n\t\t\tcase self::VITAL_INTERESTS:\n\t\t\t\treturn 'Processing is necessary to protect your vital interests or those of another natural person where you are physically or legally incapable of giving consent (EU, General Data Protection Regulation (GDPR), Article 9(2)(c)).';\n\t\t\tdefault:\n\t\t\t\tthrow new UnexpectedDataSpecialConditionError($identifier);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Data/DataType.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Data;\n\nuse Delight\\PrivacyPolicy\\Throwable\\UnexpectedDataTypeError;\n\n/** Types of individual data elements collected from the user */\nfinal class DataType {\n\n\t/** @var string the version of the application that has been used by the user for their access */\n\tconst ACCESS_APP_VERSION = 'access.app.version';\n\t/** @var string the date and time of each individual access by the user (e.g. as stored in the access logs) */\n\tconst ACCESS_DATETIME = 'access.datetime';\n\t/** @var string the date of each individual access by the user (e.g. as stored in the access logs) */\n\tconst ACCESS_DATETIME_DATE = 'access.datetime.date';\n\t/** @var string the time of each individual access by the user (e.g. as stored in the access logs) */\n\tconst ACCESS_DATETIME_TIME = 'access.datetime.time';\n\t/** @var string whether the device used for the access supports file uploads */\n\tconst ACCESS_DEVICE_FEATURES_FILE_UPLOAD = 'access.device.features.file_upload';\n\t/** @var string the date and/or time of the first individual access by the user */\n\tconst ACCESS_FIRST_TIME = 'access.first.time';\n\t/** @var string the HTTP request method of each individual access by the user (e.g. as stored in the access logs) */\n\tconst ACCESS_HTTP_METHOD = 'access.http.method';\n\t/** @var string the HTTP status code of each individual access by the user (e.g. as stored in the access logs) */\n\tconst ACCESS_HTTP_STATUS = 'access.http.status';\n\t/** @var string the Internet Protocol (IP) address of the user for each individual access (e.g. as stored in the access logs) */\n\tconst ACCESS_IP_ADDRESS = 'access.ip.address';\n\t/** @var string the Internet Protocol (IP) address of the user for each individual access with its precision reduced to 25% (e.g. as stored in the access logs) */\n\tconst ACCESS_IP_ADDRESS_25_PERCENT = 'access.ip.address.25_percent';\n\t/** @var string the Internet Protocol (IP) address of the user for each individual access with its precision reduced to 50% (e.g. as stored in the access logs) */\n\tconst ACCESS_IP_ADDRESS_50_PERCENT = 'access.ip.address.50_percent';\n\t/** @var string the Internet Protocol (IP) address of the user for each individual access with its precision reduced to 75% (e.g. as stored in the access logs) */\n\tconst ACCESS_IP_ADDRESS_75_PERCENT = 'access.ip.address.75_percent';\n\t/** @var string the referring site (or individual page) of the user for each individual access (e.g. as stored in the access logs) */\n\tconst ACCESS_REFERER = 'access.referer';\n\t/** @var string the amount of data transferred (usually the number of bytes sent or received) for each individual access by the user (e.g. as stored in the access logs) */\n\tconst ACCESS_SIZE = 'access.size';\n\t/** @var string the requested URL for each individual access by the user (e.g. as stored in the access logs) */\n\tconst ACCESS_URL = 'access.url';\n\t/** @var string the user-agent string of the user for each individual access (e.g. as stored in the access logs) */\n\tconst ACCESS_USERAGENT_STRING = 'access.useragent.string';\n\t/** @var string the date and/or time when billing has been cancelled */\n\tconst BILLING_CANCELLATION_TIME = 'billing.cancellation.time';\n\t/** @var string the date and/or time when billing has ended or will end */\n\tconst BILLING_END_TIME = 'billing.end.time';\n\t/** @var string whether a free trial is currently active */\n\tconst BILLING_FREE_TRIAL = 'billing.free_trial';\n\t/** @var string an identification number with an external payment service provider */\n\tconst BILLING_ID_PAYMENT_SERVICE_PROVIDER = 'billing.id.payment_service_provider';\n\t/** @var string the date and/or time when billing options have most recently been modified */\n\tconst BILLING_MODIFICATION_TIME = 'billing.modification.time';\n\t/** @var string the date and/or time of the next (scheduled) payment */\n\tconst BILLING_NEXT_PAYMENT_TIME = 'billing.next_payment.time';\n\t/** @var string whether there are payments past due at the moment */\n\tconst BILLING_PAST_DUE = 'billing.past_due';\n\t/** @var string the plan or package that has been chosen and is used for billing */\n\tconst BILLING_PLAN = 'billing.plan';\n\t/** @var string the date and/or time when billing has started */\n\tconst BILLING_START_TIME = 'billing.start.time';\n\t/** @var string the date and time of an event in the calendar of the user */\n\tconst CALENDAR_EVENT_DATETIME = 'calendar.event.datetime';\n\t/** @var string the date of an event in the calendar of the user */\n\tconst CALENDAR_EVENT_DATETIME_DATE = 'calendar.event.datetime.date';\n\t/** @var string the time of an event in the calendar of the user */\n\tconst CALENDAR_EVENT_DATETIME_TIME = 'calendar.event.datetime.time';\n\t/** @var string the title of an event in the calendar of the user */\n\tconst CALENDAR_EVENT_TITLE = 'calendar.event.title';\n\t/** @var string the type of an event in the calendar of the user */\n\tconst CALENDAR_EVENT_TYPE = 'calendar.event.type';\n\t/** @var string diagnostics data relating to the client application of the user */\n\tconst CLIENT_DIAGNOSTICS = 'client.diagnostics';\n\t/** @var string the energy usage in the client application of the user */\n\tconst CLIENT_DIAGNOSTICS_ENERGY_USAGE = 'client.diagnostics.energy_usage';\n\t/** @var string data on errors in the client application of the user */\n\tconst CLIENT_DIAGNOSTICS_ERRORS = 'client.diagnostics.errors';\n\t/** @var string error logs from the client application of the user */\n\tconst CLIENT_DIAGNOSTICS_ERRORS_LOGS = 'client.diagnostics.errors.logs';\n\t/** @var string the error rate in the client application of the user */\n\tconst CLIENT_DIAGNOSTICS_ERRORS_RATE = 'client.diagnostics.errors.rate';\n\t/** @var string the frame rate in the client application of the user */\n\tconst CLIENT_DIAGNOSTICS_FRAME_RATE = 'client.diagnostics.frame_rate';\n\t/** @var string timing data from the client application of the user */\n\tconst CLIENT_DIAGNOSTICS_TIMING = 'client.diagnostics.timing';\n\t/** @var string data on the user's activity within the client application */\n\tconst CLIENT_INTERACTIONS = 'client.interactions';\n\t/** @var string data on the user's clicks or taps within the client application */\n\tconst CLIENT_INTERACTIONS_CLICKS_OR_TAPS = 'client.interactions.clicks_or_taps';\n\t/** @var string the number of sessions by the user within the client application */\n\tconst CLIENT_INTERACTIONS_SESSIONS = 'client.interactions.sessions';\n\t/** @var string the number of views by the user within the client application */\n\tconst CLIENT_INTERACTIONS_VIEWS = 'client.interactions.views';\n\t/** @var string the number of visits by the user within the client application */\n\tconst CLIENT_INTERACTIONS_VISITS = 'client.interactions.visits';\n\t/** @var string the physical address of one of the user's contacts */\n\tconst CONTACT_ADDRESS = 'contact.address';\n\t/** @var string the country as part of the physical address of one of the user's contacts */\n\tconst CONTACT_ADDRESS_COUNTRY = 'contact.address.country';\n\t/** @var string the locality (usually the city) as part of the physical address of one of the user's contacts */\n\tconst CONTACT_ADDRESS_LOCALITY = 'contact.address.locality';\n\t/** @var string the location of a building or apartment (usually including the street, the street or house number, and potentially the apartment number) within a locality as part of the physical address of one of the user's contacts */\n\tconst CONTACT_ADDRESS_PLACE = 'contact.address.place';\n\t/** @var string the postal code as part of the physical address of one of the user's contacts */\n\tconst CONTACT_ADDRESS_POSTAL_CODE = 'contact.address.postal_code';\n\t/** @var string the region (often the state or province) as part of the physical address of one of the user's contacts */\n\tconst CONTACT_ADDRESS_REGION = 'contact.address.region';\n\t/** @var string the complete date of birth of one of the user's contacts */\n\tconst CONTACT_BIRTH_DATE = 'contact.birth.date';\n\t/** @var string the month and day of the date of birth of one of the user's contacts */\n\tconst CONTACT_BIRTH_DATE_MONTH_DAY = 'contact.birth.date.md';\n\t/** @var string the year of the date of birth of one of the user's contacts */\n\tconst CONTACT_BIRTH_DATE_YEAR = 'contact.birth.date.y';\n\t/** @var string the year and month of the date of birth of one of the user's contacts */\n\tconst CONTACT_BIRTH_DATE_YEAR_MONTH = 'contact.birth.date.ym';\n\t/** @var string the department of one of the user's contacts within their company */\n\tconst CONTACT_COMPANY_DEPARTMENT = 'contact.company.department';\n\t/** @var string the name of the company of one of the user's contacts */\n\tconst CONTACT_COMPANY_NAME = 'contact.company.name';\n\t/** @var string the date and/or time the contact has been created */\n\tconst CONTACT_CREATION_TIME = 'contact.creation.time';\n\t/** @var string the email address of one of the user's contacts */\n\tconst CONTACT_EMAIL = 'contact.email';\n\t/** @var string the fax number of one of the user's contacts */\n\tconst CONTACT_FAX = 'contact.fax';\n\t/** @var string the identifying number or ID (e.g. IBAN) of the bank account of one of the user's contacts */\n\tconst CONTACT_FINANCIAL_BANK_ACCOUNT_ID = 'contact.financial.bank.account.id';\n\t/** @var string the identifying number or ID (e.g. BIC) of the bank or financial institute of one of the user's contacts */\n\tconst CONTACT_FINANCIAL_BANK_ID = 'contact.financial.bank.id';\n\t/** @var string the name of the bank or financial institute of one of the user's contacts */\n\tconst CONTACT_FINANCIAL_BANK_NAME = 'contact.financial.bank.name';\n\t/** @var string the gender of one of the user's contacts */\n\tconst CONTACT_GENDER = 'contact.gender';\n\t/** @var string the value-added tax (VAT) identification number (IN) (VATIN) of a contact in the European Union */\n\tconst CONTACT_IDENTIFIERS_EU_VAT_IN = 'contact.identifiers.eu.vat.in';\n\t/** @var string the date and/or time the contact has most recently been modified */\n\tconst CONTACT_MODIFICATION_TIME = 'contact.modification.time';\n\t/** @var string the name of one of the user's contacts */\n\tconst CONTACT_NAME = 'contact.name';\n\t/** @var string the alias, nickname or username of one of the user's contacts */\n\tconst CONTACT_NAME_ALIAS = 'contact.name.alias';\n\t/** @var string the family name of one of the user's contacts */\n\tconst CONTACT_NAME_FAMILY = 'contact.name.family';\n\t/** @var string the given name of one of the user's contacts */\n\tconst CONTACT_NAME_GIVEN = 'contact.name.given';\n\t/** @var string the date and/or time of the contact's original message */\n\tconst CONTACT_ORIGINAL_MESSAGE_TIME = 'contact.original_message.time';\n\t/** @var string the phone number of one of the user's contacts */\n\tconst CONTACT_PHONE = 'contact.phone';\n\t/** @var string the landline phone number of one of the user's contacts */\n\tconst CONTACT_PHONE_HOME = 'contact.phone.home';\n\t/** @var string the mobile phone number of one of the user's contacts */\n\tconst CONTACT_PHONE_MOBILE = 'contact.phone.mobile';\n\t/** @var string the contact's reference as a number or as text */\n\tconst CONTACT_REFERENCE = 'contact.reference';\n\t/** @var string the URL of the website of one of the user's contacts */\n\tconst CONTACT_WEBSITE_URL = 'contact.website.url';\n\t/** @var string the price, cost or other monetary amount of one of the user's contracts per billing cycle */\n\tconst CONTRACT_BILLING_AMOUNT = 'contract.billing.amount';\n\t/** @var string the billing cycle of one of the user's contracts */\n\tconst CONTRACT_BILLING_CYCLE = 'contract.billing.cycle';\n\t/** @var string the cancellation period of one of the user's contracts */\n\tconst CONTRACT_CANCELLATION_PERIOD = 'contract.cancellation.period';\n\t/** @var string the date and/or time the contract has been cancelled */\n\tconst CONTRACT_CANCELLATION_TIME = 'contract.cancellation.time';\n\t/** @var string the date and/or time the contract has been created */\n\tconst CONTRACT_CREATION_TIME = 'contract.creation.time';\n\t/** @var string the date and/or time the contract has most recently been modified */\n\tconst CONTRACT_MODIFICATION_TIME = 'contract.modification.time';\n\t/** @var string any custom notes pertaining to one of the user's contracts */\n\tconst CONTRACT_NOTES = 'contract.notes';\n\t/** @var string the contractual partner or (second) contracting party of one of the user's contracts */\n\tconst CONTRACT_PARTNER = 'contract.partner';\n\t/** @var string the end date of a period of one of the user's contracts */\n\tconst CONTRACT_PERIOD_END = 'contract.period.end';\n\t/** @var string the term of extension on (automatic) renewal of one of the user's contracts */\n\tconst CONTRACT_PERIOD_EXTENSION = 'contract.period.extension';\n\t/** @var string the start date of a period of one of the user's contracts */\n\tconst CONTRACT_PERIOD_START = 'contract.period.start';\n\t/** @var string the customer number */\n\tconst CUSTOMER_NUMBER = 'customer.number';\n\t/** @var string the brand and version of the web browser on one of the user's devices */\n\tconst DEVICE_BROWSER = 'device.browser';\n\t/** @var string the brand of the web browser on one of the user's devices */\n\tconst DEVICE_BROWSER_BRAND = 'device.browser.brand';\n\t/** @var string the version of the web browser on one of the user's devices */\n\tconst DEVICE_BROWSER_VERSION = 'device.browser.version';\n\t/** @var string the primary time zone that one of the user's devices is configured for */\n\tconst DEVICE_DATETIME_TIME_ZONE = 'device.datetime.time_zone';\n\t/** @var string diagnostics data relating to the device of the user */\n\tconst DEVICE_DIAGNOSTICS = 'device.diagnostics';\n\t/** @var string data on energy relating to the device of the user */\n\tconst DEVICE_DIAGNOSTICS_ENERGY = 'device.diagnostics.energy';\n\t/** @var string the energy level of the device of the user */\n\tconst DEVICE_DIAGNOSTICS_ENERGY_LEVEL = 'device.diagnostics.energy.level';\n\t/** @var string the energy source for the device of the user */\n\tconst DEVICE_DIAGNOSTICS_ENERGY_SOURCE = 'device.diagnostics.energy.source';\n\t/** @var string a unique identifier of the user's device */\n\tconst DEVICE_ID = 'device.id';\n\t/** @var string the International Mobile Equipment Identity (IMEI) of the user's device */\n\tconst DEVICE_ID_IMEI = 'device.id.imei';\n\t/** @var string the MAC address of the user's device */\n\tconst DEVICE_ID_MAC_ADDRESS = 'device.id.mac_address';\n\t/** @var string a unique identifier of one of the user's devices that remains constant for the lifetime of the device (e.g. \"Android ID\") */\n\tconst DEVICE_ID_PERMANENT = 'device.id.permanent';\n\t/** @var string a unique identifier of one of the user's devices that can be reset by the user at any time (e.g. \"Android Advertising ID\" or \"Apple Advertising Identifier\") */\n\tconst DEVICE_ID_RESETTABLE = 'device.id.resettable';\n\t/** @var string the preferred language that one of the user's devices is configured for */\n\tconst DEVICE_LANGUAGE = 'device.language';\n\t/** @var string the approximate location of the user's device (e.g. city-level, IP-based) */\n\tconst DEVICE_LOCATION_APPROXIMATE = 'device.location.approximate';\n\t/** @var string the precise location of the user's device (e.g. GPS-based) */\n\tconst DEVICE_LOCATION_PRECISE = 'device.location.precise';\n\t/** @var string the manufacturer of one of the user's devices */\n\tconst DEVICE_MANUFACTURER = 'device.manufacturer';\n\t/** @var string the model name of one of the user's devices */\n\tconst DEVICE_MODEL = 'device.model';\n\t/** @var string the brand and version of the operating system (OS) on one of the user's devices */\n\tconst DEVICE_OS = 'device.os';\n\t/** @var string the brand of the operating system (OS) on one of the user's devices */\n\tconst DEVICE_OS_BRAND = 'device.os.brand';\n\t/** @var string the version of the operating system (OS) on one of the user's devices */\n\tconst DEVICE_OS_VERSION = 'device.os.version';\n\t/** @var string the hidden list of additional (concealed) recipients of an email other than the primary recipient(s) */\n\tconst EMAIL_BCC = 'email.bcc';\n\t/** @var string the message body or actual text of an email */\n\tconst EMAIL_BODY = 'email.body';\n\t/** @var string the list of additional recipients of an email other than the primary recipient(s) */\n\tconst EMAIL_CC = 'email.cc';\n\t/** @var string the date and time (written) of an email */\n\tconst EMAIL_DATETIME = 'email.datetime';\n\t/** @var string the date (written) of an email */\n\tconst EMAIL_DATETIME_DATE = 'email.datetime.date';\n\t/** @var string the time (written) of an email */\n\tconst EMAIL_DATETIME_TIME = 'email.datetime.time';\n\t/** @var string the email address of the sender of an email */\n\tconst EMAIL_FROM = 'email.from';\n\t/** @var string the email address of the sender of an email designated to receive replies */\n\tconst EMAIL_REPLY_TO = 'email.reply_to';\n\t/** @var string the email address of the sender of an email designated to receive undeliverable messages */\n\tconst EMAIL_RETURN_PATH = 'email.return_path';\n\t/** @var string the subject of an email */\n\tconst EMAIL_SUBJECT = 'email.subject';\n\t/** @var string the email address of the recipient(s) of an email */\n\tconst EMAIL_TO = 'email.to';\n\t/** @var string the contents of a document or file */\n\tconst FILE_CONTENTS = 'file.contents';\n\t/** @var string the (original) filename of a document or file as found on the user's device */\n\tconst FILE_NAME = 'file.name';\n\t/** @var string the size of a document or file */\n\tconst FILE_SIZE = 'file.size';\n\t/** @var string the (total) gross amount on one of the user's invoices */\n\tconst INVOICE_AMOUNT_GROSS = 'invoice.amount.gross';\n\t/** @var string the (total) net amount on one of the user's invoices */\n\tconst INVOICE_AMOUNT_NET = 'invoice.amount.net';\n\t/** @var string the date and/or time the invoice has been created */\n\tconst INVOICE_CREATION_TIME = 'invoice.creation.time';\n\t/** @var string the customer number for one of the user's invoices */\n\tconst INVOICE_CUSTOMER_NUMBER = 'invoice.customer.number';\n\t/** @var string the written date of one of the user's invoices */\n\tconst INVOICE_DATETIME_DATE = 'invoice.datetime.date';\n\t/** @var string the discount applied on one of the user's invoices */\n\tconst INVOICE_DISCOUNT = 'invoice.discount';\n\t/** @var string the fulfillment period relating to one of the user's invoices */\n\tconst INVOICE_FULFILLMENT_PERIOD = 'invoice.fulfillment.period';\n\t/** @var string the description of an item on one of the user's invoices */\n\tconst INVOICE_ITEM_DESCRIPTION = 'invoice.item.description';\n\t/** @var string the discount applied on an item on one of the user's invoices */\n\tconst INVOICE_ITEM_DISCOUNT = 'invoice.item.discount';\n\t/** @var string the (individual) gross price of an item on one of the user's invoices */\n\tconst INVOICE_ITEM_PRICE_GROSS = 'invoice.item.price.gross';\n\t/** @var string the (individual) net price of an item on one of the user's invoices */\n\tconst INVOICE_ITEM_PRICE_NET = 'invoice.item.price.net';\n\t/** @var string the quantity of an item on one of the user's invoices */\n\tconst INVOICE_ITEM_QUANTITY = 'invoice.item.quantity';\n\t/** @var string the type, rate and amount of taxes on an item on one of the user's invoices */\n\tconst INVOICE_ITEM_TAXES = 'invoice.item.taxes';\n\t/** @var string the message on one of the user's invoices */\n\tconst INVOICE_MESSAGE = 'invoice.message';\n\t/** @var string the date and/or time the invoice has most recently been modified */\n\tconst INVOICE_MODIFICATION_TIME = 'invoice.modification.time';\n\t/** @var string any custom notes pertaining to one of the user's invoices */\n\tconst INVOICE_NOTES = 'invoice.notes';\n\t/** @var string the invoice number of one of the user's invoices */\n\tconst INVOICE_NUMBER = 'invoice.number';\n\t/** @var string the date and time when the invoice has been paid */\n\tconst INVOICE_PAYMENT_DATETIME = 'invoice.payment.datetime';\n\t/** @var string the terms for the payment of one of the user's invoices */\n\tconst INVOICE_PAYMENT_TERMS = 'invoice.payment.terms';\n\t/** @var string the recipient of one of the user's invoices */\n\tconst INVOICE_RECIPIENT = 'invoice.recipient';\n\t/** @var string the date and time when the invoice has been refunded */\n\tconst INVOICE_REFUND_DATETIME = 'invoice.refund.datetime';\n\t/** @var string the date and time when a reminder was sent for the invoice */\n\tconst INVOICE_REMINDER_DATETIME = 'invoice.reminder.datetime';\n\t/** @var string the type, rate and amount of taxes on one of the user's invoices */\n\tconst INVOICE_TAXES = 'invoice.taxes';\n\t/** @var string the message body or actual text of a letter */\n\tconst LETTER_BODY = 'letter.body';\n\t/** @var string the note about additional recipients of a letter */\n\tconst LETTER_CC = 'letter.cc';\n\t/** @var string the date and/or time the letter has been created */\n\tconst LETTER_CREATION_TIME = 'letter.creation.time';\n\t/** @var string the date and time (written) of a letter */\n\tconst LETTER_DATETIME = 'letter.datetime';\n\t/** @var string the date (written) of a letter */\n\tconst LETTER_DATETIME_DATE = 'letter.datetime.date';\n\t/** @var string the time (written) of a letter */\n\tconst LETTER_DATETIME_TIME = 'letter.datetime.time';\n\t/** @var string the list of enclosures of a letter */\n\tconst LETTER_ENCLOSURES = 'letter.enclosures';\n\t/** @var string the headline or title of a letter */\n\tconst LETTER_HEADLINE = 'letter.headline';\n\t/** @var string whether the letter has been the first one */\n\tconst LETTER_IS_FIRST = 'letter.is_first';\n\t/** @var string whether the letter is for personal matters or for business matters */\n\tconst LETTER_MATTER_PERSONAL_OR_BUSINESS = 'letter.matter.personal_or_business';\n\t/** @var string the date and/or time the letter has most recently been modified */\n\tconst LETTER_MODIFICATION_TIME = 'letter.modification.time';\n\t/** @var string the postscript (\"PS\") to a letter */\n\tconst LETTER_PS = 'letter.ps';\n\t/** @var string the salutation of the letter */\n\tconst LETTER_SALUTATION = 'letter.salutation';\n\t/** @var string the subject of a letter */\n\tconst LETTER_SUBJECT = 'letter.subject';\n\t/** @var string the valediction of the letter */\n\tconst LETTER_VALEDICTION = 'letter.valediction';\n\t/** @var string the access privileges granted to the user */\n\tconst USER_ACCESS_PRIVILEGES = 'user.access.privileges';\n\t/** @var string the physical address of the user */\n\tconst USER_ADDRESS = 'user.address';\n\t/** @var string the country as part of the physical address of the user */\n\tconst USER_ADDRESS_COUNTRY = 'user.address.country';\n\t/** @var string the locality (usually the city) as part of the physical address of the user */\n\tconst USER_ADDRESS_LOCALITY = 'user.address.locality';\n\t/** @var string the location of a building or apartment (usually including the street, the street or house number, and potentially the apartment number) within a locality as part of the physical address of the user */\n\tconst USER_ADDRESS_PLACE = 'user.address.place';\n\t/** @var string the postal code as part of the physical address of the user */\n\tconst USER_ADDRESS_POSTAL_CODE = 'user.address.postal_code';\n\t/** @var string the region (often the state or province) as part of the physical address of the user */\n\tconst USER_ADDRESS_REGION = 'user.address.region';\n\t/** @var string the complete date of birth of the user */\n\tconst USER_BIRTH_DATE = 'user.birth.date';\n\t/** @var string the month and day of the date of birth of the user */\n\tconst USER_BIRTH_DATE_MONTH_DAY = 'user.birth.date.md';\n\t/** @var string the year of the date of birth of the user */\n\tconst USER_BIRTH_DATE_YEAR = 'user.birth.date.y';\n\t/** @var string the year and month of the date of birth of the user */\n\tconst USER_BIRTH_DATE_YEAR_MONTH = 'user.birth.date.ym';\n\t/** @var string the place of birth of the user */\n\tconst USER_BIRTH_PLACE = 'user.birth.place';\n\t/** @var string the blood group or blood type of the user */\n\tconst USER_BLOOD_GROUP = 'user.blood.group';\n\t/** @var string the entry of the user's company in the commercial register */\n\tconst USER_COMPANY_COMMERCIAL_REGISTER_ENTRY = 'user.company.commercial_register.entry';\n\t/** @var string the department of the user within their company */\n\tconst USER_COMPANY_DEPARTMENT = 'user.company.department';\n\t/** @var string the members of the executive board of the user's company */\n\tconst USER_COMPANY_EXECUTIVE_BOARD_MEMBERS = 'user.company.executive_board.members';\n\t/** @var string the logo of the company of the user */\n\tconst USER_COMPANY_LOGO = 'user.company.logo';\n\t/** @var string the date and/or time the logo of the user's company has been created */\n\tconst USER_COMPANY_LOGO_CREATION_TIME = 'user.company.logo.creation.time';\n\t/** @var string the label for the logo of the user's company */\n\tconst USER_COMPANY_LOGO_LABEL = 'user.company.logo.label';\n\t/** @var string the date and/or time the logo of the user's company has most recently been modified */\n\tconst USER_COMPANY_LOGO_MODIFICATION_TIME = 'user.company.logo.modification.time';\n\t/** @var string the members of the management of the user's company */\n\tconst USER_COMPANY_MANAGEMENT_MEMBERS = 'user.company.management.members';\n\t/** @var string the name of the company of the user */\n\tconst USER_COMPANY_NAME = 'user.company.name';\n\t/** @var string the members of the supervisory board of the user's company */\n\tconst USER_COMPANY_SUPERVISORY_BOARD_MEMBERS = 'user.company.supervisory_board.members';\n\t/** @var string the user's country */\n\tconst USER_COUNTRY = 'user.country';\n\t/** @var string the email address of the user */\n\tconst USER_EMAIL = 'user.email';\n\t/** @var string whether the user's email address has been verified */\n\tconst USER_EMAIL_VERIFIED = 'user.email.verified';\n\t/** @var string the fax number of the user */\n\tconst USER_FAX = 'user.fax';\n\t/** @var string the identifying number or ID (e.g. IBAN) of the bank account of the user */\n\tconst USER_FINANCIAL_BANK_ACCOUNT_ID = 'user.financial.bank.account.id';\n\t/** @var string the identifying number or ID (e.g. BIC) of the bank or financial institute of the user */\n\tconst USER_FINANCIAL_BANK_ID = 'user.financial.bank.id';\n\t/** @var string the name of the bank or financial institute of the user */\n\tconst USER_FINANCIAL_BANK_NAME = 'user.financial.bank.name';\n\t/** @var string the brand name (e.g. MasterCard or VISA) of a credit card of the user */\n\tconst USER_FINANCIAL_CREDIT_CARD_BRAND = 'user.financial.credit_card.brand';\n\t/** @var string the verification code (CVC), verification value (CVV), security code (CSC) or other verification number of a credit card of the user */\n\tconst USER_FINANCIAL_CREDIT_CARD_CVC = 'user.financial.credit_card.cvc';\n\t/** @var string the expiration date of a credit card of the user */\n\tconst USER_FINANCIAL_CREDIT_CARD_EXPIRATION = 'user.financial.credit_card.expiration';\n\t/** @var string the number of a credit card of the user */\n\tconst USER_FINANCIAL_CREDIT_CARD_NUMBER = 'user.financial.credit_card.number';\n\t/** @var string the history of purchases made by the user */\n\tconst USER_FINANCIAL_PURCHASE_HISTORY = 'user.financial.purchase_history';\n\t/** @var string the gender of the user */\n\tconst USER_GENDER = 'user.gender';\n\t/** @var string the geographical coordinates of the user */\n\tconst USER_GEO_COORDINATES = 'user.geo.coordinates';\n\t/** @var string the height of the user */\n\tconst USER_HEIGHT = 'user.height';\n\t/** @var string the ID of one of the user's (online or offline) accounts */\n\tconst USER_IDENTIFIERS_ACCOUNT_ID = 'user.identifiers.account.id';\n\t/** @var string the name of one of the user's (online or offline) accounts */\n\tconst USER_IDENTIFIERS_ACCOUNT_NAME = 'user.identifiers.account.name';\n\t/** @var string the type of one of the user's (online or offline) accounts */\n\tconst USER_IDENTIFIERS_ACCOUNT_TYPE = 'user.identifiers.account.type';\n\t/** @var string the \"steuerliche Identifikationsnummer\" (\"Steuer-IdNr.\") of the user in Germany */\n\tconst USER_IDENTIFIERS_DEU_ST_IDNR = 'user.identifiers.deu.st_idnr';\n\t/** @var string the \"Steuernummer\" or \"Steuer-Identnummer\" (\"St.-Nr.\") of the user in Germany */\n\tconst USER_IDENTIFIERS_DEU_ST_NR = 'user.identifiers.deu.st_nr';\n\t/** @var string the value-added tax (VAT) identification number (IN) (VATIN) of the user in the European Union */\n\tconst USER_IDENTIFIERS_EU_VAT_IN = 'user.identifiers.eu.vat.in';\n\t/** @var string the \"Social Security number\" (SSN) of the user in the United States of America */\n\tconst USER_IDENTIFIERS_USA_SSN = 'user.identifiers.usa.ssn';\n\t/** @var string the Internet Protocol (IP) address of the user */\n\tconst USER_IP_ADDRESS = 'user.ip.address';\n\t/** @var string the Internet Protocol (IP) address of the user with its precision reduced to 25% */\n\tconst USER_IP_ADDRESS_25_PERCENT = 'user.ip.address.25_percent';\n\t/** @var string the Internet Protocol (IP) address of the user with its precision reduced to 50% */\n\tconst USER_IP_ADDRESS_50_PERCENT = 'user.ip.address.50_percent';\n\t/** @var string the Internet Protocol (IP) address of the user with its precision reduced to 75% */\n\tconst USER_IP_ADDRESS_75_PERCENT = 'user.ip.address.75_percent';\n\t/** @var string the date and time of the (last) login of the user */\n\tconst USER_LOGIN_DATETIME = 'user.login.datetime';\n\t/** @var string the date of the (last) login of the user */\n\tconst USER_LOGIN_DATETIME_DATE = 'user.login.datetime.date';\n\t/** @var string the time of the (last) login of the user */\n\tconst USER_LOGIN_DATETIME_TIME = 'user.login.datetime.time';\n\t/** @var string the name of the user */\n\tconst USER_NAME = 'user.name';\n\t/** @var string the alias, nickname or username of the user */\n\tconst USER_NAME_ALIAS = 'user.name.alias';\n\t/** @var string the family name of the user */\n\tconst USER_NAME_FAMILY = 'user.name.family';\n\t/** @var string the given name of the user */\n\tconst USER_NAME_GIVEN = 'user.name.given';\n\t/** @var string any custom notes saved by the user */\n\tconst USER_NOTES = 'user.notes';\n\t/** @var string the occupation of the user */\n\tconst USER_OCCUPATION = 'user.occupation';\n\t/** @var string the current occupation of the user */\n\tconst USER_OCCUPATION_CURRENT = 'user.occupation.current';\n\t/** @var string the preferred occupation of the user */\n\tconst USER_OCCUPATION_PREFERRED = 'user.occupation.preferred';\n\t/** @var string the password of the user as cleartext */\n\tconst USER_PASSWORD_CLEARTEXT = 'user.password.cleartext';\n\t/** @var string the password of the user hashed using a well-known hashing algorithm that is accepted as such in the industry */\n\tconst USER_PASSWORD_HASHED = 'user.password.hashed';\n\t/** @var string the password of the user hashed using an algorithm and configuration (cf. number of rounds) currently regarded as strong in the industry (e.g. Argon2, bcrypt, scrypt) */\n\tconst USER_PASSWORD_HASHED_STRONG = 'user.password.hashed.strong';\n\t/** @var string whether password resets are permitted for the user */\n\tconst USER_PASSWORD_RESETTABLE = 'user.password.resettable';\n\t/** @var string the phone number of the user */\n\tconst USER_PHONE = 'user.phone';\n\t/** @var string the landline phone number of the user */\n\tconst USER_PHONE_HOME = 'user.phone.home';\n\t/** @var string the mobile phone number of the user */\n\tconst USER_PHONE_MOBILE = 'user.phone.mobile';\n\t/** @var string the primary picture of the user (e.g. portrait or profile picture) */\n\tconst USER_PICTURE = 'user.picture';\n\t/** @var string the user's reference as a number or as text */\n\tconst USER_REFERENCE = 'user.reference';\n\t/** @var string the date and time of the registration of the user */\n\tconst USER_REGISTRATION_DATETIME = 'user.registration.datetime';\n\t/** @var string the date of the registration of the user */\n\tconst USER_REGISTRATION_DATETIME_DATE = 'user.registration.datetime.date';\n\t/** @var string the time of the registration of the user */\n\tconst USER_REGISTRATION_DATETIME_TIME = 'user.registration.datetime.time';\n\t/** @var string the signature of the user */\n\tconst USER_SIGNATURE = 'user.signature';\n\t/** @var string the date and/or time the user's signature has been created */\n\tconst USER_SIGNATURE_CREATION_TIME = 'user.signature.creation.time';\n\t/** @var string the signature of the user digitally drawn on their device */\n\tconst USER_SIGNATURE_DRAWN = 'user.signature.drawn';\n\t/** @var string the handwritten signature of the user */\n\tconst USER_SIGNATURE_HANDWRITTEN = 'user.signature.handwritten';\n\t/** @var string the label for the user's signature */\n\tconst USER_SIGNATURE_LABEL = 'user.signature.label';\n\t/** @var string the date and/or time the user's signature has most recently been modified */\n\tconst USER_SIGNATURE_MODIFICATION_TIME = 'user.signature.modification.time';\n\t/** @var string the URL of the website of the user */\n\tconst USER_WEBSITE_URL = 'user.website.url';\n\t/** @var string the weight of the user */\n\tconst USER_WEIGHT = 'user.weight';\n\t/** @var string the color of one of the user's vehicles */\n\tconst VEHICLE_COLOR = 'vehicle.color';\n\t/** @var string the place of construction of one of the user's vehicles */\n\tconst VEHICLE_CONSTRUCTION_PLACE = 'vehicle.construction.place';\n\t/** @var string the year of construction of one of the user's vehicles */\n\tconst VEHICLE_CONSTRUCTION_YEAR = 'vehicle.construction.date.y';\n\t/** @var string the make of one of the user's vehicles */\n\tconst VEHICLE_MAKE = 'vehicle.make';\n\t/** @var string the model name of one of the user's vehicles */\n\tconst VEHICLE_MODEL = 'vehicle.model';\n\t/** @var string any custom notes pertaining to one of the user's vehicles */\n\tconst VEHICLE_NOTES = 'vehicle.notes';\n\t/** @var string the registration plate number of one of the user's vehicles */\n\tconst VEHICLE_REGISTRATION_PLATE_NUMBER = 'vehicle.registration.plate.number';\n\n\t/**\n\t * Converts an identifier to a human-readable title in natural language\n\t *\n\t * @param string $identifier one of the constants from this class\n\t * @return string the title in natural language\n\t * @throws UnexpectedDataTypeError\n\t */\n\tpublic static function toNaturalLanguage($identifier) {\n\t\tswitch ($identifier) {\n\t\t\tcase self::ACCESS_APP_VERSION: return 'Version of application used for access';\n\t\t\tcase self::ACCESS_DATETIME: return 'Date and time for each access';\n\t\t\tcase self::ACCESS_DATETIME_DATE: return 'Date for each access';\n\t\t\tcase self::ACCESS_DATETIME_TIME: return 'Time for each access';\n\t\t\tcase self::ACCESS_DEVICE_FEATURES_FILE_UPLOAD: return 'Availability of file uploads';\n\t\t\tcase self::ACCESS_FIRST_TIME: return 'Time of first access';\n\t\t\tcase self::ACCESS_HTTP_METHOD: return 'HTTP request method for each access';\n\t\t\tcase self::ACCESS_HTTP_STATUS: return 'HTTP status code for each access';\n\t\t\tcase self::ACCESS_IP_ADDRESS: return 'Internet Protocol (IP) address for each access';\n\t\t\tcase self::ACCESS_IP_ADDRESS_25_PERCENT: return 'Internet Protocol (IP) address for each access (reduced to 25%% precision)';\n\t\t\tcase self::ACCESS_IP_ADDRESS_50_PERCENT: return 'Internet Protocol (IP) address for each access (reduced to 50%% precision)';\n\t\t\tcase self::ACCESS_IP_ADDRESS_75_PERCENT: return 'Internet Protocol (IP) address for each access (reduced to 75%% precision)';\n\t\t\tcase self::ACCESS_REFERER: return 'Referring site (URL) for each access';\n\t\t\tcase self::ACCESS_SIZE: return 'Amount of data transferred for each access';\n\t\t\tcase self::ACCESS_URL: return 'Requested page (URL) for each access';\n\t\t\tcase self::ACCESS_USERAGENT_STRING: return 'User-agent string for each access';\n\t\t\tcase self::BILLING_CANCELLATION_TIME: return 'Time of cancellation';\n\t\t\tcase self::BILLING_END_TIME: return 'End of billing';\n\t\t\tcase self::BILLING_FREE_TRIAL: return 'Usage of free trial';\n\t\t\tcase self::BILLING_ID_PAYMENT_SERVICE_PROVIDER: return 'Identification number with external payment service provider';\n\t\t\tcase self::BILLING_MODIFICATION_TIME: return 'Time of last modification to billing options';\n\t\t\tcase self::BILLING_NEXT_PAYMENT_TIME: return 'Time of next payment';\n\t\t\tcase self::BILLING_PAST_DUE: return 'Payments past due';\n\t\t\tcase self::BILLING_PLAN: return 'Plan or package for billing';\n\t\t\tcase self::BILLING_START_TIME: return 'Start of billing';\n\t\t\tcase self::CALENDAR_EVENT_DATETIME: return 'Date and time of event in calendar';\n\t\t\tcase self::CALENDAR_EVENT_DATETIME_DATE: return 'Date of event in calendar';\n\t\t\tcase self::CALENDAR_EVENT_DATETIME_TIME: return 'Time of event in calendar';\n\t\t\tcase self::CALENDAR_EVENT_TITLE: return 'Title of event in calendar';\n\t\t\tcase self::CALENDAR_EVENT_TYPE: return 'Type of event in calendar';\n\t\t\tcase self::CLIENT_DIAGNOSTICS: return 'Diagnostics data for application';\n\t\t\tcase self::CLIENT_DIAGNOSTICS_ENERGY_USAGE: return 'Energy usage of application';\n\t\t\tcase self::CLIENT_DIAGNOSTICS_ERRORS: return 'Occurrences of errors in application';\n\t\t\tcase self::CLIENT_DIAGNOSTICS_ERRORS_LOGS: return 'Error logs from application';\n\t\t\tcase self::CLIENT_DIAGNOSTICS_ERRORS_RATE: return 'Error rate in application';\n\t\t\tcase self::CLIENT_DIAGNOSTICS_FRAME_RATE: return 'Frame rate in application';\n\t\t\tcase self::CLIENT_DIAGNOSTICS_TIMING: return 'Timing and performance of application';\n\t\t\tcase self::CLIENT_INTERACTIONS: return 'Interactions with application';\n\t\t\tcase self::CLIENT_INTERACTIONS_CLICKS_OR_TAPS: return 'Clicks or taps within application';\n\t\t\tcase self::CLIENT_INTERACTIONS_SESSIONS: return 'Sessions within application';\n\t\t\tcase self::CLIENT_INTERACTIONS_VIEWS: return 'Views within application';\n\t\t\tcase self::CLIENT_INTERACTIONS_VISITS: return 'Visits within application';\n\t\t\tcase self::CONTACT_ADDRESS: return 'Address of contact';\n\t\t\tcase self::CONTACT_ADDRESS_COUNTRY: return 'Country of contact';\n\t\t\tcase self::CONTACT_ADDRESS_LOCALITY: return 'City of contact';\n\t\t\tcase self::CONTACT_ADDRESS_PLACE: return 'Street name and house number of contact';\n\t\t\tcase self::CONTACT_ADDRESS_POSTAL_CODE: return 'Postal code of contact';\n\t\t\tcase self::CONTACT_ADDRESS_REGION: return 'State of contact';\n\t\t\tcase self::CONTACT_BIRTH_DATE: return 'Date of birth of contact';\n\t\t\tcase self::CONTACT_BIRTH_DATE_MONTH_DAY: return 'Month and day of birth of contact';\n\t\t\tcase self::CONTACT_BIRTH_DATE_YEAR: return 'Year of birth of contact';\n\t\t\tcase self::CONTACT_BIRTH_DATE_YEAR_MONTH: return 'Year and month of birth of contact';\n\t\t\tcase self::CONTACT_COMPANY_DEPARTMENT: return 'Department of contact within company';\n\t\t\tcase self::CONTACT_COMPANY_NAME: return 'Company name of contact';\n\t\t\tcase self::CONTACT_CREATION_TIME: return 'Time of creation of contact';\n\t\t\tcase self::CONTACT_EMAIL: return 'Email address of contact';\n\t\t\tcase self::CONTACT_FAX: return 'Fax number of contact';\n\t\t\tcase self::CONTACT_FINANCIAL_BANK_ACCOUNT_ID: return 'Bank account number of contact';\n\t\t\tcase self::CONTACT_FINANCIAL_BANK_ID: return 'Bank identifier of contact';\n\t\t\tcase self::CONTACT_FINANCIAL_BANK_NAME: return 'Bank name of contact';\n\t\t\tcase self::CONTACT_GENDER: return 'Gender of contact';\n\t\t\tcase self::CONTACT_IDENTIFIERS_EU_VAT_IN: return 'VAT ID (European Union) of contact';\n\t\t\tcase self::CONTACT_MODIFICATION_TIME: return 'Time of last modification to contact';\n\t\t\tcase self::CONTACT_NAME: return 'Name of contact';\n\t\t\tcase self::CONTACT_NAME_ALIAS: return 'Alias or username of contact';\n\t\t\tcase self::CONTACT_NAME_FAMILY: return 'Family name of contact';\n\t\t\tcase self::CONTACT_NAME_GIVEN: return 'Given name of contact';\n\t\t\tcase self::CONTACT_ORIGINAL_MESSAGE_TIME: return 'Time of original message of contact';\n\t\t\tcase self::CONTACT_PHONE: return 'Phone number of contact';\n\t\t\tcase self::CONTACT_PHONE_HOME: return 'Residential phone number of contact';\n\t\t\tcase self::CONTACT_PHONE_MOBILE: return 'Mobile phone number of contact';\n\t\t\tcase self::CONTACT_REFERENCE: return 'Reference of contact';\n\t\t\tcase self::CONTACT_WEBSITE_URL: return 'Website (URL) of contact';\n\t\t\tcase self::CONTRACT_BILLING_AMOUNT: return 'Billing amount of contract';\n\t\t\tcase self::CONTRACT_BILLING_CYCLE: return 'Billing cycle of contract';\n\t\t\tcase self::CONTRACT_CANCELLATION_PERIOD: return 'Cancellation period of contract';\n\t\t\tcase self::CONTRACT_CANCELLATION_TIME: return 'Time of cancellation of contract';\n\t\t\tcase self::CONTRACT_CREATION_TIME: return 'Time of creation of contract';\n\t\t\tcase self::CONTRACT_MODIFICATION_TIME: return 'Time of last modification to contract';\n\t\t\tcase self::CONTRACT_NOTES: return 'Custom notes on contract';\n\t\t\tcase self::CONTRACT_PARTNER: return 'Contractual partner';\n\t\t\tcase self::CONTRACT_PERIOD_END: return 'End of contract';\n\t\t\tcase self::CONTRACT_PERIOD_EXTENSION: return 'Contract duration after renewal';\n\t\t\tcase self::CONTRACT_PERIOD_START: return 'Start of contract';\n\t\t\tcase self::CUSTOMER_NUMBER: return 'Customer number';\n\t\t\tcase self::DEVICE_BROWSER: return 'Brand and version of web browser on device';\n\t\t\tcase self::DEVICE_BROWSER_BRAND: return 'Brand of web browser on device';\n\t\t\tcase self::DEVICE_BROWSER_VERSION: return 'Version of web browser on device';\n\t\t\tcase self::DEVICE_DATETIME_TIME_ZONE: return 'Time zone of device';\n\t\t\tcase self::DEVICE_DIAGNOSTICS: return 'Diagnostics data for device';\n\t\t\tcase self::DEVICE_DIAGNOSTICS_ENERGY: return 'Information relating to energy of device';\n\t\t\tcase self::DEVICE_DIAGNOSTICS_ENERGY_LEVEL: return 'Energy level on device';\n\t\t\tcase self::DEVICE_DIAGNOSTICS_ENERGY_SOURCE: return 'Energy source for device';\n\t\t\tcase self::DEVICE_ID: return 'Identifier of device';\n\t\t\tcase self::DEVICE_ID_IMEI: return 'IMEI of device';\n\t\t\tcase self::DEVICE_ID_MAC_ADDRESS: return 'MAC address of device';\n\t\t\tcase self::DEVICE_ID_PERMANENT: return 'Permanent identifier of device';\n\t\t\tcase self::DEVICE_ID_RESETTABLE: return 'Resettable identifier of device';\n\t\t\tcase self::DEVICE_LANGUAGE: return 'Language of device';\n\t\t\tcase self::DEVICE_LOCATION_APPROXIMATE: return 'Approximate location of device';\n\t\t\tcase self::DEVICE_LOCATION_PRECISE: return 'Precise location of device';\n\t\t\tcase self::DEVICE_MANUFACTURER: return 'Manufacturer of device';\n\t\t\tcase self::DEVICE_MODEL: return 'Model name of device';\n\t\t\tcase self::DEVICE_OS: return 'Brand and version of operating system on device';\n\t\t\tcase self::DEVICE_OS_BRAND: return 'Brand of operating system on device';\n\t\t\tcase self::DEVICE_OS_VERSION: return 'Version of operating system on device';\n\t\t\tcase self::EMAIL_BCC: return 'Email addresses in BCC line of email';\n\t\t\tcase self::EMAIL_BODY: return 'Message text of email';\n\t\t\tcase self::EMAIL_CC: return 'Email addresses in CC line of email';\n\t\t\tcase self::EMAIL_DATETIME: return 'Date and time of email';\n\t\t\tcase self::EMAIL_DATETIME_DATE: return 'Date of email';\n\t\t\tcase self::EMAIL_DATETIME_TIME: return 'Time of email';\n\t\t\tcase self::EMAIL_FROM: return 'Email address of sender of email';\n\t\t\tcase self::EMAIL_REPLY_TO: return 'Email address of designated receiver of replies to email';\n\t\t\tcase self::EMAIL_RETURN_PATH: return 'Email address of designated receiver of information on undeliverable email';\n\t\t\tcase self::EMAIL_SUBJECT: return 'Subject of email';\n\t\t\tcase self::EMAIL_TO: return 'Email addresses of recipients of email';\n\t\t\tcase self::FILE_CONTENTS: return 'File contents';\n\t\t\tcase self::FILE_NAME: return 'Filename';\n\t\t\tcase self::FILE_SIZE: return 'File size';\n\t\t\tcase self::INVOICE_AMOUNT_GROSS: return 'Invoice amount (gross)';\n\t\t\tcase self::INVOICE_AMOUNT_NET: return 'Invoice amount (net)';\n\t\t\tcase self::INVOICE_CREATION_TIME: return 'Time of creation of invoice';\n\t\t\tcase self::INVOICE_CUSTOMER_NUMBER: return 'Customer number on invoice';\n\t\t\tcase self::INVOICE_DATETIME_DATE: return 'Invoice date';\n\t\t\tcase self::INVOICE_DISCOUNT: return 'Discount on invoice';\n\t\t\tcase self::INVOICE_FULFILLMENT_PERIOD: return 'Fulfillment period on invoice';\n\t\t\tcase self::INVOICE_ITEM_DESCRIPTION: return 'Description of item on invoice';\n\t\t\tcase self::INVOICE_ITEM_DISCOUNT: return 'Discount on item on invoice';\n\t\t\tcase self::INVOICE_ITEM_PRICE_GROSS: return 'Price (gross) of item on invoice';\n\t\t\tcase self::INVOICE_ITEM_PRICE_NET: return 'Price (net) of item on invoice';\n\t\t\tcase self::INVOICE_ITEM_QUANTITY: return 'Quantity of item on invoice';\n\t\t\tcase self::INVOICE_ITEM_TAXES: return 'Taxes on item on invoice';\n\t\t\tcase self::INVOICE_MESSAGE: return 'Message on invoice';\n\t\t\tcase self::INVOICE_MODIFICATION_TIME: return 'Time of last modification to invoice';\n\t\t\tcase self::INVOICE_NOTES: return 'Custom notes relating to invoice';\n\t\t\tcase self::INVOICE_NUMBER: return 'Invoice number';\n\t\t\tcase self::INVOICE_PAYMENT_DATETIME: return 'Date and time when invoice has been paid';\n\t\t\tcase self::INVOICE_PAYMENT_TERMS: return 'Payment terms for invoice';\n\t\t\tcase self::INVOICE_RECIPIENT: return 'Recipient of invoice';\n\t\t\tcase self::INVOICE_REFUND_DATETIME: return 'Date and time when invoice has been refunded';\n\t\t\tcase self::INVOICE_REMINDER_DATETIME: return 'Date and time when reminder has been sent for invoice';\n\t\t\tcase self::INVOICE_TAXES: return 'Taxes on invoice';\n\t\t\tcase self::LETTER_BODY: return 'Message text of letter';\n\t\t\tcase self::LETTER_CC: return 'Notes on additional recipients of letter';\n\t\t\tcase self::LETTER_CREATION_TIME: return 'Time of creation of letter';\n\t\t\tcase self::LETTER_DATETIME: return 'Date and time of letter';\n\t\t\tcase self::LETTER_DATETIME_DATE: return 'Date of letter';\n\t\t\tcase self::LETTER_DATETIME_TIME: return 'Time of letter';\n\t\t\tcase self::LETTER_ENCLOSURES: return 'List of enclosures to letter';\n\t\t\tcase self::LETTER_HEADLINE: return 'Headline of letter';\n\t\t\tcase self::LETTER_IS_FIRST: return 'Classification of letter as first letter';\n\t\t\tcase self::LETTER_MATTER_PERSONAL_OR_BUSINESS: return 'Classification of letter as personal or as relating to business';\n\t\t\tcase self::LETTER_MODIFICATION_TIME: return 'Time of last modification to letter';\n\t\t\tcase self::LETTER_PS: return 'Postscript of letter';\n\t\t\tcase self::LETTER_SALUTATION: return 'Salutation of letter';\n\t\t\tcase self::LETTER_SUBJECT: return 'Subject of letter';\n\t\t\tcase self::LETTER_VALEDICTION: return 'Valediction of letter';\n\t\t\tcase self::USER_ACCESS_PRIVILEGES: return 'Access privileges';\n\t\t\tcase self::USER_ADDRESS: return 'Address';\n\t\t\tcase self::USER_ADDRESS_COUNTRY: return 'Country';\n\t\t\tcase self::USER_ADDRESS_LOCALITY: return 'City';\n\t\t\tcase self::USER_ADDRESS_PLACE: return 'Street name and house number';\n\t\t\tcase self::USER_ADDRESS_POSTAL_CODE: return 'Postal code';\n\t\t\tcase self::USER_ADDRESS_REGION: return 'State';\n\t\t\tcase self::USER_BIRTH_DATE: return 'Date of birth';\n\t\t\tcase self::USER_BIRTH_DATE_MONTH_DAY: return 'Month and day of birth';\n\t\t\tcase self::USER_BIRTH_DATE_YEAR: return 'Year of birth';\n\t\t\tcase self::USER_BIRTH_DATE_YEAR_MONTH: return 'Year and month of birth';\n\t\t\tcase self::USER_BIRTH_PLACE: return 'Place of birth';\n\t\t\tcase self::USER_BLOOD_GROUP: return 'Blood group';\n\t\t\tcase self::USER_COMPANY_COMMERCIAL_REGISTER_ENTRY: return 'Entry of company in commercial register';\n\t\t\tcase self::USER_COMPANY_DEPARTMENT: return 'Department within company';\n\t\t\tcase self::USER_COMPANY_EXECUTIVE_BOARD_MEMBERS: return 'Members of executive board of company';\n\t\t\tcase self::USER_COMPANY_LOGO: return 'Logo of company';\n\t\t\tcase self::USER_COMPANY_LOGO_CREATION_TIME: return 'Time of creation of logo of company';\n\t\t\tcase self::USER_COMPANY_LOGO_LABEL: return 'Label for logo of company';\n\t\t\tcase self::USER_COMPANY_LOGO_MODIFICATION_TIME: return 'Time of last modification to logo of company';\n\t\t\tcase self::USER_COMPANY_MANAGEMENT_MEMBERS: return 'Members of management of company';\n\t\t\tcase self::USER_COMPANY_NAME: return 'Company name';\n\t\t\tcase self::USER_COMPANY_SUPERVISORY_BOARD_MEMBERS: return 'Members of supervisory board of company';\n\t\t\tcase self::USER_COUNTRY: return 'Country';\n\t\t\tcase self::USER_EMAIL: return 'Email address';\n\t\t\tcase self::USER_EMAIL_VERIFIED: return 'Verification status of email address';\n\t\t\tcase self::USER_FAX: return 'Fax number';\n\t\t\tcase self::USER_FINANCIAL_BANK_ACCOUNT_ID: return 'Bank account number';\n\t\t\tcase self::USER_FINANCIAL_BANK_ID: return 'Bank identifier';\n\t\t\tcase self::USER_FINANCIAL_BANK_NAME: return 'Bank name';\n\t\t\tcase self::USER_FINANCIAL_CREDIT_CARD_BRAND: return 'Brand name of credit card';\n\t\t\tcase self::USER_FINANCIAL_CREDIT_CARD_CVC: return 'Verification code (e.g. CVC, CVV, CSC) of credit card';\n\t\t\tcase self::USER_FINANCIAL_CREDIT_CARD_EXPIRATION: return 'Expiration date of credit card';\n\t\t\tcase self::USER_FINANCIAL_CREDIT_CARD_NUMBER: return 'Card number of credit card';\n\t\t\tcase self::USER_FINANCIAL_PURCHASE_HISTORY: return 'Purchase history';\n\t\t\tcase self::USER_GENDER: return 'Gender';\n\t\t\tcase self::USER_GEO_COORDINATES: return 'Geographical coordinates';\n\t\t\tcase self::USER_HEIGHT: return 'Height';\n\t\t\tcase self::USER_IDENTIFIERS_ACCOUNT_ID: return 'Account ID';\n\t\t\tcase self::USER_IDENTIFIERS_ACCOUNT_NAME: return 'Account name';\n\t\t\tcase self::USER_IDENTIFIERS_ACCOUNT_TYPE: return 'Account type';\n\t\t\tcase self::USER_IDENTIFIERS_DEU_ST_IDNR: return 'Steuerliche Identifikationsnummer (Steuer-IdNr.) (Germany)';\n\t\t\tcase self::USER_IDENTIFIERS_DEU_ST_NR: return 'Steuernummer (St.-Nr) (Germany)';\n\t\t\tcase self::USER_IDENTIFIERS_EU_VAT_IN: return 'VAT ID (European Union)';\n\t\t\tcase self::USER_IDENTIFIERS_USA_SSN: return 'Social Security number (SSN) (United States of America)';\n\t\t\tcase self::USER_IP_ADDRESS: return 'Internet Protocol (IP) address';\n\t\t\tcase self::USER_IP_ADDRESS_25_PERCENT: return 'Internet Protocol (IP) address (reduced to 25%% precision)';\n\t\t\tcase self::USER_IP_ADDRESS_50_PERCENT: return 'Internet Protocol (IP) address (reduced to 50%% precision)';\n\t\t\tcase self::USER_IP_ADDRESS_75_PERCENT: return 'Internet Protocol (IP) address (reduced to 75%% precision)';\n\t\t\tcase self::USER_LOGIN_DATETIME: return 'Date and time of login';\n\t\t\tcase self::USER_LOGIN_DATETIME_DATE: return 'Date of login';\n\t\t\tcase self::USER_LOGIN_DATETIME_TIME: return 'Time of login';\n\t\t\tcase self::USER_NAME: return 'Name';\n\t\t\tcase self::USER_NAME_ALIAS: return 'Alias or username';\n\t\t\tcase self::USER_NAME_FAMILY: return 'Family name';\n\t\t\tcase self::USER_NAME_GIVEN: return 'Given name';\n\t\t\tcase self::USER_NOTES: return 'Custom notes';\n\t\t\tcase self::USER_OCCUPATION: return 'Occupation';\n\t\t\tcase self::USER_OCCUPATION_CURRENT: return 'Current occupation';\n\t\t\tcase self::USER_OCCUPATION_PREFERRED: return 'Preferred occupation';\n\t\t\tcase self::USER_PASSWORD_CLEARTEXT: return 'Password (cleartext)';\n\t\t\tcase self::USER_PASSWORD_HASHED: return 'Password (hash)';\n\t\t\tcase self::USER_PASSWORD_HASHED_STRONG: return 'Password (strong hash)';\n\t\t\tcase self::USER_PASSWORD_RESETTABLE: return 'Availability of password reset';\n\t\t\tcase self::USER_PHONE: return 'Phone number';\n\t\t\tcase self::USER_PHONE_HOME: return 'Residential phone number';\n\t\t\tcase self::USER_PHONE_MOBILE: return 'Mobile phone number';\n\t\t\tcase self::USER_PICTURE: return 'Picture';\n\t\t\tcase self::USER_REFERENCE: return 'Reference';\n\t\t\tcase self::USER_REGISTRATION_DATETIME: return 'Date and time of registration';\n\t\t\tcase self::USER_REGISTRATION_DATETIME_DATE: return 'Date of registration';\n\t\t\tcase self::USER_REGISTRATION_DATETIME_TIME: return 'Time of registration';\n\t\t\tcase self::USER_SIGNATURE: return 'Signature';\n\t\t\tcase self::USER_SIGNATURE_CREATION_TIME: return 'Time of creation of signature';\n\t\t\tcase self::USER_SIGNATURE_DRAWN: return 'Digitally drawn signature';\n\t\t\tcase self::USER_SIGNATURE_HANDWRITTEN: return 'Handwritten signature';\n\t\t\tcase self::USER_SIGNATURE_LABEL: return 'Label for signature';\n\t\t\tcase self::USER_SIGNATURE_MODIFICATION_TIME: return 'Time of last modification to signature';\n\t\t\tcase self::USER_WEBSITE_URL: return 'Website (URL)';\n\t\t\tcase self::USER_WEIGHT: return 'Body weight';\n\t\t\tcase self::VEHICLE_COLOR: return 'Color of vehicle';\n\t\t\tcase self::VEHICLE_CONSTRUCTION_PLACE: return 'Place of construction of vehicle';\n\t\t\tcase self::VEHICLE_CONSTRUCTION_YEAR: return 'Year of construction of vehicle';\n\t\t\tcase self::VEHICLE_MAKE: return 'Make of vehicle';\n\t\t\tcase self::VEHICLE_MODEL: return 'Model name of vehicle';\n\t\t\tcase self::VEHICLE_NOTES: return 'Custom notes on vehicle';\n\t\t\tcase self::VEHICLE_REGISTRATION_PLATE_NUMBER: return 'Registration plate number of vehicle';\n\t\t\tdefault: throw new UnexpectedDataTypeError($identifier);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/HumanPrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy;\n\nuse Delight\\PrivacyPolicy\\Data\\DataBasis;\nuse Delight\\PrivacyPolicy\\Data\\DataPurpose;\nuse Delight\\PrivacyPolicy\\Data\\DataRequirement;\nuse Delight\\PrivacyPolicy\\Data\\DataSpecialCondition;\nuse Delight\\PrivacyPolicy\\Data\\DataType;\nuse Delight\\PrivacyPolicy\\Markup\\AbbreviationMarkup;\nuse Delight\\PrivacyPolicy\\Markup\\ConcatenationMarkup;\nuse Delight\\PrivacyPolicy\\Markup\\DefinitionList\\DefinitionGroup;\nuse Delight\\PrivacyPolicy\\Markup\\DefinitionList\\DefinitionList;\nuse Delight\\PrivacyPolicy\\Markup\\ImageMarkup;\nuse Delight\\PrivacyPolicy\\Markup\\LinkMarkup;\nuse Delight\\PrivacyPolicy\\Markup\\Markup;\nuse Delight\\PrivacyPolicy\\Markup\\TextMarkup;\nuse Delight\\PrivacyPolicy\\Scope\\AppStoreIosAppScope;\nuse Delight\\PrivacyPolicy\\Scope\\PlayStoreAndroidAppScope;\nuse Delight\\PrivacyPolicy\\Scope\\WebsiteScope;\nuse Delight\\PrivacyPolicy\\Throwable\\InvalidFormatArgumentsError;\nuse Delight\\PrivacyPolicy\\Throwable\\TranslationNotFoundError;\nuse Delight\\PrivacyPolicy\\Throwable\\UnexpectedScopeError;\n\n/** Privacy policy in natural language that can be read by humans */\nabstract class HumanPrivacyPolicy extends PrivacyPolicy {\n\n\t/**\n\t * Whether missing translations should cause an error\n\t *\n\t * This setting can be used to find untranslated strings during development\n\t *\n\t * @var bool\n\t */\n\tconst FAIL_ON_MISSING_TRANSLATIONS = false;\n\n\t/**\n\t * Returns the short title of the policy\n\t *\n\t * @return string\n\t */\n\tabstract public function getShortTitle();\n\n\t/**\n\t * Returns the long title of the policy\n\t *\n\t * @return string\n\t */\n\tabstract public function getLongTitle();\n\n\t/**\n\t * Returns the policy as HTML\n\t *\n\t * @return string\n\t */\n\tpublic function toHtml() {\n\t\treturn $this->toMarkup()->toHtml(0);\n\t}\n\n\t/**\n\t * Returns the policy as plain text\n\t *\n\t * @return string\n\t */\n\tpublic function toPlainText() {\n\t\treturn $this->toMarkup()->toPlainText(0);\n\t}\n\n\t/**\n\t * Returns the policy as Markdown\n\t *\n\t * @return string\n\t */\n\tpublic function toMarkdown() {\n\t\treturn $this->toMarkup()->toMarkdown(0);\n\t}\n\n\t/**\n\t * Returns a translation of the supplied text\n\t *\n\t * This method should only ever be called by the {@see lang} method\n\t *\n\t * @param string $text the English text to translate\n\t * @return string the translated text\n\t * @throws TranslationNotFoundError\n\t */\n\tabstract protected function translateUnformatted($text);\n\n\t/**\n\t * Formats the specified UNIX timestamp as a date\n\t *\n\t * @param int $unixTimestamp the UNIX timestamp in seconds to format\n\t * @return string the formatted date\n\t */\n\tabstract protected function formatDate($unixTimestamp);\n\n\t/**\n\t * Formats the specified number of hours\n\t *\n\t * @param int $n\n\t * @return string the formatted number as a string\n\t */\n\tabstract protected function formatHours($n);\n\n\t/**\n\t * Formats the specified number of days\n\t *\n\t * @param int $n\n\t * @return string the formatted number as a string\n\t */\n\tabstract protected function formatDays($n);\n\n\t/**\n\t * Formats the specified number of weeks\n\t *\n\t * @param int $n\n\t * @return string the formatted number as a string\n\t */\n\tabstract protected function formatWeeks($n);\n\n\t/**\n\t * Formats the specified number of months\n\t *\n\t * @param int $n\n\t * @return string the formatted number as a string\n\t */\n\tabstract protected function formatMonths($n);\n\n\t/**\n\t * Formats the specified number of years\n\t *\n\t * @param int $n\n\t * @return string the formatted number as a string\n\t */\n\tabstract protected function formatYears($n);\n\n\t/**\n\t * Returns the policy as generic markup\n\t *\n\t * @return Markup\n\t */\n\tprivate function toMarkup() {\n\t\treturn new DefinitionList(function (DefinitionList $list) {\n\t\t\tif ($this->publishedAt !== null) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Date of publication'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->formatDate($this->publishedAt));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->takesEffectAt !== null) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Effective date'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->formatDate($this->takesEffectAt));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->expiresAt !== null) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Date of expiration'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->formatDate($this->expiresAt));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->hasVersionName()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Version'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->versionName);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->hasCanonicalUrl()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Latest version'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition(new LinkMarkup($this->canonicalUrl));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$list->addDefinitionGroup($this->lang('General'), function (DefinitionGroup $group) {\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('Protecting your privacy and keeping your personal information safe is our highest priority.')\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('This privacy statement (“privacy policy” or “policy”) is designed to help you better understand how and to what extent we collect, use, disclose, transfer and store your information.')\n\t\t\t\t);\n\n\t\t\t\t$group->addDefinitionInteractively(function () {\n\t\t\t\t\t$definition = $this->lang('The policy applies to our websites, mobile apps, software applications, products and services, collectively referred to as “services”.');\n\n\t\t\t\t\tif ($this->hasScopes()) {\n\t\t\t\t\t\t$definition .= Markup::SPACE;\n\t\t\t\t\t\t$definition .= $this->lang('These services include:');\n\t\t\t\t\t}\n\n\t\t\t\t\treturn $definition;\n\t\t\t\t});\n\n\t\t\t\tif ($this->hasScopes()) {\n\t\t\t\t\t$group->addDefinition(new DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\tforeach ($this->scopes as $scope) {\n\t\t\t\t\t\t\t$list->addDefinitionGroup($scope, function (DefinitionGroup $group) use ($scope) {\n\t\t\t\t\t\t\t\tif ($scope instanceof WebsiteScope) {\n\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('Website'));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telseif ($scope instanceof PlayStoreAndroidAppScope) {\n\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('Android app (available from “Google Play”, a digital distribution platform operated by Google Inc.)'));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telseif ($scope instanceof AppStoreIosAppScope) {\n\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('iOS app (available from the “App Store”, a digital distribution platform operated by Apple Inc.)'));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tthrow new UnexpectedScopeError();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\t$group->addDefinition($this->lang('This privacy policy governs your use of our services regardless of the domain names, operating systems, platforms or devices that are used to access the services, and regardless of whether such access is in connection with an account or not.'));\n\t\t\t\t$group->addDefinition($this->lang('As a condition for your use of our services as a customer, user or visitor (collectively referred to as a “user” or as your “use”), you consent to the terms of this policy and you agree that your personal information will be handled as outlined below.'));\n\t\t\t});\n\n\t\t\t$list->addDefinitionGroup($this->lang('Our principles'), function (DefinitionGroup $group) {\n\t\t\t\tif (!$this->isUserDataTraded()) {\n\t\t\t\t\t$group->addDefinition($this->lang('We never sell, rent out or trade any of our user’s personal information with third parties for commercial purposes.'));\n\t\t\t\t}\n\n\t\t\t\tif ($this->hasDataMinimizationGoal()) {\n\t\t\t\t\t$group->addDefinition($this->lang('We always collect only the minimum amount of personal information necessary to provide our services to you, unless you choose to provide more such information voluntarily.'));\n\t\t\t\t}\n\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('We encourage you to give us, and, more generally, any provider of digital services, only the amount of data you are comfortable sharing.')\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('If in doubt, rather do not share sensitive information.')\n\t\t\t\t);\n\n\t\t\t\tif ($this->rightOfAccess && $this->rightToRectification && $this->rightToErasure) {\n\t\t\t\t\t$group->addDefinition($this->lang('We offer you simple ways to view, update or delete the data we have collected about you.'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ($this->hasChildrenMinimumAge()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Children’s Online Privacy Protection'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->lang('None of our services are designed for, intended to attract, or directed towards children under the age of %d.', $this->childrenMinimumAge));\n\n\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t$this->lang('We never knowingly collect any information from children under %d.', $this->childrenMinimumAge)\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('If you are a child below that age, you may not use any of our services.', $this->childrenMinimumAge)\n\t\t\t\t\t);\n\n\t\t\t\t\t$group->addDefinition($this->lang('If we have any plausible reason to believe that you are a user who is under the age of %d, we will have to prohibit you from continuing your use of our services.', $this->childrenMinimumAge));\n\n\t\t\t\t\t$group->addDefinitionInteractively(function () {\n\t\t\t\t\t\t$definition = $this->lang('Should you believe that we might have any personal information of a child under the age of %d, in particular a child of your own, please contact us so that the data in question can be deleted, if appropriate.', $this->childrenMinimumAge);\n\n\t\t\t\t\t\tif ($this->hasContactInformation()) {\n\t\t\t\t\t\t\t$definition .= Markup::SPACE;\n\t\t\t\t\t\t\t$definition .= $this->lang('For our contact information, please see further below.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn $definition;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->hasPromotionalEmailOptOut()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Email communication'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->lang('You may opt out of receiving any newsletters or promotional messages from us at any time.'));\n\t\t\t\t\t$group->addDefinition($this->lang('This is possible either by using the “Unsubscribe” feature at the bottom of such emails that we may send, or by adjusting the settings in your account within our services, where applicable.'));\n\t\t\t\t\t$group->addDefinition($this->lang('You will continue to receive essential, non-promotional messages regarding your account, such as technical notices, order confirmations, or other service-related messages, which are required for us to be able to provide our services to you.'));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->hasCookies()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Cookies'), function (DefinitionGroup $group) {\n\t\t\t\t\tif ($this->hasFirstPartyCookies()) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t$this->lang('Cookies are minimal text files that contain small amounts of data.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('They are transferred from our servers to your device through your web browser or app.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('Your web browser or app then sends these small text files back to us whenever you access our services.')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t$this->lang('These cookies do not necessarily contain any personal or identifying information.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('They are, however, commonly used to store a unique identifier for every individual user, so that our servers do not lose information on who you are while you are moving through the individual parts of our services.')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t$this->lang('We may use cookies and similar technologies, such as “Web Storage” (specifically “localStorage”) and “Internal Storage”, to make interactions with our services more convenient, efficient and secure.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('For example, we may use these technologies to keep you signed in and to remember your preferences with regard to our services.')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t$this->lang('As such, cookies and the related technologies are essential for the operation of our services.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('You therefore consent to our use of cookies and related technologies when using our services.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('Without these technologies, use of our services would not be reasonably possible.')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t$this->lang('Your web browser or operating system usually provides means to delete such data currently stored on your device.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('They may even provide methods to disable the use of such technologies completely.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('You are welcome to make use of these settings and features of your web browser or operating system, but that may prevent our services from working correctly for you.')\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t\t.\n\t\t\t\t\t\t\t$this->lang('For more information on how to delete such data currently stored on your device, please refer to the manual or help section of your web browser or operating system.')\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->hasThirdPartyCookies()) {\n\t\t\t\t\t\t$group->addDefinition(new DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t$list->addDefinitionGroup($this->lang('Third-party cookies'), function (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('Some contents of our services are provided by third parties that are not directly affiliated with us.'));\n\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('These external contents, which are displayed, rendered, played back or otherwise conveyed directly within our services, may include advertising, analytics and components from social media.'));\n\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('The third parties that provide these contents may store cookies on your device for their own purposes and interests, which we cannot control.'));\n\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('The settings and features of your web browser or operating system may allow you to control how third parties can store cookies on your device.'));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->hasDataGroups()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Information we collect and why we collect it'), function (DefinitionGroup $group) {\n\t\t\t\t\tforeach ($this->dataGroups as $dataGroup) {\n\t\t\t\t\t\t$group->addDefinition(new DefinitionList(function (DefinitionList $list) use ($dataGroup) {\n\t\t\t\t\t\t\t$list->addDefinitionGroup($dataGroup->getTitle(), function (DefinitionGroup $group) use ($dataGroup) {\n\t\t\t\t\t\t\t\t$group->addDefinition($dataGroup->getDescription());\n\n\t\t\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t\t\tnew ConcatenationMarkup(\n\t\t\t\t\t\t\t\t\t\tnew TextMarkup(\n\t\t\t\t\t\t\t\t\t\t\t$this->lang('Required:')\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t\tDataRequirement::toBool($dataGroup->getRequirement()) ? $this->lang('yes') : $this->lang('no'),\n\t\t\t\t\t\t\t\t\t\t\t$this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\tDataRequirement::toNaturalLanguage($dataGroup->getRequirement())\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif ($dataGroup->hasBases()) {\n\t\t\t\t\t\t\t\t\t$basesMarkup = [];\n\n\t\t\t\t\t\t\t\t\t$basesMarkup[] = new TextMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Lawful basis:')\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tforeach ($dataGroup->getBases() as $base) {\n\t\t\t\t\t\t\t\t\t\t$basesMarkup[] = new AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t\t$this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\tDataBasis::toNaturalLanguage($base)\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t$this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\tDataBasis::toLegalReference($base)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t$basesMarkup[] = new TextMarkup(Markup::MIDDLE_DOT);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\\array_pop($basesMarkup);\n\n\t\t\t\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t\t\t\tnew ConcatenationMarkup(...$basesMarkup)\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ($dataGroup->hasSpecialConditions()) {\n\t\t\t\t\t\t\t\t\t$specialConditionsMarkup = [];\n\n\t\t\t\t\t\t\t\t\t$specialConditionsMarkup[] = new TextMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Condition for the processing of special categories of personal data:')\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tforeach ($dataGroup->getSpecialConditions() as $specialCondition) {\n\t\t\t\t\t\t\t\t\t\t$specialConditionsMarkup[] = new AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t\t$this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\tDataSpecialCondition::toNaturalLanguage($specialCondition)\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t$this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\tDataSpecialCondition::toLegalReference($specialCondition)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t$specialConditionsMarkup[] = new TextMarkup(Markup::MIDDLE_DOT);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\\array_pop($specialConditionsMarkup);\n\n\t\t\t\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t\t\t\tnew ConcatenationMarkup(...$specialConditionsMarkup)\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ($dataGroup->hasPurposes()) {\n\t\t\t\t\t\t\t\t\tforeach ($dataGroup->getPurposes() as $purpose) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang(\n\t\t\t\t\t\t\t\t\t\t\tDataPurpose::toNaturalLanguage($purpose)\n\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ($dataGroup->hasElements()) {\n\t\t\t\t\t\t\t\t\tforeach ($dataGroup->getElements() as $dataElement) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition(new DefinitionList(function (DefinitionList $list) use ($dataElement) {\n\t\t\t\t\t\t\t\t\t\t\t$dataTypeName = DataType::toNaturalLanguage($dataElement->getType());\n\n\t\t\t\t\t\t\t\t\t\t\t$list->addDefinitionGroup($this->lang($dataTypeName), function (DefinitionGroup $group) use ($dataElement) {\n\t\t\t\t\t\t\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew ConcatenationMarkup(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextMarkup(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$this->lang('Required:')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tDataRequirement::toBool($dataElement->getRequirement()) ? $this->lang('yes') : $this->lang('no'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tDataRequirement::toNaturalLanguage($dataElement->getRequirement())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ($dataElement->hasMaxRetention()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ($dataElement->getMaxRetention() <= 72) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// format number of 0 to 72 hours\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Maximum retention time: %s',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$this->formatHours($dataElement->getMaxRetention())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telseif ($dataElement->getMaxRetention() <= 504) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// format number of 4 to 21 days\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Maximum retention time: %s',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$this->formatDays(\\ceil($dataElement->getMaxRetention() / 24))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telseif ($dataElement->getMaxRetention() <= 1008) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// format number of 4 to 6 weeks\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Maximum retention time: %s',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$this->formatWeeks(\\ceil($dataElement->getMaxRetention() / 24 / 7))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telseif ($dataElement->getMaxRetention() <= 13148) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// format number of 2 to 18 months\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Maximum retention time: %s',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$this->formatMonths(\\ceil($dataElement->getMaxRetention() / 24 / 30.436875))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// format number of 2 or more years\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Maximum retention time: %s',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$this->formatYears(\\ceil($dataElement->getMaxRetention() / 24 / 365.2425))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$list->addDefinitionGroup($this->lang('Mandatory disclosure'), function (DefinitionGroup $group) {\n\t\t\t\t$group->addDefinition($this->lang('Laws in the jurisdictions that we operate in may obligate us to disclose certain personal information or other information that we collect about our users to local law enforcement authorities.'));\n\t\t\t\t$group->addDefinition($this->lang('We may be compelled to such disclosure in response to a court order, a warrant or a similar request by a judicial body or a government agency, or when we believe in good faith that the disclosure is reasonably necessary to protect our rights or property, that of any third party, or the safety of the general public.'));\n\t\t\t\t$group->addDefinition($this->lang('In any case, we will provide data only to the extent necessary to satisfy the request, and, whenever possible and legally permitted, we will make a reasonable effort to notify affected users of any such disclosure.'));\n\t\t\t});\n\n\t\t\t$list->addDefinitionGroup($this->lang('Retention and deletion of data'), function (DefinitionGroup $group) {\n\t\t\t\t$group->addDefinition($this->lang('We will retain certain pieces of personal information for as long as you use our services, as long as your account exists, or as long as needed for us to be able to provide our services to you.'));\n\n\t\t\t\tif ($this->isAccountDeletable()) {\n\t\t\t\t\t$group->addDefinitionInteractively(function () {\n\t\t\t\t\t\t$definition = $this->lang('If you would like to cancel your use of our services, delete your account, or delete your personal information, you may do so in the respective sections of our services.');\n\t\t\t\t\t\t$definition .= Markup::SPACE;\n\t\t\t\t\t\t$definition .= $this->lang('If you need help, please contact us.');\n\n\t\t\t\t\t\tif ($this->hasContactInformation()) {\n\t\t\t\t\t\t\t$definition .= Markup::SPACE;\n\t\t\t\t\t\t\t$definition .= $this->lang('See further below for our contact information.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn $definition;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ($this->hasPreservationInBackups()) {\n\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t$this->lang('In order to prevent loss of data due to human errors or system failures, we keep additional backup copies of data, as most companies and service providers do, which may include some of your personal information.')\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('This means that parts of your personal information may temporarily remain on our servers even after deletion or termination of your use of our services.')\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t$group->addDefinition($this->lang('We may retain and use your personal information and data as necessary to comply with our legal obligations, to resolve disputes, and to enforce our rights and agreements.'));\n\t\t\t});\n\n\t\t\tif ($this->hasThirdPartyServiceProviders()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Service providers, contractors and agents'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->lang('From time to time, we may share some information we have collected from you, including personal information, with a limited number of third-party vendors, service providers, contractors, resellers, agents or business partners, solely for the purpose of performing certain functions on our behalf.'));\n\n\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t$this->lang('Such third parties help us provide and improve our services.')\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('Functions performed by them on our behalf may include payment processing, network data transmission, fraud prevention, customer support management and similar services.')\n\t\t\t\t\t);\n\n\t\t\t\t\t$group->addDefinition($this->lang('These third parties do not have any right to use the information that we share about you beyond what is necessary to assist us with the specific task at hand.'));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->hasInternationalTransfers()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('International data transfers'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t$this->lang('Some of our external service providers and recipients of personal data are based outside your country and outside our country.')\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('This means that the processing of your personal data by those third parties involves an international transfer of your data to a third country.')\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('Such third countries may have data protection rules that are different from those in your or our country.')\n\t\t\t\t\t);\n\t\t\t\t\t$group->addDefinition($this->lang('Thus, for any international transfer of data, we ensure that appropriate technical, organizational and contractual measures are in place to guarantee that a similar degree of protection is afforded to your data internationally and that your personal data remains protected to the standards described in this policy.'));\n\t\t\t\t\t$group->addDefinition(new DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t$list->addDefinitionGroup($this->lang('We verify that at least one of the following safeguards is implemented:'), function (DefinitionGroup $group) {\n\t\t\t\t\t\t\t$group->addDefinition($this->lang('The country of the recipient has been deemed to provide an adequate level of protection for personal data by the European Commission.'));\n\t\t\t\t\t\t\t$group->addDefinition($this->lang('The recipient is certified as part of the EU-US and Swiss-US Privacy Shield Frameworks.'));\n\t\t\t\t\t\t\t$group->addDefinition($this->lang('Standard Contractual Clauses, as adopted by or approved by the European Commission, are in place.'));\n\t\t\t\t\t\t\t$group->addDefinition($this->lang('The recipient has Binding Corporate Rules that guarantee the protection of personal data.'));\n\t\t\t\t\t\t});\n\t\t\t\t\t}));\n\t\t\t\t\t$group->addDefinition($this->lang('Please contact us if you want further information on the specific mechanisms used by us when transferring your personal data internationally.'));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($this->hasTransferUponMergerOrAcquisition()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Mergers and acquisitions'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->lang('If we are involved in a merger, an acquisition by another company, or a sale of all or a portion of our business or assets, your information will likely be among the assets transferred.'));\n\t\t\t\t\t$group->addDefinition($this->lang('If any such change of ownership happens, the organization receiving your personal information will have to respect the promises that we have made in any pre-existing privacy policy such as this one.'));\n\n\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t$this->lang('You will be notified via a prominent notice within our services or by email to the primary email address specified in your account at least %d days before any such transfer of your personal information.', $this->getNotificationPeriod())\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('This notification will include help on choices you may have regarding the transfer and treatment of your personal information.')\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$list->addDefinitionGroup($this->lang('How we secure your information'), function (DefinitionGroup $group) {\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('We take the trust that you place in us very seriously.')\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('We have therefore implemented all measures reasonably necessary to protect the personal information of our users from unauthorized access, modification, deletion, disclosure or other misuse.')\n\t\t\t\t);\n\n\t\t\t\t$group->addDefinition($this->lang('We follow generally accepted industry standards to protect the data submitted to us, both during transmission and after we have received it, and continue to expand our protections as becomes necessary with changing technology.'));\n\n\t\t\t\tif ($this->hasTlsEverywhere()) {\n\t\t\t\t\t$group->addDefinition($this->lang('In particular, all connections to and from our services are encrypted using Secure Sockets Layer (SSL) and Transport Layer Security (TLS) technologies.'));\n\t\t\t\t}\n\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('However, please be aware that, despite our best efforts, no method of electronic transmission or storage is perfectly secure and no measures can guarantee absolute security.')\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('Hardware or software failure as well as other factors may compromise the security of user information, as is the case with all other providers of digital services.')\n\t\t\t\t);\n\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('Apart from that, please recognize that protecting your personal information is, in other parts, also your own responsibility.')\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('Especially, you are responsible for safeguarding any passwords and other authentication information that you use to access our services, as well as limiting physical access to the devices used.')\n\t\t\t\t);\n\n\t\t\t\t$group->addDefinition($this->lang('You should never disclose your authentication information to any third party and you should notify us immediately of any unauthorized use of your account.'));\n\t\t\t});\n\n\t\t\t$list->addDefinitionGroup($this->lang('Links to external websites, applications and products'), function (DefinitionGroup $group) {\n\t\t\t\t$group->addDefinition($this->lang('Some parts and sections of our services may contain external links to websites, applications or products owned by and operated by third parties.'));\n\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('We advise you to verify the privacy practices of those third parties individually.')\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('We have no knowledge about and are not responsible for the way that those third parties handle any personal information which you provide to them yourself.')\n\t\t\t\t);\n\n\t\t\t\t$group->addDefinition($this->lang('We encourage you not to provide any personal information to those third parties before assuring yourself of proper privacy practices on their part.'));\n\t\t\t});\n\n\t\t\tif ($this->rightOfAccess || $this->rightToRectification || $this->rightToErasure || $this->rightToRestrictProcessing || $this->rightToDataPortability || $this->rightToObject || $this->rightsRelatedToAutomatedDecisions) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Your rights'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition($this->lang('Except as limited under applicable law, you have the following rights with regard to your personal data:'));\n\n\t\t\t\t\tif ($this->rightOfAccess) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Access your personal data'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Right of access (EU, General Data Protection Regulation (GDPR), Article 15)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right to be informed of and request access to the personal data we process about you.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->rightToRectification) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Update your personal data'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Right to rectification (EU, General Data Protection Regulation (GDPR), Article 16)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right to request that we amend or update your personal data where it is inaccurate or incomplete.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->rightToErasure) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Erase your personal data'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Right to erasure (EU, General Data Protection Regulation (GDPR), Article 17)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right to request that we delete your personal data.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->rightToRestrictProcessing) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Restrict the use of your personal data'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Right to restriction of processing (EU, General Data Protection Regulation (GDPR), Article 18)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right to request that we temporarily or permanently stop processing your personal data.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->rightToDataPortability) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Export your personal data'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Right to data portability (EU, General Data Protection Regulation (GDPR), Article 20)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right to request a copy of your personal data in electronic and machine-readable form, and the right to transmit that personal data to another service provider.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->rightToObject) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Object to direct marketing'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Right to object (EU, General Data Protection Regulation (GDPR), Article 21)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right to object to your personal data being processed for direct marketing purposes.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Object to the use of your personal data'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Right to object (EU, General Data Protection Regulation (GDPR), Article 21)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right to object to us processing your personal data on grounds relating to your particular situation where we no longer have a legitimate reason or legal need to process it.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->rightsRelatedToAutomatedDecisions) {\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew DefinitionList(function (DefinitionList $list) {\n\t\t\t\t\t\t\t\t$list->addDefinitionGroup(\n\t\t\t\t\t\t\t\t\tnew AbbreviationMarkup(\n\t\t\t\t\t\t\t\t\t\t$this->lang('Object to automated decision-making'),\n\t\t\t\t\t\t\t\t\t\t$this->lang('Rights related to automated individual decision-making, including profiling (EU, General Data Protection Regulation (GDPR), Article 22)')\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tfunction (DefinitionGroup $group) {\n\t\t\t\t\t\t\t\t\t\t$group->addDefinition($this->lang('You have the right not to be subject to a decision based solely on automated decision-making, including profiling, where the decision would have a legal effect on you or produce a similarly significant effect.'));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t$group->addDefinitionInteractively(function () {\n\t\t\t\t\t\t$definition = $this->lang('If you have any questions regarding the protection of your data, your rights, or how to exercise them, please contact us.');\n\n\t\t\t\t\t\tif ($this->hasContactInformation()) {\n\t\t\t\t\t\t\t$definition .= Markup::SPACE;\n\t\t\t\t\t\t\t$definition .= $this->lang('For our contact information, please see further below.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$definition .= Markup::SPACE;\n\t\t\t\t\t\t$definition .= $this->lang('Upon verification of your identity, we will respond to your request within a reasonable period of time.');\n\n\t\t\t\t\t\treturn $definition;\n\t\t\t\t\t});\n\t\t\t\t\t$group->addDefinitionInteractively(function () {\n\t\t\t\t\t\t$definition = $this->lang('If you are unsatisfied with our response or with the way we are processing your personal data, you may contact your local data protection authority.');\n\n\t\t\t\t\t\tif ($this->competentSupervisoryAuthorityName !== null || $this->competentSupervisoryAuthorityUrl !== null) {\n\t\t\t\t\t\t\t$definition .= Markup::SPACE;\n\t\t\t\t\t\t\t$definition .= $this->lang('You may also contact the data protection authority that is responsible for us:');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn $definition;\n\t\t\t\t\t});\n\n\t\t\t\t\tif ($this->competentSupervisoryAuthorityName !== null || $this->competentSupervisoryAuthorityUrl !== null) {\n\t\t\t\t\t\tif ($this->competentSupervisoryAuthorityUrl !== null) {\n\t\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t\tnew LinkMarkup($this->competentSupervisoryAuthorityUrl, $this->competentSupervisoryAuthorityName)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t$group->addDefinition($this->competentSupervisoryAuthorityName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t$group->addDefinition($this->lang('You are free to file a complaint with the data protection authority.'));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$list->addDefinitionGroup($this->lang('Changes to this privacy policy'), function (DefinitionGroup $group) {\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('We may change this privacy policy from time to time.')\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('Most changes will presumably be minor only and will therefore not affect your rights.')\n\t\t\t\t);\n\n\t\t\t\t$group->addDefinition(\n\t\t\t\t\t$this->lang('Should there be any substantial changes to this policy with material effects on any of your rights or choices, you will be notified via a prominent notice within our services or by email to the primary email address specified in your account at least %d days prior to such changes taking effect.', $this->getNotificationPeriod())\n\t\t\t\t\t.\n\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t.\n\t\t\t\t\t$this->lang('This notification will include help on choices you may have regarding the treatment of your personal information.')\n\t\t\t\t);\n\n\t\t\t\t$group->addDefinition($this->lang('For any less significant changes to this privacy policy that do not affect your rights or choices in a material way, we encourage all users to check this policy for updated versions periodically.'));\n\t\t\t\t$group->addDefinition($this->lang('In general, the applicable version of this policy is the one that is current at the time of your access of our services.'));\n\t\t\t});\n\n\t\t\tif ($this->hasContactInformation()) {\n\t\t\t\t$list->addDefinitionGroup($this->lang('Contact information of the controller'), function (DefinitionGroup $group) {\n\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t$this->lang('If you have any questions or concerns regarding this policy, our privacy practices or certain aspects of our services, please contact us at any time.')\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('We want to help and will be happy to address your concerns.')\n\t\t\t\t\t\t.\n\t\t\t\t\t\tMarkup::SPACE\n\t\t\t\t\t\t.\n\t\t\t\t\t\t$this->lang('We are responsible for the processing of personal data under this policy.')\n\t\t\t\t\t);\n\n\t\t\t\t\tif ($this->hasContactEmail()) {\n\t\t\t\t\t\t$group->addDefinition($this->lang('You can reach us via email at:'));\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew LinkMarkup('mailto:' . $this->contactEmail, $this->contactEmail)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->hasContactUrl() && !$this->hasContactImage()) {\n\t\t\t\t\t\t$group->addDefinition($this->lang('Our full contact information can be found at:'));\n\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\tnew LinkMarkup($this->contactUrl)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this->hasContactImage()) {\n\t\t\t\t\t\t$imageMarkup = new ImageMarkup(\n\t\t\t\t\t\t\t$this->contactImage[0],\n\t\t\t\t\t\t\t$this->contactImage[1],\n\t\t\t\t\t\t\t$this->contactImage[2],\n\t\t\t\t\t\t\t$this->contactImage[3]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ($this->hasContactUrl()) {\n\t\t\t\t\t\t\t$group->addDefinition(\n\t\t\t\t\t\t\t\tnew LinkMarkup($this->contactUrl, $imageMarkup, $this->contactImage[1])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t$group->addDefinition($imageMarkup);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Returns a translation of the supplied text, optionally inserting any specified format arguments\n\t *\n\t * This uses the {@see translateUnformatted} method implemented by subclasses\n\t *\n\t * @param string $text the English text to translate\n\t * @param array ...$arguments (optional) the format arguments to insert\n\t * @return string the translated text with format arguments inserted as needed\n\t * @throws InvalidFormatArgumentsError\n\t * @throws TranslationNotFoundError\n\t */\n\tprivate function lang($text, ...$arguments) {\n\t\ttry {\n\t\t\t$translated = $this->translateUnformatted($text);\n\t\t}\n\t\tcatch (TranslationNotFoundError $e) {\n\t\t\tif (self::FAIL_ON_MISSING_TRANSLATIONS) {\n\t\t\t\tthrow new TranslationNotFoundError($text);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$translated = $text;\n\t\t\t}\n\t\t}\n\n\t\t$formatted = @\\sprintf($translated, ...$arguments);\n\n\t\tif ($formatted === false) {\n\t\t\tthrow new InvalidFormatArgumentsError();\n\t\t}\n\n\t\treturn $formatted;\n\t}\n\n}\n"
  },
  {
    "path": "src/Language/EnglishPrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Language;\n\nuse Delight\\PrivacyPolicy\\HumanPrivacyPolicy;\n\n/** Privacy policy for humans in English */\nclass EnglishPrivacyPolicy extends HumanPrivacyPolicy {\n\n\tpublic function getShortTitle() {\n\t\treturn 'Privacy';\n\t}\n\n\tpublic function getLongTitle() {\n\t\treturn 'Privacy Policy';\n\t}\n\n\tprotected function translateUnformatted($text) {\n\t\treturn $text;\n\t}\n\n\tprotected function formatDate($unixTimestamp) {\n\t\treturn \\IntlDateFormatter::create('en_US', \\IntlDateFormatter::LONG, \\IntlDateFormatter::NONE)->format($unixTimestamp);\n\t}\n\n\tprotected function formatHours($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d hour' : '%d hours'), $n);\n\t}\n\n\tprotected function formatDays($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d day' : '%d days'), $n);\n\t}\n\n\tprotected function formatWeeks($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d week' : '%d weeks'), $n);\n\t}\n\n\tprotected function formatMonths($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d month' : '%d months'), $n);\n\t}\n\n\tprotected function formatYears($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d year' : '%d years'), $n);\n\t}\n\n}\n"
  },
  {
    "path": "src/Language/GermanFormalPrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Language;\n\n/** Privacy policy for humans in formal German (\"Sie\") */\nclass GermanFormalPrivacyPolicy extends GermanPrivacyPolicy {\n\n\tprotected function translateUnformatted($text) {\n\t\tswitch ($text) {\n\t\t\tcase 'Access your personal data':\n\t\t\t\treturn 'Erhalten Sie Zugriff auf Ihre persönlichen Daten';\n\t\t\tcase 'Apart from that, please recognize that protecting your personal information is, in other parts, also your own responsibility.':\n\t\t\t\treturn 'Bitte denken Sie im Übrigen daran, dass der Schutz Ihrer persönlichen Informationen in anderen Teilen ebenso Ihrer eigenen Verantwortung unterliegt.';\n\t\t\tcase 'As a condition for your use of our services as a customer, user or visitor (collectively referred to as a “user” or as your “use”), you consent to the terms of this policy and you agree that your personal information will be handled as outlined below.':\n\t\t\t\treturn 'Als Bedingung für Ihre Nutzung unserer Dienste als Kunde, Nutzer oder Besucher (zusammen als „Nutzer“ oder als Ihre „Nutzung“ bezeichnet) stimmen Sie den Bedingungen dieser Erklärung zu und Sie erklären sich damit einverstanden, dass Ihre persönlichen Informationen wie im Folgenden beschrieben verarbeitet werden.';\n\t\t\tcase 'Erase your personal data':\n\t\t\t\treturn 'Löschen Sie Ihre persönlichen Daten';\n\t\t\tcase 'Especially, you are responsible for safeguarding any passwords and other authentication information that you use to access our services, as well as limiting physical access to the devices used.':\n\t\t\t\treturn 'Insbesondere sind Sie dafür verantwortlich, jegliche Passwörter und andere Informationen zur Authentifizierung zu schützen, die Sie nutzen, um auf unsere Dienste zuzugreifen, sowie dafür, den Zugang zu den genutzten Geräten einzuschränken.';\n\t\t\tcase 'Except as limited under applicable law, you have the following rights with regard to your personal data:':\n\t\t\t\treturn 'Soweit nicht durch anwendbares Recht eingeschränkt, haben Sie im Hinblick auf Ihre persönlichen Daten die folgenden Rechte:';\n\t\t\tcase 'Export your personal data':\n\t\t\t\treturn 'Exportieren Sie Ihre persönlichen Daten';\n\t\t\tcase 'For any less significant changes to this privacy policy that do not affect your rights or choices in a material way, we encourage all users to check this policy for updated versions periodically.':\n\t\t\t\treturn 'Für jegliche Änderungen an dieser Datenschutzerklärung, die von geringerer Bedeutung sind und Ihre Rechte oder Wahlmöglichkeiten nicht in wichtiger Weise betreffen, empfehlen wir allen Nutzern, diese Erklärung regelmäßig hinsichtlich aktualisierter Versionen zu überprüfen.';\n\t\t\tcase 'For example, we may use these technologies to keep you signed in and to remember your preferences with regard to our services.':\n\t\t\t\treturn 'Wir können diese Technologien zum Beispiel verwenden, um Sie eingeloggt bleiben zu lassen und um Ihre Einstellungen im Hinblick auf unsere Dienste beizubehalten.';\n\t\t\tcase 'For more information on how to delete such data currently stored on your device, please refer to the manual or help section of your web browser or operating system.':\n\t\t\t\treturn 'Weitere Informationen darüber, wie Sie solche Daten, die zurzeit auf Ihrem Gerät gespeichert sind, löschen können, finden Sie im Handbuch oder Hilfebereich Ihres Webbrowsers oder Betriebssystems.';\n\t\t\tcase 'For our contact information, please see further below.':\n\t\t\t\treturn 'Unsere Kontaktdaten finden Sie weiter unten.';\n\t\t\tcase 'From time to time, we may share some information we have collected from you, including personal information, with a limited number of third-party vendors, service providers, contractors, resellers, agents or business partners, solely for the purpose of performing certain functions on our behalf.':\n\t\t\t\treturn 'Gelegentlich geben wir möglicherweise einen Teil der Informationen, die wir über Sie erfasst haben, einschließlich persönlicher Informationen, an eine begrenzte Zahl von Drittunternehmen weiter, darunter Lieferanten, Dienstleister, Auftragnehmer, Vertriebspartner und Vertreter. Dies geschieht ausschließlich zur Ausführung bestimmter Funktionen für uns und in unserem Auftrag.';\n\t\t\tcase 'However, please be aware that, despite our best efforts, no method of electronic transmission or storage is perfectly secure and no measures can guarantee absolute security.':\n\t\t\t\treturn 'Beachten Sie jedoch bitte, dass trotz unserer größten Bemühungen keine Methode der elektronischen Datenübertragung oder Datenspeicherung vollkommen sicher ist und keine Maßnahmen eine absolute Sicherheit garantieren können.';\n\t\t\tcase 'How we secure your information':\n\t\t\t\treturn 'Wie wir Ihre Informationen sichern';\n\t\t\tcase 'If any such change of ownership happens, the organization receiving your personal information will have to respect the promises that we have made in any pre-existing privacy policy such as this one.':\n\t\t\t\treturn 'Falls ein solcher Wechsel des Eigentümers stattfinden sollte, wird die Gesellschaft, die Ihre persönlichen Informationen erhält, die Zusagen, die wir in einer zuvor existierenden Datenschutzerklärung wie dieser gemacht haben, anerkennen und achten müssen.';\n\t\t\tcase 'If in doubt, rather do not share sensitive information.':\n\t\t\t\treturn 'Geben Sie sensible Informationen im Zweifelsfall eher nicht preis.';\n\t\t\tcase 'If we are involved in a merger, an acquisition by another company, or a sale of all or a portion of our business or assets, your information will likely be among the assets transferred.':\n\t\t\t\treturn 'Wenn wir in eine Fusion, eine Übernahme durch ein anderes Unternehmen oder einen Verkauf unseres gesamten Unternehmens, unserer gesamten Vermögenswerte oder Teilen davon involviert sind, werden Ihre Informationen wahrscheinlich Bestandteil der zu übertragenden Vermögensgüter sein.';\n\t\t\tcase 'If we have any plausible reason to believe that you are a user who is under the age of %d, we will have to prohibit you from continuing your use of our services.':\n\t\t\t\treturn 'Wenn wir einen glaubwürdigen Grund haben, anzunehmen, dass Sie ein Nutzer im Alter unter %d sind, müssen wir Ihnen die weitere Nutzung unserer Dienste untersagen.';\n\t\t\tcase 'If you are a child below that age, you may not use any of our services.':\n\t\t\t\treturn 'Wenn Sie ein Kind unterhalb dieses Alters sind, dürfen Sie keinen unserer Dienste nutzen.';\n\t\t\tcase 'If you are unsatisfied with our response or with the way we are processing your personal data, you may contact your local data protection authority.':\n\t\t\t\treturn 'Falls Sie mit unserer Antwort oder mit der Art und Weise, wie wir Ihre persönlichen Daten verarbeiten, unzufrieden sind, können Sie Ihre örtliche Datenschutzbehörde kontaktieren.';\n\t\t\tcase 'If you have any questions or concerns regarding this policy, our privacy practices or certain aspects of our services, please contact us at any time.':\n\t\t\t\treturn 'Sollten Sie irgendwelche Fragen oder Bedenken bezüglich dieser Erklärung, unserer Datenschutzpraktiken oder bestimmter Aspekte unserer Dienste haben, nehmen Sie bitte jederzeit Kontakt mit uns auf.';\n\t\t\tcase 'If you have any questions regarding the protection of your data, your rights, or how to exercise them, please contact us.':\n\t\t\t\treturn 'Wenn Sie irgendwelche Fragen im Hinblick auf den Schutz Ihrer Daten, Ihre Rechte oder deren Ausübung haben, kontaktieren Sie uns bitte.';\n\t\t\tcase 'If you need help, please contact us.':\n\t\t\t\treturn 'Wenn Sie Hilfe benötigen, kontaktieren Sie uns bitte.';\n\t\t\tcase 'If you would like to cancel your use of our services, delete your account, or delete your personal information, you may do so in the respective sections of our services.':\n\t\t\t\treturn 'Wenn Sie Ihre Nutzung unserer Dienste beenden möchten, Ihr Benutzerkonto löschen möchten oder Ihre persönlichen Informationen entfernen möchten, können Sie dies in den jeweiligen Bereichen unserer Dienste tun.';\n\t\t\tcase 'In general, the applicable version of this policy is the one that is current at the time of your access of our services.':\n\t\t\t\treturn 'Im Allgemeinen ist die gültige Version dieser Erklärung diejenige, die zum Zeitpunkt Ihres Zugriffs auf unsere Dienste aktuell ist.';\n\t\t\tcase 'In order to prevent loss of data due to human errors or system failures, we keep additional backup copies of data, as most companies and service providers do, which may include some of your personal information.':\n\t\t\t\treturn 'Um Datenverlust durch menschliche Fehler oder durch Systemfehler zu verhindern, bewahren wir, wie es die meisten Unternehmen und Dienstleister tun, zusätzliche Sicherheitskopien auf, die Teile Ihrer persönlichen Informationen enthalten können.';\n\t\t\tcase 'Most changes will presumably be minor only and will therefore not affect your rights.':\n\t\t\t\treturn 'Die meisten Änderungen werden in Umfang und Bedeutung wahrscheinlich nur gering sein und deshalb Ihre Rechte nicht betreffen.';\n\t\t\tcase 'Object to automated decision-making':\n\t\t\t\treturn 'Widersprechen Sie automatisierten Entscheidungen';\n\t\t\tcase 'Object to direct marketing':\n\t\t\t\treturn 'Widersprechen Sie der Direktwerbung';\n\t\t\tcase 'Object to the use of your personal data':\n\t\t\t\treturn 'Widersprechen Sie der Verwendung Ihrer persönlichen Daten';\n\t\t\tcase 'Please contact us if you want further information on the specific mechanisms used by us when transferring your personal data internationally.':\n\t\t\t\treturn 'Bitte kontaktieren Sie uns, wenn Sie weitere Informationen zu den jeweiligen Maßnahmen erhalten möchten, die wir bei der internationalen Übermittlung Ihrer persönlichen Daten verwenden.';\n\t\t\tcase 'Processing is necessary for the performance of a contract to which you are party or in order to take steps at your request prior to entering into a contract (EU, General Data Protection Regulation (GDPR), Article 6(1)(b)).':\n\t\t\t\treturn 'Die Verarbeitung ist für die Erfüllung eines Vertrags, dessen Vertragspartei Sie sind, oder zur Durchführung vorvertraglicher Maßnahmen erforderlich, die auf Ihre Anfrage erfolgen (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(b)).';\n\t\t\tcase 'Processing is necessary in order to protect your vital interests or those of another natural person (EU, General Data Protection Regulation (GDPR), Article 6(1)(d)).':\n\t\t\t\treturn 'Die Verarbeitung ist erforderlich, um Ihre lebenswichtigen Interessen oder die einer anderen natürlichen Person zu schützen (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(d)).';\n\t\t\tcase 'Processing is necessary to protect your vital interests or those of another natural person where you are physically or legally incapable of giving consent (EU, General Data Protection Regulation (GDPR), Article 9(2)(c)).':\n\t\t\t\treturn 'Die Verarbeitung ist zum Schutz Ihrer lebenswichtigen Interessen oder derer einer anderen natürlichen Person erforderlich und Sie sind aus körperlichen oder rechtlichen Gründen außerstande, Ihre Einwilligung zu geben (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(c)).';\n\t\t\tcase 'Processing relates to personal data that you manifestly make public (EU, General Data Protection Regulation (GDPR), Article 9(2)(e)).':\n\t\t\t\treturn 'Die Verarbeitung bezieht sich auf persönliche Daten, die Sie offensichtlich öffentlich gemacht haben (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(e)).';\n\t\t\tcase 'Protecting your privacy and keeping your personal information safe is our highest priority.':\n\t\t\t\treturn 'Die Sicherung Ihrer Privatsphäre und der Schutz Ihrer persönlichen Informationen haben für uns höchste Priorität.';\n\t\t\tcase 'Restrict the use of your personal data':\n\t\t\t\treturn 'Schränken Sie die Verwendung Ihrer persönlichen Daten ein';\n\t\t\tcase 'See further below for our contact information.':\n\t\t\t\treturn 'Unsere Kontaktdaten finden Sie weiter unten.';\n\t\t\tcase 'Should there be any substantial changes to this policy with material effects on any of your rights or choices, you will be notified via a prominent notice within our services or by email to the primary email address specified in your account at least %d days prior to such changes taking effect.':\n\t\t\t\treturn 'Sollte es wesentliche Änderungen an dieser Erklärung mit wichtigen Auswirkungen auf Ihre Rechte oder Wahlmöglichkeiten geben, werden Sie durch eine auffällige Ankündigung innerhalb unserer Dienste oder per E-Mail an die primäre E-Mail-Adresse, die in Ihrem Benutzerkonto hinterlegt ist, mindestens %d Tage vor dem Inkrafttreten solcher Änderungen benachrichtigt.';\n\t\t\tcase 'Should you believe that we might have any personal information of a child under the age of %d, in particular a child of your own, please contact us so that the data in question can be deleted, if appropriate.':\n\t\t\t\treturn 'Sollten Sie glauben, dass wir persönliche Informationen von einem Kind unter %d gespeichert haben könnten, insbesondere von einem Ihrer Kinder, kontaktieren Sie uns bitte umgehend, sodass die betroffenen Daten, falls zutreffend, gelöscht werden können.';\n\t\t\tcase 'Some of our external service providers and recipients of personal data are based outside your country and outside our country.':\n\t\t\t\treturn 'Manche unserer externen Dienstleister und Empfänger von persönlichen Daten haben ihren Sitz außerhalb Ihres Landes und außerhalb unseres Landes.';\n\t\t\tcase 'Such third countries may have data protection rules that are different from those in your or our country.':\n\t\t\t\treturn 'Solche Drittländer können Datenschutzregeln haben, die sich von denen in Ihrem oder unserem Land unterscheiden.';\n\t\t\tcase 'These third parties do not have any right to use the information that we share about you beyond what is necessary to assist us with the specific task at hand.':\n\t\t\t\treturn 'Diese Drittunternehmen sind nicht berechtigt, die Informationen, die wir über Sie weitergeben, über das Maß hinaus zu nutzen, das notwendig ist, um uns bei der konkreten Aufgabenstellung zu unterstützen.';\n\t\t\tcase 'The settings and features of your web browser or operating system may allow you to control how third parties can store cookies on your device.':\n\t\t\t\treturn 'Die Einstellungen und Funktionen Ihres Webbrowsers oder Betriebssystems können Ihnen erlauben, zu kontrollieren, wie Drittanbieter Cookies auf Ihrem Gerät speichern können.';\n\t\t\tcase 'The third parties that provide these contents may store cookies on your device for their own purposes and interests, which we cannot control.':\n\t\t\t\treturn 'Die Drittanbieter, die diese Inhalte bereitstellen, können Cookies für ihre eigenen Zwecke und Interessen auf Ihrem Gerät speichern, was wir nicht kontrollieren können.';\n\t\t\tcase 'They are, however, commonly used to store a unique identifier for every individual user, so that our servers do not lose information on who you are while you are moving through the individual parts of our services.':\n\t\t\t\treturn 'Sie werden jedoch häufig dazu verwendet, eine eindeutige Kennung für jeden einzelnen Nutzer zu speichern, damit unsere Server nicht die Information darüber verlieren, wer Sie sind, während Sie sich durch die einzelnen Bereiche unserer Dienste bewegen.';\n\t\t\tcase 'They are transferred from our servers to your device through your web browser or app.':\n\t\t\t\treturn 'Sie werden von unseren Servern über Ihren Webbrowser oder Ihre App auf Ihr Gerät übertragen.';\n\t\t\tcase 'This information is not required and you can use parts of our services without this information. You have to give your consent before we collect this data, but some features may not be available without.':\n\t\t\t\treturn 'Diese Information wird nicht zwingend benötigt und Sie können Teile unserer Dienste ohne diese Angabe nutzen. Sie müssen Ihre Genehmigung erteilen, bevor wir diese Daten erfassen, aber manche Funktionen sind ohne diese Daten möglicherweise nicht verfügbar.';\n\t\t\tcase 'This information is not required and you can use parts of our services without this information. You may withdraw your consent for our collection of this data, but some features may not be available without.':\n\t\t\t\treturn 'Diese Information wird nicht zwingend benötigt und Sie können Teile unserer Dienste ohne diese Angabe nutzen. Sie können Ihre Einwilligung zu unserer Erfassung dieser Daten widerrufen, aber manche Funktionen sind ohne diese Daten möglicherweise nicht verfügbar.';\n\t\t\tcase 'This information is required for the operation of our services and its collection is therefore a condition for your use of our services.':\n\t\t\t\treturn 'Diese Information wird für den Betrieb unserer Dienste benötigt und ihre Erhebung ist deshalb eine Bedingung für Ihre Nutzung unserer Dienste.';\n\t\t\tcase 'This is possible either by using the “Unsubscribe” feature at the bottom of such emails that we may send, or by adjusting the settings in your account within our services, where applicable.':\n\t\t\t\treturn 'Dies ist möglich, indem Sie entweder die „Abmelden“-Funktion am unteren Ende von solchen E-Mails benutzen, die wir senden könnten, oder durch das Ändern der Einstellungen in Ihrem Benutzerkonto innerhalb unserer Dienste, wo zutreffend.';\n\t\t\tcase 'This means that parts of your personal information may temporarily remain on our servers even after deletion or termination of your use of our services.':\n\t\t\t\treturn 'Dies bedeutet, dass Teile Ihrer persönlichen Informationen selbst nach Löschung oder nach Beendigung Ihrer Nutzung unserer Dienste vorübergehend auf unseren Servern bestehen bleiben können.';\n\t\t\tcase 'This means that the processing of your personal data by those third parties involves an international transfer of your data to a third country.':\n\t\t\t\treturn 'Dies bedeutet, dass die Verarbeitung Ihrer persönlichen Daten durch diese Drittanbieter eine internationale Übermittlung Ihrer Daten an ein Drittland umfasst.';\n\t\t\tcase 'This notification will include help on choices you may have regarding the transfer and treatment of your personal information.':\n\t\t\t\treturn 'Diese Benachrichtigung wird Hilfe zu den Wahlmöglichkeiten beinhalten, die Sie möglicherweise im Hinblick auf die Übertragung und Behandlung Ihrer persönlichen Informationen haben.';\n\t\t\tcase 'This notification will include help on choices you may have regarding the treatment of your personal information.':\n\t\t\t\treturn 'Diese Benachrichtigung wird Hilfe zu den Wahlmöglichkeiten beinhalten, die Sie möglicherweise im Hinblick auf die Behandlung Ihrer persönlichen Informationen haben.';\n\t\t\tcase 'This privacy policy governs your use of our services regardless of the domain names, operating systems, platforms or devices that are used to access the services, and regardless of whether such access is in connection with an account or not.':\n\t\t\t\treturn 'Diese Datenschutzerklärung regelt Ihre Nutzung unserer Dienste, unabhängig von den Domain-Namen, Betriebssystemen, Plattformen oder Geräten, die für den Zugriff auf die Dienste genutzt werden, und unabhängig davon, ob solcher Zugriff in Verbindung mit einem Benutzerkonto geschieht oder nicht.';\n\t\t\tcase 'This privacy statement (“privacy policy” or “policy”) is designed to help you better understand how and to what extent we collect, use, disclose, transfer and store your information.':\n\t\t\t\treturn 'Diese Datenschutzrichtlinie („Datenschutzerklärung“ oder „Erklärung“) soll Ihnen helfen, besser zu verstehen, wie und in welchem Umfang wir Ihre Informationen erfassen, verwenden, offenlegen, übertragen und speichern.';\n\t\t\tcase 'Thus, for any international transfer of data, we ensure that appropriate technical, organizational and contractual measures are in place to guarantee that a similar degree of protection is afforded to your data internationally and that your personal data remains protected to the standards described in this policy.':\n\t\t\t\treturn 'Deshalb stellen wir für jede internationale Übermittlung von Daten sicher, dass angemessene technische, organisatorische und vertragliche Maßnahmen getroffen werden, um zu gewährleisten, dass Ihren Daten international ein ähnlicher Schutz geboten wird und dass Ihre persönlichen Daten gemäß den Standards geschützt bleiben, die in dieser Erklärung beschrieben sind.';\n\t\t\tcase 'Update your personal data':\n\t\t\t\treturn 'Aktualisieren Sie Ihre persönlichen Daten';\n\t\t\tcase 'Upon verification of your identity, we will respond to your request within a reasonable period of time.':\n\t\t\t\treturn 'Nach Überprüfung Ihrer Identität werden wir innerhalb eines angemessenen Zeitraumes auf Ihre Anfrage antworten.';\n\t\t\tcase 'We advise you to verify the privacy practices of those third parties individually.':\n\t\t\t\treturn 'Wir raten Ihnen, die Datenschutzpraktiken dieser Drittunternehmen individuell zu überprüfen.';\n\t\t\tcase 'We always collect only the minimum amount of personal information necessary to provide our services to you, unless you choose to provide more such information voluntarily.':\n\t\t\t\treturn 'Wir erheben immer nur die kleinstmögliche Menge an persönliche Informationen, die nötig ist, um unsere Dienste für Sie bereitstellen zu können, es sei denn, Sie entschließen sich freiwillig dazu, mehr solcher Informationen zu übertragen.';\n\t\t\tcase 'We encourage you not to provide any personal information to those third parties before assuring yourself of proper privacy practices on their part.':\n\t\t\t\treturn 'Wir empfehlen Ihnen, diesen Drittunternehmen keine persönlichen Informationen bereitzustellen, bevor Sie sich von angemessenen Datenschutzpraktiken seitens dieser Unternehmen überzeugt haben.';\n\t\t\tcase 'We encourage you to give us, and, more generally, any provider of digital services, only the amount of data you are comfortable sharing.':\n\t\t\t\treturn 'Wir ermutigen Sie dazu, uns, und allgemeiner jedem Anbieter von digitalen Dienstleistungen, nur die Menge an Daten bereitzustellen, mit der Sie sich wohlfühlen.';\n\t\t\tcase 'We have no knowledge about and are not responsible for the way that those third parties handle any personal information which you provide to them yourself.':\n\t\t\t\treturn 'Wir haben keine Kenntnis von und sind nicht verantwortlich für die Art und Weise, wie diese Drittunternehmen persönliche Informationen behandeln, die Sie ihnen selbst bereitstellen.';\n\t\t\tcase 'We may retain and use your personal information and data as necessary to comply with our legal obligations, to resolve disputes, and to enforce our rights and agreements.':\n\t\t\t\treturn 'Wir bewahren Ihre persönlichen Informationen und Daten möglicherweise so lange auf und nutzen diese, wie es erforderlich ist, um unsere gesetzlichen Verpflichtungen einzuhalten, Streitfälle beizulegen und unsere Rechte und Vereinbarungen durchzusetzen.';\n\t\t\tcase 'We offer you simple ways to view, update or delete the data we have collected about you.':\n\t\t\t\treturn 'Wir bieten Ihnen einfache Möglichkeiten, die Informationen, die wir über Sie erfasst haben, anzusehen, zu aktualisieren und zu löschen.';\n\t\t\tcase 'We take the trust that you place in us very seriously.':\n\t\t\t\treturn 'Wir nehmen das Vertrauen, das Sie uns entgegenbringen, sehr ernst.';\n\t\t\tcase 'We use this information to personalize our services for you and to adjust them to your preferences.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um unsere Dienste für Sie zu personalisieren und sie an Ihre Präferenzen anzupassen.';\n\t\t\tcase 'We use this information to provide and fulfill the specific services that you explicitly request.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um die konkreten Dienstleistungen, die Sie ausdrücklich anfordern, bereitstellen und erfüllen zu können.';\n\t\t\tcase 'We use this information to provide customer service to you, to answer your questions and to communicate with you about your use of our services.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um Ihnen Kundendienst anzubieten, Ihre Fragen zu beantworten und mit Ihnen über Ihre Nutzung unserer Dienste zu kommunizieren.';\n\t\t\tcase 'We use this information to provide meaningful and unobtrusive advertising to you.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um Ihnen aussagekräftige und unaufdringliche Werbung zeigen zu können.';\n\t\t\tcase 'We want to help and will be happy to address your concerns.':\n\t\t\t\treturn 'Wir möchten helfen und kümmern uns gerne um Ihr Anliegen.';\n\t\t\tcase 'We will retain certain pieces of personal information for as long as you use our services, as long as your account exists, or as long as needed for us to be able to provide our services to you.':\n\t\t\t\treturn 'Wir werden gewisse persönliche Informationen so lange aufbewahren, wie Sie unsere Dienste nutzen, wie Ihr Benutzerkonto besteht oder wie es nötig ist, um unsere Dienste für Sie bereitstellen zu können.';\n\t\t\tcase 'You are free to file a complaint with the data protection authority.':\n\t\t\t\treturn 'Es steht Ihnen frei, bei der Datenschutzbehörde eine Beschwerde einzulegen.';\n\t\t\tcase 'You are welcome to make use of these settings and features of your web browser or operating system, but that may prevent our services from working correctly for you.':\n\t\t\t\treturn 'Sie können gerne von diesen Einstellungen und Funktionen in Ihrem Webbrowser oder Betriebssystem Gebrauch machen, aber dies kann unsere Dienste daran hindern, korrekt für Sie zu funktionieren.';\n\t\t\tcase 'You can reach us via email at:':\n\t\t\t\treturn 'Sie erreichen uns per E-Mail unter:';\n\t\t\tcase 'You have given consent to the processing of your personal data for one or more specific purposes (EU, General Data Protection Regulation (GDPR), Article 6(1)(a)).':\n\t\t\t\treturn 'Sie haben Ihre Einwilligung zur Verarbeitung der Sie betreffenden persönlichen Daten für einen oder mehrere bestimmte Zwecke gegeben (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(a)).';\n\t\t\tcase 'You have given explicit consent to the processing of your personal data for one or more specified purposes (EU, General Data Protection Regulation (GDPR), Article 9(2)(a)).':\n\t\t\t\treturn 'Sie haben in die Verarbeitung der genannten persönlichen Daten für einen oder mehrere festgelegte Zwecke ausdrücklich eingewilligt (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(a)).';\n\t\t\tcase 'You have the right not to be subject to a decision based solely on automated decision-making, including profiling, where the decision would have a legal effect on you or produce a similarly significant effect.':\n\t\t\t\treturn 'Sie haben das Recht, keiner Entscheidung unterworfen zu sein, die allein auf einer automatisierten Entscheidungsfindung basiert, einschließlich der Profilerstellung, wenn eine solche Entscheidung Ihnen gegenüber rechtliche Auswirkungen hätte oder eine ähnlich erhebliche Beeinträchtigung hervorrufen würde.';\n\t\t\tcase 'You have the right to be informed of and request access to the personal data we process about you.':\n\t\t\t\treturn 'Sie haben das Recht, über die persönlichen Daten, die wir von Ihnen erheben, informiert zu werden und Zugriff darauf zu erhalten.';\n\t\t\tcase 'You have the right to object to us processing your personal data on grounds relating to your particular situation where we no longer have a legitimate reason or legal need to process it.':\n\t\t\t\treturn 'Sie haben das Recht, der Verarbeitung Ihrer persönlichen Daten durch uns aus Gründen zu widersprechen, die sich aus Ihrer speziellen Situation ergeben, wenn wir keinen legitimen Grund oder keine rechtliche Verpflichtung mehr zu deren Verarbeitung haben.';\n\t\t\tcase 'You have the right to object to your personal data being processed for direct marketing purposes.':\n\t\t\t\treturn 'Sie haben das Recht, der Verarbeitung Ihrer persönlichen Daten für Zwecke der Direktwerbung zu widersprechen.';\n\t\t\tcase 'You have the right to request a copy of your personal data in electronic and machine-readable form, and the right to transmit that personal data to another service provider.':\n\t\t\t\treturn 'Sie haben das Recht, eine Kopie Ihrer persönlichen Daten in elektronischer und maschinenlesbarer Form anzufordern, und das Recht, diese persönlichen Daten an einen anderen Diensteanbieter zu übertragen.';\n\t\t\tcase 'You have the right to request that we amend or update your personal data where it is inaccurate or incomplete.':\n\t\t\t\treturn 'Sie haben das Recht, von uns die Änderung oder Aktualisierung Ihrer persönlichen Daten zu fordern, wo diese fehlerhaft oder unvollständig sind.';\n\t\t\tcase 'You have the right to request that we delete your personal data.':\n\t\t\t\treturn 'Sie haben das Recht, von uns die Löschung Ihrer persönlichen Daten zu verlangen.';\n\t\t\tcase 'You have the right to request that we temporarily or permanently stop processing your personal data.':\n\t\t\t\treturn 'Sie haben das Recht, uns aufzufordern, die Verarbeitung Ihrer persönlichen Daten vorübergehend oder dauerhaft einzustellen.';\n\t\t\tcase 'You may also contact the data protection authority that is responsible for us:':\n\t\t\t\treturn 'Sie können auch die Datenschutzbehörde kontaktieren, die für uns zuständig ist:';\n\t\t\tcase 'You may opt out of receiving any newsletters or promotional messages from us at any time.':\n\t\t\t\treturn 'Sie können dem Empfang jeglicher Newsletter oder Werbenachrichten von uns jederzeit widersprechen.';\n\t\t\tcase 'Your rights':\n\t\t\t\treturn 'Ihre Rechte';\n\t\t\tcase 'Your web browser or app then sends these small text files back to us whenever you access our services.':\n\t\t\t\treturn 'Ihr Webbrowser oder Ihre App sendet diese kleinen Textdateien dann jedes Mal an uns zurück, wenn Sie auf unsere Dienste zugreifen.';\n\t\t\tcase 'Your web browser or operating system usually provides means to delete such data currently stored on your device.':\n\t\t\t\treturn 'Ihr Webbrowser oder Betriebssystem bietet üblicherweise Möglichkeiten an, solche Daten, die zurzeit auf Ihrem Gerät gespeichert sind, zu löschen.';\n\t\t\tcase 'You should never disclose your authentication information to any third party and you should notify us immediately of any unauthorized use of your account.':\n\t\t\t\treturn 'Sie sollten Ihre Informationen zur Authentifizierung niemals Dritten preisgeben und Sie sollten uns unverzüglich über jegliche unberechtigte Nutzung Ihres Benutzerkontos benachrichtigen.';\n\t\t\tcase 'You therefore consent to our use of cookies and related technologies when using our services.':\n\t\t\t\treturn 'Sie erklären sich deshalb mit unserer Nutzung von Cookies und ähnlichen Technologien einverstanden, wenn Sie unsere Dienste nutzen.';\n\t\t\tcase 'You will be notified via a prominent notice within our services or by email to the primary email address specified in your account at least %d days before any such transfer of your personal information.':\n\t\t\t\treturn 'Sie werden durch eine auffällige Ankündigung innerhalb unserer Dienste oder per E-Mail an die primäre E-Mail-Adresse, die in Ihrem Benutzerkonto hinterlegt ist, mindestens %d Tage vor einer solchen Übertragung Ihrer persönlichen Informationen benachrichtigt.';\n\t\t\tcase 'You will continue to receive essential, non-promotional messages regarding your account, such as technical notices, order confirmations, or other service-related messages, which are required for us to be able to provide our services to you.':\n\t\t\t\treturn 'Sie werden weiterhin grundlegende Nachrichten bezüglich Ihres Benutzerkontos erhalten, die nicht der Werbung dienen, wie etwa technische Mitteilungen, Auftragsbestätigungen oder andere dienstbezogene Nachrichten, die nötig sind, damit wir Ihnen unsere Dienste bereitstellen können.';\n\t\t\tdefault:\n\t\t\t\treturn parent::translateUnformatted($text);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Language/GermanInformalPrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Language;\n\n/** Privacy policy for humans in informal German (\"du\") */\nclass GermanInformalPrivacyPolicy extends GermanPrivacyPolicy {\n\n\tprotected function translateUnformatted($text) {\n\t\tswitch ($text) {\n\t\t\tcase 'Access your personal data':\n\t\t\t\treturn 'Erhalte Zugriff auf deine persönlichen Daten';\n\t\t\tcase 'Apart from that, please recognize that protecting your personal information is, in other parts, also your own responsibility.':\n\t\t\t\treturn 'Bitte denke im Übrigen daran, dass der Schutz deiner persönlichen Informationen in anderen Teilen ebenso deiner eigenen Verantwortung unterliegt.';\n\t\t\tcase 'As a condition for your use of our services as a customer, user or visitor (collectively referred to as a “user” or as your “use”), you consent to the terms of this policy and you agree that your personal information will be handled as outlined below.':\n\t\t\t\treturn 'Als Bedingung für deine Nutzung unserer Dienste als Kunde, Nutzer oder Besucher (zusammen als „Nutzer“ oder als deine „Nutzung“ bezeichnet) stimmst du den Bedingungen dieser Erklärung zu und du erklärst dich damit einverstanden, dass deine persönlichen Informationen wie im Folgenden beschrieben verarbeitet werden.';\n\t\t\tcase 'Erase your personal data':\n\t\t\t\treturn 'Lösche deine persönlichen Daten';\n\t\t\tcase 'Especially, you are responsible for safeguarding any passwords and other authentication information that you use to access our services, as well as limiting physical access to the devices used.':\n\t\t\t\treturn 'Insbesondere bist du dafür verantwortlich, jegliche Passwörter und andere Informationen zur Authentifizierung zu schützen, die du nutzt, um auf unsere Dienste zuzugreifen, sowie dafür, den Zugang zu den genutzten Geräten einzuschränken.';\n\t\t\tcase 'Except as limited under applicable law, you have the following rights with regard to your personal data:':\n\t\t\t\treturn 'Soweit nicht durch anwendbares Recht eingeschränkt, hast du im Hinblick auf deine persönlichen Daten die folgenden Rechte:';\n\t\t\tcase 'Export your personal data':\n\t\t\t\treturn 'Exportiere deine persönlichen Daten';\n\t\t\tcase 'For any less significant changes to this privacy policy that do not affect your rights or choices in a material way, we encourage all users to check this policy for updated versions periodically.':\n\t\t\t\treturn 'Für jegliche Änderungen an dieser Datenschutzerklärung, die von geringerer Bedeutung sind und deine Rechte oder Wahlmöglichkeiten nicht in wichtiger Weise betreffen, empfehlen wir allen Nutzern, diese Erklärung regelmäßig hinsichtlich aktualisierter Versionen zu überprüfen.';\n\t\t\tcase 'For example, we may use these technologies to keep you signed in and to remember your preferences with regard to our services.':\n\t\t\t\treturn 'Wir können diese Technologien zum Beispiel verwenden, um dich eingeloggt bleiben zu lassen und um deine Einstellungen im Hinblick auf unsere Dienste beizubehalten.';\n\t\t\tcase 'For more information on how to delete such data currently stored on your device, please refer to the manual or help section of your web browser or operating system.':\n\t\t\t\treturn 'Weitere Informationen darüber, wie du solche Daten, die zurzeit auf deinem Gerät gespeichert sind, löschen kannst, findest du im Handbuch oder Hilfebereich deines Webbrowsers oder Betriebssystems.';\n\t\t\tcase 'For our contact information, please see further below.':\n\t\t\t\treturn 'Unsere Kontaktdaten findest du weiter unten.';\n\t\t\tcase 'From time to time, we may share some information we have collected from you, including personal information, with a limited number of third-party vendors, service providers, contractors, resellers, agents or business partners, solely for the purpose of performing certain functions on our behalf.':\n\t\t\t\treturn 'Gelegentlich geben wir möglicherweise einen Teil der Informationen, die wir über dich erfasst haben, einschließlich persönlicher Informationen, an eine begrenzte Zahl von Drittunternehmen weiter, darunter Lieferanten, Dienstleister, Auftragnehmer, Vertriebspartner und Vertreter. Dies geschieht ausschließlich zur Ausführung bestimmter Funktionen für uns und in unserem Auftrag.';\n\t\t\tcase 'However, please be aware that, despite our best efforts, no method of electronic transmission or storage is perfectly secure and no measures can guarantee absolute security.':\n\t\t\t\treturn 'Beachte jedoch bitte, dass trotz unserer größten Bemühungen keine Methode der elektronischen Datenübertragung oder Datenspeicherung vollkommen sicher ist und keine Maßnahmen eine absolute Sicherheit garantieren können.';\n\t\t\tcase 'How we secure your information':\n\t\t\t\treturn 'Wie wir deine Informationen sichern';\n\t\t\tcase 'If any such change of ownership happens, the organization receiving your personal information will have to respect the promises that we have made in any pre-existing privacy policy such as this one.':\n\t\t\t\treturn 'Falls ein solcher Wechsel des Eigentümers stattfinden sollte, wird die Gesellschaft, die deine persönlichen Informationen erhält, die Zusagen, die wir in einer zuvor existierenden Datenschutzerklärung wie dieser gemacht haben, anerkennen und achten müssen.';\n\t\t\tcase 'If in doubt, rather do not share sensitive information.':\n\t\t\t\treturn 'Gib sensible Informationen im Zweifelsfall eher nicht preis.';\n\t\t\tcase 'If we are involved in a merger, an acquisition by another company, or a sale of all or a portion of our business or assets, your information will likely be among the assets transferred.':\n\t\t\t\treturn 'Wenn wir in eine Fusion, eine Übernahme durch ein anderes Unternehmen oder einen Verkauf unseres gesamten Unternehmens, unserer gesamten Vermögenswerte oder Teilen davon involviert sind, werden deine Informationen wahrscheinlich Bestandteil der zu übertragenden Vermögensgüter sein.';\n\t\t\tcase 'If we have any plausible reason to believe that you are a user who is under the age of %d, we will have to prohibit you from continuing your use of our services.':\n\t\t\t\treturn 'Wenn wir einen glaubwürdigen Grund haben, anzunehmen, dass du ein Nutzer im Alter unter %d bist, müssen wir dir die weitere Nutzung unserer Dienste untersagen.';\n\t\t\tcase 'If you are a child below that age, you may not use any of our services.':\n\t\t\t\treturn 'Wenn du ein Kind unterhalb dieses Alters bist, darfst du keinen unserer Dienste nutzen.';\n\t\t\tcase 'If you are unsatisfied with our response or with the way we are processing your personal data, you may contact your local data protection authority.':\n\t\t\t\treturn 'Falls du mit unserer Antwort oder mit der Art und Weise, wie wir deine persönlichen Daten verarbeiten, unzufrieden bist, kannst du deine örtliche Datenschutzbehörde kontaktieren.';\n\t\t\tcase 'If you have any questions or concerns regarding this policy, our privacy practices or certain aspects of our services, please contact us at any time.':\n\t\t\t\treturn 'Solltest du irgendwelche Fragen oder Bedenken bezüglich dieser Erklärung, unserer Datenschutzpraktiken oder bestimmter Aspekte unserer Dienste haben, nimm bitte jederzeit Kontakt mit uns auf.';\n\t\t\tcase 'If you have any questions regarding the protection of your data, your rights, or how to exercise them, please contact us.':\n\t\t\t\treturn 'Wenn du irgendwelche Fragen im Hinblick auf den Schutz deiner Daten, deine Rechte oder deren Ausübung hast, kontaktiere uns bitte.';\n\t\t\tcase 'If you need help, please contact us.':\n\t\t\t\treturn 'Wenn du Hilfe benötigst, kontaktiere uns bitte.';\n\t\t\tcase 'If you would like to cancel your use of our services, delete your account, or delete your personal information, you may do so in the respective sections of our services.':\n\t\t\t\treturn 'Wenn du deine Nutzung unserer Dienste beenden möchtest, dein Benutzerkonto löschen möchtest oder deine persönlichen Informationen entfernen möchtest, kannst du dies in den jeweiligen Bereichen unserer Dienste tun.';\n\t\t\tcase 'In general, the applicable version of this policy is the one that is current at the time of your access of our services.':\n\t\t\t\treturn 'Im Allgemeinen ist die gültige Version dieser Erklärung diejenige, die zum Zeitpunkt deines Zugriffs auf unsere Dienste aktuell ist.';\n\t\t\tcase 'In order to prevent loss of data due to human errors or system failures, we keep additional backup copies of data, as most companies and service providers do, which may include some of your personal information.':\n\t\t\t\treturn 'Um Datenverlust durch menschliche Fehler oder durch Systemfehler zu verhindern, bewahren wir, wie es die meisten Unternehmen und Dienstleister tun, zusätzliche Sicherheitskopien auf, die Teile deiner persönlichen Informationen enthalten können.';\n\t\t\tcase 'Most changes will presumably be minor only and will therefore not affect your rights.':\n\t\t\t\treturn 'Die meisten Änderungen werden in Umfang und Bedeutung wahrscheinlich nur gering sein und deshalb deine Rechte nicht betreffen.';\n\t\t\tcase 'Object to automated decision-making':\n\t\t\t\treturn 'Widerspreche automatisierten Entscheidungen';\n\t\t\tcase 'Object to direct marketing':\n\t\t\t\treturn 'Widerspreche der Direktwerbung';\n\t\t\tcase 'Object to the use of your personal data':\n\t\t\t\treturn 'Widerspreche der Verwendung deiner persönlichen Daten';\n\t\t\tcase 'Please contact us if you want further information on the specific mechanisms used by us when transferring your personal data internationally.':\n\t\t\t\treturn 'Bitte kontaktiere uns, wenn du weitere Informationen zu den jeweiligen Maßnahmen erhalten möchtest, die wir bei der internationalen Übermittlung deiner persönlichen Daten verwenden.';\n\t\t\tcase 'Processing is necessary for the performance of a contract to which you are party or in order to take steps at your request prior to entering into a contract (EU, General Data Protection Regulation (GDPR), Article 6(1)(b)).':\n\t\t\t\treturn 'Die Verarbeitung ist für die Erfüllung eines Vertrags, dessen Vertragspartei du bist, oder zur Durchführung vorvertraglicher Maßnahmen erforderlich, die auf deine Anfrage erfolgen (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(b)).';\n\t\t\tcase 'Processing is necessary in order to protect your vital interests or those of another natural person (EU, General Data Protection Regulation (GDPR), Article 6(1)(d)).':\n\t\t\t\treturn 'Die Verarbeitung ist erforderlich, um deine lebenswichtigen Interessen oder die einer anderen natürlichen Person zu schützen (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(d)).';\n\t\t\tcase 'Processing is necessary to protect your vital interests or those of another natural person where you are physically or legally incapable of giving consent (EU, General Data Protection Regulation (GDPR), Article 9(2)(c)).':\n\t\t\t\treturn 'Die Verarbeitung ist zum Schutz deiner lebenswichtigen Interessen oder derer einer anderen natürlichen Person erforderlich und du bist aus körperlichen oder rechtlichen Gründen außerstande, deine Einwilligung zu geben (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(c)).';\n\t\t\tcase 'Processing relates to personal data that you manifestly make public (EU, General Data Protection Regulation (GDPR), Article 9(2)(e)).':\n\t\t\t\treturn 'Die Verarbeitung bezieht sich auf persönliche Daten, die du offensichtlich öffentlich gemacht hast (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(e)).';\n\t\t\tcase 'Protecting your privacy and keeping your personal information safe is our highest priority.':\n\t\t\t\treturn 'Die Sicherung deiner Privatsphäre und der Schutz deiner persönlichen Informationen haben für uns höchste Priorität.';\n\t\t\tcase 'Restrict the use of your personal data':\n\t\t\t\treturn 'Schränke die Verwendung deiner persönlichen Daten ein';\n\t\t\tcase 'See further below for our contact information.':\n\t\t\t\treturn 'Unsere Kontaktdaten findest du weiter unten.';\n\t\t\tcase 'Should there be any substantial changes to this policy with material effects on any of your rights or choices, you will be notified via a prominent notice within our services or by email to the primary email address specified in your account at least %d days prior to such changes taking effect.':\n\t\t\t\treturn 'Sollte es wesentliche Änderungen an dieser Erklärung mit wichtigen Auswirkungen auf deine Rechte oder Wahlmöglichkeiten geben, wirst du durch eine auffällige Ankündigung innerhalb unserer Dienste oder per E-Mail an die primäre E-Mail-Adresse, die in deinem Benutzerkonto hinterlegt ist, mindestens %d Tage vor dem Inkrafttreten solcher Änderungen benachrichtigt.';\n\t\t\tcase 'Should you believe that we might have any personal information of a child under the age of %d, in particular a child of your own, please contact us so that the data in question can be deleted, if appropriate.':\n\t\t\t\treturn 'Solltest du glauben, dass wir persönliche Informationen von einem Kind unter %d gespeichert haben könnten, insbesondere von einem deiner Kinder, kontaktiere uns bitte umgehend, sodass die betroffenen Daten, falls zutreffend, gelöscht werden können.';\n\t\t\tcase 'Some of our external service providers and recipients of personal data are based outside your country and outside our country.':\n\t\t\t\treturn 'Manche unserer externen Dienstleister und Empfänger von persönlichen Daten haben ihren Sitz außerhalb deines Landes und außerhalb unseres Landes.';\n\t\t\tcase 'Such third countries may have data protection rules that are different from those in your or our country.':\n\t\t\t\treturn 'Solche Drittländer können Datenschutzregeln haben, die sich von denen in deinem oder unserem Land unterscheiden.';\n\t\t\tcase 'These third parties do not have any right to use the information that we share about you beyond what is necessary to assist us with the specific task at hand.':\n\t\t\t\treturn 'Diese Drittunternehmen sind nicht berechtigt, die Informationen, die wir über dich weitergeben, über das Maß hinaus zu nutzen, das notwendig ist, um uns bei der konkreten Aufgabenstellung zu unterstützen.';\n\t\t\tcase 'The settings and features of your web browser or operating system may allow you to control how third parties can store cookies on your device.':\n\t\t\t\treturn 'Die Einstellungen und Funktionen deines Webbrowsers oder Betriebssystems können dir erlauben, zu kontrollieren, wie Drittanbieter Cookies auf deinem Gerät speichern können.';\n\t\t\tcase 'The third parties that provide these contents may store cookies on your device for their own purposes and interests, which we cannot control.':\n\t\t\t\treturn 'Die Drittanbieter, die diese Inhalte bereitstellen, können Cookies für ihre eigenen Zwecke und Interessen auf deinem Gerät speichern, was wir nicht kontrollieren können.';\n\t\t\tcase 'They are, however, commonly used to store a unique identifier for every individual user, so that our servers do not lose information on who you are while you are moving through the individual parts of our services.':\n\t\t\t\treturn 'Sie werden jedoch häufig dazu verwendet, eine eindeutige Kennung für jeden einzelnen Nutzer zu speichern, damit unsere Server nicht die Information darüber verlieren, wer du bist, während du dich durch die einzelnen Bereiche unserer Dienste bewegst.';\n\t\t\tcase 'They are transferred from our servers to your device through your web browser or app.':\n\t\t\t\treturn 'Sie werden von unseren Servern über deinen Webbrowser oder deine App auf dein Gerät übertragen.';\n\t\t\tcase 'This information is not required and you can use parts of our services without this information. You have to give your consent before we collect this data, but some features may not be available without.':\n\t\t\t\treturn 'Diese Information wird nicht zwingend benötigt und du kannst Teile unserer Dienste ohne diese Angabe nutzen. Du musst deine Genehmigung erteilen, bevor wir diese Daten erfassen, aber manche Funktionen sind ohne diese Daten möglicherweise nicht verfügbar.';\n\t\t\tcase 'This information is not required and you can use parts of our services without this information. You may withdraw your consent for our collection of this data, but some features may not be available without.':\n\t\t\t\treturn 'Diese Information wird nicht zwingend benötigt und du kannst Teile unserer Dienste ohne diese Angabe nutzen. Du kannst deine Einwilligung zu unserer Erfassung dieser Daten widerrufen, aber manche Funktionen sind ohne diese Daten möglicherweise nicht verfügbar.';\n\t\t\tcase 'This information is required for the operation of our services and its collection is therefore a condition for your use of our services.':\n\t\t\t\treturn 'Diese Information wird für den Betrieb unserer Dienste benötigt und ihre Erhebung ist deshalb eine Bedingung für deine Nutzung unserer Dienste.';\n\t\t\tcase 'This is possible either by using the “Unsubscribe” feature at the bottom of such emails that we may send, or by adjusting the settings in your account within our services, where applicable.':\n\t\t\t\treturn 'Dies ist möglich, indem du entweder die „Abmelden“-Funktion am unteren Ende von solchen E-Mails benutzt, die wir senden könnten, oder durch das Ändern der Einstellungen in deinem Benutzerkonto innerhalb unserer Dienste, wo zutreffend.';\n\t\t\tcase 'This means that parts of your personal information may temporarily remain on our servers even after deletion or termination of your use of our services.':\n\t\t\t\treturn 'Dies bedeutet, dass Teile deiner persönlichen Informationen selbst nach Löschung oder nach Beendigung deiner Nutzung unserer Dienste vorübergehend auf unseren Servern bestehen bleiben können.';\n\t\t\tcase 'This means that the processing of your personal data by those third parties involves an international transfer of your data to a third country.':\n\t\t\t\treturn 'Dies bedeutet, dass die Verarbeitung deiner persönlichen Daten durch diese Drittanbieter eine internationale Übermittlung deiner Daten an ein Drittland umfasst.';\n\t\t\tcase 'This notification will include help on choices you may have regarding the transfer and treatment of your personal information.':\n\t\t\t\treturn 'Diese Benachrichtigung wird Hilfe zu den Wahlmöglichkeiten beinhalten, die du möglicherweise im Hinblick auf die Übertragung und Behandlung deiner persönlichen Informationen hast.';\n\t\t\tcase 'This notification will include help on choices you may have regarding the treatment of your personal information.':\n\t\t\t\treturn 'Diese Benachrichtigung wird Hilfe zu den Wahlmöglichkeiten beinhalten, die du möglicherweise im Hinblick auf die Behandlung deiner persönlichen Informationen hast.';\n\t\t\tcase 'This privacy policy governs your use of our services regardless of the domain names, operating systems, platforms or devices that are used to access the services, and regardless of whether such access is in connection with an account or not.':\n\t\t\t\treturn 'Diese Datenschutzerklärung regelt deine Nutzung unserer Dienste, unabhängig von den Domain-Namen, Betriebssystemen, Plattformen oder Geräten, die für den Zugriff auf die Dienste genutzt werden, und unabhängig davon, ob solcher Zugriff in Verbindung mit einem Benutzerkonto geschieht oder nicht.';\n\t\t\tcase 'This privacy statement (“privacy policy” or “policy”) is designed to help you better understand how and to what extent we collect, use, disclose, transfer and store your information.':\n\t\t\t\treturn 'Diese Datenschutzrichtlinie („Datenschutzerklärung“ oder „Erklärung“) soll dir helfen, besser zu verstehen, wie und in welchem Umfang wir deine Informationen erfassen, verwenden, offenlegen, übertragen und speichern.';\n\t\t\tcase 'Thus, for any international transfer of data, we ensure that appropriate technical, organizational and contractual measures are in place to guarantee that a similar degree of protection is afforded to your data internationally and that your personal data remains protected to the standards described in this policy.':\n\t\t\t\treturn 'Deshalb stellen wir für jede internationale Übermittlung von Daten sicher, dass angemessene technische, organisatorische und vertragliche Maßnahmen getroffen werden, um zu gewährleisten, dass deinen Daten international ein ähnlicher Schutz geboten wird und dass deine persönlichen Daten gemäß den Standards geschützt bleiben, die in dieser Erklärung beschrieben sind.';\n\t\t\tcase 'Update your personal data':\n\t\t\t\treturn 'Aktualisiere deine persönlichen Daten';\n\t\t\tcase 'Upon verification of your identity, we will respond to your request within a reasonable period of time.':\n\t\t\t\treturn 'Nach Überprüfung deiner Identität werden wir innerhalb eines angemessenen Zeitraumes auf deine Anfrage antworten.';\n\t\t\tcase 'We advise you to verify the privacy practices of those third parties individually.':\n\t\t\t\treturn 'Wir raten dir, die Datenschutzpraktiken dieser Drittunternehmen individuell zu überprüfen.';\n\t\t\tcase 'We always collect only the minimum amount of personal information necessary to provide our services to you, unless you choose to provide more such information voluntarily.':\n\t\t\t\treturn 'Wir erheben immer nur die kleinstmögliche Menge an persönliche Informationen, die nötig ist, um unsere Dienste für dich bereitstellen zu können, es sei denn, du entschließt dich freiwillig dazu, mehr solcher Informationen zu übertragen.';\n\t\t\tcase 'We encourage you not to provide any personal information to those third parties before assuring yourself of proper privacy practices on their part.':\n\t\t\t\treturn 'Wir empfehlen dir, diesen Drittunternehmen keine persönlichen Informationen bereitzustellen, bevor du dich von angemessenen Datenschutzpraktiken seitens dieser Unternehmen überzeugt hast.';\n\t\t\tcase 'We encourage you to give us, and, more generally, any provider of digital services, only the amount of data you are comfortable sharing.':\n\t\t\t\treturn 'Wir ermutigen dich dazu, uns, und allgemeiner jedem Anbieter von digitalen Dienstleistungen, nur die Menge an Daten bereitzustellen, mit der du dich wohlfühlst.';\n\t\t\tcase 'We have no knowledge about and are not responsible for the way that those third parties handle any personal information which you provide to them yourself.':\n\t\t\t\treturn 'Wir haben keine Kenntnis von und sind nicht verantwortlich für die Art und Weise, wie diese Drittunternehmen persönliche Informationen behandeln, die du ihnen selbst bereitstellst.';\n\t\t\tcase 'We may retain and use your personal information and data as necessary to comply with our legal obligations, to resolve disputes, and to enforce our rights and agreements.':\n\t\t\t\treturn 'Wir bewahren deine persönlichen Informationen und Daten möglicherweise so lange auf und nutzen diese, wie es erforderlich ist, um unsere gesetzlichen Verpflichtungen einzuhalten, Streitfälle beizulegen und unsere Rechte und Vereinbarungen durchzusetzen.';\n\t\t\tcase 'We offer you simple ways to view, update or delete the data we have collected about you.':\n\t\t\t\treturn 'Wir bieten dir einfache Möglichkeiten, die Informationen, die wir über dich erfasst haben, anzusehen, zu aktualisieren und zu löschen.';\n\t\t\tcase 'We take the trust that you place in us very seriously.':\n\t\t\t\treturn 'Wir nehmen das Vertrauen, das du uns entgegenbringst, sehr ernst.';\n\t\t\tcase 'We use this information to personalize our services for you and to adjust them to your preferences.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um unsere Dienste für dich zu personalisieren und sie an deine Präferenzen anzupassen.';\n\t\t\tcase 'We use this information to provide and fulfill the specific services that you explicitly request.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um die konkreten Dienstleistungen, die du ausdrücklich anforderst, bereitstellen und erfüllen zu können.';\n\t\t\tcase 'We use this information to provide customer service to you, to answer your questions and to communicate with you about your use of our services.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um dir Kundendienst anzubieten, deine Fragen zu beantworten und mit dir über deine Nutzung unserer Dienste zu kommunizieren.';\n\t\t\tcase 'We use this information to provide meaningful and unobtrusive advertising to you.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um dir aussagekräftige und unaufdringliche Werbung zeigen zu können.';\n\t\t\tcase 'We want to help and will be happy to address your concerns.':\n\t\t\t\treturn 'Wir möchten helfen und kümmern uns gerne um dein Anliegen.';\n\t\t\tcase 'We will retain certain pieces of personal information for as long as you use our services, as long as your account exists, or as long as needed for us to be able to provide our services to you.':\n\t\t\t\treturn 'Wir werden gewisse persönliche Informationen so lange aufbewahren, wie du unsere Dienste nutzt, wie dein Benutzerkonto besteht oder wie es nötig ist, um unsere Dienste für dich bereitstellen zu können.';\n\t\t\tcase 'You are free to file a complaint with the data protection authority.':\n\t\t\t\treturn 'Es steht dir frei, bei der Datenschutzbehörde eine Beschwerde einzulegen.';\n\t\t\tcase 'You are welcome to make use of these settings and features of your web browser or operating system, but that may prevent our services from working correctly for you.':\n\t\t\t\treturn 'Du kannst gerne von diesen Einstellungen und Funktionen in deinem Webbrowser oder Betriebssystem Gebrauch machen, aber dies kann unsere Dienste daran hindern, korrekt für dich zu funktionieren.';\n\t\t\tcase 'You can reach us via email at:':\n\t\t\t\treturn 'Du erreichst uns per E-Mail unter:';\n\t\t\tcase 'You have given consent to the processing of your personal data for one or more specific purposes (EU, General Data Protection Regulation (GDPR), Article 6(1)(a)).':\n\t\t\t\treturn 'Du hast deine Einwilligung zur Verarbeitung der dich betreffenden persönlichen Daten für einen oder mehrere bestimmte Zwecke gegeben (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(a)).';\n\t\t\tcase 'You have given explicit consent to the processing of your personal data for one or more specified purposes (EU, General Data Protection Regulation (GDPR), Article 9(2)(a)).':\n\t\t\t\treturn 'Du hast in die Verarbeitung der genannten persönlichen Daten für einen oder mehrere festgelegte Zwecke ausdrücklich eingewilligt (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(a)).';\n\t\t\tcase 'You have the right not to be subject to a decision based solely on automated decision-making, including profiling, where the decision would have a legal effect on you or produce a similarly significant effect.':\n\t\t\t\treturn 'Du hast das Recht, keiner Entscheidung unterworfen zu sein, die allein auf einer automatisierten Entscheidungsfindung basiert, einschließlich der Profilerstellung, wenn eine solche Entscheidung dir gegenüber rechtliche Auswirkungen hätte oder eine ähnlich erhebliche Beeinträchtigung hervorrufen würde.';\n\t\t\tcase 'You have the right to be informed of and request access to the personal data we process about you.':\n\t\t\t\treturn 'Du hast das Recht, über die persönlichen Daten, die wir von dir erheben, informiert zu werden und Zugriff darauf zu erhalten.';\n\t\t\tcase 'You have the right to object to us processing your personal data on grounds relating to your particular situation where we no longer have a legitimate reason or legal need to process it.':\n\t\t\t\treturn 'Du hast das Recht, der Verarbeitung deiner persönlichen Daten durch uns aus Gründen zu widersprechen, die sich aus deiner speziellen Situation ergeben, wenn wir keinen legitimen Grund oder keine rechtliche Verpflichtung mehr zu deren Verarbeitung haben.';\n\t\t\tcase 'You have the right to object to your personal data being processed for direct marketing purposes.':\n\t\t\t\treturn 'Du hast das Recht, der Verarbeitung deiner persönlichen Daten für Zwecke der Direktwerbung zu widersprechen.';\n\t\t\tcase 'You have the right to request a copy of your personal data in electronic and machine-readable form, and the right to transmit that personal data to another service provider.':\n\t\t\t\treturn 'Du hast das Recht, eine Kopie deiner persönlichen Daten in elektronischer und maschinenlesbarer Form anzufordern, und das Recht, diese persönlichen Daten an einen anderen Diensteanbieter zu übertragen.';\n\t\t\tcase 'You have the right to request that we amend or update your personal data where it is inaccurate or incomplete.':\n\t\t\t\treturn 'Du hast das Recht, von uns die Änderung oder Aktualisierung deiner persönlichen Daten zu fordern, wo diese fehlerhaft oder unvollständig sind.';\n\t\t\tcase 'You have the right to request that we delete your personal data.':\n\t\t\t\treturn 'Du hast das Recht, von uns die Löschung deiner persönlichen Daten zu verlangen.';\n\t\t\tcase 'You have the right to request that we temporarily or permanently stop processing your personal data.':\n\t\t\t\treturn 'Du hast das Recht, uns aufzufordern, die Verarbeitung deiner persönlichen Daten vorübergehend oder dauerhaft einzustellen.';\n\t\t\tcase 'You may also contact the data protection authority that is responsible for us:':\n\t\t\t\treturn 'Du kannst auch die Datenschutzbehörde kontaktieren, die für uns zuständig ist:';\n\t\t\tcase 'You may opt out of receiving any newsletters or promotional messages from us at any time.':\n\t\t\t\treturn 'Du kannst dem Empfang jeglicher Newsletter oder Werbenachrichten von uns jederzeit widersprechen.';\n\t\t\tcase 'Your rights':\n\t\t\t\treturn 'Deine Rechte';\n\t\t\tcase 'Your web browser or app then sends these small text files back to us whenever you access our services.':\n\t\t\t\treturn 'Dein Webbrowser oder deine App sendet diese kleinen Textdateien dann jedes Mal an uns zurück, wenn du auf unsere Dienste zugreifst.';\n\t\t\tcase 'Your web browser or operating system usually provides means to delete such data currently stored on your device.':\n\t\t\t\treturn 'Dein Webbrowser oder Betriebssystem bietet üblicherweise Möglichkeiten an, solche Daten, die zurzeit auf deinem Gerät gespeichert sind, zu löschen.';\n\t\t\tcase 'You should never disclose your authentication information to any third party and you should notify us immediately of any unauthorized use of your account.':\n\t\t\t\treturn 'Du solltest deine Informationen zur Authentifizierung niemals Dritten preisgeben und du solltest uns unverzüglich über jegliche unberechtigte Nutzung deines Benutzerkontos benachrichtigen.';\n\t\t\tcase 'You therefore consent to our use of cookies and related technologies when using our services.':\n\t\t\t\treturn 'Du erklärst dich deshalb mit unserer Nutzung von Cookies und ähnlichen Technologien einverstanden, wenn du unsere Dienste nutzt.';\n\t\t\tcase 'You will be notified via a prominent notice within our services or by email to the primary email address specified in your account at least %d days before any such transfer of your personal information.':\n\t\t\t\treturn 'Du wirst durch eine auffällige Ankündigung innerhalb unserer Dienste oder per E-Mail an die primäre E-Mail-Adresse, die in deinem Benutzerkonto hinterlegt ist, mindestens %d Tage vor einer solchen Übertragung deiner persönlichen Informationen benachrichtigt.';\n\t\t\tcase 'You will continue to receive essential, non-promotional messages regarding your account, such as technical notices, order confirmations, or other service-related messages, which are required for us to be able to provide our services to you.':\n\t\t\t\treturn 'Du wirst weiterhin grundlegende Nachrichten bezüglich deines Benutzerkontos erhalten, die nicht der Werbung dienen, wie etwa technische Mitteilungen, Auftragsbestätigungen oder andere dienstbezogene Nachrichten, die nötig sind, damit wir dir unsere Dienste bereitstellen können.';\n\t\t\tdefault:\n\t\t\t\treturn parent::translateUnformatted($text);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Language/GermanPrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Language;\n\nuse Delight\\PrivacyPolicy\\HumanPrivacyPolicy;\nuse Delight\\PrivacyPolicy\\Throwable\\TranslationNotFoundError;\n\n/** Privacy policy for humans in German */\nabstract class GermanPrivacyPolicy extends HumanPrivacyPolicy {\n\n\tpublic function getShortTitle() {\n\t\treturn 'Datenschutz';\n\t}\n\n\tpublic function getLongTitle() {\n\t\treturn 'Datenschutzerklärung';\n\t}\n\n\tprotected function translateUnformatted($text) {\n\t\tswitch ($text) {\n\t\t\tcase 'Access privileges':\n\t\t\t\treturn 'Zugriffsrechte';\n\t\t\tcase 'Account ID':\n\t\t\t\treturn 'Kennung des Benutzer- oder Kundenkontos';\n\t\t\tcase 'Account name':\n\t\t\t\treturn 'Name des Benutzer- oder Kundenkontos';\n\t\t\tcase 'Account type':\n\t\t\t\treturn 'Typ des Benutzer- oder Kundenkontos';\n\t\t\tcase 'Address of contact':\n\t\t\t\treturn 'Adresse des Kontakts';\n\t\t\tcase 'Address':\n\t\t\t\treturn 'Adresse';\n\t\t\tcase 'Alias or username of contact':\n\t\t\t\treturn 'Pseudonym oder Benutzername des Kontakts';\n\t\t\tcase 'Alias or username':\n\t\t\t\treturn 'Pseudonym oder Benutzername';\n\t\t\tcase 'Amount of data transferred for each access':\n\t\t\t\treturn 'Übertragene Datenmenge für jeden Zugriff';\n\t\t\tcase 'Android app (available from “Google Play”, a digital distribution platform operated by Google Inc.)':\n\t\t\t\treturn 'Android-App (verfügbar über „Google Play“, eine digitale Vertriebsplattform, betrieben von Google Inc.)';\n\t\t\tcase 'Approximate location of device':\n\t\t\t\treturn 'Ungefährer Standort des Geräts';\n\t\t\tcase 'archiving or research':\n\t\t\t\treturn 'Archivierung oder Forschung';\n\t\t\tcase 'As such, cookies and the related technologies are essential for the operation of our services.':\n\t\t\t\treturn 'In diesem Sinne sind Cookies und die ähnlichen Technologien unerlässlich für den Betrieb unserer Dienste.';\n\t\t\tcase 'Availability of file uploads':\n\t\t\t\treturn 'Verfügbarkeit von Dateiuploads';\n\t\t\tcase 'Availability of password reset':\n\t\t\t\treturn 'Verfügbarkeit des Passwort-Zurücksetzens';\n\t\t\tcase 'Bank account number of contact':\n\t\t\t\treturn 'Nummer des Bankkontos des Kontakts';\n\t\t\tcase 'Bank account number':\n\t\t\t\treturn 'Nummer des Bankkontos';\n\t\t\tcase 'Bank identifier of contact':\n\t\t\t\treturn 'Bezeichner der Bank des Kontakts';\n\t\t\tcase 'Bank identifier':\n\t\t\t\treturn 'Bezeichner der Bank';\n\t\t\tcase 'Bank name of contact':\n\t\t\t\treturn 'Name der Bank des Kontakts';\n\t\t\tcase 'Bank name':\n\t\t\t\treturn 'Name der Bank';\n\t\t\tcase 'Billing amount of contract':\n\t\t\t\treturn 'Rechnungsbetrag des Vertrages';\n\t\t\tcase 'Billing cycle of contract':\n\t\t\t\treturn 'Abrechnungszeitraum des Vertrages';\n\t\t\tcase 'Blood group':\n\t\t\t\treturn 'Blutgruppe';\n\t\t\tcase 'Body weight':\n\t\t\t\treturn 'Körpergewicht';\n\t\t\tcase 'Brand and version of operating system on device':\n\t\t\t\treturn 'Marke und Version des Betriebssystems auf dem Gerät';\n\t\t\tcase 'Brand and version of web browser on device':\n\t\t\t\treturn 'Marke und Version des Webbrowsers auf dem Gerät';\n\t\t\tcase 'Brand name of credit card':\n\t\t\t\treturn 'Marke der Kreditkarte';\n\t\t\tcase 'Brand of operating system on device':\n\t\t\t\treturn 'Marke des Betriebssystems auf dem Gerät';\n\t\t\tcase 'Brand of web browser on device':\n\t\t\t\treturn 'Marke des Webbrowsers auf dem Gerät';\n\t\t\tcase 'Cancellation period of contract':\n\t\t\t\treturn 'Kündigungsfrist des Vertrages';\n\t\t\tcase 'Card number of credit card':\n\t\t\t\treturn 'Kartennummer der Kreditkarte';\n\t\t\tcase 'Changes to this privacy policy':\n\t\t\t\treturn 'Änderungen an dieser Datenschutzerklärung';\n\t\t\tcase 'Children’s Online Privacy Protection':\n\t\t\t\treturn 'Schutz der Privatsphäre von Kindern';\n\t\t\tcase 'City of contact':\n\t\t\t\treturn 'Stadt des Kontakts';\n\t\t\tcase 'City':\n\t\t\t\treturn 'Stadt';\n\t\t\tcase 'Classification of letter as first letter':\n\t\t\t\treturn 'Einstufung des Briefes als ersten Brief';\n\t\t\tcase 'Classification of letter as personal or as relating to business':\n\t\t\t\treturn 'Einstufung des Briefes als persönlich oder als geschäftlich';\n\t\t\tcase 'Clicks or taps within application':\n\t\t\t\treturn 'Klicks und Tippen innerhalb der Anwendung';\n\t\t\tcase 'Color of vehicle':\n\t\t\t\treturn 'Farbe des Fahrzeugs';\n\t\t\tcase 'Company name of contact':\n\t\t\t\treturn 'Name des Unternehmens des Kontakts';\n\t\t\tcase 'Company name':\n\t\t\t\treturn 'Name des Unternehmens';\n\t\t\tcase 'Condition for the processing of special categories of personal data:':\n\t\t\t\treturn 'Bedingung zur Verarbeitung besonderer Kategorien persönlicher Daten:';\n\t\t\tcase 'consent':\n\t\t\t\treturn 'Einwilligung';\n\t\t\tcase 'Contact information of the controller':\n\t\t\t\treturn 'Kontaktdaten des Verantwortlichen';\n\t\t\tcase 'Contract duration after renewal':\n\t\t\t\treturn 'Vertragsdauer nach Verlängerung';\n\t\t\tcase 'contract':\n\t\t\t\treturn 'Vertrag';\n\t\t\tcase 'Contractual partner':\n\t\t\t\treturn 'Vertragspartner';\n\t\t\tcase 'Cookies are minimal text files that contain small amounts of data.':\n\t\t\t\treturn 'Cookies sind kleine Textdateien, die geringe Mengen an Daten beinhalten.';\n\t\t\tcase 'Cookies':\n\t\t\t\treturn 'Cookies';\n\t\t\tcase 'Country of contact':\n\t\t\t\treturn 'Land des Kontakts';\n\t\t\tcase 'Country':\n\t\t\t\treturn 'Land';\n\t\t\tcase 'Current occupation':\n\t\t\t\treturn 'Aktueller Beruf';\n\t\t\tcase 'Custom notes on contract':\n\t\t\t\treturn 'Benutzerdefinierte Notizen zum Vertrag';\n\t\t\tcase 'Custom notes on vehicle':\n\t\t\t\treturn 'Benutzerdefinierte Notizen zum Fahrzeug';\n\t\t\tcase 'Custom notes relating to invoice':\n\t\t\t\treturn 'Benutzerdefinierte Notizen zur Rechnung';\n\t\t\tcase 'Custom notes':\n\t\t\t\treturn 'Benutzerdefinierte Notizen';\n\t\t\tcase 'Customer number on invoice':\n\t\t\t\treturn 'Kundennummer auf der Rechnung';\n\t\t\tcase 'Customer number':\n\t\t\t\treturn 'Kundennummer';\n\t\t\tcase 'Date and time for each access':\n\t\t\t\treturn 'Datum und Uhrzeit für jeden Zugriff';\n\t\t\tcase 'Date and time of email':\n\t\t\t\treturn 'Datum und Uhrzeit der E-Mail';\n\t\t\tcase 'Date and time of event in calendar':\n\t\t\t\treturn 'Datum und Uhrzeit des Termins im Kalender';\n\t\t\tcase 'Date and time of letter':\n\t\t\t\treturn 'Datum und Uhrzeit des Briefes';\n\t\t\tcase 'Date and time of login':\n\t\t\t\treturn 'Datum und Uhrzeit des Logins';\n\t\t\tcase 'Date and time of registration':\n\t\t\t\treturn 'Datum und Uhrzeit der Registrierung';\n\t\t\tcase 'Date and time when invoice has been paid':\n\t\t\t\treturn 'Datum und Uhrzeit, wann Rechnung bezahlt wurde';\n\t\t\tcase 'Date and time when invoice has been refunded':\n\t\t\t\treturn 'Datum und Uhrzeit, wann Rechnung erstattet wurde';\n\t\t\tcase 'Date and time when reminder has been sent for invoice':\n\t\t\t\treturn 'Datum und Uhrzeit, wann Erinnerung für Rechnung gesendet wurde';\n\t\t\tcase 'Date for each access':\n\t\t\t\treturn 'Datum für jeden Zugriff';\n\t\t\tcase 'Date of birth of contact':\n\t\t\t\treturn 'Geburtsdatum des Kontakts';\n\t\t\tcase 'Date of birth':\n\t\t\t\treturn 'Geburtsdatum';\n\t\t\tcase 'Date of email':\n\t\t\t\treturn 'Datum der E-Mail';\n\t\t\tcase 'Date of event in calendar':\n\t\t\t\treturn 'Datum des Termins im Kalender';\n\t\t\tcase 'Date of expiration':\n\t\t\t\treturn 'Datum des Außerkrafttretens';\n\t\t\tcase 'Date of letter':\n\t\t\t\treturn 'Datum des Briefes';\n\t\t\tcase 'Date of login':\n\t\t\t\treturn 'Datum des Logins';\n\t\t\tcase 'Date of publication':\n\t\t\t\treturn 'Datum der Veröffentlichung';\n\t\t\tcase 'Date of registration':\n\t\t\t\treturn 'Datum der Registrierung';\n\t\t\tcase 'Department of contact within company':\n\t\t\t\treturn 'Abteilung des Kontakts innerhalb des Unternehmens';\n\t\t\tcase 'Department within company':\n\t\t\t\treturn 'Abteilung innerhalb des Unternehmens';\n\t\t\tcase 'Description of item on invoice':\n\t\t\t\treturn 'Beschreibung des Postens auf der Rechnung';\n\t\t\tcase 'Diagnostics data for application':\n\t\t\t\treturn 'Diagnosedaten für Anwendung';\n\t\t\tcase 'Diagnostics data for device':\n\t\t\t\treturn 'Diagnosedaten für Gerät';\n\t\t\tcase 'Digitally drawn signature':\n\t\t\t\treturn 'Digital gezeichnete Unterschrift';\n\t\t\tcase 'Discount on invoice':\n\t\t\t\treturn 'Rabatt auf der Rechnung';\n\t\t\tcase 'Discount on item on invoice':\n\t\t\t\treturn 'Rabatt für Posten auf der Rechnung';\n\t\t\tcase 'Effective date':\n\t\t\t\treturn 'Datum des Inkrafttretens';\n\t\t\tcase 'Email address of contact':\n\t\t\t\treturn 'E-Mail-Adresse des Kontakts';\n\t\t\tcase 'Email address of designated receiver of information on undeliverable email':\n\t\t\t\treturn 'E-Mail-Adresse des vorgesehenen Empfängers von Informationen über unzustellbare E-Mails';\n\t\t\tcase 'Email address of designated receiver of replies to email':\n\t\t\t\treturn 'E-Mail-Adresse des vorgesehenen Empfängers von Antworten auf die E-Mail';\n\t\t\tcase 'Email address of sender of email':\n\t\t\t\treturn 'E-Mail-Adresse des Absenders der E-Mail';\n\t\t\tcase 'Email address':\n\t\t\t\treturn 'E-Mail-Adresse';\n\t\t\tcase 'Email addresses in BCC line of email':\n\t\t\t\treturn 'E-Mail-Adressen in BCC-Zeile der E-Mail';\n\t\t\tcase 'Email addresses in CC line of email':\n\t\t\t\treturn 'E-Mail-Adressen in CC-Zeile der E-Mail';\n\t\t\tcase 'Email addresses of recipients of email':\n\t\t\t\treturn 'E-Mail-Adressen der Empfänger der E-Mail';\n\t\t\tcase 'Email communication':\n\t\t\t\treturn 'E-Mail-Kommunikation';\n\t\t\tcase 'employment and social security':\n\t\t\t\treturn 'Arbeit und soziale Sicherheit';\n\t\t\tcase 'End of billing':\n\t\t\t\treturn 'Ende der Abrechnung';\n\t\t\tcase 'End of contract':\n\t\t\t\treturn 'Vertragsende';\n\t\t\tcase 'Energy level on device':\n\t\t\t\treturn 'Energiestand des Geräts';\n\t\t\tcase 'Energy source for device':\n\t\t\t\treturn 'Energiequelle des Geräts';\n\t\t\tcase 'Energy usage of application':\n\t\t\t\treturn 'Energieverbrauch der Anwendung';\n\t\t\tcase 'Entry of company in commercial register':\n\t\t\t\treturn 'Eintrag des Unternehmens im Handelsregister';\n\t\t\tcase 'Error logs from application':\n\t\t\t\treturn 'Fehlerberichte aus der Anwendung';\n\t\t\tcase 'Error rate in application':\n\t\t\t\treturn 'Fehlerrate in der Anwendung';\n\t\t\tcase 'Expiration date of credit card':\n\t\t\t\treturn 'Ablaufdatum der Kreditkarte';\n\t\t\tcase 'explicit consent':\n\t\t\t\treturn 'ausdrückliche Einwilligung';\n\t\t\tcase 'Family name of contact':\n\t\t\t\treturn 'Nachname des Kontakts';\n\t\t\tcase 'Family name':\n\t\t\t\treturn 'Nachname';\n\t\t\tcase 'Fax number of contact':\n\t\t\t\treturn 'Fax-Nummer des Kontakts';\n\t\t\tcase 'Fax number':\n\t\t\t\treturn 'Fax-Nummer';\n\t\t\tcase 'File contents':\n\t\t\t\treturn 'Datei-Inhalt';\n\t\t\tcase 'File size':\n\t\t\t\treturn 'Datei-Größe';\n\t\t\tcase 'Filename':\n\t\t\t\treturn 'Dateiname';\n\t\t\tcase 'foundation, association or non-profit':\n\t\t\t\treturn 'Stiftung, Vereinigung oder Organisation ohne Gewinnerzielungsabsicht';\n\t\t\tcase 'Frame rate in application':\n\t\t\t\treturn 'Bildfrequenz in der Anwendung';\n\t\t\tcase 'Fulfillment period on invoice':\n\t\t\t\treturn 'Abwicklungszeitraum laut Rechnung';\n\t\t\tcase 'Functions performed by them on our behalf may include payment processing, network data transmission, fraud prevention, customer support management and similar services.':\n\t\t\t\treturn 'Funktionen, die diese Parteien für uns und in unserem Auftrag ausführen, können die Zahlungsabwicklung, Datenübertragung im Netzwerk, Betrugsprävention, Verwaltung der Kundenbetreuung und ähnliche Dienstleistungen umfassen.';\n\t\t\tcase 'Gender of contact':\n\t\t\t\treturn 'Geschlecht des Kontakts';\n\t\t\tcase 'Gender':\n\t\t\t\treturn 'Geschlecht';\n\t\t\tcase 'General':\n\t\t\t\treturn 'Allgemein';\n\t\t\tcase 'Geographical coordinates':\n\t\t\t\treturn 'Geographische Koordinaten';\n\t\t\tcase 'Given name of contact':\n\t\t\t\treturn 'Vorname des Kontakts';\n\t\t\tcase 'Given name':\n\t\t\t\treturn 'Vorname';\n\t\t\tcase 'Handwritten signature':\n\t\t\t\treturn 'Handschriftliche Unterschrift';\n\t\t\tcase 'Hardware or software failure as well as other factors may compromise the security of user information, as is the case with all other providers of digital services.':\n\t\t\t\treturn 'Fehler in Hardware oder Software sowie andere Faktoren können die Sicherheit der Daten von Nutzern beeinträchtigen, so wie es auch bei allen anderen Anbietern von digitalen Dienstleistungen der Fall ist.';\n\t\t\tcase 'Headline of letter':\n\t\t\t\treturn 'Überschrift des Briefes';\n\t\t\tcase 'health and social care':\n\t\t\t\treturn 'Gesundheit und Soziales';\n\t\t\tcase 'Height':\n\t\t\t\treturn 'Körpergröße';\n\t\t\tcase 'HTTP request method for each access':\n\t\t\t\treturn 'HTTP-Anfragemethode für jeden Zugriff';\n\t\t\tcase 'HTTP status code for each access':\n\t\t\t\treturn 'HTTP-Statuscode für jeden Zugriff';\n\t\t\tcase 'Identification number with external payment service provider':\n\t\t\t\treturn 'Kennnummer bei externem Zahlungsdienstleister';\n\t\t\tcase 'Identifier of device':\n\t\t\t\treturn 'Kennung des Geräts';\n\t\t\tcase 'IMEI of device':\n\t\t\t\treturn 'IMEI des Geräts';\n\t\t\tcase 'In any case, we will provide data only to the extent necessary to satisfy the request, and, whenever possible and legally permitted, we will make a reasonable effort to notify affected users of any such disclosure.':\n\t\t\t\treturn 'In jedem Fall werden wir Daten nur in dem Maße zur Verfügung stellen, das nötig ist, um der Aufforderung zu genügen, und, wann immer es möglich und gesetzlich zulässig ist, werden wir uns in angemessener Weise bemühen, betroffene Nutzer über diese Offenlegung zu benachrichtigen.';\n\t\t\tcase 'In particular, all connections to and from our services are encrypted using Secure Sockets Layer (SSL) and Transport Layer Security (TLS) technologies.':\n\t\t\t\treturn 'Insbesondere sind alle Verbindungen zu und von unseren Diensten durch die Technologien „Secure Sockets Layer“ (SSL) und „Transport Layer Security“ (TLS) verschlüsselt.';\n\t\t\tcase 'Information relating to energy of device':\n\t\t\t\treturn 'Informationen zur Energie des Geräts';\n\t\t\tcase 'Information we collect and why we collect it':\n\t\t\t\treturn 'Informationen, die wir erfassen, und warum wir sie erfassen';\n\t\t\tcase 'Interactions with application':\n\t\t\t\treturn 'Interaktionen mit der Anwendung';\n\t\t\tcase 'International data transfers':\n\t\t\t\treturn 'Internationale Datenübermittlungen';\n\t\t\tcase 'Internet Protocol (IP) address (reduced to 25%% precision)':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse) (reduziert auf 25%% Genauigkeit)';\n\t\t\tcase 'Internet Protocol (IP) address (reduced to 50%% precision)':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse) (reduziert auf 50%% Genauigkeit)';\n\t\t\tcase 'Internet Protocol (IP) address (reduced to 75%% precision)':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse) (reduziert auf 75%% Genauigkeit)';\n\t\t\tcase 'Internet Protocol (IP) address for each access (reduced to 25%% precision)':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse) für jeden Zugriff (reduziert auf 25%% Genauigkeit)';\n\t\t\tcase 'Internet Protocol (IP) address for each access (reduced to 50%% precision)':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse) für jeden Zugriff (reduziert auf 50%% Genauigkeit)';\n\t\t\tcase 'Internet Protocol (IP) address for each access (reduced to 75%% precision)':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse) für jeden Zugriff (reduziert auf 75%% Genauigkeit)';\n\t\t\tcase 'Internet Protocol (IP) address for each access':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse) für jeden Zugriff';\n\t\t\tcase 'Internet Protocol (IP) address':\n\t\t\t\treturn 'Internetprotokoll-Adresse (IP-Adresse)';\n\t\t\tcase 'Invoice amount (gross)':\n\t\t\t\treturn 'Rechnungsbetrag (brutto)';\n\t\t\tcase 'Invoice amount (net)':\n\t\t\t\treturn 'Rechnungsbetrag (netto)';\n\t\t\tcase 'Invoice date':\n\t\t\t\treturn 'Rechnungsdatum';\n\t\t\tcase 'Invoice number':\n\t\t\t\treturn 'Rechnungsnummer';\n\t\t\tcase 'iOS app (available from the “App Store”, a digital distribution platform operated by Apple Inc.)':\n\t\t\t\treturn 'iOS-App (verfügbar über den „App Store“, eine digitale Vertriebsplattform, betrieben von Apple Inc.)';\n\t\t\tcase 'Label for logo of company':\n\t\t\t\treturn 'Bezeichnung für Logo des Unternehmens';\n\t\t\tcase 'Label for signature':\n\t\t\t\treturn 'Bezeichnung für Unterschrift';\n\t\t\tcase 'Language of device':\n\t\t\t\treturn 'Sprache des Geräts';\n\t\t\tcase 'Latest version':\n\t\t\t\treturn 'Aktuellste Version';\n\t\t\tcase 'Lawful basis:':\n\t\t\t\treturn 'Rechtsgrundlage:';\n\t\t\tcase 'Laws in the jurisdictions that we operate in may obligate us to disclose certain personal information or other information that we collect about our users to local law enforcement authorities.':\n\t\t\t\treturn 'Gesetze in den Rechtssystemen und Zuständigkeitsbereichen, in denen wir unsere Dienste betreiben, können uns dazu verpflichten, bestimmte persönliche Informationen oder andere Informationen, die wir über unsere Nutzer erfassen, gegenüber lokalen Strafverfolgungsbehörden offenzulegen.';\n\t\t\tcase 'legal claims or judicial capacity':\n\t\t\t\treturn 'Rechtsansprüche oder justizielle Tätigkeit';\n\t\t\tcase 'legal obligation':\n\t\t\t\treturn 'rechtliche Verpflichtung';\n\t\t\tcase 'legitimate interests':\n\t\t\t\treturn 'berechtigte Interessen';\n\t\t\tcase 'Links to external websites, applications and products':\n\t\t\t\treturn 'Links zu externen Webseiten, Anwendungen und Produkten';\n\t\t\tcase 'List of enclosures to letter':\n\t\t\t\treturn 'Liste der Anlagen zum Brief';\n\t\t\tcase 'Logo of company':\n\t\t\t\treturn 'Logo des Unternehmens';\n\t\t\tcase 'MAC address of device':\n\t\t\t\treturn 'MAC-Adresse des Geräts';\n\t\t\tcase 'Make of vehicle':\n\t\t\t\treturn 'Marke des Fahrzeugs';\n\t\t\tcase 'Mandatory disclosure':\n\t\t\t\treturn 'Offenlegungspflichten';\n\t\t\tcase 'Manufacturer of device':\n\t\t\t\treturn 'Hersteller des Geräts';\n\t\t\tcase 'Maximum retention time: %s':\n\t\t\t\treturn 'Maximale Aufbewahrungszeit: %s';\n\t\t\tcase 'Members of executive board of company':\n\t\t\t\treturn 'Mitglieder des Vorstands des Unternehmens';\n\t\t\tcase 'Members of management of company':\n\t\t\t\treturn 'Mitglieder der Geschäftsführung des Unternehmens';\n\t\t\tcase 'Members of supervisory board of company':\n\t\t\t\treturn 'Mitglieder des Aufsichtsrats des Unternehmens';\n\t\t\tcase 'Mergers and acquisitions':\n\t\t\t\treturn 'Fusionen und Übernahmen';\n\t\t\tcase 'Message on invoice':\n\t\t\t\treturn 'Nachricht auf der Rechnung';\n\t\t\tcase 'Message text of email':\n\t\t\t\treturn 'Nachrichtentext der E-Mail';\n\t\t\tcase 'Message text of letter':\n\t\t\t\treturn 'Nachrichtentext des Briefes';\n\t\t\tcase 'Mobile phone number of contact':\n\t\t\t\treturn 'Telefonnummer (mobil) des Kontakts';\n\t\t\tcase 'Mobile phone number':\n\t\t\t\treturn 'Telefonnummer (mobil)';\n\t\t\tcase 'Model name of device':\n\t\t\t\treturn 'Modellbezeichnung des Geräts';\n\t\t\tcase 'Model name of vehicle':\n\t\t\t\treturn 'Modellbezeichnung des Fahrzeugs';\n\t\t\tcase 'Month and day of birth of contact':\n\t\t\t\treturn 'Monat und Tag der Geburt des Kontakts';\n\t\t\tcase 'Month and day of birth':\n\t\t\t\treturn 'Monat und Tag der Geburt';\n\t\t\tcase 'Name of contact':\n\t\t\t\treturn 'Name des Kontakts';\n\t\t\tcase 'Name':\n\t\t\t\treturn 'Name';\n\t\t\tcase 'no':\n\t\t\t\treturn 'nein';\n\t\t\tcase 'None of our services are designed for, intended to attract, or directed towards children under the age of %d.':\n\t\t\t\treturn 'Keine unserer Dienste sind für Kinder im Alter unter %d konzipiert, beabsichtigen deren Aufmerksamkeit zu gewinnen oder sind auf sie ausgerichtet.';\n\t\t\tcase 'Notes on additional recipients of letter':\n\t\t\t\treturn 'Hinweise auf zusätzliche Empfänger des Briefes';\n\t\t\tcase 'Occupation':\n\t\t\t\treturn 'Beruf';\n\t\t\tcase 'Occurrences of errors in application':\n\t\t\t\treturn 'Vorkommen von Fehlern in der Anwendung';\n\t\t\tcase 'Our full contact information can be found at:':\n\t\t\t\treturn 'Unsere vollständigen Kontaktdaten sind zu finden unter:';\n\t\t\tcase 'Our principles':\n\t\t\t\treturn 'Unsere Prinzipien';\n\t\t\tcase 'Password (cleartext)':\n\t\t\t\treturn 'Passwort (Klartext)';\n\t\t\tcase 'Password (hash)':\n\t\t\t\treturn 'Passwort (Hash)';\n\t\t\tcase 'Password (strong hash)':\n\t\t\t\treturn 'Passwort (starker Hash)';\n\t\t\tcase 'Payment terms for invoice':\n\t\t\t\treturn 'Zahlungsbedingungen für Rechnung';\n\t\t\tcase 'Payments past due':\n\t\t\t\treturn 'Überfälligkeit von Zahlungen';\n\t\t\tcase 'Permanent identifier of device':\n\t\t\t\treturn 'Permanente Kennung des Geräts';\n\t\t\tcase 'Phone number of contact':\n\t\t\t\treturn 'Telefonnummer des Kontakts';\n\t\t\tcase 'Phone number':\n\t\t\t\treturn 'Telefonnummer';\n\t\t\tcase 'Picture':\n\t\t\t\treturn 'Bild';\n\t\t\tcase 'Place of birth':\n\t\t\t\treturn 'Geburtsort';\n\t\t\tcase 'Place of construction of vehicle':\n\t\t\t\treturn 'Herstellungsort des Fahrzeugs';\n\t\t\tcase 'Plan or package for billing':\n\t\t\t\treturn 'Tarif oder Paket für Abrechnung';\n\t\t\tcase 'Postal code of contact':\n\t\t\t\treturn 'Postleitzahl des Kontakts';\n\t\t\tcase 'Postal code':\n\t\t\t\treturn 'Postleitzahl';\n\t\t\tcase 'Postscript of letter':\n\t\t\t\treturn 'Postskriptum des Briefes';\n\t\t\tcase 'Precise location of device':\n\t\t\t\treturn 'Genauer Standort des Geräts';\n\t\t\tcase 'Preferred occupation':\n\t\t\t\treturn 'Bevorzugter Beruf';\n\t\t\tcase 'Price (gross) of item on invoice':\n\t\t\t\treturn 'Preis (brutto) des Postens auf der Rechnung';\n\t\t\tcase 'Price (net) of item on invoice':\n\t\t\t\treturn 'Preis (netto) des Postens auf der Rechnung';\n\t\t\tcase 'Processing is carried out by a foundation, association or any other not-for-profit body with a political, philosophical, religious or trade union aim and on condition that the processing relates solely to the members or to former members of the body or to persons who have regular contact with it (EU, General Data Protection Regulation (GDPR), Article 9(2)(d)).':\n\t\t\t\treturn 'Die Verarbeitung erfolgt durch eine politisch, weltanschaulich, religiös oder gewerkschaftlich ausgerichtete Stiftung, Vereinigung oder sonstige Organisation ohne Gewinnerzielungsabsicht und unter der Voraussetzung, dass sich die Verarbeitung ausschließlich auf die Mitglieder oder ehemalige Mitglieder der Organisation oder auf Personen, die regelmäßige Kontakte mit ihr unterhalten, bezieht (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(d)).';\n\t\t\tcase 'Processing is necessary for archiving purposes in the public interest, scientific or historical research purposes or statistical purposes (EU, General Data Protection Regulation (GDPR), Article 9(2)(j)).':\n\t\t\t\treturn 'Die Verarbeitung ist für im öffentlichen Interesse liegende Archivzwecke, für wissenschaftliche oder historische Forschungszwecke oder für statistische Zwecke erforderlich (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(j)).';\n\t\t\tcase 'Processing is necessary for compliance with a legal obligation to which we are subject (EU, General Data Protection Regulation (GDPR), Article 6(1)(c)).':\n\t\t\t\treturn 'Die Verarbeitung ist zur Erfüllung einer rechtlichen Verpflichtung erforderlich, der wir unterliegen (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(c)).';\n\t\t\tcase 'Processing is necessary for reasons of public interest in the area of public health, such as protecting against serious cross-border threats to health or ensuring high standards of quality and safety of health care and of medicinal products or medical devices (EU, General Data Protection Regulation (GDPR), Article 9(2)(i)).':\n\t\t\t\treturn 'Die Verarbeitung ist aus Gründen des öffentlichen Interesses im Bereich der öffentlichen Gesundheit, wie dem Schutz vor schwerwiegenden grenzüberschreitenden Gesundheitsgefahren oder zur Gewährleistung hoher Qualitäts- und Sicherheitsstandards bei der Gesundheitsversorgung und bei Arzneimitteln und Medizinprodukten erforderlich (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(i)).';\n\t\t\tcase 'Processing is necessary for reasons of substantial public interest (EU, General Data Protection Regulation (GDPR), Article 9(2)(g)).':\n\t\t\t\treturn 'Die Verarbeitung ist aus Gründen eines erheblichen öffentlichen Interesses erforderlich (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(g)).';\n\t\t\tcase 'Processing is necessary for the establishment, exercise or defence of legal claims or for a court acting in its judicial capacity (EU, General Data Protection Regulation (GDPR), Article 9(2)(f)).':\n\t\t\t\treturn 'Die Verarbeitung ist zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen oder bei Handlungen der Gerichte im Rahmen ihrer justiziellen Tätigkeit erforderlich (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(f)).';\n\t\t\tcase 'Processing is necessary for the performance of a task carried out in the public interest or in the exercise of official authority vested in us (EU, General Data Protection Regulation (GDPR), Article 6(1)(e)).':\n\t\t\t\treturn 'Die Verarbeitung ist für die Wahrnehmung einer Aufgabe erforderlich, die im öffentlichen Interesse liegt oder in Ausübung öffentlicher Gewalt erfolgt, die uns übertragen wurde (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(e)).';\n\t\t\tcase 'Processing is necessary for the purposes of carrying out obligations and exercising specific rights in the field of employment and social security and social protection law (EU, General Data Protection Regulation (GDPR), Article 9(2)(b)).':\n\t\t\t\treturn 'Die Verarbeitung ist erforderlich, damit aus dem Arbeitsrecht und dem Recht der sozialen Sicherheit und des Sozialschutzes erwachsende Rechte ausgeübt und diesbezüglichen Pflichten nachgekommen werden kann (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(b)).';\n\t\t\tcase 'Processing is necessary for the purposes of legitimate interests pursued by us or by a third party (EU, General Data Protection Regulation (GDPR), Article 6(1)(f)).':\n\t\t\t\treturn 'Die Verarbeitung ist zur Wahrung unserer berechtigten Interessen oder derer eines Dritten erforderlich (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 6(1)(f)).';\n\t\t\tcase 'Processing is necessary for the purposes of preventive or occupational medicine, for the assessment of the working capacity of the employee, medical diagnosis, the provision of health or social care or treatment or the management of health or social care systems and services (EU, General Data Protection Regulation (GDPR), Article 9(2)(h)).':\n\t\t\t\treturn 'Die Verarbeitung ist für Zwecke der Gesundheitsvorsorge oder der Arbeitsmedizin, für die Beurteilung der Arbeitsfähigkeit des Beschäftigten, für die medizinische Diagnostik, die Versorgung oder Behandlung im Gesundheits- oder Sozialbereich oder für die Verwaltung von Systemen und Diensten im Gesundheits- oder Sozialbereich erforderlich (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 9(2)(h)).';\n\t\t\tcase 'public data':\n\t\t\t\treturn 'öffentliche Daten';\n\t\t\tcase 'public health':\n\t\t\t\treturn 'öffentliche Gesundheit';\n\t\t\tcase 'public interest':\n\t\t\t\treturn 'öffentliches Interesse';\n\t\t\tcase 'Purchase history':\n\t\t\t\treturn 'Kaufhistorie';\n\t\t\tcase 'Quantity of item on invoice':\n\t\t\t\treturn 'Menge des Postens auf der Rechnung';\n\t\t\tcase 'Recipient of invoice':\n\t\t\t\treturn 'Empfänger der Rechnung';\n\t\t\tcase 'Reference of contact':\n\t\t\t\treturn 'Referenz des Kontakts';\n\t\t\tcase 'Reference':\n\t\t\t\treturn 'Referenz';\n\t\t\tcase 'Referring site (URL) for each access':\n\t\t\t\treturn 'Verweisende Webseite (URL) für jeden Zugriff';\n\t\t\tcase 'Registration plate number of vehicle':\n\t\t\t\treturn 'Kennzeichen des Fahrzeugs';\n\t\t\tcase 'Requested page (URL) for each access':\n\t\t\t\treturn 'Angeforderte Seite (URL) für jeden Zugriff';\n\t\t\tcase 'Required:':\n\t\t\t\treturn 'Erforderlich:';\n\t\t\tcase 'Resettable identifier of device':\n\t\t\t\treturn 'Zurücksetzbare Kennung des Geräts';\n\t\t\tcase 'Residential phone number of contact':\n\t\t\t\treturn 'Telefonnummer (Festnetz) des Kontakts';\n\t\t\tcase 'Residential phone number':\n\t\t\t\treturn 'Telefonnummer (Festnetz)';\n\t\t\tcase 'Retention and deletion of data':\n\t\t\t\treturn 'Aufbewahrung und Löschung von Daten';\n\t\t\tcase 'Right of access (EU, General Data Protection Regulation (GDPR), Article 15)':\n\t\t\t\treturn 'Auskunftsrecht (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 15)';\n\t\t\tcase 'Right to data portability (EU, General Data Protection Regulation (GDPR), Article 20)':\n\t\t\t\treturn 'Recht auf Datenübertragbarkeit (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 20)';\n\t\t\tcase 'Right to erasure (EU, General Data Protection Regulation (GDPR), Article 17)':\n\t\t\t\treturn 'Recht auf Löschung (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 17)';\n\t\t\tcase 'Right to object (EU, General Data Protection Regulation (GDPR), Article 21)':\n\t\t\t\treturn 'Widerspruchsrecht (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 21)';\n\t\t\tcase 'Right to rectification (EU, General Data Protection Regulation (GDPR), Article 16)':\n\t\t\t\treturn 'Recht auf Berichtigung (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 16)';\n\t\t\tcase 'Right to restriction of processing (EU, General Data Protection Regulation (GDPR), Article 18)':\n\t\t\t\treturn 'Recht auf Einschränkung der Verarbeitung (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 18)';\n\t\t\tcase 'Rights related to automated individual decision-making, including profiling (EU, General Data Protection Regulation (GDPR), Article 22)':\n\t\t\t\treturn 'Rechte bezüglich automatisierter Entscheidungen im Einzelfall, einschließlich Profiling (EU, Datenschutz-Grundverordnung (DSGVO), Artikel 22)';\n\t\t\tcase 'Salutation of letter':\n\t\t\t\treturn 'Anrede des Briefes';\n\t\t\tcase 'Service providers, contractors and agents':\n\t\t\t\treturn 'Dienstleister, Auftragnehmer und Vertreter';\n\t\t\tcase 'Sessions within application':\n\t\t\t\treturn 'Sitzungen innerhalb der Anwendung';\n\t\t\tcase 'Signature':\n\t\t\t\treturn 'Unterschrift';\n\t\t\tcase 'Social Security number (SSN) (United States of America)':\n\t\t\t\treturn 'Sozialversicherungsnummer (SSN) (Vereinigte Staaten von Amerika)';\n\t\t\tcase 'Some contents of our services are provided by third parties that are not directly affiliated with us.':\n\t\t\t\treturn 'Manche Inhalte unserer Dienste werden von Drittanbietern bereitgestellt, die nicht direkt mit uns in Verbindung stehen.';\n\t\t\tcase 'Some parts and sections of our services may contain external links to websites, applications or products owned by and operated by third parties.':\n\t\t\t\treturn 'Einige Teile und Bereiche unserer Dienste können externe Links zu Webseiten, Anwendungen oder Produkten enthalten, die im Besitz von Dritten sind und von Dritten betrieben werden.';\n\t\t\tcase 'Standard Contractual Clauses, as adopted by or approved by the European Commission, are in place.':\n\t\t\t\treturn 'Standardvertragsklauseln, eingeführt oder genehmigt durch die Europäische Kommission, sind vorhanden.';\n\t\t\tcase 'Start of billing':\n\t\t\t\treturn 'Beginn der Abrechnung';\n\t\t\tcase 'Start of contract':\n\t\t\t\treturn 'Vertragsbeginn';\n\t\t\tcase 'State of contact':\n\t\t\t\treturn 'Bundesland des Kontakts';\n\t\t\tcase 'State':\n\t\t\t\treturn 'Bundesland';\n\t\t\tcase 'Steuerliche Identifikationsnummer (Steuer-IdNr.) (Germany)':\n\t\t\t\treturn 'Steuerliche Identifikationsnummer (Steuer-IdNr.) (Deutschland)';\n\t\t\tcase 'Steuernummer (St.-Nr) (Germany)':\n\t\t\t\treturn 'Steuernummer (St.-Nr) (Deutschland)';\n\t\t\tcase 'Street name and house number of contact':\n\t\t\t\treturn 'Straße und Hausnummer des Kontakts';\n\t\t\tcase 'Street name and house number':\n\t\t\t\treturn 'Straße und Hausnummer';\n\t\t\tcase 'Subject of email':\n\t\t\t\treturn 'Betreff der E-Mail';\n\t\t\tcase 'Subject of letter':\n\t\t\t\treturn 'Betreff des Briefes';\n\t\t\tcase 'substantial public interest':\n\t\t\t\treturn 'erhebliches öffentliches Interesse';\n\t\t\tcase 'Such third parties help us provide and improve our services.':\n\t\t\t\treturn 'Solche Drittunternehmen helfen uns, unsere Dienste bereitzustellen und zu verbessern.';\n\t\t\tcase 'Taxes on invoice':\n\t\t\t\treturn 'Steuern auf der Rechnung';\n\t\t\tcase 'Taxes on item on invoice':\n\t\t\t\treturn 'Steuern auf den Posten der Rechnung';\n\t\t\tcase 'The country of the recipient has been deemed to provide an adequate level of protection for personal data by the European Commission.':\n\t\t\t\treturn 'Das Land des Empfängers bietet nach Einschätzung der Europäischen Kommission ein angemessenes Datenschutzniveau.';\n\t\t\tcase 'The policy applies to our websites, mobile apps, software applications, products and services, collectively referred to as “services”.':\n\t\t\t\treturn 'Die Erklärung gilt für unsere Webseiten, mobilen Apps, Software-Anwendungen, Produkte und Dienste, gemeinsam als „Dienste“ bezeichnet.';\n\t\t\tcase 'The recipient has Binding Corporate Rules that guarantee the protection of personal data.':\n\t\t\t\treturn 'Der Empfänger hat verbindliche interne Datenschutzvorschriften, die den Schutz persönlicher Daten garantieren.';\n\t\t\tcase 'The recipient is certified as part of the EU-US and Swiss-US Privacy Shield Frameworks.':\n\t\t\t\treturn 'Der Empfänger ist im Rahmen des EU-US- und Schweiz-US-Privacy-Shields zertifiziert.';\n\t\t\tcase 'These cookies do not necessarily contain any personal or identifying information.':\n\t\t\t\treturn 'Diese Cookies enthalten nicht zwangsläufig persönliche oder personenbezogene Informationen.';\n\t\t\tcase 'These external contents, which are displayed, rendered, played back or otherwise conveyed directly within our services, may include advertising, analytics and components from social media.':\n\t\t\t\treturn 'Diese externen Inhalte, die direkt innerhalb unserer Dienste angezeigt, übertragen, wiedergegeben oder auf andere Weise überbracht werden, können Werbung, Analysedienste und Komponenten von sozialen Medien umfassen.';\n\t\t\tcase 'These services include:':\n\t\t\t\treturn 'Diese Dienste umfassen:';\n\t\t\tcase 'They may even provide methods to disable the use of such technologies completely.':\n\t\t\t\treturn 'Es können sogar Methoden bereitstehen, um den Gebrauch dieser Technologien vollständig zu deaktivieren.';\n\t\t\tcase 'Third-party cookies':\n\t\t\t\treturn 'Cookies von Drittanbietern';\n\t\t\tcase 'Time for each access':\n\t\t\t\treturn 'Uhrzeit für jeden Zugriff';\n\t\t\tcase 'Time of cancellation of contract':\n\t\t\t\treturn 'Zeitpunkt der Kündigung des Vertrages';\n\t\t\tcase 'Time of cancellation':\n\t\t\t\treturn 'Zeitpunkt der Kündigung';\n\t\t\tcase 'Time of creation of contact':\n\t\t\t\treturn 'Zeitpunkt der Erstellung des Kontakts';\n\t\t\tcase 'Time of creation of contract':\n\t\t\t\treturn 'Zeitpunkt der Erstellung des Vertrages';\n\t\t\tcase 'Time of creation of invoice':\n\t\t\t\treturn 'Zeitpunkt der Erstellung der Rechnung';\n\t\t\tcase 'Time of creation of letter':\n\t\t\t\treturn 'Zeitpunkt der Erstellung des Briefes';\n\t\t\tcase 'Time of creation of logo of company':\n\t\t\t\treturn 'Zeitpunkt der Erstellung des Logos des Unternehmens';\n\t\t\tcase 'Time of creation of signature':\n\t\t\t\treturn 'Zeitpunkt der Erstellung der Unterschrift';\n\t\t\tcase 'Time of email':\n\t\t\t\treturn 'Uhrzeit der E-Mail';\n\t\t\tcase 'Time of event in calendar':\n\t\t\t\treturn 'Uhrzeit des Termins im Kalender';\n\t\t\tcase 'Time of first access':\n\t\t\t\treturn 'Zeitpunkt des ersten Zugriffs';\n\t\t\tcase 'Time of last modification to billing options':\n\t\t\t\treturn 'Zeitpunkt der letzten Änderung an den Zahlungsoptionen';\n\t\t\tcase 'Time of last modification to contact':\n\t\t\t\treturn 'Zeitpunkt der letzten Änderung am Kontakt';\n\t\t\tcase 'Time of last modification to contract':\n\t\t\t\treturn 'Zeitpunkt der letzten Änderung am Vertrag';\n\t\t\tcase 'Time of last modification to invoice':\n\t\t\t\treturn 'Zeitpunkt der letzten Änderung an Rechnung';\n\t\t\tcase 'Time of last modification to letter':\n\t\t\t\treturn 'Zeitpunkt der letzten Änderung am Brief';\n\t\t\tcase 'Time of last modification to logo of company':\n\t\t\t\treturn 'Zeitpunkt der letzten Änderung am Logo des Unternehmens';\n\t\t\tcase 'Time of last modification to signature':\n\t\t\t\treturn 'Zeitpunkt der letzten Änderung an der Unterschrift';\n\t\t\tcase 'Time of letter':\n\t\t\t\treturn 'Uhrzeit des Briefes';\n\t\t\tcase 'Time of login':\n\t\t\t\treturn 'Uhrzeit des Logins';\n\t\t\tcase 'Time of next payment':\n\t\t\t\treturn 'Zeitpunkt der nächsten Zahlung';\n\t\t\tcase 'Time of original message of contact':\n\t\t\t\treturn 'Datum der ursprünglichen Nachricht des Kontakts';\n\t\t\tcase 'Time of registration':\n\t\t\t\treturn 'Uhrzeit der Registrierung';\n\t\t\tcase 'Time zone of device':\n\t\t\t\treturn 'Zeitzone des Geräts';\n\t\t\tcase 'Timing and performance of application':\n\t\t\t\treturn 'Zeitablauf und Geschwindigkeit der Anwendung';\n\t\t\tcase 'Title of event in calendar':\n\t\t\t\treturn 'Titel des Termins im Kalender';\n\t\t\tcase 'Type of event in calendar':\n\t\t\t\treturn 'Typ des Termins im Kalender';\n\t\t\tcase 'Usage of free trial':\n\t\t\t\treturn 'Nutzung eines kostenlosen Probezeitraums';\n\t\t\tcase 'User-agent string for each access':\n\t\t\t\treturn 'User-Agent-String für jeden Zugriff';\n\t\t\tcase 'Valediction of letter':\n\t\t\t\treturn 'Grußformel des Briefes';\n\t\t\tcase 'VAT ID (European Union) of contact':\n\t\t\t\treturn 'USt-IdNr. (Europäische Union) des Kontakts';\n\t\t\tcase 'VAT ID (European Union)':\n\t\t\t\treturn 'USt-IdNr. (Europäische Union)';\n\t\t\tcase 'Verification code (e.g. CVC, CVV, CSC) of credit card':\n\t\t\t\treturn 'Sicherheitscode (z.B. CVC, CVV, CSC) der Kreditkarte';\n\t\t\tcase 'Verification status of email address':\n\t\t\t\treturn 'Bestätigungsstatus der E-Mail-Adresse';\n\t\t\tcase 'Version of application used for access':\n\t\t\t\treturn 'Version der für den Zugriff genutzten Anwendung';\n\t\t\tcase 'Version of operating system on device':\n\t\t\t\treturn 'Version des Betriebssystems auf dem Gerät';\n\t\t\tcase 'Version of web browser on device':\n\t\t\t\treturn 'Version des Webbrowsers auf dem Gerät';\n\t\t\tcase 'Version':\n\t\t\t\treturn 'Version';\n\t\t\tcase 'Views within application':\n\t\t\t\treturn 'Aufrufe innerhalb der Anwendung';\n\t\t\tcase 'Visits within application':\n\t\t\t\treturn 'Besuche innerhalb der Anwendung';\n\t\t\tcase 'vital interests':\n\t\t\t\treturn 'lebenswichtige Interessen';\n\t\t\tcase 'We are responsible for the processing of personal data under this policy.':\n\t\t\t\treturn 'Wir sind verantwortlich für die Verarbeitung persönlicher Daten gemäß dieser Erklärung.';\n\t\t\tcase 'We follow generally accepted industry standards to protect the data submitted to us, both during transmission and after we have received it, and continue to expand our protections as becomes necessary with changing technology.':\n\t\t\t\treturn 'Wir folgen allgemein anerkannten Industriestandards zum Schutz der Daten, die an uns übermittelt werden, sowohl während der Übertragung als auch nach dem Erhalt, und erweitern fortwährend unsere Schutzmaßnahmen, so wie es durch sich ändernde Technologie notwendig wird.';\n\t\t\tcase 'We have therefore implemented all measures reasonably necessary to protect the personal information of our users from unauthorized access, modification, deletion, disclosure or other misuse.':\n\t\t\t\treturn 'Wir haben deshalb alle Maßnahmen umgesetzt, die vernünftigerweise notwendig sind, um die persönlichen Informationen unserer Nutzer vor unberechtigtem Zugriff, Veränderung, Löschung, Offenlegung oder sonstigem Missbrauch zu schützen.';\n\t\t\tcase 'We may be compelled to such disclosure in response to a court order, a warrant or a similar request by a judicial body or a government agency, or when we believe in good faith that the disclosure is reasonably necessary to protect our rights or property, that of any third party, or the safety of the general public.':\n\t\t\t\treturn 'Wir können zu solch einer Offenlegung durch eine gerichtliche Anordnung, einen Haftbefehl, einen Durchsuchungsbeschluss oder eine ähnliche Aufforderung einer Justizbehörde oder einer Regierungsstelle gezwungen sein, oder wenn wir in gutem Glauben davon ausgehen, dass diese Offenlegung erforderlich ist, um Rechte oder Eigentum von uns oder Dritten oder die Sicherheit der Allgemeinheit zu schützen.';\n\t\t\tcase 'We may change this privacy policy from time to time.':\n\t\t\t\treturn 'Gelegentlich können wir diese Datenschutzerklärung anpassen.';\n\t\t\tcase 'We may use cookies and similar technologies, such as “Web Storage” (specifically “localStorage”) and “Internal Storage”, to make interactions with our services more convenient, efficient and secure.':\n\t\t\t\treturn 'Wir können Cookies und ähnliche Technologien, wie beispielsweise „Web Storage“ (insbesondere „localStorage“) und „Interner Speicher“, einsetzen, um die Interaktionen mit unseren Diensten bequemer, effizienter und sicherer zu machen.';\n\t\t\tcase 'We never knowingly collect any information from children under %d.':\n\t\t\t\treturn 'Niemals erheben wir wissentlich Informationen von Kindern unter %d.';\n\t\t\tcase 'We never sell, rent out or trade any of our user’s personal information with third parties for commercial purposes.':\n\t\t\t\treturn 'Niemals verkaufen, verleihen oder handeln wir persönliche Informationen unserer Nutzer mit Dritten für wirtschaftliche Zwecke.';\n\t\t\tcase 'We use this information for marketing and promotional purposes.':\n\t\t\t\treturn 'Wir nutzen diese Informationen für Marketing- und Werbezwecke.';\n\t\t\tcase 'We use this information for the provision, maintenance and administration of our services and to monitor and protect the security of our services.':\n\t\t\t\treturn 'Wir nutzen diese Informationen für die Bereitstellung, Wartung und Verwaltung unserer Dienste und zum Überwachen und Schützen der Sicherheit unserer Dienste.';\n\t\t\tcase 'We use this information to improve our services through research and analysis and to better understand how our services are used.':\n\t\t\t\treturn 'Wir nutzen diese Informationen, um unsere Dienste durch Forschung und Analysen zu verbessern und um besser zu verstehen, wie unsere Dienste genutzt werden.';\n\t\t\tcase 'We verify that at least one of the following safeguards is implemented:':\n\t\t\t\treturn 'Wir stellen sicher, dass mindestens eine der folgenden Schutzmaßnahmen umgesetzt ist:';\n\t\t\tcase 'Website (URL) of contact':\n\t\t\t\treturn 'Webseite (URL) des Kontakts';\n\t\t\tcase 'Website (URL)':\n\t\t\t\treturn 'Webseite (URL)';\n\t\t\tcase 'Website':\n\t\t\t\treturn 'Webseite';\n\t\t\tcase 'Without these technologies, use of our services would not be reasonably possible.':\n\t\t\t\treturn 'Ohne diese Technologien wäre die Nutzung unserer Dienste nicht in vernünftiger Weise möglich.';\n\t\t\tcase 'Year and month of birth of contact':\n\t\t\t\treturn 'Jahr und Monat der Geburt des Kontakts';\n\t\t\tcase 'Year and month of birth':\n\t\t\t\treturn 'Jahr und Monat der Geburt';\n\t\t\tcase 'Year of birth of contact':\n\t\t\t\treturn 'Geburtsjahr des Kontakts';\n\t\t\tcase 'Year of birth':\n\t\t\t\treturn 'Geburtsjahr';\n\t\t\tcase 'Year of construction of vehicle':\n\t\t\t\treturn 'Baujahr des Fahrzeugs';\n\t\t\tcase 'yes':\n\t\t\t\treturn 'ja';\n\t\t\tdefault:\n\t\t\t\tthrow new TranslationNotFoundError();\n\t\t}\n\t}\n\n\tprotected function formatDate($unixTimestamp) {\n\t\treturn \\IntlDateFormatter::create('de_DE', \\IntlDateFormatter::LONG, \\IntlDateFormatter::NONE)->format($unixTimestamp);\n\t}\n\n\tprotected function formatHours($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d Stunde' : '%d Stunden'), $n);\n\t}\n\n\tprotected function formatDays($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d Tag' : '%d Tage'), $n);\n\t}\n\n\tprotected function formatWeeks($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d Woche' : '%d Wochen'), $n);\n\t}\n\n\tprotected function formatMonths($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d Monat' : '%d Monate'), $n);\n\t}\n\n\tprotected function formatYears($n) {\n\t\treturn \\sprintf(($n === 1 ? '%d Jahr' : '%d Jahre'), $n);\n\t}\n\n}\n"
  },
  {
    "path": "src/Language/JsonPrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Language;\n\nuse Delight\\PrivacyPolicy\\MachinePrivacyPolicy;\nuse Delight\\PrivacyPolicy\\Scope\\AppStoreIosAppScope;\nuse Delight\\PrivacyPolicy\\Scope\\PlayStoreAndroidAppScope;\nuse Delight\\PrivacyPolicy\\Scope\\WebsiteScope;\nuse Delight\\PrivacyPolicy\\Throwable\\UnexpectedScopeError;\n\n/** Privacy policy for machines as JSON */\nfinal class JsonPrivacyPolicy extends MachinePrivacyPolicy {\n\n\t/**\n\t * The flags that are passed to the {@see \\json_encode} function\n\t *\n\t * @internal\n\t *\n\t * @var int\n\t */\n\tconst FLAGS_ENCODE = \\JSON_UNESCAPED_UNICODE | \\JSON_UNESCAPED_SLASHES | \\JSON_NUMERIC_CHECK;\n\n\t/**\n\t * Returns the policy as JSON\n\t *\n\t * @return string\n\t * @throws UnexpectedScopeError\n\t */\n\tpublic function toJson() {\n\t\t$out = [];\n\n\t\t$out['meta'] = [];\n\n\t\tif ($this->hasVersionName()) {\n\t\t\t$out['meta']['version'] = (string) $this->versionName;\n\t\t}\n\n\t\tif ($this->publishedAt !== null) {\n\t\t\t$out['meta']['published'] = (int) $this->publishedAt;\n\t\t}\n\n\t\tif ($this->takesEffectAt !== null) {\n\t\t\t$out['meta']['effective'] = (int) $this->takesEffectAt;\n\t\t}\n\n\t\tif ($this->expiresAt !== null) {\n\t\t\t$out['meta']['expires'] = (int) $this->expiresAt;\n\t\t}\n\n\t\tif ($this->hasCanonicalUrl()) {\n\t\t\t$out['meta']['canonical'] = (string) $this->canonicalUrl;\n\t\t}\n\n\t\tif ($this->hasScopes()) {\n\t\t\t$out['meta']['scopes'] = [];\n\n\t\t\tforeach ($this->scopes as $scope) {\n\t\t\t\tif ($scope instanceof WebsiteScope) {\n\t\t\t\t\t$out['meta']['scopes'][] = [\n\t\t\t\t\t\t'type' => 'web',\n\t\t\t\t\t\t'url' => (string) $scope->getUrl()\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\telseif ($scope instanceof PlayStoreAndroidAppScope) {\n\t\t\t\t\t$out['meta']['scopes'][] = [\n\t\t\t\t\t\t'type' => 'android',\n\t\t\t\t\t\t'packageName' => (string) $scope->getPackageName()\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\telseif ($scope instanceof AppStoreIosAppScope) {\n\t\t\t\t\t$out['meta']['scopes'][] = [\n\t\t\t\t\t\t'type' => 'ios',\n\t\t\t\t\t\t'trackId' => (string) $scope->getTrackId()\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new UnexpectedScopeError();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($this->hasDataGroups()) {\n\t\t\t$out['data'] = [];\n\n\t\t\tforeach ($this->dataGroups as $dataGroup) {\n\t\t\t\t$groupRecord = [];\n\n\t\t\t\tif ($dataGroup->hasBases()) {\n\t\t\t\t\t$groupRecord['bases'] = [];\n\n\t\t\t\t\tforeach ($dataGroup->getBases() as $base) {\n\t\t\t\t\t\t$groupRecord['bases'][] = (string) $base;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ($dataGroup->hasSpecialConditions()) {\n\t\t\t\t\t$groupRecord['specialConditions'] = [];\n\n\t\t\t\t\tforeach ($dataGroup->getSpecialConditions() as $specialCondition) {\n\t\t\t\t\t\t$groupRecord['specialConditions'][] = (string) $specialCondition;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ($dataGroup->hasPurposes()) {\n\t\t\t\t\t$groupRecord['purposes'] = [];\n\n\t\t\t\t\tforeach ($dataGroup->getPurposes() as $purpose) {\n\t\t\t\t\t\t$groupRecord['purposes'][] = (string) $purpose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$groupRecord['requirement'] = (string) $dataGroup->getRequirement();\n\n\t\t\t\tif ($dataGroup->hasElements()) {\n\t\t\t\t\t$groupRecord['elements'] = [];\n\n\t\t\t\t\tforeach ($dataGroup->getElements() as $element) {\n\t\t\t\t\t\t$record = [\n\t\t\t\t\t\t\t'type' => (string) $element->getType(),\n\t\t\t\t\t\t\t'requirement' => (string) $element->getRequirement()\n\t\t\t\t\t\t];\n\n\t\t\t\t\t\tif ($element->hasMaxRetention()) {\n\t\t\t\t\t\t\t$record['retention'] = [];\n\t\t\t\t\t\t\t$record['retention']['max'] = (int) $element->getMaxRetention();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$groupRecord['elements'][] = $record;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$out['data'][] = $groupRecord;\n\t\t\t}\n\t\t}\n\n\t\t$out['principles'] = [];\n\n\t\t$out['principles']['data'] = [];\n\t\t$out['principles']['data']['trade'] = (bool) $this->isUserDataTraded();\n\t\t$out['principles']['data']['avoidance'] = (bool) $this->hasDataMinimizationGoal();\n\n\t\tif ($this->hasChildrenMinimumAge()) {\n\t\t\t$out['children'] = [];\n\t\t\t$out['children']['age'] = [];\n\t\t\t$out['children']['age']['min'] = (int) $this->childrenMinimumAge;\n\t\t}\n\n\t\t$out['email'] = [];\n\t\t$out['email']['marketing'] = [];\n\t\t$out['email']['marketing']['optOut'] = (bool) $this->hasPromotionalEmailOptOut();\n\n\t\t$out['cookies'] = [];\n\t\t$out['cookies']['firstParty'] = (bool) $this->hasFirstPartyCookies();\n\t\t$out['cookies']['thirdParty'] = (bool) $this->hasThirdPartyCookies();\n\n\t\t$out['choices'] = [];\n\n\t\tif ($this->rightOfAccess || $this->rightToRectification || $this->rightToErasure || $this->rightToRestrictProcessing || $this->rightToDataPortability || $this->rightToObject || $this->rightsRelatedToAutomatedDecisions) {\n\t\t\t$out['choices']['data'] = [];\n\t\t\t$out['choices']['data']['access'] = (bool) $this->rightOfAccess;\n\t\t\t$out['choices']['data']['rectification'] = (bool) $this->rightToRectification;\n\t\t\t$out['choices']['data']['erasure'] = (bool) $this->rightToErasure;\n\t\t\t$out['choices']['data']['restrictProcessing'] = (bool) $this->rightToRestrictProcessing;\n\t\t\t$out['choices']['data']['portability'] = (bool) $this->rightToDataPortability;\n\t\t\t$out['choices']['data']['object'] = (bool) $this->rightToObject;\n\t\t\t$out['choices']['data']['automatedDecisions'] = (bool) $this->rightsRelatedToAutomatedDecisions;\n\t\t}\n\n\t\t$out['choices']['account'] = [];\n\t\t$out['choices']['account']['deletion'] = (bool) $this->isAccountDeletable();\n\n\t\t$out['backups'] = (bool) $this->hasPreservationInBackups();\n\n\t\t$out['serviceProviders'] = [];\n\t\t$out['serviceProviders']['thirdParties'] = (bool) $this->hasThirdPartyServiceProviders();\n\n\t\t$out['transfers'] = [];\n\t\t$out['transfers']['international'] = (bool) $this->hasInternationalTransfers();\n\n\t\t$out['mergersAndAcquisitions'] = [];\n\t\t$out['mergersAndAcquisitions']['transfer'] = (bool) $this->hasTransferUponMergerOrAcquisition();\n\n\t\t$out['security'] = [];\n\t\t$out['security']['tls'] = (bool) $this->hasTlsEverywhere();\n\n\t\tif ($this->competentSupervisoryAuthorityName !== null || $this->competentSupervisoryAuthorityUrl !== null) {\n\t\t\t$out['supervisoryAuthority'] = [];\n\n\t\t\tif ($this->competentSupervisoryAuthorityName !== null) {\n\t\t\t\t$out['supervisoryAuthority']['name'] = $this->competentSupervisoryAuthorityName;\n\t\t\t}\n\n\t\t\tif ($this->competentSupervisoryAuthorityUrl !== null) {\n\t\t\t\t$out['supervisoryAuthority']['url'] = $this->competentSupervisoryAuthorityUrl;\n\t\t\t}\n\t\t}\n\n\t\t$out['changes'] = [];\n\t\t$out['changes']['notificationPeriod'] = (int) $this->getNotificationPeriod();\n\n\t\tif ($this->hasContactInformation()) {\n\t\t\t$out['contact'] = [];\n\n\t\t\tif ($this->hasContactEmail()) {\n\t\t\t\t$out['contact']['email'] = (string) $this->contactEmail;\n\t\t\t}\n\n\t\t\tif ($this->hasContactUrl()) {\n\t\t\t\t$out['contact']['url'] = (string) $this->contactUrl;\n\t\t\t}\n\n\t\t\tif ($this->hasContactImage()) {\n\t\t\t\t$out['contact']['image'] = [];\n\n\t\t\t\tif (!empty($this->contactImage[0])) {\n\t\t\t\t\t$out['contact']['image']['source'] = (string) $this->contactImage[0];\n\t\t\t\t}\n\n\t\t\t\tif (!empty($this->contactImage[1])) {\n\t\t\t\t\t$out['contact']['image']['alternativeText'] = (string) $this->contactImage[1];\n\t\t\t\t}\n\n\t\t\t\tif (!empty($this->contactImage[2])) {\n\t\t\t\t\t$out['contact']['image']['width'] = (int) $this->contactImage[2];\n\t\t\t\t}\n\n\t\t\t\tif (!empty($this->contactImage[3])) {\n\t\t\t\t\t$out['contact']['image']['height'] = (int) $this->contactImage[3];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn $this->encodeAsJson($out);\n\t}\n\n\t/**\n\t * Encodes the supplied data as JSON\n\t *\n\t * @param array $data\n\t * @return string\n\t */\n\tprivate function encodeAsJson(array $data) {\n\t\t$flags = self::FLAGS_ENCODE;\n\n\t\tif (!$this->isMinified()) {\n\t\t\t$flags |= \\JSON_PRETTY_PRINT;\n\t\t}\n\n\t\treturn \\json_encode($data, $flags);\n\t}\n\n}\n"
  },
  {
    "path": "src/MachinePrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy;\n\n/** Privacy policy in formal language that can be read by machines */\nabstract class MachinePrivacyPolicy extends PrivacyPolicy {\n\n\t/** @var bool whether any output should be minified */\n\tprotected $minified;\n\n\t/**\n\t * Returns whether any output should be minified\n\t *\n\t * @return bool\n\t */\n\tpublic function isMinified() {\n\t\treturn $this->minified;\n\t}\n\n\t/**\n\t * Sets whether any output should be minified\n\t *\n\t * @param bool $minified\n\t */\n\tpublic function setMinified($minified) {\n\t\t$this->minified = (bool) $minified;\n\t}\n\n\tpublic function __construct() {\n\t\tparent::__construct();\n\n\t\t$this->minified = false;\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/AbbreviationMarkup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup;\n\n/** Generic markup for abbreviations with an optional expansion */\nfinal class AbbreviationMarkup extends Markup {\n\n\t/** @var string the abbreviation in its short form */\n\tprivate $abridgement;\n\t/** @var string|null the abbreviation in its long form */\n\tprivate $expansion;\n\n\t/**\n\t * @param string $abridgement the abbreviation in its short form\n\t * @param string|null $expansion (optional) the abbreviation in its long form\n\t */\n\tpublic function __construct($abridgement, $expansion = null) {\n\t\t$this->abridgement = (string) $abridgement;\n\t\t$this->expansion = ($expansion !== null) ? ((string) $expansion) : null;\n\t}\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\t$out = self::createHtmlIndentation($indentation);\n\n\t\t$out .= '<abbr';\n\n\t\tif ($this->expansion !== null) {\n\t\t\t$out .= ' title=\"';\n\t\t\t$out .= self::escapeForHtml($this->expansion);\n\t\t\t$out .= '\"';\n\t\t}\n\n\t\t$out .= '>';\n\t\t$out .= \"\\n\";\n\t\t$out .= self::createHtmlIndentation($indentation + 1);\n\t\t$out .= self::escapeForHtml($this->abridgement);\n\t\t$out .= \"\\n\";\n\t\t$out .= self::createHtmlIndentation($indentation);\n\t\t$out .= '</abbr>';\n\n\t\treturn $out;\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\t$out = self::createPlainTextIndentation($indentation);\n\n\t\t$out .= $this->abridgement;\n\n\t\tif ($this->expansion !== null) {\n\t\t\t$out .= ' (';\n\t\t\t$out .= $this->expansion;\n\t\t\t$out .= ')';\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\t$out = self::createMarkdownIndentation($indentation);\n\n\t\t$out .= $this->abridgement;\n\n\t\tif ($this->expansion !== null) {\n\t\t\t$out .= ' (';\n\t\t\t$out .= $this->expansion;\n\t\t\t$out .= ')';\n\t\t}\n\n\t\treturn $out;\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/ConcatenationMarkup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup;\n\n/** Generic markup for a concatenation of other elements */\nfinal class ConcatenationMarkup extends Markup {\n\n\t/** @var Markup[] the elements to concatenate */\n\tprivate $elements;\n\n\t/**\n\t * @param ...Markup $elements the elements to concatenate\n\t */\n\tpublic function __construct(...$elements) {\n\t\t$this->elements = $elements;\n\t}\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\t$out = [];\n\n\t\tforeach ($this->elements as $element) {\n\t\t\t$out[] = $element->toHtmlWithIndentation($indentation);\n\t\t}\n\n\t\treturn \\implode(\"\\n\", $out);\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\t$out = [];\n\n\t\tforeach ($this->elements as $element) {\n\t\t\t$out[] = $element->toPlainTextWithIndentation(0);\n\t\t}\n\n\t\treturn self::createPlainTextIndentation($indentation) . \\implode(Markup::SPACE, $out);\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\t$out = [];\n\n\t\tforeach ($this->elements as $element) {\n\t\t\t$out[] = $element->toMarkdownWithIndentation(0);\n\t\t}\n\n\t\treturn self::createMarkdownIndentation($indentation) . \\implode(Markup::SPACE, $out);\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/DefinitionList/DefinitionGroup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup\\DefinitionList;\n\nuse Delight\\PrivacyPolicy\\Markup\\Markup;\nuse Delight\\PrivacyPolicy\\Markup\\TextMarkup;\n\n/** Generic markup for a term and its definitions within a definition list */\nfinal class DefinitionGroup extends Markup {\n\n\t/** @var Markup the term */\n\tprivate $term;\n\t/** @var Markup[] the list of definitions */\n\tprivate $definitions;\n\n\t/**\n\t * Adds a new definition for the term of the group\n\t *\n\t * @param string|Markup $definition\n\t */\n\tpublic function addDefinition($definition) {\n\t\tif (!($definition instanceof Markup)) {\n\t\t\t$definition = new TextMarkup((string) $definition);\n\t\t}\n\n\t\t$this->definitions[] = $definition;\n\t}\n\n\t/**\n\t * Adds a new definition for the term of the group by executing the specified callback\n\t *\n\t * The callback must return a definition\n\t *\n\t * @param callable $build\n\t */\n\tpublic function addDefinitionInteractively(callable $build) {\n\t\t$this->addDefinition($build());\n\t}\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\t$out = self::createHtmlIndentation($indentation);\n\t\t$out .= '<dt>';\n\t\t$out .= \"\\n\";\n\t\t$out .= self::createHtmlIndentation($indentation + 1);\n\t\t$out .= '<strong>';\n\t\t$out .= \"\\n\";\n\t\t$out .= $this->term->toHtmlWithIndentation($indentation + 2);\n\t\t$out .= \"\\n\";\n\t\t$out .= self::createHtmlIndentation($indentation + 1);\n\t\t$out .= '</strong>';\n\t\t$out .= \"\\n\";\n\t\t$out .= self::createHtmlIndentation($indentation);\n\t\t$out .= '</dt>';\n\n\t\tif (!empty($this->definitions)) {\n\t\t\tforeach ($this->definitions as $definition) {\n\t\t\t\t$out .= \"\\n\";\n\t\t\t\t$out .= self::createHtmlIndentation($indentation);\n\t\t\t\t$out .= '<dd>';\n\t\t\t\t$out .= \"\\n\";\n\t\t\t\t$out .= $definition->toHtmlWithIndentation($indentation + 1);\n\t\t\t\t$out .= \"\\n\";\n\t\t\t\t$out .= self::createHtmlIndentation($indentation);\n\t\t\t\t$out .= '</dd>';\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t$out .= \"\\n\";\n\t\t\t$out .= self::createHtmlIndentation($indentation);\n\t\t\t$out .= '<dd></dd>';\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\t$out = $this->term->toPlainTextWithIndentation($indentation);\n\n\t\tforeach ($this->definitions as $definition) {\n\t\t\t$out .= \"\\n\";\n\t\t\t$out .= $definition->toPlainTextWithIndentation($indentation + 1);\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\t$out = self::createMarkdownIndentation($indentation);\n\t\t$out .= ' * **';\n\t\t$out .= $this->term->toMarkdownWithIndentation(0);\n\t\t$out .= '**';\n\n\t\tforeach ($this->definitions as $definition) {\n\t\t\t$out .= \"\\n\";\n\n\t\t\tif ($definition instanceof DefinitionList) {\n\t\t\t\t$out .= $definition->toMarkdownWithIndentation($indentation + 1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$out .= self::createMarkdownIndentation($indentation + 1);\n\t\t\t\t$out .= ' * ';\n\t\t\t\t$out .= $definition->toMarkdownWithIndentation(0);\n\t\t\t}\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\t/**\n\t * Creates a new group within a definition list\n\t *\n\t * The group has one term to be defined and any number of definitions for the term\n\t *\n\t * @param string|Markup $term the term to be defined\n\t * @param callable|null $init (optional) a callback that receives the new instance and may initialize it\n\t */\n\tpublic function __construct($term, callable $init = null) {\n\t\tif (!($term instanceof Markup)) {\n\t\t\t$term = new TextMarkup((string) $term);\n\t\t}\n\n\t\t$this->term = $term;\n\t\t$this->definitions = [];\n\n\t\tif (\\is_callable($init)) {\n\t\t\t$init($this);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/DefinitionList/DefinitionList.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup\\DefinitionList;\n\nuse Delight\\PrivacyPolicy\\Markup\\Markup;\n\n/** Generic markup for a definition list */\nfinal class DefinitionList extends Markup {\n\n\t/** @var DefinitionGroup[] the individual definition groups */\n\tprivate $definitionGroups;\n\n\t/**\n\t * Adds a new definition group\n\t *\n\t * The group has one term to be defined and any number of definitions for the term\n\t *\n\t * @param string|Markup $term the term to be defined\n\t * @param callable|null $init (optional) a callback that receives the new instance and may initialize it\n\t */\n\tpublic function addDefinitionGroup($term, callable $init = null) {\n\t\t$this->definitionGroups[] = new DefinitionGroup($term, $init);\n\t}\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\t$out = self::createHtmlIndentation($indentation);\n\t\t$out .= '<dl>';\n\t\t$out .= \"\\n\";\n\n\t\tforeach ($this->definitionGroups as $definitionGroup) {\n\t\t\t$out .= $definitionGroup->toHtmlWithIndentation($indentation + 1);\n\t\t\t$out .= \"\\n\";\n\t\t}\n\n\t\t$out .= self::createHtmlIndentation($indentation);\n\t\t$out .= '</dl>';\n\n\t\treturn $out;\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\t$out = '';\n\n\t\tforeach ($this->definitionGroups as $definitionGroup) {\n\t\t\tif ($out !== '') {\n\t\t\t\t$out .= \"\\n\";\n\t\t\t}\n\n\t\t\t$out .= $definitionGroup->toPlainTextWithIndentation($indentation);\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\t$out = '';\n\n\t\tforeach ($this->definitionGroups as $definitionGroup) {\n\t\t\tif ($out !== '') {\n\t\t\t\t$out .= \"\\n\";\n\t\t\t}\n\n\t\t\t$out .= $definitionGroup->toMarkdownWithIndentation($indentation);\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\t/**\n\t * Creates a new definition list\n\t *\n\t * The list can have any number of definition groups\n\t *\n\t * @param callable|null $init (optional) a callback that receives the new instance and may initialize it\n\t */\n\tpublic function __construct(callable $init = null) {\n\t\t$this->definitionGroups = [];\n\n\t\tif (\\is_callable($init)) {\n\t\t\t$init($this);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/ImageMarkup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup;\n\n/** Generic markup for images */\nfinal class ImageMarkup extends Markup {\n\n\t/** @var string the URL of the image to display */\n\tprivate $source;\n\t/** @var string|null the alternative text to show if the image cannot be displayed */\n\tprivate $alternativeText;\n\t/** @var int|null the suggested width of the image in pixels */\n\tprivate $width;\n\t/** @var int|null the suggested height of the image in pixels */\n\tprivate $height;\n\n\t/**\n\t * @param string $source the URL of the image to display\n\t * @param string|null $alternativeText (optional) the alternative text to show if the image cannot be displayed\n\t * @param int|null $width (optional) the suggested width of the image in pixels\n\t * @param int|null $height (optional) the suggested height of the image in pixels\n\t */\n\tpublic function __construct($source, $alternativeText = null, $width = null, $height = null) {\n\t\t$this->source = (string) $source;\n\t\t$this->alternativeText = ($alternativeText !== null) ? ((string) $alternativeText) : null;\n\t\t$this->width = ($width !== null) ? ((int) $width) : null;\n\t\t$this->height = ($height !== null) ? ((int) $height) : null;\n\t}\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\t$out = self::createHtmlIndentation($indentation);\n\n\t\t$out .= '<img';\n\t\t$out .= ' src=\"';\n\t\t$out .= self::escapeForHtml($this->source);\n\t\t$out .= '\"';\n\n\t\tif ($this->alternativeText !== null) {\n\t\t\t$out .= ' alt=\"';\n\t\t\t$out .= self::escapeForHtml($this->alternativeText);\n\t\t\t$out .= '\"';\n\t\t}\n\n\t\tif ($this->width !== null) {\n\t\t\t$out .= ' width=\"';\n\t\t\t$out .= self::escapeForHtml($this->width);\n\t\t\t$out .= '\"';\n\t\t}\n\n\t\tif ($this->height !== null) {\n\t\t\t$out .= ' height=\"';\n\t\t\t$out .= self::escapeForHtml($this->height);\n\t\t\t$out .= '\"';\n\t\t}\n\n\t\t$out .= '>';\n\n\t\treturn $out;\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\t$out = self::createPlainTextIndentation($indentation);\n\n\t\t$out .= $this->source;\n\n\t\tif ($this->alternativeText !== null) {\n\t\t\t$out .= ' (';\n\t\t\t$out .= $this->alternativeText;\n\t\t\t$out .= ')';\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\t$out = self::createMarkdownIndentation($indentation);\n\n\t\t$out .= '![';\n\n\t\tif ($this->alternativeText !== null) {\n\t\t\t$out .= $this->alternativeText;\n\t\t}\n\n\t\t$out .= '](';\n\t\t$out .= $this->source;\n\t\t$out .= ')';\n\n\t\treturn $out;\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/LinkMarkup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup;\n\n/** Generic markup for hyperlinks */\nfinal class LinkMarkup extends Markup {\n\n\t/** @var string the target URI */\n\tprivate $target;\n\t/** @var Markup the label */\n\tprivate $label;\n\t/** @var string|null an extended description */\n\tprivate $description;\n\n\t/**\n\t * @param string $target the target URI\n\t * @param string|Markup|null $label (optional) the label\n\t * @param string|null $description (optional) an extended description\n\t */\n\tpublic function __construct($target, $label = null, $description = null) {\n\t\t$this->target = (string) $target;\n\n\t\tif ($label === null) {\n\t\t\t$label = $target;\n\t\t}\n\n\t\tif (!($label instanceof Markup)) {\n\t\t\t$label = new TextMarkup((string) $label);\n\t\t}\n\n\t\t$this->label = $label;\n\t\t$this->description = ($description !== null) ? ((string) $description) : null;\n\t}\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\t$out = self::createHtmlIndentation($indentation);\n\n\t\t$out .= '<a';\n\t\t$out .= ' href=\"';\n\t\t$out .= self::escapeForHtml($this->target);\n\t\t$out .= '\"';\n\n\t\tif ($this->description !== null) {\n\t\t\t$out .= ' title=\"';\n\t\t\t$out .= self::escapeForHtml($this->description);\n\t\t\t$out .= '\"';\n\t\t}\n\n\t\t$out .= '>';\n\t\t$out .= \"\\n\";\n\n\t\tif ($this->label !== null) {\n\t\t\t$out .= $this->label->toHtmlWithIndentation($indentation + 1);\n\t\t}\n\n\t\t$out .= \"\\n\";\n\t\t$out .= self::createHtmlIndentation($indentation);\n\t\t$out .= '</a>';\n\n\t\treturn $out;\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\t$out = self::createPlainTextIndentation($indentation);\n\n\t\tif ($this->label !== null) {\n\t\t\t$out .= $this->label->toPlainTextWithIndentation(0);\n\t\t\t$out .= Markup::SPACE;\n\t\t}\n\n\t\tif ($this->description !== null) {\n\t\t\t$out .= Markup::EN_DASH;\n\t\t\t$out .= Markup::SPACE;\n\t\t\t$out .= $this->description;\n\t\t\t$out .= Markup::SPACE;\n\t\t}\n\n\t\t$out .= '(';\n\t\t$out .= $this->target;\n\t\t$out .= ')';\n\n\t\treturn $out;\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\t$out = self::createMarkdownIndentation($indentation);\n\t\t$out .= '[';\n\n\t\tif ($this->label !== null) {\n\t\t\t$out .= $this->label->toMarkdownWithIndentation(0);\n\n\t\t\tif ($this->description !== null) {\n\t\t\t\t$out .= Markup::SPACE;\n\t\t\t\t$out .= Markup::EN_DASH;\n\t\t\t\t$out .= Markup::SPACE;\n\t\t\t\t$out .= $this->description;\n\t\t\t}\n\t\t}\n\n\t\t$out .= '](';\n\t\t$out .= $this->target;\n\t\t$out .= ')';\n\n\t\treturn $out;\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/Markup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup;\n\n/** Generic markup that can be converted to various specific formats */\nabstract class Markup {\n\n\t/**\n\t * The default charset or character encoding\n\t *\n\t * @internal\n\t *\n\t * @var mixed\n\t */\n\tconst CHARSET_DEFAULT = 'UTF-8';\n\n\t/**\n\t * A single en dash character\n\t *\n\t * @var string\n\t */\n\tconst EN_DASH = '–';\n\n\t/**\n\t * The sequence of characters that is used for a single level of indentation in HTML\n\t *\n\t * @internal\n\t *\n\t * @var string\n\t */\n\tconst INDENTATION_UNIT_HTML = \"\\t\";\n\n\t/**\n\t * The sequence of characters that is used for a single level of indentation in Markdown\n\t *\n\t * @internal\n\t *\n\t * @var string\n\t */\n\tconst INDENTATION_UNIT_MARKDOWN = '  ';\n\n\t/**\n\t * The sequence of characters that is used for a single level of indentation in plain text\n\t *\n\t * @internal\n\t *\n\t * @var string\n\t */\n\tconst INDENTATION_UNIT_PLAIN_TEXT = \"\\t\";\n\n\t/**\n\t * A single middle dot character\n\t *\n\t * @var string\n\t */\n\tconst MIDDLE_DOT = '·';\n\n\t/**\n\t * A single space character\n\t *\n\t * @var string\n\t */\n\tconst SPACE = ' ';\n\n\t/**\n\t * Converts the markup to HTML\n\t *\n\t * @param int|null $indentation (optional) the level of indentation\n\t * @return string\n\t */\n\tpublic function toHtml($indentation = null) {\n\t\treturn $this->toHtmlWithIndentation($indentation !== null ? $indentation : 0);\n\t}\n\n\t/**\n\t * Converts the markup to HTML\n\t *\n\t * @internal\n\t *\n\t * @param int $indentation the level of indentation\n\t * @return string\n\t */\n\tabstract public function toHtmlWithIndentation($indentation);\n\n\t/**\n\t * Converts the markup to plain text\n\t *\n\t * @param int|null $indentation (optional) the level of indentation\n\t * @return string\n\t */\n\tpublic function toPlainText($indentation = null) {\n\t\treturn $this->toPlainTextWithIndentation($indentation !== null ? $indentation : 0);\n\t}\n\n\t/**\n\t * Converts the markup to plain text\n\t *\n\t * @internal\n\t *\n\t * @param int $indentation the level of indentation\n\t * @return string\n\t */\n\tabstract public function toPlainTextWithIndentation($indentation);\n\n\t/**\n\t * Converts the markup to Markdown\n\t *\n\t * @param int|null $indentation (optional) the level of indentation\n\t * @return string\n\t */\n\tpublic function toMarkdown($indentation = null) {\n\t\treturn $this->toMarkdownWithIndentation($indentation !== null ? $indentation : 0);\n\t}\n\n\t/**\n\t * Converts the markup to Markdown\n\t *\n\t * @internal\n\t *\n\t * @param int $indentation the level of indentation\n\t * @return string\n\t */\n\tabstract public function toMarkdownWithIndentation($indentation);\n\n\t/**\n\t * Creates the HTML sequence used for indentation of the specified level\n\t *\n\t * @param int $indentation the level of indentation\n\t * @return string\n\t */\n\tprotected static function createHtmlIndentation($indentation) {\n\t\treturn \\str_repeat(self::INDENTATION_UNIT_HTML, $indentation);\n\t}\n\n\t/**\n\t * Creates the plain text sequence used for indentation of the specified level\n\t *\n\t * @param int $indentation the level of indentation\n\t * @return string\n\t */\n\tprotected static function createPlainTextIndentation($indentation) {\n\t\treturn \\str_repeat(self::INDENTATION_UNIT_PLAIN_TEXT, $indentation);\n\t}\n\n\t/**\n\t * Creates the Markdown sequence used for indentation of the specified level\n\t *\n\t * @param int $indentation the level of indentation\n\t * @return string\n\t */\n\tprotected static function createMarkdownIndentation($indentation) {\n\t\treturn \\str_repeat(self::INDENTATION_UNIT_MARKDOWN, $indentation);\n\t}\n\n\t/**\n\t * Escapes the supplied text for use in HTML\n\t *\n\t * @param string $text\n\t * @return string\n\t */\n\tprotected static function escapeForHtml($text) {\n\t\treturn \\htmlspecialchars($text, \\ENT_QUOTES, self::CHARSET_DEFAULT);\n\t}\n\n}\n"
  },
  {
    "path": "src/Markup/SimpleMarkup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup;\n\n/** Simple markup that is composed exclusively of other generic markup */\nabstract class SimpleMarkup extends Markup {\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\treturn $this->toMarkup()->toHtmlWithIndentation($indentation);\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\treturn $this->toMarkup()->toPlainTextWithIndentation($indentation);\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\treturn $this->toMarkup()->toMarkdownWithIndentation($indentation);\n\t}\n\n\t/**\n\t * Returns the generic markup of the instance\n\t *\n\t * @internal\n\t *\n\t * @return Markup\n\t */\n\tabstract protected function toMarkup();\n\n}\n"
  },
  {
    "path": "src/Markup/TextMarkup.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Markup;\n\n/** Generic markup for text */\nfinal class TextMarkup extends Markup {\n\n\t/** @var string the text of the instance */\n\tprivate $text;\n\n\t/** @param string $text */\n\tpublic function __construct($text) {\n\t\t$this->text = (string) $text;\n\t}\n\n\tpublic function toHtmlWithIndentation($indentation) {\n\t\t$out = self::createHtmlIndentation($indentation);\n\t\t$out .= self::escapeForHtml($this->text);\n\n\t\treturn $out;\n\t}\n\n\tpublic function toPlainTextWithIndentation($indentation) {\n\t\t$out = self::createPlainTextIndentation($indentation);\n\t\t$out .= $this->text;\n\n\t\treturn $out;\n\t}\n\n\tpublic function toMarkdownWithIndentation($indentation) {\n\t\t$out = self::createMarkdownIndentation($indentation);\n\t\t$out .= $this->text;\n\n\t\treturn $out;\n\t}\n\n\tpublic function __toString() {\n\t\treturn $this->text;\n\t}\n\n}\n"
  },
  {
    "path": "src/PrivacyPolicy.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy;\n\nuse Delight\\PrivacyPolicy\\Data\\DataGroup;\nuse Delight\\PrivacyPolicy\\Scope\\Scope;\n\n/** Privacy policy that can be composed programmatically */\nabstract class PrivacyPolicy {\n\n\t/**\n\t * The default minimum age (in years) for children\n\t *\n\t * See \"COPPA\" (USA), \"GDPR\" (EU), etc.\n\t *\n\t * @var int\n\t */\n\tconst CHILDREN_MINIMUM_AGE_DEFAULT = 16;\n\n\t/**\n\t * The default period (in days) for notifications about major changes\n\t *\n\t * @var int\n\t */\n\tconst NOTIFICATION_PERIOD_DEFAULT = 30;\n\n\t/** @var int|null the time when the policy has been published as a UNIX timestamp in seconds */\n\tprotected $publishedAt;\n\t/** @var int|null the time when the policy takes effect as a UNIX timestamp in seconds */\n\tprotected $takesEffectAt;\n\t/** @var int|null the time when the policy will expire as a UNIX timestamp in seconds */\n\tprotected $expiresAt;\n\t/** @var string|null the name of the current version in arbitrary format */\n\tprotected $versionName;\n\t/** @var string|null the URL of the official policy in its latest version */\n\tprotected $canonicalUrl;\n\t/** @var Scope[] the scopes that describe which services the policy applies to */\n\tprotected $scopes;\n\t/** @var DataGroup[] the data groups that describe which data is collected and why */\n\tprotected $dataGroups;\n\t/** @var bool whether user data is sold, rented or traded with third parties */\n\tprotected $userDataTraded;\n\t/** @var bool whether the principle of Data Economy, Data Avoidance or Data Minimization is being followed */\n\tprotected $dataMinimizationGoal;\n\t/** @var int|null the minimum age for children in years (see \"COPPA\" (USA), \"GDPR\" (EU), etc.) */\n\tprotected $childrenMinimumAge;\n\t/** @var bool whether the user may opt-out from all emails that are not essential to the operation of the services */\n\tprotected $promotionalEmailOptOut;\n\t/** @var bool whether first-party cookies are used and sent to the user's device */\n\tprotected $firstPartyCookies;\n\t/** @var bool whether third-party cookies are used and sent to the user's device */\n\tprotected $thirdPartyCookies;\n\t/** @var bool whether users may delete their entire accounts or similar collections of personal data */\n\tprotected $accountDeletable;\n\t/** @var bool whether there are additional copies of user data for backup purposes */\n\tprotected $preservationInBackups;\n\t/** @var bool whether user data may be shared with third-party service providers, vendors, contractors or agents */\n\tprotected $thirdPartyServiceProviders;\n\t/** @var bool whether user data may be transferred internationally to third countries with safeguards for proper protection */\n\tprotected $internationalTransfers;\n\t/** @var bool whether user data may be part of the assets transferred during mergers, acquisitions or other changes of ownership */\n\tprotected $transferUponMergerOrAcquisition;\n\t/** @var bool whether all connections to the server are, without exceptions, secured using SSL/TLS */\n\tprotected $tlsEverywhere;\n\t/** @var string|null the name of the data protection authority that is responsible */\n\tprotected $competentSupervisoryAuthorityName;\n\t/** @var string|null the URL for more information on the data protection authority that is responsible */\n\tprotected $competentSupervisoryAuthorityUrl;\n\t/** @var int the declared period for notifications to the user about major changes */\n\tprotected $notificationPeriod;\n\t/** @var bool whether the user has the right of access */\n\tprotected $rightOfAccess;\n\t/** @var bool whether the user has the right to rectification */\n\tprotected $rightToRectification;\n\t/** @var bool whether the user has the right to erasure */\n\tprotected $rightToErasure;\n\t/** @var bool whether the user has the right to restriction of processing */\n\tprotected $rightToRestrictProcessing;\n\t/** @var bool whether the user has the right to data portability */\n\tprotected $rightToDataPortability;\n\t/** @var bool whether the user has the right to object */\n\tprotected $rightToObject;\n\t/** @var bool whether the user has rights related to automated individual decision-making, including profiling */\n\tprotected $rightsRelatedToAutomatedDecisions;\n\t/** @var string|null the email address for contact */\n\tprotected $contactEmail;\n\t/** @var string|null the URL of a page with (detailed) contact information */\n\tprotected $contactUrl;\n\t/** @var array|null an image showing (detailed) contact information */\n\tprotected $contactImage;\n\n\t/**\n\t * Sets the time when the policy has been published\n\t *\n\t * @param int|null $publishedAt the time as a UNIX timestamp in seconds, or `null` to unset\n\t */\n\tpublic function setPublishedAt($publishedAt) {\n\t\t$this->publishedAt = $publishedAt !== null ? ((int) $publishedAt) : null;\n\t}\n\n\t/**\n\t * Sets the time when the policy takes effect\n\t *\n\t * @param int|null $takesEffectAt the time as a UNIX timestamp in seconds, or `null` to unset\n\t */\n\tpublic function setTakesEffectAt($takesEffectAt) {\n\t\t$this->takesEffectAt = $takesEffectAt !== null ? ((int) $takesEffectAt) : null;\n\t}\n\n\t/**\n\t * Sets the time when the policy will expire\n\t *\n\t * @param int|null $expiresAt the time as a UNIX timestamp in seconds, or `null` to unset\n\t */\n\tpublic function setExpiresAt($expiresAt) {\n\t\t$this->expiresAt = $expiresAt !== null ? ((int) $expiresAt) : null;\n\t}\n\n\t/**\n\t * Returns whether the name of the current version has been defined\n\t *\n\t * @return bool\n\t */\n\tpublic function hasVersionName() {\n\t\treturn $this->versionName !== null;\n\t}\n\n\t/**\n\t * Sets the name of the current version\n\t *\n\t * @param string|null $versionName the name in arbitrary format, or `null` to unset\n\t */\n\tpublic function setVersionName($versionName) {\n\t\t$this->versionName = $versionName !== null ? ((string) $versionName) : null;\n\t}\n\n\t/**\n\t * Returns whether the URL of the official policy in its latest version has been defined\n\t *\n\t * @return bool\n\t */\n\tpublic function hasCanonicalUrl() {\n\t\treturn $this->canonicalUrl !== null;\n\t}\n\n\t/**\n\t * Sets the URL of the official policy in its latest version\n\t *\n\t * @param string|null $canonicalUrl the URL, or `null` to unset\n\t */\n\tpublic function setCanonicalUrl($canonicalUrl) {\n\t\t$this->canonicalUrl = $canonicalUrl !== null ? ((string) $canonicalUrl) : null;\n\t}\n\n\t/**\n\t * Returns whether scopes have been defined that describe which services the policy applies to\n\t *\n\t * @return bool\n\t */\n\tpublic function hasScopes() {\n\t\treturn !empty($this->scopes);\n\t}\n\n\t/**\n\t * Adds a scope that describes which services the policy applies to\n\t *\n\t * @param Scope $scope\n\t */\n\tpublic function addScope(Scope $scope) {\n\t\t$this->scopes[] = $scope;\n\t}\n\n\t/**\n\t * Returns whether data groups have been defined that describe which data is collected and why\n\t *\n\t * @return bool\n\t */\n\tpublic function hasDataGroups() {\n\t\treturn !empty($this->dataGroups);\n\t}\n\n\t/**\n\t * Adds a data group that describes which data is collected and why\n\t *\n\t * @param string $title the title of the group in natural language, e.g. `Registration data` or `Access logs`\n\t * @param string|null $description (optional) the description of the group and of the circumstances of collection in natural language\n\t * @param string[]|null $bases (optional) any number of constants from the {@see DataBasis} class\n\t * @param string[]|null $specialConditions (optional) any number of constants from the {@see DataSpecialCondition} class\n\t * @param string[]|null $purposes (optional) any number of constants from the {@see DataPurpose} class\n\t * @param string|null $requirement (optional) one of the constants from the {@see DataRequirement} class\n\t * @param callable|null $init (optional) a callback that receives the new instance and may initialize it\n\t */\n\tpublic function addDataGroup($title, $description = null, array $bases = null, array $specialConditions = null, array $purposes = null, $requirement = null, callable $init = null) {\n\t\t$this->dataGroups[] = new DataGroup($title, $description, $bases, $specialConditions, $purposes, $requirement, $init);\n\t}\n\n\t/**\n\t * Returns whether user data is sold, rented or traded with third parties\n\t *\n\t * @return bool\n\t */\n\tpublic function isUserDataTraded() {\n\t\treturn $this->userDataTraded;\n\t}\n\n\t/**\n\t * Sets whether user data is sold, rented or traded with third parties\n\t *\n\t * @param bool $userDataTraded\n\t */\n\tpublic function setUserDataTraded($userDataTraded) {\n\t\t$this->userDataTraded = (bool) $userDataTraded;\n\t}\n\n\t/**\n\t * Returns whether the principle of Data Economy, Data Avoidance or Data Minimization is being followed\n\t *\n\t * The principle means that, in all situations and use cases, the service provider aims at collecting\n\t * the minimum amount of user data possible, and, afterwards, user data is deleted again as soon as possible\n\t *\n\t * @return bool\n\t */\n\tpublic function hasDataMinimizationGoal() {\n\t\treturn $this->dataMinimizationGoal;\n\t}\n\n\t/**\n\t * Sets whether the principle of Data Economy, Data Avoidance or Data Minimization is being followed\n\t *\n\t * The principle means that, in all situations and use cases, the service provider aims at collecting\n\t * the minimum amount of user data possible, and, afterwards, user data is deleted again as soon as possible\n\t *\n\t * @param bool $dataMinimizationGoal\n\t */\n\tpublic function setDataMinimizationGoal($dataMinimizationGoal) {\n\t\t$this->dataMinimizationGoal = (bool) $dataMinimizationGoal;\n\t}\n\n\t/**\n\t * Returns whether a minimum age for children has been defined\n\t *\n\t * See \"COPPA\" (USA), \"GDPR\" (EU), etc.\n\t *\n\t * @return bool\n\t */\n\tpublic function hasChildrenMinimumAge() {\n\t\treturn !empty($this->childrenMinimumAge);\n\t}\n\n\t/**\n\t * Sets the minimum age for children\n\t *\n\t * See \"COPPA\" (USA), \"GDPR\" (EU), etc.\n\t *\n\t * @param int|null $childrenMinimumAge the minimum age in years, or `null` to unset\n\t */\n\tpublic function setChildrenMinimumAge($childrenMinimumAge) {\n\t\t$this->childrenMinimumAge = $childrenMinimumAge !== null ? ((int) $childrenMinimumAge) : null;\n\t}\n\n\t/**\n\t * Returns whether the user may opt-out from all emails that are not essential to the operation of the services\n\t *\n\t * In particular, this includes emails sent for marketing or promotional purposes\n\t *\n\t * @return bool\n\t */\n\tpublic function hasPromotionalEmailOptOut() {\n\t\treturn $this->promotionalEmailOptOut;\n\t}\n\n\t/**\n\t * Sets whether the user may opt-out from all emails that are not essential to the operation of the services\n\t *\n\t * In particular, this includes emails sent for marketing or promotional purposes\n\t *\n\t * @param bool $promotionalEmailOptOut\n\t */\n\tpublic function setPromotionalEmailOptOut($promotionalEmailOptOut) {\n\t\t$this->promotionalEmailOptOut = (bool) $promotionalEmailOptOut;\n\t}\n\n\t/**\n\t * Returns whether cookies are used and sent to the user's device\n\t *\n\t * @return bool\n\t */\n\tpublic function hasCookies() {\n\t\treturn $this->hasFirstPartyCookies() || $this->hasThirdPartyCookies();\n\t}\n\n\t/**\n\t * Returns whether first-party cookies are used and sent to the user's device\n\t *\n\t * @return bool\n\t */\n\tpublic function hasFirstPartyCookies() {\n\t\treturn $this->firstPartyCookies;\n\t}\n\n\t/**\n\t * Sets whether first-party cookies are used and sent to the user's device\n\t *\n\t * @param bool $firstPartyCookies\n\t */\n\tpublic function setFirstPartyCookies($firstPartyCookies) {\n\t\t$this->firstPartyCookies = (bool) $firstPartyCookies;\n\t}\n\n\t/**\n\t * Returns whether third-party cookies are used and sent to the user's device\n\t *\n\t * @return bool\n\t */\n\tpublic function hasThirdPartyCookies() {\n\t\treturn $this->thirdPartyCookies;\n\t}\n\n\t/**\n\t * Sets whether third-party cookies are used and sent to the user's device\n\t *\n\t * @param bool $thirdPartyCookies\n\t */\n\tpublic function setThirdPartyCookies($thirdPartyCookies) {\n\t\t$this->thirdPartyCookies = (bool) $thirdPartyCookies;\n\t}\n\n\t/**\n\t * Returns whether users may delete their entire accounts or similar collections of personal data\n\t *\n\t * @return bool\n\t */\n\tpublic function isAccountDeletable() {\n\t\treturn $this->accountDeletable;\n\t}\n\n\t/**\n\t * Sets whether users may delete their entire accounts or similar collections of personal data\n\t *\n\t * @param bool $accountDeletable\n\t */\n\tpublic function setAccountDeletable($accountDeletable) {\n\t\t$this->accountDeletable = (bool) $accountDeletable;\n\t}\n\n\t/**\n\t * Returns whether there are additional copies of user data for backup purposes\n\t *\n\t * @return bool\n\t */\n\tpublic function hasPreservationInBackups() {\n\t\treturn $this->preservationInBackups;\n\t}\n\n\t/**\n\t * Sets whether there are additional copies of user data for backup purposes\n\t *\n\t * @param bool $preservationInBackups\n\t */\n\tpublic function setPreservationInBackups($preservationInBackups) {\n\t\t$this->preservationInBackups = (bool) $preservationInBackups;\n\t}\n\n\t/**\n\t * Returns whether user data may be shared with third-party service providers, vendors, contractors or agents\n\t *\n\t * @return bool\n\t */\n\tpublic function hasThirdPartyServiceProviders() {\n\t\treturn $this->thirdPartyServiceProviders;\n\t}\n\n\t/**\n\t * Sets whether user data may be shared with third-party service providers, vendors, contractors or agents\n\t *\n\t * @param bool $thirdPartyServiceProviders\n\t */\n\tpublic function setThirdPartyServiceProviders($thirdPartyServiceProviders) {\n\t\t$this->thirdPartyServiceProviders = (bool) $thirdPartyServiceProviders;\n\t}\n\n\t/**\n\t * Returns whether user data may be transferred internationally to third countries with proper safeguards for protection\n\t *\n\t * @return bool\n\t */\n\tpublic function hasInternationalTransfers() {\n\t\treturn $this->internationalTransfers;\n\t}\n\n\t/**\n\t * Sets whether user data may be transferred internationally to third countries with proper safeguards for protection\n\t *\n\t * @param bool $internationalTransfers\n\t */\n\tpublic function setInternationalTransfers($internationalTransfers) {\n\t\t$this->internationalTransfers = (bool) $internationalTransfers;\n\t}\n\n\t/**\n\t * Returns whether user data may be part of the assets transferred during mergers, acquisitions or\n\t * other changes of ownership\n\t *\n\t * @return bool\n\t */\n\tpublic function hasTransferUponMergerOrAcquisition() {\n\t\treturn $this->transferUponMergerOrAcquisition;\n\t}\n\n\t/**\n\t * Sets whether user data may be part of the assets transferred during mergers, acquisitions or\n\t * other changes of ownership\n\t *\n\t * @param bool $transferUponMergerOrAcquisition\n\t */\n\tpublic function setTransferUponMergerOrAcquisition($transferUponMergerOrAcquisition) {\n\t\t$this->transferUponMergerOrAcquisition = (bool) $transferUponMergerOrAcquisition;\n\t}\n\n\t/**\n\t * Returns whether all connections to the server are, without exceptions, secured using SSL/TLS\n\t *\n\t * @return bool\n\t */\n\tpublic function hasTlsEverywhere() {\n\t\treturn $this->tlsEverywhere;\n\t}\n\n\t/**\n\t * Sets whether all connections to the server are, without exceptions, secured using SSL/TLS\n\t *\n\t * @param bool $tlsEverywhere\n\t */\n\tpublic function setTlsEverywhere($tlsEverywhere) {\n\t\t$this->tlsEverywhere = (bool) $tlsEverywhere;\n\t}\n\n\t/**\n\t * Returns the name of the data protection authority that is responsible\n\t *\n\t * @return string|null\n\t */\n\tpublic function getCompetentSupervisoryAuthorityName() {\n\t\treturn $this->competentSupervisoryAuthorityName;\n\t}\n\n\t/**\n\t * Returns the URL for more information on the data protection authority that is responsible\n\t *\n\t * @return string|null\n\t */\n\tpublic function getCompetentSupervisoryAuthorityUrl() {\n\t\treturn $this->competentSupervisoryAuthorityUrl;\n\t}\n\n\t/**\n\t * Sets the data protection authority that is responsible\n\t *\n\t * @param string|null $name the name, or `null` to unset\n\t * @param string|null $url (optional) the URL for more information, or `null` to unset\n\t */\n\tpublic function setCompetentSupervisoryAuthority($name = null, $url = null) {\n\t\t$this->competentSupervisoryAuthorityName = ($name !== null) ? ((string) $name) : null;\n\t\t$this->competentSupervisoryAuthorityUrl = ($url !== null) ? ((string) $url) : null;\n\t}\n\n\t/**\n\t * Returns the declared period for notifications to the user about major changes\n\t *\n\t * @return int\n\t */\n\tpublic function getNotificationPeriod() {\n\t\treturn $this->notificationPeriod;\n\t}\n\n\t/**\n\t * Sets the declared period for notifications to the user about major changes\n\t *\n\t * @param int $notificationPeriod\n\t */\n\tpublic function setNotificationPeriod($notificationPeriod) {\n\t\t$this->notificationPeriod = (int) $notificationPeriod;\n\t}\n\n\t/**\n\t * Returns whether the user has the right of access\n\t *\n\t * @return bool\n\t */\n\tpublic function hasRightOfAccess() {\n\t\treturn $this->rightOfAccess;\n\t}\n\n\t/**\n\t * Sets whether the user has the right of access\n\t *\n\t * @param bool $rightOfAccess\n\t */\n\tpublic function setRightOfAccess($rightOfAccess) {\n\t\t$this->rightOfAccess = (bool) $rightOfAccess;\n\t}\n\n\t/**\n\t * Returns whether the user has the right to rectification\n\t *\n\t * @return bool\n\t */\n\tpublic function hasRightToRectification() {\n\t\treturn $this->rightToRectification;\n\t}\n\n\t/**\n\t * Sets whether the user has the right to rectification\n\t *\n\t * @param bool $rightToRectification\n\t */\n\tpublic function setRightToRectification($rightToRectification) {\n\t\t$this->rightToRectification = (bool) $rightToRectification;\n\t}\n\n\t/**\n\t * Returns whether the user has the right to erasure\n\t *\n\t * @return bool\n\t */\n\tpublic function hasRightToErasure() {\n\t\treturn $this->rightToErasure;\n\t}\n\n\t/**\n\t * Sets whether the user has the right to erasure\n\t *\n\t * @param bool $rightToErasure\n\t */\n\tpublic function setRightToErasure($rightToErasure) {\n\t\t$this->rightToErasure = (bool) $rightToErasure;\n\t}\n\n\t/**\n\t * Returns whether the user has the right to restriction of processing\n\t *\n\t * @return bool\n\t */\n\tpublic function hasRightToRestrictProcessing() {\n\t\treturn $this->rightToRestrictProcessing;\n\t}\n\n\t/**\n\t * Sets whether the user has the right to restriction of processing\n\t *\n\t * @param bool $rightToRestrictProcessing\n\t */\n\tpublic function setRightToRestrictProcessing($rightToRestrictProcessing) {\n\t\t$this->rightToRestrictProcessing = (bool) $rightToRestrictProcessing;\n\t}\n\n\t/**\n\t * Returns whether the user has the right to data portability\n\t *\n\t * @return bool\n\t */\n\tpublic function hasRightToDataPortability() {\n\t\treturn $this->rightToDataPortability;\n\t}\n\n\t/**\n\t * Sets whether the user has the right to data portability\n\t *\n\t * @param bool $rightToDataPortability\n\t */\n\tpublic function setRightToDataPortability($rightToDataPortability) {\n\t\t$this->rightToDataPortability = (bool) $rightToDataPortability;\n\t}\n\n\t/**\n\t * Returns whether the user has the right to object\n\t *\n\t * @return bool\n\t */\n\tpublic function hasRightToObject() {\n\t\treturn $this->rightToObject;\n\t}\n\n\t/**\n\t * Sets whether the user has the right to object\n\t *\n\t * @param bool $rightToObject\n\t */\n\tpublic function setRightToObject($rightToObject) {\n\t\t$this->rightToObject = (bool) $rightToObject;\n\t}\n\n\t/**\n\t * Returns whether the user has rights related to automated individual decision-making, including profiling\n\t *\n\t * @return bool\n\t */\n\tpublic function hasRightsRelatedToAutomatedDecisions() {\n\t\treturn $this->rightsRelatedToAutomatedDecisions;\n\t}\n\n\t/**\n\t * Sets whether the user has rights related to automated individual decision-making, including profiling\n\t *\n\t * @param bool $rightsRelatedToAutomatedDecisions\n\t */\n\tpublic function setRightsRelatedToAutomatedDecisions($rightsRelatedToAutomatedDecisions) {\n\t\t$this->rightsRelatedToAutomatedDecisions = (bool) $rightsRelatedToAutomatedDecisions;\n\t}\n\n\t/**\n\t * Returns whether any contact information has been set\n\t *\n\t * @return bool\n\t */\n\tpublic function hasContactInformation() {\n\t\treturn $this->hasContactEmail() || $this->hasContactUrl() || $this->hasContactImage();\n\t}\n\n\t/**\n\t * Returns whether the email address for contact has been defined\n\t *\n\t * @return bool\n\t */\n\tpublic function hasContactEmail() {\n\t\treturn $this->contactEmail !== null;\n\t}\n\n\t/**\n\t * Sets the email address for contact\n\t *\n\t * @param string|null $contactEmail the email address, or `null` to unset\n\t */\n\tpublic function setContactEmail($contactEmail) {\n\t\t$this->contactEmail = $contactEmail !== null ? ((string) $contactEmail) : null;\n\t}\n\n\t/**\n\t * Returns whether the URL of a page with (detailed) contact information has been defined\n\t *\n\t * @return bool\n\t */\n\tpublic function hasContactUrl() {\n\t\treturn $this->contactUrl !== null;\n\t}\n\n\t/**\n\t * Sets the URL of a page with (detailed) contact information\n\t *\n\t * @param string|null $contactUrl the URL, or `null` to unset\n\t */\n\tpublic function setContactUrl($contactUrl) {\n\t\t$this->contactUrl = $contactUrl !== null ? ((string) $contactUrl) : null;\n\t}\n\n\t/**\n\t * Returns whether an image showing (detailed) contact information has been defined\n\t *\n\t * @return bool\n\t */\n\tpublic function hasContactImage() {\n\t\treturn !empty($this->contactImage) && !empty($this->contactImage[0]);\n\t}\n\n\t/**\n\t * Sets an image showing (detailed) contact information\n\t *\n\t * @param string $source the URL of the image to display\n\t * @param string|null $alternativeText (optional) the alternative text to show if the image cannot be displayed\n\t * @param int|null $width (optional) the suggested width of the image in pixels\n\t * @param int|null $height (optional) the suggested height of the image in pixels\n\t */\n\tpublic function setContactImage($source, $alternativeText = null, $width = null, $height = null) {\n\t\t$this->contactImage = [\n\t\t\t($source !== null) ? ((string) $source) : null,\n\t\t\t($source !== null && $alternativeText !== null) ? ((string) $alternativeText) : null,\n\t\t\t($source !== null && $width !== null) ? ((int) $width) : null,\n\t\t\t($source !== null && $height !== null) ? ((int) $height) : null,\n\t\t];\n\t}\n\n\tpublic function __construct() {\n\t\t$this->publishedAt = null;\n\t\t$this->takesEffectAt = null;\n\t\t$this->expiresAt = null;\n\t\t$this->versionName = null;\n\t\t$this->canonicalUrl = null;\n\t\t$this->scopes = [];\n\t\t$this->dataGroups = [];\n\t\t$this->userDataTraded = false;\n\t\t$this->dataMinimizationGoal = true;\n\t\t$this->childrenMinimumAge = self::CHILDREN_MINIMUM_AGE_DEFAULT;\n\t\t$this->promotionalEmailOptOut = true;\n\t\t$this->firstPartyCookies = true;\n\t\t$this->thirdPartyCookies = true;\n\t\t$this->accountDeletable = true;\n\t\t$this->preservationInBackups = true;\n\t\t$this->thirdPartyServiceProviders = true;\n\t\t$this->internationalTransfers = true;\n\t\t$this->transferUponMergerOrAcquisition = true;\n\t\t$this->tlsEverywhere = false;\n\t\t$this->competentSupervisoryAuthorityName = null;\n\t\t$this->competentSupervisoryAuthorityUrl = null;\n\t\t$this->notificationPeriod = self::NOTIFICATION_PERIOD_DEFAULT;\n\t\t$this->rightOfAccess = true;\n\t\t$this->rightToRectification = true;\n\t\t$this->rightToErasure = true;\n\t\t$this->rightToRestrictProcessing = true;\n\t\t$this->rightToDataPortability = true;\n\t\t$this->rightToObject = true;\n\t\t$this->rightsRelatedToAutomatedDecisions = true;\n\t\t$this->contactEmail = null;\n\t\t$this->contactUrl = null;\n\t\t$this->contactImage = null;\n\t}\n\n}\n"
  },
  {
    "path": "src/Scope/AndroidAppScope.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Scope;\n\n/** Scope that describes a mobile app for Android */\nabstract class AndroidAppScope extends MobileAppScope {}\n"
  },
  {
    "path": "src/Scope/AppStoreIosAppScope.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Scope;\n\nuse Delight\\PrivacyPolicy\\Markup\\LinkMarkup;\n\n/** Scope that describes a mobile app for iOS available through Apple's App Store */\nfinal class AppStoreIosAppScope extends IosAppScope {\n\n\t/**\n\t * The format of URLs for iOS apps on the App Store\n\t *\n\t * @internal\n\t *\n\t * @var string\n\t */\n\tconst URL_FORMAT = 'https://itunes.apple.com/app/id%s';\n\n\t/** @var string the track ID, e.g. `54614917093` */\n\tprivate $trackId;\n\t/** @var string the name, e.g. `My iOS App` */\n\tprivate $name;\n\n\t/**\n\t * Returns the track ID\n\t *\n\t * @return string\n\t */\n\tpublic function getTrackId() {\n\t\treturn $this->trackId;\n\t}\n\n\t/**\n\t * @param string $trackId the track ID of the application, e.g. `54614917093`\n\t * @param string $name the name of the application, e.g. `My iOS App`\n\t */\n\tpublic function __construct($trackId, $name) {\n\t\t$this->trackId = (string) $trackId;\n\t\t$this->name = (string) $name;\n\t}\n\n\tprotected function toMarkup() {\n\t\t$target = \\sprintf(self::URL_FORMAT, $this->trackId);\n\n\t\treturn new LinkMarkup($target, $this->name);\n\t}\n\n}\n"
  },
  {
    "path": "src/Scope/IosAppScope.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Scope;\n\n/** Scope that describes a mobile app for iOS */\nabstract class IosAppScope extends MobileAppScope {}\n"
  },
  {
    "path": "src/Scope/MobileAppScope.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Scope;\n\n/** Scope that describes a mobile app */\nabstract class MobileAppScope extends Scope {}\n"
  },
  {
    "path": "src/Scope/PlayStoreAndroidAppScope.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Scope;\n\nuse Delight\\PrivacyPolicy\\Markup\\LinkMarkup;\n\n/** Scope that describes a mobile app for Android available through Google's Play Store */\nfinal class PlayStoreAndroidAppScope extends AndroidAppScope {\n\n\t/**\n\t * The format of URLs for Android apps on the Play Store\n\t *\n\t * @internal\n\t *\n\t * @var string\n\t */\n\tconst URL_FORMAT = 'https://play.google.com/store/apps/details?id=%s';\n\n\t/** @var string the package name, e.g. `com.example.app` */\n\tprivate $packageName;\n\t/** @var string the name, e.g. `My Android App` */\n\tprivate $name;\n\n\t/**\n\t * Returns the package name\n\t *\n\t * @return string\n\t */\n\tpublic function getPackageName() {\n\t\treturn $this->packageName;\n\t}\n\n\t/**\n\t * @param string $packageName the package name of the application, e.g. `com.example.app`\n\t * @param string $name the name of the application, e.g. `My Android App`\n\t */\n\tpublic function __construct($packageName, $name) {\n\t\t$this->packageName = (string) $packageName;\n\t\t$this->name = (string) $name;\n\t}\n\n\tprotected function toMarkup() {\n\t\t$target = \\sprintf(self::URL_FORMAT, $this->packageName);\n\n\t\treturn new LinkMarkup($target, $this->name);\n\t}\n\n}\n"
  },
  {
    "path": "src/Scope/Scope.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Scope;\n\nuse Delight\\PrivacyPolicy\\Markup\\SimpleMarkup;\n\n/** Scope of a policy that describes a single service */\nabstract class Scope extends SimpleMarkup {}\n"
  },
  {
    "path": "src/Scope/WebsiteScope.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Scope;\n\nuse Delight\\PrivacyPolicy\\Markup\\LinkMarkup;\n\n/** Scope that describes a website */\nfinal class WebsiteScope extends Scope {\n\n\t/** @var string the URL, e.g. `https://www.example.com/` */\n\tprivate $url;\n\t/** @var string the name, e.g. `My Website` */\n\tprivate $name;\n\n\t/**\n\t * Returns the URL\n\t *\n\t * @return string\n\t */\n\tpublic function getUrl() {\n\t\treturn $this->url;\n\t}\n\n\t/**\n\t * @param string $url the URL of the website, e.g. `https://www.example.com/`\n\t * @param string $name the name of the website, e.g. `My Website`\n\t */\n\tpublic function __construct($url, $name) {\n\t\t$this->url = (string) $url;\n\t\t$this->name = (string) $name;\n\t}\n\n\tprotected function toMarkup() {\n\t\treturn new LinkMarkup($this->url, $this->name);\n\t}\n\n}\n"
  },
  {
    "path": "src/Throwable/Error.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Base class for all (unchecked) errors */\nabstract class Error extends \\Exception {}\n"
  },
  {
    "path": "src/Throwable/Exception.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Base class for all (checked) exceptions */\nabstract class Exception extends \\Exception {}\n"
  },
  {
    "path": "src/Throwable/InvalidFormatArgumentsError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when the number or the type of the supplied format arguments has been invalid */\nclass InvalidFormatArgumentsError extends Error {}\n"
  },
  {
    "path": "src/Throwable/TranslationNotFoundError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when a translation for a given text has not been found */\nclass TranslationNotFoundError extends Error {}\n"
  },
  {
    "path": "src/Throwable/UnexpectedDataBasisError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when an unexpected lawful basis has been encountered */\nclass UnexpectedDataBasisError extends Error {}\n"
  },
  {
    "path": "src/Throwable/UnexpectedDataPurposeError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when an unexpected data purpose has been encountered */\nclass UnexpectedDataPurposeError extends Error {}\n"
  },
  {
    "path": "src/Throwable/UnexpectedDataRequirementError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when an unexpected data requirement has been encountered */\nclass UnexpectedDataRequirementError extends Error {}\n"
  },
  {
    "path": "src/Throwable/UnexpectedDataSpecialConditionError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when an unexpected special condition for processing has been encountered */\nclass UnexpectedDataSpecialConditionError extends Error {}\n"
  },
  {
    "path": "src/Throwable/UnexpectedDataTypeError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when an unexpected data type has been encountered */\nclass UnexpectedDataTypeError extends Error {}\n"
  },
  {
    "path": "src/Throwable/UnexpectedScopeError.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\nnamespace Delight\\PrivacyPolicy\\Throwable;\n\n/** Error that is thrown when an unexpected scope has been encountered */\nclass UnexpectedScopeError extends Error {}\n"
  },
  {
    "path": "tests/index.php",
    "content": "<?php\n\n/*\n * PHP-PrivacyPolicy (https://github.com/delight-im/PHP-PrivacyPolicy)\n * Copyright (c) delight.im (https://www.delight.im/)\n * Licensed under the MIT License (https://opensource.org/licenses/MIT)\n */\n\n// enable error reporting\n\\error_reporting(E_ALL);\n\\ini_set('display_errors', 'stdout');\n\n// enable assertions\n\\ini_set('assert.active', 1);\n@\\ini_set('zend.assertions', 1);\n\\ini_set('assert.exception', 1);\n\n\\header('Content-type: text/html; charset=utf-8');\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$_GET['lang'] = isset($_GET['lang']) ? (string) $_GET['lang'] : 'en';\n$_GET['variant'] = isset($_GET['variant']) ? (int) $_GET['variant'] : 1;\n\nif ($_GET['lang'] === 'json') {\n\t$policy = new \\Delight\\PrivacyPolicy\\Language\\JsonPrivacyPolicy();\n}\nelseif ($_GET['lang'] === 'de') {\n\tif ($_GET['variant'] === 2) {\n\t\t$policy = new \\Delight\\PrivacyPolicy\\Language\\GermanInformalPrivacyPolicy();\n\t}\n\telse {\n\t\t$policy = new \\Delight\\PrivacyPolicy\\Language\\GermanFormalPrivacyPolicy();\n\t}\n}\nelse {\n\t$policy = new \\Delight\\PrivacyPolicy\\Language\\EnglishPrivacyPolicy();\n}\n\n$policy->setPublishedAt(1393372800);\n$policy->setTakesEffectAt(1394582400);\n$policy->setExpiresAt(1395792000);\n$policy->setVersionName('v3.1.4');\n$policy->setCanonicalUrl('https://www.example.com/privacy.html');\n\n$policy->addScope(\n\tnew \\Delight\\PrivacyPolicy\\Scope\\WebsiteScope('https://www.example.com/', 'example.com')\n);\n$policy->addScope(\n\tnew \\Delight\\PrivacyPolicy\\Scope\\PlayStoreAndroidAppScope('com.example.app', 'Example for Android')\n);\n$policy->addScope(\n\tnew \\Delight\\PrivacyPolicy\\Scope\\AppStoreIosAppScope('54614917093', 'Example for iOS')\n);\n\n$policy->addDataGroup(\n\t'Server logs',\n\t'Whenever you access our services, including your access of any individual part or section of our services, we record certain information about the nature of your access. That information is never combined with information from other data sources and will not be associated with the identity of any account. However, we reserve the right to review the data retrospectively if there is specific evidence supporting the suspicion of a case of fraud or any other illegal activity or illegal use of our services.',\n\t[ \\Delight\\PrivacyPolicy\\Data\\DataBasis::LEGITIMATE_INTERESTS ],\n\tnull,\n\t[ \\Delight\\PrivacyPolicy\\Data\\DataPurpose::ADMINISTRATION ],\n\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\n\tfunction (\\Delight\\PrivacyPolicy\\Data\\DataGroup $group) {\n\t\t$retentionTimeHours = 24 * 14;\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_HTTP_METHOD,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_HTTP_STATUS,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_IP_ADDRESS,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_REFERER,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_SIZE,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_DATETIME,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_URL,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::ACCESS_USERAGENT_STRING,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\t$retentionTimeHours\n\t\t);\n\t}\n);\n\n$policy->addDataGroup(\n\t'Account information',\n\t'When you create an account by signing up, and whenever you use that account by signing in afterwards, we collect the data that you provide to us voluntarily in the course of that process.',\n\t[\n\t\t\\Delight\\PrivacyPolicy\\Data\\DataBasis::CONTRACT,\n\t\t\\Delight\\PrivacyPolicy\\Data\\DataBasis::CONSENT\n\t],\n\t[ \\Delight\\PrivacyPolicy\\Data\\DataSpecialCondition::EXPLICIT_CONSENT ],\n\t[\n\t\t\\Delight\\PrivacyPolicy\\Data\\DataPurpose::ADMINISTRATION,\n\t\t\\Delight\\PrivacyPolicy\\Data\\DataPurpose::FULFILLMENT,\n\t\t\\Delight\\PrivacyPolicy\\Data\\DataPurpose::PERSONALIZATION\n\t],\n\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::OPT_IN,\n\n\tfunction (\\Delight\\PrivacyPolicy\\Data\\DataGroup $group) {\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::USER_EMAIL,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\tnull\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::USER_PASSWORD_HASHED_STRONG,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\tnull\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::USER_NAME_ALIAS,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::OPT_IN,\n\t\t\tnull\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::USER_REGISTRATION_DATETIME,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\tnull\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::USER_LOGIN_DATETIME,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\tnull\n\t\t);\n\n\t\t$group->addElement(\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataType::USER_SIGNATURE,\n\t\t\t\\Delight\\PrivacyPolicy\\Data\\DataRequirement::ALWAYS,\n\t\t\tnull\n\t\t);\n\t}\n);\n\n$policy->setUserDataTraded(false);\n$policy->setDataMinimizationGoal(true);\n$policy->setChildrenMinimumAge(16);\n$policy->setPromotionalEmailOptOut(true);\n$policy->setFirstPartyCookies(true);\n$policy->setThirdPartyCookies(true);\n$policy->setAccountDeletable(true);\n$policy->setPreservationInBackups(true);\n$policy->setThirdPartyServiceProviders(true);\n$policy->setInternationalTransfers(true);\n$policy->setTransferUponMergerOrAcquisition(true);\n$policy->setTlsEverywhere(true);\n$policy->setCompetentSupervisoryAuthority('Estonian Data Protection Inspectorate', 'http://www.aki.ee/en');\n$policy->setNotificationPeriod(30);\n$policy->setRightOfAccess(true);\n$policy->setRightToRectification(true);\n$policy->setRightToErasure(true);\n$policy->setRightToRestrictProcessing(true);\n$policy->setRightToDataPortability(true);\n$policy->setRightToObject(true);\n$policy->setRightsRelatedToAutomatedDecisions(true);\n$policy->setContactEmail('privacy@example.com');\n$policy->setContactUrl('https://www.example.com/contact.html');\n// $policy->setContactImage('https://www.example.com/images/contact.png', 'Jane Doe, 123 Main Street, Anytown, USA', 420, 360);\n\necho '<!DOCTYPE html>';\necho '<html>';\necho '<head>';\necho '<meta charset=\"utf-8\">';\necho '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">';\necho '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">';\necho '<title>PHP-PrivacyPolicy</title>';\necho '</head>';\necho '<body>';\n\necho '<p>';\necho '<a href=\"?lang=en\">English</a>';\necho ' &middot; ';\necho '<a href=\"?lang=de&variant=1\">German (formal)</a>';\necho ' &middot; ';\necho '<a href=\"?lang=de&variant=2\">German (informal)</a>';\necho ' &middot; ';\necho '<a href=\"?lang=json\">JSON</a>';\necho '</p>';\n\necho '<hr>';\n\nif ($policy instanceof \\Delight\\PrivacyPolicy\\HumanPrivacyPolicy) {\n\techo '<h1>' . $policy->getShortTitle() . '</h1>';\n\techo '<h2>' . $policy->getLongTitle() . '</h2>';\n\n\techo '<p>';\n\techo '<a href=\"#html\">HTML</a>';\n\techo ' &middot; ';\n\techo '<a href=\"#plain\">Plain text</a>';\n\techo ' &middot; ';\n\techo '<a href=\"#markdown\">Markdown</a>';\n\techo '</p>';\n\n\techo '<hr>';\n}\n\nif ($policy instanceof \\Delight\\PrivacyPolicy\\Language\\JsonPrivacyPolicy) {\n\techo '<h3>JSON</h3>';\n\techo '<pre>' . $policy->toJson() . '</pre>';\n}\n\nif ($policy instanceof \\Delight\\PrivacyPolicy\\HumanPrivacyPolicy) {\n\techo '<h3 id=\"html\">HTML</h3>';\n\techo $policy->toHtml();\n\n\techo '<hr>';\n\n\techo '<h3 id=\"plain\">Plain text</h3>';\n\techo '<pre>' . $policy->toPlainText() . '</pre>';\n\n\techo '<hr>';\n\n\techo '<h3 id=\"markdown\">Markdown</h3>';\n\techo '<pre>' . $policy->toMarkdown() . '</pre>';\n}\n\necho '</body>';\necho '</html>';\n"
  }
]